diff --git a/.editorconfig b/.editorconfig index 7859dbe3a..ca0ac9aba 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,4 +3,15 @@ root = true # Tab indentation (no size specified) [*.js] -indent_style = tab \ No newline at end of file +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/packages/cli/templates/angular/index.ts b/packages/cli/templates/angular/index.ts index e2907ed11..1dfad0b1b 100644 --- a/packages/cli/templates/angular/index.ts +++ b/packages/cli/templates/angular/index.ts @@ -9,7 +9,7 @@ class AngularFramework implements Framework { this.id = "angular"; this.name = "Angular"; this.projectLibraries = []; - this.projectLibraries.push(require("@igniteui/angular-templates").default as ProjectLibrary); + this.projectLibraries.push(...require("@igniteui/angular-templates").default as ProjectLibrary[]); this.projectLibraries.push(require("./ig-ts") as ProjectLibrary); } } diff --git a/packages/core/types/TemplateDependency.ts b/packages/core/types/TemplateDependency.ts index 85bade001..8012b4150 100644 --- a/packages/core/types/TemplateDependency.ts +++ b/packages/core/types/TemplateDependency.ts @@ -17,4 +17,7 @@ export interface TemplateDependency { /** Add an identifier into `ngModule` exports metadata */ export?: string | string[]; + + /** Describes a dependency for a standalone component's meta */ + standalone?: boolean; } diff --git a/packages/core/typescript/TypeScriptFileUpdate.ts b/packages/core/typescript/TypeScriptFileUpdate.ts index 8df158b1c..0ae33a232 100644 --- a/packages/core/typescript/TypeScriptFileUpdate.ts +++ b/packages/core/typescript/TypeScriptFileUpdate.ts @@ -22,7 +22,7 @@ export class TypeScriptFileUpdate { private requestedImports: Array<{ from: string, imports: string[], edit: boolean }>; private ngMetaEdits: { declarations: string[], - imports: Array<{ name: string, root: boolean }>, + imports: Array<{ name: string, root: boolean, standalone?: boolean }>, providers: string[], exports: string[] }; @@ -42,9 +42,14 @@ export class TypeScriptFileUpdate { if (this.requestedImports.filter(x => x.edit).length) { transforms.push(this.importsTransformer); } - if (Object.keys(this.ngMetaEdits).filter(x => this.ngMetaEdits[x].length).length) { + + // should we support both standalone and module-based components in the same app? + if (this.ngMetaEdits.imports.some(x => x.standalone)) { + transforms.push(this.componentMetaTransformer); + } else if (Object.keys(this.ngMetaEdits).filter(x => this.ngMetaEdits[x].length).length) { transforms.push(this.ngModuleTransformer); } + if (transforms.length) { this.targetSource = ts.transform(this.targetSource, transforms).transformed[0]; } @@ -137,6 +142,26 @@ export class TypeScriptFileUpdate { this.ngMetaEdits.exports.push(...exportsArr); } + /** + * Updates a standalone component's imports metadata. + */ + public addStandaloneImport(dep: TemplateDependency, variables?: { [key: string]: string }) { + const copy = { + import: this.asArray(dep.import, variables), + provide: this.asArray(dep.provide, variables) + }; + if (dep.from) { + // request import + const identifiers = [...copy.import, ...copy.provide]; + this.requestImport(identifiers, Util.applyConfigTransformation(dep.from, variables)); + } + + const imports = copy.import + .map(x => ({ name: x, root: dep.root, standalone: true })) + .filter(x => !this.ngMetaEdits.imports.find(i => i.name === x.name)); + this.ngMetaEdits.imports.push(...imports); + } + //#region File state /** Initializes existing imports info, [re]sets import and `NgModule` edits */ @@ -496,6 +521,43 @@ export class TypeScriptFileUpdate { return ts.visitNode(rootNode, visitor); } + // TODO: extend to allow the modification of multiple metadata properties + /** Transformation to apply `this.ngMetaEdits` to a standalone `Component` metadata imports */ + protected componentMetaTransformer: ts.TransformerFactory = + (context: ts.TransformationContext) => (rootNode: T) => { + const visitComponent: ts.Visitor = (node: ts.Node): ts.Node => { + let importsExpr = null; + const prop = "imports"; + if (node.kind === ts.SyntaxKind.ObjectLiteralExpression && + node.parent && + node.parent.kind === ts.SyntaxKind.CallExpression) { + const obj = (node as ts.ObjectLiteralExpression); + const objProperties = ts.visitNodes(obj.properties, visitor); + const newProps = []; + const importDeps = this.ngMetaEdits.imports; + importsExpr = ts.factory.createArrayLiteralExpression( + importDeps.map(x => TsUtils.createIdentifier(x.name)) + ); + newProps.push(ts.factory.createPropertyAssignment(prop, importsExpr)); + return context.factory.updateObjectLiteralExpression(obj, [ + ...objProperties, + ...newProps + ]); + } else { + node = ts.visitEachChild(node, visitComponent, context); + } + + return node; + }; + const visitCondition: (node: ts.Node) => boolean = (node: ts.Node) => { + return node.kind === ts.SyntaxKind.CallExpression && + node.parent && node.parent.kind === ts.SyntaxKind.Decorator && + (node as ts.CallExpression).expression.getText() === "Component"; + }; + const visitor = this.createVisitor(visitComponent, visitCondition, context); + return ts.visitNode(rootNode, visitor); + } + //#endregion ts.TransformerFactory //#region Formatting diff --git a/packages/igx-templates/IgniteUIForAngularTemplate.ts b/packages/igx-templates/IgniteUIForAngularTemplate.ts index 8fd31851d..99ff06699 100644 --- a/packages/igx-templates/IgniteUIForAngularTemplate.ts +++ b/packages/igx-templates/IgniteUIForAngularTemplate.ts @@ -44,7 +44,7 @@ export class IgniteUIForAngularTemplate implements Template { return Promise.resolve(false); } - return Object.assign({}, options["extraConfig"], this.getBaseVariables(name)); + return Object.assign({}, options["extraConfig"], this.getBaseVariables(name)); } //TODO: rename name to fullName for clarity + in all other places fileName to fullName @@ -62,7 +62,47 @@ export class IgniteUIForAngularTemplate implements Template { // tslint:disable-next-line:no-submodule-imports require("@igniteui/cli-core/typescript").TypeScriptFileUpdate; - if (!(options && options.skipRoute) && App.container.get(FS_TOKEN).fileExists("src/app/app-routing.module.ts")) { + // standalone components + const mainModulePath = path.join(projectPath, `src/app/${modulePath}`); + if (!this.fileExists(mainModulePath)) { + const appRoutesPath = "src/app/app.routes.ts"; + const folderName = this.folderName(name); + const fileName = this.fileName(name); + if (!(options && options.skipRoute) && this.fileExists(appRoutesPath)) { + const rountesConfig = new TsUpdate(path.join(projectPath, appRoutesPath)); + rountesConfig.addRoute( + path.join(projectPath, `src/app/${folderName}/${fileName}.component.ts`), + this.fileName(name), //path + Util.nameFromPath(name) //text + ); + } + + const componentFile = new TsUpdate(path.join(projectPath, `src/app/${folderName}/${fileName}.component.ts`)); + for (const dep of this.dependencies) { + if (dep.from && dep.from.startsWith(".")) { + // relative file dependency + const copy = Object.assign({}, dep); + copy.from = Util.relativePath( + path.join(projectPath, `src/app/${folderName}/${fileName}.component.ts`), + path.join(projectPath, copy.from!), + true, + true); + // can use addNgModuleMeta here instead? + componentFile.addStandaloneImport(copy, + Util.applyDelimiters(this.getBaseVariables(name), this.delimiters.content)); + continue; + } + + componentFile.addStandaloneImport(dep, + Util.applyDelimiters(this.getBaseVariables(name), this.delimiters.content)); + } + + componentFile.finalize(); + return; + } + + // ngModule based components + if (!(options && options.skipRoute) && this.fileExists("src/app/app-routing.module.ts")) { //1) import the component class name, //2) and populate the Routes array with the path and component //for example: { path: 'combo', component: ComboComponent } @@ -76,7 +116,6 @@ export class IgniteUIForAngularTemplate implements Template { //3) add an import of the component class from its file location. //4) populate the declarations portion of the @NgModule with the component class name. - const mainModulePath = path.join(projectPath, `src/app/${modulePath}`); const mainModule = new TsUpdate(mainModulePath); this.addClassDeclaration(mainModule, projectPath, name, modulePath); @@ -85,7 +124,7 @@ export class IgniteUIForAngularTemplate implements Template { if (dep.from && dep.from.startsWith(".")) { // relative file dependency const copy = Object.assign({}, dep); - copy.from = Util.relativePath(mainModulePath, path.join(projectPath, copy.from), true, true); + copy.from = Util.relativePath(mainModulePath, path.join(projectPath, copy.from!), true, true); mainModule.addNgModuleMeta(copy, Util.applyDelimiters(this.getBaseVariables(name), this.delimiters.content)); } else { @@ -101,6 +140,10 @@ export class IgniteUIForAngularTemplate implements Template { } public setExtraConfiguration(extraConfigKeys: {}) { } + public fileExists(filePath: string): boolean { + return App.container.get(FS_TOKEN).fileExists(filePath); + } + protected addClassDeclaration(mainModule: TypeScriptFileUpdate, projPath: string, name: string, modulePath: string) { mainModule.addDeclaration( path.join(projPath, `src/app/${this.folderName(name)}/${this.fileName(name)}.component.ts`), diff --git a/packages/igx-templates/constants.ts b/packages/igx-templates/constants.ts new file mode 100644 index 000000000..d78b0ae46 --- /dev/null +++ b/packages/igx-templates/constants.ts @@ -0,0 +1 @@ +export const IGNITEUI_ANGULAR_PACKAGE = "igniteui-angular@~17.0.0"; diff --git a/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..b371265f1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,86 @@ +

igx-accordion component sample.

+

You can read more about configuring the igx-tabs component in the +README or the +official documentation.

+Single Branch Expand +
+ + + + What has changed about subscription and pricing model? + + + + We have moved to a subscription-based pricing model for all our developer tools. This makes it easier + for you to manage your license subscriptions and allows us to provide a better level of service for you. + + We updated our pricing and packages to provide you with flexible options and the best value. This + includes Ignite UI (formerly Ignite UI for + JavaScript) which includes all of our JavaScript framework + components for web development, including: Angular, ASP.NET (Core and MVC), Blazor, JQuery, React and + Web Components), as well as Infragistics Professional, Infragistics Ultimate, our Ultimate UI products. + + We also offer multi-year subscriptions options with a built-in discount, so you can see the value up + front. With these updates we are confident that we are providing the best platforms and the best price. + + + + + Who will the updated changes impact? + + + The license updates will impact all new and current customers using Ignite UI, Infragistics Professional + and Infragistics Ultimate. Specifically, we have also made updates to our product and packaging for + Ignite UI for JavaScript, Ignite UI for Angular, Ignite UI for React and Ignite UI for Web components. + For more information, please refer to this blog: + + Announcement: + Changes to Ignite UI Product & Packaging + + The pricing has been updated for all products and packages. So, all new or additional licenses will be + sold based on our new pricing and packages. All existing license agreements will be honored and renewed + based upon the current agreement. + + + + + What is the difference between your old model and your current subscription + model + for Ignite UI? + + + For Ignite UI customers, we are moving away from NPM for licensed packages. The current NPM packages + will be replaced with packages that include a “Trial Version” watermark. Licensed packages for Ignite UI + will be available from our cloud hosted ProGet server. + + For more information, please refer to this article: + + Moving + from Trial to Licensed Ignite UI NPM Packages + + + + + What happens if I don’t renew my subscription? + + + Any unlicensed or trial versions of Ignite UI for Angular, React and Web Components will now include + this watermark. + + + + + If I don’t renew my subscription will I still have access to previous + versions of + Infragistics products? + + + Any version of Infragistics software which you have downloaded can continue to be used perpetually. + Access to download any new or previous versions through our customer portal and package feeds will + require maintaining an active subscription by continuing to renew it. + + + +
diff --git a/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b3a275b0d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,17 @@ +$ep-sample-border: 1px solid rgba(174, 174, 174, 0.25); + +.sample-wrapper { + overflow-y: auto; + max-height: 450px; + width: 600px; + margin: 8px; +} + +igx-expansion-panel-body, +igx-switch { + padding: 16px; +} + +igx-expansion-panel { + border: $ep-sample-border; +} diff --git a/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..625a0f81c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { IgxAccordionModule, IgxSwitchModule } from '<%=igxPackage%>'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ NoopAnimationsModule, IgxAccordionModule, IgxSwitchModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..e3436b13a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public singleBranchExpand = false; +} diff --git a/packages/igx-templates/igx-ts-legacy/accordion/default/index.ts b/packages/igx-templates/igx-ts-legacy/accordion/default/index.ts new file mode 100644 index 000000000..be4e6afc5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxAccordionTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Accordion"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "accordion"; + this.projectType = "igx-ts"; + this.name = "Accordion"; + this.description = "Basic IgxAccordion sample"; + this.dependencies = [{ + import: ["IgxAccordionModule", "IgxSwitchModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxAccordionTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/accordion/index.ts b/packages/igx-templates/igx-ts-legacy/accordion/index.ts new file mode 100644 index 000000000..fe488d017 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/accordion/index.ts @@ -0,0 +1,15 @@ + +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxAccordionComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Accordion"; + this.group = "Layouts"; + this.description = `allows users to navigate among multiple collapsible panels displayed in a single container`; + } +} +module.exports = new IgxAccordionComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..20786e56c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,20 @@ +

The igx-autocomplete directive provides a way to enhance a text input by showing a panel of suggested options provided by the developer.

+

You can read more about configuring the igx-autocomplete in the +README or the +official documentation.

+ +
+
+
+ + + + + + + {{town}} + + +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..c1d2440df --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,7 @@ +.sample-content { + padding-top: 100px; +} + +.input-group-form { + width: 300px; +} diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..9857e63cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxAutocompleteModule, IgxDropDownModule, IgxInputGroupModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component, <%=ClassName%>PipeStartsWith } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component, <%=ClassName%>PipeStartsWith], + imports: [FormsModule, IgxDropDownModule, IgxAutocompleteModule, NoopAnimationsModule, IgxInputGroupModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..bbca5266b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,23 @@ +import { Component, Pipe, PipeTransform } from '@angular/core'; +import { Towns } from './towns-data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public towns: string[]; + public townSelected = ''; + + constructor() { + this.towns = Towns; + } +} + +@Pipe({ name: '<%=camelCaseName%>StartsWith' }) +export class <%=ClassName%>PipeStartsWith implements PipeTransform { + public transform(collection: string[], term = '') { + return collection.filter(item => item.toLowerCase().startsWith(term.trim().toLowerCase())); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/towns-data.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/towns-data.ts new file mode 100644 index 000000000..80468c719 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/files/src/app/__path__/towns-data.ts @@ -0,0 +1,27 @@ +export const Towns: string[] = [ + 'Sofia', 'Plovdiv', 'Varna', 'Burgas', 'Ruse', 'Stara Zagora', 'Pleven', 'Dobrich', 'Sliven', 'Shumen', + 'Pernik', 'Haskovo', 'Yambol', 'Pazardzhik', 'Blagoevgrad', 'Veliko Tarnovo', 'Vratsa', 'Gabrovo', 'Asenovgrad', + 'Vidin', 'Kazanlak', 'Kyustendil', 'Kardzhali', 'Montana', 'Dimitrovgrad', 'Targovishte', 'Lovech', 'Silistra', 'Dupnitsa', + 'Svishtov', 'Razgrad', 'Gorna Oryahovitsa', 'Smolyan', 'Petrich', 'Sandanski', 'Samokov', 'Sevlievo', 'Lom', + 'Karlovo', 'Velingrad', 'Nova Zagora', 'Troyan', 'Aytos', 'Botevgrad', 'Gotse Delchev', 'Peshtera', 'Harmanli', 'Karnobat', + 'Svilengrad', 'Panagyurishte', 'Chirpan', 'Popovo', 'Rakovski', 'Radomir', 'Novi Iskar', 'Kozloduy', 'Parvomay', 'Berkovitsa', + 'Cherven Bryag', 'Pomorie', 'Ihtiman', 'Radnevo', 'Provadiya', 'Novi Pazar', 'Razlog', 'Byala Slatina', 'Nesebar', 'Balchik', + 'Kostinbrod', 'Stamboliyski', 'Kavarna', 'Knezha', 'Pavlikeni', 'Mezdra', 'Etropole', 'Levski', 'Teteven', 'Elhovo', 'Bankya', + 'Tryavna', 'Lukovit', 'Tutrakan', 'Sredets', 'Sopot', 'Byala', 'Veliki Preslav', 'Isperih', 'Belene', 'Omurtag', 'Bansko', 'Krichim', + 'Galabovo', 'Devnya', 'Septemvri', 'Rakitovo', 'Lyaskovets', 'Svoge', 'Aksakovo', 'Kubrat', 'Dryanovo', 'Beloslav', 'Pirdop', + 'Lyubimets', 'Momchilgrad', 'Slivnitsa', 'Hisarya', 'Zlatograd', 'Kostenets', 'Devin', 'General Toshevo', 'Simeonovgrad', 'Simitli', + 'Elin Pelin', 'Dolni Chiflik', 'Tervel', 'Dulovo', 'Varshets', 'Kotel', 'Madan', 'Straldzha', 'Saedinenie', 'Bobov Dol', 'Tsarevo', + 'Kuklen', 'Tvarditsa', 'Yakoruda', 'Elena', 'Topolovgrad', 'Bozhurishte', 'Chepelare', 'Oryahovo', 'Sozopol', 'Belogradchik', + 'Perushtitsa', 'Zlatitsa', 'Strazhitsa', 'Krumovgrad', 'Kameno', 'Dalgopol', 'Vetovo', 'Suvorovo', 'Dolni Dabnik', 'Dolna Banya', + 'Pravets', 'Nedelino', 'Polski Trambesh', 'Trastenik', 'Bratsigovo', 'Koynare', 'Godech', 'Slavyanovo', 'Dve Mogili', 'Kostandovo', + 'Debelets', 'Strelcha', 'Sapareva Banya', 'Ignatievo', 'Smyadovo', 'Breznik', 'Sveti Vlas', 'Nikopol', 'Shivachevo', 'Belovo', + 'Tsar Kaloyan', 'Ivaylovgrad', 'Valchedram', 'Marten', 'Glodzhevo', 'Sarnitsa', 'Letnitsa', 'Varbitsa', 'Iskar', 'Ardino', 'Shabla', + 'Rudozem', 'Vetren', 'Kresna', 'Banya', 'Batak', 'Maglizh', 'Valchi Dol', 'Gulyantsi', 'Dragoman', 'Zavet', 'Kran', 'Miziya', + 'Primorsko', 'Sungurlare', 'Dolna Mitropoliya', 'Krivodol', 'Kula', 'Kalofer', 'Slivo Pole', 'Kaspichan', 'Apriltsi', 'Belitsa', + 'Roman', 'Dzhebel', 'Dolna Oryahovitsa', 'Buhovo', 'Gurkovo', 'Pavel Banya', 'Nikolaevo', 'Yablanitsa', 'Kableshkovo', 'Opaka', + 'Rila', 'Ugarchin', 'Dunavtsi', 'Dobrinishte', 'Hadzhidimovo', 'Bregovo', 'Byala Cherkva', 'Zlataritsa', 'Kocherinovo', 'Dospat', + 'Tran', 'Sadovo', 'Laki', 'Koprivshtitsa', 'Malko Tarnovo', 'Loznitsa', 'Obzor', 'Kilifarevo', 'Borovo', + 'Batanovtsi', 'Chernomorets', 'Aheloy', 'Byala', 'Pordim', 'Suhindol', 'Merichleri', 'Glavinitsa', 'Chiprovtsi', 'Kermen', 'Brezovo', + 'Plachkovtsi', 'Zemen', 'Balgarovo', 'Alfatar', 'Boychinovtsi', 'Gramada', 'Senovo', 'Momin Prohod', 'Kaolinovo', 'Shipka', + 'Antonovo', 'Ahtopol', 'Boboshevo', 'Bolyarovo', 'Brusartsi', 'Klisura', 'Dimovo', 'Kiten', 'Pliska', 'Madzharovo', 'Melnik' +]; diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/index.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/index.ts new file mode 100644 index 000000000..a8d5756e0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-custom/index.ts @@ -0,0 +1,25 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Autocomplete"]; + this.controlGroup = "Data Entry & Display"; + this.listInComponentTemplates = true; + this.id = "autocomplete"; + this.projectType = "igx-ts"; + this.name = "Simple Autocomplete"; + this.description = "Simple IgxAutocomplete"; + this.dependencies = [{ + import: ["IgxAutocompleteModule", "IgxDropDownModule", "IgxInputGroupModule"], + from: "<%=igxPackage%>" + }, { + import: ["FormsModule"], + from: "@angular/forms" + }, { + declare: ["<%=ClassName%>PipeStartsWith"], + from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" + }]; + } +} +module.exports = new IgxAutocompleteTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..9ee1a5c3e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,37 @@ +
+

The igx-autocomplete directive provides a way to enhance a text input by showing a panel of suggested options provided by the developer.
+ Using the igx-drop-down as a provider, allows using its functionalities like grouping, templating, etc.

+

You can read more about configuring those components, using the following links:

+ +

The following sample demonstrates igx-drop-down with defined groups:

+
+ + + + + + + + {{town.name}} + + + + + Postal Code: {{postalCode}}" +
+
diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..1f9e217bd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,9 @@ +.enhanced-groups { + width: 300px; + padding-top: 100px; +} + +.content-wrapper { + display: flex; + flex-flow: column; +} diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..1803d31a6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,32 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxAutocompleteModule, IgxDropDownModule, IgxInputGroupModule, IgxToastModule } from '<%=igxPackage%>'; +import { + <%=ClassName%>Component, + <%=ClassName%>PipeStartsWith, + <%=ClassName%>RegionContains } +from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component, <%=ClassName%>PipeStartsWith, <%=ClassName%>RegionContains], + imports: [FormsModule, IgxDropDownModule, IgxAutocompleteModule, NoopAnimationsModule, IgxInputGroupModule, IgxToastModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..ec23b5d31 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,58 @@ +import { Component, Pipe, PipeTransform, ViewChild } from '@angular/core'; +import { IgxToastComponent, ISelectionEventArgs, PositionSettings, HorizontalAlignment, VerticalAlignment } from '<%=igxPackage%>'; +import { Region, Town, townsExtended } from './towns-data-extended'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public regions!: Region[]; + public townSelected!: string; + public postalCode?: number; + private messagePositionSettings: PositionSettings = { + horizontalDirection: HorizontalAlignment.Center, + verticalDirection: VerticalAlignment.Middle + }; + + @ViewChild(IgxToastComponent, { static: true }) + public toast!: IgxToastComponent; + + constructor() { + this.regions = townsExtended; + } + + public getPostalCode(e: ISelectionEventArgs): void { + + // Flatten the structure of the regions array + const allTowns = this.regions.map(region => region.towns).reduce((prev, curr) => prev.concat(curr), []); + + const townEntry = allTowns.find(t => t.name === e.newSelection.value); + + this.postalCode = townEntry?.postalCode; + this.toast.open(undefined, this.messagePositionSettings); + } +} + +@Pipe({ name: '<%=camelCaseName%>StartsWith' }) +export class <%=ClassName%>PipeStartsWith implements PipeTransform { + public transform(collection: Town[], term = '') { + return collection.filter(item => item.name.toLowerCase().startsWith(term.trim().toLowerCase())); + } +} + +@Pipe({ name: '<%=camelCaseName%>RegionContains' }) +export class <%=ClassName%>RegionContains implements PipeTransform { + transform(regions: Region[], term = '') { + return this.filterRegions(regions, term); + } + + private filterRegions(regions: Region[], term: string) { + return regions.filter(region => this.filterTowns(region.towns, term.toLowerCase()).length > 0); + } + + private filterTowns(towns: Town[], term: string) { + return towns.filter(town => town.name.toLowerCase().startsWith(term)); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/towns-data-extended.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/towns-data-extended.ts new file mode 100644 index 000000000..5ba11f23c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/files/src/app/__path__/towns-data-extended.ts @@ -0,0 +1,948 @@ +export interface Town { + name: string; + postalCode: number; +} + +export interface Region { + name: string; + towns: Town[]; +} +export const townsExtended: Region[] = [ + { + name: 'Blagoevgrad', + towns: [ + { + name: 'Bansko', + postalCode: 2770 + }, + { + name: 'Belitsa', + postalCode: 2780 + }, + { + name: 'Blagoevgrad (city)', + postalCode: 2700 + }, + { + name: 'Gotse Delchev', + postalCode: 2900 + }, + { + name: 'Kresna', + postalCode: 2840 + }, + { + name: 'Petrich', + postalCode: 2850 + }, + { + name: 'Razlog', + postalCode: 2760 + }, + { + name: 'Sandanski', + postalCode: 2800 + }, + { + name: 'Simitli', + postalCode: 2730 + }, + { + name: 'Yakoruda', + postalCode: 2790 + } + ] + }, + { + name: 'Burgas', + towns: [ + { + name: 'Aytos', + postalCode: 8500 + }, + { + name: 'Kameno', + postalCode: 8120 + }, + { + name: 'Karnobat', + postalCode: 8400 + }, + { + name: 'Malko Tarnovo', + postalCode: 8350 + }, + { + name: 'Pomorie', + postalCode: 8200 + }, + { + name: 'Primorsko', + postalCode: 8290 + }, + { + name: 'Sozopol', + postalCode: 8130 + }, + { + name: 'Sredets', + postalCode: 8300 + }, + { + name: 'Sungurlare', + postalCode: 8470 + }, + { + name: 'Tsarevo', + postalCode: 7280 + } + ] + }, + { + name: 'Dobrich', + towns: [ + { + name: 'Balchik', + postalCode: 9600 + }, + { + name: 'Dobrich (city)', + postalCode: 9300 + }, + { + name: 'Dobrichka (rural)', + postalCode: 9300 + }, + { + name: 'General Toshevo', + postalCode: 9500 + }, + { + name: 'Kavarna', + postalCode: 9650 + }, + { + name: 'Shabla', + postalCode: 9680 + }, + { + name: 'Tervel', + postalCode: 9450 + } + ] + }, + { + name: 'Gabrovo', + towns: [ + { + name: 'Dryanovo', + postalCode: 5370 + }, + { + name: 'Gabrovo (city)', + postalCode: 5300 + }, + { + name: 'Sevlievo', + postalCode: 5400 + }, + { + name: 'Tryavna', + postalCode: 5350 + } + ] + }, + { + name: 'Haskovo', + towns: [ + { + name: 'Dimitrovgrad', + postalCode: 6400 + }, + { + name: 'Harmanli', + postalCode: 6450 + }, + { + name: 'Haskovo (city)', + postalCode: 6300 + }, + { + name: 'Ivaylovgrad', + postalCode: 6570 + }, + { + name: 'Lyubimets', + postalCode: 6550 + }, + { + name: 'Simeonovgrad', + postalCode: 6490 + }, + { + name: 'Svilengrad', + postalCode: 6500 + }, + { + name: 'Topolovgrad', + postalCode: 6560 + } + ] + }, + { + name: 'Kardzhali', + towns: [ + { + name: 'Ardino', + postalCode: 6750 + }, + { + name: 'Krumovgrad', + postalCode: 6900 + }, + { + name: 'Momchilgrad', + postalCode: 6800 + } + ] + }, + { + name: 'Kyustendil', + towns: [ + { + name: 'Boboshevo', + postalCode: 2660 + }, + { + name: 'Bobov dol', + postalCode: 2670 + }, + { + name: 'Dupnitsa', + postalCode: 2600 + }, + { + name: 'Kocherinovo', + postalCode: 2640 + }, + { + name: 'Kyustendil (city)', + postalCode: 2500 + }, + { + name: 'Rila', + postalCode: 2630 + }, + { + name: 'Sapareva banya', + postalCode: 2650 + } + ] + }, + { + name: 'Lovech', + towns: [ + { + name: 'Apriltsi', + postalCode: 5641 + }, + { + name: 'Letnitsa', + postalCode: 5570 + }, + { + name: 'Lovech (city)', + postalCode: 5500 + }, + { + name: 'Lukovit', + postalCode: 5770 + }, + { + name: 'Teteven', + postalCode: 5700 + }, + { + name: 'Troyan', + postalCode: 5600 + }, + { + name: 'Yablanitsa', + postalCode: 5750 + } + ] + }, + { + name: 'Montana', + towns: [ + { + name: 'Berkovitsa', + postalCode: 3500 + }, + { + name: 'Boychinovtsi', + postalCode: 3430 + }, + { + name: 'Brusartsi', + postalCode: 3680 + }, + { + name: 'Chiprovtsi', + postalCode: 3460 + }, + { + name: 'Lom', + postalCode: 3600 + }, + { + name: 'Montana (city)', + postalCode: 3400 + }, + { + name: 'Varshets', + postalCode: 3540 + } + ] + }, + { + name: 'Pazardzhik', + towns: [ + { + name: 'Velingrad', + postalCode: 4600 + }, + { + name: 'Septemvri', + postalCode: 4490 + }, + { + name: 'Panagyurishte', + postalCode: 4500 + }, + { + name: 'Peshtera', + postalCode: 4550 + }, + { + name: 'Rakitovo', + postalCode: 4640 + }, + { + name: 'Bratsigovo', + postalCode: 4579 + }, + { + name: 'Belovo', + postalCode: 4470 + }, + { + name: 'Batak', + postalCode: 4580 + }, + { + name: 'Strelcha', + postalCode: 4530 + } + ] + }, + { + name: 'Pernik', + towns: [ + { + name: 'Pernik (city)', + postalCode: 2300 + }, + { + name: 'Radomir', + postalCode: 2400 + }, + { + name: 'Zemen', + postalCode: 2440 + } + ] + }, + { + name: 'Pleven', + towns: [ + { + name: 'Belene', + postalCode: 5930 + }, + { + name: 'Gulyantsi', + postalCode: 5960 + }, + { + name: 'Dolna Mitropoliya', + postalCode: 5855 + }, + { + name: 'Dolni Dabnik', + postalCode: 5870 + }, + { + name: 'Levski', + postalCode: 5900 + }, + { + name: 'Nikopol', + postalCode: 5940 + }, + { + name: 'Iskar', + postalCode: 5868 + }, + { + name: 'Pleven (city)', + postalCode: 5800 + }, + { + name: 'Pordim', + postalCode: 5898 + }, + { + name: 'Cherven Bryag', + postalCode: 5980 + } + ] + }, + { + name: 'Plovdiv', + towns: [ + { + name: 'Asenovgrad', + postalCode: 4230 + }, + { + name: 'Brezovo', + postalCode: 4160 + }, + { + name: 'Karlovo', + postalCode: 4300 + }, + { + name: 'Krichim', + postalCode: 4220 + }, + { + name: 'Maritsa (Plovdiv rural)', + postalCode: 4000 + }, + { + name: 'Perushtitsa', + postalCode: 4225 + }, + { + name: 'Plovdiv (city)', + postalCode: 4000 + }, + { + name: 'Parvomay', + postalCode: 4270 + }, + { + name: 'Rakovski', + postalCode: 4150 + }, + { + name: 'Rodopi (Plovdiv rural)', + postalCode: 4000 + }, + { + name: 'Sadovo', + postalCode: 4122 + }, + { + name: 'Sopot', + postalCode: 4330 + }, + { + name: 'Stamboliyski', + postalCode: 4210 + }, + { + name: 'Saedinenie', + postalCode: 4190 + } + ] + }, + { + name: 'Razgrad', + towns: [ + { + name: 'Isperih', + postalCode: 7400 + }, + { + name: 'Kubrat', + postalCode: 7300 + }, + { + name: 'Loznitsa', + postalCode: 7290 + }, + { + name: 'Razgrad (city)', + postalCode: 7200 + }, + { + name: 'Tsar Kaloyan', + postalCode: 7280 + }, + { + name: 'Zavet', + postalCode: 7330 + } + ] + }, + { + name: 'Ruse', + towns: [ + { + name: 'Borovo', + postalCode: 7174 + }, + { + name: 'Byala', + postalCode: 7100 + }, + { + name: 'Vetovo', + postalCode: 7080 + }, + { + name: 'Dve Mogili', + postalCode: 7150 + }, + { + name: 'Slivo Pole', + postalCode: 7060 + } + ] + }, + { + name: 'Shumen', + towns: [ + { + name: 'Varbitsa', + postalCode: 9870 + }, + { + name: 'Kaolinovo', + postalCode: 9960 + }, + { + name: 'Kaspichan', + postalCode: 9930 + }, + { + name: 'Novi Pazar', + postalCode: 9900 + }, + { + name: 'Veliki Preslav', + postalCode: 9850 + }, + { + name: 'Smyadovo', + postalCode: 9820 + } + ] + }, + { + name: 'Silistra', + towns: [ + { + name: 'Alfatar', + postalCode: 7570 + }, + { + name: 'Glavinitsa', + postalCode: 7630 + }, + { + name: 'Dulovo', + postalCode: 7650 + }, + { + name: 'Silistra (city)', + postalCode: 7500 + }, + { + name: 'Tutrakan', + postalCode: 7600 + } + ] + }, + { + name: 'Sliven', + towns: [ + { + name: 'Kotel', + postalCode: 8970 + }, + { + name: 'Nova Zagora', + postalCode: 8900 + }, + { + name: 'Sliven (city)', + postalCode: 8800 + }, + { + name: 'Tvarditsa', + postalCode: 8890 + } + ] + }, + { + name: 'Smolyan', + towns: [ + { + name: 'Chepelare', + postalCode: 4850 + }, + { + name: 'Devin', + postalCode: 4800 + }, + { + name: 'Dospat', + postalCode: 4831 + }, + { + name: 'Madan', + postalCode: 4900 + }, + { + name: 'Nedelino', + postalCode: 4990 + }, + { + name: 'Rudozem', + postalCode: 4960 + }, + { + name: 'Smolyan (city)', + postalCode: 4700 + }, + { + name: 'Zlatograd', + postalCode: 4980 + } + ] + }, + { + name: 'Sofia City', + towns: [ + { + name: 'Dolni Bogrov', + postalCode: 5870 + }, + { + name: 'Dolni Pasarel', + postalCode: 5870 + }, + { + name: 'Klisura', + postalCode: 4341 + }, + { + name: 'Kubratovo', + postalCode: 7300 + } + ] + }, + { + name: 'Sofia', + towns: [ + { + name: 'Botevgrad', + postalCode: 2140 + }, + + { + name: 'Dolna Banya', + postalCode: 5855 + }, + { + name: 'Dragoman', + postalCode: 2210 + }, + { + name: 'Elin Pelin', + postalCode: 2100 + }, + { + name: 'Etropole', + postalCode: 2180 + }, + { + name: 'Godech', + postalCode: 2240 + }, + { + name: 'Gorna Malina', + postalCode: 5100 + }, + { + name: 'Ihtiman', + postalCode: 2050 + }, + { + name: 'Koprivshtitsa', + postalCode: 2077 + }, + { + name: 'Kostenets', + postalCode: 2030 + }, + { + name: 'Kostinbrod', + postalCode: 2230 + }, + { + name: 'Pirdop', + postalCode: 2070 + }, + { + name: 'Pravets', + postalCode: 2161 + }, + { + name: 'Samokov', + postalCode: 2000 + }, + { + name: 'Slivnitsa', + postalCode: 2200 + }, + { + name: 'Svoge', + postalCode: 2260 + }, + { + name: 'Zlatitsa', + postalCode: 2080 + } + ] + }, + { + name: 'Stara Zagora', + towns: [ + { + name: 'Chirpan', + postalCode: 6200 + }, + { + name: 'Gurkovo', + postalCode: 6199 + }, + { + name: 'Nikolaevo', + postalCode: 6190 + }, + { + name: 'Pavel Banya', + postalCode: 6155 + }, + { + name: 'Radnevo', + postalCode: 6260 + }, + { + name: 'Stara Zagora (city)', + postalCode: 6000 + } + ] + }, + { + name: 'Targovishte', + towns: [ + { + name: 'Targovishte (city)', + postalCode: 7700 + }, + { + name: 'Popovo', + postalCode: 7800 + }, + { + name: 'Omurtag', + postalCode: 7900 + }, + { + name: 'Antonovo', + postalCode: 7970 + }, + { + name: 'Opaka', + postalCode: 7840 + } + ] + }, + { + name: 'Varna', + towns: [ + { + name: 'Beloslav', + postalCode: 9150 + }, + { + name: 'Varna (city)', + postalCode: 9000 + }, + { + name: 'Dolni Chiflik', + postalCode: 5870 + }, + { + name: 'Devnya', + postalCode: 9160 + }, + { + name: 'Suvorovo', + postalCode: 9170 + }, + { + name: 'Byala', + postalCode: 9101 + } + ] + }, + { + name: 'Veliko Tarnovo', + towns: [ + { + name: 'Elena', + postalCode: 5070 + }, + { + name: 'Gorna Oryahovitsa', + postalCode: 5100 + }, + { + name: 'Lyaskovets', + postalCode: 5140 + }, + { + name: 'Pavlikeni', + postalCode: 5200 + }, + { + name: 'Polski Trambesh', + postalCode: 5180 + }, + { + name: 'Strazhitsa', + postalCode: 5150 + }, + { + name: 'Suhindol', + postalCode: 5240 + }, + { + name: 'Svishtov', + postalCode: 5250 + }, + { + name: 'Veliko Tarnovo (city)', + postalCode: 5000 + }, + { + name: 'Zlataritsa', + postalCode: 5090 + } + ] + }, + { + name: 'Vidin', + towns: [ + { + name: 'Belogradchik', + postalCode: 3900 + }, + { + name: 'Bregovo', + postalCode: 3790 + }, + { + name: 'Vidin (city)', + postalCode: 3700 + }, + { + name: 'Gramada', + postalCode: 3830 + }, + { + name: 'Dimovo', + postalCode: 3750 + }, + { + name: 'Kula', + postalCode: 3800 + } + ] + }, + { + name: 'Vratsa', + towns: [ + { + name: 'Byala Slatina', + postalCode: 3200 + }, + { + name: 'Vratsa', + postalCode: 3000 + }, + { + name: 'Kozloduy', + postalCode: 3320 + }, + { + name: 'Krivodol', + postalCode: 3060 + }, + { + name: 'Mezdra', + postalCode: 3100 + }, + { + name: 'Mizia', + postalCode: 3330 + }, + { + name: 'Oryahovo', + postalCode: 3300 + }, + { + name: 'Roman', + postalCode: 3130 + } + ] + }, + { + name: 'Yambol', + towns: [ + { + name: 'Dobrich', + postalCode: 9300 + }, + { + name: 'Bolyarovo', + postalCode: 8720 + }, + { + name: 'Elhovo', + postalCode: 8700 + }, + { + name: 'Yambol (city)', + postalCode: 8600 + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/index.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/index.ts new file mode 100644 index 000000000..e42bbb87d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/autocomplete-extended/index.ts @@ -0,0 +1,28 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Autocomplete"]; + this.controlGroup = "Data Entry & Display"; + this.listInComponentTemplates = true; + this.id = "enhanced-autocomplete"; + this.projectType = "igx-ts"; + this.name = "Enhanced Autocomplete"; + this.description = "IgxAutocomplete with enhanced groups"; + this.dependencies = [{ + import: ["IgxAutocompleteModule", "IgxDropDownModule", "IgxInputGroupModule", "IgxToastModule"], + from: "<%=igxPackage%>" + }, { + import: ["FormsModule"], + from: "@angular/forms" + }, { + declare: ["<%=ClassName%>PipeStartsWith"], + from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" + }, { + declare: ["<%=ClassName%>RegionContains"], + from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" + }]; + } +} +module.exports = new IgxAutocompleteTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/autocomplete/index.ts b/packages/igx-templates/igx-ts-legacy/autocomplete/index.ts new file mode 100644 index 000000000..c3604fcc8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/autocomplete/index.ts @@ -0,0 +1,11 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxAutocompleteComponent extends BaseComponent { + constructor() { + super(__dirname); + this.name = "Autocomplete"; + this.group = "Data Entry & Display"; + this.description = "enhances text input by showing an IgxDropdown with suggested options"; + } +} +module.exports = new IgxAutocompleteComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..d9319c20f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,50 @@ +
+

+ You can read more about configuring the bullet graph component in the + official documentation page. + +

+
+
+ + + +
+ +
+ + + +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..d5afcebec --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,26 @@ +.sample-container { + display: flex; + flex-direction: column; +} + +.buttons-container { + display: flex; + margin-bottom: 5px; +} + +.sample-button { + margin: 3px; + flex-grow: 1; + height: 30px; + font: 12px Titillium Web, sans-serif; + min-width:5.5rem; + height:2.25rem; + font-size:.875rem; + font-weight:600; + line-height:1; + text-align:center; + border:none; + border-radius:2px; + text-transform:uppercase; + cursor:pointer; +} diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..c024b58a6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,29 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxBulletGraphModule } from 'igniteui-angular-gauges'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxBulletGraphModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + // disable animation + component.bulletGraph.transitionDuration = 0; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..11bfab0c4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,228 @@ + +import { AfterViewInit, Component, ViewEncapsulation, ViewChild } from '@angular/core'; +import { IgxBulletGraphComponent, IgxLinearGraphRangeComponent } from 'igniteui-angular-gauges'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component implements AfterViewInit { + @ViewChild('bulletGraph', { static: true }) + public bulletGraph!: IgxBulletGraphComponent; + + public ngAfterViewInit(): void { + // enabling animation duration (in milliseconds) + this.bulletGraph.transitionDuration = 500; + this.AnimateToGauge3(); + } + + public AnimateToGauge3(): void { + this.bulletGraph.minimumValue = 0; + this.bulletGraph.maximumValue = 120; + this.bulletGraph.value = 70; + this.bulletGraph.interval = 10; + + // setting appearance of labels + this.bulletGraph.labelInterval = 10; + this.bulletGraph.labelExtent = 0.02; + + // setting custom appearance of performance bar + this.bulletGraph.valueInnerExtent = 0.5; + this.bulletGraph.valueOuterExtent = 0.7; + this.bulletGraph.valueBrush = '#000000'; + + // setting custom appearance of target bar + this.bulletGraph.targetValueBrush = '#000000'; + this.bulletGraph.targetValueBreadth = 10; + this.bulletGraph.targetValue = 90; + + // setting appearance of major/minor ticks + this.bulletGraph.minorTickCount = 5; + this.bulletGraph.minorTickEndExtent = 0.10; + this.bulletGraph.minorTickStartExtent = 0.20; + this.bulletGraph.tickStartExtent = 0.20; + this.bulletGraph.tickEndExtent = 0.05; + this.bulletGraph.tickStrokeThickness = 2; + + // setting custom gauge ranges + const range1 = new IgxLinearGraphRangeComponent(); + range1.startValue = 0; + range1.endValue = 40; + const range2 = new IgxLinearGraphRangeComponent(); + range2.startValue = 40; + range2.endValue = 80; + const range3 = new IgxLinearGraphRangeComponent(); + range3.startValue = 80; + range3.endValue = 120; + + this.bulletGraph.rangeBrushes = [ '#FF9800', '#F96232', '#C62828']; + this.bulletGraph.rangeOutlines = [ '#FF9800', '#F96232', '#C62828']; + this.bulletGraph.ranges.clear(); + this.bulletGraph.ranges.add(range1); + this.bulletGraph.ranges.add(range2); + this.bulletGraph.ranges.add(range3); + + // setting extent of all gauge ranges + for (let i = 0; i < this.bulletGraph.ranges.count; i++) { + const range = this.bulletGraph.ranges.item(i); + range.innerStartExtent = 0.2; + range.innerEndExtent = 0.2; + range.outerStartExtent = 0.95; + range.outerEndExtent = 0.95; + } + + // setting extent of gauge scale + this.bulletGraph.scaleBackgroundThickness = 0.5; + this.bulletGraph.scaleBackgroundBrush = '#dbdbdb'; + this.bulletGraph.scaleBackgroundOutline = 'gray'; + this.bulletGraph.scaleStartExtent = 0.05; + this.bulletGraph.scaleEndExtent = 0.95; + this.bulletGraph.scaleBackgroundThickness = 0; + + // setting appearance of backing fill and outline + this.bulletGraph.backingBrush = '#f7f7f7'; + this.bulletGraph.backingOutline = '#d1d1d1'; + this.bulletGraph.backingStrokeThickness = 0; + + } + + public AnimateToGauge2(): void { + this.bulletGraph.minimumValue = 100; + this.bulletGraph.maximumValue = 200; + this.bulletGraph.value = 120; + this.bulletGraph.interval = 10; + + // setting appearance of labels + this.bulletGraph.labelInterval = 10; + this.bulletGraph.labelExtent = 0.02; + + // setting custom appearance of performance bar + this.bulletGraph.valueInnerExtent = 0.5; + this.bulletGraph.valueOuterExtent = 0.7; + this.bulletGraph.valueBrush = '#000000'; + + // setting custom appearance of target bar + this.bulletGraph.targetValueBrush = '#000000'; + this.bulletGraph.targetValueBreadth = 10; + this.bulletGraph.targetValue = 180; + + // setting appearance of major/minor ticks + this.bulletGraph.minorTickCount = 5; + this.bulletGraph.minorTickEndExtent = 0.10; + this.bulletGraph.minorTickStartExtent = 0.20; + this.bulletGraph.tickStartExtent = 0.20; + this.bulletGraph.tickEndExtent = 0.05; + this.bulletGraph.tickStrokeThickness = 2; + + // setting custom gauge ranges + const range1 = new IgxLinearGraphRangeComponent(); + range1.startValue = 100; + range1.endValue = 125; + const range2 = new IgxLinearGraphRangeComponent(); + range2.startValue = 125; + range2.endValue = 150; + const range3 = new IgxLinearGraphRangeComponent(); + range3.startValue = 150; + range3.endValue = 175; + const range4 = new IgxLinearGraphRangeComponent(); + range4.startValue = 175; + range4.endValue = 200; + + this.bulletGraph.rangeBrushes = [ '#0078C8', '#0099FF', '#21A7FF', '#4FB9FF']; + this.bulletGraph.rangeOutlines = [ '#0078C8', '#0099FF', '#21A7FF', '#4FB9FF']; + this.bulletGraph.ranges.clear(); + this.bulletGraph.ranges.add(range1); + this.bulletGraph.ranges.add(range2); + this.bulletGraph.ranges.add(range3); + this.bulletGraph.ranges.add(range4); + + // setting extent of all gauge ranges + for (let i = 0; i < this.bulletGraph.ranges.count; i++) { + const range = this.bulletGraph.ranges.item(i); + range.innerStartExtent = 0.2; + range.innerEndExtent = 0.2; + range.outerStartExtent = 0.95; + range.outerEndExtent = 0.95; + } + + // setting extent of gauge scale + this.bulletGraph.scaleBackgroundThickness = 0.5; + this.bulletGraph.scaleBackgroundBrush = '#dbdbdb'; + this.bulletGraph.scaleBackgroundOutline = 'gray'; + this.bulletGraph.scaleStartExtent = 0.05; + this.bulletGraph.scaleEndExtent = 0.95; + this.bulletGraph.scaleBackgroundThickness = 0; + + // setting appearance of backing fill and outline + this.bulletGraph.backingBrush = '#f7f7f7'; + this.bulletGraph.backingOutline = '#d1d1d1'; + this.bulletGraph.backingStrokeThickness = 0; + } + + public AnimateToGauge1(): void { + this.bulletGraph.minimumValue = 0; + this.bulletGraph.maximumValue = 80; + this.bulletGraph.value = 70; + this.bulletGraph.interval = 20; + + // setting appearance of labels + this.bulletGraph.labelInterval = 20; + this.bulletGraph.labelExtent = 0.02; + + // setting custom appearance of performance bar + this.bulletGraph.valueInnerExtent = 0.5; + this.bulletGraph.valueOuterExtent = 0.7; + this.bulletGraph.valueBrush = '#000000'; + + // setting custom appearance of target bar + this.bulletGraph.targetValueBrush = '#000000'; + this.bulletGraph.targetValueBreadth = 10; + this.bulletGraph.targetValue = 60; + + // setting appearance of major/minor ticks + this.bulletGraph.minorTickCount = 5; + this.bulletGraph.minorTickEndExtent = 0.10; + this.bulletGraph.minorTickStartExtent = 0.20; + this.bulletGraph.tickStartExtent = 0.20; + this.bulletGraph.tickEndExtent = 0.05; + this.bulletGraph.tickStrokeThickness = 2; + + // setting custom gauge ranges + const range1 = new IgxLinearGraphRangeComponent(); + range1.startValue = 0; + range1.endValue = 40; + const range2 = new IgxLinearGraphRangeComponent(); + range2.startValue = 40; + range2.endValue = 80; + + this.bulletGraph.rangeBrushes = [ '#a4bd29', '#F86232' ]; + this.bulletGraph.rangeOutlines = [ '#a4bd29', '#F86232' ]; + this.bulletGraph.ranges.clear(); + this.bulletGraph.ranges.add(range1); + this.bulletGraph.ranges.add(range2); + + // setting extent of all gauge ranges + for (let i = 0; i < this.bulletGraph.ranges.count; i++) { + const range = this.bulletGraph.ranges.item(i); + range.innerStartExtent = 0.2; + range.innerEndExtent = 0.2; + range.outerStartExtent = 0.95; + range.outerEndExtent = 0.95; + } + + // setting extent of gauge scale + this.bulletGraph.scaleBackgroundThickness = 0.5; + this.bulletGraph.scaleBackgroundBrush = '#dbdbdb'; + this.bulletGraph.scaleBackgroundOutline = 'gray'; + this.bulletGraph.scaleStartExtent = 0.05; + this.bulletGraph.scaleEndExtent = 0.95; + this.bulletGraph.scaleBackgroundThickness = 0; + + // setting appearance of backing fill and outline + this.bulletGraph.backingBrush = '#f7f7f7'; + this.bulletGraph.backingOutline = '#d1d1d1'; + this.bulletGraph.backingStrokeThickness = 0; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/default/index.ts b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/index.ts new file mode 100644 index 000000000..20da84643 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/default/index.ts @@ -0,0 +1,20 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxBulletGraphTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Bullet Graph"]; + this.controlGroup = "Gauges"; + this.listInComponentTemplates = true; + this.id = "bullet-graph"; + this.projectType = "igx-ts"; + this.name = "Bullet Graph"; + this.description = "IgxBulletGraph with different animations."; + this.dependencies = [{ + import: ["IgxBulletGraphModule"], + from: "igniteui-angular-gauges" + }]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0"]; + } +} +module.exports = new IgxBulletGraphTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/bullet-graph/index.ts b/packages/igx-templates/igx-ts-legacy/bullet-graph/index.ts new file mode 100644 index 000000000..787f3ce9c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/bullet-graph/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxBulletGraphAnimationComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Bullet Graph"; + this.group = "Gauges"; + this.description = "allows for a linear and concise view of measures compared against a scale."; + } +} +module.exports = new IgxBulletGraphAnimationComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..90ec6398c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,7 @@ +
+

igx-calendar component with <%=selectionMode%>

+

You can read more about configuring the igx-calendar component in the + README or the + official documentation.

+ > +
diff --git a/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..bec8b5392 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxCalendarModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxCalendarModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..7b07c7f2b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/calendar/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,9 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component { } diff --git a/packages/igx-templates/igx-ts-legacy/calendar/default/index.ts b/packages/igx-templates/igx-ts-legacy/calendar/default/index.ts new file mode 100644 index 000000000..6e826d6f6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/calendar/default/index.ts @@ -0,0 +1,64 @@ +import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxCalendarTemplate extends IgniteUIForAngularTemplate { + private userExtraConfiguration: {} = {}; + constructor() { + super(__dirname); + this.components = ["Calendar"]; + this.controlGroup = "Scheduling"; + this.listInComponentTemplates = true; + this.id = "calendar"; + this.projectType = "igx-ts"; + this.name = "Calendar"; + this.description = "IgxCalendar with single selection"; + this.dependencies = [ + { import: "IgxCalendarModule", from: "<%=igxPackage%>" } + ]; + + this.hasExtraConfiguration = true; + } + + public setExtraConfiguration(extraConfigKeys: {}) { + this.userExtraConfiguration = extraConfigKeys; + } + + public getExtraConfiguration(): ControlExtraConfiguration[] { + return [{ + choices: ["Single selection", "Multi selection", "Range selection"], + default: "Single selection", + key: "selectionType", + message: "Choose selection type for the igx-calendar", + type: ControlExtraConfigType.Choice + }]; + } + + public generateConfig(name: string, ...options: any[]): {[key: string]: any} { + let selectionType = ""; + let selectionMode = ""; + + if (this.userExtraConfiguration["selectionType"]) { + const type = this.userExtraConfiguration["selectionType"] as string; + selectionMode = type; + switch (type) { + case "Single selection": + selectionType = ""; + break; + case "Multi selection": + selectionType = 'selection="multi"'; + break; + case "Range selection": + selectionType = 'selection="range"'; + break; + } + } + + const extraConfig = { + selectionMode, + selectionType + }; + + return super.generateConfig(name, { extraConfig }); + } +} +module.exports = new IgxCalendarTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/calendar/index.ts b/packages/igx-templates/igx-ts-legacy/calendar/index.ts new file mode 100644 index 000000000..fee20890f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/calendar/index.ts @@ -0,0 +1,10 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxCalendarComponent extends BaseComponent { + constructor() { + super(__dirname); + this.name = "Calendar"; + this.group = "Scheduling"; + } +} +module.exports = new IgxCalendarComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..3194c612c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,11 @@ +

igx-carousel component.

+

You can read more about configuring the igx-carousel component in the +README or the +official documentation page.

+ diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..6e7692029 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,21 @@ +:host { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.carousel-container { + width: 80%; + min-height: 50%; + + img { + width: auto; + margin: 0 auto; + display: flex; + } +} +@media only screen and (max-width: 768px) { + .carousel-container { + width: 100%; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..e3cfd8396 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxCarouselModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxCarouselModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..1094ac4b0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,33 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + + public slides: Slide[] = []; + public interval = 3000; + public pause = true; + public loop = true; + constructor() { } + + public ngOnInit() { + this.addNewSlide(); + } + + public addNewSlide() { + this.slides.push( + { image: 'assets/slide1@x2.jpg' }, + { image: 'assets/slide2@x2.jpg' }, + { image: 'assets/slide3@x2.jpg' }, + { image: 'assets/slide4@x2.jpg' } + ); + } +} + +interface Slide { + image: string; + active?: boolean; +} diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide1@x2.jpg b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide1@x2.jpg new file mode 100644 index 000000000..d9f179229 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide1@x2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide2@x2.jpg b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide2@x2.jpg new file mode 100644 index 000000000..1238e37ff Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide2@x2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide3@x2.jpg b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide3@x2.jpg new file mode 100644 index 000000000..a17fed9a5 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide3@x2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide4@x2.jpg b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide4@x2.jpg new file mode 100644 index 000000000..60f704fdc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/carousel/default/files/src/assets/slide4@x2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/carousel/default/index.ts b/packages/igx-templates/igx-ts-legacy/carousel/default/index.ts new file mode 100644 index 000000000..6a65482e9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxCarouselTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Carousel"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "carousel"; + this.projectType = "igx-ts"; + this.name = "Carousel"; + this.description = "basic IgxCarousel"; + this.dependencies = [ + { import: "IgxCarouselModule", from: "<%=igxPackage%>" }, + { import: "CommonModule", from: "@angular/common"} + ]; + } +} +module.exports = new IgxCarouselTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/carousel/index.ts b/packages/igx-templates/igx-ts-legacy/carousel/index.ts new file mode 100644 index 000000000..f5f2ef07c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/carousel/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxCarouselComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Carousel"; + this.group = "Layouts"; + this.description = `browse or navigate through a collection of slides, image galleries, + cards, or page-based interfaces`; + } +} +module.exports = new IgxCarouselComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..80b880823 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,21 @@ +

<%=description%>

+
+ Chart Type: + +
+ + diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b9bc65ea4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,3 @@ +:host { + width: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..286b7463c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { IgxCategoryChartModule } from 'igniteui-angular-charts'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [FormsModule, IgxCategoryChartModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..10a6895aa --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; +import { CategoryChartType } from 'igniteui-angular-charts'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public chartType = CategoryChartType.Auto; + + data = [ + { CountryName: 'China', Pop1995: 1216, Pop2005: 1297, }, + { CountryName: 'India', Pop1995: 920, Pop2005: 1090, }, + { CountryName: 'United States', Pop1995: 266, Pop2005: 295, }, + { CountryName: 'Indonesia', Pop1995: 197, Pop2005: 229, }, + { CountryName: 'Brazil', Pop1995: 161, Pop2005: 186, } + ]; +} diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/default/index.ts b/packages/igx-templates/igx-ts-legacy/category-chart/default/index.ts new file mode 100644 index 000000000..08d525404 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/default/index.ts @@ -0,0 +1,20 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxCategoryChartTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Category Chart"]; + this.controlGroup = "Charts"; + this.listInComponentTemplates = true; + this.id = "category-chart"; + this.projectType = "igx-ts"; + this.name = "Category Chart"; + this.description = "basic category chart with chart type selector."; + this.dependencies = [ + { import: "IgxCategoryChartModule", from: "igniteui-angular-charts" }, + { import: "FormsModule", from: "@angular/forms" } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; + } +} +module.exports = new IgxCategoryChartTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/category-chart/index.ts b/packages/igx-templates/igx-ts-legacy/category-chart/index.ts new file mode 100644 index 000000000..aaec72219 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/category-chart/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxCategoryChartComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Category Chart"; + this.group = "Charts"; + this.description = `makes visualizing category data easy. Simplifies the complexities + of the data visualization domain into manageable API`; + } +} +module.exports = new IgxCategoryChartComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..55718054b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,26 @@ +
+

igx-chip components inside igx-chips-area

+

You can read more about configuring the igx-chip component in the + README or the + official + documentation.

+ Selected Events +
+ + + {{chip.name}} + + +
+
+ + + +
+ {{item.name}} +
+
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..f08470915 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,22 @@ +.chips { + display: flex; + flex-flow: column; + padding-top: 20px; + padding-right: 400px; +} + +.chipsArea { + width: 500px; + height: auto; + min-height: 100px; + border: 2px solid lightgray; +} + +.chipStyle { + margin: auto; + padding: 8px; +} + +.header { + text-align: center; +} diff --git a/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..131fff423 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxChipsModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxChipsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..e54ac07dd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,109 @@ +import { ChangeDetectorRef, Component, ViewChild } from '@angular/core'; +import { + CloseScrollStrategy, + ConnectedPositioningStrategy, + HorizontalAlignment, + IBaseChipEventArgs, + IgxChipsAreaComponent, + IgxDropDownComponent, + ISelectionEventArgs, + OverlaySettings, + VerticalAlignment +} from '<%=igxPackage%>'; + +interface NamedEntry { + id: string; + name: string; +} + +@Component({ + selector: 'app-<%=filePrefix%>', + styleUrls: ['./<%=filePrefix%>.component.scss'], + templateUrl: './<%=filePrefix%>.component.html' +}) + +export class <%=ClassName%>Component { + + public dropDownList: NamedEntry[] = [ + { + id: '1', + name: 'Bug fixing for smart devices' + }, + { + id: '2', + name: 'The True Purpose of Design Systems' + }, + { + id: '3', + name: 'The IoT is dead, long live the internet' + }, + { + id: '4', + name: 'Micro frontends in practice' + }, + { + id: '5', + name: 'Lessons about API testing' + }, + { + id: '6', + name: 'Scaling big with Apache Kafka' + }, + { + id: '7', + name: 'Last minute performance testing' + }, + { + id: '8', + name: 'Sales Skillz for IT People' + } + ]; + + public chipList: NamedEntry[] = []; + + @ViewChild('chipsArea', { static: true, read: IgxChipsAreaComponent }) + public chipsArea!: IgxChipsAreaComponent; + + @ViewChild(IgxDropDownComponent, { static: true }) + public igxDropDown!: IgxDropDownComponent; + + private positionSettings = { + horizontalStartPoint: HorizontalAlignment.Left, + verticalStartPoint: VerticalAlignment.Bottom + }; + + private overlaySettings: OverlaySettings = { + closeOnOutsideClick: true, + modal: false, + positionStrategy: new ConnectedPositioningStrategy(this.positionSettings), + scrollStrategy: new CloseScrollStrategy() + }; + + constructor(public cdr: ChangeDetectorRef) { } + + public chipRemoved(event: IBaseChipEventArgs) { + this.chipList = this.chipList.filter((item) => { + return item.id !== event.owner.id; + }); + this.cdr.detectChanges(); + } + + public toggleDropDown(ev: MouseEvent) { + this.overlaySettings.target = ev.target as HTMLButtonElement; + this.igxDropDown.toggle(this.overlaySettings); + } + + public itemSelection(ev: ISelectionEventArgs) { + const item = this.dropDownList.find((val) => val.name === ev.newSelection.value); + if (!item) { + return; + } + const match = this.chipList.find((val) => val.name === item.name); + if (!match) { + this.chipList.push({ + id: item.id, + name: item.name + }); + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/chip/default/index.ts b/packages/igx-templates/igx-ts-legacy/chip/default/index.ts new file mode 100644 index 000000000..6f39ba554 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxChipTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Chip"]; + this.controlGroup = "Data Entry & Display"; + this.listInComponentTemplates = true; + this.id = "chip"; + this.projectType = "igx-ts"; + this.name = "Chip"; + this.description = "basic IgxChip"; + this.dependencies = [{ + import: ["IgxButtonModule", "IgxChipsModule", "IgxDropDownModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxChipTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/chip/index.ts b/packages/igx-templates/igx-ts-legacy/chip/index.ts new file mode 100644 index 000000000..103ef1c5e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/chip/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxChipComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Chip"; + this.group = "Data Entry & Display"; + this.description = `a compact visual component that displays information in an obround.`; + } +} +module.exports = new IgxChipComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..19a6613bf --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,31 @@ +

igx-combo component with templating.

+

You can read more about configuring the igx-combo component in the +README or the +official documentation.

+ + + + +
+ {{ display.name }} - + {{ display.region }} +
+
+ + +
State - Region
+
+ + + + + +
diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..0464cee12 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,18 @@ +.combo-container { + margin: 10px; +} + +.header-class, +.footer-class, +.empty-class { + text-align: center; + font-style: italic; + font-weight: bold; +} + +:host { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..02a3a899b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxComboModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxComboModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..5e244c162 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { localData, State } from './local-data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) + +export class <%=ClassName%>Component { + public localData: State[] = localData; +} diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/local-data.ts b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/local-data.ts new file mode 100644 index 000000000..58539cf94 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/files/src/app/__path__/local-data.ts @@ -0,0 +1,38 @@ +interface Division { + name: string; + states: string[]; +} + +export interface State { + name: string; + region: string; +} + +const divisions: Division[] = [ + { name: 'New England 01', states: ['Connecticut', 'Maine', 'Massachusetts'] }, + { name: 'New England 02', states: ['New Hampshire', 'Rhode Island', 'Vermont'] }, + { name: 'Mid-Atlantic', states: ['New Jersey', 'New York', 'Pennsylvania'] }, + { name: 'East North Central 02', states: ['Michigan', 'Ohio', 'Wisconsin'] }, + { name: 'East North Central 01', states: ['Illinois', 'Indiana'] }, + { name: 'West North Central 01', states: ['Missouri', 'Nebraska', 'North Dakota', 'South Dakota'] }, + { name: 'West North Central 02', states: ['Iowa', 'Kansas', 'Minnesota'] }, + { name: 'South Atlantic 01', states: ['Delaware', 'Florida', 'Georgia', 'Maryland'] }, + { name: 'South Atlantic 02', states: ['North Carolina', 'South Carolina', 'Virginia', 'District of Columbia', 'West Virginia'] }, + { name: 'South Atlantic 03', states: ['District of Columbia', 'West Virginia'] }, + { name: 'East South Central 01', states: ['Alabama', 'Kentucky'] }, + { name: 'East South Central 02', states: ['Mississippi', 'Tennessee'] }, + { name: 'West South Central', states: ['Arkansas', 'Louisiana', 'Oklahoma', 'Texas'] }, + { name: 'Mountain', states: ['Arizona', 'Colorado', 'Idaho', 'Montana', 'Nevada', 'New Mexico', 'Utah', 'Wyoming'] }, + { name: 'Pacific 01', states: ['Alaska', 'California'] }, + { name: 'Pacific 02', states: ['Hawaii', 'Oregon', 'Washington'] } +]; + +const localData: State[] = []; +divisions + .map(d => d.states + .map(s => localData.push({ + name: s, + region: d.name.replace(/[\d]+/, '').trim() + }))); + +export { localData }; diff --git a/packages/igx-templates/igx-ts-legacy/combo/default/index.ts b/packages/igx-templates/igx-ts-legacy/combo/default/index.ts new file mode 100644 index 000000000..636b680ce --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxComboTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Combo"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "combo"; + this.projectType = "igx-ts"; + this.name = "Combo"; + this.description = "basic IgxCombo with templating"; + this.dependencies = [{ + import: ["IgxComboModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxComboTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/combo/index.ts b/packages/igx-templates/igx-ts-legacy/combo/index.ts new file mode 100644 index 000000000..60d7a55f5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/combo/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxComboComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Combo"; + this.group = "Grids & Lists"; + this.description = `provides easy filtering and selection of multiple items, grouping and + adding custom values to the dropdown list.`; + } +} +module.exports = new IgxComboComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..92d23d555 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,134 @@ +
+
+
+
Boston Marathon 2020
+ Live + +
+ + + +
+
+ + + + + + +
+
{{ paginator.page * paginator.perPage + cell.row.index + 1 }}
+ + + First place Trophy image + + + Second place Trophy image + + + Third place Trophy image + + +
+
+
+ + + +
+ {{ cell.value }} + +
+ +
+
+ + + + + + + + + + +
+ +
+
+
+ + + + + + +
+ {{ val | number: '1.1-5' }} +
+
+
+ + + +
+ + + +
+
+
+ + + +
+ +
+
+
+
+ + First place Trophy image + Winner + First place Trophy image + +
+
+
+ +

{{ winner.Name }}

+
+
+
+
+
+ +
+
+
+ Finish +
+
+ +
+
+ {{i + 1}} + First place Trophy image +
+ +

{{ player.Name }}

+
+
+
+
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..09b5d6468 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,242 @@ +@use '<%=igxPackage%>/theming' as *; +$grid-sample-theme: grid-theme( + $row-selected-background: #333, + $row-selected-text-color: #ddd, + $row-hover-background: #f8f8f8, + $row-border-color: #f8f8f8, + $cell-selected-background: + color( + $color: "gray", + $variant: 800, + ), + $cell-selected-text-color: #fff, +); + +$progressBar-sample-theme: progress-linear-theme( + $track-color: rgba(181, 181, 181, 0.5), + $fill-color-default: orange, +); + +%flex-center { + display: flex; + align-items: center; + justify-content: center; +} + +:host { + ::ng-deep { + .igx-sparkline { + margin-top: 20px; + margin-bottom: -10px; + } + + .s-overlay { + display: flex; + flex-direction: column; + align-items: center; + z-index: 10002; + + &__inner { + @extend %flex-center; + flex-direction: column; + border-radius: rem(16px); + min-width: rem(340px); + overflow: hidden; + background: #fff; + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.16); + } + + &__heading { + @extend %flex-center; + width: 100%; + text-transform: uppercase; + font-weight: bold; + margin-bottom: rem(16px); + margin-top: rem(24); + font-size: rem(28px); + height: rem(70px); + padding: 0 rem(24px); + letter-spacing: 2px; + border-bottom: 1px solid #ddd; + + &--finish { + border-bottom: none; + margin-top: 0; + font-style: italic; + background-color: white; + background-image: linear-gradient(45deg, #222 25%, transparent 25%), + linear-gradient(-45deg, #222 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #222 75%), + linear-gradient(-45deg, transparent 75%, #222 75%); + background-size: 20px 20px; + background-position: 0 0, 0 10px, 10px -10px, -10px 0px; + } + + > span { + padding: rem(8px); + background: #fff; + margin: 0 rem(8px); + + > span { + margin: 0 rem(8px); + } + } + } + + &__trophy { + display: flex; + align-items: center; + justify-content: center; + position: relative; + margin-bottom: rem(16px); + + img { + width: 40px; + } + + span { + position: absolute; + top: 2px; + color: #fff; + text-shadow: 0 0 8px #444; + font-weight: bold; + } + } + + &__players { + @extend %flex-center; + padding: rem(24px); + } + + &__player { + @extend %flex-center; + flex-direction: column; + margin: 0 rem(32px); + width: 120px; + + igx-avatar { + margin-bottom: rem(16px); + } + &--winner { + order: 2; + igx-avatar { + border: 4px solid #fbb13c; + } + } + &--second { + order: 1; + igx-avatar { + border: 4px solid #bdbdbd; + } + } + &--third { + order: 3; + igx-avatar { + border: 4px solid #b47845; + } + } + } + + &__player-name { + color: color($color: "primary", $variant: 800); + font-size: 18px; + margin: 0; + white-space: nowrap; + } + } + + .s-overlay__player.s-overlay__player--winner { + margin-bottom: rem(48px); + } + width: 95%; + } +} + +.grid__wrapper { + margin: 0 auto; + padding: 16px; +} + +@media (max-width: 1000px) { + .grid__wrapper { + width: 98% !important; + margin: 0 auto; + padding-left: 1%; + padding-right: 1%; + } +} + +@media (max-width: 720px) { + .grid__wrapper { + width: 720px !important; + margin: 0 3px; + padding-right: 5px; + } +} + +.switch-sample__title { + margin: 0 rem(20px) 0 0; +} + +.sample__header { + display: flex; + align-self: flex-start; + justify-content: space-between; + width: 100%; + margin-bottom: rem(20px); +} + +.switch-sample { + display: flex; + flex-flow: row nowrap; + align-items: center; + width: 100%; + height: rem(50px); +} + +.switch-sample__label { + margin: 0 rem(8) 0 0; +} + +.athlete_name { + width: rem(100px); + margin: 0 rem(30px); +} + +.athlete_name, +.title { + @include ellipsis(); +} + +.cell__inner, +.cell__inner_2 { + display: flex; + align-items: center; + height: 100%; +} + +.cell__inner { + position: relative; + justify-content: space-between; +} + +.gridSample__filter { + width: rem(200px); +} + +.flag { + width: rem(24px); +} + +.cup { + padding-left: 20px; +} + +@media (max-width: rem(960px)) { + .grid__wrapper { + width: rem(960px); + } +} + +.linear-bar-container { + margin: auto; +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..28ab5bb47 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,49 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxAvatarModule, + IgxBadgeModule, + IgxGridModule, + IgxIconModule, + IgxInputGroupModule, + IgxProgressBarModule, + IgxSwitchModule +} from '<%=igxPackage%>'; +import { IgxSparklineCoreModule, IgxSparklineModule } from 'igniteui-angular-charts'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ + FormsModule, + BrowserAnimationsModule, + IgxGridModule, + IgxProgressBarModule, + IgxAvatarModule, + IgxBadgeModule, + IgxIconModule, + IgxSwitchModule, + IgxInputGroupModule, + IgxSparklineModule, + IgxSparklineCoreModule + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..e773535b8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,335 @@ +import { + AfterViewInit, + Component, + ElementRef, + HostListener, + Inject, + OnDestroy, + OnInit, + ViewChild + } from '@angular/core'; +import { + AbsolutePosition, + CellType, + IgxGridComponent, + IgxPaginatorComponent, + IgxNumberSummaryOperand, + IgxOverlayService, + IgxStringFilteringOperand, + IgxSummaryResult, + OverlayClosingEventArgs, + OverlaySettings + } from '<%=igxPackage%>'; +import { SparklineDisplayType } from 'igniteui-angular-charts'; +import { Athlete, AthletesData, SpeedEntry } from './services/data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit, OnDestroy, AfterViewInit { + @ViewChild('grid1', { read: IgxGridComponent, static: true }) + public grid1!: IgxGridComponent; + + @ViewChild('paginator', { read: IgxPaginatorComponent, static: true }) + public paginator!: IgxPaginatorComponent; + + @ViewChild('winnerAlert', { static: true }) + public winnerAlert!: ElementRef; + + @ViewChild('finishedAlert', { static: true }) + public finishedAlert!: ElementRef; + + public displayType = SparklineDisplayType; + public topSpeedSummary = CustomTopSpeedSummary; + public bnpSummary = CustomBPMSummary; + public speedSummary = CustomSpeedSummary; + public localData: Athlete[] = []; + public isFinished = false; + public hasWinner = false; + public athleteColumnWidth = '30%'; + public showOverlay = false; + public overlaySettings!: OverlaySettings; + public winner: Athlete = { Avatar: '', Name: '' } as Athlete; + public top3: Athlete[] = []; + private _live: boolean = true; + private _timer: any; + private windowWidth: any; + private _overlayId: string = ''; + + get live(): boolean { + return this._live; + } + + set live(val: boolean) { + this._live = val; + if (this._live) { + this._timer = setInterval(() => this.ticker(), 1500); + } else { + clearInterval(this._timer); + } + } + + get showWinnerOverlay(): boolean { + return this.showOverlay && this.hasWinner && !this.isFinished; + } + + get showFinishedOverlay(): boolean { + return this.showOverlay && this.isFinished; + } + + get hideAthleteNumber(): boolean { + return this.windowWidth && this.windowWidth < 960; + } + + get hideBeatsPerMinute(): boolean { + return (this.windowWidth && this.windowWidth < 860) || !this.live; + } + + constructor(@Inject(IgxOverlayService) public overlayService: IgxOverlayService) { } + + public ngOnInit(): void { + this.localData = AthletesData.slice(0, 30).sort((a, b) => b.TrackProgress - a.TrackProgress); + this.localData.forEach(rec => this.getSpeed(rec)); + this.windowWidth = window.innerWidth; + this._timer = setInterval(() => this.ticker(), 1500); + this.overlayService.closing.subscribe((event: OverlayClosingEventArgs) => { + this.showOverlay = false; + }); + } + + public ngAfterViewInit(): void { + this.overlaySettings = IgxOverlayService.createAbsoluteOverlaySettings( + AbsolutePosition.Center, + this.grid1 + ); + this.overlaySettings.modal = true; + } + + public getValue(cell: CellType): number { + const val = cell.value; + return val; + } + + public ngOnDestroy(): void { + clearInterval(this._timer); + } + + public isTop3(cell: CellType): boolean { + const top = this.paginator.page === 0 && cell.row.index < 4; + return top; + } + + public getTrophyUrl(index: number): string { + if (index === 0) { + return 'assets/images/trophy_gold.svg'; + } + if (index === 1) { + return 'assets/images/trophy_silver.svg'; + } + if (index === 2) { + return 'assets/images/trophy_bronze.svg'; + } + return ''; + } + + public getIconType(cell: CellType): string { + switch (cell.row.data.Position) { + case 'current': + return 'arrow_forward'; + case 'down': + return 'arrow_downward'; + case 'up': + default: + return 'arrow_upward'; + } + } + + public getBadgeType(cell: CellType): string { + switch (cell.row.data.Position) { + case 'current': + return 'warning'; + case 'down': + return 'error'; + case 'up': + default: + return 'success'; + } + } + + public getSpeed(athlete: Athlete): void { + athlete.SpeedEntries = this.addSpeedData(athlete, 40); + } + + public getSpeedeData(minutes?: number): SpeedEntry[] { + if (minutes === undefined) { + minutes = 20; + } + const speed: SpeedEntry[] = []; + for (let m = 0; m < minutes; m += 3) { + const value = this.generateRandomNumber(17, 20); + speed.push({ Speed: value, Minute: m }); + } + return speed; + } + + public addSpeedData(athlete: Athlete, minutes?: number): SpeedEntry[] { + if (minutes === undefined) { + minutes = 20; + } + const speedCollection: SpeedEntry[] = athlete.SpeedEntries || []; + for (let m = 3; m <= minutes; m += 3) { + const value = this.generateRandomNumber(16, 20); + const speed = speedCollection[speedCollection.length - 1]; + const min = speed && speed.Minute ? speed.Minute + m : m; + speedCollection.push({ Speed: value, Minute: min }); + if (speedCollection.length === 40) { + speedCollection.shift(); + } + } + return speedCollection; + } + + @HostListener('window:resize', ['$event']) + public onResize(event: any): void { + this.windowWidth = event.target.innerWidth; + } + + public filter(event: Event): void { + const target = event.target as HTMLInputElement; + const term = target.value; + this.grid1.filter('CountryName', term, IgxStringFilteringOperand.instance().condition('contains'), true); + this.grid1.markForCheck(); + } + + public showAlert(element: ElementRef): void { + this.showOverlay = true; + this._overlayId = this.overlayService.attach(element, this.overlaySettings); + this.overlayService.show(this._overlayId); + } + + public hideAlert(): void { + this.showOverlay = false; + this.overlayService.hide(this._overlayId); + } + + private generateRandomNumber(min: number, max: number): number { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + + private ticker(): void { + if (this.showWinnerOverlay) { + this.hideAlert(); + } + if (this.isFinished) { + this.live = false; + this.paginator.page = 0; + return; + } + this.updateData(); + this.manageRace(); + } + + private manageRace(): void { + // show winner alert + if (this.localData[0].TrackProgress) { + if (!this.hasWinner && this.localData[0].TrackProgress >= 100) { + this.winner = this.localData[0]; + this.hasWinner = true; + this.showAlert(this.winnerAlert); + } + } + + // move grid to next page to monitor players who still run + const firstOnPage = this.grid1.getCellByColumn(0, 'TrackProgress'); + if (firstOnPage && firstOnPage.value === 100) { + this.paginator.page = this.paginator.page + 1; + } + + // show Top 3 players after race has finished + if (this.localData[this.localData.length - 1].TrackProgress === 100) { + this.top3 = this.localData.slice(0, 3); + this.isFinished = true; + this.showAlert(this.finishedAlert); + } + } + + private updateData(): void { + const newData: Athlete[] = []; + this.localData.forEach((rec, index) => { + rec.LastPosition = index; + if ((rec.TrackProgress !== undefined) && rec.TrackProgress < 100) { + rec.SpeedEntries = this.addSpeedData(rec, 3); + if (rec.BeatsPerMinute !== undefined) { + rec.BeatsPerMinute += this.generateRandomNumber(-5, 5); + } + if (rec.Id !== undefined && rec.Id < this.paginator.perPage + 1) { + rec.TrackProgress = Math.min(rec.TrackProgress + this.generateRandomNumber(15, 20), 100); + } else { + rec.TrackProgress = Math.min(rec.TrackProgress + this.generateRandomNumber(7, 12), 100); + } + } + newData.push({ ...rec }); + }); + + this.localData = newData.sort((a, b) => b.TrackProgress - a.TrackProgress); + this.localData.forEach((elem, ind) => { + if (elem.LastPosition) { + const position = elem.LastPosition - ind; + if (position < 0) { + elem.Position = 'down'; + } else if (position === 0) { + elem.Position = 'current'; + } else { + elem.Position = 'up'; + } + } + }); + } +} + +class CustomTopSpeedSummary { + public operate(data?: number[]): IgxSummaryResult[] { + const result: IgxSummaryResult[] = []; + if (!data) { + return result; + } + result.push({ + key: 'max', + label: 'max', + summaryResult: data.length ? IgxNumberSummaryOperand.max(data).toFixed(0) : null + }); + return result; + } +} + +export class CustomBPMSummary { + public operate(data?: number[]): IgxSummaryResult[] { + const result: IgxSummaryResult[] = []; + if (!data) { + return result; + } + result.push( + { + key: 'average', + label: 'average', + summaryResult: data.length ? IgxNumberSummaryOperand.average(data).toFixed(2) : null + }); + return result; + } +} + +export class CustomSpeedSummary { + public operate(data: SpeedEntry[][]): IgxSummaryResult[] { + const speedData = data.reduce((acc, val) => acc.concat(val), []).map(rec => rec.Speed); + const result = []; + result.push( + { + key: 'average', + label: 'average', + summaryResult: speedData.length ? IgxNumberSummaryOperand.average(speedData).toFixed(2) : null + }); + return result; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/services/data.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/services/data.ts new file mode 100644 index 000000000..ee3a3debd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/app/__path__/services/data.ts @@ -0,0 +1,2244 @@ +export interface SpeedEntry { + Speed: number; + Minute: number; +} + +export interface Athlete { + Id: number; + Avatar: string; + Position: string; + Name: string; + AthleteNumber: number; + BeatsPerMinute: number; + TopSpeed: number; + Registered: string; + TrackProgress: number; + CountryFlag: string; + CountryName: string; + LastPosition?: number; + SpeedEntries?: SpeedEntry[]; +} + +export const AthletesData = [ + { + "Id": 84, + "Avatar": "https://randomuser.me/api/portraits/men/12.jpg", + "Position": "current", + "Name": "Abel Brun ", + "AthleteNumber": 39315, + "BeatsPerMinute": 105, + "TopSpeed": 5.1, + "Registered": "2017-10-05T05:54:31 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/af.png", + "CountryName": "Afghanistan" + }, { + "Id": 65, + "Avatar": "https://randomuser.me/api/portraits/women/60.jpg", + "Position": "down", + "Name": "Keira Walker ", + "AthleteNumber": 34116, + "BeatsPerMinute": 94, + "TopSpeed": 4.8, + "Registered": "2017-01-09T05:46:07 -02:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/al.png", + "CountryName": "Albania" + }, { + "Id": 197, + "Avatar": "https://randomuser.me/api/portraits/men/93.jpg", + "Position": "current", + "Name": "Brent Lord ", + "AthleteNumber": 20943, + "BeatsPerMinute": 92, + "TopSpeed": 4.8, + "Registered": "2017-01-23T06:14:22 -02:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/dz.png", + "CountryName": "Algeria" + }, { + "Id": 66, + "Avatar": "https://randomuser.me/api/portraits/men/70.jpg", + "Position": "down", + "Name": "Moritz Braun ", + "AthleteNumber": 48081, + "BeatsPerMinute": 107, + "TopSpeed": 6, + "Registered": "2017-06-13T12:54:56 -03:00", + "TrackProgress": 21, + "CountryFlag": "assets/images/flags/ad.png", + "CountryName": "Andorra" + }, { + "Id": 58, + "Avatar": "https://randomuser.me/api/portraits/women/60.jpg", + "Position": "down", + "Name": "Zaina Pomp ", + "AthleteNumber": 14109, + "BeatsPerMinute": 90, + "TopSpeed": 5.7, + "Registered": "2017-09-07T11:17:40 -03:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/ao.png", + "CountryName": "Angola" + }, { + "Id": 40, + "Avatar": "https://randomuser.me/api/portraits/men/33.jpg", + "Position": "down", + "Name": "Alberto Clark ", + "AthleteNumber": 29912, + "BeatsPerMinute": 93, + "TopSpeed": 4.6, + "Registered": "2017-02-02T03:50:21 -02:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/ag.png", + "CountryName": "Antigua and Barbuda" + }, { + "Id": 138, + "Avatar": "https://randomuser.me/api/portraits/men/38.jpg", + "Position": "current", + "Name": "Derrick Price ", + "AthleteNumber": 19792, + "BeatsPerMinute": 94, + "TopSpeed": 5.6, + "Registered": "2017-03-19T01:10:55 -02:00", + "TrackProgress": 26, + "CountryFlag": "assets/images/flags/ar.png", + "CountryName": "Argentina" + }, { + "Id": 6, + "Avatar": "https://randomuser.me/api/portraits/women/26.jpg", + "Position": "up", + "Name": "Mira Campos ", + "AthleteNumber": 39222, + "BeatsPerMinute": 95, + "TopSpeed": 5.9, + "Registered": "2017-01-11T01:41:31 -02:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/am.png", + "CountryName": "Armenia" + }, { + "Id": 190, + "Avatar": "https://randomuser.me/api/portraits/women/44.jpg", + "Position": "current", + "Name": "Kiara Dubois ", + "AthleteNumber": 49964, + "BeatsPerMinute": 97, + "TopSpeed": 5.6, + "Registered": "2017-09-28T04:37:56 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/au.png", + "CountryName": "Australia" + }, { + "Id": 168, + "Avatar": "https://randomuser.me/api/portraits/men/10.jpg", + "Position": "current", + "Name": "Calvin Hunt ", + "AthleteNumber": 35535, + "BeatsPerMinute": 94, + "TopSpeed": 4.5, + "Registered": "2017-11-07T09:58:42 -02:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/at.png", + "CountryName": "Austria" + }, { + "Id": 105, + "Avatar": "https://randomuser.me/api/portraits/men/5.jpg", + "Position": "down", + "Name": "Samu Hokkanen ", + "AthleteNumber": 22469, + "BeatsPerMinute": 106, + "TopSpeed": 5.5, + "Registered": "2017-06-29T04:58:27 -03:00", + "TrackProgress": 29, + "CountryFlag": "assets/images/flags/az.png", + "CountryName": "Azerbaijan" + }, { + "Id": 33, + "Avatar": "https://randomuser.me/api/portraits/men/18.jpg", + "Position": "up", + "Name": "Zackary Roy ", + "AthleteNumber": 45996, + "BeatsPerMinute": 92, + "TopSpeed": 4.9, + "Registered": "2017-07-07T03:51:26 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/bs.png", + "CountryName": "Bahamas" + }, { + "Id": 83, + "Avatar": "https://randomuser.me/api/portraits/men/10.jpg", + "Position": "current", + "Name": "سینا مرادی ", + "AthleteNumber": 10809, + "BeatsPerMinute": 105, + "TopSpeed": 5.3, + "Registered": "2017-04-05T05:27:13 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/bh.png", + "CountryName": "Bahrain" + }, { + "Id": 121, + "Avatar": "https://randomuser.me/api/portraits/men/45.jpg", + "Position": "current", + "Name": "Maurice Lambert ", + "AthleteNumber": 17443, + "BeatsPerMinute": 96, + "TopSpeed": 5.6, + "Registered": "2017-06-05T08:19:32 -03:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/bd.png", + "CountryName": "Bangladesh" + }, { + "Id": 111, + "Avatar": "https://randomuser.me/api/portraits/men/23.jpg", + "Position": "up", + "Name": "Connor Green ", + "AthleteNumber": 44716, + "BeatsPerMinute": 95, + "TopSpeed": 4.4, + "Registered": "2017-06-30T11:23:25 -03:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/bb.png", + "CountryName": "Barbados" + }, { + "Id": 75, + "Avatar": "https://randomuser.me/api/portraits/women/69.jpg", + "Position": "current", + "Name": "Ellen Leppo ", + "AthleteNumber": 29286, + "BeatsPerMinute": 97, + "TopSpeed": 5.6, + "Registered": "2017-08-16T09:46:35 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/by.png", + "CountryName": "Belarus" + }, { + "Id": 68, + "Avatar": "https://randomuser.me/api/portraits/men/23.jpg", + "Position": "up", + "Name": "Sandro Carpentier ", + "AthleteNumber": 23503, + "BeatsPerMinute": 96, + "TopSpeed": 5.7, + "Registered": "2017-09-30T01:01:04 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/be.png", + "CountryName": "Belgium" + }, { + "Id": 150, + "Avatar": "https://randomuser.me/api/portraits/men/52.jpg", + "Position": "up", + "Name": "Gustav Petersen ", + "AthleteNumber": 20984, + "BeatsPerMinute": 107, + "TopSpeed": 4.6, + "Registered": "2017-01-01T07:40:19 -02:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/bz.png", + "CountryName": "Belize" + }, { + "Id": 142, + "Avatar": "https://randomuser.me/api/portraits/women/63.jpg", + "Position": "current", + "Name": "Nicoline Thomsen ", + "AthleteNumber": 36778, + "BeatsPerMinute": 99, + "TopSpeed": 5.5, + "Registered": "2017-03-26T10:04:29 -03:00", + "TrackProgress": 33, + "CountryFlag": "assets/images/flags/bj.png", + "CountryName": "Benin" + }, { + "Id": 19, + "Avatar": "https://randomuser.me/api/portraits/women/6.jpg", + "Position": "current", + "Name": "Sedef Tunçeri ", + "AthleteNumber": 48164, + "BeatsPerMinute": 108, + "TopSpeed": 5.6, + "Registered": "2017-03-29T11:54:15 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/bt.png", + "CountryName": "Bhutan" + }, { + "Id": 202, + "Avatar": "https://randomuser.me/api/portraits/women/92.jpg", + "Position": "down", + "Name": "Ilona Salonen ", + "AthleteNumber": 27068, + "BeatsPerMinute": 91, + "TopSpeed": 5.4, + "Registered": "2017-07-03T06:19:47 -03:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/bo.png", + "CountryName": "Bolivia" + }, { + "Id": 191, + "Avatar": "https://randomuser.me/api/portraits/women/72.jpg", + "Position": "up", + "Name": "Clarisse Rey ", + "AthleteNumber": 29795, + "BeatsPerMinute": 98, + "TopSpeed": 4.9, + "Registered": "2017-06-09T08:07:19 -03:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/ba.png", + "CountryName": "Bosnia and Herzegovina" + }, { + "Id": 71, + "Avatar": "https://randomuser.me/api/portraits/men/74.jpg", + "Position": "down", + "Name": "Jimmie Mcguinness ", + "AthleteNumber": 20729, + "BeatsPerMinute": 90, + "TopSpeed": 4.6, + "Registered": "2017-10-07T06:08:00 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/bw.png", + "CountryName": "Botswana" + }, { + "Id": 82, + "Avatar": "https://randomuser.me/api/portraits/men/55.jpg", + "Position": "current", + "Name": "Johann Fischer ", + "AthleteNumber": 37212, + "BeatsPerMinute": 98, + "TopSpeed": 5.8, + "Registered": "2017-09-01T04:39:52 -03:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/br.png", + "CountryName": "Brazil" + }, { + "Id": 121, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "down", + "Name": "Ivan Ivanov ", + "AthleteNumber": 11054, + "BeatsPerMinute": 108, + "TopSpeed": 5.7, + "Registered": "2017-04-18T08:03:01 -03:00", + "TrackProgress": 50, + "CountryFlag": "assets/images/flags/bg.png", + "CountryName": "Bulgaria" + }, { + "Id": 144, + "Avatar": "https://randomuser.me/api/portraits/women/57.jpg", + "Position": "down", + "Name": "Milja Leino ", + "AthleteNumber": 33563, + "BeatsPerMinute": 110, + "TopSpeed": 4.1, + "Registered": "2017-11-01T10:34:07 -02:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/bf.png", + "CountryName": "Burkina Faso" + }, { + "Id": 71, + "Avatar": "https://randomuser.me/api/portraits/men/81.jpg", + "Position": "down", + "Name": "آراد جعفری ", + "AthleteNumber": 34962, + "BeatsPerMinute": 90, + "TopSpeed": 4.8, + "Registered": "2017-04-22T04:20:39 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/bi.png", + "CountryName": "Burundi" + }, { + "Id": 163, + "Avatar": "https://randomuser.me/api/portraits/women/21.jpg", + "Position": "up", + "Name": "Pippa Roberts ", + "AthleteNumber": 15588, + "BeatsPerMinute": 105, + "TopSpeed": 4.1, + "Registered": "2017-02-07T10:23:13 -02:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/kh.png", + "CountryName": "Cambodia" + }, { + "Id": 122, + "Avatar": "https://randomuser.me/api/portraits/men/57.jpg", + "Position": "down", + "Name": "Jack Jean-baptiste ", + "AthleteNumber": 40427, + "BeatsPerMinute": 110, + "TopSpeed": 4.3, + "Registered": "2017-11-09T08:50:06 -02:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/cm.png", + "CountryName": "Cameroon" + }, { + "Id": 199, + "Avatar": "https://randomuser.me/api/portraits/women/68.jpg", + "Position": "up", + "Name": "Lucie Dumont ", + "AthleteNumber": 12104, + "BeatsPerMinute": 108, + "TopSpeed": 4, + "Registered": "2017-01-08T02:13:29 -02:00", + "TrackProgress": 49, + "CountryFlag": "assets/images/flags/ca.png", + "CountryName": "Canada" + }, { + "Id": 136, + "Avatar": "https://randomuser.me/api/portraits/women/10.jpg", + "Position": "down", + "Name": "Elaine Matthews ", + "AthleteNumber": 38574, + "BeatsPerMinute": 110, + "TopSpeed": 5.5, + "Registered": "2017-01-26T11:50:00 -02:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/cv.png", + "CountryName": "Cape Verde" + }, { + "Id": 70, + "Avatar": "https://randomuser.me/api/portraits/women/14.jpg", + "Position": "up", + "Name": "Emily Olsen ", + "AthleteNumber": 13887, + "BeatsPerMinute": 110, + "TopSpeed": 4.8, + "Registered": "2017-10-03T08:01:40 -03:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/cf.png", + "CountryName": "Central African Republic" + }, { + "Id": 21, + "Avatar": "https://randomuser.me/api/portraits/men/73.jpg", + "Position": "down", + "Name": "Kuzey Aclan ", + "AthleteNumber": 18583, + "BeatsPerMinute": 102, + "TopSpeed": 5.3, + "Registered": "2017-09-12T09:14:14 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/td.png", + "CountryName": "Chad" + }, { + "Id": 86, + "Avatar": "https://randomuser.me/api/portraits/women/82.jpg", + "Position": "current", + "Name": "Eloida Novaes ", + "AthleteNumber": 30751, + "BeatsPerMinute": 107, + "TopSpeed": 4.2, + "Registered": "2017-01-02T01:04:04 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/cl.png", + "CountryName": "Chile" + }, { + "Id": 130, + "Avatar": "https://randomuser.me/api/portraits/women/24.jpg", + "Position": "down", + "Name": "آوا احمدی ", + "AthleteNumber": 44347, + "BeatsPerMinute": 110, + "TopSpeed": 4.1, + "Registered": "2017-06-04T09:04:31 -03:00", + "TrackProgress": 45, + "CountryFlag": "assets/images/flags/cn.png", + "CountryName": "China" + }, { + "Id": 127, + "Avatar": "https://randomuser.me/api/portraits/men/52.jpg", + "Position": "down", + "Name": "Gerardo Soto ", + "AthleteNumber": 22958, + "BeatsPerMinute": 90, + "TopSpeed": 5, + "Registered": "2017-06-04T12:52:03 -03:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/co.png", + "CountryName": "Colombia" + }, { + "Id": 125, + "Avatar": "https://randomuser.me/api/portraits/women/16.jpg", + "Position": "current", + "Name": "Altiva Alves ", + "AthleteNumber": 31850, + "BeatsPerMinute": 106, + "TopSpeed": 5.1, + "Registered": "2017-11-09T02:43:54 -02:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/km.png", + "CountryName": "Comoros" + }, { + "Id": 38, + "Avatar": "https://randomuser.me/api/portraits/women/17.jpg", + "Position": "current", + "Name": "Charlotte Meyer ", + "AthleteNumber": 21442, + "BeatsPerMinute": 110, + "TopSpeed": 4.6, + "Registered": "2017-10-19T10:38:35 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/ck.png", + "CountryName": "Cook Islands" + }, { + "Id": 186, + "Avatar": "https://randomuser.me/api/portraits/men/42.jpg", + "Position": "up", + "Name": "Jimmy Bailey ", + "AthleteNumber": 38510, + "BeatsPerMinute": 101, + "TopSpeed": 4.7, + "Registered": "2017-06-30T04:13:42 -03:00", + "TrackProgress": 35, + "CountryFlag": "assets/images/flags/cr.png", + "CountryName": "Costa Rica" + }, { + "Id": 108, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "up", + "Name": "Noah Bergeron ", + "AthleteNumber": 35139, + "BeatsPerMinute": 110, + "TopSpeed": 5.6, + "Registered": "2017-06-23T01:21:21 -03:00", + "TrackProgress": 49, + "CountryFlag": "assets/images/flags/ci.png", + "CountryName": "Cote DIvoire" + }, { + "Id": 176, + "Avatar": "https://randomuser.me/api/portraits/men/35.jpg", + "Position": "down", + "Name": "Laudelino Castro ", + "AthleteNumber": 12711, + "BeatsPerMinute": 106, + "TopSpeed": 4.4, + "Registered": "2017-02-08T04:03:22 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/hr.png", + "CountryName": "Croatia" + }, { + "Id": 138, + "Avatar": "https://randomuser.me/api/portraits/men/78.jpg", + "Position": "current", + "Name": "Oscar Calvo ", + "AthleteNumber": 45078, + "BeatsPerMinute": 109, + "TopSpeed": 4.3, + "Registered": "2017-06-19T10:57:42 -03:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/cu.png", + "CountryName": "Cuba" + }, { + "Id": 137, + "Avatar": "https://randomuser.me/api/portraits/men/80.jpg", + "Position": "down", + "Name": "Lance Dunn ", + "AthleteNumber": 10113, + "BeatsPerMinute": 94, + "TopSpeed": 4.5, + "Registered": "2017-03-13T10:51:36 -02:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/cy.png", + "CountryName": "Cyprus" + }, { + "Id": 173, + "Avatar": "https://randomuser.me/api/portraits/women/18.jpg", + "Position": "current", + "Name": "Hassana Camp ", + "AthleteNumber": 14467, + "BeatsPerMinute": 104, + "TopSpeed": 5.2, + "Registered": "2017-06-02T12:21:59 -03:00", + "TrackProgress": 35, + "CountryFlag": "assets/images/flags/cz.png", + "CountryName": "Czech Republic" + }, { + "Id": 46, + "Avatar": "https://randomuser.me/api/portraits/women/55.jpg", + "Position": "current", + "Name": "Ronja Kraft ", + "AthleteNumber": 21800, + "BeatsPerMinute": 101, + "TopSpeed": 5.3, + "Registered": "2017-04-02T03:33:57 -03:00", + "TrackProgress": 38, + "CountryFlag": "assets/images/flags/dk.png", + "CountryName": "Denmark" + }, { + "Id": 8, + "Avatar": "https://randomuser.me/api/portraits/men/14.jpg", + "Position": "up", + "Name": "Hans Möller ", + "AthleteNumber": 34122, + "BeatsPerMinute": 109, + "TopSpeed": 5.6, + "Registered": "2017-06-20T06:02:49 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/dj.png", + "CountryName": "Djibouti" + }, { + "Id": 188, + "Avatar": "https://randomuser.me/api/portraits/women/45.jpg", + "Position": "down", + "Name": "Ceylan Duygulu ", + "AthleteNumber": 21527, + "BeatsPerMinute": 99, + "TopSpeed": 4.9, + "Registered": "2017-07-13T09:06:04 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/dm.png", + "CountryName": "Dominica" + }, { + "Id": 134, + "Avatar": "https://randomuser.me/api/portraits/women/66.jpg", + "Position": "down", + "Name": "Anni Waisanen ", + "AthleteNumber": 32133, + "BeatsPerMinute": 99, + "TopSpeed": 5, + "Registered": "2017-08-17T01:35:09 -03:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/do.png", + "CountryName": "Dominican Republic" + }, { + "Id": 112, + "Avatar": "https://randomuser.me/api/portraits/women/53.jpg", + "Position": "down", + "Name": "Karen Shaw ", + "AthleteNumber": 31048, + "BeatsPerMinute": 107, + "TopSpeed": 5.7, + "Registered": "2017-05-15T09:25:03 -03:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/ec.png", + "CountryName": "Ecuador" + }, { + "Id": 161, + "Avatar": "https://randomuser.me/api/portraits/men/38.jpg", + "Position": "current", + "Name": "Alex Martin ", + "AthleteNumber": 27887, + "BeatsPerMinute": 96, + "TopSpeed": 4.2, + "Registered": "2017-10-28T04:06:33 -03:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/eg.png", + "CountryName": "Egypt" + }, { + "Id": 196, + "Avatar": "https://randomuser.me/api/portraits/women/30.jpg", + "Position": "up", + "Name": "Begüm Erkekli ", + "AthleteNumber": 37888, + "BeatsPerMinute": 104, + "TopSpeed": 4.6, + "Registered": "2017-10-04T03:02:35 -03:00", + "TrackProgress": 44, + "CountryFlag": "assets/images/flags/sv.png", + "CountryName": "El Salvador" + }, { + "Id": 24, + "Avatar": "https://randomuser.me/api/portraits/men/0.jpg", + "Position": "down", + "Name": "Joan Ortega ", + "AthleteNumber": 49478, + "BeatsPerMinute": 103, + "TopSpeed": 5.4, + "Registered": "2017-07-04T03:01:47 -03:00", + "TrackProgress": 49, + "CountryFlag": "assets/images/flags/gq.png", + "CountryName": "Equatorial Guinea" + }, { + "Id": 174, + "Avatar": "https://randomuser.me/api/portraits/women/29.jpg", + "Position": "current", + "Name": "Beatriz Gallardo ", + "AthleteNumber": 38538, + "BeatsPerMinute": 101, + "TopSpeed": 6, + "Registered": "2017-11-06T02:14:31 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/er.png", + "CountryName": "Eritrea" + }, { + "Id": 193, + "Avatar": "https://randomuser.me/api/portraits/women/59.jpg", + "Position": "down", + "Name": "Sophia Carlson ", + "AthleteNumber": 44183, + "BeatsPerMinute": 102, + "TopSpeed": 5.1, + "Registered": "2017-09-04T07:03:19 -03:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/ee.png", + "CountryName": "Estonia" + }, { + "Id": 85, + "Avatar": "https://randomuser.me/api/portraits/men/43.jpg", + "Position": "down", + "Name": "Niilo Laurila ", + "AthleteNumber": 49215, + "BeatsPerMinute": 104, + "TopSpeed": 4.5, + "Registered": "2017-04-26T01:26:36 -03:00", + "TrackProgress": 35, + "CountryFlag": "assets/images/flags/et.png", + "CountryName": "Ethiopia" + }, { + "Id": 201, + "Avatar": "https://randomuser.me/api/portraits/men/92.jpg", + "Position": "up", + "Name": "Kaya Tekand ", + "AthleteNumber": 11028, + "BeatsPerMinute": 93, + "TopSpeed": 5.2, + "Registered": "2017-04-10T09:57:13 -03:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/fj.png", + "CountryName": "Fiji" + }, { + "Id": 123, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "current", + "Name": "Eeli Makinen ", + "AthleteNumber": 45296, + "BeatsPerMinute": 106, + "TopSpeed": 5.2, + "Registered": "2017-01-06T09:58:02 -02:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/fi.png", + "CountryName": "Finland" + }, { + "Id": 16, + "Avatar": "https://randomuser.me/api/portraits/men/72.jpg", + "Position": "down", + "Name": "Felix Olsen ", + "AthleteNumber": 43198, + "BeatsPerMinute": 101, + "TopSpeed": 4.2, + "Registered": "2017-09-27T01:17:14 -03:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/fr.png", + "CountryName": "France" + }, { + "Id": 62, + "Avatar": "https://randomuser.me/api/portraits/men/43.jpg", + "Position": "current", + "Name": "Roman Smith ", + "AthleteNumber": 15531, + "BeatsPerMinute": 106, + "TopSpeed": 4.9, + "Registered": "2017-06-14T05:12:04 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/ga.png", + "CountryName": "Gabon" + }, { + "Id": 69, + "Avatar": "https://randomuser.me/api/portraits/men/17.jpg", + "Position": "current", + "Name": "Emil Meißner ", + "AthleteNumber": 37183, + "BeatsPerMinute": 97, + "TopSpeed": 4, + "Registered": "2017-07-15T12:32:30 -03:00", + "TrackProgress": 35, + "CountryFlag": "assets/images/flags/gm.png", + "CountryName": "Gambia" + }, { + "Id": 182, + "Avatar": "https://randomuser.me/api/portraits/men/94.jpg", + "Position": "current", + "Name": "Gerald Schmidt ", + "AthleteNumber": 47410, + "BeatsPerMinute": 102, + "TopSpeed": 5.8, + "Registered": "2017-02-20T11:53:08 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/ge.png", + "CountryName": "Georgia" + }, { + "Id": 190, + "Avatar": "https://randomuser.me/api/portraits/women/53.jpg", + "Position": "current", + "Name": "Gladys Van Der Steeg ", + "AthleteNumber": 20216, + "BeatsPerMinute": 94, + "TopSpeed": 4.3, + "Registered": "2017-10-09T02:01:16 -03:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/de.png", + "CountryName": "Germany" + }, { + "Id": 100, + "Avatar": "https://randomuser.me/api/portraits/women/20.jpg", + "Position": "current", + "Name": "Alexis Walker ", + "AthleteNumber": 43183, + "BeatsPerMinute": 103, + "TopSpeed": 5.8, + "Registered": "2017-08-07T10:35:06 -03:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/gh.png", + "CountryName": "Ghana" + }, { + "Id": 85, + "Avatar": "https://randomuser.me/api/portraits/men/34.jpg", + "Position": "current", + "Name": "Jeffrey Medina ", + "AthleteNumber": 42905, + "BeatsPerMinute": 100, + "TopSpeed": 5.2, + "Registered": "2017-09-15T02:11:43 -03:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/gr.png", + "CountryName": "Greece" + }, { + "Id": 169, + "Avatar": "https://randomuser.me/api/portraits/men/21.jpg", + "Position": "down", + "Name": "Julian Barth ", + "AthleteNumber": 19011, + "BeatsPerMinute": 91, + "TopSpeed": 5.2, + "Registered": "2017-04-21T08:08:33 -03:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/gd.png", + "CountryName": "Grenada" + }, { + "Id": 116, + "Avatar": "https://randomuser.me/api/portraits/women/1.jpg", + "Position": "down", + "Name": "Sevcan Kollen ", + "AthleteNumber": 13728, + "BeatsPerMinute": 104, + "TopSpeed": 5.3, + "Registered": "2017-09-08T08:29:08 -03:00", + "TrackProgress": 33, + "CountryFlag": "assets/images/flags/gt.png", + "CountryName": "Guatemala" + }, { + "Id": 75, + "Avatar": "https://randomuser.me/api/portraits/men/88.jpg", + "Position": "down", + "Name": "Rafael Gutierrez ", + "AthleteNumber": 38804, + "BeatsPerMinute": 100, + "TopSpeed": 5.9, + "Registered": "2017-02-08T07:50:59 -02:00", + "TrackProgress": 37, + "CountryFlag": "assets/images/flags/gn.png", + "CountryName": "Guinea" + }, { + "Id": 121, + "Avatar": "https://randomuser.me/api/portraits/men/48.jpg", + "Position": "current", + "Name": "Väinö Salmi ", + "AthleteNumber": 29839, + "BeatsPerMinute": 107, + "TopSpeed": 5.5, + "Registered": "2017-10-21T05:57:02 -03:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/gw.png", + "CountryName": "Guinea-Bissau" + }, { + "Id": 180, + "Avatar": "https://randomuser.me/api/portraits/women/90.jpg", + "Position": "up", + "Name": "Lillian Bowman ", + "AthleteNumber": 35323, + "BeatsPerMinute": 103, + "TopSpeed": 4.5, + "Registered": "2017-08-31T11:55:25 -03:00", + "TrackProgress": 29, + "CountryFlag": "assets/images/flags/gy.png", + "CountryName": "Guyana" + }, { + "Id": 139, + "Avatar": "https://randomuser.me/api/portraits/women/28.jpg", + "Position": "current", + "Name": "Annabell Barth ", + "AthleteNumber": 41130, + "BeatsPerMinute": 103, + "TopSpeed": 5, + "Registered": "2017-08-24T11:58:56 -03:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/ht.png", + "CountryName": "Haiti" + }, { + "Id": 4, + "Avatar": "https://randomuser.me/api/portraits/men/34.jpg", + "Position": "down", + "Name": "Mathys Martin ", + "AthleteNumber": 32928, + "BeatsPerMinute": 98, + "TopSpeed": 5.5, + "Registered": "2017-05-17T12:51:47 -03:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/va.png", + "CountryName": "Holy See (Vatican City State)" + }, { + "Id": 1, + "Avatar": "https://randomuser.me/api/portraits/men/65.jpg", + "Position": "down", + "Name": "Louis Stewart ", + "AthleteNumber": 48131, + "BeatsPerMinute": 103, + "TopSpeed": 5.7, + "Registered": "2017-02-26T07:28:02 -02:00", + "TrackProgress": 36, + "CountryFlag": "assets/images/flags/hn.png", + "CountryName": "Honduras" + }, { + "Id": 190, + "Avatar": "https://randomuser.me/api/portraits/women/2.jpg", + "Position": "current", + "Name": "Venla Korpela ", + "AthleteNumber": 16454, + "BeatsPerMinute": 92, + "TopSpeed": 4.1, + "Registered": "2017-08-22T10:36:38 -03:00", + "TrackProgress": 38, + "CountryFlag": "assets/images/flags/hu.png", + "CountryName": "Hungary" + }, { + "Id": 167, + "Avatar": "https://randomuser.me/api/portraits/men/81.jpg", + "Position": "down", + "Name": "Milo Charles ", + "AthleteNumber": 10661, + "BeatsPerMinute": 99, + "TopSpeed": 5.4, + "Registered": "2017-07-20T09:00:22 -03:00", + "TrackProgress": 33, + "CountryFlag": "assets/images/flags/is.png", + "CountryName": "Iceland" + }, { + "Id": 62, + "Avatar": "https://randomuser.me/api/portraits/men/9.jpg", + "Position": "current", + "Name": "Anthony Harcourt ", + "AthleteNumber": 33649, + "BeatsPerMinute": 109, + "TopSpeed": 5.5, + "Registered": "2017-06-14T11:10:20 -03:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/in.png", + "CountryName": "India" + }, { + "Id": 72, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "up", + "Name": "Aaron Robertson ", + "AthleteNumber": 30727, + "BeatsPerMinute": 95, + "TopSpeed": 4.2, + "Registered": "2017-08-23T09:37:40 -03:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/id.png", + "CountryName": "Indonesia" + }, { + "Id": 2, + "Avatar": "https://randomuser.me/api/portraits/men/14.jpg", + "Position": "up", + "Name": "Bill Fox ", + "AthleteNumber": 18511, + "BeatsPerMinute": 91, + "TopSpeed": 5, + "Registered": "2017-10-24T08:25:40 -03:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/ir.png", + "CountryName": "Iran, Islamic Republic Of" + }, { + "Id": 58, + "Avatar": "https://randomuser.me/api/portraits/women/30.jpg", + "Position": "up", + "Name": "Veera Saari ", + "AthleteNumber": 40408, + "BeatsPerMinute": 100, + "TopSpeed": 4.7, + "Registered": "2017-10-28T10:39:22 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/iq.png", + "CountryName": "Iraq" + }, { + "Id": 87, + "Avatar": "https://randomuser.me/api/portraits/men/35.jpg", + "Position": "current", + "Name": "Loïc Gerard ", + "AthleteNumber": 31706, + "BeatsPerMinute": 102, + "TopSpeed": 4.4, + "Registered": "2017-07-28T09:10:43 -03:00", + "TrackProgress": 44, + "CountryFlag": "assets/images/flags/ie.png", + "CountryName": "Ireland" + }, { + "Id": 137, + "Avatar": "https://randomuser.me/api/portraits/women/75.jpg", + "Position": "up", + "Name": "Gloria Caballero ", + "AthleteNumber": 43379, + "BeatsPerMinute": 103, + "TopSpeed": 4.3, + "Registered": "2017-08-10T08:27:45 -03:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/il.png", + "CountryName": "Israel" + }, { + "Id": 5, + "Avatar": "https://randomuser.me/api/portraits/women/38.jpg", + "Position": "current", + "Name": "Gianne Godijn ", + "AthleteNumber": 45945, + "BeatsPerMinute": 96, + "TopSpeed": 4.5, + "Registered": "2017-03-22T03:23:12 -02:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/it.png", + "CountryName": "Italy" + }, { + "Id": 196, + "Avatar": "https://randomuser.me/api/portraits/women/17.jpg", + "Position": "current", + "Name": "Parel Zuidhof ", + "AthleteNumber": 32718, + "BeatsPerMinute": 105, + "TopSpeed": 5, + "Registered": "2017-01-21T10:19:56 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/jm.png", + "CountryName": "Jamaica" + }, { + "Id": 23, + "Avatar": "https://randomuser.me/api/portraits/men/72.jpg", + "Position": "down", + "Name": "Gökhan Aşıkoğlu ", + "AthleteNumber": 13890, + "BeatsPerMinute": 105, + "TopSpeed": 5.4, + "Registered": "2017-03-31T06:14:26 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/jp.png", + "CountryName": "Japan" + }, { + "Id": 74, + "Avatar": "https://randomuser.me/api/portraits/women/9.jpg", + "Position": "up", + "Name": "Minea Rantanen ", + "AthleteNumber": 18835, + "BeatsPerMinute": 105, + "TopSpeed": 5, + "Registered": "2017-01-24T07:30:43 -02:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/jo.png", + "CountryName": "Jordan" + }, { + "Id": 92, + "Avatar": "https://randomuser.me/api/portraits/women/4.jpg", + "Position": "down", + "Name": "Asta Hansen ", + "AthleteNumber": 17222, + "BeatsPerMinute": 101, + "TopSpeed": 4.3, + "Registered": "2017-01-08T02:41:56 -02:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/kz.png", + "CountryName": "Kazakhstan" + }, { + "Id": 191, + "Avatar": "https://randomuser.me/api/portraits/women/13.jpg", + "Position": "up", + "Name": "Sheryl Collins ", + "AthleteNumber": 36473, + "BeatsPerMinute": 98, + "TopSpeed": 4.2, + "Registered": "2017-03-23T12:54:35 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/ke.png", + "CountryName": "Kenya" + }, { + "Id": 166, + "Avatar": "https://randomuser.me/api/portraits/women/74.jpg", + "Position": "current", + "Name": "Maria Parra ", + "AthleteNumber": 39861, + "BeatsPerMinute": 106, + "TopSpeed": 6, + "Registered": "2017-01-30T09:22:52 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/ki.png", + "CountryName": "Kiribati" + }, { + "Id": 73, + "Avatar": "https://randomuser.me/api/portraits/women/33.jpg", + "Position": "up", + "Name": "Annabelle Besteman ", + "AthleteNumber": 30560, + "BeatsPerMinute": 105, + "TopSpeed": 5.3, + "Registered": "2017-11-11T02:04:19 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/kp.png", + "CountryName": "Korea, Democratic PeopleS Republic of" + }, { + "Id": 182, + "Avatar": "https://randomuser.me/api/portraits/women/14.jpg", + "Position": "up", + "Name": "Ariena Achterberg ", + "AthleteNumber": 41330, + "BeatsPerMinute": 92, + "TopSpeed": 5.6, + "Registered": "2017-10-22T02:15:39 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/kr.png", + "CountryName": "Korea, Republic of" + }, { + "Id": 67, + "Avatar": "https://randomuser.me/api/portraits/men/50.jpg", + "Position": "current", + "Name": "Villads Larsen ", + "AthleteNumber": 44677, + "BeatsPerMinute": 93, + "TopSpeed": 5.7, + "Registered": "2017-03-25T11:25:30 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/kw.png", + "CountryName": "Kuwait" + }, { + "Id": 110, + "Avatar": "https://randomuser.me/api/portraits/women/26.jpg", + "Position": "down", + "Name": "Emilie Morin ", + "AthleteNumber": 26164, + "BeatsPerMinute": 98, + "TopSpeed": 4.9, + "Registered": "2017-02-01T04:18:19 -02:00", + "TrackProgress": 35, + "CountryFlag": "assets/images/flags/kg.png", + "CountryName": "Kyrgyzstan" + }, { + "Id": 31, + "Avatar": "https://randomuser.me/api/portraits/men/56.jpg", + "Position": "up", + "Name": "Judd Campbell ", + "AthleteNumber": 37365, + "BeatsPerMinute": 110, + "TopSpeed": 5, + "Registered": "2017-10-19T11:01:10 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/la.png", + "CountryName": "Lao PeopleS Democratic Republic" + }, { + "Id": 110, + "Avatar": "https://randomuser.me/api/portraits/women/13.jpg", + "Position": "current", + "Name": "Özsu Keçeci ", + "AthleteNumber": 29403, + "BeatsPerMinute": 106, + "TopSpeed": 4.2, + "Registered": "2017-01-19T11:34:13 -02:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/lv.png", + "CountryName": "Latvia" + }, { + "Id": 123, + "Avatar": "https://randomuser.me/api/portraits/women/12.jpg", + "Position": "up", + "Name": "آنیتا كامياران ", + "AthleteNumber": 18980, + "BeatsPerMinute": 90, + "TopSpeed": 4.5, + "Registered": "2017-07-21T06:42:59 -03:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/lb.png", + "CountryName": "Lebanon" + }, { + "Id": 138, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "down", + "Name": "Antoine Mackay ", + "AthleteNumber": 34547, + "BeatsPerMinute": 104, + "TopSpeed": 5, + "Registered": "2017-08-22T09:11:37 -03:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/ls.png", + "CountryName": "Lesotho" + }, { + "Id": 167, + "Avatar": "https://randomuser.me/api/portraits/men/19.jpg", + "Position": "down", + "Name": "Louis Smith ", + "AthleteNumber": 31837, + "BeatsPerMinute": 98, + "TopSpeed": 5.4, + "Registered": "2017-03-19T08:12:23 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/lr.png", + "CountryName": "Liberia" + }, { + "Id": 29, + "Avatar": "https://randomuser.me/api/portraits/men/29.jpg", + "Position": "current", + "Name": "Selmo Caldeira ", + "AthleteNumber": 21837, + "BeatsPerMinute": 110, + "TopSpeed": 4.9, + "Registered": "2017-10-20T03:40:24 -03:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/ly.png", + "CountryName": "Libyan Arab Jamahiriya" + }, { + "Id": 35, + "Avatar": "https://randomuser.me/api/portraits/women/42.jpg", + "Position": "down", + "Name": "Elaine Smith ", + "AthleteNumber": 38243, + "BeatsPerMinute": 108, + "TopSpeed": 4, + "Registered": "2017-06-11T12:20:41 -03:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/li.png", + "CountryName": "Liechtenstein" + }, { + "Id": 75, + "Avatar": "https://randomuser.me/api/portraits/men/2.jpg", + "Position": "up", + "Name": "Fritz Sommer ", + "AthleteNumber": 26210, + "BeatsPerMinute": 99, + "TopSpeed": 4.6, + "Registered": "2017-09-29T03:54:57 -03:00", + "TrackProgress": 23, + "CountryFlag": "assets/images/flags/lt.png", + "CountryName": "Lithuania" + }, { + "Id": 40, + "Avatar": "https://randomuser.me/api/portraits/men/5.jpg", + "Position": "down", + "Name": "Carter Evans ", + "AthleteNumber": 46961, + "BeatsPerMinute": 100, + "TopSpeed": 5.3, + "Registered": "2017-07-23T02:43:07 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/lu.png", + "CountryName": "Luxembourg" + }, { + "Id": 183, + "Avatar": "https://randomuser.me/api/portraits/women/53.jpg", + "Position": "up", + "Name": "رونیکا سلطانی نژاد ", + "AthleteNumber": 35233, + "BeatsPerMinute": 99, + "TopSpeed": 4.6, + "Registered": "2017-08-13T01:05:52 -03:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/mk.png", + "CountryName": "Macedonia, The Former Yugoslav Republic of" + }, { + "Id": 151, + "Avatar": "https://randomuser.me/api/portraits/women/88.jpg", + "Position": "current", + "Name": "Charlotte Mills ", + "AthleteNumber": 49829, + "BeatsPerMinute": 92, + "TopSpeed": 5.3, + "Registered": "2017-05-10T04:33:10 -03:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/mg.png", + "CountryName": "Madagascar" + }, { + "Id": 107, + "Avatar": "https://randomuser.me/api/portraits/men/33.jpg", + "Position": "up", + "Name": "Pedro Marquez ", + "AthleteNumber": 16169, + "BeatsPerMinute": 97, + "TopSpeed": 5.4, + "Registered": "2017-11-11T05:14:31 -02:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/mw.png", + "CountryName": "Malawi" + }, { + "Id": 65, + "Avatar": "https://randomuser.me/api/portraits/women/9.jpg", + "Position": "down", + "Name": "Jenny Burke ", + "AthleteNumber": 15266, + "BeatsPerMinute": 99, + "TopSpeed": 5.4, + "Registered": "2017-09-11T12:20:19 -03:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/my.png", + "CountryName": "Malaysia" + }, { + "Id": 155, + "Avatar": "https://randomuser.me/api/portraits/men/82.jpg", + "Position": "up", + "Name": "Justin Philippe ", + "AthleteNumber": 12858, + "BeatsPerMinute": 104, + "TopSpeed": 5.7, + "Registered": "2017-03-16T02:00:35 -02:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/mv.png", + "CountryName": "Maldives" + }, { + "Id": 165, + "Avatar": "https://randomuser.me/api/portraits/men/79.jpg", + "Position": "down", + "Name": "Mario Ellis ", + "AthleteNumber": 18026, + "BeatsPerMinute": 99, + "TopSpeed": 5.5, + "Registered": "2017-02-13T11:53:15 -02:00", + "TrackProgress": 47, + "CountryFlag": "assets/images/flags/ml.png", + "CountryName": "Mali" + }, { + "Id": 107, + "Avatar": "https://randomuser.me/api/portraits/women/92.jpg", + "Position": "down", + "Name": "Megan Webb ", + "AthleteNumber": 30713, + "BeatsPerMinute": 93, + "TopSpeed": 5.6, + "Registered": "2017-08-20T09:26:51 -03:00", + "TrackProgress": 45, + "CountryFlag": "assets/images/flags/mt.png", + "CountryName": "Malta" + }, { + "Id": 52, + "Avatar": "https://randomuser.me/api/portraits/men/94.jpg", + "Position": "down", + "Name": "Adérito Lopes ", + "AthleteNumber": 21320, + "BeatsPerMinute": 91, + "TopSpeed": 5.2, + "Registered": "2017-01-07T06:47:56 -02:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/mh.png", + "CountryName": "Marshall Islands" + }, { + "Id": 99, + "Avatar": "https://randomuser.me/api/portraits/men/89.jpg", + "Position": "down", + "Name": "Victor Lévesque ", + "AthleteNumber": 48375, + "BeatsPerMinute": 110, + "TopSpeed": 5.7, + "Registered": "2017-11-10T11:31:44 -02:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/mr.png", + "CountryName": "Mauritania" + }, { + "Id": 188, + "Avatar": "https://randomuser.me/api/portraits/men/81.jpg", + "Position": "down", + "Name": "آراد یاسمی ", + "AthleteNumber": 34370, + "BeatsPerMinute": 99, + "TopSpeed": 5.9, + "Registered": "2017-02-02T11:42:41 -02:00", + "TrackProgress": 45, + "CountryFlag": "assets/images/flags/mu.png", + "CountryName": "Mauritius" + }, { + "Id": 10, + "Avatar": "https://randomuser.me/api/portraits/women/13.jpg", + "Position": "down", + "Name": "Maeva Bergeron ", + "AthleteNumber": 15655, + "BeatsPerMinute": 94, + "TopSpeed": 5.9, + "Registered": "2017-10-03T09:42:15 -03:00", + "TrackProgress": 37, + "CountryFlag": "assets/images/flags/mx.png", + "CountryName": "Mexico" + }, { + "Id": 41, + "Avatar": "https://randomuser.me/api/portraits/men/20.jpg", + "Position": "up", + "Name": "Oskari Karjala ", + "AthleteNumber": 31498, + "BeatsPerMinute": 90, + "TopSpeed": 4.5, + "Registered": "2017-05-10T12:45:12 -03:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/fm.png", + "CountryName": "Micronesia, Federated States of" + }, { + "Id": 51, + "Avatar": "https://randomuser.me/api/portraits/men/74.jpg", + "Position": "up", + "Name": "Alex Meyer ", + "AthleteNumber": 44390, + "BeatsPerMinute": 94, + "TopSpeed": 4.3, + "Registered": "2017-08-04T07:05:34 -03:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/md.png", + "CountryName": "Moldova, Republic of" + }, { + "Id": 128, + "Avatar": "https://randomuser.me/api/portraits/women/52.jpg", + "Position": "up", + "Name": "Sophie Lewis ", + "AthleteNumber": 46222, + "BeatsPerMinute": 106, + "TopSpeed": 4.4, + "Registered": "2017-02-20T09:42:07 -02:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/mc.png", + "CountryName": "Monaco" + }, { + "Id": 79, + "Avatar": "https://randomuser.me/api/portraits/women/39.jpg", + "Position": "current", + "Name": "Ashley Romero ", + "AthleteNumber": 36611, + "BeatsPerMinute": 104, + "TopSpeed": 5.5, + "Registered": "2017-02-08T12:45:46 -02:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/mn.png", + "CountryName": "Mongolia" + }, { + "Id": 124, + "Avatar": "https://randomuser.me/api/portraits/women/19.jpg", + "Position": "current", + "Name": "Marie Poulsen ", + "AthleteNumber": 44113, + "BeatsPerMinute": 109, + "TopSpeed": 4.7, + "Registered": "2017-04-15T10:25:21 -03:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/ma.png", + "CountryName": "Morocco" + }, { + "Id": 42, + "Avatar": "https://randomuser.me/api/portraits/women/83.jpg", + "Position": "down", + "Name": "Caitlin Jackson ", + "AthleteNumber": 45472, + "BeatsPerMinute": 101, + "TopSpeed": 4.3, + "Registered": "2017-09-17T09:41:01 -03:00", + "TrackProgress": 21, + "CountryFlag": "assets/images/flags/mz.png", + "CountryName": "Mozambique" + }, { + "Id": 15, + "Avatar": "https://randomuser.me/api/portraits/women/79.jpg", + "Position": "down", + "Name": "Marilou Hubert ", + "AthleteNumber": 43655, + "BeatsPerMinute": 104, + "TopSpeed": 4.2, + "Registered": "2017-09-28T11:13:00 -03:00", + "TrackProgress": 29, + "CountryFlag": "assets/images/flags/mm.png", + "CountryName": "Myanmar" + }, { + "Id": 63, + "Avatar": "https://randomuser.me/api/portraits/women/9.jpg", + "Position": "up", + "Name": "Estelle Vincent ", + "AthleteNumber": 41700, + "BeatsPerMinute": 99, + "TopSpeed": 5.7, + "Registered": "2017-05-31T02:56:58 -03:00", + "TrackProgress": 36, + "CountryFlag": "assets/images/flags/na.png", + "CountryName": "Namibia" + }, { + "Id": 154, + "Avatar": "https://randomuser.me/api/portraits/women/54.jpg", + "Position": "down", + "Name": "Rhonda Simmmons ", + "AthleteNumber": 37139, + "BeatsPerMinute": 96, + "TopSpeed": 5.1, + "Registered": "2017-07-03T05:39:45 -03:00", + "TrackProgress": 30, + "CountryFlag": "assets/images/flags/nr.png", + "CountryName": "Nauru" + }, { + "Id": 191, + "Avatar": "https://randomuser.me/api/portraits/men/42.jpg", + "Position": "current", + "Name": "آرش احمدی ", + "AthleteNumber": 36948, + "BeatsPerMinute": 90, + "TopSpeed": 4.1, + "Registered": "2017-09-08T01:22:14 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/np.png", + "CountryName": "Nepal" + }, { + "Id": 141, + "Avatar": "https://randomuser.me/api/portraits/men/15.jpg", + "Position": "current", + "Name": "Miro Korpela ", + "AthleteNumber": 40544, + "BeatsPerMinute": 104, + "TopSpeed": 5.3, + "Registered": "2017-01-10T07:12:44 -02:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/nl.png", + "CountryName": "Netherlands" + }, { + "Id": 73, + "Avatar": "https://randomuser.me/api/portraits/women/4.jpg", + "Position": "up", + "Name": "Afet Kumcuoğlu ", + "AthleteNumber": 33454, + "BeatsPerMinute": 106, + "TopSpeed": 5.1, + "Registered": "2017-09-16T07:05:43 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/nz.png", + "CountryName": "New Zealand" + }, { + "Id": 163, + "Avatar": "https://randomuser.me/api/portraits/women/52.jpg", + "Position": "up", + "Name": "Millie Cooper ", + "AthleteNumber": 14610, + "BeatsPerMinute": 99, + "TopSpeed": 5.4, + "Registered": "2017-05-08T09:30:14 -03:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/ni.png", + "CountryName": "Nicaragua" + }, { + "Id": 53, + "Avatar": "https://randomuser.me/api/portraits/women/51.jpg", + "Position": "current", + "Name": "Kayla Patel ", + "AthleteNumber": 42780, + "BeatsPerMinute": 103, + "TopSpeed": 4.7, + "Registered": "2017-04-20T09:33:53 -03:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/ne.png", + "CountryName": "Niger" + }, { + "Id": 58, + "Avatar": "https://randomuser.me/api/portraits/men/31.jpg", + "Position": "current", + "Name": "Diego Gautier ", + "AthleteNumber": 26320, + "BeatsPerMinute": 97, + "TopSpeed": 4.6, + "Registered": "2017-06-11T03:50:43 -03:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/ng.png", + "CountryName": "Nigeria" + }, { + "Id": 186, + "Avatar": "https://randomuser.me/api/portraits/men/2.jpg", + "Position": "up", + "Name": "کوروش کامروا ", + "AthleteNumber": 13506, + "BeatsPerMinute": 109, + "TopSpeed": 4.4, + "Registered": "2017-04-16T01:10:37 -03:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/nu.png", + "CountryName": "Niue" + }, { + "Id": 101, + "Avatar": "https://randomuser.me/api/portraits/women/71.jpg", + "Position": "down", + "Name": "Lavínia Silva ", + "AthleteNumber": 33994, + "BeatsPerMinute": 93, + "TopSpeed": 5.6, + "Registered": "2017-03-22T08:55:46 -02:00", + "TrackProgress": 49, + "CountryFlag": "assets/images/flags/no.png", + "CountryName": "Norway" + }, { + "Id": 194, + "Avatar": "https://randomuser.me/api/portraits/men/71.jpg", + "Position": "down", + "Name": "Adrian Ibañez ", + "AthleteNumber": 21968, + "BeatsPerMinute": 105, + "TopSpeed": 5.3, + "Registered": "2017-02-03T04:36:54 -02:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/om.png", + "CountryName": "Oman" + }, { + "Id": 143, + "Avatar": "https://randomuser.me/api/portraits/men/38.jpg", + "Position": "up", + "Name": "رضا کوتی ", + "AthleteNumber": 13640, + "BeatsPerMinute": 103, + "TopSpeed": 4.2, + "Registered": "2017-04-30T02:34:29 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/pk.png", + "CountryName": "Pakistan" + }, { + "Id": 37, + "Avatar": "https://randomuser.me/api/portraits/men/86.jpg", + "Position": "down", + "Name": "Clyde Matthews ", + "AthleteNumber": 11955, + "BeatsPerMinute": 93, + "TopSpeed": 5.2, + "Registered": "2017-03-02T05:01:02 -02:00", + "TrackProgress": 38, + "CountryFlag": "assets/images/flags/pw.png", + "CountryName": "Palau" + }, { + "Id": 176, + "Avatar": "https://randomuser.me/api/portraits/men/26.jpg", + "Position": "current", + "Name": "Tim Neal ", + "AthleteNumber": 45860, + "BeatsPerMinute": 97, + "TopSpeed": 5.6, + "Registered": "2017-04-21T04:06:34 -03:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/pa.png", + "CountryName": "Panama" + }, { + "Id": 110, + "Avatar": "https://randomuser.me/api/portraits/women/15.jpg", + "Position": "current", + "Name": "Annabell Brand ", + "AthleteNumber": 39233, + "BeatsPerMinute": 93, + "TopSpeed": 5.7, + "Registered": "2017-03-01T12:21:24 -02:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/pg.png", + "CountryName": "Papua New Guinea" + }, { + "Id": 188, + "Avatar": "https://randomuser.me/api/portraits/men/3.jpg", + "Position": "current", + "Name": "Foppe Delfos ", + "AthleteNumber": 39679, + "BeatsPerMinute": 107, + "TopSpeed": 4.1, + "Registered": "2017-08-05T10:54:56 -03:00", + "TrackProgress": 37, + "CountryFlag": "assets/images/flags/py.png", + "CountryName": "Paraguay" + }, { + "Id": 43, + "Avatar": "https://randomuser.me/api/portraits/men/42.jpg", + "Position": "up", + "Name": "Kent Clark ", + "AthleteNumber": 32799, + "BeatsPerMinute": 106, + "TopSpeed": 5.7, + "Registered": "2017-01-24T01:00:15 -02:00", + "TrackProgress": 48, + "CountryFlag": "assets/images/flags/pe.png", + "CountryName": "Peru" + }, { + "Id": 167, + "Avatar": "https://randomuser.me/api/portraits/women/32.jpg", + "Position": "current", + "Name": "Esma Adıvar ", + "AthleteNumber": 35565, + "BeatsPerMinute": 99, + "TopSpeed": 4.2, + "Registered": "2017-06-17T12:34:29 -03:00", + "TrackProgress": 50, + "CountryFlag": "assets/images/flags/ph.png", + "CountryName": "Philippines" + }, { + "Id": 123, + "Avatar": "https://randomuser.me/api/portraits/women/19.jpg", + "Position": "down", + "Name": "Flora Perez ", + "AthleteNumber": 23907, + "BeatsPerMinute": 102, + "TopSpeed": 5.8, + "Registered": "2017-04-12T04:16:56 -03:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/pl.png", + "CountryName": "Poland" + }, { + "Id": 76, + "Avatar": "https://randomuser.me/api/portraits/men/65.jpg", + "Position": "current", + "Name": "David Scott ", + "AthleteNumber": 46997, + "BeatsPerMinute": 101, + "TopSpeed": 4.4, + "Registered": "2017-07-25T09:23:24 -03:00", + "TrackProgress": 37, + "CountryFlag": "assets/images/flags/pt.png", + "CountryName": "Portugal" + }, { + "Id": 183, + "Avatar": "https://randomuser.me/api/portraits/men/74.jpg", + "Position": "down", + "Name": "Yarno Kin ", + "AthleteNumber": 47324, + "BeatsPerMinute": 107, + "TopSpeed": 5.1, + "Registered": "2017-08-26T08:21:22 -03:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/ro.png", + "CountryName": "Romania" + }, { + "Id": 8, + "Avatar": "https://randomuser.me/api/portraits/women/15.jpg", + "Position": "down", + "Name": "Esther Kühn ", + "AthleteNumber": 24868, + "BeatsPerMinute": 92, + "TopSpeed": 5.5, + "Registered": "2017-05-14T12:30:08 -03:00", + "TrackProgress": 30, + "CountryFlag": "assets/images/flags/ru.png", + "CountryName": "Russian Federation" + }, { + "Id": 80, + "Avatar": "https://randomuser.me/api/portraits/men/90.jpg", + "Position": "down", + "Name": "Cecil Nichols ", + "AthleteNumber": 20656, + "BeatsPerMinute": 100, + "TopSpeed": 5, + "Registered": "2017-04-24T01:20:34 -03:00", + "TrackProgress": 30, + "CountryFlag": "assets/images/flags/rw.png", + "CountryName": "RWANDA" + }, { + "Id": 41, + "Avatar": "https://randomuser.me/api/portraits/women/65.jpg", + "Position": "down", + "Name": "Lilly Keuter ", + "AthleteNumber": 49893, + "BeatsPerMinute": 102, + "TopSpeed": 4.5, + "Registered": "2017-01-20T02:38:39 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/kn.png", + "CountryName": "Saint Kitts and Nevis" + }, { + "Id": 200, + "Avatar": "https://randomuser.me/api/portraits/women/73.jpg", + "Position": "current", + "Name": "Alice Perry ", + "AthleteNumber": 23750, + "BeatsPerMinute": 104, + "TopSpeed": 5.3, + "Registered": "2017-03-31T07:15:46 -03:00", + "TrackProgress": 45, + "CountryFlag": "assets/images/flags/lc.png", + "CountryName": "Saint Lucia" + }, { + "Id": 51, + "Avatar": "https://randomuser.me/api/portraits/women/34.jpg", + "Position": "down", + "Name": "Eléa Robin ", + "AthleteNumber": 26742, + "BeatsPerMinute": 90, + "TopSpeed": 4.7, + "Registered": "2017-03-30T12:34:24 -03:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/vc.png", + "CountryName": "Saint Vincent and the Grenadines" + }, { + "Id": 163, + "Avatar": "https://randomuser.me/api/portraits/men/70.jpg", + "Position": "down", + "Name": "میلاد قاسمی ", + "AthleteNumber": 12788, + "BeatsPerMinute": 101, + "TopSpeed": 4.1, + "Registered": "2017-03-01T07:51:17 -02:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/ws.png", + "CountryName": "Samoa" + }, { + "Id": 72, + "Avatar": "https://randomuser.me/api/portraits/women/26.jpg", + "Position": "down", + "Name": "Sélène Roussel ", + "AthleteNumber": 11261, + "BeatsPerMinute": 99, + "TopSpeed": 5.8, + "Registered": "2017-05-10T02:18:02 -03:00", + "TrackProgress": 26, + "CountryFlag": "assets/images/flags/sm.png", + "CountryName": "San Marino" + }, { + "Id": 159, + "Avatar": "https://randomuser.me/api/portraits/women/66.jpg", + "Position": "up", + "Name": "Eva Dean ", + "AthleteNumber": 48874, + "BeatsPerMinute": 103, + "TopSpeed": 5.7, + "Registered": "2017-03-04T01:58:52 -02:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/st.png", + "CountryName": "Sao Tome and Principe" + }, { + "Id": 12, + "Avatar": "https://randomuser.me/api/portraits/women/83.jpg", + "Position": "up", + "Name": "Sara Larsen ", + "AthleteNumber": 37094, + "BeatsPerMinute": 97, + "TopSpeed": 4.5, + "Registered": "2017-04-14T11:48:28 -03:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/sa.png", + "CountryName": "Saudi Arabia" + }, { + "Id": 194, + "Avatar": "https://randomuser.me/api/portraits/men/11.jpg", + "Position": "down", + "Name": "Kaya Taşlı ", + "AthleteNumber": 42291, + "BeatsPerMinute": 100, + "TopSpeed": 4.7, + "Registered": "2017-01-30T03:23:36 -02:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/sn.png", + "CountryName": "Senegal" + }, { + "Id": 162, + "Avatar": "https://randomuser.me/api/portraits/men/5.jpg", + "Position": "down", + "Name": "Adam Bouchard ", + "AthleteNumber": 38672, + "BeatsPerMinute": 99, + "TopSpeed": 4.7, + "Registered": "2017-01-04T03:04:05 -02:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/sc.png", + "CountryName": "Seychelles" + }, { + "Id": 96, + "Avatar": "https://randomuser.me/api/portraits/women/37.jpg", + "Position": "up", + "Name": "Thea Edwards ", + "AthleteNumber": 29141, + "BeatsPerMinute": 99, + "TopSpeed": 5.8, + "Registered": "2017-05-23T05:24:38 -03:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/sl.png", + "CountryName": "Sierra Leone" + }, { + "Id": 93, + "Avatar": "https://randomuser.me/api/portraits/women/90.jpg", + "Position": "current", + "Name": "Ana Bourgeois ", + "AthleteNumber": 24612, + "BeatsPerMinute": 110, + "TopSpeed": 6, + "Registered": "2017-11-02T02:17:43 -02:00", + "TrackProgress": 25, + "CountryFlag": "assets/images/flags/sg.png", + "CountryName": "Singapore" + }, { + "Id": 27, + "Avatar": "https://randomuser.me/api/portraits/women/61.jpg", + "Position": "up", + "Name": "Layla Douglas ", + "AthleteNumber": 21977, + "BeatsPerMinute": 97, + "TopSpeed": 5.4, + "Registered": "2017-04-19T11:43:38 -03:00", + "TrackProgress": 28, + "CountryFlag": "assets/images/flags/si.png", + "CountryName": "Slovenia" + }, { + "Id": 178, + "Avatar": "https://randomuser.me/api/portraits/women/65.jpg", + "Position": "down", + "Name": "Lillian Wade ", + "AthleteNumber": 10729, + "BeatsPerMinute": 110, + "TopSpeed": 4.8, + "Registered": "2017-04-07T09:53:13 -03:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/sb.png", + "CountryName": "Solomon Islands" + }, { + "Id": 192, + "Avatar": "https://randomuser.me/api/portraits/women/44.jpg", + "Position": "down", + "Name": "Viivi Kujala ", + "AthleteNumber": 29939, + "BeatsPerMinute": 93, + "TopSpeed": 4.1, + "Registered": "2017-05-03T02:40:05 -03:00", + "TrackProgress": 50, + "CountryFlag": "assets/images/flags/so.png", + "CountryName": "Somalia" + }, { + "Id": 87, + "Avatar": "https://randomuser.me/api/portraits/women/72.jpg", + "Position": "up", + "Name": "Charlotte Dean ", + "AthleteNumber": 45969, + "BeatsPerMinute": 105, + "TopSpeed": 5, + "Registered": "2017-02-13T05:39:15 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/za.png", + "CountryName": "South Africa" + }, { + "Id": 86, + "Avatar": "https://randomuser.me/api/portraits/women/45.jpg", + "Position": "down", + "Name": "Marisvalda Martins ", + "AthleteNumber": 33879, + "BeatsPerMinute": 107, + "TopSpeed": 5.4, + "Registered": "2017-01-31T12:07:48 -02:00", + "TrackProgress": 21, + "CountryFlag": "assets/images/flags/es.png", + "CountryName": "Spain" + }, { + "Id": 129, + "Avatar": "https://randomuser.me/api/portraits/women/34.jpg", + "Position": "up", + "Name": "Ella Hansen ", + "AthleteNumber": 27075, + "BeatsPerMinute": 101, + "TopSpeed": 5.1, + "Registered": "2017-01-05T10:12:42 -02:00", + "TrackProgress": 34, + "CountryFlag": "assets/images/flags/lk.png", + "CountryName": "Sri Lanka" + }, { + "Id": 27, + "Avatar": "https://randomuser.me/api/portraits/men/9.jpg", + "Position": "current", + "Name": "Johann Hinz ", + "AthleteNumber": 48244, + "BeatsPerMinute": 94, + "TopSpeed": 4.3, + "Registered": "2017-03-10T07:36:56 -02:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/sd.png", + "CountryName": "Sudan" + }, { + "Id": 113, + "Avatar": "https://randomuser.me/api/portraits/men/37.jpg", + "Position": "current", + "Name": "Nick Naumann ", + "AthleteNumber": 25566, + "BeatsPerMinute": 109, + "TopSpeed": 5.9, + "Registered": "2017-07-12T09:01:11 -03:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/sz.png", + "CountryName": "Swaziland" + }, { + "Id": 194, + "Avatar": "https://randomuser.me/api/portraits/women/62.jpg", + "Position": "up", + "Name": "آوا سلطانی نژاد ", + "AthleteNumber": 45635, + "BeatsPerMinute": 98, + "TopSpeed": 4.1, + "Registered": "2017-04-10T11:39:46 -03:00", + "TrackProgress": 29, + "CountryFlag": "assets/images/flags/se.png", + "CountryName": "Sweden" + }, { + "Id": 65, + "Avatar": "https://randomuser.me/api/portraits/women/47.jpg", + "Position": "current", + "Name": "Ilke Kisters ", + "AthleteNumber": 23817, + "BeatsPerMinute": 100, + "TopSpeed": 5.9, + "Registered": "2017-01-04T02:54:53 -02:00", + "TrackProgress": 38, + "CountryFlag": "assets/images/flags/ch.png", + "CountryName": "Switzerland" + }, { + "Id": 162, + "Avatar": "https://randomuser.me/api/portraits/women/0.jpg", + "Position": "current", + "Name": "Alex Craig ", + "AthleteNumber": 21868, + "BeatsPerMinute": 94, + "TopSpeed": 4.2, + "Registered": "2017-03-19T10:20:51 -02:00", + "TrackProgress": 27, + "CountryFlag": "assets/images/flags/sy.png", + "CountryName": "Syrian Arab Republic" + }, { + "Id": 161, + "Avatar": "https://randomuser.me/api/portraits/men/89.jpg", + "Position": "up", + "Name": "Franklin Byrd ", + "AthleteNumber": 49498, + "BeatsPerMinute": 106, + "TopSpeed": 5.3, + "Registered": "2017-11-04T11:09:26 -02:00", + "TrackProgress": 45, + "CountryFlag": "assets/images/flags/tw.png", + "CountryName": "Taiwan, Province of China" + }, { + "Id": 167, + "Avatar": "https://randomuser.me/api/portraits/women/62.jpg", + "Position": "current", + "Name": "Pippa Morris ", + "AthleteNumber": 44421, + "BeatsPerMinute": 101, + "TopSpeed": 5.5, + "Registered": "2017-03-06T09:21:58 -02:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/tj.png", + "CountryName": "Tajikistan" + }, { + "Id": 43, + "Avatar": "https://randomuser.me/api/portraits/women/94.jpg", + "Position": "up", + "Name": "Emma Turner ", + "AthleteNumber": 39487, + "BeatsPerMinute": 110, + "TopSpeed": 5.7, + "Registered": "2017-07-30T01:33:14 -03:00", + "TrackProgress": 46, + "CountryFlag": "assets/images/flags/tz.png", + "CountryName": "Tanzania, United Republic of" + }, { + "Id": 76, + "Avatar": "https://randomuser.me/api/portraits/women/1.jpg", + "Position": "current", + "Name": "Encarnacion Martin ", + "AthleteNumber": 40912, + "BeatsPerMinute": 105, + "TopSpeed": 5.5, + "Registered": "2017-01-11T12:52:28 -02:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/th.png", + "CountryName": "Thailand" + }, { + "Id": 93, + "Avatar": "https://randomuser.me/api/portraits/women/21.jpg", + "Position": "up", + "Name": "Sara Hannula ", + "AthleteNumber": 22025, + "BeatsPerMinute": 102, + "TopSpeed": 4.2, + "Registered": "2017-10-09T11:32:13 -03:00", + "TrackProgress": 33, + "CountryFlag": "assets/images/flags/tl.png", + "CountryName": "Timor-Leste" + }, { + "Id": 147, + "Avatar": "https://randomuser.me/api/portraits/men/8.jpg", + "Position": "down", + "Name": "میلاد یاسمی ", + "AthleteNumber": 44023, + "BeatsPerMinute": 104, + "TopSpeed": 5.2, + "Registered": "2017-06-10T04:11:01 -03:00", + "TrackProgress": 39, + "CountryFlag": "assets/images/flags/tg.png", + "CountryName": "Togo" + }, { + "Id": 131, + "Avatar": "https://randomuser.me/api/portraits/women/61.jpg", + "Position": "down", + "Name": "Veronika Huber ", + "AthleteNumber": 18146, + "BeatsPerMinute": 103, + "TopSpeed": 5.2, + "Registered": "2017-07-13T02:23:56 -03:00", + "TrackProgress": 29, + "CountryFlag": "assets/images/flags/to.png", + "CountryName": "Tonga" + }, { + "Id": 122, + "Avatar": "https://randomuser.me/api/portraits/women/71.jpg", + "Position": "down", + "Name": "Natalie Conrad ", + "AthleteNumber": 42602, + "BeatsPerMinute": 108, + "TopSpeed": 6, + "Registered": "2017-03-18T06:35:44 -02:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/tt.png", + "CountryName": "Trinidad and Tobago" + }, { + "Id": 113, + "Avatar": "https://randomuser.me/api/portraits/women/36.jpg", + "Position": "current", + "Name": "Marialba Nascimento ", + "AthleteNumber": 47061, + "BeatsPerMinute": 108, + "TopSpeed": 5.2, + "Registered": "2017-09-19T05:47:21 -03:00", + "TrackProgress": 20, + "CountryFlag": "assets/images/flags/tn.png", + "CountryName": "Tunisia" + }, { + "Id": 135, + "Avatar": "https://randomuser.me/api/portraits/men/84.jpg", + "Position": "down", + "Name": "Darryl Douglas ", + "AthleteNumber": 35826, + "BeatsPerMinute": 96, + "TopSpeed": 4.6, + "Registered": "2017-07-20T11:45:52 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/tr.png", + "CountryName": "Turkey" + }, { + "Id": 130, + "Avatar": "https://randomuser.me/api/portraits/men/94.jpg", + "Position": "up", + "Name": "Adem Özdoğan ", + "AthleteNumber": 45143, + "BeatsPerMinute": 90, + "TopSpeed": 5.5, + "Registered": "2017-02-16T07:11:52 -02:00", + "TrackProgress": 43, + "CountryFlag": "assets/images/flags/tm.png", + "CountryName": "Turkmenistan" + }, { + "Id": 14, + "Avatar": "https://randomuser.me/api/portraits/women/84.jpg", + "Position": "up", + "Name": "Ömür Denkel ", + "AthleteNumber": 31061, + "BeatsPerMinute": 104, + "TopSpeed": 4.5, + "Registered": "2017-02-18T05:32:55 -02:00", + "TrackProgress": 32, + "CountryFlag": "assets/images/flags/tv.png", + "CountryName": "Tuvalu" + }, { + "Id": 43, + "Avatar": "https://randomuser.me/api/portraits/women/77.jpg", + "Position": "down", + "Name": "Cathalijne Van Der Ree ", + "AthleteNumber": 45160, + "BeatsPerMinute": 102, + "TopSpeed": 5.4, + "Registered": "2017-02-13T05:23:49 -02:00", + "TrackProgress": 36, + "CountryFlag": "assets/images/flags/ug.png", + "CountryName": "Uganda" + }, { + "Id": 164, + "Avatar": "https://randomuser.me/api/portraits/women/51.jpg", + "Position": "current", + "Name": "Ethel Stephens ", + "AthleteNumber": 18692, + "BeatsPerMinute": 94, + "TopSpeed": 4.1, + "Registered": "2017-02-13T05:03:04 -02:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/ua.png", + "CountryName": "Ukraine" + }, { + "Id": 167, + "Avatar": "https://randomuser.me/api/portraits/men/67.jpg", + "Position": "down", + "Name": "Aatu Ranta ", + "AthleteNumber": 38049, + "BeatsPerMinute": 94, + "TopSpeed": 5.1, + "Registered": "2017-07-21T04:22:18 -03:00", + "TrackProgress": 42, + "CountryFlag": "assets/images/flags/ae.png", + "CountryName": "United Arab Emirates" + }, { + "Id": 169, + "Avatar": "https://randomuser.me/api/portraits/men/44.jpg", + "Position": "up", + "Name": "Aziz Santos ", + "AthleteNumber": 38947, + "BeatsPerMinute": 98, + "TopSpeed": 4, + "Registered": "2017-04-03T02:18:46 -03:00", + "TrackProgress": 40, + "CountryFlag": "assets/images/flags/gb.png", + "CountryName": "United Kingdom" + }, { + "Id": 170, + "Avatar": "https://randomuser.me/api/portraits/men/60.jpg", + "Position": "up", + "Name": "Fernando Gimenez ", + "AthleteNumber": 31290, + "BeatsPerMinute": 102, + "TopSpeed": 5.1, + "Registered": "2017-06-21T06:45:54 -03:00", + "TrackProgress": 31, + "CountryFlag": "assets/images/flags/uz.png", + "CountryName": "Uruguay" + }, { + "Id": 124, + "Avatar": "https://randomuser.me/api/portraits/men/98.jpg", + "Position": "down", + "Name": "Mathieu Mathieu ", + "AthleteNumber": 10555, + "BeatsPerMinute": 101, + "TopSpeed": 5.2, + "Registered": "2017-01-05T07:28:11 -02:00", + "TrackProgress": 44, + "CountryFlag": "assets/images/flags/uz.png", + "CountryName": "Uzbekistan" + }, { + "Id": 193, + "Avatar": "https://randomuser.me/api/portraits/women/9.jpg", + "Position": "down", + "Name": "Juanita Franklin ", + "AthleteNumber": 13907, + "BeatsPerMinute": 91, + "TopSpeed": 6, + "Registered": "2017-10-04T02:46:46 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/vu.png", + "CountryName": "Vanuatu" + }, { + "Id": 25, + "Avatar": "https://randomuser.me/api/portraits/men/42.jpg", + "Position": "up", + "Name": "Stanley Hart ", + "AthleteNumber": 14150, + "BeatsPerMinute": 91, + "TopSpeed": 4.5, + "Registered": "2017-08-19T03:02:33 -03:00", + "TrackProgress": 22, + "CountryFlag": "assets/images/flags/ve.png", + "CountryName": "Venezuela" + }, { + "Id": 131, + "Avatar": "https://randomuser.me/api/portraits/women/61.jpg", + "Position": "current", + "Name": "Eliza Bishop ", + "AthleteNumber": 31774, + "BeatsPerMinute": 96, + "TopSpeed": 4.7, + "Registered": "2017-09-22T11:49:02 -03:00", + "TrackProgress": 41, + "CountryFlag": "assets/images/flags/eh.png", + "CountryName": "Western Sahara" + }, { + "Id": 34, + "Avatar": "https://randomuser.me/api/portraits/women/19.jpg", + "Position": "down", + "Name": "Linda Schäfer ", + "AthleteNumber": 43074, + "BeatsPerMinute": 107, + "TopSpeed": 5.1, + "Registered": "2017-01-05T11:41:20 -02:00", + "TrackProgress": 24, + "CountryFlag": "assets/images/flags/ye.png", + "CountryName": "Yemen" + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ad.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ad.png new file mode 100644 index 000000000..c58bc9378 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ad.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ae.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ae.png new file mode 100644 index 000000000..088ef8ea6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ae.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/af.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/af.png new file mode 100644 index 000000000..995b351ec Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/af.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ag.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ag.png new file mode 100644 index 000000000..5f8b4f68b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ag.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/al.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/al.png new file mode 100644 index 000000000..2e516ec39 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/al.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/am.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/am.png new file mode 100644 index 000000000..d529a99e8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/am.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ao.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ao.png new file mode 100644 index 000000000..4cdfb0e10 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ao.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ar.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ar.png new file mode 100644 index 000000000..b31ec92aa Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ar.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/at.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/at.png new file mode 100644 index 000000000..993b903af Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/at.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/au.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/au.png new file mode 100644 index 000000000..ef20b66dc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/au.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/az.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/az.png new file mode 100644 index 000000000..3fb7ccb30 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/az.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ba.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ba.png new file mode 100644 index 000000000..fa4d6097b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ba.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bb.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bb.png new file mode 100644 index 000000000..5e87a9ea9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bb.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bd.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bd.png new file mode 100644 index 000000000..c55d3d7ac Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bd.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/be.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/be.png new file mode 100644 index 000000000..449446af9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/be.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bf.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bf.png new file mode 100644 index 000000000..f3a728811 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bf.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bg.png new file mode 100644 index 000000000..ec03d4f8d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bh.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bh.png new file mode 100644 index 000000000..61bad9b41 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bh.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bi.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bi.png new file mode 100644 index 000000000..d82b894b7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bi.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bj.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bj.png new file mode 100644 index 000000000..220c8e786 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bj.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bn.png new file mode 100644 index 000000000..944a7be19 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bo.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bo.png new file mode 100644 index 000000000..aec2cc6ca Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bo.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/br.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/br.png new file mode 100644 index 000000000..b54f27df8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/br.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bs.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bs.png new file mode 100644 index 000000000..43db8c1a4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bs.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bt.png new file mode 100644 index 000000000..dfd0d6af2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bw.png new file mode 100644 index 000000000..0a74b72f9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/by.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/by.png new file mode 100644 index 000000000..1c9f5462a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/by.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bz.png new file mode 100644 index 000000000..ef37f6da9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/bz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ca.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ca.png new file mode 100644 index 000000000..524f81578 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ca.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cd.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cd.png new file mode 100644 index 000000000..a96eccf57 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cd.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cf.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cf.png new file mode 100644 index 000000000..e203020e7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cf.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cg.png new file mode 100644 index 000000000..7afcfe082 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ch.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ch.png new file mode 100644 index 000000000..bd447d2bc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ch.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ci.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ci.png new file mode 100644 index 000000000..14fceff96 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ci.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ck.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ck.png new file mode 100644 index 000000000..d74b82d9c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ck.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cl.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cl.png new file mode 100644 index 000000000..741c34bfb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cl.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cm.png new file mode 100644 index 000000000..e2a308b1f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cn.png new file mode 100644 index 000000000..7474ddebc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/co.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/co.png new file mode 100644 index 000000000..477177ba9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/co.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cr.png new file mode 100644 index 000000000..62cc81a70 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cu.png new file mode 100644 index 000000000..4ada582f6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cv.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cv.png new file mode 100644 index 000000000..e45bfdb0a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cv.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cy.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cy.png new file mode 100644 index 000000000..e909ebc40 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cy.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cz.png new file mode 100644 index 000000000..acfac562d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/cz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/de.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/de.png new file mode 100644 index 000000000..2dbd9b087 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/de.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dj.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dj.png new file mode 100644 index 000000000..147636ad0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dj.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dk.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dk.png new file mode 100644 index 000000000..65d6b3551 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dk.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dm.png new file mode 100644 index 000000000..04a92e16a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/do.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/do.png new file mode 100644 index 000000000..12e017e02 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/do.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dz.png new file mode 100644 index 000000000..4670a0eb8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/dz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ec.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ec.png new file mode 100644 index 000000000..928915237 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ec.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ee.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ee.png new file mode 100644 index 000000000..106764013 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ee.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eg.png new file mode 100644 index 000000000..238d535fb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eh.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eh.png new file mode 100644 index 000000000..b8cf7ef09 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/eh.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/er.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/er.png new file mode 100644 index 000000000..546b1b970 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/er.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/es.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/es.png new file mode 100644 index 000000000..a8ad334ca Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/es.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/et.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/et.png new file mode 100644 index 000000000..e807c2114 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/et.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fi.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fi.png new file mode 100644 index 000000000..1ad17975a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fi.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fj.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fj.png new file mode 100644 index 000000000..6bf737146 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fj.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fm.png new file mode 100644 index 000000000..32d5b8325 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fr.png new file mode 100644 index 000000000..a76847663 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/fr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ga.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ga.png new file mode 100644 index 000000000..32c68bf6a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ga.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gb.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gb.png new file mode 100644 index 000000000..3b6668e20 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gb.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gd.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gd.png new file mode 100644 index 000000000..9a68c4895 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gd.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ge.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ge.png new file mode 100644 index 000000000..108e36707 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ge.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gh.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gh.png new file mode 100644 index 000000000..c2bf9d0bb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gh.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gm.png new file mode 100644 index 000000000..b929a80de Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gn.png new file mode 100644 index 000000000..be43cebc6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gq.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gq.png new file mode 100644 index 000000000..db9415a02 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gq.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gr.png new file mode 100644 index 000000000..094441156 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gt.png new file mode 100644 index 000000000..76c5db709 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gw.png new file mode 100644 index 000000000..06dc5103c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gy.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gy.png new file mode 100644 index 000000000..4f9b23237 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/gy.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hn.png new file mode 100644 index 000000000..b1a9f5f8d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hr.png new file mode 100644 index 000000000..68205134c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ht.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ht.png new file mode 100644 index 000000000..ba76abd23 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ht.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hu.png new file mode 100644 index 000000000..eeee4cad6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/hu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/id.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/id.png new file mode 100644 index 000000000..e96bc7483 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/id.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ie.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ie.png new file mode 100644 index 000000000..52e2ad410 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ie.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/il.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/il.png new file mode 100644 index 000000000..c85c9d344 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/il.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/in.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/in.png new file mode 100644 index 000000000..be5acd354 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/in.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/iq.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/iq.png new file mode 100644 index 000000000..f370c9af5 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/iq.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ir.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ir.png new file mode 100644 index 000000000..7f647fa3b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ir.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/is.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/is.png new file mode 100644 index 000000000..74c9e034a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/is.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/it.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/it.png new file mode 100644 index 000000000..d62e50b29 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/it.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jm.png new file mode 100644 index 000000000..a960d3da7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jo.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jo.png new file mode 100644 index 000000000..e8b743a3b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jo.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jp.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jp.png new file mode 100644 index 000000000..fd1ce056a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/jp.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ke.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ke.png new file mode 100644 index 000000000..dbf559fd0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ke.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kg.png new file mode 100644 index 000000000..c0fe3e51a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kh.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kh.png new file mode 100644 index 000000000..b9340f765 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kh.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ki.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ki.png new file mode 100644 index 000000000..6b718d1b8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ki.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/km.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/km.png new file mode 100644 index 000000000..dbbd8f4e0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/km.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kn.png new file mode 100644 index 000000000..028bef50c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kp.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kp.png new file mode 100644 index 000000000..3fee37950 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kp.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kr.png new file mode 100644 index 000000000..d0022a2e7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ks.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ks.png new file mode 100644 index 000000000..e1824f137 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ks.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kw.png new file mode 100644 index 000000000..7f701d5c0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kz.png new file mode 100644 index 000000000..1c23ee16a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/kz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/la.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/la.png new file mode 100644 index 000000000..975888468 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/la.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lb.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lb.png new file mode 100644 index 000000000..80b32567d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lb.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lc.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lc.png new file mode 100644 index 000000000..dc2de27f4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lc.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/li.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/li.png new file mode 100644 index 000000000..c635a63a2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/li.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lk.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lk.png new file mode 100644 index 000000000..12e6a000c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lk.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lr.png new file mode 100644 index 000000000..0b998abda Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ls.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ls.png new file mode 100644 index 000000000..ba9ed2d38 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ls.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lt.png new file mode 100644 index 000000000..257930e64 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lu.png new file mode 100644 index 000000000..64b5dd6c9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lv.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lv.png new file mode 100644 index 000000000..fb8345e13 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/lv.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ly.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ly.png new file mode 100644 index 000000000..b90fc936e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ly.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ma.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ma.png new file mode 100644 index 000000000..8e625359b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ma.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mc.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mc.png new file mode 100644 index 000000000..194a09e65 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mc.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/md.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/md.png new file mode 100644 index 000000000..0071401eb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/md.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/me.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/me.png new file mode 100644 index 000000000..0952236af Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/me.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mg.png new file mode 100644 index 000000000..4b4b06552 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mh.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mh.png new file mode 100644 index 000000000..3e7a4b5c8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mh.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mk.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mk.png new file mode 100644 index 000000000..4cb42a74f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mk.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ml.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ml.png new file mode 100644 index 000000000..182848aba Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ml.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mm.png new file mode 100644 index 000000000..f486f8538 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mn.png new file mode 100644 index 000000000..dd0bb3996 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mr.png new file mode 100644 index 000000000..caf03659f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mt.png new file mode 100644 index 000000000..b4d686eae Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mu.png new file mode 100644 index 000000000..03f524f93 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mv.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mv.png new file mode 100644 index 000000000..ab4aae4c8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mv.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mw.png new file mode 100644 index 000000000..bf38ff9c7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mx.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mx.png new file mode 100644 index 000000000..783148b3e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mx.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/my.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/my.png new file mode 100644 index 000000000..5a9ae417f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/my.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mz.png new file mode 100644 index 000000000..0e4c983ce Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/mz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/na.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/na.png new file mode 100644 index 000000000..620937bbb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/na.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ne.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ne.png new file mode 100644 index 000000000..0762231e2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ne.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ng.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ng.png new file mode 100644 index 000000000..ba56e9e06 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ng.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ni.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ni.png new file mode 100644 index 000000000..9b6dbf54e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ni.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nl.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nl.png new file mode 100644 index 000000000..aeb72b664 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nl.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/no.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/no.png new file mode 100644 index 000000000..e14f90f33 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/no.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/np.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/np.png new file mode 100644 index 000000000..fd0cd6e62 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/np.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nr.png new file mode 100644 index 000000000..721408622 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nu.png new file mode 100644 index 000000000..c7d8797c0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nz.png new file mode 100644 index 000000000..1f25035b0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/nz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/om.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/om.png new file mode 100644 index 000000000..05c99d92a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/om.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pa.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pa.png new file mode 100644 index 000000000..96d4c8ef8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pa.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pe.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pe.png new file mode 100644 index 000000000..e4d623e8a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pe.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pg.png new file mode 100644 index 000000000..5011a1675 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ph.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ph.png new file mode 100644 index 000000000..41ddff21a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ph.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pk.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pk.png new file mode 100644 index 000000000..76020feb9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pk.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pl.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pl.png new file mode 100644 index 000000000..d4db002f6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pl.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pt.png new file mode 100644 index 000000000..e0619bc9f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pw.png new file mode 100644 index 000000000..be101ba97 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/pw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/py.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/py.png new file mode 100644 index 000000000..b2e2d5c5d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/py.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/qa.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/qa.png new file mode 100644 index 000000000..0e615feb7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/qa.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ro.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ro.png new file mode 100644 index 000000000..57f34f355 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ro.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rs.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rs.png new file mode 100644 index 000000000..7273ea715 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rs.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ru.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ru.png new file mode 100644 index 000000000..79d2101ee Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ru.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rw.png new file mode 100644 index 000000000..5b859eafa Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/rw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sa.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sa.png new file mode 100644 index 000000000..0df5b9265 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sa.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sb.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sb.png new file mode 100644 index 000000000..832f7cee6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sb.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sc.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sc.png new file mode 100644 index 000000000..a497589e6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sc.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sd.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sd.png new file mode 100644 index 000000000..386f3e87b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sd.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/se.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/se.png new file mode 100644 index 000000000..9e1257830 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/se.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sg.png new file mode 100644 index 000000000..7e898146a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/si.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/si.png new file mode 100644 index 000000000..3692b66f1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/si.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sk.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sk.png new file mode 100644 index 000000000..8a73d6495 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sk.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sl.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sl.png new file mode 100644 index 000000000..b68450dda Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sl.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sm.png new file mode 100644 index 000000000..43f196502 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sn.png new file mode 100644 index 000000000..fcd02444d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/so.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/so.png new file mode 100644 index 000000000..819490b9d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/so.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sr.png new file mode 100644 index 000000000..9ac433788 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/st.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/st.png new file mode 100644 index 000000000..b4edccbf8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/st.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sv.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sv.png new file mode 100644 index 000000000..7fe790cb2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sv.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sy.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sy.png new file mode 100644 index 000000000..c78f9d5ff Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sy.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sz.png new file mode 100644 index 000000000..6550515e4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/sz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/td.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/td.png new file mode 100644 index 000000000..c0c76da34 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/td.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tg.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tg.png new file mode 100644 index 000000000..31f1a00ab Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tg.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/th.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/th.png new file mode 100644 index 000000000..5cf74c908 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/th.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tj.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tj.png new file mode 100644 index 000000000..1d83e4c7a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tj.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tl.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tl.png new file mode 100644 index 000000000..c646f33f5 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tl.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tm.png new file mode 100644 index 000000000..5dd8fb996 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tn.png new file mode 100644 index 000000000..09ce2352d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/to.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/to.png new file mode 100644 index 000000000..34b5aa149 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/to.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tr.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tr.png new file mode 100644 index 000000000..a67740a14 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tr.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tt.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tt.png new file mode 100644 index 000000000..61ee0b07a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tt.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tv.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tv.png new file mode 100644 index 000000000..16f8616fa Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tv.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tw.png new file mode 100644 index 000000000..88cc0dfc6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tz.png new file mode 100644 index 000000000..94ca541a1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/tz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ua.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ua.png new file mode 100644 index 000000000..80301f461 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ua.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ug.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ug.png new file mode 100644 index 000000000..fec8a4521 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ug.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/us.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/us.png new file mode 100644 index 000000000..07ddf4e71 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/us.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uy.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uy.png new file mode 100644 index 000000000..d49a4f1d2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uy.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uz.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uz.png new file mode 100644 index 000000000..37688d883 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/uz.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/va.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/va.png new file mode 100644 index 000000000..9938009ec Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/va.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vc.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vc.png new file mode 100644 index 000000000..55018b143 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vc.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ve.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ve.png new file mode 100644 index 000000000..4c8b135ab Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ve.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vn.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vn.png new file mode 100644 index 000000000..e9edf37ff Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vn.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vu.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vu.png new file mode 100644 index 000000000..b2214473b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/vu.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ws.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ws.png new file mode 100644 index 000000000..b44c45221 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ws.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ye.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ye.png new file mode 100644 index 000000000..61a0a5634 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/ye.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/za.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/za.png new file mode 100644 index 000000000..b6ac53e44 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/za.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zm.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zm.png new file mode 100644 index 000000000..a8b574959 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zm.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zw.png b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zw.png new file mode 100644 index 000000000..004cd2a6e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/flags/zw.png differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_bronze.svg b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_bronze.svg new file mode 100644 index 000000000..28c31f383 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_bronze.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_gold.svg b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_gold.svg new file mode 100644 index 000000000..fc46997fb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_gold.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_silver.svg b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_silver.svg new file mode 100644 index 000000000..bfca39f43 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/files/src/assets/images/trophy_silver.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/index.ts new file mode 100644 index 000000000..78b698654 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/awesome-grid/index.ts @@ -0,0 +1,38 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGridAwesomeTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "awesome-grid"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "Awesome Grid"; + this.description = "Awesome IgxGrid"; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" }, + { + import: [ + "IgxProgressBarModule", + "IgxIconModule", + "IgxAvatarModule", + "IgxBadgeModule", + "IgxSwitchModule", + "IgxInputGroupModule", + "IgxButtonModule" + ], + from: "<%=igxPackage%>" + }, + { + import: [ + "IgxSparklineModule", + "IgxSparklineCoreModule" + ], + from: "igniteui-angular-charts" + }, + { import: "FormsModule", from: "@angular/forms" } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; + } +} +module.exports = new IgxGridAwesomeTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..fc78a60e4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,184 @@ +
+ + + +
+
+ + + + Business Propeller +
+
+ + + search + clear + + + + + +
+ + {{ grid1.lastSearchInfo.activeMatchIndex + 1 }} of {{ + grid1.lastSearchInfo.matchInfoCache.length }} results + + + No results + +
+
+ +
+
+ + +
+
+
+
+
+
+ + + + + +
+ + + + + + +
+ +
+
+
+ + + + + + + + + + + + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ formatValue(val) }} + + + + + + {{ formatValue(val) }} + + +
+
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..5a37f4e20 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,391 @@ +@use '<%=igxPackage%>/theming' as *; +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fontawesome.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-regular.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-solid.css"); +:host ::ng-deep { + + $crm-grid-palette: palette( + $primary: #09f, + $secondary: #4db8ff, + $surface: #333 + ); + @include theme($crm-grid-palette); + + $checkbox-theme: checkbox-theme( + $fill-color: color($crm-grid-palette, "secondary", 500), + $tick-color: black + ); + + $summary-theme: grid-summary-theme( + $background-color: #f0f8fe, + $result-color: color($crm-grid-palette, "primary", 500) + ); + + $search-theme: input-group-theme( + $search-background: color($crm-grid-palette, "primary", 600), + $idle-text-color: color($crm-grid-palette, "primary", 100), + $filled-text-color: color($crm-grid-palette, "gray", 600), + $focused-text-color: color($crm-grid-palette, "gray", 600) + ); + + $crm-grid-theme: grid-theme( + $header-background: #f0f8fe, + $header-border-color: #dde5eb + ); + + $crm-grid-toolbar: grid-toolbar-theme( + $background-color: color($crm-grid-palette, "primary", 500) + ); + + $crm-grid-toolbar-button: button-theme( + $background: color($crm-grid-palette, "primary", 800), + $hover-background: color($crm-grid-palette, "primary", 900), + $focus-foreground: #fff + ); + + $crm-grid-search-button: button-theme( + $background: transparent, + $focus-background: color($crm-grid-palette, "gray", 200), + $hover-background: color($crm-grid-palette, "gray", 200) + ); + + $crm-input-drop-down: input-group-theme( + $placeholder-color: color($crm-grid-palette, "gray", 500), + $idle-text-color: color($crm-grid-palette, "gray", 900) + ); + + @include grid-toolbar($crm-grid-toolbar); + + @include grid($crm-grid-theme); + + @include grid-summary($summary-theme); + + @include input-group($search-theme); + + @include grid-toolbar($crm-grid-toolbar); + + .igx-drop-down__list { + @include input-group($crm-input-drop-down) + } + + .igx-grid__summaries-patch { + background: #f0f8fe; + } + + .grid__wrapper { + width: inherit; + position: relative; + height: 100%; + margin: 1px; + padding: 1px; + background: transparent; + } + + .avatar-cell { + width: 100%; + display: flex; + justify-content: center; + } + + // grid caption styling + + .crm-toolbar-template { + justify-content: space-between; + display: flex; + flex: 1 0 0%; + align-items: center; + padding-right: rem(24px); + border-radius: 2px; + + & span { + margin-right: auto; + } + + .igx-button--flat { + flex-wrap: nowrap; + white-space: nowrap; + } + + .igx-button--icon { + border-radius: 0; + } + + .logo-propeller { + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; + } + } + + .igx-grid-toolbar__button-space { + .igx-icon { + font-size: 1rem; + display: flex; + justify-content: center; + align-items: center; + } + } + + .sample-flex-container { + display: flex; + align-self: center; + justify-content: flex-end; + width: 500px; + } + + .crm-sample-toolbar__title { + margin-right: rem(16px); + display: flex; + align-items: center; + justify-self: flex-start; + width: 50%; + } + + .crm-sample-toolbar__ellipsis { + @include ellipsis(); + opacity: 0; + animation: slide-fade 1.25s .25s ease-out forwards; + } + + .igx-grid-toolbar__custom-content { + flex: 1 0 0%; + } + + igx-grid-toolbar-actions { + min-width: 350px; + } + + .igx-grid-toolbar__actions { + @include button($crm-grid-toolbar-button); + + .igx-button--outlined { + margin-left: 0.5rem; + border: none; + } + } + .igx-input-group--search{ + width: 100%; + } + .igx-input-group--search .igx-input-group__bundle { + height: rem(36px); + width: 100%; + overflow: hidden; + background-color: color($crm-grid-palette, "primary", 800); + + .igx-input-group__bundle-main { + padding-top: 0.6rem; + height: 36px; + } + + @include button($crm-grid-search-button); + } + + .igx-input-group--search .igx-input-group__bundle, + .igx-input-group--search .igx-input-group__bundle:hover { + box-shadow: none; + } + + .sample-flex-container { + .igx-input-group, + .igx-input-group--focused { + .igx-input-group__bundle { + transition: background 500ms ease-in-out; + } + + font-size: 13px; + overflow: hidden; + + igx-icon { + font-size: 1rem; + width: 1rem; + height: 1rem; + color: color($crm-grid-palette, "primary", 200); + } + } + + .igx-input-group { + igx-icon { + color: white; + } + } + + .igx-input-group__textarea, + .igx-input-group__input { + color: color($crm-grid-palette, "primary", 100); + } + + .igx-input-group__input { + &::placeholder { + color: white; + opacity: 1; + } + } + + .igx-input-group { + &:hover, + &:focus, + &.igx-input-group--focused { + igx-icon { + color: color($crm-grid-palette, 'gray', 600); + } + + .igx-input-group__bundle { + background: #fff; + color: color($crm-grid-palette, 'gray', 600); + } + + .igx-input-group__input { + &::placeholder { + color: color($crm-grid-palette, 'gray', 600); + opacity: 1; + } + } + + .igx-input-group__textarea, + .igx-input-group__input { + color: color($crm-grid-palette, 'gray', 600); + } + + .igx-button--icon { + &:focus, + &:active { + color: color($crm-grid-palette, 'gray', 600); + } + } + } + } + + .igx-button--icon { + &:focus, + &:active { + color: color($crm-grid-palette, "primary", 100); + background: transparent; + } + } + } + + .igx-grid-summary__item { + font-size: 0.8rem; + } + + .operationsContainer { + display: flex; + + .igx-button--flat { + -webkit-tap-highlight-color: transparent; + } + } + + .caseSensitiveButton { + margin-left: 8px; + } + + .igx-input-group--search .igx-input-group__bundle .igx-button--icon { + border-radius: 0; + } + + .caseSensitiveIcon { + width: 1.25rem; + height: 1.25rem; + font-size: 1.25rem; + } + + .searchButtons { + margin-left: 4px; + + } + + //resize handle + + .igx-grid__th-resize-line { + background: color($crm-grid-palette, "secondary", 500); + } + + + .toggle-content { + display: flex; + width: 240px; + height: 300px; + position: absolute; + z-index: 3; + background-color: white; + overflow: auto; + } + + .toggle-section { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + font-size: 0.8em; + } + + .dd-title { + color: color($crm-grid-palette, "primary", 600); + margin: 0; + padding: 16px; + font-size: 14px; + } + + .dd-list { + list-style-type: none; + } + + .dd-list__item { + display: flex; + align-items: center; + padding: 16px; + + ::ng-deep { + @include checkbox($checkbox-theme); + } + + &:hover { + background: lighten(color($crm-grid-palette, "primary", 100), 10); + } + } + + .pin-icon { + font-size: 12px; + display: flex; + align-items: center; + justify-content: center; + width: 1rem; + height: 1rem; + } + + .igx-grid-toolbar__title { + max-width: 68ch; + } +} + + +.animated-fan { + width: 28px; + height: 28px; + animation: spin-fade 1.5s cubic-bezier(0.21, 1.07, 0.99, 1) forwards; +} + +@keyframes spin-fade { + 0% { + opacity: 0; + transform: rotate(0); + } + + 100% { + opacity: 1; + transform: rotate(270deg); + } +} + +@keyframes slide-fade { + 0% { + transform: translateX(-5%); + } + 100% { + opacity: 1; + transform: translateX(0); + } + +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..b06c097a2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,60 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxExcelExporterService, IgxCsvExporterService } from '<%=igxPackage%>'; +import { IgxSparklineModule, IgxSparklineCoreModule } from 'igniteui-angular-charts'; + +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +import { + IgxGridModule, + IgxAvatarModule, + IgxBadgeModule, + IgxButtonModule, + IgxIconModule, + IgxInputGroupModule, + IgxProgressBarModule, + IgxRippleModule, + IgxSwitchModule, + IgxToggleModule, + IgxCheckboxModule +} from '<%=igxPackage%>'; +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component ], + imports: [ + FormsModule, + BrowserAnimationsModule, + IgxGridModule, + IgxAvatarModule, + IgxBadgeModule, + IgxButtonModule, + IgxIconModule, + IgxInputGroupModule, + IgxProgressBarModule, + IgxRippleModule, + IgxSwitchModule, + IgxToggleModule, + IgxCheckboxModule, + IgxSparklineModule, + IgxSparklineCoreModule + ], + providers: [IgxExcelExporterService, IgxCsvExporterService] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..67be3deb9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,239 @@ +import { + Component, + OnInit, + AfterViewInit, + QueryList, + ViewChild, + ElementRef +} from '@angular/core'; + +import { + CloseScrollStrategy, + ConnectedPositioningStrategy, + GridSelectionMode, + HorizontalAlignment, + IColumnExportingEventArgs, + ColumnType, + IgxDateSummaryOperand, + IgxCsvExporterService, + IgxExcelExporterService, + IgxGridComponent, + IgxNumberSummaryOperand, + IgxSummaryResult, + IgxToggleDirective, + OverlaySettings, + PositionSettings, + VerticalAlignment} from '<%=igxPackage%>'; +import { SparklineDisplayType } from 'igniteui-angular-charts'; +import { DATA, DealsDescriptor, Employee } from './data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit, AfterViewInit { + + @ViewChild('grid1', { read: IgxGridComponent, static: true }) + public grid1!: IgxGridComponent; + + @ViewChild('toggleRefHiding') public toggleRefHiding!: IgxToggleDirective; + @ViewChild('toggleRefPinning') public toggleRefPinning!: IgxToggleDirective; + + @ViewChild('hidingButton') public hidingButton!: ElementRef; + @ViewChild('pinningButton') public pinningButton!: ElementRef; + + public localData: Employee[] = []; + public dealsSummary = DealsSummary; + public earliestSummary = EarliestSummary; + public soonSummary = SoonSummary; + + public cols!: QueryList; + public hiddenColsLength: number = 0; + public pinnedColsLength: number = 0; + + public searchText = ''; + public caseSensitive = false; + public selectionMode: GridSelectionMode = 'multiple'; + public displayType = SparklineDisplayType; + + public positionSettings: PositionSettings = { + horizontalDirection: HorizontalAlignment.Left, + horizontalStartPoint: HorizontalAlignment.Right, + verticalStartPoint: VerticalAlignment.Bottom + }; + + public overlaySettings: OverlaySettings = { + closeOnOutsideClick: true, + modal: false, + positionStrategy: new ConnectedPositioningStrategy(this.positionSettings), + scrollStrategy: new CloseScrollStrategy() + }; + + constructor( + private csvExporter: IgxCsvExporterService, + private excelExporter: IgxExcelExporterService) { + + const exporterCb = (args: IColumnExportingEventArgs): void => { + if (args.field === 'Deals') { args.cancel = true; } + }; + + this.excelExporter.columnExporting.subscribe(exporterCb); + this.csvExporter.columnExporting.subscribe(exporterCb); + } + + public ngOnInit(): void { + const employees: Employee[] = DATA; + for (const employee of employees) { + this.getDeals(employee); + } + this.localData = employees; + } + + public toggleHiding(): void { + this.overlaySettings.target = this.hidingButton.nativeElement; + this.toggleRefHiding.toggle(this.overlaySettings); + } + + public togglePinning(): void { + this.overlaySettings.target = this.pinningButton.nativeElement; + this.toggleRefPinning.toggle(this.overlaySettings); + } + + public ngAfterViewInit(): void { + this.cols = this.grid1.columnList; + this.hiddenColsLength = this.cols.filter((col) => col.hidden).length; + this.pinnedColsLength = this.cols.filter((col) => col.pinned).length; + } + + public toggleVisibility(col: ColumnType): void { + if (col.hidden) { + this.hiddenColsLength--; + } else { + this.hiddenColsLength++; + } + col.hidden = !col.hidden; + } + + public togglePin(col: ColumnType, evt: any): void { + if (col.pinned) { + this.grid1.unpinColumn(col.field); + this.pinnedColsLength--; + } else { + if (this.grid1.pinColumn(col.field)) { + this.pinnedColsLength++; + } else { + // if pinning fails uncheck the checkbox + evt.checkbox.checked = false; + } + } + } + + public formatDate(val: Date): string { + return new Intl.DateTimeFormat('en-US').format(val); + } + + public searchKeyDown(ev: KeyboardEvent): void { + if (ev.key === 'Enter' || ev.key === 'ArrowDown' || ev.key === 'ArrowRight') { + ev.preventDefault(); + this.grid1.findNext(this.searchText, this.caseSensitive); + } else if (ev.key === 'ArrowUp' || ev.key === 'ArrowLeft') { + ev.preventDefault(); + this.grid1.findPrev(this.searchText, this.caseSensitive); + } + } + + public updateSearch(): void { + this.caseSensitive = !this.caseSensitive; + this.grid1.findNext(this.searchText, this.caseSensitive); + } + + public clearSearch(): void { + this.searchText = ''; + this.grid1.clearSearch(); + } + + public formatValue(val: any): string { + return val.toLocaleString('en-us', { maximumFractionDigits: 2 }); + } + + public getDeals(employee: Employee): void { + employee.deals = this.getDealsData(); + } + + public getDealsData(months?: number): DealsDescriptor[] { + if (months === undefined) { + months = 12; + } + const deals: DealsDescriptor[] = []; + for (let m = 0; m < months; m++) { + const value = this.getRandomNumber(-20, 30); + deals.push({ Deals: value, Month: m }); + } + return deals; + } + + public getRandomNumber(min: number, max: number): number { + return Math.round(min + Math.random() * (max - min)); + } +} + +class DealsSummary extends IgxNumberSummaryOperand { + constructor() { + super(); + } + + public override operate(summaries?: number[]): IgxSummaryResult[] { + const result = super.operate(summaries).filter((obj) => { + if (obj.key === 'average' || obj.key === 'sum') { + const summaryResult = obj.summaryResult; + // apply formatting to float numbers + if (Number(summaryResult) === summaryResult) { + obj.summaryResult = summaryResult.toLocaleString('en-us', { maximumFractionDigits: 2 }); + } + return true; + } + return false; + }); + return result; + } +} + +function formatDate(val: Date) { + return new Intl.DateTimeFormat('en-US').format(val); +} + +class EarliestSummary extends IgxDateSummaryOperand { + constructor() { + super(); + } + + public override operate(summaries?: Date[]): IgxSummaryResult[] { + const result = super.operate(summaries).filter((obj) => { + if (obj.key === 'earliest') { + obj.summaryResult = formatDate(obj.summaryResult); + return true; + } + return false; + }); + return result; + } +} + +class SoonSummary extends IgxDateSummaryOperand { + constructor() { + super(); + } + + public override operate(summaries?: Date[]): IgxSummaryResult[] { + const result = super.operate(summaries).filter((obj) => { + if (obj.key === 'latest') { + obj.label = 'Soon'; + obj.summaryResult = formatDate(obj.summaryResult); + return true; + } + return false; + }); + return result; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/data.ts new file mode 100644 index 000000000..fce682c71 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/app/__path__/data.ts @@ -0,0 +1,490 @@ +export interface DealsDescriptor { + Deals: number; + Month: number +} + +export interface Employee { + id: number; + avatar: string; + name: string; + email: string; + company: string; + position: string; + work_phone: string; + mobile_phone: string; + fax: string; + street: string; + city: string; + post_code: number; + state: string; + country: string; + referred_by: string; + created_on: Date; + birthday: Date; + last_activity: Date; + next_activity: Date; + deals?: DealsDescriptor[]; + deals_won: number; + deals_lost: number; + deals_pending: number; + deals_total: number; + ratio: number; + estimated_sales: number; + actual_sales: number; + tags: string; +} + +/* tslint:disable */ +export const DATA: Employee[] = [ + { "id": 256286239, "avatar": "assets/images/men/43.jpg", "name": "Gawain Beadnall", "email": "gbeadnall0@etsy.com", "company": "Divanoodle", "position": "Statistician I", "work_phone": "+1-317-866-4381", "mobile_phone": "+1-203-937-3567", "fax": "+1-212-115-1790", "street": "47 Garrison Park", "city": "Indianapolis", "post_code": 46207, "state": "IN", "country": "United States", "referred_by": "Vyky Corwin", "created_on": new Date("12/8/2017"), "birthday": new Date("2/10/2002"), "last_activity": new Date("12/16/2017"), "next_activity": new Date("4/16/2019"), "deals_won": 5, "deals_lost": 13, "deals_pending": 7, "deals_total": 25, "ratio": 28, "estimated_sales": 686210, "actual_sales": 421105, "tags": "warm, engineering" }, + { "id": 863241310, "avatar": "assets/images/women/40.jpg", "name": "Ivy Simkovich", "email": "isimkovich1@clickbank.net", "company": "Linktype", "position": "Research Nurse", "work_phone": "+1-770-283-2050", "mobile_phone": "+1-509-995-2578", "fax": "+1-907-491-2187", "street": "3 Aberg Street", "city": "Marietta", "post_code": 30061, "state": "GA", "country": "United States", "referred_by": "Hew Chung", "created_on": new Date("6/24/2017"), "birthday": new Date("1/1/1997"), "last_activity": new Date("7/15/2017"), "next_activity": new Date("6/15/2019"), "deals_won": 2, "deals_lost": 4, "deals_pending": 29, "deals_total": 35, "ratio": 33, "estimated_sales": 2008801, "actual_sales": 186592, "tags": "demo, medical" }, + { "id": 905500122, "avatar": "assets/images/men/15.jpg", "name": "Rowen Titchen", "email": "rtitchen2@netscape.com", "company": "Meembee", "position": "Staff Scientist", "work_phone": "+1-804-667-0331", "mobile_phone": "+1-608-608-6837", "fax": "+1-775-602-1752", "street": "6105 Thompson Road", "city": "Richmond", "post_code": 23228, "state": "VA", "country": "United States", "referred_by": "Web Ondrak", "created_on": new Date("9/12/2017"), "birthday": new Date("3/14/1997"), "last_activity": new Date("10/8/2017"), "next_activity": new Date("8/8/2018"), "deals_won": 18, "deals_lost": 19, "deals_pending": 7, "deals_total": 44, "ratio": 49, "estimated_sales": 950873, "actual_sales": 3395844, "tags": "demo, retail" }, + { "id": 507049693, "avatar": "assets/images/women/66.jpg", "name": "Merle Affron", "email": "maffron3@cbc.ca", "company": "Flashpoint", "position": "Director of Sales", "work_phone": "+1-248-958-1645", "mobile_phone": "+1-480-880-6216", "fax": "+1-304-696-5315", "street": "0 Hanover Street", "city": "Troy", "post_code": 48098, "state": "MI", "country": "United States", "referred_by": "Seana Yegorshin", "created_on": new Date("5/31/2017"), "birthday": new Date("5/5/1988"), "last_activity": new Date("6/4/2017"), "next_activity": new Date("9/4/2018"), "deals_won": 23, "deals_lost": 22, "deals_pending": 2, "deals_total": 47, "ratio": 51, "estimated_sales": 170852, "actual_sales": 3020337, "tags": "cold, construction" }, + { "id": 379956513, "avatar": "assets/images/women/81.jpg", "name": "Mallory Timmons", "email": "mtimmons4@xing.com", "company": "Plambee", "position": "Automation Specialist IV", "work_phone": "+1-205-678-8101", "mobile_phone": "+1-208-724-3386", "fax": "+1-402-239-2201", "street": "245 Roxbury Place", "city": "Birmingham", "post_code": 35215, "state": "AL", "country": "United States", "referred_by": "Costa Saveall", "created_on": new Date("11/9/2017"), "birthday": new Date("10/25/1983"), "last_activity": new Date("11/22/2017"), "next_activity": new Date("3/22/2019"), "deals_won": 6, "deals_lost": 28, "deals_pending": 11, "deals_total": 45, "ratio": 18, "estimated_sales": 1734161, "actual_sales": 1006212, "tags": "demo, engineering" }, + { "id": 291588694, "avatar": "assets/images/men/92.jpg", "name": "Kalil Bonavia", "email": "kbonavia5@example.com", "company": "Flashpoint", "position": "Accountant I", "work_phone": "+1-404-429-3024", "mobile_phone": "+1-302-868-1246", "fax": "+1-516-102-5599", "street": "424 Troy Point", "city": "Atlanta", "post_code": 30328, "state": "GA", "country": "United States", "referred_by": "Morie Ralph", "created_on": new Date("1/11/2018"), "birthday": new Date("7/4/1999"), "last_activity": new Date("2/7/2018"), "next_activity": new Date("7/7/2018"), "deals_won": 7, "deals_lost": 9, "deals_pending": 6, "deals_total": 22, "ratio": 44, "estimated_sales": 459672, "actual_sales": 1387575, "tags": "pro, pharmaceutical" }, + { "id": 204849533, "avatar": "assets/images/men/13.jpg", "name": "Hasheem Dowzell", "email": "hdowzell6@cnn.com", "company": "Tazzy", "position": "Software Engineer II", "work_phone": "+1-503-326-8537", "mobile_phone": "+1-601-981-8625", "fax": "+1-415-335-9927", "street": "7 Chive Way", "city": "Beaverton", "post_code": 97075, "state": "OR", "country": "United States", "referred_by": "Saleem Grayling", "created_on": new Date("11/30/2017"), "birthday": new Date("8/15/1987"), "last_activity": new Date("12/3/2017"), "next_activity": new Date("8/3/2019"), "deals_won": 27, "deals_lost": 23, "deals_pending": 8, "deals_total": 58, "ratio": 54, "estimated_sales": 557944, "actual_sales": 4693923, "tags": "retail" }, + { "id": 783203189, "avatar": "assets/images/men/40.jpg", "name": "Gonzales Bogart", "email": "gbogarte@elpais.com", "company": "Digitube", "position": "Graphic Designer", "work_phone": "+1-850-613-0419", "mobile_phone": "+1-202-820-1151", "fax": "+1-312-563-1537", "street": "84 Washington Park", "city": "Pensacola", "post_code": 32575, "state": "FL", "country": "United States", "referred_by": "Noelyn Chong", "created_on": new Date("7/5/2017"), "birthday": new Date("10/5/1971"), "last_activity": new Date("7/22/2017"), "next_activity": new Date("6/22/2019"), "deals_won": 28, "deals_lost": 30, "deals_pending": 30, "deals_total": 88, "ratio": 48, "estimated_sales": 3292440, "actual_sales": 2691388, "tags": "subscriber, construction" }, + { "id": 277837180, "avatar": "assets/images/women/98.jpg", "name": "Lorette Pendrich", "email": "lpendrichf@discuz.net", "company": "Realbuzz", "position": "Programmer I", "work_phone": "+1-202-234-5835", "mobile_phone": "+1-803-863-6616", "fax": "+1-315-545-6583", "street": "8688 Corben Crossing", "city": "Washington", "post_code": 56944, "state": "DC", "country": "United States", "referred_by": "Clea Spinetti", "created_on": new Date("3/30/2017"), "birthday": new Date("4/13/1999"), "last_activity": new Date("4/25/2017"), "next_activity": new Date("12/25/2017"), "deals_won": 29, "deals_lost": 7, "deals_pending": 25, "deals_total": 61, "ratio": 81, "estimated_sales": 4851650, "actual_sales": 3161029, "tags": "cool, pharmaceutical" }, + { "id": 516140284, "avatar": "assets/images/women/55.jpg", "name": "Morna Melville", "email": "mmelvilleg@weebly.com", "company": "Thoughtbridge", "position": "Electrical Engineer", "work_phone": "+1-414-266-7543", "mobile_phone": "+1-713-893-5054", "fax": "+1-213-254-2161", "street": "0927 Shasta Terrace", "city": "Milwaukee", "post_code": 53225, "state": "WI", "country": "United States", "referred_by": "Charlotta Sebborn", "created_on": new Date("5/10/2017"), "birthday": new Date("9/12/1984"), "last_activity": new Date("5/12/2017"), "next_activity": new Date("7/12/2017"), "deals_won": 29, "deals_lost": 27, "deals_pending": 30, "deals_total": 86, "ratio": 52, "estimated_sales": 2864850, "actual_sales": 3328011, "tags": "demo" }, + { "id": 791301636, "avatar": "assets/images/women/17.jpg", "name": "Karol Emett", "email": "kemetth@ocn.ne.jp", "company": "Twinte", "position": "Software Developer", "work_phone": "+1-215-959-2505", "mobile_phone": "+1-202-233-8921", "fax": "+1-941-745-3008", "street": "81 Riverside Place", "city": "Philadelphia", "post_code": 19196, "state": "PA", "country": "United States", "referred_by": "Roseann Cauthra", "created_on": new Date("5/1/2017"), "birthday": new Date("5/16/1992"), "last_activity": new Date("5/20/2017"), "next_activity": new Date("11/20/2017"), "deals_won": 6, "deals_lost": 10, "deals_pending": 7, "deals_total": 23, "ratio": 38, "estimated_sales": 794122, "actual_sales": 923508, "tags": "subscriber, pharmaceutical" }, + { "id": 118347444, "avatar": "assets/images/women/39.jpg", "name": "Leisha Demkowicz", "email": "ldemkowiczi@livejournal.com", "company": "Eabox", "position": "Technical Writer", "work_phone": "+1-503-778-2852", "mobile_phone": "+1-713-788-1766", "fax": "+1-954-731-9032", "street": "17 Mandrake Junction", "city": "Portland", "post_code": 97216, "state": "OR", "country": "United States", "referred_by": "Alla Bridgnell", "created_on": new Date("8/22/2017"), "birthday": new Date("1/12/1978"), "last_activity": new Date("9/1/2017"), "next_activity": new Date("5/1/2019"), "deals_won": 29, "deals_lost": 25, "deals_pending": 0, "deals_total": 54, "ratio": 54, "estimated_sales": 0, "actual_sales": 4943021, "tags": "cold, medical" }, + { "id": 131949787, "avatar": "assets/images/men/30.jpg", "name": "Doy Stonman", "email": "dstonmanj@smugmug.com", "company": "Rhycero", "position": "Marketing Assistant", "work_phone": "+1-814-375-3219", "mobile_phone": "+1-713-491-0043", "fax": "+1-727-380-5997", "street": "63 Russell Road", "city": "Erie", "post_code": 16505, "state": "PA", "country": "United States", "referred_by": "Timofei Jeves", "created_on": new Date("2/12/2018"), "birthday": new Date("11/12/1976"), "last_activity": new Date("2/15/2018"), "next_activity": new Date("3/15/2019"), "deals_won": 7, "deals_lost": 25, "deals_pending": 20, "deals_total": 52, "ratio": 22, "estimated_sales": 3827040, "actual_sales": 883463, "tags": "pro, engineering" }, + { "id": 658168789, "avatar": "assets/images/men/23.jpg", "name": "Earlie Limbrick", "email": "elimbrickk@bloglovin.com", "company": "Pixope", "position": "VP Accounting", "work_phone": "+1-202-816-6480", "mobile_phone": "+1-352-363-5733", "fax": "+1-682-825-7884", "street": "008 Cherokee Street", "city": "Washington", "post_code": 20392, "state": "DC", "country": "United States", "referred_by": "Nisse Cullity", "created_on": new Date("1/4/2017"), "birthday": new Date("11/15/1980"), "last_activity": new Date("1/27/2017"), "next_activity": new Date("6/27/2018"), "deals_won": 0, "deals_lost": 3, "deals_pending": 22, "deals_total": 25, "ratio": 0, "estimated_sales": 2125904, "actual_sales": 0, "tags": "pro, retail" }, + { "id": 584436787, "avatar": "assets/images/women/11.jpg", "name": "Norah Van Vuuren", "email": "nvanl@addtoany.com", "company": "Twinte", "position": "Information Systems Manager", "work_phone": "+1-253-501-5798", "mobile_phone": "+1-256-342-6639", "fax": "+1-602-316-2980", "street": "3 Susan Terrace", "city": "Tacoma", "post_code": 98417, "state": "WA", "country": "United States", "referred_by": "Chrysa Bernakiewicz", "created_on": new Date("3/1/2018"), "birthday": new Date("6/7/1970"), "last_activity": new Date("3/27/2018"), "next_activity": new Date("10/27/2019"), "deals_won": 27, "deals_lost": 10, "deals_pending": 5, "deals_total": 42, "ratio": 73, "estimated_sales": 447200, "actual_sales": 3497445, "tags": "pro, construction" }, + { "id": 868982214, "avatar": "assets/images/men/7.jpg", "name": "Griffy Franz-Schoninger", "email": "gfranzschoningerm@twitpic.com", "company": "Rhynyx", "position": "Assistant Media Planner", "work_phone": "+1-205-199-0409", "mobile_phone": "+1-850-844-0989", "fax": "+1-615-121-7041", "street": "67082 Mariners Cove Point", "city": "Tuscaloosa", "post_code": 35405, "state": "AL", "country": "United States", "referred_by": "Blondie Brownsell", "created_on": new Date("11/25/2017"), "birthday": new Date("6/18/1987"), "last_activity": new Date("12/11/2017"), "next_activity": new Date("7/11/2019"), "deals_won": 21, "deals_lost": 2, "deals_pending": 11, "deals_total": 34, "ratio": 91, "estimated_sales": 1374648, "actual_sales": 3622626, "tags": "pro, construction" }, + { "id": 443932207, "avatar": "assets/images/women/66.jpg", "name": "Renate Daymond", "email": "rdaymondn@microsoft.com", "company": "Demivee", "position": "Administrative Officer", "work_phone": "+1-253-250-0773", "mobile_phone": "+1-469-784-8216", "fax": "+1-518-342-4173", "street": "0 Eliot Way", "city": "Tacoma", "post_code": 98417, "state": "WA", "country": "United States", "referred_by": "Willard Worters", "created_on": new Date("3/8/2018"), "birthday": new Date("2/22/1996"), "last_activity": new Date("3/29/2018"), "next_activity": new Date("8/29/2018"), "deals_won": 28, "deals_lost": 5, "deals_pending": 13, "deals_total": 46, "ratio": 85, "estimated_sales": 939731, "actual_sales": 4735052, "tags": "subscriber, financial" }, + { "id": 865960075, "avatar": "assets/images/men/93.jpg", "name": "Reg Heed", "email": "rheedo@washingtonpost.com", "company": "Dynabox", "position": "Compensation Analyst", "work_phone": "+1-718-629-6316", "mobile_phone": "+1-504-259-7697", "fax": "+1-915-517-0236", "street": "481 Eastwood Trail", "city": "Bronx", "post_code": 10459, "state": "NY", "country": "United States", "referred_by": "Gloria Pleace", "created_on": new Date("4/22/2017"), "birthday": new Date("9/11/2002"), "last_activity": new Date("5/3/2017"), "next_activity": new Date("5/3/2018"), "deals_won": 16, "deals_lost": 5, "deals_pending": 21, "deals_total": 42, "ratio": 76, "estimated_sales": 1771476, "actual_sales": 1283424, "tags": "hot, engineering" }, + { "id": 359209632, "avatar": "assets/images/men/38.jpg", "name": "Porter Roget", "email": "progetp@dot.gov", "company": "Livepath", "position": "Nuclear Power Engineer", "work_phone": "+1-702-139-7230", "mobile_phone": "+1-925-533-5399", "fax": "+1-202-487-0697", "street": "2994 Center Park", "city": "Las Vegas", "post_code": 89125, "state": "NV", "country": "United States", "referred_by": "Rebekah Eldin", "created_on": new Date("4/22/2017"), "birthday": new Date("10/18/1974"), "last_activity": new Date("4/29/2017"), "next_activity": new Date("2/28/2018"), "deals_won": 16, "deals_lost": 3, "deals_pending": 11, "deals_total": 30, "ratio": 84, "estimated_sales": 1282578, "actual_sales": 1273872, "tags": "warm, financial" }, + { "id": 274966895, "avatar": "assets/images/women/49.jpg", "name": "Heidi Fisby", "email": "hfisbyq@bloomberg.com", "company": "Rhynyx", "position": "Staff Scientist", "work_phone": "+1-501-338-5259", "mobile_phone": "+1-405-564-2876", "fax": "+1-612-202-0590", "street": "694 Sunbrook Avenue", "city": "North Little Rock", "post_code": 72199, "state": "AR", "country": "United States", "referred_by": "Catha Landy", "created_on": new Date("2/4/2018"), "birthday": new Date("2/12/2000"), "last_activity": new Date("2/25/2018"), "next_activity": new Date("4/25/2019"), "deals_won": 11, "deals_lost": 19, "deals_pending": 5, "deals_total": 35, "ratio": 37, "estimated_sales": 870600, "actual_sales": 2156231, "tags": "pro, retail" }, + { "id": 213491893, "avatar": "assets/images/women/46.jpg", "name": "Lanie Rennock", "email": "lrennockr@github.com", "company": "Zoonoodle", "position": "Analog Circuit Design manager", "work_phone": "+1-617-203-3526", "mobile_phone": "+1-206-498-0654", "fax": "+1-512-636-2267", "street": "67 Sundown Avenue", "city": "Boston", "post_code": 2298, "state": "MA", "country": "United States", "referred_by": "Rudie Roser", "created_on": new Date("8/1/2017"), "birthday": new Date("12/16/1988"), "last_activity": new Date("8/16/2017"), "next_activity": new Date("11/16/2017"), "deals_won": 1, "deals_lost": 7, "deals_pending": 26, "deals_total": 34, "ratio": 13, "estimated_sales": 4697628, "actual_sales": 147204, "tags": "demo, engineering" }, + { "id": 320452212, "avatar": "assets/images/men/50.jpg", "name": "Ariel O'Scanlon", "email": "aoscanlons@flavors.me", "company": "Voolith", "position": "Junior Executive", "work_phone": "+1-304-424-5432", "mobile_phone": "+1-718-491-5502", "fax": "+1-505-237-7051", "street": "968 Browning Court", "city": "Morgantown", "post_code": 26505, "state": "WV", "country": "United States", "referred_by": "Blaire Mullinder", "created_on": new Date("2/16/2017"), "birthday": new Date("5/27/2001"), "last_activity": new Date("2/19/2017"), "next_activity": new Date("3/19/2017"), "deals_won": 13, "deals_lost": 16, "deals_pending": 5, "deals_total": 34, "ratio": 45, "estimated_sales": 551540, "actual_sales": 997100, "tags": "demo, retail" }, + { "id": 51663196, "avatar": "assets/images/women/62.jpg", "name": "Kaitlin Foro", "email": "kforot@digg.com", "company": "Feedspan", "position": "Director of Sales", "work_phone": "+1-816-772-9231", "mobile_phone": "+1-559-919-8970", "fax": "+1-419-673-7069", "street": "842 Amoth Center", "city": "Kansas City", "post_code": 64187, "state": "MO", "country": "United States", "referred_by": "Wilma Dow", "created_on": new Date("4/2/2018"), "birthday": new Date("1/6/1997"), "last_activity": new Date("4/28/2018"), "next_activity": new Date("8/28/2019"), "deals_won": 19, "deals_lost": 18, "deals_pending": 21, "deals_total": 58, "ratio": 51, "estimated_sales": 3628422, "actual_sales": 1417267, "tags": "demo, pharmaceutical" }, + { "id": 751762440, "avatar": "assets/images/women/76.jpg", "name": "Krissy Jowett", "email": "kjowettu@reddit.com", "company": "Roombo", "position": "Quality Control Specialist", "work_phone": "+1-702-975-7252", "mobile_phone": "+1-216-205-9579", "fax": "+1-312-279-6531", "street": "055 Hagan Center", "city": "Las Vegas", "post_code": 89105, "state": "NV", "country": "United States", "referred_by": "Stevana Lucia", "created_on": new Date("3/1/2018"), "birthday": new Date("5/3/1984"), "last_activity": new Date("3/10/2018"), "next_activity": new Date("2/10/2019"), "deals_won": 4, "deals_lost": 8, "deals_pending": 17, "deals_total": 29, "ratio": 33, "estimated_sales": 2458761, "actual_sales": 354696, "tags": "demo, financial" }, + { "id": 378738789, "avatar": "assets/images/women/70.jpg", "name": "Cammie Hulks", "email": "chulksv@twitpic.com", "company": "Oodoo", "position": "Budget/Accounting Analyst II", "work_phone": "+1-310-984-6577", "mobile_phone": "+1-225-885-4117", "fax": "+1-954-374-4766", "street": "201 Sundown Avenue", "city": "Los Angeles", "post_code": 90005, "state": "CA", "country": "United States", "referred_by": "Hewett Starmont", "created_on": new Date("3/7/2017"), "birthday": new Date("6/9/1994"), "last_activity": new Date("3/30/2017"), "next_activity": new Date("5/30/2017"), "deals_won": 1, "deals_lost": 28, "deals_pending": 29, "deals_total": 58, "ratio": 3, "estimated_sales": 4977386, "actual_sales": 163577, "tags": "subscriber, construction" }, + { "id": 259368814, "avatar": "assets/images/men/40.jpg", "name": "Etan Oscroft", "email": "eoscroftw@bbb.org", "company": "Vinte", "position": "Developer III", "work_phone": "+1-812-782-8424", "mobile_phone": "+1-570-406-7766", "fax": "+1-719-462-9451", "street": "767 Rockefeller Parkway", "city": "Jeffersonville", "post_code": 47134, "state": "IN", "country": "United States", "referred_by": "Raquel Goulbourne", "created_on": new Date("8/21/2017"), "birthday": new Date("12/23/1982"), "last_activity": new Date("8/22/2017"), "next_activity": new Date("4/22/2018"), "deals_won": 6, "deals_lost": 19, "deals_pending": 18, "deals_total": 43, "ratio": 24, "estimated_sales": 1431054, "actual_sales": 504924, "tags": "subscriber, pharmaceutical" }, + { "id": 669889487, "avatar": "assets/images/women/17.jpg", "name": "Michaella Gormally", "email": "mgormallyx@umn.edu", "company": "Yodo", "position": "Sales Associate", "work_phone": "+1-651-252-6398", "mobile_phone": "+1-916-454-2604", "fax": "+1-919-341-9062", "street": "256 David Point", "city": "Saint Paul", "post_code": 55188, "state": "MN", "country": "United States", "referred_by": "Bethany Chesney", "created_on": new Date("3/26/2018"), "birthday": new Date("3/3/1995"), "last_activity": new Date("4/13/2018"), "next_activity": new Date("12/13/2018"), "deals_won": 8, "deals_lost": 21, "deals_pending": 30, "deals_total": 59, "ratio": 28, "estimated_sales": 2192640, "actual_sales": 1561904, "tags": "cool, medical" }, + { "id": 996195134, "avatar": "assets/images/women/42.jpg", "name": "Rivy Brearley", "email": "rbrearleyy@e-recht24.de", "company": "Eabox", "position": "Nuclear Power Engineer", "work_phone": "+1-423-813-8094", "mobile_phone": "+1-610-442-8261", "fax": "+1-405-676-7147", "street": "56769 Bellgrove Parkway", "city": "Kingsport", "post_code": 37665, "state": "TN", "country": "United States", "referred_by": "Tommy Phythien", "created_on": new Date("4/6/2018"), "birthday": new Date("1/28/1971"), "last_activity": new Date("4/24/2018"), "next_activity": new Date("12/24/2018"), "deals_won": 0, "deals_lost": 18, "deals_pending": 11, "deals_total": 29, "ratio": 0, "estimated_sales": 1596804, "actual_sales": 0, "tags": "cold, retail" }, + { "id": 203483816, "avatar": "assets/images/men/63.jpg", "name": "Georges Piperley", "email": "gpiperleyz@github.com", "company": "Chatterpoint", "position": "Pharmacist", "work_phone": "+1-702-587-9964", "mobile_phone": "+1-864-809-6121", "fax": "+1-812-550-4209", "street": "37 Lake View Lane", "city": "Las Vegas", "post_code": 89130, "state": "NV", "country": "United States", "referred_by": "Leontine Warmisham", "created_on": new Date("3/10/2017"), "birthday": new Date("4/7/1976"), "last_activity": new Date("4/2/2017"), "next_activity": new Date("8/2/2017"), "deals_won": 6, "deals_lost": 10, "deals_pending": 17, "deals_total": 33, "ratio": 38, "estimated_sales": 2460886, "actual_sales": 976764, "tags": "cool, pharmaceutical" }, + { "id": 652718947, "avatar": "assets/images/men/35.jpg", "name": "Corbett Loughlin", "email": "cloughlin10@cdbaby.com", "company": "Miboo", "position": "Chemical Engineer", "work_phone": "+1-352-682-0722", "mobile_phone": "+1-806-834-6352", "fax": "+1-843-292-5815", "street": "0 Anhalt Park", "city": "Ocala", "post_code": 34474, "state": "FL", "country": "United States", "referred_by": "Marigold Kearsley", "created_on": new Date("1/19/2018"), "birthday": new Date("10/25/1978"), "last_activity": new Date("2/3/2018"), "next_activity": new Date("9/3/2018"), "deals_won": 10, "deals_lost": 6, "deals_pending": 5, "deals_total": 21, "ratio": 63, "estimated_sales": 851975, "actual_sales": 579500, "tags": "subscriber, retail" }, + { "id": 141237612, "avatar": "assets/images/men/10.jpg", "name": "Don Jirieck", "email": "djirieck11@google.co.jp", "company": "Skidoo", "position": "Marketing Manager", "work_phone": "+1-212-710-1454", "mobile_phone": "+1-713-927-1005", "fax": "+1-331-215-8282", "street": "70 New Castle Way", "city": "New York City", "post_code": 10105, "state": "NY", "country": "United States", "referred_by": "Audra Barnfield", "created_on": new Date("5/14/2017"), "birthday": new Date("7/3/1996"), "last_activity": new Date("6/7/2017"), "next_activity": new Date("10/7/2018"), "deals_won": 16, "deals_lost": 19, "deals_pending": 20, "deals_total": 55, "ratio": 46, "estimated_sales": 1737780, "actual_sales": 1710384, "tags": "pro, financial" }, + { "id": 65129205, "avatar": "assets/images/men/3.jpg", "name": "Alvin Assender", "email": "aassender12@nsw.gov.au", "company": "Twitterwire", "position": "Executive Secretary", "work_phone": "+1-404-948-0848", "mobile_phone": "+1-757-737-5002", "fax": "+1-682-139-3112", "street": "38925 Morrow Way", "city": "Atlanta", "post_code": 30336, "state": "GA", "country": "United States", "referred_by": "Benedick Dockwra", "created_on": new Date("5/6/2017"), "birthday": new Date("1/1/1991"), "last_activity": new Date("6/5/2017"), "next_activity": new Date("3/5/2018"), "deals_won": 4, "deals_lost": 5, "deals_pending": 7, "deals_total": 16, "ratio": 44, "estimated_sales": 356503, "actual_sales": 609956, "tags": "subscriber, medical" }, + { "id": 317962954, "avatar": "assets/images/women/95.jpg", "name": "Phyllis Treadgear", "email": "ptreadgear13@yolasite.com", "company": "Brainsphere", "position": "Biostatistician II", "work_phone": "+1-901-762-8621", "mobile_phone": "+1-202-652-1656", "fax": "+1-202-228-4954", "street": "7756 Commercial Place", "city": "Memphis", "post_code": 38136, "state": "TN", "country": "United States", "referred_by": "Talya Livezley", "created_on": new Date("11/9/2017"), "birthday": new Date("12/17/1987"), "last_activity": new Date("11/28/2017"), "next_activity": new Date("10/28/2018"), "deals_won": 30, "deals_lost": 16, "deals_pending": 16, "deals_total": 62, "ratio": 65, "estimated_sales": 3134544, "actual_sales": 3120450, "tags": "warm, pharmaceutical" }, + { "id": 754512920, "avatar": "assets/images/women/57.jpg", "name": "Clementine McLellan", "email": "cmclellan14@prlog.org", "company": "Rhyzio", "position": "VP Marketing", "work_phone": "+1-802-350-5146", "mobile_phone": "+1-407-589-4737", "fax": "+1-609-145-5299", "street": "92 Buena Vista Avenue", "city": "Montpelier", "post_code": 5609, "state": "VT", "country": "United States", "referred_by": "Vera Heathcote", "created_on": new Date("6/3/2017"), "birthday": new Date("6/6/1992"), "last_activity": new Date("6/17/2017"), "next_activity": new Date("4/17/2018"), "deals_won": 30, "deals_lost": 2, "deals_pending": 14, "deals_total": 46, "ratio": 94, "estimated_sales": 2692368, "actual_sales": 5775570, "tags": "warm, financial" }, + { "id": 487658833, "avatar": "assets/images/men/88.jpg", "name": "Mendel Saby", "email": "msaby15@seattletimes.com", "company": "Twimm", "position": "Payment Adjustment Coordinator", "work_phone": "+1-414-978-0163", "mobile_phone": "+1-813-784-5869", "fax": "+1-215-268-6809", "street": "81548 Rieder Center", "city": "Milwaukee", "post_code": 53225, "state": "WI", "country": "United States", "referred_by": "Veriee Ruffler", "created_on": new Date("11/3/2017"), "birthday": new Date("9/18/1974"), "last_activity": new Date("11/24/2017"), "next_activity": new Date("12/24/2017"), "deals_won": 21, "deals_lost": 14, "deals_pending": 1, "deals_total": 36, "ratio": 6, "estimated_sales": 65359, "actual_sales": 2337804, "tags": "cool, engineering" }, + { "id": 297796630, "avatar": "assets/images/women/85.jpg", "name": "Wilma Bulford", "email": "wbulford16@squidoo.com", "company": "Youspan", "position": "Paralegal", "work_phone": "+1-610-214-1806", "mobile_phone": "+1-510-734-9029", "fax": "+1-816-925-1316", "street": "67041 Ludington Parkway", "city": "Bethlehem", "post_code": 18018, "state": "PA", "country": "United States", "referred_by": "Ame Sheara", "created_on": new Date("2/26/2017"), "birthday": new Date("11/24/1974"), "last_activity": new Date("3/11/2017"), "next_activity": new Date("8/11/2018"), "deals_won": 11, "deals_lost": 10, "deals_pending": 8, "deals_total": 29, "ratio": 52, "estimated_sales": 1081936, "actual_sales": 2128148, "tags": "warm, engineering" }, + { "id": 298047164, "avatar": "assets/images/men/76.jpg", "name": "Simon O'Mannion", "email": "somannion17@constantcontact.com", "company": "Latz", "position": "Software Consultant", "work_phone": "+1-815-580-5623", "mobile_phone": "+1-214-396-7418", "fax": "+1-626-550-8987", "street": "2411 Eggendart Crossing", "city": "Rockford", "post_code": 61110, "state": "IL", "country": "United States", "referred_by": "Curtis Orrom", "created_on": new Date("9/1/2017"), "birthday": new Date("8/25/1988"), "last_activity": new Date("9/18/2017"), "next_activity": new Date("10/18/2017"), "deals_won": 11, "deals_lost": 9, "deals_pending": 8, "deals_total": 28, "ratio": 55, "estimated_sales": 1515576, "actual_sales": 1515635, "tags": "cool, pharmaceutical" }, + { "id": 766132212, "avatar": "assets/images/men/19.jpg", "name": "Godfree Rylands", "email": "grylands18@tripod.com", "company": "Twitternation", "position": "Software Test Engineer IV", "work_phone": "+1-520-300-0116", "mobile_phone": "+1-302-247-0581", "fax": "+1-561-874-4801", "street": "011 Melrose Place", "city": "Tucson", "post_code": 85732, "state": "AZ", "country": "United States", "referred_by": "Theressa Nerney", "created_on": new Date("11/12/2017"), "birthday": new Date("4/20/1993"), "last_activity": new Date("12/11/2017"), "next_activity": new Date("8/11/2019"), "deals_won": 3, "deals_lost": 1, "deals_pending": 2, "deals_total": 6, "ratio": 75, "estimated_sales": 284054, "actual_sales": 464196, "tags": "cool, financial" }, + { "id": 794881867, "avatar": "assets/images/women/52.jpg", "name": "Natasha d' Eye", "email": "nd19@engadget.com", "company": "Tagfeed", "position": "Quality Control Specialist", "work_phone": "+1-904-299-7647", "mobile_phone": "+1-720-846-0210", "fax": "+1-209-746-3973", "street": "37 Gerald Place", "city": "Jacksonville", "post_code": 32259, "state": "FL", "country": "United States", "referred_by": "Sanford Guitonneau", "created_on": new Date("1/20/2018"), "birthday": new Date("3/25/1983"), "last_activity": new Date("1/23/2018"), "next_activity": new Date("9/23/2018"), "deals_won": 26, "deals_lost": 27, "deals_pending": 26, "deals_total": 79, "ratio": 49, "estimated_sales": 1441180, "actual_sales": 3417960, "tags": "cool, retail" }, + { "id": 442665449, "avatar": "assets/images/women/14.jpg", "name": "Lyda Rylett", "email": "lrylett1a@bravesites.com", "company": "Bubblemix", "position": "Civil Engineer", "work_phone": "+1-260-911-8241", "mobile_phone": "+1-202-918-6602", "fax": "+1-203-932-8088", "street": "54398 Prairie Rose Hill", "city": "Fort Wayne", "post_code": 46862, "state": "IN", "country": "United States", "referred_by": "Helli Dumphy", "created_on": new Date("12/7/2017"), "birthday": new Date("7/5/1973"), "last_activity": new Date("12/28/2017"), "next_activity": new Date("6/28/2019"), "deals_won": 27, "deals_lost": 19, "deals_pending": 10, "deals_total": 56, "ratio": 59, "estimated_sales": 990030, "actual_sales": 4172931, "tags": "hot, construction" }, + { "id": 148724233, "avatar": "assets/images/women/80.jpg", "name": "Amalia Pentercost", "email": "apentercost1b@redcross.org", "company": "Tambee", "position": "Office Assistant I", "work_phone": "+1-561-194-3284", "mobile_phone": "+1-217-333-7543", "fax": "+1-626-298-8211", "street": "602 Stoughton Lane", "city": "Boca Raton", "post_code": 33499, "state": "FL", "country": "United States", "referred_by": "Rudie Olifard", "created_on": new Date("11/17/2017"), "birthday": new Date("4/13/1979"), "last_activity": new Date("11/19/2017"), "next_activity": new Date("3/19/2019"), "deals_won": 25, "deals_lost": 17, "deals_pending": 2, "deals_total": 44, "ratio": 6, "estimated_sales": 388396, "actual_sales": 4518825, "tags": "demo, engineering" }, + { "id": 476172606, "avatar": "assets/images/women/30.jpg", "name": "Madelle Ettels", "email": "mettels1c@ucsd.edu", "company": "Tanoodle", "position": "Structural Engineer", "work_phone": "+1-562-279-0663", "mobile_phone": "+1-216-340-4937", "fax": "+1-512-720-8731", "street": "684 Dorton Terrace", "city": "Huntington Beach", "post_code": 92648, "state": "CA", "country": "United States", "referred_by": "Clotilda Androsik", "created_on": new Date("5/4/2017"), "birthday": new Date("6/8/1974"), "last_activity": new Date("5/25/2017"), "next_activity": new Date("6/25/2018"), "deals_won": 29, "deals_lost": 9, "deals_pending": 13, "deals_total": 51, "ratio": 76, "estimated_sales": 1501760, "actual_sales": 2678701, "tags": "engineering" }, + { "id": 672186492, "avatar": "assets/images/men/93.jpg", "name": "Denis Guly", "email": "dguly1d@lulu.com", "company": "Roombo", "position": "Recruiter", "work_phone": "+1-707-461-1987", "mobile_phone": "+1-917-800-6080", "fax": "+1-202-531-0317", "street": "55703 Arizona Crossing", "city": "Petaluma", "post_code": 94975, "state": "CA", "country": "United States", "referred_by": "Wilma Stannislawski", "created_on": new Date("10/29/2017"), "birthday": new Date("7/14/1993"), "last_activity": new Date("11/9/2017"), "next_activity": new Date("6/9/2018"), "deals_won": 22, "deals_lost": 26, "deals_pending": 9, "deals_total": 57, "ratio": 46, "estimated_sales": 1054476, "actual_sales": 1898666, "tags": "demo, retail" }, + { "id": 751652610, "avatar": "assets/images/men/39.jpg", "name": "Saxe Trythall", "email": "strythall1e@flavors.me", "company": "Trudeo", "position": "Electrical Engineer", "work_phone": "+1-561-829-0731", "mobile_phone": "+1-816-223-4700", "fax": "+1-406-724-0788", "street": "5 Grim Terrace", "city": "West Palm Beach", "post_code": 33421, "state": "FL", "country": "United States", "referred_by": "Morgun Kubicka", "created_on": new Date("3/1/2017"), "birthday": new Date("5/18/1983"), "last_activity": new Date("3/22/2017"), "next_activity": new Date("1/22/2018"), "deals_won": 17, "deals_lost": 11, "deals_pending": 5, "deals_total": 33, "ratio": 61, "estimated_sales": 355155, "actual_sales": 2360110, "tags": "pro, financial" }, + { "id": 260931205, "avatar": "assets/images/women/88.jpg", "name": "Erina Isaaksohn", "email": "eisaaksohn1f@zdnet.com", "company": "Zoomlounge", "position": "VP Accounting", "work_phone": "+1-972-696-4121", "mobile_phone": "+1-865-834-1229", "fax": "+1-717-633-3832", "street": "20698 Reinke Terrace", "city": "Dallas", "post_code": 75216, "state": "TX", "country": "United States", "referred_by": "Alden Winfred", "created_on": new Date("12/22/2017"), "birthday": new Date("9/19/1975"), "last_activity": new Date("1/15/2018"), "next_activity": new Date("10/15/2018"), "deals_won": 1, "deals_lost": 1, "deals_pending": 28, "deals_total": 30, "ratio": 5, "estimated_sales": 4174828, "actual_sales": 187960, "tags": "hot, pharmaceutical" }, + { "id": 530445829, "avatar": "assets/images/men/63.jpg", "name": "Torrance Harrington", "email": "tharrington1g@alibaba.com", "company": "Vinder", "position": "Biostatistician III", "work_phone": "+1-502-409-4283", "mobile_phone": "+1-510-936-7027", "fax": "+1-517-723-6778", "street": "750 Westend Road", "city": "Louisville", "post_code": 40215, "state": "KY", "country": "United States", "referred_by": "Bethany Gipp", "created_on": new Date("2/17/2017"), "birthday": new Date("3/27/1986"), "last_activity": new Date("2/20/2017"), "next_activity": new Date("8/20/2017"), "deals_won": 29, "deals_lost": 14, "deals_pending": 6, "deals_total": 49, "ratio": 67, "estimated_sales": 894474, "actual_sales": 4664418, "tags": "subscriber, engineering" }, + { "id": 425656541, "avatar": "assets/images/men/57.jpg", "name": "Reinhard Godrich", "email": "rgodrich1h@blinklist.com", "company": "Mita", "position": "Accountant II", "work_phone": "+1-609-255-9161", "mobile_phone": "+1-904-735-8887", "fax": "+1-301-578-9833", "street": "3 Vera Alley", "city": "Trenton", "post_code": 8695, "state": "NJ", "country": "United States", "referred_by": "Shell Hanmore", "created_on": new Date("12/26/2017"), "birthday": new Date("12/13/1994"), "last_activity": new Date("1/16/2018"), "next_activity": new Date("6/16/2018"), "deals_won": 23, "deals_lost": 26, "deals_pending": 19, "deals_total": 68, "ratio": 47, "estimated_sales": 3179669, "actual_sales": 1938279, "tags": "subscriber, financial" }, + { "id": 915429938, "avatar": "assets/images/women/89.jpg", "name": "Christiana Louder", "email": "clouder1i@buzzfeed.com", "company": "Meembee", "position": "Financial Advisor", "work_phone": "+1-331-773-4799", "mobile_phone": "+1-713-853-8164", "fax": "+1-412-872-4138", "street": "8065 Mandrake Plaza", "city": "Aurora", "post_code": 60505, "state": "IL", "country": "United States", "referred_by": "Fernande Berrick", "created_on": new Date("4/14/2017"), "birthday": new Date("7/6/1997"), "last_activity": new Date("4/24/2017"), "next_activity": new Date("5/24/2017"), "deals_won": 4, "deals_lost": 24, "deals_pending": 3, "deals_total": 31, "ratio": 14, "estimated_sales": 150252, "actual_sales": 670580, "tags": "demo, pharmaceutical" }, + { "id": 653923840, "avatar": "assets/images/men/35.jpg", "name": "Tod Farnes", "email": "tfarnes1j@hao123.com", "company": "Kazio", "position": "Environmental Specialist", "work_phone": "+1-304-641-7053", "mobile_phone": "+1-952-317-6848", "fax": "+1-203-922-7681", "street": "3 Scott Crossing", "city": "Huntington", "post_code": 25775, "state": "WV", "country": "United States", "referred_by": "Vance Dadd", "created_on": new Date("8/9/2017"), "birthday": new Date("11/13/1975"), "last_activity": new Date("8/29/2017"), "next_activity": new Date("1/29/2019"), "deals_won": 20, "deals_lost": 8, "deals_pending": 10, "deals_total": 38, "ratio": 71, "estimated_sales": 1898010, "actual_sales": 2612840, "tags": "cold, retail" }, + { "id": 185035041, "avatar": "assets/images/men/86.jpg", "name": "Kaspar Beaman", "email": "kbeaman1k@fc2.com", "company": "Fivechat", "position": "Occupational Therapist", "work_phone": "+1-912-427-7887", "mobile_phone": "+1-202-276-7703", "fax": "+1-602-761-8918", "street": "0 Lien Alley", "city": "Savannah", "post_code": 31416, "state": "GA", "country": "United States", "referred_by": "Maggi Aspling", "created_on": new Date("4/4/2017"), "birthday": new Date("9/4/1997"), "last_activity": new Date("4/9/2017"), "next_activity": new Date("12/9/2018"), "deals_won": 0, "deals_lost": 2, "deals_pending": 8, "deals_total": 10, "ratio": 0, "estimated_sales": 1289280, "actual_sales": 0, "tags": "warm, construction" }, + { "id": 109623, "avatar": "assets/images/women/14.jpg", "name": "Shandra Cassels", "email": "scassels1l@cocolog-nifty.com", "company": "Podcat", "position": "Social Worker", "work_phone": "+1-507-261-6559", "mobile_phone": "+1-816-215-0675", "fax": "+1-801-664-8102", "street": "63830 High Crossing Park", "city": "Rochester", "post_code": 55905, "state": "MN", "country": "United States", "referred_by": "Axel Giacomasso", "created_on": new Date("1/19/2018"), "birthday": new Date("7/19/1974"), "last_activity": new Date("2/5/2018"), "next_activity": new Date("6/5/2019"), "deals_won": 2, "deals_lost": 20, "deals_pending": 18, "deals_total": 40, "ratio": 9, "estimated_sales": 3420072, "actual_sales": 313548, "tags": "subscriber, retail" }, + { "id": 356968052, "avatar": "assets/images/women/73.jpg", "name": "Liuka Waterstone", "email": "lwaterstone1m@google.de", "company": "Rhynyx", "position": "Senior Financial Analyst", "work_phone": "+1-734-129-3969", "mobile_phone": "+1-949-324-5747", "fax": "+1-410-643-1340", "street": "67 Hooker Place", "city": "Detroit", "post_code": 48242, "state": "MI", "country": "United States", "referred_by": "Perice Labell", "created_on": new Date("4/16/2017"), "birthday": new Date("1/28/1992"), "last_activity": new Date("5/16/2017"), "next_activity": new Date("2/16/2018"), "deals_won": 22, "deals_lost": 10, "deals_pending": 22, "deals_total": 54, "ratio": 69, "estimated_sales": 3677278, "actual_sales": 1747108, "tags": "demo, retail" }, + { "id": 929773684, "avatar": "assets/images/men/49.jpg", "name": "Buddy Bletso", "email": "bbletso1n@apache.org", "company": "Bubblebox", "position": "Budget/Accounting Analyst IV", "work_phone": "+1-650-832-8650", "mobile_phone": "+1-540-496-9590", "fax": "+1-210-261-1402", "street": "16 Arizona Hill", "city": "Sunnyvale", "post_code": 94089, "state": "CA", "country": "United States", "referred_by": "Piggy Kaveney", "created_on": new Date("11/8/2017"), "birthday": new Date("6/18/1970"), "last_activity": new Date("11/17/2017"), "next_activity": new Date("11/17/2018"), "deals_won": 20, "deals_lost": 20, "deals_pending": 15, "deals_total": 55, "ratio": 5, "estimated_sales": 2490840, "actual_sales": 3033900, "tags": "medical" }, + { "id": 709072297, "avatar": "assets/images/women/69.jpg", "name": "Kristal Tuckey", "email": "ktuckey1o@craigslist.org", "company": "Buzzbean", "position": "Quality Engineer", "work_phone": "+1-202-866-2533", "mobile_phone": "+1-704-393-3956", "fax": "+1-512-548-3198", "street": "320 Dakota Park", "city": "Washington", "post_code": 20067, "state": "DC", "country": "United States", "referred_by": "Junia Casazza", "created_on": new Date("10/13/2017"), "birthday": new Date("11/26/1973"), "last_activity": new Date("11/8/2017"), "next_activity": new Date("9/8/2019"), "deals_won": 16, "deals_lost": 16, "deals_pending": 27, "deals_total": 59, "ratio": 5, "estimated_sales": 3547287, "actual_sales": 1301440, "tags": "demo, financial" }, + { "id": 628030366, "avatar": "assets/images/women/81.jpg", "name": "Selestina Frany", "email": "sfrany1p@devhub.com", "company": "Rooxo", "position": "Dental Hygienist", "work_phone": "+1-520-658-1497", "mobile_phone": "+1-316-166-4112", "fax": "+1-540-110-0444", "street": "589 Village Lane", "city": "Tucson", "post_code": 85715, "state": "AZ", "country": "United States", "referred_by": "Xenos Krook", "created_on": new Date("6/19/2017"), "birthday": new Date("11/20/1977"), "last_activity": new Date("6/30/2017"), "next_activity": new Date("11/30/2017"), "deals_won": 27, "deals_lost": 2, "deals_pending": 28, "deals_total": 57, "ratio": 93, "estimated_sales": 3626196, "actual_sales": 2823849, "tags": "warm, medical" }, + { "id": 115434000, "avatar": "assets/images/men/66.jpg", "name": "Damian Wapples", "email": "dwapples1q@aboutads.info", "company": "Thoughtworks", "position": "Clinical Specialist", "work_phone": "+1-757-752-6615", "mobile_phone": "+1-330-679-7630", "fax": "+1-386-559-8233", "street": "99317 Manufacturers Way", "city": "Newport News", "post_code": 23612, "state": "VA", "country": "United States", "referred_by": "Kanya Lafayette", "created_on": new Date("4/4/2018"), "birthday": new Date("6/14/1976"), "last_activity": new Date("4/7/2018"), "next_activity": new Date("2/7/2019"), "deals_won": 24, "deals_lost": 4, "deals_pending": 26, "deals_total": 54, "ratio": 86, "estimated_sales": 2852928, "actual_sales": 4581096, "tags": "demo, medical" }, + { "id": 781474958, "avatar": "assets/images/men/37.jpg", "name": "Wilfred Sibbit", "email": "wsibbit1r@guardian.co.uk", "company": "Skinix", "position": "Analog Circuit Design manager", "work_phone": "+1-609-454-3582", "mobile_phone": "+1-267-898-4817", "fax": "+1-915-672-0287", "street": "9773 Elgar Trail", "city": "Trenton", "post_code": 8638, "state": "NJ", "country": "United States", "referred_by": "Temp Smallcombe", "created_on": new Date("11/30/2017"), "birthday": new Date("8/5/1972"), "last_activity": new Date("12/13/2017"), "next_activity": new Date("11/13/2018"), "deals_won": 11, "deals_lost": 30, "deals_pending": 14, "deals_total": 55, "ratio": 27, "estimated_sales": 1884918, "actual_sales": 1082730, "tags": "hot, construction" }, + { "id": 716652088, "avatar": "assets/images/women/65.jpg", "name": "Jackqueline Knell", "email": "jknell1s@studiopress.com", "company": "Aimbo", "position": "Senior Financial Analyst", "work_phone": "+1-206-461-0587", "mobile_phone": "+1-615-755-0624", "fax": "+1-518-359-1627", "street": "07 Nelson Crossing", "city": "Seattle", "post_code": 98127, "state": "WA", "country": "United States", "referred_by": "Arturo Comben", "created_on": new Date("2/22/2018"), "birthday": new Date("4/17/1976"), "last_activity": new Date("3/24/2018"), "next_activity": new Date("4/24/2019"), "deals_won": 12, "deals_lost": 6, "deals_pending": 30, "deals_total": 48, "ratio": 67, "estimated_sales": 2401050, "actual_sales": 2235468, "tags": "hot, financial" }, + { "id": 926110582, "avatar": "assets/images/men/77.jpg", "name": "Sargent Brownsill", "email": "sbrownsill1t@tiny.cc", "company": "Leexo", "position": "Director of Sales", "work_phone": "+1-540-211-9674", "mobile_phone": "+1-513-450-2194", "fax": "+1-251-180-6430", "street": "7 Crest Line Point", "city": "Roanoke", "post_code": 24014, "state": "VA", "country": "United States", "referred_by": "Addy Rides", "created_on": new Date("5/29/2017"), "birthday": new Date("9/3/2002"), "last_activity": new Date("6/6/2017"), "next_activity": new Date("9/6/2017"), "deals_won": 23, "deals_lost": 10, "deals_pending": 0, "deals_total": 33, "ratio": 7, "estimated_sales": 0, "actual_sales": 3207787, "tags": "warm, pharmaceutical" }, + { "id": 382757519, "avatar": "assets/images/men/33.jpg", "name": "Harley Wasselin", "email": "hwasselin1u@discovery.com", "company": "Brainsphere", "position": "Marketing Assistant", "work_phone": "+1-405-554-3182", "mobile_phone": "+1-801-649-5535", "fax": "+1-314-299-9579", "street": "13508 Sundown Circle", "city": "Oklahoma City", "post_code": 73147, "state": "OK", "country": "United States", "referred_by": "Silvester Segges", "created_on": new Date("8/16/2017"), "birthday": new Date("5/30/1999"), "last_activity": new Date("9/9/2017"), "next_activity": new Date("12/9/2017"), "deals_won": 2, "deals_lost": 13, "deals_pending": 20, "deals_total": 35, "ratio": 13, "estimated_sales": 1572000, "actual_sales": 209878, "tags": "pro, retail" }, + { "id": 563374905, "avatar": "assets/images/women/91.jpg", "name": "Melisent Arlett", "email": "marlett1v@ebay.co.uk", "company": "Bubbletube", "position": "VP Sales", "work_phone": "+1-408-346-0228", "mobile_phone": "+1-202-830-4135", "fax": "+1-312-873-3929", "street": "52 Texas Park", "city": "San Jose", "post_code": 95160, "state": "CA", "country": "United States", "referred_by": "Lou Ruffle", "created_on": new Date("5/22/2017"), "birthday": new Date("9/8/1973"), "last_activity": new Date("6/4/2017"), "next_activity": new Date("11/4/2018"), "deals_won": 1, "deals_lost": 22, "deals_pending": 27, "deals_total": 50, "ratio": 4, "estimated_sales": 1400166, "actual_sales": 61337, "tags": "subscriber, retail" }, + { "id": 787253389, "avatar": "assets/images/women/31.jpg", "name": "Gilda Fazackerley", "email": "gfazackerley1w@exblog.jp", "company": "Flashpoint", "position": "Help Desk Technician", "work_phone": "+1-315-585-2018", "mobile_phone": "+1-253-384-7619", "fax": "+1-305-581-7413", "street": "99 Loftsgordon Parkway", "city": "Syracuse", "post_code": 13251, "state": "NY", "country": "United States", "referred_by": "Constantino Yatman", "created_on": new Date("9/4/2017"), "birthday": new Date("6/26/2000"), "last_activity": new Date("9/14/2017"), "next_activity": new Date("3/14/2018"), "deals_won": 11, "deals_lost": 27, "deals_pending": 29, "deals_total": 67, "ratio": 29, "estimated_sales": 2749374, "actual_sales": 714571, "tags": "demo, engineering" }, + { "id": 470959772, "avatar": "assets/images/women/34.jpg", "name": "Yoshiko Trinke", "email": "ytrinke1x@symantec.com", "company": "Buzzdog", "position": "Research Associate", "work_phone": "+1-615-409-3097", "mobile_phone": "+1-316-395-0385", "fax": "+1-516-931-2494", "street": "21969 Oak Lane", "city": "Nashville", "post_code": 37250, "state": "TN", "country": "United States", "referred_by": "Augustine Glasser", "created_on": new Date("6/18/2017"), "birthday": new Date("3/10/1979"), "last_activity": new Date("6/20/2017"), "next_activity": new Date("10/20/2018"), "deals_won": 25, "deals_lost": 10, "deals_pending": 25, "deals_total": 60, "ratio": 71, "estimated_sales": 4323875, "actual_sales": 2746800, "tags": "demo, medical" }, + { "id": 304897422, "avatar": "assets/images/women/47.jpg", "name": "Doralyn Fransinelli", "email": "dfransinelli1y@ucsd.edu", "company": "Edgetag", "position": "Structural Analysis Engineer", "work_phone": "+1-915-495-9682", "mobile_phone": "+1-206-825-5739", "fax": "+1-813-586-6619", "street": "0 Helena Alley", "city": "El Paso", "post_code": 79945, "state": "TX", "country": "United States", "referred_by": "Ramsay Ugolini", "created_on": new Date("12/30/2017"), "birthday": new Date("12/17/1985"), "last_activity": new Date("1/24/2018"), "next_activity": new Date("9/24/2018"), "deals_won": 9, "deals_lost": 3, "deals_pending": 0, "deals_total": 12, "ratio": 75, "estimated_sales": 0, "actual_sales": 1598400, "tags": "pro, retail" }, + { "id": 113000277, "avatar": "assets/images/men/34.jpg", "name": "Bard Shivlin", "email": "bshivlin1z@ebay.co.uk", "company": "Twinder", "position": "Associate Professor", "work_phone": "+1-850-435-5596", "mobile_phone": "+1-414-492-8462", "fax": "+1-612-701-4098", "street": "5154 Hovde Street", "city": "Pensacola", "post_code": 32511, "state": "FL", "country": "United States", "referred_by": "Jaynell Innis", "created_on": new Date("7/10/2017"), "birthday": new Date("8/26/1970"), "last_activity": new Date("7/27/2017"), "next_activity": new Date("1/27/2018"), "deals_won": 3, "deals_lost": 27, "deals_pending": 2, "deals_total": 32, "ratio": 1, "estimated_sales": 115192, "actual_sales": 451728, "tags": "cold, construction" }, + { "id": 115567478, "avatar": "assets/images/men/96.jpg", "name": "Jermain Capron", "email": "jcapron20@so-net.ne.jp", "company": "Podcat", "position": "Analog Circuit Design manager", "work_phone": "+1-323-118-4740", "mobile_phone": "+1-864-471-4588", "fax": "+1-857-430-0588", "street": "3492 Graedel Circle", "city": "Inglewood", "post_code": 90305, "state": "CA", "country": "United States", "referred_by": "Wynn Chamberlin", "created_on": new Date("3/13/2018"), "birthday": new Date("4/5/1994"), "last_activity": new Date("3/21/2018"), "next_activity": new Date("3/21/2019"), "deals_won": 9, "deals_lost": 11, "deals_pending": 21, "deals_total": 41, "ratio": 45, "estimated_sales": 2045631, "actual_sales": 1248336, "tags": "cool, engineering" }, + { "id": 327823716, "avatar": "assets/images/men/51.jpg", "name": "Greg Lifsey", "email": "glifsey21@nytimes.com", "company": "Tagcat", "position": "Human Resources Manager", "work_phone": "+1-615-402-5193", "mobile_phone": "+1-404-496-8008", "fax": "+1-817-294-8693", "street": "2 Crowley Circle", "city": "Murfreesboro", "post_code": 37131, "state": "TN", "country": "United States", "referred_by": "Kendal Lenin", "created_on": new Date("2/12/2017"), "birthday": new Date("7/9/1975"), "last_activity": new Date("2/14/2017"), "next_activity": new Date("5/14/2018"), "deals_won": 15, "deals_lost": 22, "deals_pending": 16, "deals_total": 53, "ratio": 41, "estimated_sales": 1574176, "actual_sales": 1160025, "tags": "warm, construction" }, + { "id": 622175884, "avatar": "assets/images/women/13.jpg", "name": "Nonna Brailsford", "email": "nbrailsford22@exblog.jp", "company": "Thoughtbridge", "position": "Staff Scientist", "work_phone": "+1-407-261-5214", "mobile_phone": "+1-971-802-7754", "fax": "+1-602-286-3546", "street": "7 Ilene Circle", "city": "Orlando", "post_code": 32891, "state": "FL", "country": "United States", "referred_by": "Westleigh Grimsdell", "created_on": new Date("2/15/2017"), "birthday": new Date("11/19/1981"), "last_activity": new Date("3/4/2017"), "next_activity": new Date("9/4/2017"), "deals_won": 10, "deals_lost": 23, "deals_pending": 9, "deals_total": 42, "ratio": 3, "estimated_sales": 538875, "actual_sales": 1733590, "tags": "cool, retail" }, + { "id": 712619219, "avatar": "assets/images/women/7.jpg", "name": "Gabbey Lillee", "email": "glillee23@tiny.cc", "company": "Brightbean", "position": "VP Sales", "work_phone": "+1-503-450-6669", "mobile_phone": "+1-775-407-8541", "fax": "+1-915-499-3761", "street": "79112 Little Fleur Crossing", "city": "Beaverton", "post_code": 97075, "state": "OR", "country": "United States", "referred_by": "Caldwell Village", "created_on": new Date("11/17/2017"), "birthday": new Date("8/22/1999"), "last_activity": new Date("12/9/2017"), "next_activity": new Date("7/9/2018"), "deals_won": 6, "deals_lost": 10, "deals_pending": 12, "deals_total": 28, "ratio": 38, "estimated_sales": 1643220, "actual_sales": 951342, "tags": "cool, engineering" }, + { "id": 409767062, "avatar": "assets/images/women/97.jpg", "name": "Cookie Leale", "email": "cleale24@salon.com", "company": "Kaymbo", "position": "Speech Pathologist", "work_phone": "+1-202-748-0506", "mobile_phone": "+1-262-911-6263", "fax": "+1-303-664-4963", "street": "864 Twin Pines Circle", "city": "Washington", "post_code": 20414, "state": "DC", "country": "United States", "referred_by": "Ammamaria Wahner", "created_on": new Date("10/18/2017"), "birthday": new Date("7/13/1995"), "last_activity": new Date("10/31/2017"), "next_activity": new Date("6/30/2018"), "deals_won": 12, "deals_lost": 5, "deals_pending": 15, "deals_total": 32, "ratio": 71, "estimated_sales": 1222830, "actual_sales": 1138104, "tags": "cool, medical" }, + { "id": 226394719, "avatar": "assets/images/men/77.jpg", "name": "Hugues Ferrier", "email": "hferrier25@msn.com", "company": "Topicblab", "position": "Senior Cost Accountant", "work_phone": "+1-501-665-6272", "mobile_phone": "+1-234-452-0778", "fax": "+1-712-998-9730", "street": "65 Kings Center", "city": "Little Rock", "post_code": 72222, "state": "AR", "country": "United States", "referred_by": "Saleem Grocock", "created_on": new Date("6/7/2017"), "birthday": new Date("5/26/1978"), "last_activity": new Date("7/5/2017"), "next_activity": new Date("6/5/2018"), "deals_won": 19, "deals_lost": 7, "deals_pending": 8, "deals_total": 34, "ratio": 73, "estimated_sales": 950984, "actual_sales": 2280513, "tags": "subscriber, construction" }, + { "id": 950707960, "avatar": "assets/images/men/38.jpg", "name": "Newton Collerd", "email": "ncollerd26@issuu.com", "company": "Yodel", "position": "Account Representative I", "work_phone": "+1-225-794-2492", "mobile_phone": "+1-360-707-4543", "fax": "+1-505-575-8418", "street": "7722 Westend Pass", "city": "Baton Rouge", "post_code": 70836, "state": "LA", "country": "United States", "referred_by": "Charmian Ajsik", "created_on": new Date("12/18/2017"), "birthday": new Date("2/24/1982"), "last_activity": new Date("1/15/2018"), "next_activity": new Date("10/15/2019"), "deals_won": 3, "deals_lost": 1, "deals_pending": 26, "deals_total": 30, "ratio": 75, "estimated_sales": 3642366, "actual_sales": 195156, "tags": "subscriber, pharmaceutical" }, + { "id": 900932268, "avatar": "assets/images/women/10.jpg", "name": "Laural Bogart", "email": "lbogart27@feedburner.com", "company": "Feedfish", "position": "Marketing Manager", "work_phone": "+1-215-924-8996", "mobile_phone": "+1-412-641-6320", "fax": "+1-804-150-3782", "street": "9 Meadow Ridge Circle", "city": "Philadelphia", "post_code": 19093, "state": "PA", "country": "United States", "referred_by": "Joey Harce", "created_on": new Date("7/18/2017"), "birthday": new Date("2/22/1981"), "last_activity": new Date("8/6/2017"), "next_activity": new Date("4/6/2018"), "deals_won": 16, "deals_lost": 8, "deals_pending": 24, "deals_total": 48, "ratio": 67, "estimated_sales": 1986888, "actual_sales": 2213760, "tags": "pro, pharmaceutical" }, + { "id": 614294465, "avatar": "assets/images/women/27.jpg", "name": "Elvina Weall", "email": "eweall28@usda.gov", "company": "Eamia", "position": "Analyst Programmer", "work_phone": "+1-512-582-5067", "mobile_phone": "+1-203-733-0335", "fax": "+1--614-4601", "street": "010 Lindbergh Hill", "city": "Austin", "post_code": 78737, "state": "TX", "country": "United States", "referred_by": "Monte Norcott", "created_on": new Date("2/12/2018"), "birthday": new Date("7/6/1978"), "last_activity": new Date("3/12/2018"), "next_activity": new Date("10/12/2018"), "deals_won": 14, "deals_lost": 13, "deals_pending": 22, "deals_total": 49, "ratio": 52, "estimated_sales": 4032248, "actual_sales": 794038, "tags": "subscriber, medical" }, + { "id": 377106801, "avatar": "assets/images/women/89.jpg", "name": "Juieta Mendez", "email": "jmendez29@bing.com", "company": "Babbleblab", "position": "Account Representative IV", "work_phone": "+1-410-373-5750", "mobile_phone": "+1-512-166-8473", "fax": "+1-801-164-8887", "street": "24 5th Alley", "city": "Baltimore", "post_code": 21265, "state": "MD", "country": "United States", "referred_by": "Ivett Olechnowicz", "created_on": new Date("2/23/2017"), "birthday": new Date("6/3/1986"), "last_activity": new Date("3/2/2017"), "next_activity": new Date("12/2/2017"), "deals_won": 8, "deals_lost": 26, "deals_pending": 12, "deals_total": 46, "ratio": 24, "estimated_sales": 1882284, "actual_sales": 433880, "tags": "demo, engineering" }, + { "id": 262450597, "avatar": "assets/images/men/25.jpg", "name": "Emlen Castell", "email": "ecastell2a@ucsd.edu", "company": "Fivebridge", "position": "Paralegal", "work_phone": "+1-585-817-1379", "mobile_phone": "+1-214-403-1468", "fax": "+1-336-307-1139", "street": "4 Merry Way", "city": "Rochester", "post_code": 14639, "state": "NY", "country": "United States", "referred_by": "Cristionna Madine", "created_on": new Date("2/6/2018"), "birthday": new Date("1/19/1975"), "last_activity": new Date("3/4/2018"), "next_activity": new Date("9/4/2019"), "deals_won": 25, "deals_lost": 6, "deals_pending": 26, "deals_total": 57, "ratio": 81, "estimated_sales": 3368196, "actual_sales": 2038825, "tags": "retail" }, + { "id": 235852051, "avatar": "assets/images/men/40.jpg", "name": "Justis Isles", "email": "jisles2b@ifeng.com", "company": "Skilith", "position": "Mechanical Systems Engineer", "work_phone": "+1-305-857-8429", "mobile_phone": "+1-941-709-9660", "fax": "+1-213-500-2975", "street": "549 Dawn Drive", "city": "Hialeah", "post_code": 33018, "state": "FL", "country": "United States", "referred_by": "Noellyn Pass", "created_on": new Date("11/24/2017"), "birthday": new Date("7/20/2001"), "last_activity": new Date("12/21/2017"), "next_activity": new Date("6/21/2018"), "deals_won": 28, "deals_lost": 29, "deals_pending": 8, "deals_total": 65, "ratio": 49, "estimated_sales": 1213264, "actual_sales": 3278968, "tags": "medical" }, + { "id": 664568769, "avatar": "assets/images/women/26.jpg", "name": "Janeva Burnsall", "email": "jburnsall2c@flickr.com", "company": "Dazzlesphere", "position": "VP Quality Control", "work_phone": "+1-513-252-4337", "mobile_phone": "+1-502-228-4513", "fax": "+1-704-229-9925", "street": "80588 Anthes Court", "city": "Cincinnati", "post_code": 45999, "state": "OH", "country": "United States", "referred_by": "Trula Jozsika", "created_on": new Date("12/12/2017"), "birthday": new Date("9/30/1989"), "last_activity": new Date("12/28/2017"), "next_activity": new Date("5/28/2019"), "deals_won": 11, "deals_lost": 3, "deals_pending": 12, "deals_total": 26, "ratio": 79, "estimated_sales": 1948260, "actual_sales": 1611643, "tags": "pharmaceutical" }, + { "id": 752959468, "avatar": "assets/images/women/68.jpg", "name": "Kelcie Folley", "email": "kfolley2d@livejournal.com", "company": "Abatz", "position": "Systems Administrator II", "work_phone": "+1-336-131-5394", "mobile_phone": "+1-843-966-3156", "fax": "+1-407-424-2202", "street": "3 American Ash Center", "city": "Greensboro", "post_code": 27425, "state": "NC", "country": "United States", "referred_by": "Chet Lydall", "created_on": new Date("12/10/2017"), "birthday": new Date("5/12/1977"), "last_activity": new Date("12/17/2017"), "next_activity": new Date("12/17/2018"), "deals_won": 5, "deals_lost": 15, "deals_pending": 22, "deals_total": 42, "ratio": 25, "estimated_sales": 1296262, "actual_sales": 301030, "tags": "cold, medical" }, + { "id": 786276070, "avatar": "assets/images/women/22.jpg", "name": "Claudina Davey", "email": "cdavey2e@businessweek.com", "company": "Oyoloo", "position": "VP Quality Control", "work_phone": "+1-818-505-3284", "mobile_phone": "+1-713-179-5326", "fax": "+1-540-574-0485", "street": "4875 Surrey Drive", "city": "Los Angeles", "post_code": 90065, "state": "CA", "country": "United States", "referred_by": "Corabella Netherwood", "created_on": new Date("3/29/2017"), "birthday": new Date("8/30/1975"), "last_activity": new Date("4/28/2017"), "next_activity": new Date("8/28/2017"), "deals_won": 26, "deals_lost": 19, "deals_pending": 1, "deals_total": 46, "ratio": 58, "estimated_sales": 168833, "actual_sales": 3745014, "tags": "medical" }, + { "id": 520466635, "avatar": "assets/images/women/42.jpg", "name": "Shanna Mowling", "email": "smowling2f@apache.org", "company": "Kaymbo", "position": "Dental Hygienist", "work_phone": "+1-423-201-3489", "mobile_phone": "+1-615-539-3025", "fax": "+1-813-114-9544", "street": "3 Crescent Oaks Court", "city": "Chattanooga", "post_code": 37416, "state": "TN", "country": "United States", "referred_by": "Elayne Barg", "created_on": new Date("2/5/2018"), "birthday": new Date("1/19/1972"), "last_activity": new Date("2/28/2018"), "next_activity": new Date("12/28/2018"), "deals_won": 25, "deals_lost": 7, "deals_pending": 27, "deals_total": 59, "ratio": 78, "estimated_sales": 4789557, "actual_sales": 2129000, "tags": "subscriber, construction" }, + { "id": 638218995, "avatar": "assets/images/women/79.jpg", "name": "Ardyth Arcase", "email": "aarcase2g@techcrunch.com", "company": "Mydeo", "position": "Senior Cost Accountant", "work_phone": "+1-202-329-2722", "mobile_phone": "+1-936-520-8614", "fax": "+1-775-735-4912", "street": "16773 Everett Plaza", "city": "Washington", "post_code": 20535, "state": "DC", "country": "United States", "referred_by": "Sheffy Jenoure", "created_on": new Date("3/28/2017"), "birthday": new Date("4/20/1976"), "last_activity": new Date("4/5/2017"), "next_activity": new Date("2/5/2019"), "deals_won": 12, "deals_lost": 26, "deals_pending": 6, "deals_total": 44, "ratio": 32, "estimated_sales": 881670, "actual_sales": 1350960, "tags": "subscriber, retail" }, + { "id": 65067568, "avatar": "assets/images/women/5.jpg", "name": "Cynthea Evers", "email": "cevers2h@ning.com", "company": "Thoughtworks", "position": "Librarian", "work_phone": "+1-217-842-3437", "mobile_phone": "+1-253-279-0929", "fax": "+1-919-916-5443", "street": "31 Cherokee Junction", "city": "Springfield", "post_code": 62794, "state": "IL", "country": "United States", "referred_by": "Clovis Tease", "created_on": new Date("11/15/2017"), "birthday": new Date("5/16/1979"), "last_activity": new Date("11/24/2017"), "next_activity": new Date("5/24/2019"), "deals_won": 14, "deals_lost": 22, "deals_pending": 9, "deals_total": 45, "ratio": 39, "estimated_sales": 1433790, "actual_sales": 881398, "tags": "construction" }, + { "id": 686424181, "avatar": "assets/images/men/76.jpg", "name": "Gradey Sedgeworth", "email": "gsedgeworth2i@unicef.org", "company": "Mycat", "position": "Community Outreach Specialist", "work_phone": "+1-202-726-0931", "mobile_phone": "+1-215-423-9389", "fax": "+1-775-807-4477", "street": "88 Saint Paul Point", "city": "Washington", "post_code": 20370, "state": "DC", "country": "United States", "referred_by": "Madelene Coudray", "created_on": new Date("6/17/2017"), "birthday": new Date("1/6/1986"), "last_activity": new Date("6/18/2017"), "next_activity": new Date("5/18/2018"), "deals_won": 21, "deals_lost": 1, "deals_pending": 29, "deals_total": 51, "ratio": 95, "estimated_sales": 1900863, "actual_sales": 3880989, "tags": "warm, financial" }, + { "id": 691627486, "avatar": "assets/images/women/86.jpg", "name": "Kelila Hotson", "email": "khotson2j@imageshack.us", "company": "Leexo", "position": "Research Nurse", "work_phone": "+1-336-330-9832", "mobile_phone": "+1-843-805-0545", "fax": "+1-801-569-7731", "street": "96375 Dakota Trail", "city": "Greensboro", "post_code": 27499, "state": "NC", "country": "United States", "referred_by": "Sheila Halgarth", "created_on": new Date("10/3/2017"), "birthday": new Date("8/24/1981"), "last_activity": new Date("10/23/2017"), "next_activity": new Date("3/23/2018"), "deals_won": 9, "deals_lost": 30, "deals_pending": 18, "deals_total": 57, "ratio": 23, "estimated_sales": 3301614, "actual_sales": 687087, "tags": "pro, pharmaceutical" }, + { "id": 63326034, "avatar": "assets/images/women/78.jpg", "name": "Wendy Wheeldon", "email": "wwheeldon2k@chicagotribune.com", "company": "Zoovu", "position": "Marketing Assistant", "work_phone": "+1-562-912-9134", "mobile_phone": "+1-254-829-0431", "fax": "+1-786-318-1752", "street": "462 Village Hill", "city": "Long Beach", "post_code": 90847, "state": "CA", "country": "United States", "referred_by": "Kania Mazzei", "created_on": new Date("7/31/2017"), "birthday": new Date("6/28/2001"), "last_activity": new Date("8/29/2017"), "next_activity": new Date("11/29/2017"), "deals_won": 10, "deals_lost": 23, "deals_pending": 21, "deals_total": 54, "ratio": 3, "estimated_sales": 3337971, "actual_sales": 1152010, "tags": "cold, pharmaceutical" }, + { "id": 526212097, "avatar": "assets/images/women/70.jpg", "name": "Lela Cosh", "email": "lcosh2l@buzzfeed.com", "company": "Flipbug", "position": "Clinical Specialist", "work_phone": "+1-936-249-2059", "mobile_phone": "+1-318-803-0890", "fax": "+1-804-349-5364", "street": "52 Waywood Park", "city": "Houston", "post_code": 77090, "state": "TX", "country": "United States", "referred_by": "Barrie MacParland", "created_on": new Date("8/27/2017"), "birthday": new Date("2/7/1981"), "last_activity": new Date("9/21/2017"), "next_activity": new Date("2/21/2019"), "deals_won": 19, "deals_lost": 3, "deals_pending": 13, "deals_total": 35, "ratio": 86, "estimated_sales": 2098044, "actual_sales": 2270006, "tags": "cold, medical" }, + { "id": 929137195, "avatar": "assets/images/women/99.jpg", "name": "Sibilla Wegner", "email": "swegner2m@ovh.net", "company": "Blogtags", "position": "Quality Engineer", "work_phone": "+1-802-436-2712", "mobile_phone": "+1-410-950-6042", "fax": "+1-260-539-1525", "street": "273 Granby Court", "city": "Montpelier", "post_code": 5609, "state": "VT", "country": "United States", "referred_by": "Norton Dagwell", "created_on": new Date("1/16/2018"), "birthday": new Date("11/20/1970"), "last_activity": new Date("1/30/2018"), "next_activity": new Date("2/28/2018"), "deals_won": 5, "deals_lost": 13, "deals_pending": 26, "deals_total": 44, "ratio": 28, "estimated_sales": 1605162, "actual_sales": 758405, "tags": "cold, medical" }, + { "id": 410422512, "avatar": "assets/images/men/86.jpg", "name": "Gran Canepe", "email": "gcanepe2n@smh.com.au", "company": "Quamba", "position": "Paralegal", "work_phone": "+1-210-528-5323", "mobile_phone": "+1-202-733-0254", "fax": "+1-508-501-7467", "street": "86197 Fulton Terrace", "city": "San Antonio", "post_code": 78220, "state": "TX", "country": "United States", "referred_by": "Antonio Giriardelli", "created_on": new Date("2/11/2017"), "birthday": new Date("6/2/1978"), "last_activity": new Date("3/8/2017"), "next_activity": new Date("7/8/2018"), "deals_won": 9, "deals_lost": 13, "deals_pending": 19, "deals_total": 41, "ratio": 41, "estimated_sales": 3732816, "actual_sales": 1634364, "tags": "cool, engineering" }, + { "id": 208556148, "avatar": "assets/images/women/91.jpg", "name": "Tally Bolingbroke", "email": "tbolingbroke2o@dyndns.org", "company": "Skipstorm", "position": "Senior Editor", "work_phone": "+1-501-812-4359", "mobile_phone": "+1-208-312-0076", "fax": "+1-402-979-3764", "street": "0 Meadow Vale Parkway", "city": "Hot Springs National Park", "post_code": 71914, "state": "AR", "country": "United States", "referred_by": "Claude MacLaverty", "created_on": new Date("7/31/2017"), "birthday": new Date("9/22/1979"), "last_activity": new Date("8/17/2017"), "next_activity": new Date("3/17/2019"), "deals_won": 0, "deals_lost": 8, "deals_pending": 21, "deals_total": 29, "ratio": 0, "estimated_sales": 1515024, "actual_sales": 0, "tags": "cool, pharmaceutical" }, + { "id": 785897213, "avatar": "assets/images/women/64.jpg", "name": "Fifine Northeast", "email": "fnortheast2p@w3.org", "company": "Ooba", "position": "Civil Engineer", "work_phone": "+1-970-422-2151", "mobile_phone": "+1-619-114-5595", "fax": "+1-918-340-9363", "street": "0010 Jenifer Center", "city": "Grand Junction", "post_code": 81505, "state": "CO", "country": "United States", "referred_by": "Zilvia Boulding", "created_on": new Date("5/1/2017"), "birthday": new Date("3/6/1991"), "last_activity": new Date("5/2/2017"), "next_activity": new Date("12/2/2018"), "deals_won": 23, "deals_lost": 24, "deals_pending": 5, "deals_total": 52, "ratio": 49, "estimated_sales": 893040, "actual_sales": 3140006, "tags": "cold, financial" }, + { "id": 991109245, "avatar": "assets/images/men/50.jpg", "name": "Wheeler Glawsop", "email": "wglawsop2q@pagesperso-orange.fr", "company": "Yadel", "position": "Help Desk Technician", "work_phone": "+1-760-180-7003", "mobile_phone": "+1-913-871-8846", "fax": "+1-515-259-3609", "street": "823 Dovetail Park", "city": "San Diego", "post_code": 92127, "state": "CA", "country": "United States", "referred_by": "Kip Croster", "created_on": new Date("3/12/2018"), "birthday": new Date("12/2/1989"), "last_activity": new Date("4/9/2018"), "next_activity": new Date("8/9/2018"), "deals_won": 13, "deals_lost": 3, "deals_pending": 19, "deals_total": 35, "ratio": 81, "estimated_sales": 1951110, "actual_sales": 758225, "tags": "demo, engineering" }, + { "id": 229156059, "avatar": "assets/images/women/33.jpg", "name": "Tamarah Goathrop", "email": "tgoathrop2r@ucoz.ru", "company": "Gabcube", "position": "Computer Systems Analyst I", "work_phone": "+1-805-539-7645", "mobile_phone": "+1-504-381-3775", "fax": "+1-208-541-8361", "street": "92 2nd Circle", "city": "Simi Valley", "post_code": 93094, "state": "CA", "country": "United States", "referred_by": "Berget Harome", "created_on": new Date("3/16/2017"), "birthday": new Date("12/12/1999"), "last_activity": new Date("4/13/2017"), "next_activity": new Date("9/13/2017"), "deals_won": 8, "deals_lost": 15, "deals_pending": 24, "deals_total": 47, "ratio": 35, "estimated_sales": 1299528, "actual_sales": 427320, "tags": "pro, financial" }, + { "id": 890157389, "avatar": "assets/images/women/50.jpg", "name": "Leanora Ashment", "email": "lashment2s@indiatimes.com", "company": "Zoomzone", "position": "Senior Sales Associate", "work_phone": "+1-512-208-1070", "mobile_phone": "+1-501-633-5551", "fax": "+1-215-887-2154", "street": "3 Anzinger Circle", "city": "Austin", "post_code": 78749, "state": "TX", "country": "United States", "referred_by": "Junia Scrowston", "created_on": new Date("12/9/2017"), "birthday": new Date("4/10/1997"), "last_activity": new Date("12/20/2017"), "next_activity": new Date("1/20/2019"), "deals_won": 1, "deals_lost": 19, "deals_pending": 8, "deals_total": 28, "ratio": 5, "estimated_sales": 1188520, "actual_sales": 128638, "tags": "demo, medical" }, + { "id": 499268085, "avatar": "assets/images/men/2.jpg", "name": "Alain Paling", "email": "apaling2t@desdev.cn", "company": "Jaxnation", "position": "Tax Accountant", "work_phone": "+1-253-727-2019", "mobile_phone": "+1-323-273-8399", "fax": "+1-203-894-6403", "street": "9 Merchant Point", "city": "Olympia", "post_code": 98516, "state": "WA", "country": "United States", "referred_by": "Ahmad Ewbank", "created_on": new Date("11/2/2017"), "birthday": new Date("12/21/1970"), "last_activity": new Date("11/18/2017"), "next_activity": new Date("12/18/2017"), "deals_won": 19, "deals_lost": 2, "deals_pending": 9, "deals_total": 30, "ratio": 9, "estimated_sales": 570366, "actual_sales": 1520931, "tags": "cold, construction" }, + { "id": 748064736, "avatar": "assets/images/women/79.jpg", "name": "Doll Broad", "email": "dbroad2u@yale.edu", "company": "Topicblab", "position": "Business Systems Development Analyst", "work_phone": "+1-210-494-3531", "mobile_phone": "+1-702-552-1186", "fax": "+1-404-631-2435", "street": "50038 Scofield Park", "city": "San Antonio", "post_code": 78205, "state": "TX", "country": "United States", "referred_by": "Isacco McVeighty", "created_on": new Date("9/4/2017"), "birthday": new Date("5/28/1975"), "last_activity": new Date("9/30/2017"), "next_activity": new Date("2/28/2018"), "deals_won": 22, "deals_lost": 24, "deals_pending": 18, "deals_total": 64, "ratio": 48, "estimated_sales": 1812744, "actual_sales": 3443440, "tags": "warm, engineering" }, + { "id": 271540773, "avatar": "assets/images/men/22.jpg", "name": "King Bigham", "email": "kbigham2v@addtoany.com", "company": "Voonix", "position": "Graphic Designer", "work_phone": "+1-318-978-8369", "mobile_phone": "+1-225-414-3561", "fax": "+1-402-325-1040", "street": "92 Mifflin Road", "city": "Shreveport", "post_code": 71151, "state": "LA", "country": "United States", "referred_by": "Chrissie L'Episcopio", "created_on": new Date("9/26/2017"), "birthday": new Date("10/15/1992"), "last_activity": new Date("10/19/2017"), "next_activity": new Date("9/19/2018"), "deals_won": 8, "deals_lost": 4, "deals_pending": 1, "deals_total": 13, "ratio": 67, "estimated_sales": 162316, "actual_sales": 415392, "tags": "hot, medical" }, + { "id": 759693536, "avatar": "assets/images/women/18.jpg", "name": "Risa Guitt", "email": "rguitt2w@mashable.com", "company": "Voolia", "position": "Nuclear Power Engineer", "work_phone": "+1-339-831-1765", "mobile_phone": "+1-772-124-8811", "fax": "+1-814-318-4969", "street": "0 Bunting Alley", "city": "Lynn", "post_code": 1905, "state": "MA", "country": "United States", "referred_by": "Allister De Metz", "created_on": new Date("2/11/2017"), "birthday": new Date("11/8/1987"), "last_activity": new Date("2/20/2017"), "next_activity": new Date("12/20/2017"), "deals_won": 21, "deals_lost": 27, "deals_pending": 0, "deals_total": 48, "ratio": 44, "estimated_sales": 0, "actual_sales": 2988909, "tags": "hot, retail" }, + { "id": 765687550, "avatar": "assets/images/women/2.jpg", "name": "Rosie Stouther", "email": "rstouther2x@nationalgeographic.com", "company": "Abatz", "position": "Financial Advisor", "work_phone": "+1-918-657-6632", "mobile_phone": "+1-720-231-1743", "fax": "+1-260-149-9432", "street": "2 Loomis Court", "city": "Tulsa", "post_code": 74141, "state": "OK", "country": "United States", "referred_by": "Trey Pavlishchev", "created_on": new Date("1/12/2017"), "birthday": new Date("9/21/1979"), "last_activity": new Date("1/21/2017"), "next_activity": new Date("10/21/2018"), "deals_won": 2, "deals_lost": 5, "deals_pending": 8, "deals_total": 15, "ratio": 29, "estimated_sales": 1588296, "actual_sales": 301318, "tags": "demo, pharmaceutical" }, + { "id": 402736165, "avatar": "assets/images/women/98.jpg", "name": "Pris Chiles", "email": "pchiles2y@indiatimes.com", "company": "Einti", "position": "Paralegal", "work_phone": "+1-716-690-7478", "mobile_phone": "+1-816-845-1766", "fax": "+1-571-786-6804", "street": "50597 Emmet Pass", "city": "Buffalo", "post_code": 14233, "state": "NY", "country": "United States", "referred_by": "Shanie Simenon", "created_on": new Date("11/4/2017"), "birthday": new Date("3/7/1975"), "last_activity": new Date("11/28/2017"), "next_activity": new Date("3/28/2018"), "deals_won": 16, "deals_lost": 4, "deals_pending": 29, "deals_total": 49, "ratio": 8, "estimated_sales": 4890183, "actual_sales": 1847888, "tags": "pro, construction" }, + { "id": 792872282, "avatar": "assets/images/women/93.jpg", "name": "Dee Dome", "email": "ddome2z@issuu.com", "company": "Devpulse", "position": "Quality Control Specialist", "work_phone": "+1-203-981-1729", "mobile_phone": "+1-910-901-3291", "fax": "+1-520-936-6240", "street": "03659 Warner Park", "city": "Norwalk", "post_code": 6854, "state": "CT", "country": "United States", "referred_by": "Glenden Arminger", "created_on": new Date("1/12/2017"), "birthday": new Date("3/1/2002"), "last_activity": new Date("1/21/2017"), "next_activity": new Date("3/21/2017"), "deals_won": 15, "deals_lost": 9, "deals_pending": 17, "deals_total": 41, "ratio": 63, "estimated_sales": 1380451, "actual_sales": 2263815, "tags": "pro, engineering" }, + { "id": 937592691, "avatar": "assets/images/women/87.jpg", "name": "Ceciley Swatten", "email": "cswatten30@hao123.com", "company": "Quaxo", "position": "Technical Writer", "work_phone": "+1-318-196-1473", "mobile_phone": "+1-806-949-3414", "fax": "+1-562-266-8071", "street": "0 Rieder Drive", "city": "Shreveport", "post_code": 71137, "state": "LA", "country": "United States", "referred_by": "Fremont Tommei", "created_on": new Date("9/12/2017"), "birthday": new Date("11/2/1980"), "last_activity": new Date("9/28/2017"), "next_activity": new Date("8/28/2018"), "deals_won": 17, "deals_lost": 25, "deals_pending": 19, "deals_total": 61, "ratio": 4, "estimated_sales": 1602460, "actual_sales": 3069384, "tags": "warm, construction" }, + { "id": 464905609, "avatar": "assets/images/women/85.jpg", "name": "Gates Burbudge", "email": "gburbudge31@nationalgeographic.com", "company": "Jabbertype", "position": "Operator", "work_phone": "+1-941-294-1364", "mobile_phone": "+1-608-503-0279", "fax": "+1-602-588-1972", "street": "51745 Talmadge Crossing", "city": "Bonita Springs", "post_code": 34135, "state": "FL", "country": "United States", "referred_by": "Raimundo Desorts", "created_on": new Date("9/28/2017"), "birthday": new Date("7/25/1986"), "last_activity": new Date("10/27/2017"), "next_activity": new Date("3/27/2019"), "deals_won": 0, "deals_lost": 15, "deals_pending": 18, "deals_total": 33, "ratio": 0, "estimated_sales": 2818728, "actual_sales": 0, "tags": "hot, retail" }, + { "id": 725670652, "avatar": "assets/images/women/86.jpg", "name": "Ninon Buckham", "email": "nbuckham32@wiley.com", "company": "Zoonder", "position": "Assistant Professor", "work_phone": "+1-612-908-1786", "mobile_phone": "+1-515-982-8441", "fax": "+1-214-505-8891", "street": "7 Elgar Crossing", "city": "Minneapolis", "post_code": 55441, "state": "MN", "country": "United States", "referred_by": "Alejandro Hands", "created_on": new Date("10/6/2017"), "birthday": new Date("8/21/1973"), "last_activity": new Date("10/9/2017"), "next_activity": new Date("10/9/2019"), "deals_won": 20, "deals_lost": 24, "deals_pending": 28, "deals_total": 72, "ratio": 45, "estimated_sales": 1770160, "actual_sales": 2626420, "tags": "demo, pharmaceutical" }, + { "id": 12502390, "avatar": "assets/images/women/48.jpg", "name": "Dodie Zoephel", "email": "dzoephel33@fc2.com", "company": "Roomm", "position": "Pharmacist", "work_phone": "+1-404-901-7264", "mobile_phone": "+1-815-425-4816", "fax": "+1-202-942-2889", "street": "2866 Dunning Park", "city": "Atlanta", "post_code": 30301, "state": "GA", "country": "United States", "referred_by": "Thea Clemo", "created_on": new Date("4/16/2018"), "birthday": new Date("12/13/1988"), "last_activity": new Date("4/24/2018"), "next_activity": new Date("2/24/2020"), "deals_won": 20, "deals_lost": 19, "deals_pending": 25, "deals_total": 64, "ratio": 51, "estimated_sales": 2549350, "actual_sales": 3993800, "tags": "cold, medical" }, + { "id": 204473265, "avatar": "assets/images/men/86.jpg", "name": "Duky Toll", "email": "dtoll34@163.com", "company": "Blogpad", "position": "Electrical Engineer", "work_phone": "+1-706-592-0164", "mobile_phone": "+1-703-460-8089", "fax": "+1-323-235-3861", "street": "89 Mendota Court", "city": "Augusta", "post_code": 30905, "state": "GA", "country": "United States", "referred_by": "Frayda Bullocke", "created_on": new Date("11/10/2017"), "birthday": new Date("4/14/1972"), "last_activity": new Date("12/10/2017"), "next_activity": new Date("8/10/2018"), "deals_won": 30, "deals_lost": 26, "deals_pending": 28, "deals_total": 84, "ratio": 54, "estimated_sales": 2679656, "actual_sales": 1860390, "tags": "cool, retail" }, + { "id": 359071419, "avatar": "assets/images/women/73.jpg", "name": "Tildie MacCorkell", "email": "tmaccorkell35@360.cn", "company": "Gabvine", "position": "Computer Systems Analyst III", "work_phone": "+1-951-766-9576", "mobile_phone": "+1-205-719-9906", "fax": "+1-212-700-0761", "street": "718 Village Road", "city": "Riverside", "post_code": 92519, "state": "CA", "country": "United States", "referred_by": "Irena Creelman", "created_on": new Date("5/29/2017"), "birthday": new Date("8/14/1995"), "last_activity": new Date("6/28/2017"), "next_activity": new Date("7/28/2017"), "deals_won": 14, "deals_lost": 30, "deals_pending": 19, "deals_total": 63, "ratio": 32, "estimated_sales": 2605128, "actual_sales": 1623468, "tags": "cool, construction" }, + { "id": 551639525, "avatar": "assets/images/men/58.jpg", "name": "Ahmad Stern", "email": "astern36@gnu.org", "company": "Meevee", "position": "Nurse", "work_phone": "+1-202-546-9216", "mobile_phone": "+1-614-795-9088", "fax": "+1-773-882-2804", "street": "4994 Anhalt Pass", "city": "Washington", "post_code": 20409, "state": "DC", "country": "United States", "referred_by": "Fremont Houldin", "created_on": new Date("10/25/2017"), "birthday": new Date("12/3/1976"), "last_activity": new Date("10/28/2017"), "next_activity": new Date("8/28/2018"), "deals_won": 15, "deals_lost": 10, "deals_pending": 8, "deals_total": 33, "ratio": 6, "estimated_sales": 420656, "actual_sales": 2915895, "tags": "cool, financial" }, + { "id": 17613310, "avatar": "assets/images/men/47.jpg", "name": "Gordan Guerrin", "email": "gguerrin37@google.pl", "company": "Linklinks", "position": "Web Developer IV", "work_phone": "+1-626-819-3737", "mobile_phone": "+1-410-340-3512", "fax": "+1-559-724-2668", "street": "9 Longview Court", "city": "Burbank", "post_code": 91505, "state": "CA", "country": "United States", "referred_by": "Madalena Biagioni", "created_on": new Date("3/28/2017"), "birthday": new Date("6/23/1977"), "last_activity": new Date("4/16/2017"), "next_activity": new Date("5/16/2017"), "deals_won": 24, "deals_lost": 3, "deals_pending": 7, "deals_total": 34, "ratio": 89, "estimated_sales": 409983, "actual_sales": 3269976, "tags": "hot, pharmaceutical" }, + { "id": 819567118, "avatar": "assets/images/men/97.jpg", "name": "Bo Phebee", "email": "bphebee38@sbwire.com", "company": "Tanoodle", "position": "VP Product Management", "work_phone": "+1-719-947-0055", "mobile_phone": "+1-210-641-0782", "fax": "+1-919-127-4559", "street": "28 Talmadge Lane", "city": "Colorado Springs", "post_code": 80925, "state": "CO", "country": "United States", "referred_by": "Emerson Finden", "created_on": new Date("7/3/2017"), "birthday": new Date("6/19/1986"), "last_activity": new Date("7/16/2017"), "next_activity": new Date("8/16/2017"), "deals_won": 15, "deals_lost": 1, "deals_pending": 9, "deals_total": 25, "ratio": 94, "estimated_sales": 913356, "actual_sales": 1984695, "tags": "demo, engineering" }, + { "id": 175852789, "avatar": "assets/images/men/59.jpg", "name": "Monro Matias", "email": "mmatias39@si.edu", "company": "Buzzdog", "position": "Research Associate", "work_phone": "+1-763-855-7311", "mobile_phone": "+1-813-474-4537", "fax": "+1-915-492-2680", "street": "854 Fisk Plaza", "city": "Minneapolis", "post_code": 55412, "state": "MN", "country": "United States", "referred_by": "Rinaldo Clail", "created_on": new Date("12/26/2017"), "birthday": new Date("6/2/1973"), "last_activity": new Date("1/18/2018"), "next_activity": new Date("4/18/2018"), "deals_won": 23, "deals_lost": 20, "deals_pending": 3, "deals_total": 46, "ratio": 53, "estimated_sales": 449664, "actual_sales": 3766365, "tags": "pro, construction" }, + { "id": 888244427, "avatar": "assets/images/men/53.jpg", "name": "Nye Shevlane", "email": "nshevlane3a@princeton.edu", "company": "Avamba", "position": "Geological Engineer", "work_phone": "+1-304-409-8780", "mobile_phone": "+1-615-946-8938", "fax": "+1-865-300-3682", "street": "54 Almo Junction", "city": "Charleston", "post_code": 25362, "state": "WV", "country": "United States", "referred_by": "Shurwood Fullbrook", "created_on": new Date("1/17/2018"), "birthday": new Date("6/10/1976"), "last_activity": new Date("2/11/2018"), "next_activity": new Date("8/11/2019"), "deals_won": 7, "deals_lost": 6, "deals_pending": 16, "deals_total": 29, "ratio": 54, "estimated_sales": 1617904, "actual_sales": 963879, "tags": "hot, pharmaceutical" }, + { "id": 721676406, "avatar": "assets/images/women/51.jpg", "name": "Elisabetta Gianettini", "email": "egianettini3b@foxnews.com", "company": "Rhynyx", "position": "Account Coordinator", "work_phone": "+1-513-617-3871", "mobile_phone": "+1-305-759-0213", "fax": "+1-503-410-7438", "street": "276 Oak Trail", "city": "Cincinnati", "post_code": 45243, "state": "OH", "country": "United States", "referred_by": "Emlen Werner", "created_on": new Date("5/28/2017"), "birthday": new Date("6/15/1983"), "last_activity": new Date("6/17/2017"), "next_activity": new Date("6/17/2019"), "deals_won": 23, "deals_lost": 16, "deals_pending": 21, "deals_total": 60, "ratio": 59, "estimated_sales": 2677416, "actual_sales": 2440783, "tags": "medical" }, + { "id": 238633854, "avatar": "assets/images/women/13.jpg", "name": "Gray Dinse", "email": "gdinse3c@abc.net.au", "company": "Dablist", "position": "Senior Sales Associate", "work_phone": "+1-904-798-6308", "mobile_phone": "+1-719-339-4239", "fax": "+1-816-887-3298", "street": "3093 Morrow Place", "city": "Jacksonville", "post_code": 32209, "state": "FL", "country": "United States", "referred_by": "Kurt Gianiello", "created_on": new Date("6/5/2017"), "birthday": new Date("11/29/1985"), "last_activity": new Date("6/21/2017"), "next_activity": new Date("8/21/2018"), "deals_won": 21, "deals_lost": 5, "deals_pending": 19, "deals_total": 45, "ratio": 81, "estimated_sales": 2130565, "actual_sales": 1985298, "tags": "hot, engineering" }, + { "id": 442189261, "avatar": "assets/images/men/4.jpg", "name": "Jae William", "email": "jwilliam3d@bloglovin.com", "company": "Gabvine", "position": "Senior Quality Engineer", "work_phone": "+1-402-511-1348", "mobile_phone": "+1-713-772-8601", "fax": "+1-239-742-9606", "street": "11 Forest Dale Junction", "city": "Omaha", "post_code": 68144, "state": "NE", "country": "United States", "referred_by": "Dewain Lundie", "created_on": new Date("1/18/2017"), "birthday": new Date("8/16/1989"), "last_activity": new Date("1/29/2017"), "next_activity": new Date("7/29/2017"), "deals_won": 16, "deals_lost": 2, "deals_pending": 30, "deals_total": 48, "ratio": 89, "estimated_sales": 5639880, "actual_sales": 2149360, "tags": "cold, financial" }, + { "id": 278785545, "avatar": "assets/images/women/86.jpg", "name": "Johanna Robrow", "email": "jrobrow3e@accuweather.com", "company": "Wikizz", "position": "Compensation Analyst", "work_phone": "+1-989-403-7013", "mobile_phone": "+1-215-345-1741", "fax": "+1-718-916-0303", "street": "511 David Trail", "city": "Midland", "post_code": 48670, "state": "MI", "country": "United States", "referred_by": "Georg Goody", "created_on": new Date("6/25/2017"), "birthday": new Date("1/4/2000"), "last_activity": new Date("7/6/2017"), "next_activity": new Date("9/6/2018"), "deals_won": 20, "deals_lost": 17, "deals_pending": 13, "deals_total": 50, "ratio": 54, "estimated_sales": 1308450, "actual_sales": 3988580, "tags": "hot, construction" }, + { "id": 354558788, "avatar": "assets/images/men/27.jpg", "name": "Demetrius Lightewood", "email": "dlightewood3f@epa.gov", "company": "Jazzy", "position": "Software Consultant", "work_phone": "+1-303-538-6492", "mobile_phone": "+1-334-253-0662", "fax": "+1-612-776-8954", "street": "25689 Oak Valley Circle", "city": "Boulder", "post_code": 80328, "state": "CO", "country": "United States", "referred_by": "Agna Hickeringill", "created_on": new Date("2/10/2018"), "birthday": new Date("5/11/1979"), "last_activity": new Date("3/8/2018"), "next_activity": new Date("8/8/2019"), "deals_won": 6, "deals_lost": 11, "deals_pending": 12, "deals_total": 29, "ratio": 35, "estimated_sales": 2101320, "actual_sales": 736176, "tags": "warm, financial" }, + { "id": 406938625, "avatar": "assets/images/women/9.jpg", "name": "Glennie Jepson", "email": "gjepson3g@google.co.jp", "company": "Skivee", "position": "Nuclear Power Engineer", "work_phone": "+1-727-833-5988", "mobile_phone": "+1-860-724-2970", "fax": "+1-480-114-0332", "street": "520 Monica Drive", "city": "Saint Petersburg", "post_code": 33737, "state": "FL", "country": "United States", "referred_by": "Dyane Riddiford", "created_on": new Date("5/15/2017"), "birthday": new Date("4/28/1994"), "last_activity": new Date("6/5/2017"), "next_activity": new Date("1/5/2019"), "deals_won": 19, "deals_lost": 14, "deals_pending": 15, "deals_total": 48, "ratio": 58, "estimated_sales": 1312935, "actual_sales": 1226431, "tags": "subscriber, pharmaceutical" }, + { "id": 191811557, "avatar": "assets/images/women/28.jpg", "name": "Matti McGrirl", "email": "mmcgrirl3h@slideshare.net", "company": "Livefish", "position": "Staff Accountant IV", "work_phone": "+1-202-697-2989", "mobile_phone": "+1-404-730-5611", "fax": "+1-915-756-5819", "street": "4858 Waywood Park", "city": "Washington", "post_code": 20456, "state": "DC", "country": "United States", "referred_by": "Saunders Headan", "created_on": new Date("6/29/2017"), "birthday": new Date("11/1/1984"), "last_activity": new Date("7/8/2017"), "next_activity": new Date("11/8/2018"), "deals_won": 16, "deals_lost": 16, "deals_pending": 7, "deals_total": 39, "ratio": 5, "estimated_sales": 1096641, "actual_sales": 1426176, "tags": "hot, engineering" }, + { "id": 361861864, "avatar": "assets/images/men/50.jpg", "name": "Rudolf Nealy", "email": "rnealy3i@upenn.edu", "company": "Aibox", "position": "Nurse", "work_phone": "+1-520-799-5392", "mobile_phone": "+1-309-724-2266", "fax": "+1-706-444-8372", "street": "8 Carioca Place", "city": "Tucson", "post_code": 85710, "state": "AZ", "country": "United States", "referred_by": "Thornton Ansley", "created_on": new Date("4/13/2017"), "birthday": new Date("8/19/2002"), "last_activity": new Date("4/25/2017"), "next_activity": new Date("12/25/2017"), "deals_won": 6, "deals_lost": 2, "deals_pending": 22, "deals_total": 30, "ratio": 75, "estimated_sales": 1650924, "actual_sales": 826308, "tags": "cool, financial" }, + { "id": 606612904, "avatar": "assets/images/women/28.jpg", "name": "Ketti MacGibbon", "email": "kmacgibbon3j@cloudflare.com", "company": "Kazu", "position": "Senior Cost Accountant", "work_phone": "+1-850-608-2516", "mobile_phone": "+1-254-468-2991", "fax": "+1-518-525-0595", "street": "8 High Crossing Junction", "city": "Pensacola", "post_code": 32505, "state": "FL", "country": "United States", "referred_by": "Robbyn Ommundsen", "created_on": new Date("10/8/2017"), "birthday": new Date("2/21/1973"), "last_activity": new Date("10/24/2017"), "next_activity": new Date("4/24/2018"), "deals_won": 3, "deals_lost": 6, "deals_pending": 8, "deals_total": 17, "ratio": 33, "estimated_sales": 500616, "actual_sales": 329451, "tags": "cool, medical" }, + { "id": 683579157, "avatar": "assets/images/women/28.jpg", "name": "Michelle Fehners", "email": "mfehners3k@hubpages.com", "company": "Yata", "position": "GIS Technical Architect", "work_phone": "+1-248-569-7729", "mobile_phone": "+1-818-918-9583", "fax": "+1-310-395-7412", "street": "2 Veith Drive", "city": "Detroit", "post_code": 48242, "state": "MI", "country": "United States", "referred_by": "Everett M'Barron", "created_on": new Date("1/16/2018"), "birthday": new Date("10/16/1975"), "last_activity": new Date("2/11/2018"), "next_activity": new Date("3/11/2018"), "deals_won": 29, "deals_lost": 13, "deals_pending": 6, "deals_total": 48, "ratio": 69, "estimated_sales": 713838, "actual_sales": 4569298, "tags": "hot, construction" }, + { "id": 734230268, "avatar": "assets/images/women/46.jpg", "name": "Netty Labet", "email": "nlabet3l@webeden.co.uk", "company": "Rhynoodle", "position": "Sales Associate", "work_phone": "+1-402-247-1070", "mobile_phone": "+1-559-879-7342", "fax": "+1-516-718-4441", "street": "908 Blaine Pass", "city": "Lincoln", "post_code": 68517, "state": "NE", "country": "United States", "referred_by": "Muffin Macilhench", "created_on": new Date("7/13/2017"), "birthday": new Date("1/29/1986"), "last_activity": new Date("7/14/2017"), "next_activity": new Date("10/14/2018"), "deals_won": 9, "deals_lost": 15, "deals_pending": 10, "deals_total": 34, "ratio": 38, "estimated_sales": 1513590, "actual_sales": 1165095, "tags": "subscriber, medical" }, + { "id": 838951712, "avatar": "assets/images/men/89.jpg", "name": "Darrel Dever", "email": "ddever3m@netscape.com", "company": "Ntag", "position": "Statistician I", "work_phone": "+1-614-913-6448", "mobile_phone": "+1-918-609-6877", "fax": "+1-864-675-2104", "street": "15 Tony Avenue", "city": "Columbus", "post_code": 43226, "state": "OH", "country": "United States", "referred_by": "Doralynne Chard", "created_on": new Date("4/6/2017"), "birthday": new Date("7/17/1984"), "last_activity": new Date("4/25/2017"), "next_activity": new Date("7/25/2017"), "deals_won": 27, "deals_lost": 16, "deals_pending": 7, "deals_total": 50, "ratio": 63, "estimated_sales": 1347920, "actual_sales": 3184758, "tags": "cool, medical" }, + { "id": 931789304, "avatar": "assets/images/women/68.jpg", "name": "Griselda Coldwell", "email": "gcoldwell3n@hexun.com", "company": "Mydeo", "position": "Database Administrator IV", "work_phone": "+1-304-428-7062", "mobile_phone": "+1-727-836-2925", "fax": "+1-816-928-9631", "street": "94307 High Crossing Junction", "city": "Charleston", "post_code": 25321, "state": "WV", "country": "United States", "referred_by": "Emlen Beecham", "created_on": new Date("3/18/2018"), "birthday": new Date("2/25/1977"), "last_activity": new Date("4/2/2018"), "next_activity": new Date("7/2/2019"), "deals_won": 20, "deals_lost": 26, "deals_pending": 30, "deals_total": 76, "ratio": 43, "estimated_sales": 5488380, "actual_sales": 1626180, "tags": "demo, financial" }, + { "id": 308215970, "avatar": "assets/images/men/59.jpg", "name": "Ibrahim Eouzan", "email": "ieouzan3o@buzzfeed.com", "company": "Yoveo", "position": "Systems Administrator II", "work_phone": "+1-937-114-9797", "mobile_phone": "+1-734-715-6508", "fax": "+1-210-427-8463", "street": "8 Arkansas Center", "city": "Dayton", "post_code": 45426, "state": "OH", "country": "United States", "referred_by": "Martynne Geekin", "created_on": new Date("10/30/2017"), "birthday": new Date("1/16/1988"), "last_activity": new Date("11/27/2017"), "next_activity": new Date("2/27/2019"), "deals_won": 20, "deals_lost": 1, "deals_pending": 25, "deals_total": 46, "ratio": 95, "estimated_sales": 3296025, "actual_sales": 1365140, "tags": "subscriber, engineering" }, + { "id": 820972604, "avatar": "assets/images/women/68.jpg", "name": "Amelia Breakwell", "email": "abreakwell3p@geocities.jp", "company": "Quatz", "position": "Community Outreach Specialist", "work_phone": "+1-415-650-1384", "mobile_phone": "+1-903-299-0879", "fax": "+1-202-239-9148", "street": "3 Heath Plaza", "city": "San Francisco", "post_code": 94164, "state": "CA", "country": "United States", "referred_by": "Bette-ann Housden", "created_on": new Date("7/4/2017"), "birthday": new Date("11/23/1972"), "last_activity": new Date("7/16/2017"), "next_activity": new Date("6/16/2019"), "deals_won": 7, "deals_lost": 29, "deals_pending": 9, "deals_total": 45, "ratio": 19, "estimated_sales": 721710, "actual_sales": 1020397, "tags": "hot, retail" }, + { "id": 107747029, "avatar": "assets/images/women/21.jpg", "name": "Celestina Noweak", "email": "cnoweak3q@nhs.uk", "company": "Realcube", "position": "Community Outreach Specialist", "work_phone": "+1-971-806-8372", "mobile_phone": "+1-901-349-4589", "fax": "+1-317-863-2454", "street": "429 Goodland Junction", "city": "Portland", "post_code": 97232, "state": "OR", "country": "United States", "referred_by": "Lou Eastridge", "created_on": new Date("3/12/2017"), "birthday": new Date("4/30/1982"), "last_activity": new Date("3/23/2017"), "next_activity": new Date("7/23/2017"), "deals_won": 18, "deals_lost": 24, "deals_pending": 15, "deals_total": 57, "ratio": 43, "estimated_sales": 1987155, "actual_sales": 1172610, "tags": "warm, retail" }, + { "id": 441028366, "avatar": "assets/images/men/52.jpg", "name": "Alvin Dunbabin", "email": "adunbabin3r@army.mil", "company": "Thoughtworks", "position": "Help Desk Technician", "work_phone": "+1-954-515-3164", "mobile_phone": "+1-401-328-7573", "fax": "+1-786-554-2619", "street": "55093 Porter Place", "city": "West Palm Beach", "post_code": 33411, "state": "FL", "country": "United States", "referred_by": "Bev Destouche", "created_on": new Date("2/22/2018"), "birthday": new Date("10/12/2001"), "last_activity": new Date("3/12/2018"), "next_activity": new Date("4/12/2019"), "deals_won": 30, "deals_lost": 10, "deals_pending": 23, "deals_total": 63, "ratio": 75, "estimated_sales": 2153306, "actual_sales": 2254830, "tags": "cool, retail" }, + { "id": 762178654, "avatar": "assets/images/women/84.jpg", "name": "Kati Kivelhan", "email": "kkivelhan3s@yahoo.co.jp", "company": "Twinte", "position": "Nuclear Power Engineer", "work_phone": "+1-970-563-1294", "mobile_phone": "+1-202-882-3625", "fax": "+1-815-897-5075", "street": "68638 Sachtjen Point", "city": "Grand Junction", "post_code": 81505, "state": "CO", "country": "United States", "referred_by": "Vitoria Tulleth", "created_on": new Date("6/18/2017"), "birthday": new Date("3/17/1996"), "last_activity": new Date("7/9/2017"), "next_activity": new Date("12/9/2017"), "deals_won": 28, "deals_lost": 17, "deals_pending": 5, "deals_total": 50, "ratio": 62, "estimated_sales": 897310, "actual_sales": 3698296, "tags": "warm, medical" }, + { "id": 648514338, "avatar": "assets/images/women/7.jpg", "name": "Wynne Banting", "email": "wbanting3t@wisc.edu", "company": "Kare", "position": "Human Resources Assistant IV", "work_phone": "+1-316-870-8182", "mobile_phone": "+1-212-708-5900", "fax": "+1-502-194-1205", "street": "0 Pennsylvania Crossing", "city": "Wichita", "post_code": 67230, "state": "KS", "country": "United States", "referred_by": "Melisande Barneveld", "created_on": new Date("6/7/2017"), "birthday": new Date("9/15/1978"), "last_activity": new Date("6/17/2017"), "next_activity": new Date("7/17/2018"), "deals_won": 4, "deals_lost": 19, "deals_pending": 26, "deals_total": 49, "ratio": 17, "estimated_sales": 4579432, "actual_sales": 796284, "tags": "retail" }, + { "id": 800873151, "avatar": "assets/images/men/52.jpg", "name": "Hadlee Darby", "email": "hdarby3u@goo.gl", "company": "Oyoyo", "position": "Data Coordiator", "work_phone": "+1-661-406-2261", "mobile_phone": "+1-509-170-4461", "fax": "+1-713-618-7629", "street": "56 Northwestern Trail", "city": "Burbank", "post_code": 91520, "state": "CA", "country": "United States", "referred_by": "Holly Fonteyne", "created_on": new Date("4/16/2017"), "birthday": new Date("10/2/1991"), "last_activity": new Date("5/6/2017"), "next_activity": new Date("11/6/2017"), "deals_won": 6, "deals_lost": 3, "deals_pending": 15, "deals_total": 24, "ratio": 67, "estimated_sales": 1213890, "actual_sales": 1063752, "tags": "cold, engineering" }, + { "id": 532232775, "avatar": "assets/images/men/17.jpg", "name": "Bary Rabson", "email": "brabson3v@ucla.edu", "company": "Meetz", "position": "Community Outreach Specialist", "work_phone": "+1-701-645-5641", "mobile_phone": "+1-218-566-5700", "fax": "+1-919-614-7489", "street": "209 Canary Alley", "city": "Grand Forks", "post_code": 58207, "state": "ND", "country": "United States", "referred_by": "Neely Dee", "created_on": new Date("10/4/2017"), "birthday": new Date("2/20/2003"), "last_activity": new Date("10/12/2017"), "next_activity": new Date("1/12/2019"), "deals_won": 13, "deals_lost": 19, "deals_pending": 14, "deals_total": 46, "ratio": 41, "estimated_sales": 1268722, "actual_sales": 841776, "tags": "retail" }, + { "id": 859910869, "avatar": "assets/images/women/73.jpg", "name": "Vicky Gueste", "email": "vgueste3w@nbcnews.com", "company": "Quatz", "position": "Junior Executive", "work_phone": "+1-763-723-6168", "mobile_phone": "+1-209-247-2873", "fax": "+1-907-443-8287", "street": "2 Merry Avenue", "city": "Minneapolis", "post_code": 55428, "state": "MN", "country": "United States", "referred_by": "Vitoria Bullivent", "created_on": new Date("4/13/2018"), "birthday": new Date("8/11/1974"), "last_activity": new Date("5/8/2018"), "next_activity": new Date("4/8/2019"), "deals_won": 30, "deals_lost": 1, "deals_pending": 1, "deals_total": 32, "ratio": 97, "estimated_sales": 63836, "actual_sales": 4367550, "tags": "subscriber, pharmaceutical" }, + { "id": 699657284, "avatar": "assets/images/men/75.jpg", "name": "Ignaz Tringham", "email": "itringham3x@51.la", "company": "Jaxspan", "position": "Speech Pathologist", "work_phone": "+1-203-445-2368", "mobile_phone": "+1-915-403-6188", "fax": "+1-727-389-7486", "street": "2 Donald Crossing", "city": "Waterbury", "post_code": 6705, "state": "CT", "country": "United States", "referred_by": "Wendall Sands", "created_on": new Date("11/3/2017"), "birthday": new Date("4/2/1977"), "last_activity": new Date("11/21/2017"), "next_activity": new Date("10/21/2019"), "deals_won": 4, "deals_lost": 1, "deals_pending": 17, "deals_total": 22, "ratio": 8, "estimated_sales": 2531572, "actual_sales": 327484, "tags": "demo, pharmaceutical" }, + { "id": 72405625, "avatar": "assets/images/women/86.jpg", "name": "Bobbie Sandes", "email": "bsandes3y@hibu.com", "company": "Voomm", "position": "Registered Nurse", "work_phone": "+1-202-134-4380", "mobile_phone": "+1-561-328-5190", "fax": "+1-818-490-8883", "street": "53 Hanover Circle", "city": "Washington", "post_code": 20591, "state": "DC", "country": "United States", "referred_by": "Elbertina Huelin", "created_on": new Date("11/5/2017"), "birthday": new Date("7/29/1995"), "last_activity": new Date("11/11/2017"), "next_activity": new Date("10/11/2018"), "deals_won": 7, "deals_lost": 6, "deals_pending": 17, "deals_total": 30, "ratio": 54, "estimated_sales": 2999820, "actual_sales": 582484, "tags": "warm, financial" }, + { "id": 22421037, "avatar": "assets/images/women/69.jpg", "name": "Carolyne Flewitt", "email": "cflewitt3z@tripod.com", "company": "Bubblebox", "position": "Director of Sales", "work_phone": "+1-402-318-6486", "mobile_phone": "+1-801-707-0187", "fax": "+1-915-152-5023", "street": "62 8th Terrace", "city": "Omaha", "post_code": 68117, "state": "NE", "country": "United States", "referred_by": "Eward Croke", "created_on": new Date("12/16/2017"), "birthday": new Date("1/4/1988"), "last_activity": new Date("1/7/2018"), "next_activity": new Date("7/7/2018"), "deals_won": 17, "deals_lost": 27, "deals_pending": 11, "deals_total": 55, "ratio": 39, "estimated_sales": 823603, "actual_sales": 2346374, "tags": "cold, medical" }, + { "id": 647824990, "avatar": "assets/images/men/42.jpg", "name": "Andreas Kibble", "email": "akibble40@tinypic.com", "company": "Einti", "position": "Nurse", "work_phone": "+1-716-599-4740", "mobile_phone": "+1-323-613-2792", "fax": "+1-712-263-9951", "street": "7467 Ohio Parkway", "city": "Buffalo", "post_code": 14269, "state": "NY", "country": "United States", "referred_by": "Hobie Polglaze", "created_on": new Date("12/25/2017"), "birthday": new Date("4/5/2002"), "last_activity": new Date("1/9/2018"), "next_activity": new Date("2/9/2018"), "deals_won": 16, "deals_lost": 17, "deals_pending": 23, "deals_total": 56, "ratio": 48, "estimated_sales": 3627468, "actual_sales": 1979152, "tags": "construction" }, + { "id": 126964452, "avatar": "assets/images/women/91.jpg", "name": "Addie Cowope", "email": "acowope41@weibo.com", "company": "Skalith", "position": "Senior Financial Analyst", "work_phone": "+1-562-156-4360", "mobile_phone": "+1-717-803-2264", "fax": "+1-571-852-8340", "street": "045 Dovetail Point", "city": "Los Angeles", "post_code": 90010, "state": "CA", "country": "United States", "referred_by": "Merry McVittie", "created_on": new Date("3/15/2018"), "birthday": new Date("6/12/1981"), "last_activity": new Date("4/14/2018"), "next_activity": new Date("6/14/2019"), "deals_won": 26, "deals_lost": 29, "deals_pending": 16, "deals_total": 71, "ratio": 47, "estimated_sales": 1083200, "actual_sales": 5078034, "tags": "hot, financial" }, + { "id": 585165069, "avatar": "assets/images/men/85.jpg", "name": "Garrek Cumpsty", "email": "gcumpsty42@domainmarket.com", "company": "Fivespan", "position": "Research Nurse", "work_phone": "+1-304-397-0277", "mobile_phone": "+1-310-393-4345", "fax": "+1-727-671-3589", "street": "06 Dwight Avenue", "city": "Charleston", "post_code": 25305, "state": "WV", "country": "United States", "referred_by": "Minette Bridgement", "created_on": new Date("10/12/2017"), "birthday": new Date("11/6/1993"), "last_activity": new Date("11/1/2017"), "next_activity": new Date("1/1/2018"), "deals_won": 12, "deals_lost": 10, "deals_pending": 8, "deals_total": 30, "ratio": 55, "estimated_sales": 1469472, "actual_sales": 1040508, "tags": "subscriber, pharmaceutical" }, + { "id": 373945754, "avatar": "assets/images/women/29.jpg", "name": "Ruperta Beesey", "email": "rbeesey43@google.co.uk", "company": "Divavu", "position": "Chief Design Engineer", "work_phone": "+1-941-375-0858", "mobile_phone": "+1-610-266-1953", "fax": "+1-502-333-3043", "street": "9318 Service Court", "city": "Punta Gorda", "post_code": 33982, "state": "FL", "country": "United States", "referred_by": "Blondie Dolley", "created_on": new Date("3/13/2018"), "birthday": new Date("2/28/1979"), "last_activity": new Date("3/21/2018"), "next_activity": new Date("10/21/2019"), "deals_won": 16, "deals_lost": 6, "deals_pending": 20, "deals_total": 42, "ratio": 73, "estimated_sales": 1516120, "actual_sales": 2711456, "tags": "demo, medical" }, + { "id": 130543223, "avatar": "assets/images/men/51.jpg", "name": "Reagan O'Hartnett", "email": "rohartnett44@washington.edu", "company": "Skidoo", "position": "Biostatistician IV", "work_phone": "+1-562-656-7385", "mobile_phone": "+1-312-285-8242", "fax": "+1-626-644-8973", "street": "5204 Kings Plaza", "city": "Long Beach", "post_code": 90831, "state": "CA", "country": "United States", "referred_by": "Patience Popelay", "created_on": new Date("12/15/2017"), "birthday": new Date("6/22/1992"), "last_activity": new Date("12/24/2017"), "next_activity": new Date("12/24/2018"), "deals_won": 18, "deals_lost": 7, "deals_pending": 18, "deals_total": 43, "ratio": 72, "estimated_sales": 1004922, "actual_sales": 2680956, "tags": "warm, pharmaceutical" }, + { "id": 149962559, "avatar": "assets/images/men/34.jpg", "name": "Preston Buckel", "email": "pbuckel45@baidu.com", "company": "Lajo", "position": "Health Coach IV", "work_phone": "+1-210-144-9441", "mobile_phone": "+1-704-584-2171", "fax": "+1-661-649-8940", "street": "3 Memorial Plaza", "city": "San Antonio", "post_code": 78240, "state": "TX", "country": "United States", "referred_by": "Lucien Elt", "created_on": new Date("5/21/2017"), "birthday": new Date("9/15/1988"), "last_activity": new Date("6/19/2017"), "next_activity": new Date("4/19/2018"), "deals_won": 10, "deals_lost": 7, "deals_pending": 0, "deals_total": 17, "ratio": 59, "estimated_sales": 0, "actual_sales": 1721110, "tags": "hot, medical" }, + { "id": 389288503, "avatar": "assets/images/men/95.jpg", "name": "Barbabas Crocetto", "email": "bcrocetto46@umich.edu", "company": "Tagtune", "position": "Senior Cost Accountant", "work_phone": "+1-304-611-8972", "mobile_phone": "+1-704-968-0262", "fax": "+1-337-927-0657", "street": "1 Myrtle Trail", "city": "Charleston", "post_code": 25362, "state": "WV", "country": "United States", "referred_by": "Allin Beagles", "created_on": new Date("9/12/2017"), "birthday": new Date("9/10/1995"), "last_activity": new Date("9/17/2017"), "next_activity": new Date("9/17/2019"), "deals_won": 12, "deals_lost": 26, "deals_pending": 6, "deals_total": 44, "ratio": 32, "estimated_sales": 651822, "actual_sales": 1877136, "tags": "warm, pharmaceutical" }, + { "id": 180511968, "avatar": "assets/images/men/12.jpg", "name": "Grover McPaike", "email": "gmcpaike47@tuttocitta.it", "company": "Realfire", "position": "Mechanical Systems Engineer", "work_phone": "+1-803-673-3932", "mobile_phone": "+1-320-781-5956", "fax": "+1-208-402-4887", "street": "2 Graceland Drive", "city": "Columbia", "post_code": 29220, "state": "SC", "country": "United States", "referred_by": "Valentine Armour", "created_on": new Date("7/6/2017"), "birthday": new Date("7/3/1973"), "last_activity": new Date("7/8/2017"), "next_activity": new Date("1/8/2019"), "deals_won": 11, "deals_lost": 13, "deals_pending": 8, "deals_total": 32, "ratio": 46, "estimated_sales": 1582400, "actual_sales": 1393172, "tags": "warm, pharmaceutical" }, + { "id": 181756398, "avatar": "assets/images/women/54.jpg", "name": "Cari Durtnall", "email": "cdurtnall48@purevolume.com", "company": "Skyvu", "position": "Mechanical Systems Engineer", "work_phone": "+1-651-302-0176", "mobile_phone": "+1-203-427-9590", "fax": "+1-202-410-7302", "street": "09 Spenser Hill", "city": "Saint Paul", "post_code": 55188, "state": "MN", "country": "United States", "referred_by": "Chlo Vasyukhin", "created_on": new Date("3/6/2017"), "birthday": new Date("4/30/1997"), "last_activity": new Date("3/22/2017"), "next_activity": new Date("10/22/2018"), "deals_won": 17, "deals_lost": 20, "deals_pending": 8, "deals_total": 45, "ratio": 46, "estimated_sales": 1276160, "actual_sales": 1472489, "tags": "construction" }, + { "id": 804031140, "avatar": "assets/images/women/66.jpg", "name": "Sella Catherick", "email": "scatherick49@behance.net", "company": "Vipe", "position": "Social Worker", "work_phone": "+1-917-106-1204", "mobile_phone": "+1-260-167-7271", "fax": "+1-202-360-5621", "street": "874 New Castle Junction", "city": "New York City", "post_code": 10155, "state": "NY", "country": "United States", "referred_by": "Saunder Tawse", "created_on": new Date("10/3/2017"), "birthday": new Date("6/6/1978"), "last_activity": new Date("10/6/2017"), "next_activity": new Date("7/6/2018"), "deals_won": 1, "deals_lost": 29, "deals_pending": 28, "deals_total": 58, "ratio": 3, "estimated_sales": 3862572, "actual_sales": 151914, "tags": "pro, medical" }, + { "id": 578774224, "avatar": "assets/images/men/33.jpg", "name": "Flin Whitwell", "email": "fwhitwell4a@joomla.org", "company": "Feedmix", "position": "Sales Associate", "work_phone": "+1-281-368-6450", "mobile_phone": "+1-205-782-1540", "fax": "+1-949-214-7146", "street": "11 Oak Valley Plaza", "city": "Galveston", "post_code": 77554, "state": "TX", "country": "United States", "referred_by": "Raimund Renihan", "created_on": new Date("6/12/2017"), "birthday": new Date("10/2/1974"), "last_activity": new Date("7/3/2017"), "next_activity": new Date("12/3/2017"), "deals_won": 4, "deals_lost": 14, "deals_pending": 2, "deals_total": 20, "ratio": 22, "estimated_sales": 266636, "actual_sales": 744032, "tags": "construction" }, + { "id": 601969277, "avatar": "assets/images/women/59.jpg", "name": "Daisey Churm", "email": "dchurm4b@blogger.com", "company": "Bluezoom", "position": "Internal Auditor", "work_phone": "+1-520-858-3343", "mobile_phone": "+1-214-205-8235", "fax": "+1-337-583-6211", "street": "2548 Marcy Road", "city": "Tucson", "post_code": 85737, "state": "AZ", "country": "United States", "referred_by": "Martie Hearns", "created_on": new Date("4/8/2018"), "birthday": new Date("1/21/1996"), "last_activity": new Date("5/5/2018"), "next_activity": new Date("7/5/2019"), "deals_won": 7, "deals_lost": 12, "deals_pending": 0, "deals_total": 19, "ratio": 37, "estimated_sales": 0, "actual_sales": 1270213, "tags": "cool, medical" }, + { "id": 586367555, "avatar": "assets/images/men/29.jpg", "name": "Claudius Landre", "email": "clandre4c@diigo.com", "company": "Brightdog", "position": "Technical Writer", "work_phone": "+1-573-793-7549", "mobile_phone": "+1-253-537-4663", "fax": "+1-254-555-7355", "street": "6314 Erie Plaza", "city": "Columbia", "post_code": 65211, "state": "MO", "country": "United States", "referred_by": "Jorey Durtnall", "created_on": new Date("10/6/2017"), "birthday": new Date("10/1/1988"), "last_activity": new Date("11/4/2017"), "next_activity": new Date("4/4/2018"), "deals_won": 0, "deals_lost": 18, "deals_pending": 5, "deals_total": 23, "ratio": 0, "estimated_sales": 255040, "actual_sales": 0, "tags": "cool, pharmaceutical" }, + { "id": 93561147, "avatar": "assets/images/women/28.jpg", "name": "Constanta Klazenga", "email": "cklazenga4d@miibeian.gov.cn", "company": "Wikivu", "position": "Nurse", "work_phone": "+1-309-900-7956", "mobile_phone": "+1-213-335-4039", "fax": "+1-216-903-4437", "street": "8944 Delaware Pass", "city": "Peoria", "post_code": 61635, "state": "IL", "country": "United States", "referred_by": "Kristian Llewellyn", "created_on": new Date("12/22/2017"), "birthday": new Date("5/10/1973"), "last_activity": new Date("1/8/2018"), "next_activity": new Date("11/8/2018"), "deals_won": 1, "deals_lost": 5, "deals_pending": 21, "deals_total": 27, "ratio": 17, "estimated_sales": 2872989, "actual_sales": 57512, "tags": "cool, construction" }, + { "id": 728523139, "avatar": "assets/images/men/2.jpg", "name": "Tabb Sharpin", "email": "tsharpin4e@odnoklassniki.ru", "company": "Photobean", "position": "Physical Therapy Assistant", "work_phone": "+1-714-282-1294", "mobile_phone": "+1-912-853-5915", "fax": "+1-202-411-0139", "street": "82 Spohn Pass", "city": "Anaheim", "post_code": 92805, "state": "CA", "country": "United States", "referred_by": "Karoly Oakley", "created_on": new Date("5/27/2017"), "birthday": new Date("3/21/1985"), "last_activity": new Date("6/6/2017"), "next_activity": new Date("7/6/2017"), "deals_won": 30, "deals_lost": 8, "deals_pending": 19, "deals_total": 57, "ratio": 79, "estimated_sales": 1061188, "actual_sales": 4486920, "tags": "hot, financial" }, + { "id": 960390649, "avatar": "assets/images/women/53.jpg", "name": "Miquela Wield", "email": "mwield4f@ocn.ne.jp", "company": "Voonix", "position": "Administrative Officer", "work_phone": "+1-425-616-3882", "mobile_phone": "+1-918-537-6629", "fax": "+1-915-617-7129", "street": "546 Memorial Street", "city": "Seattle", "post_code": 98133, "state": "WA", "country": "United States", "referred_by": "Lenee Troyes", "created_on": new Date("3/19/2017"), "birthday": new Date("2/3/1978"), "last_activity": new Date("4/15/2017"), "next_activity": new Date("6/15/2017"), "deals_won": 7, "deals_lost": 30, "deals_pending": 18, "deals_total": 55, "ratio": 19, "estimated_sales": 3510486, "actual_sales": 959364, "tags": "subscriber, construction" }, + { "id": 672264673, "avatar": "assets/images/men/52.jpg", "name": "Simon Smewin", "email": "ssmewin4g@myspace.com", "company": "Skyvu", "position": "Software Developer", "work_phone": "+1-425-222-3566", "mobile_phone": "+1-515-637-2438", "fax": "+1-520-760-2508", "street": "20 Golf View Way", "city": "Seattle", "post_code": 98121, "state": "WA", "country": "United States", "referred_by": "Phaidra Kingsford", "created_on": new Date("12/10/2017"), "birthday": new Date("9/6/1976"), "last_activity": new Date("1/7/2018"), "next_activity": new Date("5/7/2018"), "deals_won": 13, "deals_lost": 17, "deals_pending": 0, "deals_total": 30, "ratio": 43, "estimated_sales": 0, "actual_sales": 1070082, "tags": "hot, medical" }, + { "id": 344604647, "avatar": "assets/images/women/47.jpg", "name": "Gale Andreazzi", "email": "gandreazzi4h@squidoo.com", "company": "Realcube", "position": "Automation Specialist III", "work_phone": "+1-813-305-3499", "mobile_phone": "+1-917-872-6293", "fax": "+1-916-704-5284", "street": "6829 Evergreen Drive", "city": "Tampa", "post_code": 33605, "state": "FL", "country": "United States", "referred_by": "Sheppard McKinie", "created_on": new Date("2/21/2018"), "birthday": new Date("11/2/1999"), "last_activity": new Date("3/16/2018"), "next_activity": new Date("1/16/2019"), "deals_won": 30, "deals_lost": 5, "deals_pending": 26, "deals_total": 61, "ratio": 86, "estimated_sales": 2379182, "actual_sales": 5099790, "tags": "warm, retail" }, + { "id": 324652117, "avatar": "assets/images/women/36.jpg", "name": "Willetta Sitlinton", "email": "wsitlinton4i@joomla.org", "company": "Edgetag", "position": "Assistant Professor", "work_phone": "+1-757-352-9306", "mobile_phone": "+1-718-524-3894", "fax": "+1-504-958-2968", "street": "26819 Hayes Avenue", "city": "Virginia Beach", "post_code": 23471, "state": "VA", "country": "United States", "referred_by": "Doro Varty", "created_on": new Date("5/14/2017"), "birthday": new Date("8/24/1984"), "last_activity": new Date("6/2/2017"), "next_activity": new Date("10/2/2017"), "deals_won": 26, "deals_lost": 16, "deals_pending": 7, "deals_total": 49, "ratio": 62, "estimated_sales": 752031, "actual_sales": 4486638, "tags": "demo, pharmaceutical" }, + { "id": 924731971, "avatar": "assets/images/women/43.jpg", "name": "Leticia Shawell", "email": "lshawell4j@flickr.com", "company": "Topiczoom", "position": "Programmer IV", "work_phone": "+1-203-989-5206", "mobile_phone": "+1-941-557-6424", "fax": "+1-806-158-0324", "street": "625 Mallory Terrace", "city": "New Haven", "post_code": 6533, "state": "CT", "country": "United States", "referred_by": "Giulietta Nasey", "created_on": new Date("3/11/2018"), "birthday": new Date("12/9/1985"), "last_activity": new Date("3/22/2018"), "next_activity": new Date("9/22/2018"), "deals_won": 14, "deals_lost": 1, "deals_pending": 7, "deals_total": 22, "ratio": 93, "estimated_sales": 921004, "actual_sales": 1736826, "tags": "cold, financial" }, + { "id": 183612557, "avatar": "assets/images/women/68.jpg", "name": "Leyla Gomersal", "email": "lgomersal4k@ftc.gov", "company": "Skyvu", "position": "Financial Advisor", "work_phone": "+1-607-858-0288", "mobile_phone": "+1-765-481-8067", "fax": "+1-202-607-0048", "street": "7 Nevada Road", "city": "Elmira", "post_code": 14905, "state": "NY", "country": "United States", "referred_by": "Anabal Dancer", "created_on": new Date("12/14/2017"), "birthday": new Date("2/4/2003"), "last_activity": new Date("1/5/2018"), "next_activity": new Date("3/5/2018"), "deals_won": 0, "deals_lost": 14, "deals_pending": 2, "deals_total": 16, "ratio": 0, "estimated_sales": 238072, "actual_sales": 0, "tags": "subscriber, financial" }, + { "id": 688020164, "avatar": "assets/images/women/78.jpg", "name": "Corette Cruttenden", "email": "ccruttenden4l@icio.us", "company": "Browsezoom", "position": "Librarian", "work_phone": "+1-480-727-2800", "mobile_phone": "+1-703-356-4860", "fax": "+1-609-897-8837", "street": "3 Eagan Point", "city": "Phoenix", "post_code": 85015, "state": "AZ", "country": "United States", "referred_by": "Tiffi Keighley", "created_on": new Date("3/5/2018"), "birthday": new Date("10/17/1997"), "last_activity": new Date("3/11/2018"), "next_activity": new Date("4/11/2018"), "deals_won": 1, "deals_lost": 9, "deals_pending": 26, "deals_total": 36, "ratio": 1, "estimated_sales": 2821182, "actual_sales": 167645, "tags": "cool, construction" }, + { "id": 277521465, "avatar": "assets/images/women/78.jpg", "name": "Una Juliano", "email": "ujuliano4m@samsung.com", "company": "Fatz", "position": "Database Administrator IV", "work_phone": "+1-202-648-7663", "mobile_phone": "+1-805-954-2486", "fax": "+1-719-274-4539", "street": "5 Riverside Way", "city": "Washington", "post_code": 20046, "state": "DC", "country": "United States", "referred_by": "Cyrille Norrie", "created_on": new Date("7/25/2017"), "birthday": new Date("12/21/1993"), "last_activity": new Date("8/13/2017"), "next_activity": new Date("8/13/2018"), "deals_won": 21, "deals_lost": 9, "deals_pending": 1, "deals_total": 31, "ratio": 7, "estimated_sales": 76703, "actual_sales": 2947854, "tags": "medical" }, + { "id": 676394332, "avatar": "assets/images/women/98.jpg", "name": "Melita Espada", "email": "mespada4n@amazon.de", "company": "Linkbridge", "position": "Systems Administrator II", "work_phone": "+1-407-693-9463", "mobile_phone": "+1-617-612-4712", "fax": "+1-717-243-3525", "street": "236 American Ash Court", "city": "Kissimmee", "post_code": 34745, "state": "FL", "country": "United States", "referred_by": "Leanna Saffen", "created_on": new Date("1/26/2017"), "birthday": new Date("5/19/2002"), "last_activity": new Date("2/20/2017"), "next_activity": new Date("12/20/2017"), "deals_won": 1, "deals_lost": 8, "deals_pending": 30, "deals_total": 39, "ratio": 11, "estimated_sales": 1985460, "actual_sales": 103250, "tags": "demo, financial" }, + { "id": 164510718, "avatar": "assets/images/women/14.jpg", "name": "Guglielma Karolowski", "email": "gkarolowski4o@purevolume.com", "company": "Gabvine", "position": "Chemical Engineer", "work_phone": "+1-785-989-8029", "mobile_phone": "+1-212-743-7996", "fax": "+1-336-926-2614", "street": "2653 Graceland Avenue", "city": "Topeka", "post_code": 66611, "state": "KS", "country": "United States", "referred_by": "Jeremias Hamblyn", "created_on": new Date("10/27/2017"), "birthday": new Date("4/26/1971"), "last_activity": new Date("11/20/2017"), "next_activity": new Date("7/20/2019"), "deals_won": 12, "deals_lost": 18, "deals_pending": 19, "deals_total": 49, "ratio": 4, "estimated_sales": 2191270, "actual_sales": 2004216, "tags": "financial" }, + { "id": 956059485, "avatar": "assets/images/men/20.jpg", "name": "Rodrigo Gregolotti", "email": "rgregolotti4p@tamu.edu", "company": "Photojam", "position": "Assistant Manager", "work_phone": "+1-757-915-0540", "mobile_phone": "+1-406-347-6720", "fax": "+1-213-499-0219", "street": "23 Stone Corner Avenue", "city": "Norfolk", "post_code": 23551, "state": "VA", "country": "United States", "referred_by": "Ase Lewisham", "created_on": new Date("6/28/2017"), "birthday": new Date("4/4/1985"), "last_activity": new Date("7/4/2017"), "next_activity": new Date("11/4/2018"), "deals_won": 15, "deals_lost": 17, "deals_pending": 14, "deals_total": 46, "ratio": 47, "estimated_sales": 1125530, "actual_sales": 1256730, "tags": "engineering" }, + { "id": 530982849, "avatar": "assets/images/men/73.jpg", "name": "Fletch Starbucke", "email": "fstarbucke4q@oakley.com", "company": "Youbridge", "position": "Electrical Engineer", "work_phone": "+1-318-269-0766", "mobile_phone": "+1-704-431-1042", "fax": "+1-706-310-3132", "street": "41749 Hooker Avenue", "city": "Shreveport", "post_code": 71161, "state": "LA", "country": "United States", "referred_by": "Haily Cabrara", "created_on": new Date("7/12/2017"), "birthday": new Date("12/23/1981"), "last_activity": new Date("7/20/2017"), "next_activity": new Date("3/20/2018"), "deals_won": 4, "deals_lost": 10, "deals_pending": 22, "deals_total": 36, "ratio": 29, "estimated_sales": 2178550, "actual_sales": 524524, "tags": "subscriber, retail" }, + { "id": 771387349, "avatar": "assets/images/women/37.jpg", "name": "Ashley Rottgers", "email": "arottgers4r@psu.edu", "company": "Vinte", "position": "Structural Engineer", "work_phone": "+1-253-912-5996", "mobile_phone": "+1-907-621-0189", "fax": "+1-419-611-0434", "street": "034 Drewry Avenue", "city": "Tacoma", "post_code": 98417, "state": "WA", "country": "United States", "referred_by": "Joshia Carragher", "created_on": new Date("1/2/2018"), "birthday": new Date("7/14/1992"), "last_activity": new Date("1/27/2018"), "next_activity": new Date("1/27/2019"), "deals_won": 27, "deals_lost": 27, "deals_pending": 24, "deals_total": 78, "ratio": 5, "estimated_sales": 1646928, "actual_sales": 5130729, "tags": "pro, retail" }, + { "id": 807635223, "avatar": "assets/images/women/91.jpg", "name": "Marigold Kitt", "email": "mkitt4s@comcast.net", "company": "Zoombox", "position": "Director of Sales", "work_phone": "+1-413-682-8363", "mobile_phone": "+1-304-132-3080", "fax": "+1-859-612-5169", "street": "8 Sundown Way", "city": "Springfield", "post_code": 1105, "state": "MA", "country": "United States", "referred_by": "Andree Larder", "created_on": new Date("3/14/2017"), "birthday": new Date("9/12/1978"), "last_activity": new Date("4/4/2017"), "next_activity": new Date("5/4/2017"), "deals_won": 7, "deals_lost": 18, "deals_pending": 2, "deals_total": 27, "ratio": 28, "estimated_sales": 238510, "actual_sales": 1360996, "tags": "cold, pharmaceutical" }, + { "id": 679882681, "avatar": "assets/images/women/68.jpg", "name": "Else Vice", "email": "evice4t@marketwatch.com", "company": "Edgeclub", "position": "Structural Engineer", "work_phone": "+1-702-635-3199", "mobile_phone": "+1-352-206-3889", "fax": "+1-612-443-8270", "street": "24020 Marcy Circle", "city": "Las Vegas", "post_code": 89150, "state": "NV", "country": "United States", "referred_by": "Bale McPhee", "created_on": new Date("7/4/2017"), "birthday": new Date("5/12/1979"), "last_activity": new Date("7/28/2017"), "next_activity": new Date("9/28/2017"), "deals_won": 4, "deals_lost": 10, "deals_pending": 25, "deals_total": 39, "ratio": 29, "estimated_sales": 3030000, "actual_sales": 257280, "tags": "cool, retail" }, + { "id": 940027548, "avatar": "assets/images/men/20.jpg", "name": "Brett Blazy", "email": "bblazy4u@vkontakte.ru", "company": "Skibox", "position": "Food Chemist", "work_phone": "+1-813-209-2340", "mobile_phone": "+1-480-723-3476", "fax": "+1-718-207-6676", "street": "445 Hanson Road", "city": "Clearwater", "post_code": 33758, "state": "FL", "country": "United States", "referred_by": "Tamiko Smales", "created_on": new Date("3/7/2018"), "birthday": new Date("9/11/1995"), "last_activity": new Date("3/24/2018"), "next_activity": new Date("7/24/2018"), "deals_won": 0, "deals_lost": 28, "deals_pending": 17, "deals_total": 45, "ratio": 0, "estimated_sales": 1260295, "actual_sales": 0, "tags": "hot, construction" }, + { "id": 148381427, "avatar": "assets/images/men/18.jpg", "name": "Isidoro Mowsdale", "email": "imowsdale4v@alexa.com", "company": "Jabbercube", "position": "Chief Design Engineer", "work_phone": "+1-612-787-8688", "mobile_phone": "+1-989-315-9840", "fax": "+1-502-795-3220", "street": "5 Cherokee Hill", "city": "Minneapolis", "post_code": 55417, "state": "MN", "country": "United States", "referred_by": "Gearalt Slot", "created_on": new Date("11/20/2017"), "birthday": new Date("8/29/1975"), "last_activity": new Date("12/5/2017"), "next_activity": new Date("5/5/2019"), "deals_won": 22, "deals_lost": 28, "deals_pending": 4, "deals_total": 54, "ratio": 44, "estimated_sales": 745968, "actual_sales": 1614668, "tags": "warm, financial" }, + { "id": 62564531, "avatar": "assets/images/women/47.jpg", "name": "Marta Cossor", "email": "mcossor4w@parallels.com", "company": "Skipstorm", "position": "Help Desk Technician", "work_phone": "+1-573-183-1533", "mobile_phone": "+1-310-683-5743", "fax": "+1-803-202-6363", "street": "8652 Sloan Drive", "city": "Columbia", "post_code": 65211, "state": "MO", "country": "United States", "referred_by": "Gustie Karsh", "created_on": new Date("3/22/2017"), "birthday": new Date("5/17/2000"), "last_activity": new Date("4/14/2017"), "next_activity": new Date("8/14/2018"), "deals_won": 4, "deals_lost": 24, "deals_pending": 12, "deals_total": 40, "ratio": 14, "estimated_sales": 1300020, "actual_sales": 763460, "tags": "warm, construction" }, + { "id": 104451830, "avatar": "assets/images/women/86.jpg", "name": "Kalila Lovegrove", "email": "klovegrove4x@marriott.com", "company": "Gabcube", "position": "Human Resources Assistant II", "work_phone": "+1-202-705-1859", "mobile_phone": "+1-804-685-9373", "fax": "+1-217-895-7366", "street": "5 Everett Parkway", "city": "Washington", "post_code": 20442, "state": "DC", "country": "United States", "referred_by": "Virgilio Ebbetts", "created_on": new Date("1/17/2018"), "birthday": new Date("11/11/1980"), "last_activity": new Date("2/13/2018"), "next_activity": new Date("5/13/2018"), "deals_won": 0, "deals_lost": 3, "deals_pending": 26, "deals_total": 29, "ratio": 0, "estimated_sales": 3027414, "actual_sales": 0, "tags": "demo, pharmaceutical" }, + { "id": 27428660, "avatar": "assets/images/men/12.jpg", "name": "Flynn Sheard", "email": "fsheard4y@usnews.com", "company": "Skyvu", "position": "Geologist II", "work_phone": "+1-225-863-3714", "mobile_phone": "+1-407-861-3685", "fax": "+1-563-860-1612", "street": "7661 Golf Point", "city": "Baton Rouge", "post_code": 70810, "state": "LA", "country": "United States", "referred_by": "Mycah Melburg", "created_on": new Date("2/15/2018"), "birthday": new Date("3/18/1972"), "last_activity": new Date("2/22/2018"), "next_activity": new Date("7/22/2018"), "deals_won": 20, "deals_lost": 10, "deals_pending": 1, "deals_total": 31, "ratio": 67, "estimated_sales": 188979, "actual_sales": 2027940, "tags": "construction" }, + { "id": 246388708, "avatar": "assets/images/men/79.jpg", "name": "Webster Springate", "email": "wspringate4z@fotki.com", "company": "Miboo", "position": "Programmer Analyst II", "work_phone": "+1-785-116-5056", "mobile_phone": "+1-203-462-0453", "fax": "+1-314-492-1526", "street": "98815 Service Alley", "city": "Topeka", "post_code": 66611, "state": "KS", "country": "United States", "referred_by": "Malia Roskams", "created_on": new Date("1/7/2017"), "birthday": new Date("9/17/2001"), "last_activity": new Date("1/12/2017"), "next_activity": new Date("5/12/2017"), "deals_won": 7, "deals_lost": 10, "deals_pending": 30, "deals_total": 47, "ratio": 41, "estimated_sales": 3944820, "actual_sales": 852194, "tags": "cool, medical" }, + { "id": 815679935, "avatar": "assets/images/women/41.jpg", "name": "Arabel Carthy", "email": "acarthy50@webmd.com", "company": "Jayo", "position": "Human Resources Manager", "work_phone": "+1-323-320-0272", "mobile_phone": "+1-347-760-4734", "fax": "+1-941-570-9228", "street": "2518 Oneill Center", "city": "North Hollywood", "post_code": 91606, "state": "CA", "country": "United States", "referred_by": "Audi Bissiker", "created_on": new Date("9/30/2017"), "birthday": new Date("12/7/1970"), "last_activity": new Date("10/6/2017"), "next_activity": new Date("7/6/2018"), "deals_won": 4, "deals_lost": 14, "deals_pending": 5, "deals_total": 23, "ratio": 22, "estimated_sales": 834545, "actual_sales": 710168, "tags": "financial" }, + { "id": 630253914, "avatar": "assets/images/women/89.jpg", "name": "Sena Gianninotti", "email": "sgianninotti51@yellowpages.com", "company": "Browsecat", "position": "Senior Cost Accountant", "work_phone": "+1-850-382-3415", "mobile_phone": "+1-281-506-0249", "fax": "+1-918-507-7600", "street": "0071 Monterey Way", "city": "Pensacola", "post_code": 32526, "state": "FL", "country": "United States", "referred_by": "Kayla Macconachy", "created_on": new Date("1/25/2018"), "birthday": new Date("3/1/1985"), "last_activity": new Date("2/15/2018"), "next_activity": new Date("2/15/2020"), "deals_won": 9, "deals_lost": 16, "deals_pending": 12, "deals_total": 37, "ratio": 36, "estimated_sales": 1415508, "actual_sales": 1756017, "tags": "medical" }, + { "id": 618159805, "avatar": "assets/images/women/55.jpg", "name": "Gypsy Gallaccio", "email": "ggallaccio52@google.com", "company": "DabZ", "position": "Senior Developer", "work_phone": "+1-951-565-3126", "mobile_phone": "+1-714-129-8038", "fax": "+1-714-656-0225", "street": "1548 Kingsford Lane", "city": "Riverside", "post_code": 92519, "state": "CA", "country": "United States", "referred_by": "Arly Heinke", "created_on": new Date("7/31/2017"), "birthday": new Date("12/18/1972"), "last_activity": new Date("8/29/2017"), "next_activity": new Date("4/29/2018"), "deals_won": 8, "deals_lost": 16, "deals_pending": 13, "deals_total": 37, "ratio": 33, "estimated_sales": 2403583, "actual_sales": 791384, "tags": "hot, financial" }, + { "id": 149111031, "avatar": "assets/images/men/98.jpg", "name": "Sholom Cantos", "email": "scantos53@phoca.cz", "company": "Ozu", "position": "Structural Analysis Engineer", "work_phone": "+1-412-479-5864", "mobile_phone": "+1-614-250-0198", "fax": "+1-857-835-1365", "street": "6 Rutledge Junction", "city": "Pittsburgh", "post_code": 15215, "state": "PA", "country": "United States", "referred_by": "Ernaline Ainsby", "created_on": new Date("9/6/2017"), "birthday": new Date("12/4/1989"), "last_activity": new Date("10/4/2017"), "next_activity": new Date("8/4/2018"), "deals_won": 23, "deals_lost": 12, "deals_pending": 0, "deals_total": 35, "ratio": 66, "estimated_sales": 0, "actual_sales": 4449212, "tags": "cold, retail" }, + { "id": 498427870, "avatar": "assets/images/women/61.jpg", "name": "Elita Oller", "email": "eoller54@macromedia.com", "company": "Skyndu", "position": "Associate Professor", "work_phone": "+1-330-539-5710", "mobile_phone": "+1-216-226-0344", "fax": "+1-513-931-8405", "street": "9904 Blaine Park", "city": "Youngstown", "post_code": 44505, "state": "OH", "country": "United States", "referred_by": "Kippy Vennings", "created_on": new Date("2/28/2018"), "birthday": new Date("7/28/1990"), "last_activity": new Date("3/29/2018"), "next_activity": new Date("8/29/2018"), "deals_won": 1, "deals_lost": 17, "deals_pending": 7, "deals_total": 25, "ratio": 6, "estimated_sales": 798189, "actual_sales": 176377, "tags": "cool, pharmaceutical" }, + { "id": 518465012, "avatar": "assets/images/women/69.jpg", "name": "Elnora Standrin", "email": "estandrin55@time.com", "company": "Devbug", "position": "Administrative Assistant III", "work_phone": "+1-714-311-7133", "mobile_phone": "+1-941-965-3558", "fax": "+1-256-943-0403", "street": "3837 Del Mar Court", "city": "Anaheim", "post_code": 92812, "state": "CA", "country": "United States", "referred_by": "Hastings Hadwen", "created_on": new Date("4/19/2017"), "birthday": new Date("11/4/1978"), "last_activity": new Date("5/9/2017"), "next_activity": new Date("4/9/2019"), "deals_won": 4, "deals_lost": 11, "deals_pending": 19, "deals_total": 34, "ratio": 27, "estimated_sales": 3112542, "actual_sales": 291996, "tags": "hot, retail" }, + { "id": 719986428, "avatar": "assets/images/men/86.jpg", "name": "Randolf Coonihan", "email": "rcoonihan56@wordpress.com", "company": "Kamba", "position": "Programmer Analyst I", "work_phone": "+1-617-259-1371", "mobile_phone": "+1-212-527-6468", "fax": "+1-213-587-2335", "street": "64 Hintze Plaza", "city": "Boston", "post_code": 2124, "state": "MA", "country": "United States", "referred_by": "Gizela Larimer", "created_on": new Date("3/20/2017"), "birthday": new Date("7/27/1985"), "last_activity": new Date("4/1/2017"), "next_activity": new Date("6/1/2018"), "deals_won": 23, "deals_lost": 10, "deals_pending": 14, "deals_total": 47, "ratio": 7, "estimated_sales": 950180, "actual_sales": 2592928, "tags": "cool, construction" }, + { "id": 524733894, "avatar": "assets/images/men/53.jpg", "name": "Hoyt Kindred", "email": "hkindred57@1688.com", "company": "Edgewire", "position": "Web Designer II", "work_phone": "+1-361-717-3582", "mobile_phone": "+1-661-125-7773", "fax": "+1-706-769-1592", "street": "58775 Dexter Circle", "city": "Corpus Christi", "post_code": 78426, "state": "TX", "country": "United States", "referred_by": "Meghann Zanni", "created_on": new Date("6/3/2017"), "birthday": new Date("9/26/2002"), "last_activity": new Date("6/22/2017"), "next_activity": new Date("1/22/2018"), "deals_won": 3, "deals_lost": 13, "deals_pending": 5, "deals_total": 21, "ratio": 19, "estimated_sales": 735850, "actual_sales": 392082, "tags": "retail" }, + { "id": 474390453, "avatar": "assets/images/men/80.jpg", "name": "Nero Alcock", "email": "nalcock58@wufoo.com", "company": "Skimia", "position": "Senior Sales Associate", "work_phone": "+1-940-556-3205", "mobile_phone": "+1-805-228-9607", "fax": "+1-302-956-6704", "street": "3383 Hintze Circle", "city": "Denton", "post_code": 76205, "state": "TX", "country": "United States", "referred_by": "Rozele Gilardengo", "created_on": new Date("9/1/2017"), "birthday": new Date("2/5/1985"), "last_activity": new Date("9/9/2017"), "next_activity": new Date("5/9/2019"), "deals_won": 13, "deals_lost": 15, "deals_pending": 24, "deals_total": 52, "ratio": 46, "estimated_sales": 2030160, "actual_sales": 2136615, "tags": "subscriber, engineering" }, + { "id": 736695558, "avatar": "assets/images/men/87.jpg", "name": "Martin Bedder", "email": "mbedder59@un.org", "company": "Browsebug", "position": "Project Manager", "work_phone": "+1-713-842-8851", "mobile_phone": "+1-913-746-1892", "fax": "+1-701-856-5600", "street": "5 Brentwood Terrace", "city": "Houston", "post_code": 77255, "state": "TX", "country": "United States", "referred_by": "Eula Downing", "created_on": new Date("1/8/2018"), "birthday": new Date("9/19/1982"), "last_activity": new Date("1/30/2018"), "next_activity": new Date("10/30/2018"), "deals_won": 16, "deals_lost": 15, "deals_pending": 0, "deals_total": 31, "ratio": 52, "estimated_sales": 0, "actual_sales": 1543312, "tags": "cold, financial" }, + { "id": 954896380, "avatar": "assets/images/women/97.jpg", "name": "Bridie Shortt", "email": "bshortt5a@ihg.com", "company": "Photojam", "position": "Cost Accountant", "work_phone": "+1-202-577-9318", "mobile_phone": "+1-816-658-3115", "fax": "+1-786-253-9614", "street": "1 Randy Lane", "city": "Washington", "post_code": 20062, "state": "DC", "country": "United States", "referred_by": "Wendye Pettiford", "created_on": new Date("5/16/2017"), "birthday": new Date("2/10/1988"), "last_activity": new Date("5/21/2017"), "next_activity": new Date("6/21/2017"), "deals_won": 14, "deals_lost": 25, "deals_pending": 3, "deals_total": 42, "ratio": 36, "estimated_sales": 262398, "actual_sales": 821674, "tags": "demo, retail" }, + { "id": 821322340, "avatar": "assets/images/women/59.jpg", "name": "Anthe Normabell", "email": "anormabell5b@ucoz.ru", "company": "Tagchat", "position": "Graphic Designer", "work_phone": "+1-316-976-4160", "mobile_phone": "+1-713-918-6887", "fax": "+1-510-483-6512", "street": "94509 Upham Hill", "city": "Wichita", "post_code": 67215, "state": "KS", "country": "United States", "referred_by": "Kay McKitterick", "created_on": new Date("4/7/2018"), "birthday": new Date("11/25/1993"), "last_activity": new Date("4/27/2018"), "next_activity": new Date("11/27/2019"), "deals_won": 20, "deals_lost": 29, "deals_pending": 8, "deals_total": 57, "ratio": 41, "estimated_sales": 1511584, "actual_sales": 3815300, "tags": "engineering" }, + { "id": 822407223, "avatar": "assets/images/women/6.jpg", "name": "Christabella Stitch", "email": "cstitch5c@paginegialle.it", "company": "Blognation", "position": "Recruiting Manager", "work_phone": "+1-401-636-4826", "mobile_phone": "+1-225-647-5747", "fax": "+1-231-546-8228", "street": "76 Lillian Junction", "city": "Providence", "post_code": 2905, "state": "RI", "country": "United States", "referred_by": "Jone Tennant", "created_on": new Date("12/31/2017"), "birthday": new Date("8/21/1980"), "last_activity": new Date("1/3/2018"), "next_activity": new Date("11/3/2018"), "deals_won": 5, "deals_lost": 7, "deals_pending": 5, "deals_total": 17, "ratio": 42, "estimated_sales": 555055, "actual_sales": 661165, "tags": "pro, medical" }, + { "id": 71376805, "avatar": "assets/images/women/58.jpg", "name": "Shalne Drache", "email": "sdrache5d@springer.com", "company": "Gevee", "position": "Account Executive", "work_phone": "+1-702-309-4349", "mobile_phone": "+1-251-727-7360", "fax": "+1-225-875-7340", "street": "42106 Raven Plaza", "city": "Las Vegas", "post_code": 89110, "state": "NV", "country": "United States", "referred_by": "Xylina Daventry", "created_on": new Date("2/23/2017"), "birthday": new Date("10/15/1972"), "last_activity": new Date("2/25/2017"), "next_activity": new Date("7/25/2017"), "deals_won": 21, "deals_lost": 26, "deals_pending": 29, "deals_total": 76, "ratio": 45, "estimated_sales": 4356699, "actual_sales": 3193134, "tags": "construction" }, + { "id": 292053763, "avatar": "assets/images/women/11.jpg", "name": "Sianna Manueau", "email": "smanueau5e@apple.com", "company": "Meevee", "position": "Speech Pathologist", "work_phone": "+1-339-384-3125", "mobile_phone": "+1-212-371-8275", "fax": "+1-602-677-7332", "street": "941 Magdeline Park", "city": "Woburn", "post_code": 1813, "state": "MA", "country": "United States", "referred_by": "Beverley Belton", "created_on": new Date("12/17/2017"), "birthday": new Date("1/9/1994"), "last_activity": new Date("12/19/2017"), "next_activity": new Date("12/19/2019"), "deals_won": 24, "deals_lost": 1, "deals_pending": 16, "deals_total": 41, "ratio": 96, "estimated_sales": 807616, "actual_sales": 2448144, "tags": "hot, construction" }, + { "id": 246449654, "avatar": "assets/images/women/42.jpg", "name": "Yolane Norcliffe", "email": "ynorcliffe5f@epa.gov", "company": "Vitz", "position": "Sales Associate", "work_phone": "+1-616-524-3320", "mobile_phone": "+1-304-271-2602", "fax": "+1-202-626-1255", "street": "13 Center Alley", "city": "Grand Rapids", "post_code": 49505, "state": "MI", "country": "United States", "referred_by": "Dyana Aleksashin", "created_on": new Date("12/23/2017"), "birthday": new Date("6/3/1976"), "last_activity": new Date("1/10/2018"), "next_activity": new Date("2/10/2018"), "deals_won": 29, "deals_lost": 12, "deals_pending": 17, "deals_total": 58, "ratio": 71, "estimated_sales": 2380867, "actual_sales": 4535890, "tags": "cold, construction" }, + { "id": 238685733, "avatar": "assets/images/women/72.jpg", "name": "Carlen Ballentime", "email": "cballentime5g@blogtalkradio.com", "company": "Voonder", "position": "Accountant III", "work_phone": "+1-601-909-2725", "mobile_phone": "+1-253-652-2860", "fax": "+1-217-365-8294", "street": "9623 Truax Road", "city": "Meridian", "post_code": 39305, "state": "MS", "country": "United States", "referred_by": "Eimile Benjafield", "created_on": new Date("6/11/2017"), "birthday": new Date("7/11/2001"), "last_activity": new Date("7/2/2017"), "next_activity": new Date("12/2/2017"), "deals_won": 26, "deals_lost": 12, "deals_pending": 28, "deals_total": 66, "ratio": 68, "estimated_sales": 4226348, "actual_sales": 5085522, "tags": "cold, medical" }, + { "id": 454903039, "avatar": "assets/images/women/35.jpg", "name": "Corrianne Eytel", "email": "ceytel5h@godaddy.com", "company": "Kazio", "position": "Director of Sales", "work_phone": "+1-206-881-4218", "mobile_phone": "+1-210-172-0877", "fax": "+1-714-802-5613", "street": "5 Dawn Parkway", "city": "Seattle", "post_code": 98121, "state": "WA", "country": "United States", "referred_by": "Ellynn Fretwell", "created_on": new Date("4/19/2017"), "birthday": new Date("7/30/1994"), "last_activity": new Date("5/3/2017"), "next_activity": new Date("8/3/2018"), "deals_won": 27, "deals_lost": 17, "deals_pending": 21, "deals_total": 65, "ratio": 61, "estimated_sales": 3262413, "actual_sales": 5387175, "tags": "retail" }, + { "id": 227674915, "avatar": "assets/images/men/36.jpg", "name": "Barnie Lovell", "email": "blovell5i@ucoz.ru", "company": "Fatz", "position": "Information Systems Manager", "work_phone": "+1-941-435-6013", "mobile_phone": "+1-602-746-2150", "fax": "+1-360-709-1556", "street": "8566 Cody Parkway", "city": "Sarasota", "post_code": 34233, "state": "FL", "country": "United States", "referred_by": "Kelsy Dragonette", "created_on": new Date("6/13/2017"), "birthday": new Date("2/3/1995"), "last_activity": new Date("7/7/2017"), "next_activity": new Date("7/7/2018"), "deals_won": 16, "deals_lost": 9, "deals_pending": 6, "deals_total": 31, "ratio": 64, "estimated_sales": 960516, "actual_sales": 2818336, "tags": "cool, retail" }, + { "id": 448332641, "avatar": "assets/images/women/65.jpg", "name": "Hatti Knowlson", "email": "hknowlson5j@slideshare.net", "company": "Jabbertype", "position": "Civil Engineer", "work_phone": "+1-602-647-8066", "mobile_phone": "+1-407-489-5712", "fax": "+1-260-520-4528", "street": "63 Lindbergh Center", "city": "Phoenix", "post_code": 85072, "state": "AZ", "country": "United States", "referred_by": "Annalee Swoffer", "created_on": new Date("11/27/2017"), "birthday": new Date("10/7/1986"), "last_activity": new Date("12/13/2017"), "next_activity": new Date("5/13/2018"), "deals_won": 27, "deals_lost": 26, "deals_pending": 9, "deals_total": 62, "ratio": 51, "estimated_sales": 1143297, "actual_sales": 4244049, "tags": "demo, pharmaceutical" }, + { "id": 822694825, "avatar": "assets/images/women/83.jpg", "name": "Biddie Bodleigh", "email": "bbodleigh5k@ehow.com", "company": "Wordify", "position": "Recruiting Manager", "work_phone": "+1-214-643-6469", "mobile_phone": "+1-480-873-8807", "fax": "+1-717-703-3719", "street": "0592 Atwood Drive", "city": "Dallas", "post_code": 75310, "state": "TX", "country": "United States", "referred_by": "Harlie Wellsman", "created_on": new Date("2/14/2018"), "birthday": new Date("7/22/2002"), "last_activity": new Date("3/2/2018"), "next_activity": new Date("4/2/2019"), "deals_won": 5, "deals_lost": 12, "deals_pending": 29, "deals_total": 46, "ratio": 29, "estimated_sales": 5167220, "actual_sales": 812365, "tags": "subscriber, retail" }, + { "id": 508648017, "avatar": "assets/images/men/65.jpg", "name": "Alvie Roeby", "email": "aroeby5l@facebook.com", "company": "Dynava", "position": "Paralegal", "work_phone": "+1-713-544-5186", "mobile_phone": "+1-716-739-5393", "fax": "+1-602-628-5384", "street": "78 Jenifer Place", "city": "Houston", "post_code": 77234, "state": "TX", "country": "United States", "referred_by": "Valentino Pinel", "created_on": new Date("1/15/2017"), "birthday": new Date("6/27/1970"), "last_activity": new Date("1/23/2017"), "next_activity": new Date("12/23/2018"), "deals_won": 18, "deals_lost": 26, "deals_pending": 12, "deals_total": 56, "ratio": 41, "estimated_sales": 1389072, "actual_sales": 2744442, "tags": "pro, engineering" }, + { "id": 943463753, "avatar": "assets/images/men/32.jpg", "name": "Jaime Fysh", "email": "jfysh5m@google.de", "company": "Realpoint", "position": "Information Systems Manager", "work_phone": "+1-734-795-6658", "mobile_phone": "+1-952-790-3755", "fax": "+1-202-560-1611", "street": "54257 Meadow Vale Trail", "city": "Southfield", "post_code": 48076, "state": "MI", "country": "United States", "referred_by": "Hersh Stallard", "created_on": new Date("3/3/2017"), "birthday": new Date("2/22/2003"), "last_activity": new Date("3/17/2017"), "next_activity": new Date("3/17/2019"), "deals_won": 28, "deals_lost": 18, "deals_pending": 24, "deals_total": 70, "ratio": 61, "estimated_sales": 3102096, "actual_sales": 2386944, "tags": "construction" }, + { "id": 966100711, "avatar": "assets/images/women/71.jpg", "name": "Kassia Mallaby", "email": "kmallaby5n@vimeo.com", "company": "Flashspan", "position": "Account Executive", "work_phone": "+1-937-815-4283", "mobile_phone": "+1-212-648-4914", "fax": "+1-940-593-8575", "street": "4 David Pass", "city": "Dayton", "post_code": 45403, "state": "OH", "country": "United States", "referred_by": "Kori Chataignier", "created_on": new Date("4/8/2017"), "birthday": new Date("7/8/2002"), "last_activity": new Date("4/23/2017"), "next_activity": new Date("7/23/2017"), "deals_won": 27, "deals_lost": 3, "deals_pending": 9, "deals_total": 39, "ratio": 9, "estimated_sales": 719010, "actual_sales": 1590057, "tags": "warm, construction" }, + { "id": 606918441, "avatar": "assets/images/men/70.jpg", "name": "Felizio Durnan", "email": "fdurnan5o@etsy.com", "company": "Skajo", "position": "Assistant Manager", "work_phone": "+1-786-548-5400", "mobile_phone": "+1-816-605-7268", "fax": "+1-772-787-1699", "street": "65 Maryland Way", "city": "Hialeah", "post_code": 33018, "state": "FL", "country": "United States", "referred_by": "Lian Krochmann", "created_on": new Date("7/16/2017"), "birthday": new Date("10/21/1994"), "last_activity": new Date("8/8/2017"), "next_activity": new Date("5/8/2019"), "deals_won": 28, "deals_lost": 4, "deals_pending": 10, "deals_total": 42, "ratio": 88, "estimated_sales": 739970, "actual_sales": 3171056, "tags": "cold, pharmaceutical" }, + { "id": 981043741, "avatar": "assets/images/women/43.jpg", "name": "Christie Parades", "email": "cparades5p@bloglines.com", "company": "Tagtune", "position": "General Manager", "work_phone": "+1-248-103-7094", "mobile_phone": "+1-574-852-9520", "fax": "+1-310-445-0183", "street": "5325 Maryland Circle", "city": "Detroit", "post_code": 48258, "state": "MI", "country": "United States", "referred_by": "Celesta Dunlap", "created_on": new Date("2/17/2018"), "birthday": new Date("10/19/1998"), "last_activity": new Date("3/3/2018"), "next_activity": new Date("6/3/2018"), "deals_won": 12, "deals_lost": 2, "deals_pending": 16, "deals_total": 30, "ratio": 86, "estimated_sales": 1104080, "actual_sales": 676224, "tags": "hot, pharmaceutical" }, + { "id": 287021995, "avatar": "assets/images/women/61.jpg", "name": "Alicea Bourne", "email": "abourne5q@ehow.com", "company": "Brainbox", "position": "Registered Nurse", "work_phone": "+1-559-112-4680", "mobile_phone": "+1-862-179-6056", "fax": "+1-571-900-5747", "street": "10234 Independence Center", "city": "Fresno", "post_code": 93794, "state": "CA", "country": "United States", "referred_by": "Eveleen Huglin", "created_on": new Date("10/12/2017"), "birthday": new Date("6/11/1977"), "last_activity": new Date("10/30/2017"), "next_activity": new Date("4/30/2019"), "deals_won": 2, "deals_lost": 4, "deals_pending": 3, "deals_total": 9, "ratio": 33, "estimated_sales": 509445, "actual_sales": 369884, "tags": "demo, engineering" }, + { "id": 129109837, "avatar": "assets/images/men/30.jpg", "name": "Raddy Wistance", "email": "rwistance5r@macromedia.com", "company": "Agivu", "position": "Human Resources Manager", "work_phone": "+1-865-928-3501", "mobile_phone": "+1-916-534-0198", "fax": "+1-408-622-7124", "street": "83 Glacier Hill Place", "city": "Knoxville", "post_code": 37914, "state": "TN", "country": "United States", "referred_by": "Rachael Bims", "created_on": new Date("2/8/2018"), "birthday": new Date("6/26/1983"), "last_activity": new Date("3/7/2018"), "next_activity": new Date("1/7/2019"), "deals_won": 6, "deals_lost": 20, "deals_pending": 21, "deals_total": 47, "ratio": 23, "estimated_sales": 1201662, "actual_sales": 917904, "tags": "subscriber, medical" }, + { "id": 311210365, "avatar": "assets/images/women/72.jpg", "name": "Caritta Tiesman", "email": "ctiesman5s@psu.edu", "company": "Trilith", "position": "Nuclear Power Engineer", "work_phone": "+1-202-839-0771", "mobile_phone": "+1-781-994-7597", "fax": "+1-619-906-7759", "street": "7 Prentice Terrace", "city": "Washington", "post_code": 20503, "state": "DC", "country": "United States", "referred_by": "Cosimo Clementet", "created_on": new Date("4/27/2017"), "birthday": new Date("4/27/1977"), "last_activity": new Date("5/16/2017"), "next_activity": new Date("3/16/2018"), "deals_won": 19, "deals_lost": 24, "deals_pending": 3, "deals_total": 46, "ratio": 44, "estimated_sales": 243390, "actual_sales": 3501928, "tags": "pro, financial" }, + { "id": 497270043, "avatar": "assets/images/men/86.jpg", "name": "Lucien Bearham", "email": "lbearham5t@squarespace.com", "company": "Talane", "position": "Quality Engineer", "work_phone": "+1-972-718-8606", "mobile_phone": "+1-212-464-9594", "fax": "+1-330-850-2537", "street": "6760 Hudson Circle", "city": "Dallas", "post_code": 75205, "state": "TX", "country": "United States", "referred_by": "Terence Proffer", "created_on": new Date("10/6/2017"), "birthday": new Date("12/9/2002"), "last_activity": new Date("11/2/2017"), "next_activity": new Date("1/2/2018"), "deals_won": 7, "deals_lost": 29, "deals_pending": 8, "deals_total": 44, "ratio": 19, "estimated_sales": 567480, "actual_sales": 1320760, "tags": "cold, financial" }, + { "id": 766595087, "avatar": "assets/images/women/65.jpg", "name": "Kathi Jorn", "email": "kjorn5u@artisteer.com", "company": "Avamba", "position": "Cost Accountant", "work_phone": "+1-561-594-9549", "mobile_phone": "+1-559-251-0283", "fax": "+1-202-160-5139", "street": "8068 Ryan Street", "city": "Delray Beach", "post_code": 33448, "state": "FL", "country": "United States", "referred_by": "Pippy Romer", "created_on": new Date("11/1/2017"), "birthday": new Date("5/23/1971"), "last_activity": new Date("11/11/2017"), "next_activity": new Date("6/11/2018"), "deals_won": 8, "deals_lost": 7, "deals_pending": 29, "deals_total": 44, "ratio": 53, "estimated_sales": 4065365, "actual_sales": 703816, "tags": "subscriber, engineering" }, + { "id": 178617469, "avatar": "assets/images/women/68.jpg", "name": "Audry Zuenelli", "email": "azuenelli5v@mysql.com", "company": "Jabbersphere", "position": "Registered Nurse", "work_phone": "+1-661-619-4491", "mobile_phone": "+1-919-241-5238", "fax": "+1-805-633-4866", "street": "1594 Moose Park", "city": "Bakersfield", "post_code": 93381, "state": "CA", "country": "United States", "referred_by": "Patten Gheorghe", "created_on": new Date("11/19/2017"), "birthday": new Date("3/27/1972"), "last_activity": new Date("12/1/2017"), "next_activity": new Date("9/1/2019"), "deals_won": 28, "deals_lost": 22, "deals_pending": 1, "deals_total": 51, "ratio": 56, "estimated_sales": 125270, "actual_sales": 3451420, "tags": "pro, pharmaceutical" }, + { "id": 214333861, "avatar": "assets/images/men/37.jpg", "name": "Esteban Forder", "email": "eforder5w@newyorker.com", "company": "Yombu", "position": "Financial Advisor", "work_phone": "+1-775-533-4697", "mobile_phone": "+1-719-670-9736", "fax": "+1-402-273-3556", "street": "9657 Meadow Vale Court", "city": "Reno", "post_code": 89510, "state": "NV", "country": "United States", "referred_by": "Mame Branchet", "created_on": new Date("4/8/2018"), "birthday": new Date("1/3/1987"), "last_activity": new Date("4/18/2018"), "next_activity": new Date("10/18/2018"), "deals_won": 22, "deals_lost": 24, "deals_pending": 29, "deals_total": 75, "ratio": 48, "estimated_sales": 4039874, "actual_sales": 3943896, "tags": "hot, construction" }, + { "id": 979569607, "avatar": "assets/images/women/46.jpg", "name": "Mable Fielder", "email": "mfielder5x@simplemachines.org", "company": "Realcube", "position": "Sales Representative", "work_phone": "+1-408-281-2255", "mobile_phone": "+1-253-557-5142", "fax": "+1-757-265-9402", "street": "3 Mitchell Parkway", "city": "San Jose", "post_code": 95118, "state": "CA", "country": "United States", "referred_by": "Wayland Bettlestone", "created_on": new Date("10/20/2017"), "birthday": new Date("4/17/1972"), "last_activity": new Date("11/17/2017"), "next_activity": new Date("3/17/2018"), "deals_won": 29, "deals_lost": 15, "deals_pending": 20, "deals_total": 64, "ratio": 66, "estimated_sales": 3615200, "actual_sales": 2791395, "tags": "warm, medical" }, + { "id": 536972234, "avatar": "assets/images/women/16.jpg", "name": "Amargo Kimblin", "email": "akimblin5y@virginia.edu", "company": "Skipfire", "position": "Executive Secretary", "work_phone": "+1-318-988-8720", "mobile_phone": "+1-702-274-3160", "fax": "+1-614-255-3660", "street": "6128 Sundown Court", "city": "Shreveport", "post_code": 71166, "state": "LA", "country": "United States", "referred_by": "Tonie Merkel", "created_on": new Date("7/11/2017"), "birthday": new Date("2/13/1982"), "last_activity": new Date("7/21/2017"), "next_activity": new Date("8/21/2017"), "deals_won": 25, "deals_lost": 26, "deals_pending": 8, "deals_total": 59, "ratio": 49, "estimated_sales": 708136, "actual_sales": 4101250, "tags": "demo, construction" }, + { "id": 109262856, "avatar": "assets/images/men/60.jpg", "name": "Marve Lowater", "email": "mlowater5z@miitbeian.gov.cn", "company": "Centimia", "position": "Developer III", "work_phone": "+1-513-587-3695", "mobile_phone": "+1-313-960-4146", "fax": "+1-478-757-6288", "street": "20723 Dexter Alley", "city": "Cincinnati", "post_code": 45213, "state": "OH", "country": "United States", "referred_by": "Estrellita McNeil", "created_on": new Date("3/21/2018"), "birthday": new Date("10/24/1989"), "last_activity": new Date("3/30/2018"), "next_activity": new Date("12/30/2019"), "deals_won": 0, "deals_lost": 3, "deals_pending": 4, "deals_total": 7, "ratio": 0, "estimated_sales": 571076, "actual_sales": 0, "tags": "warm, medical" }, + { "id": 597266756, "avatar": "assets/images/men/50.jpg", "name": "Reinald Crusham", "email": "rcrusham60@deliciousdays.com", "company": "Zoonoodle", "position": "Actuary", "work_phone": "+1-702-302-7469", "mobile_phone": "+1-734-799-1980", "fax": "+1-915-182-9180", "street": "1 Mendota Street", "city": "North Las Vegas", "post_code": 89036, "state": "NV", "country": "United States", "referred_by": "Corby Dudbridge", "created_on": new Date("2/13/2018"), "birthday": new Date("8/4/1970"), "last_activity": new Date("3/15/2018"), "next_activity": new Date("4/15/2018"), "deals_won": 11, "deals_lost": 6, "deals_pending": 30, "deals_total": 47, "ratio": 65, "estimated_sales": 2988330, "actual_sales": 797533, "tags": "pro, pharmaceutical" }, + { "id": 858447413, "avatar": "assets/images/women/57.jpg", "name": "Ninnetta Wythill", "email": "nwythill61@go.com", "company": "Vinte", "position": "Physical Therapy Assistant", "work_phone": "+1-410-425-6871", "mobile_phone": "+1-920-615-7040", "fax": "+1-772-624-4706", "street": "86494 Dapin Center", "city": "Baltimore", "post_code": 21275, "state": "MD", "country": "United States", "referred_by": "Karoly Habden", "created_on": new Date("1/17/2017"), "birthday": new Date("1/8/1997"), "last_activity": new Date("1/26/2017"), "next_activity": new Date("9/26/2018"), "deals_won": 28, "deals_lost": 28, "deals_pending": 10, "deals_total": 66, "ratio": 5, "estimated_sales": 1166430, "actual_sales": 3518032, "tags": "demo, engineering" }, + { "id": 33137395, "avatar": "assets/images/men/33.jpg", "name": "Leigh Blenkinsopp", "email": "lblenkinsopp62@blogtalkradio.com", "company": "Brainlounge", "position": "Software Test Engineer IV", "work_phone": "+1-801-354-4412", "mobile_phone": "+1-757-193-0277", "fax": "+1-904-172-1653", "street": "0 Kropf Crossing", "city": "Ogden", "post_code": 84403, "state": "UT", "country": "United States", "referred_by": "Viviyan Symes", "created_on": new Date("9/12/2017"), "birthday": new Date("10/7/1974"), "last_activity": new Date("9/13/2017"), "next_activity": new Date("3/13/2019"), "deals_won": 17, "deals_lost": 7, "deals_pending": 29, "deals_total": 53, "ratio": 71, "estimated_sales": 4187716, "actual_sales": 1870272, "tags": "cool, pharmaceutical" }, + { "id": 392362001, "avatar": "assets/images/men/24.jpg", "name": "Engelbert Alexsandrev", "email": "ealexsandrev63@xrea.com", "company": "Mycat", "position": "Geologist I", "work_phone": "+1-530-832-4384", "mobile_phone": "+1-813-947-0718", "fax": "+1-201-882-2436", "street": "62459 Del Sol Alley", "city": "South Lake Tahoe", "post_code": 96154, "state": "CA", "country": "United States", "referred_by": "Ginevra De Vaux", "created_on": new Date("12/1/2017"), "birthday": new Date("10/28/1971"), "last_activity": new Date("12/11/2017"), "next_activity": new Date("8/11/2019"), "deals_won": 0, "deals_lost": 7, "deals_pending": 20, "deals_total": 27, "ratio": 0, "estimated_sales": 1558300, "actual_sales": 0, "tags": "hot, construction" }, + { "id": 25850773, "avatar": "assets/images/women/43.jpg", "name": "Germaine Adamiak", "email": "gadamiak64@friendfeed.com", "company": "Zooveo", "position": "Senior Developer", "work_phone": "+1-205-374-0017", "mobile_phone": "+1-406-674-7046", "fax": "+1-330-939-5098", "street": "084 Logan Parkway", "city": "Birmingham", "post_code": 35231, "state": "AL", "country": "United States", "referred_by": "Stefano Caunter", "created_on": new Date("8/14/2017"), "birthday": new Date("5/8/1983"), "last_activity": new Date("9/12/2017"), "next_activity": new Date("12/12/2018"), "deals_won": 28, "deals_lost": 29, "deals_pending": 16, "deals_total": 73, "ratio": 49, "estimated_sales": 1525488, "actual_sales": 1824536, "tags": "hot, construction" }, + { "id": 61005077, "avatar": "assets/images/men/16.jpg", "name": "Nikolai Antley", "email": "nantley65@ask.com", "company": "Zazio", "position": "Environmental Specialist", "work_phone": "+1-414-687-9574", "mobile_phone": "+1-412-555-6046", "fax": "+1-601-169-4969", "street": "59163 Oakridge Parkway", "city": "Milwaukee", "post_code": 53225, "state": "WI", "country": "United States", "referred_by": "Aeriell McEllen", "created_on": new Date("1/13/2017"), "birthday": new Date("3/24/1971"), "last_activity": new Date("2/8/2017"), "next_activity": new Date("5/8/2017"), "deals_won": 9, "deals_lost": 30, "deals_pending": 10, "deals_total": 49, "ratio": 23, "estimated_sales": 1598350, "actual_sales": 741942, "tags": "cold, retail" }, + { "id": 971590649, "avatar": "assets/images/women/53.jpg", "name": "Coreen Aldren", "email": "caldren66@prlog.org", "company": "Thoughtsphere", "position": "Project Manager", "work_phone": "+1-859-738-0273", "mobile_phone": "+1-303-192-9314", "fax": "+1-210-873-7160", "street": "57405 Vidon Pass", "city": "Lexington", "post_code": 40524, "state": "KY", "country": "United States", "referred_by": "King Ingliby", "created_on": new Date("2/20/2017"), "birthday": new Date("9/11/1996"), "last_activity": new Date("3/5/2017"), "next_activity": new Date("7/5/2018"), "deals_won": 20, "deals_lost": 29, "deals_pending": 4, "deals_total": 53, "ratio": 41, "estimated_sales": 283012, "actual_sales": 2322660, "tags": "demo, financial" }, + { "id": 871351468, "avatar": "assets/images/men/98.jpg", "name": "Rolfe Rubel", "email": "rrubel67@slashdot.org", "company": "Thoughtsphere", "position": "VP Quality Control", "work_phone": "+1-240-886-7599", "mobile_phone": "+1-602-103-4191", "fax": "+1-229-508-8964", "street": "46 Basil Point", "city": "Silver Spring", "post_code": 20904, "state": "MD", "country": "United States", "referred_by": "Lonnie Sherrington", "created_on": new Date("2/16/2017"), "birthday": new Date("1/6/1988"), "last_activity": new Date("3/6/2017"), "next_activity": new Date("7/6/2018"), "deals_won": 27, "deals_lost": 3, "deals_pending": 4, "deals_total": 34, "ratio": 9, "estimated_sales": 329872, "actual_sales": 1962306, "tags": "cold, construction" }, + { "id": 490817920, "avatar": "assets/images/men/1.jpg", "name": "Lionello Putnam", "email": "lputnam68@usa.gov", "company": "Skyble", "position": "Assistant Professor", "work_phone": "+1-785-253-7045", "mobile_phone": "+1-405-778-0722", "fax": "+1-513-481-2584", "street": "8697 Dwight Road", "city": "Topeka", "post_code": 66617, "state": "KS", "country": "United States", "referred_by": "Job Ghelardoni", "created_on": new Date("2/12/2018"), "birthday": new Date("10/19/1994"), "last_activity": new Date("3/8/2018"), "next_activity": new Date("7/8/2019"), "deals_won": 0, "deals_lost": 28, "deals_pending": 17, "deals_total": 45, "ratio": 0, "estimated_sales": 1439628, "actual_sales": 0, "tags": "medical" }, + { "id": 997405052, "avatar": "assets/images/women/98.jpg", "name": "Twyla Waugh", "email": "twaugh69@quantcast.com", "company": "Aibox", "position": "Software Developer", "work_phone": "+1-404-816-1166", "mobile_phone": "+1-405-899-7118", "fax": "+1-601-167-2889", "street": "6 John Wall Terrace", "city": "Atlanta", "post_code": 31196, "state": "GA", "country": "United States", "referred_by": "Elsbeth MacAlaster", "created_on": new Date("8/11/2017"), "birthday": new Date("8/21/1984"), "last_activity": new Date("8/14/2017"), "next_activity": new Date("7/14/2019"), "deals_won": 30, "deals_lost": 15, "deals_pending": 22, "deals_total": 67, "ratio": 67, "estimated_sales": 2004244, "actual_sales": 5332200, "tags": "subscriber, pharmaceutical" }, + { "id": 399911766, "avatar": "assets/images/men/13.jpg", "name": "Daryl Tennewell", "email": "dtennewell6a@deliciousdays.com", "company": "Chatterpoint", "position": "Marketing Assistant", "work_phone": "+1-706-379-7137", "mobile_phone": "+1-205-417-6212", "fax": "+1-903-678-9586", "street": "5 Memorial Junction", "city": "Athens", "post_code": 30605, "state": "GA", "country": "United States", "referred_by": "Aubrette Roblin", "created_on": new Date("3/19/2017"), "birthday": new Date("6/7/1995"), "last_activity": new Date("3/29/2017"), "next_activity": new Date("11/29/2018"), "deals_won": 14, "deals_lost": 17, "deals_pending": 12, "deals_total": 43, "ratio": 45, "estimated_sales": 2382600, "actual_sales": 1415974, "tags": "demo, retail" }, + { "id": 444539770, "avatar": "assets/images/men/98.jpg", "name": "Gaultiero Treuge", "email": "gtreuge6b@samsung.com", "company": "Tagopia", "position": "Compensation Analyst", "work_phone": "+1-479-496-2964", "mobile_phone": "+1-904-894-6654", "fax": "+1-702-794-6580", "street": "2645 Little Fleur Parkway", "city": "Fort Smith", "post_code": 72916, "state": "AR", "country": "United States", "referred_by": "Isaac Bront", "created_on": new Date("4/8/2017"), "birthday": new Date("1/4/1977"), "last_activity": new Date("5/2/2017"), "next_activity": new Date("1/2/2019"), "deals_won": 6, "deals_lost": 19, "deals_pending": 29, "deals_total": 54, "ratio": 24, "estimated_sales": 5233572, "actual_sales": 552954, "tags": "pro, medical" }, + { "id": 916295802, "avatar": "assets/images/women/52.jpg", "name": "Tessa Straneo", "email": "tstraneo6c@nhs.uk", "company": "Pixoboo", "position": "Software Consultant", "work_phone": "+1-614-956-9210", "mobile_phone": "+1-203-837-7208", "fax": "+1-267-335-3875", "street": "64 Jenna Plaza", "city": "Columbus", "post_code": 43204, "state": "OH", "country": "United States", "referred_by": "Vivia Eastope", "created_on": new Date("7/29/2017"), "birthday": new Date("2/5/1981"), "last_activity": new Date("8/20/2017"), "next_activity": new Date("6/20/2018"), "deals_won": 15, "deals_lost": 21, "deals_pending": 14, "deals_total": 50, "ratio": 42, "estimated_sales": 2170980, "actual_sales": 1075110, "tags": "subscriber, retail" }, + { "id": 281553143, "avatar": "assets/images/men/7.jpg", "name": "Roderic Gwilt", "email": "rgwilt6d@ox.ac.uk", "company": "Minyx", "position": "Developer IV", "work_phone": "+1-234-910-0901", "mobile_phone": "+1-414-344-8856", "fax": "+1-330-281-7025", "street": "99959 Truax Center", "city": "Akron", "post_code": 44393, "state": "OH", "country": "United States", "referred_by": "Silvio Darke", "created_on": new Date("4/6/2018"), "birthday": new Date("5/29/1990"), "last_activity": new Date("4/21/2018"), "next_activity": new Date("7/21/2018"), "deals_won": 6, "deals_lost": 9, "deals_pending": 24, "deals_total": 39, "ratio": 4, "estimated_sales": 4575528, "actual_sales": 365964, "tags": "cold, construction" }, + { "id": 877908385, "avatar": "assets/images/women/16.jpg", "name": "Jess Cloney", "email": "jcloney6e@jimdo.com", "company": "Eabox", "position": "Research Nurse", "work_phone": "+1-859-322-8071", "mobile_phone": "+1-602-769-7013", "fax": "+1-330-696-9838", "street": "07 Bluestem Point", "city": "Lexington", "post_code": 40546, "state": "KY", "country": "United States", "referred_by": "Blanche Pagelsen", "created_on": new Date("10/25/2017"), "birthday": new Date("5/9/1982"), "last_activity": new Date("11/7/2017"), "next_activity": new Date("3/7/2018"), "deals_won": 5, "deals_lost": 16, "deals_pending": 19, "deals_total": 40, "ratio": 24, "estimated_sales": 2334910, "actual_sales": 450455, "tags": "cold, financial" }, + { "id": 976960961, "avatar": "assets/images/men/4.jpg", "name": "Isidore McGilmartin", "email": "imcgilmartin6f@gravatar.com", "company": "Dynazzy", "position": "Occupational Therapist", "work_phone": "+1-757-787-1484", "mobile_phone": "+1-415-120-8829", "fax": "+1-212-487-2470", "street": "173 High Crossing Pass", "city": "Chesapeake", "post_code": 23324, "state": "VA", "country": "United States", "referred_by": "Marnia Ibbett", "created_on": new Date("1/9/2018"), "birthday": new Date("9/29/1984"), "last_activity": new Date("1/23/2018"), "next_activity": new Date("8/23/2018"), "deals_won": 11, "deals_lost": 8, "deals_pending": 5, "deals_total": 24, "ratio": 58, "estimated_sales": 937210, "actual_sales": 1271930, "tags": "warm, engineering" }, + { "id": 140736990, "avatar": "assets/images/women/67.jpg", "name": "Robin Duddy", "email": "rduddy6g@bigcartel.com", "company": "Skyndu", "position": "Senior Sales Associate", "work_phone": "+1-805-558-9961", "mobile_phone": "+1-502-194-5772", "fax": "+1-212-973-9953", "street": "39472 School Court", "city": "Oxnard", "post_code": 93034, "state": "CA", "country": "United States", "referred_by": "Axel Kierans", "created_on": new Date("3/2/2017"), "birthday": new Date("4/11/1976"), "last_activity": new Date("3/5/2017"), "next_activity": new Date("10/5/2018"), "deals_won": 25, "deals_lost": 12, "deals_pending": 3, "deals_total": 40, "ratio": 68, "estimated_sales": 175857, "actual_sales": 2268825, "tags": "subscriber, engineering" }, + { "id": 42463986, "avatar": "assets/images/men/46.jpg", "name": "Royall Somerbell", "email": "rsomerbell6h@craigslist.org", "company": "Trunyx", "position": "Marketing Assistant", "work_phone": "+1-254-404-5695", "mobile_phone": "+1-813-930-4375", "fax": "+1-405-390-6865", "street": "260 Utah Parkway", "city": "Temple", "post_code": 76505, "state": "TX", "country": "United States", "referred_by": "Benita Clinton", "created_on": new Date("1/24/2018"), "birthday": new Date("9/13/1974"), "last_activity": new Date("2/19/2018"), "next_activity": new Date("1/19/2020"), "deals_won": 12, "deals_lost": 21, "deals_pending": 22, "deals_total": 55, "ratio": 36, "estimated_sales": 2308504, "actual_sales": 1564944, "tags": "cool, medical" }, + { "id": 149066006, "avatar": "assets/images/women/68.jpg", "name": "Nola Worrill", "email": "nworrill6i@ucoz.com", "company": "Oozz", "position": "Chief Design Engineer", "work_phone": "+1-305-256-4497", "mobile_phone": "+1-213-715-7975", "fax": "+1-850-328-9578", "street": "06 Wayridge Parkway", "city": "Miami", "post_code": 33134, "state": "FL", "country": "United States", "referred_by": "Merissa Scotchforth", "created_on": new Date("10/11/2017"), "birthday": new Date("12/16/1973"), "last_activity": new Date("10/21/2017"), "next_activity": new Date("8/21/2018"), "deals_won": 29, "deals_lost": 5, "deals_pending": 20, "deals_total": 54, "ratio": 85, "estimated_sales": 2979320, "actual_sales": 3780063, "tags": "pro, construction" }, + { "id": 106443944, "avatar": "assets/images/women/3.jpg", "name": "Atlanta Teml", "email": "ateml6j@csmonitor.com", "company": "Divanoodle", "position": "Social Worker", "work_phone": "+1-810-754-7672", "mobile_phone": "+1-716-112-8743", "fax": "+1-716-110-6093", "street": "9 Schurz Circle", "city": "Flint", "post_code": 48555, "state": "MI", "country": "United States", "referred_by": "Raffaello Carlyle", "created_on": new Date("10/23/2017"), "birthday": new Date("7/2/1995"), "last_activity": new Date("11/11/2017"), "next_activity": new Date("6/11/2019"), "deals_won": 13, "deals_lost": 15, "deals_pending": 22, "deals_total": 50, "ratio": 46, "estimated_sales": 3289286, "actual_sales": 949728, "tags": "subscriber, financial" }, + { "id": 70003653, "avatar": "assets/images/men/8.jpg", "name": "Clyve Popplestone", "email": "cpopplestone6k@networkadvertising.org", "company": "Divavu", "position": "Research Nurse", "work_phone": "+1-402-302-5243", "mobile_phone": "+1-318-339-2606", "fax": "+1-412-155-2173", "street": "29036 Dexter Terrace", "city": "Omaha", "post_code": 68197, "state": "NE", "country": "United States", "referred_by": "Dacie Semper", "created_on": new Date("4/5/2017"), "birthday": new Date("3/20/1972"), "last_activity": new Date("5/4/2017"), "next_activity": new Date("1/4/2019"), "deals_won": 20, "deals_lost": 5, "deals_pending": 23, "deals_total": 48, "ratio": 8, "estimated_sales": 1252350, "actual_sales": 3071040, "tags": "hot, medical" }, + { "id": 396589856, "avatar": "assets/images/women/72.jpg", "name": "Maryjane Seabright", "email": "mseabright6l@hao123.com", "company": "Kaymbo", "position": "Dental Hygienist", "work_phone": "+1-717-604-9169", "mobile_phone": "+1-617-133-6615", "fax": "+1-704-418-5509", "street": "2620 Blackbird Avenue", "city": "Lancaster", "post_code": 17605, "state": "PA", "country": "United States", "referred_by": "Renado Alsobrook", "created_on": new Date("8/10/2017"), "birthday": new Date("3/13/1987"), "last_activity": new Date("8/20/2017"), "next_activity": new Date("9/20/2018"), "deals_won": 8, "deals_lost": 25, "deals_pending": 7, "deals_total": 40, "ratio": 24, "estimated_sales": 1285620, "actual_sales": 1251760, "tags": "subscriber, pharmaceutical" }, + { "id": 348051287, "avatar": "assets/images/men/67.jpg", "name": "Malchy Stedell", "email": "mstedell6m@weibo.com", "company": "Gabtune", "position": "Professor", "work_phone": "+1-419-416-7349", "mobile_phone": "+1-812-412-9150", "fax": "+1-704-439-6773", "street": "443 Weeping Birch Point", "city": "Toledo", "post_code": 43699, "state": "OH", "country": "United States", "referred_by": "Thia Rasmus", "created_on": new Date("2/24/2017"), "birthday": new Date("8/17/1982"), "last_activity": new Date("3/9/2017"), "next_activity": new Date("9/9/2018"), "deals_won": 3, "deals_lost": 12, "deals_pending": 22, "deals_total": 37, "ratio": 2, "estimated_sales": 3298790, "actual_sales": 268098, "tags": "retail" }, + { "id": 883333369, "avatar": "assets/images/men/46.jpg", "name": "Hyman Capstaff", "email": "hcapstaff6n@nyu.edu", "company": "Blogpad", "position": "Biostatistician I", "work_phone": "+1-717-170-6719", "mobile_phone": "+1-770-492-8256", "fax": "+1-212-162-6488", "street": "7 Nelson Circle", "city": "Harrisburg", "post_code": 17126, "state": "PA", "country": "United States", "referred_by": "Haskell Kleanthous", "created_on": new Date("1/13/2017"), "birthday": new Date("10/8/1978"), "last_activity": new Date("2/5/2017"), "next_activity": new Date("7/5/2017"), "deals_won": 19, "deals_lost": 13, "deals_pending": 30, "deals_total": 62, "ratio": 59, "estimated_sales": 3578670, "actual_sales": 3710377, "tags": "demo, medical" }, + { "id": 602801761, "avatar": "assets/images/women/67.jpg", "name": "Avivah Hazeldean", "email": "ahazeldean6o@xing.com", "company": "Voonix", "position": "Software Developer", "work_phone": "+1-917-263-2022", "mobile_phone": "+1-901-466-3389", "fax": "+1-304-740-1160", "street": "8 Jenifer Avenue", "city": "Brooklyn", "post_code": 11236, "state": "NY", "country": "United States", "referred_by": "Cayla Zima", "created_on": new Date("4/24/2017"), "birthday": new Date("1/17/1986"), "last_activity": new Date("5/5/2017"), "next_activity": new Date("2/5/2018"), "deals_won": 7, "deals_lost": 5, "deals_pending": 9, "deals_total": 21, "ratio": 58, "estimated_sales": 1208142, "actual_sales": 437234, "tags": "hot, pharmaceutical" }, + { "id": 759568371, "avatar": "assets/images/women/43.jpg", "name": "Margarete Acedo", "email": "macedo6p@japanpost.jp", "company": "InnoZ", "position": "Legal Assistant", "work_phone": "+1-239-478-0547", "mobile_phone": "+1-713-456-1591", "fax": "+1-501-319-5598", "street": "37 Oxford Street", "city": "Cape Coral", "post_code": 33915, "state": "FL", "country": "United States", "referred_by": "Beau Pero", "created_on": new Date("10/15/2017"), "birthday": new Date("1/24/2003"), "last_activity": new Date("11/14/2017"), "next_activity": new Date("3/14/2019"), "deals_won": 4, "deals_lost": 26, "deals_pending": 18, "deals_total": 48, "ratio": 13, "estimated_sales": 3440826, "actual_sales": 361452, "tags": "pro, financial" }, + { "id": 821161097, "avatar": "assets/images/men/93.jpg", "name": "Tye Crissil", "email": "tcrissil6q@salon.com", "company": "Fadeo", "position": "Office Assistant III", "work_phone": "+1-260-100-3297", "mobile_phone": "+1-775-136-5110", "fax": "+1-404-945-6084", "street": "26819 Sherman Avenue", "city": "Fort Wayne", "post_code": 46805, "state": "IN", "country": "United States", "referred_by": "Delores Leamon", "created_on": new Date("4/13/2018"), "birthday": new Date("3/15/1985"), "last_activity": new Date("4/27/2018"), "next_activity": new Date("11/27/2018"), "deals_won": 9, "deals_lost": 17, "deals_pending": 8, "deals_total": 34, "ratio": 35, "estimated_sales": 1004816, "actual_sales": 821088, "tags": "demo, financial" }, + { "id": 808451402, "avatar": "assets/images/women/78.jpg", "name": "Filide Weavers", "email": "fweavers6r@kickstarter.com", "company": "Riffpedia", "position": "Product Engineer", "work_phone": "+1-808-104-3275", "mobile_phone": "+1-862-871-3923", "fax": "+1-309-692-6728", "street": "40243 South Pass", "city": "Honolulu", "post_code": 96840, "state": "HI", "country": "United States", "referred_by": "Catherina Tabb", "created_on": new Date("12/6/2017"), "birthday": new Date("2/7/1974"), "last_activity": new Date("12/19/2017"), "next_activity": new Date("12/19/2019"), "deals_won": 28, "deals_lost": 9, "deals_pending": 6, "deals_total": 43, "ratio": 76, "estimated_sales": 361296, "actual_sales": 2519132, "tags": "pro, medical" }, + { "id": 927715122, "avatar": "assets/images/women/77.jpg", "name": "Leonora Kryzhov", "email": "lkryzhov6s@uiuc.edu", "company": "Linkbuzz", "position": "Structural Engineer", "work_phone": "+1-805-505-4499", "mobile_phone": "+1-520-315-1959", "fax": "+1-712-635-9920", "street": "08 Brickson Park Trail", "city": "Santa Barbara", "post_code": 93111, "state": "CA", "country": "United States", "referred_by": "Dag Grisley", "created_on": new Date("1/15/2017"), "birthday": new Date("12/26/1986"), "last_activity": new Date("1/30/2017"), "next_activity": new Date("6/30/2018"), "deals_won": 26, "deals_lost": 8, "deals_pending": 0, "deals_total": 34, "ratio": 76, "estimated_sales": 0, "actual_sales": 3736642, "tags": "hot, medical" }, + { "id": 778307520, "avatar": "assets/images/men/41.jpg", "name": "Fairfax Yakovlev", "email": "fyakovlev6t@jiathis.com", "company": "Skibox", "position": "Budget/Accounting Analyst IV", "work_phone": "+1-904-832-2104", "mobile_phone": "+1-512-431-6083", "fax": "+1-941-544-6994", "street": "46807 Vera Point", "city": "Jacksonville", "post_code": 32277, "state": "FL", "country": "United States", "referred_by": "Aubert McRobbie", "created_on": new Date("3/30/2017"), "birthday": new Date("1/27/1981"), "last_activity": new Date("4/11/2017"), "next_activity": new Date("10/11/2018"), "deals_won": 4, "deals_lost": 17, "deals_pending": 1, "deals_total": 22, "ratio": 19, "estimated_sales": 110038, "actual_sales": 781316, "tags": "pro, construction" }, + { "id": 549963182, "avatar": "assets/images/men/50.jpg", "name": "Ian Galbreth", "email": "igalbreth6u@mozilla.com", "company": "Brainlounge", "position": "Mechanical Systems Engineer", "work_phone": "+1-205-332-8565", "mobile_phone": "+1-757-285-6888", "fax": "+1-917-960-8576", "street": "88 Blackbird Center", "city": "Birmingham", "post_code": 35279, "state": "AL", "country": "United States", "referred_by": "Catrina Almon", "created_on": new Date("4/11/2017"), "birthday": new Date("9/24/1979"), "last_activity": new Date("4/23/2017"), "next_activity": new Date("10/23/2017"), "deals_won": 27, "deals_lost": 5, "deals_pending": 0, "deals_total": 32, "ratio": 84, "estimated_sales": 0, "actual_sales": 3808755, "tags": "pharmaceutical" }, + { "id": 123197709, "avatar": "assets/images/women/81.jpg", "name": "Marlee Roote", "email": "mroote6v@vk.com", "company": "Skalith", "position": "Tax Accountant", "work_phone": "+1-518-128-4661", "mobile_phone": "+1-801-240-6202", "fax": "+1-713-378-9187", "street": "7 Atwood Alley", "city": "Albany", "post_code": 12210, "state": "NY", "country": "United States", "referred_by": "Eunice Gerant", "created_on": new Date("12/17/2017"), "birthday": new Date("8/10/1981"), "last_activity": new Date("1/1/2018"), "next_activity": new Date("6/1/2019"), "deals_won": 23, "deals_lost": 25, "deals_pending": 2, "deals_total": 50, "ratio": 48, "estimated_sales": 120282, "actual_sales": 3000442, "tags": "financial" }, + { "id": 793669485, "avatar": "assets/images/women/67.jpg", "name": "Marley Atchly", "email": "matchly6w@yellowpages.com", "company": "Vitz", "position": "Programmer I", "work_phone": "+1-915-318-0079", "mobile_phone": "+1-402-944-7409", "fax": "+1-775-844-4773", "street": "7 Golf Course Lane", "city": "El Paso", "post_code": 79916, "state": "TX", "country": "United States", "referred_by": "Allene Instrell", "created_on": new Date("12/29/2017"), "birthday": new Date("4/3/1981"), "last_activity": new Date("1/15/2018"), "next_activity": new Date("4/15/2019"), "deals_won": 2, "deals_lost": 20, "deals_pending": 25, "deals_total": 47, "ratio": 9, "estimated_sales": 3020200, "actual_sales": 202444, "tags": "cool, engineering" }, + { "id": 413037345, "avatar": "assets/images/men/52.jpg", "name": "Francklin Neylan", "email": "fneylan6x@upenn.edu", "company": "Bubbletube", "position": "Senior Developer", "work_phone": "+1-212-607-5121", "mobile_phone": "+1-337-392-8708", "fax": "+1-239-101-8941", "street": "644 Melrose Court", "city": "New York City", "post_code": 10131, "state": "NY", "country": "United States", "referred_by": "Cletis Gres", "created_on": new Date("12/9/2017"), "birthday": new Date("4/29/1999"), "last_activity": new Date("12/26/2017"), "next_activity": new Date("8/26/2018"), "deals_won": 25, "deals_lost": 23, "deals_pending": 19, "deals_total": 67, "ratio": 52, "estimated_sales": 3746705, "actual_sales": 1820900, "tags": "warm, retail" }, + { "id": 93774824, "avatar": "assets/images/men/92.jpg", "name": "Luke Scrafton", "email": "lscrafton6y@japanpost.jp", "company": "Twiyo", "position": "Information Systems Manager", "work_phone": "+1-318-198-5398", "mobile_phone": "+1-309-416-6243", "fax": "+1-901-269-7002", "street": "146 Cordelia Trail", "city": "Boston", "post_code": 2104, "state": "MA", "country": "United States", "referred_by": "Gamaliel Calloway", "created_on": new Date("9/20/2017"), "birthday": new Date("3/27/1981"), "last_activity": new Date("10/3/2017"), "next_activity": new Date("6/3/2018"), "deals_won": 26, "deals_lost": 28, "deals_pending": 26, "deals_total": 80, "ratio": 48, "estimated_sales": 3548402, "actual_sales": 3531580, "tags": "cool, retail" }, + { "id": 661545359, "avatar": "assets/images/men/8.jpg", "name": "Rawley Keirl", "email": "rkeirl6z@berkeley.edu", "company": "Jabbersphere", "position": "Senior Developer", "work_phone": "+1-512-428-7838", "mobile_phone": "+1-409-317-7609", "fax": "+1-337-490-6342", "street": "407 Sheridan Court", "city": "Austin", "post_code": 78754, "state": "TX", "country": "United States", "referred_by": "Sherlocke Reidie", "created_on": new Date("4/17/2018"), "birthday": new Date("10/8/1981"), "last_activity": new Date("4/25/2018"), "next_activity": new Date("11/25/2018"), "deals_won": 7, "deals_lost": 3, "deals_pending": 28, "deals_total": 38, "ratio": 7, "estimated_sales": 1905484, "actual_sales": 1330700, "tags": "subscriber, retail" }, + { "id": 700279733, "avatar": "assets/images/men/75.jpg", "name": "Piotr Gurling", "email": "pgurling70@xing.com", "company": "Divavu", "position": "Business Systems Development Analyst", "work_phone": "+1-713-123-9634", "mobile_phone": "+1-505-349-4547", "fax": "+1-513-579-5557", "street": "26480 Saint Paul Way", "city": "Houston", "post_code": 77218, "state": "TX", "country": "United States", "referred_by": "Rochette Dzeniskevich", "created_on": new Date("1/30/2017"), "birthday": new Date("1/31/1979"), "last_activity": new Date("1/31/2017"), "next_activity": new Date("5/31/2017"), "deals_won": 14, "deals_lost": 9, "deals_pending": 27, "deals_total": 50, "ratio": 61, "estimated_sales": 4735287, "actual_sales": 1160698, "tags": "warm, pharmaceutical" }, + { "id": 13312601, "avatar": "assets/images/women/77.jpg", "name": "Emili Raddon", "email": "eraddon71@sciencedaily.com", "company": "Rhybox", "position": "Web Developer II", "work_phone": "+1-303-891-0835", "mobile_phone": "+1-410-972-0765", "fax": "+1-919-958-9421", "street": "1028 Havey Lane", "city": "Englewood", "post_code": 80150, "state": "CO", "country": "United States", "referred_by": "Malory Dufton", "created_on": new Date("2/1/2017"), "birthday": new Date("3/29/2001"), "last_activity": new Date("2/21/2017"), "next_activity": new Date("11/21/2017"), "deals_won": 7, "deals_lost": 12, "deals_pending": 17, "deals_total": 36, "ratio": 37, "estimated_sales": 1015886, "actual_sales": 1068690, "tags": "warm, medical" }, + { "id": 64619946, "avatar": "assets/images/women/86.jpg", "name": "Alli O' Neligan", "email": "ao72@ow.ly", "company": "Mydeo", "position": "Operator", "work_phone": "+1-712-744-5490", "mobile_phone": "+1-314-250-1679", "fax": "+1-202-652-7533", "street": "83433 Del Sol Street", "city": "Sioux City", "post_code": 51110, "state": "IA", "country": "United States", "referred_by": "Alexine Arnett", "created_on": new Date("4/16/2017"), "birthday": new Date("12/12/1985"), "last_activity": new Date("4/29/2017"), "next_activity": new Date("8/29/2018"), "deals_won": 9, "deals_lost": 23, "deals_pending": 2, "deals_total": 34, "ratio": 28, "estimated_sales": 190244, "actual_sales": 1596924, "tags": "subscriber, construction" }, + { "id": 688165314, "avatar": "assets/images/men/63.jpg", "name": "Alva Snarie", "email": "asnarie73@telegraph.co.uk", "company": "Pixoboo", "position": "Account Executive", "work_phone": "+1-434-763-7891", "mobile_phone": "+1-323-182-2028", "fax": "+1-651-677-8056", "street": "5 Ohio Street", "city": "Lynchburg", "post_code": 24515, "state": "VA", "country": "United States", "referred_by": "Deane Adriani", "created_on": new Date("5/18/2017"), "birthday": new Date("6/5/1974"), "last_activity": new Date("5/30/2017"), "next_activity": new Date("5/30/2019"), "deals_won": 4, "deals_lost": 16, "deals_pending": 19, "deals_total": 39, "ratio": 2, "estimated_sales": 2467511, "actual_sales": 751428, "tags": "demo, pharmaceutical" }, + { "id": 25399066, "avatar": "assets/images/men/58.jpg", "name": "Ariel Imorts", "email": "aimorts74@thetimes.co.uk", "company": "Roodel", "position": "Chemical Engineer", "work_phone": "+1-402-734-5595", "mobile_phone": "+1-970-247-2538", "fax": "+1-267-761-2647", "street": "318 Jenna Alley", "city": "Omaha", "post_code": 68105, "state": "NE", "country": "United States", "referred_by": "Alayne Blemings", "created_on": new Date("2/26/2018"), "birthday": new Date("9/18/1996"), "last_activity": new Date("3/24/2018"), "next_activity": new Date("1/24/2020"), "deals_won": 30, "deals_lost": 17, "deals_pending": 15, "deals_total": 62, "ratio": 64, "estimated_sales": 1873470, "actual_sales": 3191400, "tags": "hot, construction" }, + { "id": 418093498, "avatar": "assets/images/men/88.jpg", "name": "Corbet Cunniff", "email": "ccunniff75@4shared.com", "company": "Nlounge", "position": "Administrative Officer", "work_phone": "+1-707-383-3868", "mobile_phone": "+1-312-782-8203", "fax": "+1-561-370-6594", "street": "08 Del Mar Road", "city": "Petaluma", "post_code": 94975, "state": "CA", "country": "United States", "referred_by": "Chaddie Cowey", "created_on": new Date("12/8/2017"), "birthday": new Date("7/10/1984"), "last_activity": new Date("12/23/2017"), "next_activity": new Date("5/23/2019"), "deals_won": 3, "deals_lost": 25, "deals_pending": 25, "deals_total": 53, "ratio": 11, "estimated_sales": 2165350, "actual_sales": 238221, "tags": "cool, financial" }, + { "id": 366425575, "avatar": "assets/images/women/46.jpg", "name": "Alys Goodding", "email": "agoodding76@ftc.gov", "company": "Gigaclub", "position": "Statistician II", "work_phone": "+1-850-874-5636", "mobile_phone": "+1-858-876-4129", "fax": "+1-412-726-8235", "street": "0365 Arrowood Pass", "city": "Pensacola", "post_code": 32520, "state": "FL", "country": "United States", "referred_by": "Godart Butner", "created_on": new Date("5/6/2017"), "birthday": new Date("11/21/1989"), "last_activity": new Date("5/28/2017"), "next_activity": new Date("2/28/2018"), "deals_won": 2, "deals_lost": 9, "deals_pending": 7, "deals_total": 18, "ratio": 18, "estimated_sales": 1179374, "actual_sales": 332826, "tags": "cold, pharmaceutical" }, + { "id": 731432221, "avatar": "assets/images/men/78.jpg", "name": "Garik Carnow", "email": "gcarnow77@vistaprint.com", "company": "Browseblab", "position": "Product Engineer", "work_phone": "+1-410-798-4043", "mobile_phone": "+1-478-149-2044", "fax": "+1-713-650-4345", "street": "8 Kipling Alley", "city": "Baltimore", "post_code": 21211, "state": "MD", "country": "United States", "referred_by": "Ethelyn Klamp", "created_on": new Date("11/8/2017"), "birthday": new Date("6/13/2002"), "last_activity": new Date("12/5/2017"), "next_activity": new Date("11/5/2019"), "deals_won": 30, "deals_lost": 17, "deals_pending": 10, "deals_total": 57, "ratio": 64, "estimated_sales": 938890, "actual_sales": 4977720, "tags": "demo, retail" }, + { "id": 362776729, "avatar": "assets/images/women/83.jpg", "name": "Blithe Blanchard", "email": "bblanchard78@home.pl", "company": "Skimia", "position": "Financial Advisor", "work_phone": "+1-210-315-3665", "mobile_phone": "+1-972-581-5741", "fax": "+1-212-411-4369", "street": "50256 Dottie Junction", "city": "San Antonio", "post_code": 78215, "state": "TX", "country": "United States", "referred_by": "Vick Galliver", "created_on": new Date("1/3/2018"), "birthday": new Date("11/9/1983"), "last_activity": new Date("1/23/2018"), "next_activity": new Date("10/23/2019"), "deals_won": 28, "deals_lost": 18, "deals_pending": 22, "deals_total": 68, "ratio": 61, "estimated_sales": 3950936, "actual_sales": 4639712, "tags": "cold, pharmaceutical" }, + { "id": 534127963, "avatar": "assets/images/women/60.jpg", "name": "Stefanie Brotherhood", "email": "sbrotherhood79@cloudflare.com", "company": "Gabtune", "position": "Senior Editor", "work_phone": "+1-256-658-3831", "mobile_phone": "+1-585-867-0644", "fax": "+1-847-253-3176", "street": "5913 Granby Pass", "city": "Huntsville", "post_code": 35805, "state": "AL", "country": "United States", "referred_by": "Deana Swainger", "created_on": new Date("7/29/2017"), "birthday": new Date("10/14/2000"), "last_activity": new Date("8/23/2017"), "next_activity": new Date("5/23/2018"), "deals_won": 20, "deals_lost": 19, "deals_pending": 21, "deals_total": 60, "ratio": 51, "estimated_sales": 1653288, "actual_sales": 1799580, "tags": "demo, construction" }, + { "id": 272390458, "avatar": "assets/images/women/18.jpg", "name": "Merry BoHlingolsen", "email": "mbohlingolsen7a@google.ru", "company": "Oloo", "position": "Account Coordinator", "work_phone": "+1-571-953-5685", "mobile_phone": "+1-912-234-7219", "fax": "+1-336-113-8791", "street": "5 Melrose Place", "city": "Ashburn", "post_code": 22093, "state": "VA", "country": "United States", "referred_by": "Orsola Swallow", "created_on": new Date("2/13/2018"), "birthday": new Date("11/20/1992"), "last_activity": new Date("2/14/2018"), "next_activity": new Date("8/14/2019"), "deals_won": 12, "deals_lost": 1, "deals_pending": 22, "deals_total": 35, "ratio": 92, "estimated_sales": 3103298, "actual_sales": 1153776, "tags": "subscriber, engineering" }, + { "id": 615808529, "avatar": "assets/images/men/81.jpg", "name": "Biron Szimoni", "email": "bszimoni7b@elegantthemes.com", "company": "Vidoo", "position": "Staff Scientist", "work_phone": "+1-251-641-7378", "mobile_phone": "+1-540-591-5165", "fax": "+1-810-883-1711", "street": "09 Eastwood Pass", "city": "Mobile", "post_code": 36689, "state": "AL", "country": "United States", "referred_by": "Ruddy Sandcraft", "created_on": new Date("5/4/2017"), "birthday": new Date("1/30/1996"), "last_activity": new Date("5/6/2017"), "next_activity": new Date("3/6/2018"), "deals_won": 25, "deals_lost": 2, "deals_pending": 23, "deals_total": 50, "ratio": 93, "estimated_sales": 3220391, "actual_sales": 3818050, "tags": "warm, financial" }, + { "id": 932103730, "avatar": "assets/images/men/63.jpg", "name": "Benson Sargeant", "email": "bsargeant7c@tamu.edu", "company": "Gevee", "position": "GIS Technical Architect", "work_phone": "+1-915-960-1795", "mobile_phone": "+1-402-244-4448", "fax": "+1-757-641-2598", "street": "70 Redwing Plaza", "city": "El Paso", "post_code": 88519, "state": "TX", "country": "United States", "referred_by": "Vinnie Olivera", "created_on": new Date("5/22/2017"), "birthday": new Date("1/18/1972"), "last_activity": new Date("5/30/2017"), "next_activity": new Date("9/30/2018"), "deals_won": 29, "deals_lost": 12, "deals_pending": 0, "deals_total": 41, "ratio": 71, "estimated_sales": 0, "actual_sales": 1846140, "tags": "pro, medical" }, + { "id": 930102625, "avatar": "assets/images/women/87.jpg", "name": "Elsbeth Weston", "email": "eweston7d@drupal.org", "company": "Twitterbridge", "position": "Programmer II", "work_phone": "+1-609-533-4771", "mobile_phone": "+1-952-612-6730", "fax": "+1-415-644-1026", "street": "737 Buell Junction", "city": "Trenton", "post_code": 8608, "state": "NJ", "country": "United States", "referred_by": "Starlene Bartolomeu", "created_on": new Date("12/1/2017"), "birthday": new Date("10/4/1990"), "last_activity": new Date("12/29/2017"), "next_activity": new Date("2/28/2019"), "deals_won": 9, "deals_lost": 5, "deals_pending": 26, "deals_total": 40, "ratio": 64, "estimated_sales": 3280576, "actual_sales": 705663, "tags": "cool, engineering" }, + { "id": 273661383, "avatar": "assets/images/men/61.jpg", "name": "Patric Ribbon", "email": "pribbon7e@go.com", "company": "Avaveo", "position": "Assistant Manager", "work_phone": "+1-419-821-0559", "mobile_phone": "+1-612-756-5513", "fax": "+1-817-234-0837", "street": "6458 Melby Pass", "city": "Mansfield", "post_code": 44905, "state": "OH", "country": "United States", "referred_by": "Annissa Rey", "created_on": new Date("6/10/2017"), "birthday": new Date("2/26/1988"), "last_activity": new Date("6/18/2017"), "next_activity": new Date("4/18/2018"), "deals_won": 11, "deals_lost": 23, "deals_pending": 11, "deals_total": 45, "ratio": 32, "estimated_sales": 1651859, "actual_sales": 1685409, "tags": "cool, engineering" }, + { "id": 399150893, "avatar": "assets/images/men/48.jpg", "name": "Rutter Gobourn", "email": "rgobourn7f@marketwatch.com", "company": "Mynte", "position": "Professor", "work_phone": "+1-321-585-0052", "mobile_phone": "+1--354-6837", "fax": "+1-314-356-8786", "street": "3 Linden Way", "city": "Melbourne", "post_code": 32941, "state": "FL", "country": "United States", "referred_by": "Cesar Walsh", "created_on": new Date("2/14/2018"), "birthday": new Date("1/30/1984"), "last_activity": new Date("3/7/2018"), "next_activity": new Date("1/7/2019"), "deals_won": 18, "deals_lost": 27, "deals_pending": 6, "deals_total": 51, "ratio": 4, "estimated_sales": 333948, "actual_sales": 952866, "tags": "hot, engineering" }, + { "id": 239955233, "avatar": "assets/images/women/77.jpg", "name": "Xylina Clavering", "email": "xclavering7g@alexa.com", "company": "Tagopia", "position": "Staff Scientist", "work_phone": "+1-561-470-9910", "mobile_phone": "+1-214-724-4050", "fax": "+1-678-713-3345", "street": "6479 Porter Lane", "city": "West Palm Beach", "post_code": 33421, "state": "FL", "country": "United States", "referred_by": "Mira Shirley", "created_on": new Date("1/2/2017"), "birthday": new Date("8/12/1998"), "last_activity": new Date("1/9/2017"), "next_activity": new Date("4/9/2018"), "deals_won": 2, "deals_lost": 12, "deals_pending": 5, "deals_total": 19, "ratio": 14, "estimated_sales": 440445, "actual_sales": 351034, "tags": "subscriber, construction" }, + { "id": 330609096, "avatar": "assets/images/women/24.jpg", "name": "Rachelle Cauthra", "email": "rcauthra7h@vistaprint.com", "company": "Mydo", "position": "VP Marketing", "work_phone": "+1-412-802-5567", "mobile_phone": "+1-505-175-8330", "fax": "+1-954-601-5364", "street": "9628 Vahlen Road", "city": "Pittsburgh", "post_code": 15286, "state": "PA", "country": "United States", "referred_by": "Collen Norcliff", "created_on": new Date("9/20/2017"), "birthday": new Date("11/29/1998"), "last_activity": new Date("10/2/2017"), "next_activity": new Date("5/2/2018"), "deals_won": 21, "deals_lost": 10, "deals_pending": 5, "deals_total": 36, "ratio": 68, "estimated_sales": 833855, "actual_sales": 3849153, "tags": "pharmaceutical" }, + { "id": 49462033, "avatar": "assets/images/men/87.jpg", "name": "Ara Hutley", "email": "ahutley7i@answers.com", "company": "Fadeo", "position": "Developer I", "work_phone": "+1-904-323-4997", "mobile_phone": "+1-940-909-0663", "fax": "+1-404-728-7825", "street": "312 Cardinal Plaza", "city": "Jacksonville", "post_code": 32204, "state": "FL", "country": "United States", "referred_by": "Matt Shortell", "created_on": new Date("12/16/2017"), "birthday": new Date("6/13/1989"), "last_activity": new Date("1/7/2018"), "next_activity": new Date("11/7/2019"), "deals_won": 6, "deals_lost": 20, "deals_pending": 28, "deals_total": 54, "ratio": 23, "estimated_sales": 3094224, "actual_sales": 709998, "tags": "hot, financial" }, + { "id": 1643291, "avatar": "assets/images/women/59.jpg", "name": "Maighdiln Wilding", "email": "mwilding7j@blogs.com", "company": "Eimbee", "position": "Environmental Specialist", "work_phone": "+1-305-179-5840", "mobile_phone": "+1-423-767-0893", "fax": "+1-202-764-2688", "street": "98 Thierer Crossing", "city": "Miami", "post_code": 33283, "state": "FL", "country": "United States", "referred_by": "Kinna Norcutt", "created_on": new Date("1/29/2018"), "birthday": new Date("5/27/1993"), "last_activity": new Date("2/4/2018"), "next_activity": new Date("3/4/2018"), "deals_won": 4, "deals_lost": 6, "deals_pending": 12, "deals_total": 22, "ratio": 4, "estimated_sales": 1488624, "actual_sales": 336148, "tags": "cool, engineering" }, + { "id": 357844237, "avatar": "assets/images/men/28.jpg", "name": "Ignacius Gottschalk", "email": "igottschalk7k@hibu.com", "company": "Gabtype", "position": "Engineer II", "work_phone": "+1-970-678-8983", "mobile_phone": "+1-918-162-8520", "fax": "+1-317-748-1104", "street": "5 Dennis Circle", "city": "Grand Junction", "post_code": 81505, "state": "CO", "country": "United States", "referred_by": "Freddy Perico", "created_on": new Date("1/13/2017"), "birthday": new Date("11/11/1995"), "last_activity": new Date("1/22/2017"), "next_activity": new Date("10/22/2018"), "deals_won": 2, "deals_lost": 1, "deals_pending": 21, "deals_total": 24, "ratio": 67, "estimated_sales": 1857429, "actual_sales": 197636, "tags": "demo, pharmaceutical" }, + { "id": 716685978, "avatar": "assets/images/women/83.jpg", "name": "Jordan Featherstonhalgh", "email": "jfeatherstonhalgh7l@fc2.com", "company": "Skaboo", "position": "Registered Nurse", "work_phone": "+1-402-283-5822", "mobile_phone": "+1-661-811-6243", "fax": "+1-605-747-7350", "street": "2 Menomonie Court", "city": "Lincoln", "post_code": 68531, "state": "NE", "country": "United States", "referred_by": "Lilah Beeton", "created_on": new Date("1/4/2017"), "birthday": new Date("11/30/1983"), "last_activity": new Date("1/27/2017"), "next_activity": new Date("1/27/2018"), "deals_won": 12, "deals_lost": 17, "deals_pending": 25, "deals_total": 54, "ratio": 41, "estimated_sales": 4845700, "actual_sales": 1248024, "tags": "subscriber, medical" }, + { "id": 980081236, "avatar": "assets/images/men/94.jpg", "name": "Bay Hadcock", "email": "bhadcock7m@usatoday.com", "company": "Dabjam", "position": "Senior Financial Analyst", "work_phone": "+1-304-338-1874", "mobile_phone": "+1-765-163-5261", "fax": "+1-413-115-5998", "street": "3731 Vahlen Alley", "city": "Huntington", "post_code": 25726, "state": "WV", "country": "United States", "referred_by": "Allistir Tomasi", "created_on": new Date("11/14/2017"), "birthday": new Date("12/20/1995"), "last_activity": new Date("11/26/2017"), "next_activity": new Date("7/26/2018"), "deals_won": 22, "deals_lost": 27, "deals_pending": 20, "deals_total": 69, "ratio": 45, "estimated_sales": 2488920, "actual_sales": 3567806, "tags": "demo, construction" }, + { "id": 812587719, "avatar": "assets/images/women/91.jpg", "name": "Opal Kluge", "email": "okluge7n@cmu.edu", "company": "Devpoint", "position": "Biostatistician III", "work_phone": "+1-757-588-1432", "mobile_phone": "+1-718-929-4142", "fax": "+1-202-703-3798", "street": "7 Chinook Place", "city": "Newport News", "post_code": 23612, "state": "VA", "country": "United States", "referred_by": "Louella Pandey", "created_on": new Date("2/27/2017"), "birthday": new Date("4/12/1986"), "last_activity": new Date("3/7/2017"), "next_activity": new Date("11/7/2017"), "deals_won": 9, "deals_lost": 24, "deals_pending": 2, "deals_total": 35, "ratio": 27, "estimated_sales": 239896, "actual_sales": 1684188, "tags": "cool, medical" }, + { "id": 612490757, "avatar": "assets/images/men/95.jpg", "name": "Waring Hethron", "email": "whethron7o@google.nl", "company": "Photofeed", "position": "Operator", "work_phone": "+1-818-195-2282", "mobile_phone": "+1-651-602-9984", "fax": "+1-601-478-4770", "street": "1552 Annamark Street", "city": "Northridge", "post_code": 91328, "state": "CA", "country": "United States", "referred_by": "Angelique Barrasse", "created_on": new Date("1/6/2018"), "birthday": new Date("12/22/1972"), "last_activity": new Date("2/3/2018"), "next_activity": new Date("9/3/2019"), "deals_won": 11, "deals_lost": 12, "deals_pending": 25, "deals_total": 48, "ratio": 48, "estimated_sales": 4781550, "actual_sales": 1207162, "tags": "cold, retail" }, + { "id": 248836181, "avatar": "assets/images/men/60.jpg", "name": "Goddard Najera", "email": "gnajera7p@yellowpages.com", "company": "Skyba", "position": "Staff Accountant I", "work_phone": "+1-361-752-2985", "mobile_phone": "+1-302-943-9701", "fax": "+1-402-765-9511", "street": "942 Hovde Road", "city": "Austin", "post_code": 78744, "state": "TX", "country": "United States", "referred_by": "Erminie Tredget", "created_on": new Date("3/13/2017"), "birthday": new Date("1/14/1991"), "last_activity": new Date("3/17/2017"), "next_activity": new Date("4/17/2018"), "deals_won": 18, "deals_lost": 7, "deals_pending": 27, "deals_total": 52, "ratio": 72, "estimated_sales": 4239648, "actual_sales": 2462526, "tags": "hot, engineering" }, + { "id": 867676006, "avatar": "assets/images/women/14.jpg", "name": "Polly Renyard", "email": "prenyard7q@wikipedia.org", "company": "Gigazoom", "position": "Chemical Engineer", "work_phone": "+1-757-997-9743", "mobile_phone": "+1-727-475-4543", "fax": "+1-831-772-3556", "street": "19 New Castle Point", "city": "Norfolk", "post_code": 23520, "state": "VA", "country": "United States", "referred_by": "My Javes", "created_on": new Date("12/11/2017"), "birthday": new Date("10/28/1988"), "last_activity": new Date("12/26/2017"), "next_activity": new Date("12/26/2019"), "deals_won": 18, "deals_lost": 4, "deals_pending": 27, "deals_total": 49, "ratio": 82, "estimated_sales": 2064312, "actual_sales": 3288348, "tags": "hot, retail" }, + { "id": 131899188, "avatar": "assets/images/women/68.jpg", "name": "Sosanna Deelay", "email": "sdeelay7r@adobe.com", "company": "Skaboo", "position": "Software Developer", "work_phone": "+1-606-125-1765", "mobile_phone": "+1-561-581-7741", "fax": "+1-717-165-4254", "street": "23 Nova Court", "city": "London", "post_code": 40745, "state": "KY", "country": "United States", "referred_by": "Newton Pimblott", "created_on": new Date("11/17/2017"), "birthday": new Date("5/31/1987"), "last_activity": new Date("12/11/2017"), "next_activity": new Date("11/11/2018"), "deals_won": 10, "deals_lost": 20, "deals_pending": 1, "deals_total": 31, "ratio": 33, "estimated_sales": 155090, "actual_sales": 1168350, "tags": "cool, medical" }, + { "id": 598630682, "avatar": "assets/images/women/8.jpg", "name": "Nerita Lambot", "email": "nlambot7s@icio.us", "company": "Dabtype", "position": "Senior Developer", "work_phone": "+1-202-268-7275", "mobile_phone": "+1-202-494-2701", "fax": "+1-612-838-3382", "street": "490 Graceland Circle", "city": "Washington", "post_code": 20005, "state": "DC", "country": "United States", "referred_by": "Steven Oultram", "created_on": new Date("1/21/2018"), "birthday": new Date("1/19/1998"), "last_activity": new Date("1/29/2018"), "next_activity": new Date("3/29/2019"), "deals_won": 23, "deals_lost": 29, "deals_pending": 17, "deals_total": 69, "ratio": 44, "estimated_sales": 2366655, "actual_sales": 3426655, "tags": "demo, construction" }, + { "id": 933367627, "avatar": "assets/images/men/88.jpg", "name": "Franciskus Frunks", "email": "ffrunks7t@bloglines.com", "company": "Layo", "position": "Community Outreach Specialist", "work_phone": "+1-212-740-4963", "mobile_phone": "+1-717-902-2244", "fax": "+1-904-398-9850", "street": "781 Scofield Street", "city": "Brooklyn", "post_code": 11231, "state": "NY", "country": "United States", "referred_by": "Alick Hawkridge", "created_on": new Date("4/22/2017"), "birthday": new Date("1/22/1985"), "last_activity": new Date("5/8/2017"), "next_activity": new Date("10/8/2017"), "deals_won": 6, "deals_lost": 27, "deals_pending": 20, "deals_total": 53, "ratio": 18, "estimated_sales": 2290140, "actual_sales": 760602, "tags": "hot, financial" }, + { "id": 172437592, "avatar": "assets/images/women/62.jpg", "name": "Jany Millar", "email": "jmillar7u@washingtonpost.com", "company": "Twinte", "position": "Help Desk Operator", "work_phone": "+1-916-934-4516", "mobile_phone": "+1-561-979-0271", "fax": "+1-561-876-8632", "street": "2 Esch Drive", "city": "Sacramento", "post_code": 94291, "state": "CA", "country": "United States", "referred_by": "Armando Izzatt", "created_on": new Date("3/17/2018"), "birthday": new Date("11/6/1979"), "last_activity": new Date("4/10/2018"), "next_activity": new Date("4/10/2020"), "deals_won": 27, "deals_lost": 30, "deals_pending": 21, "deals_total": 78, "ratio": 47, "estimated_sales": 1546062, "actual_sales": 3467664, "tags": "hot, financial" }, + { "id": 54373871, "avatar": "assets/images/men/73.jpg", "name": "Hewe Lang", "email": "hlang7v@moonfruit.com", "company": "Zazio", "position": "Recruiting Manager", "work_phone": "+1-865-995-8391", "mobile_phone": "+1-818-584-8353", "fax": "+1-419-424-8134", "street": "54 Northport Court", "city": "Knoxville", "post_code": 37919, "state": "TN", "country": "United States", "referred_by": "Maggie Simeone", "created_on": new Date("12/22/2017"), "birthday": new Date("11/11/1979"), "last_activity": new Date("12/31/2017"), "next_activity": new Date("10/31/2019"), "deals_won": 17, "deals_lost": 27, "deals_pending": 8, "deals_total": 52, "ratio": 39, "estimated_sales": 1445176, "actual_sales": 3224560, "tags": "subscriber, retail" }, + { "id": 172692034, "avatar": "assets/images/men/19.jpg", "name": "Benjamin Derbyshire", "email": "bderbyshire7w@lycos.com", "company": "Einti", "position": "Structural Analysis Engineer", "work_phone": "+1-251-864-0336", "mobile_phone": "+1-856-723-7301", "fax": "+1-619-524-5810", "street": "60 Anthes Parkway", "city": "Mobile", "post_code": 36610, "state": "AL", "country": "United States", "referred_by": "Yvette Tosdevin", "created_on": new Date("9/27/2017"), "birthday": new Date("8/26/1993"), "last_activity": new Date("9/29/2017"), "next_activity": new Date("12/29/2018"), "deals_won": 27, "deals_lost": 11, "deals_pending": 13, "deals_total": 51, "ratio": 71, "estimated_sales": 1840319, "actual_sales": 1980828, "tags": "warm, medical" }, + { "id": 552081785, "avatar": "assets/images/men/46.jpg", "name": "Yardley Gavrielli", "email": "ygavrielli7x@chronoengine.com", "company": "Topicware", "position": "Nurse Practicioner", "work_phone": "+1-212-867-0995", "mobile_phone": "+1-706-327-8294", "fax": "+1-920-734-1170", "street": "456 Lake View Center", "city": "New York City", "post_code": 10131, "state": "NY", "country": "United States", "referred_by": "Moina Plan", "created_on": new Date("1/19/2018"), "birthday": new Date("11/20/1971"), "last_activity": new Date("2/11/2018"), "next_activity": new Date("1/11/2020"), "deals_won": 7, "deals_lost": 19, "deals_pending": 17, "deals_total": 43, "ratio": 27, "estimated_sales": 1495405, "actual_sales": 950201, "tags": "hot, financial" }, + { "id": 837958890, "avatar": "assets/images/women/17.jpg", "name": "Juditha Mars", "email": "jmars7y@slashdot.org", "company": "Gabcube", "position": "Business Systems Development Analyst", "work_phone": "+1-559-155-4807", "mobile_phone": "+1-305-202-2158", "fax": "+1-864-595-4607", "street": "3 Bayside Center", "city": "Fresno", "post_code": 93721, "state": "CA", "country": "United States", "referred_by": "Neddy Bardwell", "created_on": new Date("9/1/2017"), "birthday": new Date("11/3/1976"), "last_activity": new Date("9/6/2017"), "next_activity": new Date("5/6/2019"), "deals_won": 27, "deals_lost": 29, "deals_pending": 29, "deals_total": 85, "ratio": 48, "estimated_sales": 3944000, "actual_sales": 4134078, "tags": "cold, engineering" }, + { "id": 35840654, "avatar": "assets/images/men/56.jpg", "name": "Spenser Seid", "email": "sseid7z@google.de", "company": "Divanoodle", "position": "Technical Writer", "work_phone": "+1-806-430-4954", "mobile_phone": "+1-912-854-9588", "fax": "+1-615-777-2675", "street": "7 Haas Avenue", "city": "Lubbock", "post_code": 79405, "state": "TX", "country": "United States", "referred_by": "Reynard Aleksich", "created_on": new Date("7/4/2017"), "birthday": new Date("9/17/1974"), "last_activity": new Date("7/31/2017"), "next_activity": new Date("12/31/2017"), "deals_won": 15, "deals_lost": 30, "deals_pending": 12, "deals_total": 57, "ratio": 33, "estimated_sales": 2229372, "actual_sales": 918525, "tags": "warm, financial" }, + { "id": 265369662, "avatar": "assets/images/women/65.jpg", "name": "Addy Claw", "email": "aclaw80@jugem.jp", "company": "BiggTechh", "position": "Design Engineer", "work_phone": "+1-313-905-6764", "mobile_phone": "+1-415-170-8833", "fax": "+1-574-935-9107", "street": "053 Pine View Pass", "city": "Detroit", "post_code": 48258, "state": "MI", "country": "United States", "referred_by": "Abramo MacKeever", "created_on": new Date("3/25/2017"), "birthday": new Date("6/2/1975"), "last_activity": new Date("4/16/2017"), "next_activity": new Date("4/16/2019"), "deals_won": 13, "deals_lost": 12, "deals_pending": 0, "deals_total": 25, "ratio": 52, "estimated_sales": 0, "actual_sales": 1184027, "tags": "subscriber, financial" }, + { "id": 741598002, "avatar": "assets/images/women/51.jpg", "name": "Isabelle Suddick", "email": "isuddick81@cafepress.com", "company": "Buzzster", "position": "Information Systems Manager", "work_phone": "+1-202-913-3272", "mobile_phone": "+1-936-914-0771", "fax": "+1-334-725-5925", "street": "4 2nd Place", "city": "Washington", "post_code": 20591, "state": "DC", "country": "United States", "referred_by": "Milzie Brokenshire", "created_on": new Date("8/26/2017"), "birthday": new Date("6/17/1971"), "last_activity": new Date("9/10/2017"), "next_activity": new Date("9/10/2018"), "deals_won": 13, "deals_lost": 26, "deals_pending": 20, "deals_total": 59, "ratio": 33, "estimated_sales": 3350320, "actual_sales": 1540552, "tags": "subscriber, pharmaceutical" }, + { "id": 423264672, "avatar": "assets/images/men/63.jpg", "name": "Morris Dyneley", "email": "mdyneley82@nhs.uk", "company": "Dazzlesphere", "position": "Sales Associate", "work_phone": "+1-754-772-5397", "mobile_phone": "+1-713-447-9175", "fax": "+1-817-857-3711", "street": "22 Summerview Plaza", "city": "Fort Lauderdale", "post_code": 33310, "state": "FL", "country": "United States", "referred_by": "Lida Napoleone", "created_on": new Date("3/26/2018"), "birthday": new Date("9/22/1992"), "last_activity": new Date("4/23/2018"), "next_activity": new Date("3/23/2019"), "deals_won": 19, "deals_lost": 3, "deals_pending": 27, "deals_total": 49, "ratio": 86, "estimated_sales": 3897612, "actual_sales": 1384416, "tags": "cool, pharmaceutical" }, + { "id": 351543741, "avatar": "assets/images/men/69.jpg", "name": "Mord Scourge", "email": "mscourge83@newyorker.com", "company": "Feedmix", "position": "Biostatistician I", "work_phone": "+1-661-128-8349", "mobile_phone": "+1-714-825-9663", "fax": "+1-330-496-6595", "street": "354 Russell Pass", "city": "Bakersfield", "post_code": 93381, "state": "CA", "country": "United States", "referred_by": "Simonne Mathevon", "created_on": new Date("7/10/2017"), "birthday": new Date("1/26/1995"), "last_activity": new Date("7/12/2017"), "next_activity": new Date("9/12/2018"), "deals_won": 17, "deals_lost": 5, "deals_pending": 0, "deals_total": 22, "ratio": 77, "estimated_sales": 0, "actual_sales": 1364233, "tags": "subscriber, financial" }, + { "id": 46014339, "avatar": "assets/images/women/51.jpg", "name": "Trixy Squibe", "email": "tsquibe84@privacy.gov.au", "company": "Brainbox", "position": "Sales Representative", "work_phone": "+1-202-725-3640", "mobile_phone": "+1-702-414-5420", "fax": "+1-609-766-5023", "street": "32 Fisk Point", "city": "Washington", "post_code": 20456, "state": "DC", "country": "United States", "referred_by": "Waite Bendson", "created_on": new Date("3/21/2018"), "birthday": new Date("5/20/1978"), "last_activity": new Date("4/8/2018"), "next_activity": new Date("7/8/2018"), "deals_won": 12, "deals_lost": 26, "deals_pending": 13, "deals_total": 51, "ratio": 32, "estimated_sales": 1992991, "actual_sales": 939048, "tags": "demo, engineering" }, + { "id": 101414303, "avatar": "assets/images/women/40.jpg", "name": "Estrellita Syers", "email": "esyers85@springer.com", "company": "Yodoo", "position": "Compensation Analyst", "work_phone": "+1-208-732-7683", "mobile_phone": "+1-859-395-6312", "fax": "+1-402-401-3364", "street": "3 Center Crossing", "city": "Boise", "post_code": 83705, "state": "ID", "country": "United States", "referred_by": "Quintilla Hopkynson", "created_on": new Date("1/14/2018"), "birthday": new Date("11/14/2001"), "last_activity": new Date("1/17/2018"), "next_activity": new Date("12/17/2019"), "deals_won": 16, "deals_lost": 15, "deals_pending": 0, "deals_total": 31, "ratio": 52, "estimated_sales": 0, "actual_sales": 848544, "tags": "cold, medical" }, + { "id": 588653404, "avatar": "assets/images/men/74.jpg", "name": "Garik Poppy", "email": "gpoppy86@de.vu", "company": "Linkbuzz", "position": "Associate Professor", "work_phone": "+1-304-800-8076", "mobile_phone": "+1-515-181-6287", "fax": "+1-909-708-4343", "street": "830 Novick Parkway", "city": "Huntington", "post_code": 25709, "state": "WV", "country": "United States", "referred_by": "Amos Vorley", "created_on": new Date("10/16/2017"), "birthday": new Date("6/12/1978"), "last_activity": new Date("11/6/2017"), "next_activity": new Date("9/6/2019"), "deals_won": 21, "deals_lost": 21, "deals_pending": 17, "deals_total": 59, "ratio": 5, "estimated_sales": 2467805, "actual_sales": 2334633, "tags": "pharmaceutical" }, + { "id": 727958751, "avatar": "assets/images/men/6.jpg", "name": "Emmy Woodstock", "email": "ewoodstock87@imdb.com", "company": "Livetube", "position": "Safety Technician II", "work_phone": "+1-212-429-7850", "mobile_phone": "+1-504-221-0143", "fax": "+1-862-649-2540", "street": "84409 Jay Junction", "city": "Jamaica", "post_code": 11499, "state": "NY", "country": "United States", "referred_by": "Jehu MacShirie", "created_on": new Date("1/12/2018"), "birthday": new Date("9/22/1971"), "last_activity": new Date("2/3/2018"), "next_activity": new Date("6/3/2019"), "deals_won": 10, "deals_lost": 26, "deals_pending": 22, "deals_total": 58, "ratio": 28, "estimated_sales": 3012614, "actual_sales": 1770810, "tags": "construction" }, + { "id": 523493556, "avatar": "assets/images/women/89.jpg", "name": "Lavina Heffernon", "email": "lheffernon88@bbb.org", "company": "Meetz", "position": "Structural Analysis Engineer", "work_phone": "+1-845-812-4510", "mobile_phone": "+1-719-153-0884", "fax": "+1-361-682-1885", "street": "4 Superior Parkway", "city": "White Plains", "post_code": 10606, "state": "NY", "country": "United States", "referred_by": "Hamil Bower", "created_on": new Date("1/6/2017"), "birthday": new Date("6/7/1992"), "last_activity": new Date("1/18/2017"), "next_activity": new Date("4/18/2018"), "deals_won": 15, "deals_lost": 11, "deals_pending": 22, "deals_total": 48, "ratio": 58, "estimated_sales": 2495900, "actual_sales": 855030, "tags": "demo, medical" }, + { "id": 724383624, "avatar": "assets/images/men/21.jpg", "name": "Putnam Elsey", "email": "pelsey89@simplemachines.org", "company": "Topicware", "position": "Quality Control Specialist", "work_phone": "+1-203-676-6544", "mobile_phone": "+1-218-437-6548", "fax": "+1-512-180-0093", "street": "6 Golf View Plaza", "city": "Waterbury", "post_code": 6721, "state": "CT", "country": "United States", "referred_by": "Michaella D'Onisi", "created_on": new Date("3/26/2017"), "birthday": new Date("6/26/1994"), "last_activity": new Date("4/6/2017"), "next_activity": new Date("6/6/2018"), "deals_won": 9, "deals_lost": 22, "deals_pending": 20, "deals_total": 51, "ratio": 29, "estimated_sales": 1737460, "actual_sales": 732573, "tags": "warm, construction" }, + { "id": 408897332, "avatar": "assets/images/men/12.jpg", "name": "Wallas Semechik", "email": "wsemechik8a@indiatimes.com", "company": "Dynazzy", "position": "Senior Cost Accountant", "work_phone": "+1-303-307-2884", "mobile_phone": "+1-214-290-9478", "fax": "+1-714-583-5431", "street": "15859 Ilene Road", "city": "Denver", "post_code": 80255, "state": "CO", "country": "United States", "referred_by": "Jeni O' Brian", "created_on": new Date("6/15/2017"), "birthday": new Date("4/24/1991"), "last_activity": new Date("6/25/2017"), "next_activity": new Date("7/25/2018"), "deals_won": 11, "deals_lost": 26, "deals_pending": 11, "deals_total": 48, "ratio": 3, "estimated_sales": 1035584, "actual_sales": 1890350, "tags": "subscriber, medical" }, + { "id": 209271194, "avatar": "assets/images/men/59.jpg", "name": "Nikki McElhinney", "email": "nmcelhinney8b@google.pl", "company": "Innotype", "position": "Dental Hygienist", "work_phone": "+1-904-108-8199", "mobile_phone": "+1-714-780-1163", "fax": "+1-704-334-2031", "street": "74019 Thackeray Street", "city": "Jacksonville", "post_code": 32209, "state": "FL", "country": "United States", "referred_by": "George Batteson", "created_on": new Date("6/1/2017"), "birthday": new Date("1/3/1994"), "last_activity": new Date("6/16/2017"), "next_activity": new Date("11/16/2017"), "deals_won": 0, "deals_lost": 6, "deals_pending": 6, "deals_total": 12, "ratio": 0, "estimated_sales": 1123986, "actual_sales": 0, "tags": "subscriber, engineering" }, + { "id": 770583380, "avatar": "assets/images/men/19.jpg", "name": "Rollins Daintith", "email": "rdaintith8c@reference.com", "company": "Jabbertype", "position": "Senior Sales Associate", "work_phone": "+1-678-381-8810", "mobile_phone": "+1-267-748-3839", "fax": "+1-205-392-5114", "street": "56 Blue Bill Park Circle", "city": "Lawrenceville", "post_code": 30245, "state": "GA", "country": "United States", "referred_by": "Jessey Boken", "created_on": new Date("8/9/2017"), "birthday": new Date("11/2/1998"), "last_activity": new Date("9/5/2017"), "next_activity": new Date("8/5/2019"), "deals_won": 11, "deals_lost": 18, "deals_pending": 17, "deals_total": 46, "ratio": 38, "estimated_sales": 919581, "actual_sales": 1988074, "tags": "subscriber, pharmaceutical" }, + { "id": 469803012, "avatar": "assets/images/women/71.jpg", "name": "Lenna de Savery", "email": "lde8d@chron.com", "company": "Mycat", "position": "Help Desk Operator", "work_phone": "+1-731-297-7807", "mobile_phone": "+1-202-989-7461", "fax": "+1-404-461-5452", "street": "1 Randy Circle", "city": "Jackson", "post_code": 38308, "state": "TN", "country": "United States", "referred_by": "Andie McCullouch", "created_on": new Date("8/3/2017"), "birthday": new Date("1/14/1995"), "last_activity": new Date("8/8/2017"), "next_activity": new Date("1/8/2018"), "deals_won": 3, "deals_lost": 17, "deals_pending": 3, "deals_total": 23, "ratio": 15, "estimated_sales": 587517, "actual_sales": 578772, "tags": "subscriber, construction" }, + { "id": 576835437, "avatar": "assets/images/men/19.jpg", "name": "Harlan Cocker", "email": "hcocker8e@washingtonpost.com", "company": "Gabcube", "position": "Structural Engineer", "work_phone": "+1-202-810-3329", "mobile_phone": "+1-720-875-8123", "fax": "+1-859-985-5300", "street": "83 Mallory Circle", "city": "Washington", "post_code": 20530, "state": "DC", "country": "United States", "referred_by": "Martelle Vanlint", "created_on": new Date("12/11/2017"), "birthday": new Date("10/24/1996"), "last_activity": new Date("12/14/2017"), "next_activity": new Date("1/14/2018"), "deals_won": 14, "deals_lost": 21, "deals_pending": 23, "deals_total": 58, "ratio": 4, "estimated_sales": 3153300, "actual_sales": 2667336, "tags": "demo, construction" }, + { "id": 859117140, "avatar": "assets/images/women/27.jpg", "name": "Ollie Storck", "email": "ostorck8f@zdnet.com", "company": "InnoZ", "position": "Financial Advisor", "work_phone": "+1-336-858-2561", "mobile_phone": "+1-940-461-8120", "fax": "+1-602-496-1035", "street": "20 Northfield Court", "city": "High Point", "post_code": 27264, "state": "NC", "country": "United States", "referred_by": "Freddie Siddons", "created_on": new Date("2/4/2018"), "birthday": new Date("11/7/1976"), "last_activity": new Date("3/2/2018"), "next_activity": new Date("8/2/2019"), "deals_won": 2, "deals_lost": 9, "deals_pending": 13, "deals_total": 24, "ratio": 18, "estimated_sales": 1314690, "actual_sales": 258932, "tags": "construction" }, + { "id": 163356197, "avatar": "assets/images/women/29.jpg", "name": "Constancy Bagot", "email": "cbagot8g@state.gov", "company": "Eadel", "position": "VP Product Management", "work_phone": "+1-919-781-1567", "mobile_phone": "+1-212-265-0368", "fax": "+1-501-431-3941", "street": "34 Prairie Rose Center", "city": "Raleigh", "post_code": 27626, "state": "NC", "country": "United States", "referred_by": "Cleveland Kleisle", "created_on": new Date("7/29/2017"), "birthday": new Date("8/5/1975"), "last_activity": new Date("8/18/2017"), "next_activity": new Date("11/18/2017"), "deals_won": 24, "deals_lost": 6, "deals_pending": 13, "deals_total": 43, "ratio": 8, "estimated_sales": 652782, "actual_sales": 1497600, "tags": "retail" }, + { "id": 848325641, "avatar": "assets/images/men/92.jpg", "name": "Herschel Brimilcombe", "email": "hbrimilcombe8h@csmonitor.com", "company": "Feedfire", "position": "Chemical Engineer", "work_phone": "+1-718-416-8458", "mobile_phone": "+1-904-371-7742", "fax": "+1-502-929-4130", "street": "2005 Hermina Court", "city": "Staten Island", "post_code": 10305, "state": "NY", "country": "United States", "referred_by": "Merrili Fuxman", "created_on": new Date("2/7/2017"), "birthday": new Date("10/8/1988"), "last_activity": new Date("2/11/2017"), "next_activity": new Date("7/11/2018"), "deals_won": 27, "deals_lost": 26, "deals_pending": 10, "deals_total": 63, "ratio": 51, "estimated_sales": 537900, "actual_sales": 4803246, "tags": "hot, engineering" }, + { "id": 269109261, "avatar": "assets/images/women/76.jpg", "name": "Trixi Joslin", "email": "tjoslin8i@yandex.ru", "company": "Izio", "position": "Assistant Media Planner", "work_phone": "+1-502-920-9388", "mobile_phone": "+1-727-329-3524", "fax": "+1-406-271-0101", "street": "31260 Dexter Hill", "city": "Louisville", "post_code": 40293, "state": "KY", "country": "United States", "referred_by": "Janessa Mariot", "created_on": new Date("5/11/2017"), "birthday": new Date("7/17/1999"), "last_activity": new Date("5/14/2017"), "next_activity": new Date("1/14/2019"), "deals_won": 30, "deals_lost": 27, "deals_pending": 12, "deals_total": 69, "ratio": 53, "estimated_sales": 833064, "actual_sales": 4902630, "tags": "pharmaceutical" }, + { "id": 479312655, "avatar": "assets/images/men/74.jpg", "name": "Bailie Rushbrook", "email": "brushbrook8j@deliciousdays.com", "company": "Rhynyx", "position": "Sales Representative", "work_phone": "+1-909-101-9926", "mobile_phone": "+1-302-836-4370", "fax": "+1-203-683-0094", "street": "585 Cody Trail", "city": "San Bernardino", "post_code": 92410, "state": "CA", "country": "United States", "referred_by": "Dwain Taffe", "created_on": new Date("7/11/2017"), "birthday": new Date("4/8/1995"), "last_activity": new Date("7/12/2017"), "next_activity": new Date("3/12/2018"), "deals_won": 29, "deals_lost": 24, "deals_pending": 11, "deals_total": 64, "ratio": 55, "estimated_sales": 1902879, "actual_sales": 5429293, "tags": "demo, engineering" }, + { "id": 941982434, "avatar": "assets/images/men/58.jpg", "name": "Caspar Imlaw", "email": "cimlaw8k@blog.com", "company": "LiveZ", "position": "Paralegal", "work_phone": "+1-904-804-8605", "mobile_phone": "+1-313-124-3542", "fax": "+1-740-254-8070", "street": "42 High Crossing Street", "city": "Jacksonville", "post_code": 32220, "state": "FL", "country": "United States", "referred_by": "Berny Avo", "created_on": new Date("3/19/2018"), "birthday": new Date("1/9/1981"), "last_activity": new Date("4/2/2018"), "next_activity": new Date("7/2/2019"), "deals_won": 0, "deals_lost": 11, "deals_pending": 1, "deals_total": 12, "ratio": 0, "estimated_sales": 179359, "actual_sales": 0, "tags": "warm, financial" }, + { "id": 330480477, "avatar": "assets/images/men/21.jpg", "name": "Orrin Wrightam", "email": "owrightam8l@bravesites.com", "company": "Camido", "position": "Professor", "work_phone": "+1-602-891-7416", "mobile_phone": "+1-502-505-6615", "fax": "+1-319-965-4949", "street": "5 Karstens Place", "city": "Phoenix", "post_code": 85040, "state": "AZ", "country": "United States", "referred_by": "Fabe Cramb", "created_on": new Date("6/24/2017"), "birthday": new Date("7/2/1971"), "last_activity": new Date("7/20/2017"), "next_activity": new Date("12/20/2017"), "deals_won": 30, "deals_lost": 29, "deals_pending": 19, "deals_total": 78, "ratio": 51, "estimated_sales": 1187386, "actual_sales": 3225510, "tags": "demo, medical" }, + { "id": 962909787, "avatar": "assets/images/women/31.jpg", "name": "Diane-marie Syson", "email": "dsyson8m@nifty.com", "company": "Babbleblab", "position": "Engineer III", "work_phone": "+1-217-741-8377", "mobile_phone": "+1-847-979-5245", "fax": "+1-202-443-3769", "street": "51542 Cardinal Pass", "city": "Springfield", "post_code": 62723, "state": "IL", "country": "United States", "referred_by": "Cinda Gehring", "created_on": new Date("1/3/2017"), "birthday": new Date("10/3/1992"), "last_activity": new Date("1/9/2017"), "next_activity": new Date("3/9/2017"), "deals_won": 19, "deals_lost": 16, "deals_pending": 22, "deals_total": 57, "ratio": 54, "estimated_sales": 2714184, "actual_sales": 1713914, "tags": "construction" }, + { "id": 933111738, "avatar": "assets/images/women/2.jpg", "name": "Verene Swire", "email": "vswire8n@toplist.cz", "company": "Twitterwire", "position": "Analyst Programmer", "work_phone": "+1-503-172-9678", "mobile_phone": "+1-414-807-2971", "fax": "+1-407-200-5929", "street": "629 Hauk Drive", "city": "Portland", "post_code": 97206, "state": "OR", "country": "United States", "referred_by": "Gunner McCerery", "created_on": new Date("4/15/2018"), "birthday": new Date("8/6/1996"), "last_activity": new Date("5/2/2018"), "next_activity": new Date("9/2/2019"), "deals_won": 22, "deals_lost": 13, "deals_pending": 6, "deals_total": 41, "ratio": 63, "estimated_sales": 695478, "actual_sales": 1439614, "tags": "pro, financial" }, + { "id": 435959533, "avatar": "assets/images/men/82.jpg", "name": "Rodrigo Piers", "email": "rpiers8o@cisco.com", "company": "Kwimbee", "position": "Occupational Therapist", "work_phone": "+1-650-353-7414", "mobile_phone": "+1-253-198-7254", "fax": "+1-214-829-4388", "street": "06055 Welch Court", "city": "Redwood City", "post_code": 94064, "state": "CA", "country": "United States", "referred_by": "Frannie Orteaux", "created_on": new Date("1/4/2017"), "birthday": new Date("3/7/1977"), "last_activity": new Date("1/12/2017"), "next_activity": new Date("6/12/2017"), "deals_won": 22, "deals_lost": 12, "deals_pending": 16, "deals_total": 50, "ratio": 65, "estimated_sales": 1440736, "actual_sales": 2113518, "tags": "warm, engineering" }, + { "id": 63878506, "avatar": "assets/images/men/74.jpg", "name": "Cletis Wybern", "email": "cwybern8p@blogspot.com", "company": "Oozz", "position": "VP Quality Control", "work_phone": "+1-585-573-1575", "mobile_phone": "+1-619-386-2102", "fax": "+1-513-881-1789", "street": "168 Grasskamp Way", "city": "Rochester", "post_code": 14639, "state": "NY", "country": "United States", "referred_by": "Gray Odams", "created_on": new Date("12/26/2017"), "birthday": new Date("6/11/1999"), "last_activity": new Date("1/3/2018"), "next_activity": new Date("9/3/2018"), "deals_won": 10, "deals_lost": 24, "deals_pending": 30, "deals_total": 64, "ratio": 29, "estimated_sales": 1519140, "actual_sales": 1373790, "tags": "demo, construction" }, + { "id": 527913496, "avatar": "assets/images/men/16.jpg", "name": "Berky Cosker", "email": "bcosker8q@state.gov", "company": "Yombu", "position": "Financial Analyst", "work_phone": "+1-202-642-7548", "mobile_phone": "+1-713-279-1157", "fax": "+1-757-252-2518", "street": "2 David Point", "city": "Washington", "post_code": 20404, "state": "DC", "country": "United States", "referred_by": "Laural Massy", "created_on": new Date("7/7/2017"), "birthday": new Date("10/31/1973"), "last_activity": new Date("7/27/2017"), "next_activity": new Date("10/27/2017"), "deals_won": 28, "deals_lost": 28, "deals_pending": 20, "deals_total": 76, "ratio": 5, "estimated_sales": 1030600, "actual_sales": 2565584, "tags": "pro, financial" }, + { "id": 2283205, "avatar": "assets/images/women/80.jpg", "name": "Juliann Janoschek", "email": "jjanoschek8r@intel.com", "company": "Blogtags", "position": "VP Accounting", "work_phone": "+1-802-657-0520", "mobile_phone": "+1-860-211-0636", "fax": "+1-801-500-5100", "street": "23507 South Hill", "city": "Montpelier", "post_code": 5609, "state": "VT", "country": "United States", "referred_by": "Babbette Linkie", "created_on": new Date("8/19/2017"), "birthday": new Date("11/6/1979"), "last_activity": new Date("8/25/2017"), "next_activity": new Date("3/25/2018"), "deals_won": 30, "deals_lost": 20, "deals_pending": 23, "deals_total": 73, "ratio": 6, "estimated_sales": 4039260, "actual_sales": 3939210, "tags": "engineering" }, + { "id": 374637037, "avatar": "assets/images/women/71.jpg", "name": "Kassey Seawell", "email": "kseawell8s@apple.com", "company": "Mita", "position": "Staff Accountant III", "work_phone": "+1-763-513-3335", "mobile_phone": "+1-619-552-4732", "fax": "+1-571-941-0951", "street": "21 Fulton Street", "city": "Minneapolis", "post_code": 55441, "state": "MN", "country": "United States", "referred_by": "Saunders Glossop", "created_on": new Date("5/10/2017"), "birthday": new Date("1/28/1986"), "last_activity": new Date("5/27/2017"), "next_activity": new Date("2/27/2019"), "deals_won": 21, "deals_lost": 25, "deals_pending": 4, "deals_total": 50, "ratio": 46, "estimated_sales": 402772, "actual_sales": 1624896, "tags": "demo, engineering" }, + { "id": 820255848, "avatar": "assets/images/men/8.jpg", "name": "Stanislas Minney", "email": "sminney8t@apache.org", "company": "Fiveclub", "position": "Chemical Engineer", "work_phone": "+1-814-115-8776", "mobile_phone": "+1-850-828-1785", "fax": "+1-212-919-9133", "street": "8 Londonderry Lane", "city": "Johnstown", "post_code": 15906, "state": "PA", "country": "United States", "referred_by": "Lucian Beet", "created_on": new Date("10/1/2017"), "birthday": new Date("12/19/1999"), "last_activity": new Date("10/21/2017"), "next_activity": new Date("12/21/2018"), "deals_won": 29, "deals_lost": 8, "deals_pending": 21, "deals_total": 58, "ratio": 78, "estimated_sales": 3111843, "actual_sales": 4637825, "tags": "cool, pharmaceutical" }, + { "id": 776402424, "avatar": "assets/images/women/42.jpg", "name": "Catharine Grassett", "email": "cgrassett8u@ihg.com", "company": "Midel", "position": "Marketing Assistant", "work_phone": "+1-860-945-8750", "mobile_phone": "+1-404-157-1228", "fax": "+1-216-635-9191", "street": "00239 Maple Wood Plaza", "city": "Hartford", "post_code": 6140, "state": "CT", "country": "United States", "referred_by": "Adair Tomashov", "created_on": new Date("5/30/2017"), "birthday": new Date("1/26/1985"), "last_activity": new Date("6/29/2017"), "next_activity": new Date("10/29/2018"), "deals_won": 14, "deals_lost": 25, "deals_pending": 28, "deals_total": 67, "ratio": 36, "estimated_sales": 2479596, "actual_sales": 1491980, "tags": "cool, retail" }, + { "id": 523146434, "avatar": "assets/images/women/22.jpg", "name": "Clareta Pumphrey", "email": "cpumphrey8v@addthis.com", "company": "Quatz", "position": "Occupational Therapist", "work_phone": "+1-432-643-9482", "mobile_phone": "+1-661-302-3038", "fax": "+1-734-653-0526", "street": "248 Miller Park", "city": "Midland", "post_code": 79705, "state": "TX", "country": "United States", "referred_by": "Clementine Alchin", "created_on": new Date("6/29/2017"), "birthday": new Date("5/3/1997"), "last_activity": new Date("6/30/2017"), "next_activity": new Date("4/30/2018"), "deals_won": 28, "deals_lost": 19, "deals_pending": 19, "deals_total": 66, "ratio": 6, "estimated_sales": 2139970, "actual_sales": 3976420, "tags": "hot, pharmaceutical" }, + { "id": 100504119, "avatar": "assets/images/men/52.jpg", "name": "Theobald Chessun", "email": "tchessun8w@gov.uk", "company": "Blogpad", "position": "Systems Administrator II", "work_phone": "+1-801-915-9520", "mobile_phone": "+1-202-151-2216", "fax": "+1-614-895-5841", "street": "58 Ridge Oak Terrace", "city": "Salt Lake City", "post_code": 84105, "state": "UT", "country": "United States", "referred_by": "Shari Otto", "created_on": new Date("10/19/2017"), "birthday": new Date("9/15/1970"), "last_activity": new Date("10/24/2017"), "next_activity": new Date("7/24/2019"), "deals_won": 29, "deals_lost": 22, "deals_pending": 11, "deals_total": 62, "ratio": 57, "estimated_sales": 894850, "actual_sales": 4514053, "tags": "cold, construction" }, + { "id": 16897469, "avatar": "assets/images/men/50.jpg", "name": "Igor Zelland", "email": "izelland8x@mapy.cz", "company": "Meembee", "position": "Geological Engineer", "work_phone": "+1-260-493-9904", "mobile_phone": "+1-408-448-9001", "fax": "+1-678-797-5962", "street": "2645 Calypso Center", "city": "Fort Wayne", "post_code": 46862, "state": "IN", "country": "United States", "referred_by": "Daloris Prahm", "created_on": new Date("1/21/2017"), "birthday": new Date("5/13/1995"), "last_activity": new Date("1/26/2017"), "next_activity": new Date("11/26/2018"), "deals_won": 26, "deals_lost": 12, "deals_pending": 3, "deals_total": 41, "ratio": 68, "estimated_sales": 507147, "actual_sales": 2576574, "tags": "subscriber, medical" }, + { "id": 659485460, "avatar": "assets/images/women/36.jpg", "name": "Van Klyner", "email": "vklyner8y@yellowbook.com", "company": "Mynte", "position": "Technical Writer", "work_phone": "+1-786-591-1123", "mobile_phone": "+1-518-142-0718", "fax": "+1-757-138-4073", "street": "02 Sunfield Hill", "city": "Hialeah", "post_code": 33013, "state": "FL", "country": "United States", "referred_by": "Isaak Bracknall", "created_on": new Date("7/27/2017"), "birthday": new Date("9/24/1999"), "last_activity": new Date("8/19/2017"), "next_activity": new Date("4/19/2019"), "deals_won": 18, "deals_lost": 23, "deals_pending": 14, "deals_total": 55, "ratio": 44, "estimated_sales": 1992900, "actual_sales": 1462824, "tags": "subscriber, financial" }, + { "id": 98023833, "avatar": "assets/images/women/52.jpg", "name": "Tera Dominicacci", "email": "tdominicacci8z@sun.com", "company": "Riffpath", "position": "Internal Auditor", "work_phone": "+1-562-247-9447", "mobile_phone": "+1-623-749-4846", "fax": "+1-770-379-1159", "street": "417 Quincy Plaza", "city": "Long Beach", "post_code": 90847, "state": "CA", "country": "United States", "referred_by": "Wernher Saint", "created_on": new Date("10/26/2017"), "birthday": new Date("12/11/1982"), "last_activity": new Date("11/16/2017"), "next_activity": new Date("6/16/2018"), "deals_won": 2, "deals_lost": 24, "deals_pending": 9, "deals_total": 35, "ratio": 8, "estimated_sales": 551268, "actual_sales": 147118, "tags": "cool, engineering" }, + { "id": 416702210, "avatar": "assets/images/women/85.jpg", "name": "Matilde Varlow", "email": "mvarlow90@nifty.com", "company": "Meemm", "position": "Civil Engineer", "work_phone": "+1-415-415-9387", "mobile_phone": "+1-313-172-7851", "fax": "+1-210-235-6319", "street": "1712 Holy Cross Trail", "city": "San Francisco", "post_code": 94169, "state": "CA", "country": "United States", "referred_by": "Suzy Milhench", "created_on": new Date("4/13/2018"), "birthday": new Date("2/9/1992"), "last_activity": new Date("5/11/2018"), "next_activity": new Date("3/11/2020"), "deals_won": 8, "deals_lost": 23, "deals_pending": 15, "deals_total": 46, "ratio": 26, "estimated_sales": 2939100, "actual_sales": 914480, "tags": "warm, engineering" }, + { "id": 230876269, "avatar": "assets/images/women/57.jpg", "name": "Jennine Loalday", "email": "jloalday91@ameblo.jp", "company": "Janyx", "position": "Data Coordiator", "work_phone": "+1-404-126-8651", "mobile_phone": "+1-317-481-6037", "fax": "+1-614-688-1797", "street": "07 Steensland Court", "city": "Atlanta", "post_code": 30340, "state": "GA", "country": "United States", "referred_by": "Cassius Chastenet", "created_on": new Date("2/17/2017"), "birthday": new Date("5/3/1993"), "last_activity": new Date("2/22/2017"), "next_activity": new Date("3/22/2018"), "deals_won": 29, "deals_lost": 25, "deals_pending": 25, "deals_total": 79, "ratio": 54, "estimated_sales": 3289500, "actual_sales": 3669892, "tags": "subscriber, engineering" }, + { "id": 239039654, "avatar": "assets/images/men/15.jpg", "name": "Emmy Vasilov", "email": "evasilov92@google.ru", "company": "Shufflester", "position": "Information Systems Manager", "work_phone": "+1-520-572-2984", "mobile_phone": "+1-810-350-3702", "fax": "+1-614-506-7387", "street": "26921 Cottonwood Pass", "city": "Tucson", "post_code": 85725, "state": "AZ", "country": "United States", "referred_by": "Ives McGlaud", "created_on": new Date("1/11/2017"), "birthday": new Date("2/12/1971"), "last_activity": new Date("1/19/2017"), "next_activity": new Date("4/19/2017"), "deals_won": 24, "deals_lost": 16, "deals_pending": 10, "deals_total": 50, "ratio": 6, "estimated_sales": 1548310, "actual_sales": 3143016, "tags": "cool, pharmaceutical" }, + { "id": 678755845, "avatar": "assets/images/women/99.jpg", "name": "Prue Horsewood", "email": "phorsewood93@opera.com", "company": "Eimbee", "position": "Financial Advisor", "work_phone": "+1-602-302-5564", "mobile_phone": "+1-916-431-2422", "fax": "+1-816-148-3091", "street": "0 Bluejay Lane", "city": "Phoenix", "post_code": 85030, "state": "AZ", "country": "United States", "referred_by": "Porter Dannehl", "created_on": new Date("2/20/2017"), "birthday": new Date("8/26/1976"), "last_activity": new Date("2/22/2017"), "next_activity": new Date("6/22/2018"), "deals_won": 29, "deals_lost": 16, "deals_pending": 13, "deals_total": 58, "ratio": 64, "estimated_sales": 2238639, "actual_sales": 1521253, "tags": "cold, pharmaceutical" }, + { "id": 506534287, "avatar": "assets/images/men/90.jpg", "name": "Norton Studdard", "email": "nstuddard94@earthlink.net", "company": "Thoughtbeat", "position": "Media Manager IV", "work_phone": "+1-256-827-7779", "mobile_phone": "+1-801-946-9653", "fax": "+1-209-400-5924", "street": "0910 Spaight Alley", "city": "Gadsden", "post_code": 35905, "state": "AL", "country": "United States", "referred_by": "Galvan Emmott", "created_on": new Date("6/24/2017"), "birthday": new Date("3/2/1976"), "last_activity": new Date("7/5/2017"), "next_activity": new Date("2/5/2018"), "deals_won": 30, "deals_lost": 23, "deals_pending": 20, "deals_total": 73, "ratio": 57, "estimated_sales": 2769660, "actual_sales": 3281460, "tags": "cold, construction" }, + { "id": 446555818, "avatar": "assets/images/men/71.jpg", "name": "Sanford Dews", "email": "sdews95@guardian.co.uk", "company": "Photobug", "position": "Executive Secretary", "work_phone": "+1-213-718-7115", "mobile_phone": "+1-334-228-1401", "fax": "+1-339-666-0288", "street": "30 Reindahl Park", "city": "Los Angeles", "post_code": 90040, "state": "CA", "country": "United States", "referred_by": "Terrence Crowcher", "created_on": new Date("5/24/2017"), "birthday": new Date("4/5/1980"), "last_activity": new Date("6/11/2017"), "next_activity": new Date("3/11/2019"), "deals_won": 8, "deals_lost": 6, "deals_pending": 14, "deals_total": 28, "ratio": 57, "estimated_sales": 1453984, "actual_sales": 1267488, "tags": "hot, construction" }, + { "id": 459720013, "avatar": "assets/images/men/88.jpg", "name": "Kenon Pavier", "email": "kpavier96@xing.com", "company": "Fadeo", "position": "Assistant Manager", "work_phone": "+1-210-551-5713", "mobile_phone": "+1-571-885-6232", "fax": "+1-407-339-3757", "street": "1396 Caliangt Hill", "city": "San Antonio", "post_code": 78250, "state": "TX", "country": "United States", "referred_by": "Sada Guest", "created_on": new Date("11/10/2017"), "birthday": new Date("12/19/1984"), "last_activity": new Date("11/12/2017"), "next_activity": new Date("6/12/2018"), "deals_won": 1, "deals_lost": 8, "deals_pending": 16, "deals_total": 25, "ratio": 11, "estimated_sales": 1206416, "actual_sales": 184068, "tags": "demo, retail" }, + { "id": 885293616, "avatar": "assets/images/men/30.jpg", "name": "Waverly Houchen", "email": "whouchen97@xinhuanet.com", "company": "Browseblab", "position": "Help Desk Operator", "work_phone": "+1-214-242-0207", "mobile_phone": "+1-915-244-2479", "fax": "+1-504-778-9352", "street": "09634 Upham Park", "city": "Dallas", "post_code": 75358, "state": "TX", "country": "United States", "referred_by": "Aldis Anderson", "created_on": new Date("4/8/2017"), "birthday": new Date("7/27/1996"), "last_activity": new Date("4/19/2017"), "next_activity": new Date("10/19/2018"), "deals_won": 26, "deals_lost": 26, "deals_pending": 1, "deals_total": 53, "ratio": 5, "estimated_sales": 180129, "actual_sales": 2333630, "tags": "medical" }, + { "id": 133151012, "avatar": "assets/images/women/9.jpg", "name": "Ulrica Ginner", "email": "uginner98@about.com", "company": "Twinder", "position": "Payment Adjustment Coordinator", "work_phone": "+1-901-531-5579", "mobile_phone": "+1-832-895-9302", "fax": "+1-913-218-1656", "street": "37318 Schmedeman Trail", "city": "Memphis", "post_code": 38136, "state": "TN", "country": "United States", "referred_by": "Dannye Holstein", "created_on": new Date("7/28/2017"), "birthday": new Date("10/25/1970"), "last_activity": new Date("8/26/2017"), "next_activity": new Date("2/26/2018"), "deals_won": 17, "deals_lost": 7, "deals_pending": 11, "deals_total": 35, "ratio": 71, "estimated_sales": 724603, "actual_sales": 3157019, "tags": "cold, construction" }, + { "id": 272707639, "avatar": "assets/images/women/36.jpg", "name": "Ilysa Beningfield", "email": "ibeningfield99@mlb.com", "company": "Feednation", "position": "Office Assistant I", "work_phone": "+1-810-598-9761", "mobile_phone": "+1-860-254-7419", "fax": "+1-517-445-5091", "street": "55047 Hansons Junction", "city": "Flint", "post_code": 48555, "state": "MI", "country": "United States", "referred_by": "Sibylla Dicken", "created_on": new Date("8/20/2017"), "birthday": new Date("1/27/1986"), "last_activity": new Date("9/9/2017"), "next_activity": new Date("9/9/2019"), "deals_won": 25, "deals_lost": 2, "deals_pending": 5, "deals_total": 32, "ratio": 93, "estimated_sales": 983620, "actual_sales": 2902225, "tags": "financial" }, + { "id": 879914607, "avatar": "assets/images/women/2.jpg", "name": "Tiffani Wentworth", "email": "twentworth9a@bluehost.com", "company": "Skivee", "position": "Compensation Analyst", "work_phone": "+1-412-610-7596", "mobile_phone": "+1-214-803-8707", "fax": "+1-717-992-1886", "street": "9751 Sommers Trail", "city": "Pittsburgh", "post_code": 15255, "state": "PA", "country": "United States", "referred_by": "Emmalynn Bramhill", "created_on": new Date("7/27/2017"), "birthday": new Date("9/18/1984"), "last_activity": new Date("8/20/2017"), "next_activity": new Date("2/20/2018"), "deals_won": 24, "deals_lost": 18, "deals_pending": 1, "deals_total": 43, "ratio": 57, "estimated_sales": 67636, "actual_sales": 2840568, "tags": "engineering" }, + { "id": 949461851, "avatar": "assets/images/women/86.jpg", "name": "Lisabeth Andrieu", "email": "landrieu9b@tripod.com", "company": "Kwimbee", "position": "Software Engineer IV", "work_phone": "+1-651-133-0461", "mobile_phone": "+1-281-325-0896", "fax": "+1-561-459-5943", "street": "1901 Golf Course Plaza", "city": "Saint Paul", "post_code": 55146, "state": "MN", "country": "United States", "referred_by": "Stan Colley", "created_on": new Date("11/17/2017"), "birthday": new Date("4/20/1984"), "last_activity": new Date("11/21/2017"), "next_activity": new Date("6/21/2018"), "deals_won": 9, "deals_lost": 25, "deals_pending": 10, "deals_total": 44, "ratio": 26, "estimated_sales": 693220, "actual_sales": 1317780, "tags": "pro, financial" }, + { "id": 360417880, "avatar": "assets/images/women/84.jpg", "name": "Kally Foux", "email": "kfoux9c@e-recht24.de", "company": "Jaxspan", "position": "Nurse", "work_phone": "+1-505-991-1978", "mobile_phone": "+1-518-947-2620", "fax": "+1-423-297-7910", "street": "8696 Spenser Trail", "city": "Albuquerque", "post_code": 87195, "state": "NM", "country": "United States", "referred_by": "Henryetta Holttom", "created_on": new Date("3/29/2018"), "birthday": new Date("8/13/1974"), "last_activity": new Date("3/30/2018"), "next_activity": new Date("3/30/2019"), "deals_won": 16, "deals_lost": 4, "deals_pending": 15, "deals_total": 35, "ratio": 8, "estimated_sales": 1952070, "actual_sales": 1023200, "tags": "cold, engineering" }, + { "id": 79418685, "avatar": "assets/images/women/20.jpg", "name": "Lucia Blades", "email": "lblades9d@howstuffworks.com", "company": "Eimbee", "position": "Marketing Assistant", "work_phone": "+1-469-323-0155", "mobile_phone": "+1-209-507-8630", "fax": "+1-702-125-4183", "street": "115 Bluestem Plaza", "city": "Dallas", "post_code": 75251, "state": "TX", "country": "United States", "referred_by": "Lion Badam", "created_on": new Date("1/15/2017"), "birthday": new Date("2/4/1976"), "last_activity": new Date("2/6/2017"), "next_activity": new Date("1/6/2018"), "deals_won": 25, "deals_lost": 9, "deals_pending": 0, "deals_total": 34, "ratio": 74, "estimated_sales": 0, "actual_sales": 4052525, "tags": "warm, engineering" }, + { "id": 133869987, "avatar": "assets/images/men/84.jpg", "name": "Hoebart Entreis", "email": "hentreis9e@archive.org", "company": "Zoomlounge", "position": "Internal Auditor", "work_phone": "+1-505-950-9544", "mobile_phone": "+1-718-550-4316", "fax": "+1-806-466-6992", "street": "865 Browning Hill", "city": "Albuquerque", "post_code": 87180, "state": "NM", "country": "United States", "referred_by": "Cari Oxborough", "created_on": new Date("4/26/2017"), "birthday": new Date("6/15/1998"), "last_activity": new Date("5/21/2017"), "next_activity": new Date("4/21/2018"), "deals_won": 3, "deals_lost": 17, "deals_pending": 15, "deals_total": 35, "ratio": 15, "estimated_sales": 1827300, "actual_sales": 452601, "tags": "cool, engineering" }, + { "id": 306182552, "avatar": "assets/images/men/65.jpg", "name": "Oby Whybrow", "email": "owhybrow9f@webnode.com", "company": "Ntag", "position": "Product Engineer", "work_phone": "+1-941-966-8290", "mobile_phone": "+1-916-373-0707", "fax": "+1-713-281-2101", "street": "7526 Vernon Circle", "city": "North Port", "post_code": 34290, "state": "FL", "country": "United States", "referred_by": "Sebastien Huyche", "created_on": new Date("2/13/2018"), "birthday": new Date("8/19/1979"), "last_activity": new Date("3/8/2018"), "next_activity": new Date("9/8/2019"), "deals_won": 12, "deals_lost": 10, "deals_pending": 19, "deals_total": 41, "ratio": 55, "estimated_sales": 1222498, "actual_sales": 1806744, "tags": "cold, medical" }, + { "id": 531115282, "avatar": "assets/images/men/47.jpg", "name": "Hanson Bendson", "email": "hbendson9g@samsung.com", "company": "Demizz", "position": "Data Coordiator", "work_phone": "+1-720-712-8697", "mobile_phone": "+1-786-596-6033", "fax": "+1-309-915-8245", "street": "2 Golden Leaf Junction", "city": "Littleton", "post_code": 80161, "state": "CO", "country": "United States", "referred_by": "Thomasin Bente", "created_on": new Date("2/22/2017"), "birthday": new Date("9/3/1970"), "last_activity": new Date("3/16/2017"), "next_activity": new Date("1/16/2018"), "deals_won": 27, "deals_lost": 28, "deals_pending": 1, "deals_total": 56, "ratio": 49, "estimated_sales": 177212, "actual_sales": 1717794, "tags": "hot, financial" }, + { "id": 619634946, "avatar": "assets/images/men/36.jpg", "name": "Garrot Barthrop", "email": "gbarthrop9h@cdc.gov", "company": "Youspan", "position": "Executive Secretary", "work_phone": "+1-918-540-6643", "mobile_phone": "+1-251-841-1667", "fax": "+1-727-519-5359", "street": "14 Melvin Center", "city": "Tulsa", "post_code": 74170, "state": "OK", "country": "United States", "referred_by": "Finlay Vannini", "created_on": new Date("1/22/2018"), "birthday": new Date("8/27/1988"), "last_activity": new Date("1/24/2018"), "next_activity": new Date("6/24/2019"), "deals_won": 9, "deals_lost": 24, "deals_pending": 3, "deals_total": 36, "ratio": 27, "estimated_sales": 516813, "actual_sales": 839340, "tags": "pro, medical" }, + { "id": 445175839, "avatar": "assets/images/men/67.jpg", "name": "Cob Gantlett", "email": "cgantlett9i@auda.org.au", "company": "Mita", "position": "Registered Nurse", "work_phone": "+1-407-272-7078", "mobile_phone": "+1-817-986-6125", "fax": "+1-713-564-7432", "street": "86 Memorial Hill", "city": "Orlando", "post_code": 32891, "state": "FL", "country": "United States", "referred_by": "Amalita Gunney", "created_on": new Date("11/1/2017"), "birthday": new Date("2/2/2003"), "last_activity": new Date("11/18/2017"), "next_activity": new Date("11/18/2019"), "deals_won": 8, "deals_lost": 24, "deals_pending": 9, "deals_total": 41, "ratio": 25, "estimated_sales": 1384821, "actual_sales": 736496, "tags": "cool, pharmaceutical" }, + { "id": 369157580, "avatar": "assets/images/men/6.jpg", "name": "Barny Harken", "email": "bharken9j@addthis.com", "company": "Yambee", "position": "Registered Nurse", "work_phone": "+1-410-874-8353", "mobile_phone": "+1-804-339-5313", "fax": "+1-971-562-5439", "street": "9 Menomonie Avenue", "city": "Baltimore", "post_code": 21239, "state": "MD", "country": "United States", "referred_by": "Oby Gallie", "created_on": new Date("6/30/2017"), "birthday": new Date("12/24/1986"), "last_activity": new Date("7/13/2017"), "next_activity": new Date("9/13/2017"), "deals_won": 21, "deals_lost": 28, "deals_pending": 15, "deals_total": 64, "ratio": 43, "estimated_sales": 1557690, "actual_sales": 1465086, "tags": "subscriber, financial" }, + { "id": 447120748, "avatar": "assets/images/women/98.jpg", "name": "Brenn Knibley", "email": "bknibley9k@deliciousdays.com", "company": "Skyba", "position": "Technical Writer", "work_phone": "+1-727-463-4760", "mobile_phone": "+1-425-957-6420", "fax": "+1-716-402-9375", "street": "34820 Straubel Terrace", "city": "Saint Petersburg", "post_code": 33737, "state": "FL", "country": "United States", "referred_by": "Felike Rosenstein", "created_on": new Date("8/1/2017"), "birthday": new Date("4/25/2000"), "last_activity": new Date("8/7/2017"), "next_activity": new Date("1/7/2018"), "deals_won": 24, "deals_lost": 25, "deals_pending": 21, "deals_total": 70, "ratio": 49, "estimated_sales": 1352400, "actual_sales": 2498928, "tags": "cold, engineering" }, + { "id": 759355194, "avatar": "assets/images/women/45.jpg", "name": "Maridel Rey", "email": "mrey9l@sciencedaily.com", "company": "Yotz", "position": "Occupational Therapist", "work_phone": "+1-319-742-3342", "mobile_phone": "+1-775-834-8171", "fax": "+1-210-897-9369", "street": "4891 Northview Court", "city": "Cedar Rapids", "post_code": 52405, "state": "IA", "country": "United States", "referred_by": "Lem Coye", "created_on": new Date("11/7/2017"), "birthday": new Date("1/3/1992"), "last_activity": new Date("11/20/2017"), "next_activity": new Date("7/20/2018"), "deals_won": 25, "deals_lost": 25, "deals_pending": 30, "deals_total": 80, "ratio": 5, "estimated_sales": 2483700, "actual_sales": 4461250, "tags": "pro, pharmaceutical" }, + { "id": 702716732, "avatar": "assets/images/women/33.jpg", "name": "Halley Beart", "email": "hbeart9m@sohu.com", "company": "Brightdog", "position": "Tax Accountant", "work_phone": "+1-571-189-8454", "mobile_phone": "+1-267-474-7428", "fax": "+1-317-832-7458", "street": "06 Northwestern Hill", "city": "Arlington", "post_code": 22225, "state": "VA", "country": "United States", "referred_by": "Harrie Russe", "created_on": new Date("9/2/2017"), "birthday": new Date("6/7/1984"), "last_activity": new Date("9/13/2017"), "next_activity": new Date("3/13/2019"), "deals_won": 5, "deals_lost": 20, "deals_pending": 6, "deals_total": 31, "ratio": 2, "estimated_sales": 348222, "actual_sales": 862935, "tags": "financial" }, + { "id": 799745855, "avatar": "assets/images/men/34.jpg", "name": "Bogart Maben", "email": "bmaben9n@bbc.co.uk", "company": "Meevee", "position": "Statistician I", "work_phone": "+1-702-699-1784", "mobile_phone": "+1-503-152-7927", "fax": "+1-312-458-8183", "street": "276 Fuller Court", "city": "Las Vegas", "post_code": 89145, "state": "NV", "country": "United States", "referred_by": "Filia Whettleton", "created_on": new Date("11/2/2017"), "birthday": new Date("3/25/1990"), "last_activity": new Date("11/12/2017"), "next_activity": new Date("9/12/2018"), "deals_won": 12, "deals_lost": 19, "deals_pending": 29, "deals_total": 60, "ratio": 39, "estimated_sales": 1550398, "actual_sales": 1445160, "tags": "demo, financial" }, + { "id": 79591490, "avatar": "assets/images/men/60.jpg", "name": "Wells Chant", "email": "wchant9o@howstuffworks.com", "company": "Aimbo", "position": "Associate Professor", "work_phone": "+1-520-870-7221", "mobile_phone": "+1-812-588-3449", "fax": "+1-717-152-7931", "street": "9 Burrows Plaza", "city": "Tucson", "post_code": 85737, "state": "AZ", "country": "United States", "referred_by": "Ester Deaville", "created_on": new Date("8/14/2017"), "birthday": new Date("5/16/1992"), "last_activity": new Date("8/19/2017"), "next_activity": new Date("4/19/2019"), "deals_won": 0, "deals_lost": 1, "deals_pending": 20, "deals_total": 21, "ratio": 0, "estimated_sales": 2789160, "actual_sales": 0, "tags": "pro, pharmaceutical" }, + { "id": 326443068, "avatar": "assets/images/women/5.jpg", "name": "Dale Erickson", "email": "derickson9p@washingtonpost.com", "company": "Flashpoint", "position": "Media Manager II", "work_phone": "+1-720-337-9509", "mobile_phone": "+1-952-898-1795", "fax": "+1-806-699-8632", "street": "67 Bluejay Way", "city": "Denver", "post_code": 80249, "state": "CO", "country": "United States", "referred_by": "Samaria Pockey", "created_on": new Date("8/15/2017"), "birthday": new Date("8/16/1998"), "last_activity": new Date("9/10/2017"), "next_activity": new Date("8/10/2018"), "deals_won": 9, "deals_lost": 25, "deals_pending": 26, "deals_total": 60, "ratio": 26, "estimated_sales": 4249700, "actual_sales": 1603935, "tags": "pro, engineering" }, + { "id": 935239637, "avatar": "assets/images/women/63.jpg", "name": "Sara Swatheridge", "email": "sswatheridge9q@mysql.com", "company": "Tagopia", "position": "Research Nurse", "work_phone": "+1-317-257-1944", "mobile_phone": "+1-325-439-7267", "fax": "+1-402-390-3633", "street": "45 Sugar Hill", "city": "Indianapolis", "post_code": 46254, "state": "IN", "country": "United States", "referred_by": "Harrietta Nancekivell", "created_on": new Date("9/18/2017"), "birthday": new Date("11/16/2001"), "last_activity": new Date("10/10/2017"), "next_activity": new Date("4/10/2019"), "deals_won": 4, "deals_lost": 27, "deals_pending": 19, "deals_total": 50, "ratio": 13, "estimated_sales": 1781231, "actual_sales": 703548, "tags": "cold, retail" }, + { "id": 261622406, "avatar": "assets/images/men/88.jpg", "name": "Chuck Quayle", "email": "cquayle9r@spiegel.de", "company": "Zooveo", "position": "Staff Accountant II", "work_phone": "+1-484-239-2963", "mobile_phone": "+1-804-345-5367", "fax": "+1-410-102-9953", "street": "9554 Brickson Park Court", "city": "Bethlehem", "post_code": 18018, "state": "PA", "country": "United States", "referred_by": "Jaimie Grombridge", "created_on": new Date("2/22/2018"), "birthday": new Date("11/5/2000"), "last_activity": new Date("3/13/2018"), "next_activity": new Date("1/13/2020"), "deals_won": 18, "deals_lost": 4, "deals_pending": 17, "deals_total": 39, "ratio": 82, "estimated_sales": 1541492, "actual_sales": 1528560, "tags": "hot, engineering" }, + { "id": 746073710, "avatar": "assets/images/men/27.jpg", "name": "Mac Busen", "email": "mbusen9s@mashable.com", "company": "Blogtags", "position": "Accounting Assistant III", "work_phone": "+1-801-272-8294", "mobile_phone": "+1-432-192-6208", "fax": "+1-915-221-2193", "street": "39 1st Junction", "city": "Salt Lake City", "post_code": 84135, "state": "UT", "country": "United States", "referred_by": "Merry Ramirez", "created_on": new Date("10/23/2017"), "birthday": new Date("4/3/1982"), "last_activity": new Date("11/5/2017"), "next_activity": new Date("10/5/2018"), "deals_won": 24, "deals_lost": 12, "deals_pending": 30, "deals_total": 66, "ratio": 67, "estimated_sales": 1647300, "actual_sales": 3980784, "tags": "pro, medical" }, + { "id": 791639379, "avatar": "assets/images/women/85.jpg", "name": "Marna English", "email": "menglish9t@hexun.com", "company": "Npath", "position": "Assistant Manager", "work_phone": "+1-816-607-1256", "mobile_phone": "+1-314-285-6979", "fax": "+1-406-274-5859", "street": "2760 Del Sol Circle", "city": "Kansas City", "post_code": 64130, "state": "MO", "country": "United States", "referred_by": "Willdon Spottswood", "created_on": new Date("1/10/2017"), "birthday": new Date("2/26/1980"), "last_activity": new Date("1/21/2017"), "next_activity": new Date("11/21/2017"), "deals_won": 7, "deals_lost": 2, "deals_pending": 19, "deals_total": 28, "ratio": 78, "estimated_sales": 3728978, "actual_sales": 1196573, "tags": "cold, engineering" }, + { "id": 494706105, "avatar": "assets/images/men/19.jpg", "name": "Dallon Matys", "email": "dmatys9u@yellowbook.com", "company": "Quatz", "position": "Developer IV", "work_phone": "+1-706-141-4546", "mobile_phone": "+1-832-678-1735", "fax": "+1-360-562-5036", "street": "439 Cascade Park", "city": "Cumming", "post_code": 30130, "state": "GA", "country": "United States", "referred_by": "Sigismund Rohfsen", "created_on": new Date("2/26/2018"), "birthday": new Date("5/8/1999"), "last_activity": new Date("3/12/2018"), "next_activity": new Date("11/12/2019"), "deals_won": 20, "deals_lost": 28, "deals_pending": 15, "deals_total": 63, "ratio": 42, "estimated_sales": 1230180, "actual_sales": 2199080, "tags": "subscriber, engineering" }, + { "id": 741289382, "avatar": "assets/images/women/85.jpg", "name": "Micheline Tabb", "email": "mtabb9v@sourceforge.net", "company": "Skimia", "position": "Software Test Engineer II", "work_phone": "+1-702-381-8025", "mobile_phone": "+1-313-984-7883", "fax": "+1-808-160-2654", "street": "2523 Hayes Street", "city": "North Las Vegas", "post_code": 89087, "state": "NV", "country": "United States", "referred_by": "Malynda Marrows", "created_on": new Date("5/2/2017"), "birthday": new Date("9/30/1996"), "last_activity": new Date("5/26/2017"), "next_activity": new Date("5/26/2019"), "deals_won": 19, "deals_lost": 17, "deals_pending": 11, "deals_total": 47, "ratio": 53, "estimated_sales": 1572571, "actual_sales": 2601841, "tags": "pro, pharmaceutical" }, + { "id": 87960722, "avatar": "assets/images/men/7.jpg", "name": "Foster Bardsley", "email": "fbardsley9w@issuu.com", "company": "Quatz", "position": "Marketing Manager", "work_phone": "+1-910-252-5914", "mobile_phone": "+1-432-367-8933", "fax": "+1-513-173-0145", "street": "19902 Colorado Point", "city": "Wilmington", "post_code": 28410, "state": "NC", "country": "United States", "referred_by": "Desmund Paslow", "created_on": new Date("12/11/2017"), "birthday": new Date("7/27/1971"), "last_activity": new Date("12/29/2017"), "next_activity": new Date("3/29/2019"), "deals_won": 5, "deals_lost": 28, "deals_pending": 10, "deals_total": 43, "ratio": 15, "estimated_sales": 1017590, "actual_sales": 574360, "tags": "hot, retail" }, + { "id": 163100113, "avatar": "assets/images/men/38.jpg", "name": "Niko Rotham", "email": "nrotham9x@netlog.com", "company": "Flashdog", "position": "Internal Auditor", "work_phone": "+1-319-749-2061", "mobile_phone": "+1-203-706-9252", "fax": "+1-267-950-6170", "street": "461 Leroy Junction", "city": "Cedar Rapids", "post_code": 52410, "state": "IA", "country": "United States", "referred_by": "Blair Cochern", "created_on": new Date("4/16/2017"), "birthday": new Date("11/19/1983"), "last_activity": new Date("4/21/2017"), "next_activity": new Date("4/21/2019"), "deals_won": 4, "deals_lost": 27, "deals_pending": 23, "deals_total": 54, "ratio": 13, "estimated_sales": 1520829, "actual_sales": 208320, "tags": "subscriber, medical" }, + { "id": 259122892, "avatar": "assets/images/women/60.jpg", "name": "Theresina Marquot", "email": "tmarquot9y@wikipedia.org", "company": "Mycat", "position": "Accountant II", "work_phone": "+1-816-903-8738", "mobile_phone": "+1-512-707-2921", "fax": "+1-361-826-2544", "street": "1 Sauthoff Place", "city": "Kansas City", "post_code": 64190, "state": "MO", "country": "United States", "referred_by": "Becky Gabitis", "created_on": new Date("11/7/2017"), "birthday": new Date("9/13/1993"), "last_activity": new Date("11/26/2017"), "next_activity": new Date("7/26/2019"), "deals_won": 21, "deals_lost": 18, "deals_pending": 24, "deals_total": 63, "ratio": 54, "estimated_sales": 1427424, "actual_sales": 3357060, "tags": "pro, construction" }, + { "id": 35395381, "avatar": "assets/images/women/89.jpg", "name": "Marisa Schreurs", "email": "mschreurs9z@squarespace.com", "company": "Geba", "position": "Web Designer IV", "work_phone": "+1-915-125-9132", "mobile_phone": "+1-909-403-6842", "fax": "+1-909-706-6973", "street": "7 Dapin Place", "city": "El Paso", "post_code": 88558, "state": "TX", "country": "United States", "referred_by": "Zilvia Clere", "created_on": new Date("5/21/2017"), "birthday": new Date("7/11/1976"), "last_activity": new Date("6/17/2017"), "next_activity": new Date("2/17/2019"), "deals_won": 13, "deals_lost": 19, "deals_pending": 27, "deals_total": 59, "ratio": 41, "estimated_sales": 3966678, "actual_sales": 1797380, "tags": "medical" }, + { "id": 334621474, "avatar": "assets/images/women/65.jpg", "name": "Jordana Whiskin", "email": "jwhiskina0@issuu.com", "company": "Nlounge", "position": "Director of Sales", "work_phone": "+1-419-891-0729", "mobile_phone": "+1-571-146-3287", "fax": "+1-682-635-3080", "street": "9454 Golf Trail", "city": "Toledo", "post_code": 43605, "state": "OH", "country": "United States", "referred_by": "Ilse Shayler", "created_on": new Date("3/29/2017"), "birthday": new Date("2/28/1990"), "last_activity": new Date("4/7/2017"), "next_activity": new Date("2/7/2019"), "deals_won": 19, "deals_lost": 23, "deals_pending": 13, "deals_total": 55, "ratio": 45, "estimated_sales": 1181427, "actual_sales": 3766446, "tags": "warm, pharmaceutical" }, + { "id": 276493415, "avatar": "assets/images/men/55.jpg", "name": "Adlai Cromett", "email": "acrometta1@pen.io", "company": "Buzzster", "position": "Marketing Manager", "work_phone": "+1-916-766-0220", "mobile_phone": "+1-203-994-3070", "fax": "+1-305-250-1390", "street": "98601 Rockefeller Street", "city": "Sacramento", "post_code": 94273, "state": "CA", "country": "United States", "referred_by": "Clarie McCrystal", "created_on": new Date("1/3/2017"), "birthday": new Date("12/22/1978"), "last_activity": new Date("1/30/2017"), "next_activity": new Date("5/30/2017"), "deals_won": 29, "deals_lost": 12, "deals_pending": 1, "deals_total": 42, "ratio": 71, "estimated_sales": 78688, "actual_sales": 2716720, "tags": "medical" }, + { "id": 247761381, "avatar": "assets/images/men/68.jpg", "name": "Arv Chomicz", "email": "achomicza2@ucsd.edu", "company": "Twitterlist", "position": "Health Coach III", "work_phone": "+1-559-190-5923", "mobile_phone": "+1-414-741-6001", "fax": "+1-559-936-9861", "street": "725 Lillian Crossing", "city": "Fresno", "post_code": 93778, "state": "CA", "country": "United States", "referred_by": "Kleon Slocum", "created_on": new Date("3/20/2017"), "birthday": new Date("4/4/1974"), "last_activity": new Date("3/30/2017"), "next_activity": new Date("5/30/2018"), "deals_won": 4, "deals_lost": 2, "deals_pending": 19, "deals_total": 25, "ratio": 67, "estimated_sales": 3450115, "actual_sales": 613324, "tags": "cool, pharmaceutical" }, + { "id": 915419891, "avatar": "assets/images/women/76.jpg", "name": "Shayne Brearton", "email": "sbreartona3@alibaba.com", "company": "Bubblemix", "position": "Professor", "work_phone": "+1-516-922-7029", "mobile_phone": "+1-253-266-9634", "fax": "+1-503-314-0535", "street": "60918 Oriole Hill", "city": "Hicksville", "post_code": 11854, "state": "NY", "country": "United States", "referred_by": "Nichols Sarjant", "created_on": new Date("7/20/2017"), "birthday": new Date("9/14/1979"), "last_activity": new Date("8/7/2017"), "next_activity": new Date("12/7/2017"), "deals_won": 28, "deals_lost": 12, "deals_pending": 4, "deals_total": 44, "ratio": 7, "estimated_sales": 434144, "actual_sales": 5445356, "tags": "hot, medical" }, + { "id": 60912701, "avatar": "assets/images/women/7.jpg", "name": "Perri Craney", "email": "pcraneya4@feedburner.com", "company": "Tagfeed", "position": "Nurse", "work_phone": "+1-904-690-7239", "mobile_phone": "+1-225-266-4885", "fax": "+1-225-321-4987", "street": "30 Bayside Parkway", "city": "Jacksonville", "post_code": 32220, "state": "FL", "country": "United States", "referred_by": "Miquela Schimonek", "created_on": new Date("8/24/2017"), "birthday": new Date("12/15/1979"), "last_activity": new Date("8/29/2017"), "next_activity": new Date("5/29/2019"), "deals_won": 18, "deals_lost": 16, "deals_pending": 0, "deals_total": 34, "ratio": 53, "estimated_sales": 0, "actual_sales": 1251972, "tags": "engineering" }, + { "id": 831883361, "avatar": "assets/images/women/66.jpg", "name": "Deane Killby", "email": "dkillbya5@hatena.ne.jp", "company": "Realpoint", "position": "Electrical Engineer", "work_phone": "+1-202-736-8811", "mobile_phone": "+1-862-758-2687", "fax": "+1-205-820-7469", "street": "75 Dorton Plaza", "city": "Washington", "post_code": 20436, "state": "DC", "country": "United States", "referred_by": "Diandra McGirl", "created_on": new Date("11/5/2017"), "birthday": new Date("1/16/2001"), "last_activity": new Date("11/20/2017"), "next_activity": new Date("2/20/2019"), "deals_won": 16, "deals_lost": 30, "deals_pending": 30, "deals_total": 76, "ratio": 35, "estimated_sales": 3629610, "actual_sales": 2184096, "tags": "subscriber, financial" }, + { "id": 629884137, "avatar": "assets/images/men/34.jpg", "name": "Randy Norman", "email": "rnormana6@g.co", "company": "Vimbo", "position": "General Manager", "work_phone": "+1-909-393-2379", "mobile_phone": "+1-540-371-8220", "fax": "+1-817-582-8064", "street": "4 North Point", "city": "San Bernardino", "post_code": 92424, "state": "CA", "country": "United States", "referred_by": "Berna Crampsy", "created_on": new Date("11/22/2017"), "birthday": new Date("6/22/1982"), "last_activity": new Date("11/26/2017"), "next_activity": new Date("10/26/2018"), "deals_won": 30, "deals_lost": 8, "deals_pending": 7, "deals_total": 45, "ratio": 79, "estimated_sales": 1258432, "actual_sales": 1861560, "tags": "warm, engineering" }, + { "id": 608359162, "avatar": "assets/images/men/5.jpg", "name": "Saw Yonge", "email": "syongea7@oaic.gov.au", "company": "Yodoo", "position": "Recruiting Manager", "work_phone": "+1-561-728-6181", "mobile_phone": "+1-309-440-2622", "fax": "+1-402-203-3646", "street": "47 Bellgrove Alley", "city": "West Palm Beach", "post_code": 33416, "state": "FL", "country": "United States", "referred_by": "Odo Valerio", "created_on": new Date("7/30/2017"), "birthday": new Date("11/19/1971"), "last_activity": new Date("8/26/2017"), "next_activity": new Date("2/26/2019"), "deals_won": 14, "deals_lost": 5, "deals_pending": 27, "deals_total": 46, "ratio": 74, "estimated_sales": 5066334, "actual_sales": 2632630, "tags": "cold, pharmaceutical" }, + { "id": 858699289, "avatar": "assets/images/men/55.jpg", "name": "Enrique Sturdey", "email": "esturdeya8@amazon.co.uk", "company": "Buzzbean", "position": "Design Engineer", "work_phone": "+1-571-394-4290", "mobile_phone": "+1-804-832-2633", "fax": "+1-609-205-9194", "street": "5 Nevada Crossing", "city": "Arlington", "post_code": 22205, "state": "VA", "country": "United States", "referred_by": "Allis Sebring", "created_on": new Date("2/11/2018"), "birthday": new Date("6/24/1979"), "last_activity": new Date("3/9/2018"), "next_activity": new Date("3/9/2019"), "deals_won": 1, "deals_lost": 16, "deals_pending": 1, "deals_total": 18, "ratio": 6, "estimated_sales": 107254, "actual_sales": 128329, "tags": "demo, pharmaceutical" }, + { "id": 981396346, "avatar": "assets/images/women/98.jpg", "name": "Gwenore Emburey", "email": "gembureya9@freewebs.com", "company": "Photojam", "position": "Geologist III", "work_phone": "+1-202-774-7486", "mobile_phone": "+1-202-809-3091", "fax": "+1-561-326-6909", "street": "76979 Quincy Way", "city": "Laurel", "post_code": 20709, "state": "MD", "country": "United States", "referred_by": "Hildagarde Kennewell", "created_on": new Date("4/11/2018"), "birthday": new Date("11/12/1999"), "last_activity": new Date("4/13/2018"), "next_activity": new Date("12/13/2019"), "deals_won": 25, "deals_lost": 25, "deals_pending": 17, "deals_total": 67, "ratio": 5, "estimated_sales": 2329204, "actual_sales": 3610200, "tags": "pro, construction" }, + { "id": 110733817, "avatar": "assets/images/women/27.jpg", "name": "Pennie Gouth", "email": "pgouthaa@multiply.com", "company": "Fivespan", "position": "Technical Writer", "work_phone": "+1-570-681-5318", "mobile_phone": "+1-504-335-5302", "fax": "+1-407-808-8912", "street": "996 Milwaukee Pass", "city": "Wilkes Barre", "post_code": 18768, "state": "PA", "country": "United States", "referred_by": "Meggie Gaudon", "created_on": new Date("2/11/2018"), "birthday": new Date("1/5/1994"), "last_activity": new Date("3/6/2018"), "next_activity": new Date("4/6/2018"), "deals_won": 1, "deals_lost": 14, "deals_pending": 27, "deals_total": 42, "ratio": 7, "estimated_sales": 4828221, "actual_sales": 120508, "tags": "cool, construction" }, + { "id": 168966906, "avatar": "assets/images/women/38.jpg", "name": "Eleanora Anlay", "email": "eanlayab@harvard.edu", "company": "Tagopia", "position": "Community Outreach Specialist", "work_phone": "+1-202-170-0676", "mobile_phone": "+1-808-611-1113", "fax": "+1-702-385-9540", "street": "9 Pond Lane", "city": "Washington", "post_code": 20397, "state": "DC", "country": "United States", "referred_by": "Chico Tompkin", "created_on": new Date("4/4/2017"), "birthday": new Date("10/13/1999"), "last_activity": new Date("4/24/2017"), "next_activity": new Date("2/24/2019"), "deals_won": 29, "deals_lost": 16, "deals_pending": 18, "deals_total": 63, "ratio": 64, "estimated_sales": 3334734, "actual_sales": 4911875, "tags": "hot, medical" }, + { "id": 44231428, "avatar": "assets/images/men/78.jpg", "name": "Alleyn Osbaldstone", "email": "aosbaldstoneac@is.gd", "company": "Zoozzy", "position": "Biostatistician I", "work_phone": "+1-402-881-8206", "mobile_phone": "+1-601-944-9404", "fax": "+1-402-969-2168", "street": "16 Anniversary Junction", "city": "Lincoln", "post_code": 68583, "state": "NE", "country": "United States", "referred_by": "Tim Bowes", "created_on": new Date("7/10/2017"), "birthday": new Date("7/12/1986"), "last_activity": new Date("7/28/2017"), "next_activity": new Date("7/28/2018"), "deals_won": 27, "deals_lost": 7, "deals_pending": 4, "deals_total": 38, "ratio": 79, "estimated_sales": 689176, "actual_sales": 1534086, "tags": "warm, medical" }, + { "id": 848133048, "avatar": "assets/images/women/99.jpg", "name": "Mariellen Creavan", "email": "mcreavanad@dropbox.com", "company": "Roomm", "position": "Software Consultant", "work_phone": "+1-828-979-1729", "mobile_phone": "+1-972-822-6530", "fax": "+1-206-742-8547", "street": "384 Pawling Hill", "city": "Asheville", "post_code": 28805, "state": "NC", "country": "United States", "referred_by": "Sigismondo Drake", "created_on": new Date("2/22/2017"), "birthday": new Date("9/13/1999"), "last_activity": new Date("3/6/2017"), "next_activity": new Date("11/6/2017"), "deals_won": 25, "deals_lost": 7, "deals_pending": 24, "deals_total": 56, "ratio": 78, "estimated_sales": 1327296, "actual_sales": 1596275, "tags": "subscriber, engineering" }, + { "id": 355778038, "avatar": "assets/images/men/87.jpg", "name": "Gallagher Rodda", "email": "groddaae@dell.com", "company": "Quatz", "position": "Occupational Therapist", "work_phone": "+1-509-960-2792", "mobile_phone": "+1-404-511-3590", "fax": "+1-561-365-1346", "street": "41489 Heffernan Court", "city": "Spokane", "post_code": 99252, "state": "WA", "country": "United States", "referred_by": "Ginger Cutriss", "created_on": new Date("4/10/2018"), "birthday": new Date("2/3/1976"), "last_activity": new Date("5/3/2018"), "next_activity": new Date("7/3/2018"), "deals_won": 30, "deals_lost": 10, "deals_pending": 13, "deals_total": 53, "ratio": 75, "estimated_sales": 1915654, "actual_sales": 4882050, "tags": "pharmaceutical" }, + { "id": 545952597, "avatar": "assets/images/women/16.jpg", "name": "Ardyth Bonnaire", "email": "abonnaireaf@blog.com", "company": "Gabvine", "position": "Administrative Officer", "work_phone": "+1-919-287-4746", "mobile_phone": "+1-469-986-3624", "fax": "+1-303-562-5034", "street": "5627 Loftsgordon Point", "city": "Raleigh", "post_code": 27626, "state": "NC", "country": "United States", "referred_by": "Cally Bortolussi", "created_on": new Date("5/4/2017"), "birthday": new Date("9/27/1984"), "last_activity": new Date("5/9/2017"), "next_activity": new Date("1/9/2018"), "deals_won": 25, "deals_lost": 14, "deals_pending": 11, "deals_total": 50, "ratio": 64, "estimated_sales": 2169189, "actual_sales": 3741525, "tags": "subscriber, medical" }, + { "id": 997387852, "avatar": "assets/images/men/11.jpg", "name": "Ian Woolner", "email": "iwoolnerag@pagesperso-orange.fr", "company": "Mudo", "position": "Marketing Manager", "work_phone": "+1-432-123-8849", "mobile_phone": "+1-205-508-8859", "fax": "+1-310-693-8286", "street": "976 Dixon Junction", "city": "Odessa", "post_code": 79764, "state": "TX", "country": "United States", "referred_by": "Iver Iddison", "created_on": new Date("2/16/2017"), "birthday": new Date("11/26/1984"), "last_activity": new Date("3/4/2017"), "next_activity": new Date("9/4/2018"), "deals_won": 11, "deals_lost": 8, "deals_pending": 6, "deals_total": 25, "ratio": 58, "estimated_sales": 724164, "actual_sales": 1561021, "tags": "warm, retail" }, + { "id": 796268762, "avatar": "assets/images/men/26.jpg", "name": "Jarib Onions", "email": "jonionsah@shop-pro.jp", "company": "Thoughtblab", "position": "GIS Technical Architect", "work_phone": "+1-708-232-2901", "mobile_phone": "+1-949-209-8665", "fax": "+1-805-627-8710", "street": "9437 Eastlawn Lane", "city": "Schaumburg", "post_code": 60193, "state": "IL", "country": "United States", "referred_by": "Sherlock Bootyman", "created_on": new Date("1/1/2017"), "birthday": new Date("12/1/1989"), "last_activity": new Date("1/27/2017"), "next_activity": new Date("1/27/2018"), "deals_won": 0, "deals_lost": 2, "deals_pending": 13, "deals_total": 15, "ratio": 0, "estimated_sales": 1891760, "actual_sales": 0, "tags": "warm" }, + { "id": 803558887, "avatar": "assets/images/women/30.jpg", "name": "Scarlet Giblin", "email": "sgiblinai@msu.edu", "company": "Tazzy", "position": "Environmental Specialist", "work_phone": "+1-408-140-8834", "mobile_phone": "+1-912-642-9369", "fax": "+1-304-765-8378", "street": "4 Nevada Parkway", "city": "San Jose", "post_code": 95194, "state": "CA", "country": "United States", "referred_by": "Aura Lease", "created_on": new Date("4/12/2017"), "birthday": new Date("7/20/1991"), "last_activity": new Date("5/4/2017"), "next_activity": new Date("10/4/2018"), "deals_won": 15, "deals_lost": 2, "deals_pending": 11, "deals_total": 28, "ratio": 88, "estimated_sales": 1219449, "actual_sales": 2505255, "tags": "subscriber, financial" }, + { "id": 186726855, "avatar": "assets/images/women/80.jpg", "name": "Odella Brotherheed", "email": "obrotherheedaj@usatoday.com", "company": "Gigabox", "position": "Account Representative III", "work_phone": "+1-210-279-7801", "mobile_phone": "+1-205-306-5143", "fax": "+1-915-546-6657", "street": "32 Muir Hill", "city": "San Antonio", "post_code": 78220, "state": "TX", "country": "United States", "referred_by": "Ali Porkiss", "created_on": new Date("5/2/2017"), "birthday": new Date("11/2/1973"), "last_activity": new Date("5/28/2017"), "next_activity": new Date("8/28/2017"), "deals_won": 12, "deals_lost": 28, "deals_pending": 19, "deals_total": 59, "ratio": 3, "estimated_sales": 1846287, "actual_sales": 1583352, "tags": "cold, financial" }, + { "id": 279330489, "avatar": "assets/images/women/9.jpg", "name": "Babara Mathivat", "email": "bmathivatak@storify.com", "company": "Rooxo", "position": "Sales Associate", "work_phone": "+1-520-336-0168", "mobile_phone": "+1-573-162-6486", "fax": "+1-915-981-7377", "street": "45364 Union Hill", "city": "Phoenix", "post_code": 85025, "state": "AZ", "country": "United States", "referred_by": "Tam David", "created_on": new Date("4/30/2017"), "birthday": new Date("10/30/2001"), "last_activity": new Date("5/24/2017"), "next_activity": new Date("4/24/2018"), "deals_won": 10, "deals_lost": 25, "deals_pending": 15, "deals_total": 50, "ratio": 29, "estimated_sales": 1782825, "actual_sales": 1868660, "tags": "retail" }, + { "id": 823731807, "avatar": "assets/images/men/4.jpg", "name": "Gaven Cluet", "email": "gcluetal@latimes.com", "company": "Flipbug", "position": "Human Resources Manager", "work_phone": "+1-423-260-6195", "mobile_phone": "+1-717-451-5437", "fax": "+1-203-602-1682", "street": "9005 Emmet Crossing", "city": "Chattanooga", "post_code": 37416, "state": "TN", "country": "United States", "referred_by": "Nerta McOwan", "created_on": new Date("9/5/2017"), "birthday": new Date("12/2/1990"), "last_activity": new Date("9/22/2017"), "next_activity": new Date("12/22/2018"), "deals_won": 6, "deals_lost": 12, "deals_pending": 1, "deals_total": 19, "ratio": 33, "estimated_sales": 107416, "actual_sales": 894870, "tags": "hot, medical" }, + { "id": 655466928, "avatar": "assets/images/men/62.jpg", "name": "Jonathon Phelipeaux", "email": "jphelipeauxam@eventbrite.com", "company": "Aimbo", "position": "Business Systems Development Analyst", "work_phone": "+1-610-227-8675", "mobile_phone": "+1-901-358-5094", "fax": "+1-601-916-0135", "street": "79 Nelson Drive", "city": "Allentown", "post_code": 18105, "state": "PA", "country": "United States", "referred_by": "Ange Iacomo", "created_on": new Date("10/6/2017"), "birthday": new Date("10/4/1972"), "last_activity": new Date("10/24/2017"), "next_activity": new Date("2/24/2019"), "deals_won": 24, "deals_lost": 9, "deals_pending": 30, "deals_total": 63, "ratio": 73, "estimated_sales": 5766090, "actual_sales": 4497288, "tags": "hot, retail" }, + { "id": 306347563, "avatar": "assets/images/women/56.jpg", "name": "Esta Girvan", "email": "egirvanan@craigslist.org", "company": "Voonix", "position": "Information Systems Manager", "work_phone": "+1-918-935-8021", "mobile_phone": "+1-517-371-4625", "fax": "+1-425-843-2585", "street": "8 Scott Hill", "city": "Tulsa", "post_code": 74156, "state": "OK", "country": "United States", "referred_by": "Chryste Neljes", "created_on": new Date("5/7/2017"), "birthday": new Date("6/30/1983"), "last_activity": new Date("5/31/2017"), "next_activity": new Date("2/28/2019"), "deals_won": 0, "deals_lost": 6, "deals_pending": 1, "deals_total": 7, "ratio": 0, "estimated_sales": 165478, "actual_sales": 0, "tags": "cold, pharmaceutical" }, + { "id": 415972421, "avatar": "assets/images/men/11.jpg", "name": "Laird Brewin", "email": "lbrewinao@omniture.com", "company": "Dynava", "position": "Occupational Therapist", "work_phone": "+1-682-986-1849", "mobile_phone": "+1-303-325-8320", "fax": "+1-201-299-9757", "street": "944 Scott Plaza", "city": "Fort Worth", "post_code": 76198, "state": "TX", "country": "United States", "referred_by": "Dare Steanson", "created_on": new Date("12/9/2017"), "birthday": new Date("10/30/1994"), "last_activity": new Date("12/29/2017"), "next_activity": new Date("2/28/2018"), "deals_won": 26, "deals_lost": 7, "deals_pending": 24, "deals_total": 57, "ratio": 79, "estimated_sales": 4014936, "actual_sales": 4360902, "tags": "warm, pharmaceutical" }, + { "id": 248153248, "avatar": "assets/images/women/9.jpg", "name": "Kailey Ebdon", "email": "kebdonap@wix.com", "company": "Lajo", "position": "Human Resources Assistant IV", "work_phone": "+1-304-370-8899", "mobile_phone": "+1-405-607-6094", "fax": "+1-318-588-9126", "street": "3126 Pennsylvania Junction", "city": "Charleston", "post_code": 25313, "state": "WV", "country": "United States", "referred_by": "Leda Thurman", "created_on": new Date("4/19/2017"), "birthday": new Date("1/25/1982"), "last_activity": new Date("4/22/2017"), "next_activity": new Date("12/22/2017"), "deals_won": 8, "deals_lost": 10, "deals_pending": 25, "deals_total": 43, "ratio": 44, "estimated_sales": 3145750, "actual_sales": 1283536, "tags": "cool, construction" }, + { "id": 565107723, "avatar": "assets/images/women/86.jpg", "name": "Eugenia Raithmill", "email": "eraithmillaq@t.co", "company": "Zoonoodle", "position": "Design Engineer", "work_phone": "+1-916-118-6343", "mobile_phone": "+1-209-245-3556", "fax": "+1-415-431-9236", "street": "481 Grover Pass", "city": "Sacramento", "post_code": 95818, "state": "CA", "country": "United States", "referred_by": "Cordelia Mannie", "created_on": new Date("8/12/2017"), "birthday": new Date("5/30/1975"), "last_activity": new Date("9/2/2017"), "next_activity": new Date("6/2/2018"), "deals_won": 27, "deals_lost": 15, "deals_pending": 25, "deals_total": 67, "ratio": 64, "estimated_sales": 4854200, "actual_sales": 3840399, "tags": "cool, pharmaceutical" }, + { "id": 174012602, "avatar": "assets/images/men/47.jpg", "name": "Wakefield Pyburn", "email": "wpyburnar@pinterest.com", "company": "Aivee", "position": "Software Engineer II", "work_phone": "+1-520-985-5838", "mobile_phone": "+1-202-368-0279", "fax": "+1-915-185-4286", "street": "860 Hazelcrest Drive", "city": "Tucson", "post_code": 85710, "state": "AZ", "country": "United States", "referred_by": "Kessia Mancktelow", "created_on": new Date("2/12/2018"), "birthday": new Date("9/28/1976"), "last_activity": new Date("3/4/2018"), "next_activity": new Date("2/4/2019"), "deals_won": 29, "deals_lost": 3, "deals_pending": 20, "deals_total": 52, "ratio": 91, "estimated_sales": 2578880, "actual_sales": 4731031, "tags": "pro, financial" }, + { "id": 352405080, "avatar": "assets/images/men/75.jpg", "name": "Symon Wybron", "email": "swybronas@sun.com", "company": "Jaxworks", "position": "Desktop Support Technician", "work_phone": "+1-434-116-1644", "mobile_phone": "+1-410-413-6234", "fax": "+1-816-519-0912", "street": "503 Colorado Court", "city": "Lynchburg", "post_code": 24503, "state": "VA", "country": "United States", "referred_by": "Gizela Officer", "created_on": new Date("2/20/2017"), "birthday": new Date("6/24/1979"), "last_activity": new Date("2/26/2017"), "next_activity": new Date("6/26/2018"), "deals_won": 30, "deals_lost": 9, "deals_pending": 1, "deals_total": 40, "ratio": 77, "estimated_sales": 108931, "actual_sales": 3545880, "tags": "pro, financial" }, + { "id": 206882678, "avatar": "assets/images/women/76.jpg", "name": "Atlanta Semrad", "email": "asemradat@earthlink.net", "company": "Tagtune", "position": "Assistant Manager", "work_phone": "+1-804-761-8123", "mobile_phone": "+1-515-129-1843", "fax": "+1-910-189-2085", "street": "1 Pankratz Plaza", "city": "Richmond", "post_code": 23225, "state": "VA", "country": "United States", "referred_by": "Kaitlynn Botting", "created_on": new Date("11/15/2017"), "birthday": new Date("4/24/1980"), "last_activity": new Date("11/23/2017"), "next_activity": new Date("11/23/2018"), "deals_won": 13, "deals_lost": 25, "deals_pending": 4, "deals_total": 42, "ratio": 34, "estimated_sales": 299488, "actual_sales": 843648, "tags": "subscriber, financial" }, + { "id": 333962964, "avatar": "assets/images/men/45.jpg", "name": "Stanley Melato", "email": "smelatoau@fotki.com", "company": "Brainverse", "position": "Desktop Support Technician", "work_phone": "+1-202-350-7395", "mobile_phone": "+1-520-138-3192", "fax": "+1-508-243-8680", "street": "81722 Spohn Circle", "city": "Washington", "post_code": 20540, "state": "DC", "country": "United States", "referred_by": "Ferdinande Flintoft", "created_on": new Date("7/18/2017"), "birthday": new Date("10/15/1990"), "last_activity": new Date("7/26/2017"), "next_activity": new Date("10/26/2018"), "deals_won": 13, "deals_lost": 23, "deals_pending": 17, "deals_total": 53, "ratio": 36, "estimated_sales": 2473653, "actual_sales": 2065349, "tags": "demo, financial" }, + { "id": 348573592, "avatar": "assets/images/women/48.jpg", "name": "Jaine Schustl", "email": "jschustlav@utexas.edu", "company": "Gigazoom", "position": "Food Chemist", "work_phone": "+1-518-698-5059", "mobile_phone": "+1-208-514-7762", "fax": "+1-405-380-5139", "street": "3 Merry Street", "city": "Albany", "post_code": 12232, "state": "NY", "country": "United States", "referred_by": "Sonni Cancutt", "created_on": new Date("9/12/2017"), "birthday": new Date("8/13/1992"), "last_activity": new Date("9/28/2017"), "next_activity": new Date("6/28/2019"), "deals_won": 16, "deals_lost": 7, "deals_pending": 13, "deals_total": 36, "ratio": 7, "estimated_sales": 2002221, "actual_sales": 2596208, "tags": "pro, engineering" }, + { "id": 157148389, "avatar": "assets/images/women/37.jpg", "name": "Karon Mendez", "email": "kmendezaw@icq.com", "company": "Lajo", "position": "VP Accounting", "work_phone": "+1-304-315-6698", "mobile_phone": "+1-816-507-9978", "fax": "+1-262-680-8891", "street": "2305 Anthes Road", "city": "Charleston", "post_code": 25389, "state": "WV", "country": "United States", "referred_by": "Kaia Matejka", "created_on": new Date("5/29/2017"), "birthday": new Date("4/6/1988"), "last_activity": new Date("6/14/2017"), "next_activity": new Date("3/14/2019"), "deals_won": 20, "deals_lost": 25, "deals_pending": 10, "deals_total": 55, "ratio": 44, "estimated_sales": 1231100, "actual_sales": 2020420, "tags": "cold, engineering" }, + { "id": 136073623, "avatar": "assets/images/men/39.jpg", "name": "Geordie Molden", "email": "gmoldenax@t.co", "company": "Dabfeed", "position": "Web Developer II", "work_phone": "+1-915-660-3383", "mobile_phone": "+1-561-498-7363", "fax": "+1-682-874-7103", "street": "73 Dakota Place", "city": "El Paso", "post_code": 79989, "state": "TX", "country": "United States", "referred_by": "Jorge Lavens", "created_on": new Date("11/8/2017"), "birthday": new Date("6/3/1989"), "last_activity": new Date("11/11/2017"), "next_activity": new Date("9/11/2019"), "deals_won": 30, "deals_lost": 27, "deals_pending": 27, "deals_total": 84, "ratio": 53, "estimated_sales": 4475790, "actual_sales": 5240970, "tags": "pro, medical" }, + { "id": 584953855, "avatar": "assets/images/women/7.jpg", "name": "Leontyne Cicchinelli", "email": "lcicchinelliay@delicious.com", "company": "Zoozzy", "position": "Product Engineer", "work_phone": "+1-253-348-1974", "mobile_phone": "+1-702-936-2459", "fax": "+1-208-346-2227", "street": "846 Becker Lane", "city": "Tacoma", "post_code": 98464, "state": "WA", "country": "United States", "referred_by": "Marcello Bakhrushin", "created_on": new Date("7/22/2017"), "birthday": new Date("6/27/1976"), "last_activity": new Date("8/2/2017"), "next_activity": new Date("1/2/2018"), "deals_won": 7, "deals_lost": 1, "deals_pending": 14, "deals_total": 22, "ratio": 88, "estimated_sales": 2182544, "actual_sales": 1007629, "tags": "warm, engineering" }, + { "id": 297357317, "avatar": "assets/images/women/35.jpg", "name": "Guillema Elcoat", "email": "gelcoataz@etsy.com", "company": "Fivespan", "position": "Chemical Engineer", "work_phone": "+1-919-682-2624", "mobile_phone": "+1-267-628-5922", "fax": "+1-253-262-7742", "street": "01 Manley Pass", "city": "Raleigh", "post_code": 27621, "state": "NC", "country": "United States", "referred_by": "Sela Jerzyk", "created_on": new Date("7/20/2017"), "birthday": new Date("8/24/1993"), "last_activity": new Date("7/23/2017"), "next_activity": new Date("6/23/2018"), "deals_won": 26, "deals_lost": 4, "deals_pending": 22, "deals_total": 52, "ratio": 87, "estimated_sales": 2190540, "actual_sales": 4935216, "tags": "demo, medical" }, + { "id": 168215764, "avatar": "assets/images/men/56.jpg", "name": "Darrel Harriss", "email": "dharrissb0@tamu.edu", "company": "Dabshots", "position": "Staff Scientist", "work_phone": "+1-614-657-4067", "mobile_phone": "+1-240-269-4079", "fax": "+1-510-143-6763", "street": "945 Mitchell Pass", "city": "Columbus", "post_code": 43210, "state": "OH", "country": "United States", "referred_by": "Tracy Golby", "created_on": new Date("8/31/2017"), "birthday": new Date("1/12/1984"), "last_activity": new Date("9/24/2017"), "next_activity": new Date("8/24/2019"), "deals_won": 6, "deals_lost": 14, "deals_pending": 29, "deals_total": 49, "ratio": 3, "estimated_sales": 2671190, "actual_sales": 937554, "tags": "warm, pharmaceutical" }, + { "id": 213982884, "avatar": "assets/images/men/90.jpg", "name": "Bentlee Heamus", "email": "bheamusb1@google.ru", "company": "Eidel", "position": "Accounting Assistant I", "work_phone": "+1-410-784-4379", "mobile_phone": "+1-806-402-8039", "fax": "+1-415-301-3023", "street": "799 Thierer Lane", "city": "Baltimore", "post_code": 21275, "state": "MD", "country": "United States", "referred_by": "Gweneth Ealles", "created_on": new Date("11/4/2017"), "birthday": new Date("10/4/1991"), "last_activity": new Date("11/13/2017"), "next_activity": new Date("3/13/2018"), "deals_won": 10, "deals_lost": 13, "deals_pending": 18, "deals_total": 41, "ratio": 43, "estimated_sales": 1040976, "actual_sales": 1429460, "tags": "demo, medical" }, + { "id": 435236192, "avatar": "assets/images/women/47.jpg", "name": "Jewell Keeler", "email": "jkeelerb2@theguardian.com", "company": "Buzzshare", "position": "Chief Design Engineer", "work_phone": "+1-719-854-9886", "mobile_phone": "+1-704-512-9870", "fax": "+1-408-489-2775", "street": "45 Calypso Drive", "city": "Denver", "post_code": 80209, "state": "CO", "country": "United States", "referred_by": "Cary Melley", "created_on": new Date("6/29/2017"), "birthday": new Date("10/1/1984"), "last_activity": new Date("7/6/2017"), "next_activity": new Date("5/6/2019"), "deals_won": 23, "deals_lost": 13, "deals_pending": 29, "deals_total": 65, "ratio": 64, "estimated_sales": 4427227, "actual_sales": 3162063, "tags": "demo, medical" }, + { "id": 854469582, "avatar": "assets/images/men/64.jpg", "name": "Eberhard Crayton", "email": "ecraytonb3@nyu.edu", "company": "Zoombox", "position": "Programmer IV", "work_phone": "+1-240-827-8348", "mobile_phone": "+1-864-366-7562", "fax": "+1-318-852-8740", "street": "85332 Myrtle Drive", "city": "Bethesda", "post_code": 20816, "state": "MD", "country": "United States", "referred_by": "Timi Lealle", "created_on": new Date("6/18/2017"), "birthday": new Date("6/8/1992"), "last_activity": new Date("6/25/2017"), "next_activity": new Date("5/25/2019"), "deals_won": 25, "deals_lost": 5, "deals_pending": 14, "deals_total": 44, "ratio": 83, "estimated_sales": 850934, "actual_sales": 2981425, "tags": "pro, pharmaceutical" }, + { "id": 858053633, "avatar": "assets/images/women/9.jpg", "name": "Emmalynne Ranson", "email": "eransonb4@delicious.com", "company": "Avaveo", "position": "Electrical Engineer", "work_phone": "+1-508-292-2293", "mobile_phone": "+1-214-486-5600", "fax": "+1-405-540-8902", "street": "127 Forest Run Lane", "city": "Newton", "post_code": 2162, "state": "MA", "country": "United States", "referred_by": "Celestia Fillingham", "created_on": new Date("1/12/2018"), "birthday": new Date("12/30/1976"), "last_activity": new Date("1/31/2018"), "next_activity": new Date("6/30/2019"), "deals_won": 9, "deals_lost": 30, "deals_pending": 17, "deals_total": 56, "ratio": 23, "estimated_sales": 945506, "actual_sales": 1376064, "tags": "warm, construction" }, + { "id": 487696186, "avatar": "assets/images/women/4.jpg", "name": "Adriane Veld", "email": "aveldb5@etsy.com", "company": "Divape", "position": "Business Systems Development Analyst", "work_phone": "+1-405-678-4027", "mobile_phone": "+1-315-208-0593", "fax": "+1-612-280-0450", "street": "237 Dexter Park", "city": "Oklahoma City", "post_code": 73190, "state": "OK", "country": "United States", "referred_by": "Margret Atmore", "created_on": new Date("4/18/2017"), "birthday": new Date("6/14/1975"), "last_activity": new Date("4/25/2017"), "next_activity": new Date("7/25/2018"), "deals_won": 16, "deals_lost": 17, "deals_pending": 9, "deals_total": 42, "ratio": 48, "estimated_sales": 719631, "actual_sales": 2335872, "tags": "engineering" }, + { "id": 846533188, "avatar": "assets/images/men/71.jpg", "name": "Bartholemy Treece", "email": "btreeceb6@jalbum.net", "company": "Browsezoom", "position": "Environmental Specialist", "work_phone": "+1-601-285-0905", "mobile_phone": "+1-772-594-6234", "fax": "+1-804-467-5253", "street": "234 Warrior Alley", "city": "Jackson", "post_code": 39296, "state": "MS", "country": "United States", "referred_by": "Alyss Greenless", "created_on": new Date("10/31/2017"), "birthday": new Date("8/13/1970"), "last_activity": new Date("11/9/2017"), "next_activity": new Date("2/9/2019"), "deals_won": 24, "deals_lost": 7, "deals_pending": 1, "deals_total": 32, "ratio": 77, "estimated_sales": 139949, "actual_sales": 1396056, "tags": "pro, engineering" }, + { "id": 26002585, "avatar": "assets/images/women/31.jpg", "name": "Pollyanna Stickney", "email": "pstickneyb7@deliciousdays.com", "company": "Browseblab", "position": "Internal Auditor", "work_phone": "+1-916-955-7346", "mobile_phone": "+1-215-484-3658", "fax": "+1-763-237-9137", "street": "9 Old Shore Hill", "city": "Sacramento", "post_code": 94237, "state": "CA", "country": "United States", "referred_by": "Albrecht Dixson", "created_on": new Date("7/15/2017"), "birthday": new Date("11/29/1986"), "last_activity": new Date("8/10/2017"), "next_activity": new Date("2/10/2019"), "deals_won": 4, "deals_lost": 22, "deals_pending": 3, "deals_total": 29, "ratio": 15, "estimated_sales": 350460, "actual_sales": 734488, "tags": "hot, engineering" }, + { "id": 301647435, "avatar": "assets/images/women/96.jpg", "name": "Blaire Hearnaman", "email": "bhearnamanb8@cocolog-nifty.com", "company": "Midel", "position": "Marketing Assistant", "work_phone": "+1-702-970-7399", "mobile_phone": "+1-301-121-6322", "fax": "+1-772-287-2603", "street": "602 Sutherland Point", "city": "Las Vegas", "post_code": 89135, "state": "NV", "country": "United States", "referred_by": "Beniamino Mathey", "created_on": new Date("3/2/2017"), "birthday": new Date("11/8/1989"), "last_activity": new Date("3/17/2017"), "next_activity": new Date("12/17/2018"), "deals_won": 28, "deals_lost": 19, "deals_pending": 21, "deals_total": 68, "ratio": 6, "estimated_sales": 3830547, "actual_sales": 4828404, "tags": "cool, construction" }, + { "id": 396781254, "avatar": "assets/images/women/95.jpg", "name": "Trina McLeese", "email": "tmcleeseb9@guardian.co.uk", "company": "Browsedrive", "position": "Senior Sales Associate", "work_phone": "+1-918-523-3131", "mobile_phone": "+1-210-229-8654", "fax": "+1-619-709-5056", "street": "35597 Coolidge Park", "city": "Tulsa", "post_code": 74108, "state": "OK", "country": "United States", "referred_by": "Boyd Piggin", "created_on": new Date("8/4/2017"), "birthday": new Date("3/15/1987"), "last_activity": new Date("8/14/2017"), "next_activity": new Date("8/14/2019"), "deals_won": 28, "deals_lost": 28, "deals_pending": 10, "deals_total": 66, "ratio": 5, "estimated_sales": 1703760, "actual_sales": 3875004, "tags": "cool, financial" }, + { "id": 134661355, "avatar": "assets/images/men/95.jpg", "name": "Irving Freeman", "email": "ifreemanba@hostgator.com", "company": "Quimm", "position": "Marketing Manager", "work_phone": "+1-336-981-0275", "mobile_phone": "+1-404-214-3146", "fax": "+1-218-164-5665", "street": "9142 Thierer Terrace", "city": "Winston Salem", "post_code": 27157, "state": "NC", "country": "United States", "referred_by": "Evanne Maddin", "created_on": new Date("4/13/2017"), "birthday": new Date("5/9/1974"), "last_activity": new Date("4/29/2017"), "next_activity": new Date("3/29/2019"), "deals_won": 10, "deals_lost": 13, "deals_pending": 19, "deals_total": 42, "ratio": 43, "estimated_sales": 2146506, "actual_sales": 1281660, "tags": "warm, medical" }, + { "id": 660114437, "avatar": "assets/images/men/81.jpg", "name": "Tobit Presslee", "email": "tpressleebb@gov.uk", "company": "DevStream", "position": "Product Manager", "work_phone": "+1-847-956-2631", "mobile_phone": "+1-515-524-1193", "fax": "+1-316-996-0830", "street": "40416 Lerdahl Parkway", "city": "Chicago", "post_code": 60646, "state": "IL", "country": "United States", "referred_by": "Dacey Mundow", "created_on": new Date("8/26/2017"), "birthday": new Date("10/17/1983"), "last_activity": new Date("8/31/2017"), "next_activity": new Date("5/31/2019"), "deals_won": 17, "deals_lost": 9, "deals_pending": 24, "deals_total": 50, "ratio": 65, "estimated_sales": 1330608, "actual_sales": 2332893, "tags": "pro, construction" }, + { "id": 663665147, "avatar": "assets/images/women/92.jpg", "name": "Gavra Fancet", "email": "gfancetbc@uiuc.edu", "company": "Skivee", "position": "Director of Sales", "work_phone": "+1-971-278-3132", "mobile_phone": "+1-816-708-0648", "fax": "+1-336-492-0174", "street": "24474 Fairview Point", "city": "Portland", "post_code": 97255, "state": "OR", "country": "United States", "referred_by": "Scarlett Askey", "created_on": new Date("9/29/2017"), "birthday": new Date("7/9/1982"), "last_activity": new Date("10/14/2017"), "next_activity": new Date("5/14/2019"), "deals_won": 27, "deals_lost": 10, "deals_pending": 15, "deals_total": 52, "ratio": 73, "estimated_sales": 973260, "actual_sales": 1618731, "tags": "demo, engineering" }, + { "id": 134664561, "avatar": "assets/images/men/9.jpg", "name": "Abbot MacGow", "email": "amacgowbd@mail.ru", "company": "Thoughtblab", "position": "Data Coordiator", "work_phone": "+1-606-920-5382", "mobile_phone": "+1-865-293-5555", "fax": "+1-260-873-3003", "street": "1 Blackbird Road", "city": "London", "post_code": 40745, "state": "KY", "country": "United States", "referred_by": "Ellwood Phython", "created_on": new Date("3/23/2018"), "birthday": new Date("11/26/1985"), "last_activity": new Date("4/1/2018"), "next_activity": new Date("7/1/2018"), "deals_won": 23, "deals_lost": 26, "deals_pending": 8, "deals_total": 57, "ratio": 47, "estimated_sales": 790064, "actual_sales": 3351606, "tags": "pro, retail" }, + { "id": 120226758, "avatar": "assets/images/men/74.jpg", "name": "Bartlett Seiffert", "email": "bseiffertbe@mozilla.org", "company": "Yoveo", "position": "Staff Accountant IV", "work_phone": "+1-304-189-0328", "mobile_phone": "+1-831-939-0175", "fax": "+1-202-221-2642", "street": "881 Redwing Plaza", "city": "Huntington", "post_code": 25770, "state": "WV", "country": "United States", "referred_by": "Lemmie Parkyn", "created_on": new Date("11/14/2017"), "birthday": new Date("12/7/1981"), "last_activity": new Date("12/12/2017"), "next_activity": new Date("8/12/2019"), "deals_won": 22, "deals_lost": 15, "deals_pending": 22, "deals_total": 59, "ratio": 59, "estimated_sales": 4245934, "actual_sales": 1480160, "tags": "cold, retail" }, + { "id": 670709385, "avatar": "assets/images/men/77.jpg", "name": "Pincus Damrell", "email": "pdamrellbf@prnewswire.com", "company": "Npath", "position": "Social Worker", "work_phone": "+1-203-886-8200", "mobile_phone": "+1-317-492-3842", "fax": "+1-301-897-4739", "street": "5 Haas Drive", "city": "Stamford", "post_code": 6922, "state": "CT", "country": "United States", "referred_by": "Barnie Kose", "created_on": new Date("4/9/2018"), "birthday": new Date("7/10/1970"), "last_activity": new Date("4/28/2018"), "next_activity": new Date("9/28/2019"), "deals_won": 27, "deals_lost": 17, "deals_pending": 10, "deals_total": 54, "ratio": 61, "estimated_sales": 895270, "actual_sales": 4582278, "tags": "subscriber, retail" }, + { "id": 376886566, "avatar": "assets/images/women/8.jpg", "name": "Ashlen Klossmann", "email": "aklossmannbg@smh.com.au", "company": "Yombu", "position": "Systems Administrator I", "work_phone": "+1-978-509-4966", "mobile_phone": "+1-203-927-5011", "fax": "+1-504-771-4180", "street": "1 8th Center", "city": "Boston", "post_code": 2163, "state": "MA", "country": "United States", "referred_by": "Veda Barrow", "created_on": new Date("2/13/2017"), "birthday": new Date("7/13/1984"), "last_activity": new Date("3/12/2017"), "next_activity": new Date("6/12/2017"), "deals_won": 3, "deals_lost": 8, "deals_pending": 2, "deals_total": 13, "ratio": 27, "estimated_sales": 155772, "actual_sales": 379671, "tags": "demo, medical" }, + { "id": 604382784, "avatar": "assets/images/men/79.jpg", "name": "Roosevelt Cornall", "email": "rcornallbh@flickr.com", "company": "Meemm", "position": "Food Chemist", "work_phone": "+1-713-437-0973", "mobile_phone": "+1-609-737-9711", "fax": "+1-850-156-4970", "street": "4746 Packers Hill", "city": "Houston", "post_code": 77276, "state": "TX", "country": "United States", "referred_by": "Deedee Argile", "created_on": new Date("1/1/2018"), "birthday": new Date("11/9/1997"), "last_activity": new Date("1/18/2018"), "next_activity": new Date("4/18/2019"), "deals_won": 13, "deals_lost": 19, "deals_pending": 17, "deals_total": 49, "ratio": 41, "estimated_sales": 1438370, "actual_sales": 1291407, "tags": "retail" }, + { "id": 646063244, "avatar": "assets/images/women/81.jpg", "name": "Nance Girdwood", "email": "ngirdwoodbi@zimbio.com", "company": "Photobug", "position": "VP Marketing", "work_phone": "+1-606-920-6339", "mobile_phone": "+1-513-775-3243", "fax": "+1-405-711-5044", "street": "24709 Manley Alley", "city": "London", "post_code": 40745, "state": "KY", "country": "United States", "referred_by": "Lethia Gedge", "created_on": new Date("4/23/2017"), "birthday": new Date("1/26/1971"), "last_activity": new Date("5/13/2017"), "next_activity": new Date("3/13/2018"), "deals_won": 30, "deals_lost": 30, "deals_pending": 14, "deals_total": 74, "ratio": 5, "estimated_sales": 1048614, "actual_sales": 2644800, "tags": "warm, construction" }, + { "id": 998901008, "avatar": "assets/images/women/42.jpg", "name": "Ninette Jewers", "email": "njewersbj@state.tx.us", "company": "Jaloo", "position": "Marketing Assistant", "work_phone": "+1-334-633-0451", "mobile_phone": "+1-727-765-9253", "fax": "+1-817-263-5778", "street": "956 Corscot Park", "city": "Montgomery", "post_code": 36134, "state": "AL", "country": "United States", "referred_by": "Malorie Sellner", "created_on": new Date("1/13/2017"), "birthday": new Date("11/21/1994"), "last_activity": new Date("1/21/2017"), "next_activity": new Date("8/21/2017"), "deals_won": 14, "deals_lost": 14, "deals_pending": 1, "deals_total": 29, "ratio": 5, "estimated_sales": 192134, "actual_sales": 1297520, "tags": "cold, financial" }, + { "id": 851846477, "avatar": "assets/images/women/87.jpg", "name": "Marrilee Crompton", "email": "mcromptonbk@disqus.com", "company": "Digitube", "position": "Dental Hygienist", "work_phone": "+1-714-727-7058", "mobile_phone": "+1-915-954-7800", "fax": "+1-318-774-9350", "street": "2 Forster Alley", "city": "Irvine", "post_code": 92717, "state": "CA", "country": "United States", "referred_by": "Tilda Pratley", "created_on": new Date("1/11/2017"), "birthday": new Date("11/13/1989"), "last_activity": new Date("1/20/2017"), "next_activity": new Date("4/20/2018"), "deals_won": 7, "deals_lost": 8, "deals_pending": 21, "deals_total": 36, "ratio": 47, "estimated_sales": 2784222, "actual_sales": 605500, "tags": "cool, financial" }, + { "id": 226687678, "avatar": "assets/images/women/19.jpg", "name": "Meredithe Dunphie", "email": "mdunphiebl@digg.com", "company": "Meemm", "position": "Engineer III", "work_phone": "+1-216-879-1177", "mobile_phone": "+1-281-101-4976", "fax": "+1-904-485-2133", "street": "81 Bashford Hill", "city": "Cleveland", "post_code": 44197, "state": "OH", "country": "United States", "referred_by": "Mignonne Habbergham", "created_on": new Date("7/1/2017"), "birthday": new Date("8/31/1985"), "last_activity": new Date("7/26/2017"), "next_activity": new Date("4/26/2019"), "deals_won": 11, "deals_lost": 30, "deals_pending": 24, "deals_total": 65, "ratio": 27, "estimated_sales": 2580648, "actual_sales": 1101100, "tags": "cool, medical" }, + { "id": 461155215, "avatar": "assets/images/women/76.jpg", "name": "Francoise Ramsdale", "email": "framsdalebm@creativecommons.org", "company": "Meevee", "position": "Staff Scientist", "work_phone": "+1-330-854-0137", "mobile_phone": "+1-813-401-3531", "fax": "+1-806-697-8002", "street": "93686 Lukken Park", "city": "Warren", "post_code": 44485, "state": "OH", "country": "United States", "referred_by": "Zacharias Pollastrino", "created_on": new Date("7/16/2017"), "birthday": new Date("6/5/1988"), "last_activity": new Date("7/29/2017"), "next_activity": new Date("11/29/2017"), "deals_won": 4, "deals_lost": 5, "deals_pending": 6, "deals_total": 15, "ratio": 44, "estimated_sales": 531066, "actual_sales": 533312, "tags": "warm, financial" }, + { "id": 47818637, "avatar": "assets/images/women/24.jpg", "name": "Leticia Grisewood", "email": "lgrisewoodbn@youtube.com", "company": "Innotype", "position": "Administrative Assistant III", "work_phone": "+1-803-437-0732", "mobile_phone": "+1-512-125-4879", "fax": "+1-405-456-4413", "street": "7336 Commercial Court", "city": "Aiken", "post_code": 29805, "state": "SC", "country": "United States", "referred_by": "Devi Full", "created_on": new Date("3/31/2018"), "birthday": new Date("4/25/1984"), "last_activity": new Date("4/24/2018"), "next_activity": new Date("3/24/2019"), "deals_won": 11, "deals_lost": 3, "deals_pending": 12, "deals_total": 26, "ratio": 79, "estimated_sales": 2026416, "actual_sales": 714549, "tags": "demo, retail" }, + { "id": 485432833, "avatar": "assets/images/women/24.jpg", "name": "Kacy Grangier", "email": "kgrangierbo@about.com", "company": "Yata", "position": "Paralegal", "work_phone": "+1-916-867-4529", "mobile_phone": "+1-302-745-6755", "fax": "+1-512-213-5757", "street": "3594 Briar Crest Pass", "city": "Sacramento", "post_code": 95838, "state": "CA", "country": "United States", "referred_by": "Annissa Henworth", "created_on": new Date("1/11/2018"), "birthday": new Date("7/22/1977"), "last_activity": new Date("1/21/2018"), "next_activity": new Date("12/21/2018"), "deals_won": 19, "deals_lost": 29, "deals_pending": 23, "deals_total": 71, "ratio": 4, "estimated_sales": 2287442, "actual_sales": 2014247, "tags": "financial" }, + { "id": 914957339, "avatar": "assets/images/men/56.jpg", "name": "Stu Frisdick", "email": "sfrisdickbp@zdnet.com", "company": "DabZ", "position": "Product Architect", "work_phone": "+1-520-988-6686", "mobile_phone": "+1-281-119-4824", "fax": "+1-484-833-4948", "street": "0 Clove Hill", "city": "Tucson", "post_code": 85737, "state": "AZ", "country": "United States", "referred_by": "Lusa Rilston", "created_on": new Date("2/21/2017"), "birthday": new Date("11/17/2000"), "last_activity": new Date("3/2/2017"), "next_activity": new Date("4/2/2017"), "deals_won": 16, "deals_lost": 26, "deals_pending": 11, "deals_total": 53, "ratio": 38, "estimated_sales": 1588785, "actual_sales": 3199264, "tags": "subscriber, pharmaceutical" }, + { "id": 638757315, "avatar": "assets/images/men/67.jpg", "name": "Filmer Neath", "email": "fneathbq@unc.edu", "company": "Devcast", "position": "Structural Analysis Engineer", "work_phone": "+1-505-750-5412", "mobile_phone": "+1-804-311-6929", "fax": "+1-757-768-3310", "street": "97 Ramsey Park", "city": "Albuquerque", "post_code": 87201, "state": "NM", "country": "United States", "referred_by": "Dodi Gommey", "created_on": new Date("1/30/2017"), "birthday": new Date("12/15/1980"), "last_activity": new Date("2/5/2017"), "next_activity": new Date("10/5/2017"), "deals_won": 6, "deals_lost": 22, "deals_pending": 17, "deals_total": 45, "ratio": 21, "estimated_sales": 2482221, "actual_sales": 963306, "tags": "financial" }, + { "id": 848169608, "avatar": "assets/images/men/60.jpg", "name": "Avictor Keyho", "email": "akeyhobr@smugmug.com", "company": "Jabbersphere", "position": "Internal Auditor", "work_phone": "+1-214-911-4890", "mobile_phone": "+1-702-815-4770", "fax": "+1-727-409-1166", "street": "26 Rowland Point", "city": "Dallas", "post_code": 75358, "state": "TX", "country": "United States", "referred_by": "Alta Burrett", "created_on": new Date("2/10/2018"), "birthday": new Date("2/4/1972"), "last_activity": new Date("3/8/2018"), "next_activity": new Date("9/8/2019"), "deals_won": 18, "deals_lost": 28, "deals_pending": 24, "deals_total": 70, "ratio": 39, "estimated_sales": 2909784, "actual_sales": 2828214, "tags": "demo, retail" }, + { "id": 534699420, "avatar": "assets/images/men/53.jpg", "name": "Gideon Couser", "email": "gcouserbs@gnu.org", "company": "Jabberbean", "position": "Environmental Tech", "work_phone": "+1-808-197-3232", "mobile_phone": "+1-801-588-7718", "fax": "+1-260-745-9986", "street": "4 Drewry Lane", "city": "Honolulu", "post_code": 96835, "state": "HI", "country": "United States", "referred_by": "Laina Duplock", "created_on": new Date("2/17/2017"), "birthday": new Date("6/1/1970"), "last_activity": new Date("2/19/2017"), "next_activity": new Date("3/19/2017"), "deals_won": 16, "deals_lost": 16, "deals_pending": 24, "deals_total": 56, "ratio": 5, "estimated_sales": 4104696, "actual_sales": 1659440, "tags": "construction" }, + { "id": 437885504, "avatar": "assets/images/women/10.jpg", "name": "Ava Robertsen", "email": "arobertsenbt@nih.gov", "company": "Roombo", "position": "Business Systems Development Analyst", "work_phone": "+1--543-1337", "mobile_phone": "+1-818-878-5106", "fax": "+1-206-965-2378", "street": "8380 John Wall Alley", "city": "Pittsburgh", "post_code": 15266, "state": "PA", "country": "United States", "referred_by": "Collin Tinan", "created_on": new Date("10/7/2017"), "birthday": new Date("1/28/1999"), "last_activity": new Date("10/15/2017"), "next_activity": new Date("10/15/2019"), "deals_won": 12, "deals_lost": 2, "deals_pending": 2, "deals_total": 16, "ratio": 86, "estimated_sales": 301678, "actual_sales": 1144536, "tags": "warm, medical" }, + { "id": 254316624, "avatar": "assets/images/women/94.jpg", "name": "Idalia Hadaway", "email": "ihadawaybu@twitpic.com", "company": "Buzzbean", "position": "VP Product Management", "work_phone": "+1-616-398-2942", "mobile_phone": "+1-815-515-4652", "fax": "+1-218-393-9364", "street": "2077 Ruskin Point", "city": "Grand Rapids", "post_code": 49510, "state": "MI", "country": "United States", "referred_by": "Jimmy Schade", "created_on": new Date("7/8/2017"), "birthday": new Date("1/19/1976"), "last_activity": new Date("7/19/2017"), "next_activity": new Date("1/19/2018"), "deals_won": 27, "deals_lost": 20, "deals_pending": 9, "deals_total": 56, "ratio": 57, "estimated_sales": 1273689, "actual_sales": 3388068, "tags": "retail" }, + { "id": 173572590, "avatar": "assets/images/women/14.jpg", "name": "Torrie Gillooly", "email": "tgilloolybv@angelfire.com", "company": "Quamba", "position": "GIS Technical Architect", "work_phone": "+1-253-257-6290", "mobile_phone": "+1-805-887-4914", "fax": "+1-918-362-4190", "street": "988 Prairie Rose Way", "city": "Lakewood", "post_code": 98498, "state": "WA", "country": "United States", "referred_by": "Carling Howsin", "created_on": new Date("8/22/2017"), "birthday": new Date("1/1/1988"), "last_activity": new Date("8/26/2017"), "next_activity": new Date("7/26/2019"), "deals_won": 20, "deals_lost": 2, "deals_pending": 9, "deals_total": 31, "ratio": 91, "estimated_sales": 1182708, "actual_sales": 3594680, "tags": "retail" }, + { "id": 939055594, "avatar": "assets/images/men/79.jpg", "name": "Dwayne Antognoni", "email": "dantognonibw@umich.edu", "company": "Wikivu", "position": "Product Engineer", "work_phone": "+1-801-757-5121", "mobile_phone": "+1-919-407-5665", "fax": "+1-937-543-1289", "street": "303 Westport Parkway", "city": "Salt Lake City", "post_code": 84115, "state": "UT", "country": "United States", "referred_by": "Burlie Peinke", "created_on": new Date("1/7/2018"), "birthday": new Date("3/10/1990"), "last_activity": new Date("2/6/2018"), "next_activity": new Date("8/6/2018"), "deals_won": 2, "deals_lost": 29, "deals_pending": 27, "deals_total": 58, "ratio": 6, "estimated_sales": 4817826, "actual_sales": 275194, "tags": "hot, pharmaceutical" }, + { "id": 272081327, "avatar": "assets/images/men/39.jpg", "name": "Zebulon Blenkinship", "email": "zblenkinshipbx@nature.com", "company": "Photospace", "position": "Web Developer IV", "work_phone": "+1-850-510-2673", "mobile_phone": "+1-334-206-1445", "fax": "+1-619-670-0149", "street": "85095 Golf Course Place", "city": "Pensacola", "post_code": 32526, "state": "FL", "country": "United States", "referred_by": "Alejoa I'anson", "created_on": new Date("3/6/2017"), "birthday": new Date("3/22/2000"), "last_activity": new Date("3/28/2017"), "next_activity": new Date("10/28/2018"), "deals_won": 20, "deals_lost": 27, "deals_pending": 12, "deals_total": 59, "ratio": 43, "estimated_sales": 1908864, "actual_sales": 3166620, "tags": "subscriber, engineering" }, + { "id": 523801691, "avatar": "assets/images/men/88.jpg", "name": "Hayes Rahill", "email": "hrahillby@webmd.com", "company": "Meetz", "position": "Recruiting Manager", "work_phone": "+1-952-791-1512", "mobile_phone": "+1-423-472-7552", "fax": "+1-212-737-3453", "street": "85 Portage Avenue", "city": "Minneapolis", "post_code": 55441, "state": "MN", "country": "United States", "referred_by": "Julita Bonevant", "created_on": new Date("1/14/2018"), "birthday": new Date("5/10/1975"), "last_activity": new Date("1/21/2018"), "next_activity": new Date("9/21/2019"), "deals_won": 23, "deals_lost": 25, "deals_pending": 0, "deals_total": 48, "ratio": 48, "estimated_sales": 0, "actual_sales": 3503682, "tags": "pro, engineering" }, + { "id": 927404028, "avatar": "assets/images/men/71.jpg", "name": "Calvin MacGilrewy", "email": "cmacgilrewybz@opera.com", "company": "Oyoba", "position": "Media Manager I", "work_phone": "+1-214-681-5190", "mobile_phone": "+1-707-286-9982", "fax": "+1-913-266-9443", "street": "0214 Upham Terrace", "city": "Dallas", "post_code": 75372, "state": "TX", "country": "United States", "referred_by": "Waverley Saunt", "created_on": new Date("4/4/2018"), "birthday": new Date("9/27/1997"), "last_activity": new Date("5/2/2018"), "next_activity": new Date("7/2/2018"), "deals_won": 22, "deals_lost": 8, "deals_pending": 3, "deals_total": 33, "ratio": 73, "estimated_sales": 574755, "actual_sales": 2134110, "tags": "cool, financial" }, + { "id": 148184996, "avatar": "assets/images/men/73.jpg", "name": "Mendie Moss", "email": "mmossc0@smh.com.au", "company": "Avamba", "position": "Legal Assistant", "work_phone": "+1-713-107-9966", "mobile_phone": "+1-907-594-1870", "fax": "+1-601-701-0280", "street": "593 Pine View Center", "city": "Spring", "post_code": 77386, "state": "TX", "country": "United States", "referred_by": "Andi Rippingall", "created_on": new Date("1/20/2018"), "birthday": new Date("11/26/1990"), "last_activity": new Date("1/22/2018"), "next_activity": new Date("7/22/2018"), "deals_won": 23, "deals_lost": 17, "deals_pending": 16, "deals_total": 56, "ratio": 58, "estimated_sales": 895680, "actual_sales": 1317854, "tags": "pro, medical" }, + { "id": 596832097, "avatar": "assets/images/women/81.jpg", "name": "Tonia Finding", "email": "tfindingc1@mapy.cz", "company": "Flipopia", "position": "Nurse Practicioner", "work_phone": "+1-919-602-2320", "mobile_phone": "+1-512-433-7189", "fax": "+1-336-774-6216", "street": "50 Daystar Plaza", "city": "Raleigh", "post_code": 27635, "state": "NC", "country": "United States", "referred_by": "Maxi Salzburger", "created_on": new Date("9/30/2017"), "birthday": new Date("7/13/1982"), "last_activity": new Date("10/25/2017"), "next_activity": new Date("4/25/2018"), "deals_won": 11, "deals_lost": 29, "deals_pending": 11, "deals_total": 51, "ratio": 28, "estimated_sales": 1163822, "actual_sales": 929170, "tags": "demo, pharmaceutical" }, + { "id": 84996821, "avatar": "assets/images/men/33.jpg", "name": "Sidney Braffington", "email": "sbraffingtonc2@linkedin.com", "company": "Dynabox", "position": "Mechanical Systems Engineer", "work_phone": "+1-571-894-5464", "mobile_phone": "+1-619-572-8013", "fax": "+1-210-706-7014", "street": "41 Grim Pass", "city": "Alexandria", "post_code": 22313, "state": "VA", "country": "United States", "referred_by": "Jacquenetta Glacken", "created_on": new Date("8/29/2017"), "birthday": new Date("7/23/1995"), "last_activity": new Date("8/31/2017"), "next_activity": new Date("3/31/2019"), "deals_won": 7, "deals_lost": 25, "deals_pending": 7, "deals_total": 39, "ratio": 22, "estimated_sales": 920458, "actual_sales": 905681, "tags": "subscriber, construction" }, + { "id": 368277950, "avatar": "assets/images/women/84.jpg", "name": "Phoebe Tackle", "email": "ptacklec3@squidoo.com", "company": "Fadeo", "position": "Accountant II", "work_phone": "+1-515-766-6325", "mobile_phone": "+1-817-529-1121", "fax": "+1-202-577-5994", "street": "7 Mayfield Junction", "city": "Des Moines", "post_code": 50936, "state": "IA", "country": "United States", "referred_by": "Madelyn Martusewicz", "created_on": new Date("5/20/2017"), "birthday": new Date("7/29/1986"), "last_activity": new Date("6/1/2017"), "next_activity": new Date("2/1/2019"), "deals_won": 20, "deals_lost": 16, "deals_pending": 22, "deals_total": 58, "ratio": 56, "estimated_sales": 3756478, "actual_sales": 3491660, "tags": "cold, medical" }, + { "id": 870353677, "avatar": "assets/images/men/75.jpg", "name": "Buddie Mantrip", "email": "bmantripc4@bloglovin.com", "company": "Mybuzz", "position": "Environmental Specialist", "work_phone": "+1-630-483-8264", "mobile_phone": "+1-719-742-7147", "fax": "+1-712-426-7868", "street": "49 Loeprich Pass", "city": "Aurora", "post_code": 60505, "state": "IL", "country": "United States", "referred_by": "Gail Ethelston", "created_on": new Date("7/30/2017"), "birthday": new Date("5/3/1983"), "last_activity": new Date("8/7/2017"), "next_activity": new Date("10/7/2017"), "deals_won": 21, "deals_lost": 12, "deals_pending": 15, "deals_total": 48, "ratio": 64, "estimated_sales": 2828175, "actual_sales": 2923662, "tags": "demo, engineering" }, + { "id": 270599150, "avatar": "assets/images/men/12.jpg", "name": "Abba Molines", "email": "amolinesc5@nba.com", "company": "Wordtune", "position": "Nurse", "work_phone": "+1-915-393-7743", "mobile_phone": "+1-706-715-6981", "fax": "+1-719-743-6123", "street": "444 Moland Terrace", "city": "El Paso", "post_code": 88569, "state": "TX", "country": "United States", "referred_by": "Bradley Arnaldy", "created_on": new Date("1/31/2018"), "birthday": new Date("4/16/1998"), "last_activity": new Date("2/3/2018"), "next_activity": new Date("5/3/2019"), "deals_won": 15, "deals_lost": 17, "deals_pending": 28, "deals_total": 60, "ratio": 47, "estimated_sales": 2787876, "actual_sales": 822435, "tags": "warm, financial" }, + { "id": 831697087, "avatar": "assets/images/men/62.jpg", "name": "Delainey Lanchbury", "email": "dlanchburyc6@mediafire.com", "company": "Bluezoom", "position": "Actuary", "work_phone": "+1-407-514-9418", "mobile_phone": "+1-713-390-4179", "fax": "+1-518-750-3116", "street": "59 Kennedy Park", "city": "Orlando", "post_code": 32813, "state": "FL", "country": "United States", "referred_by": "Cleveland Hoyt", "created_on": new Date("1/21/2018"), "birthday": new Date("9/30/1970"), "last_activity": new Date("2/3/2018"), "next_activity": new Date("2/3/2020"), "deals_won": 20, "deals_lost": 8, "deals_pending": 17, "deals_total": 45, "ratio": 71, "estimated_sales": 3219086, "actual_sales": 3343840, "tags": "cold, engineering" }, + { "id": 363732230, "avatar": "assets/images/women/53.jpg", "name": "Gabey Crunden", "email": "gcrundenc7@squarespace.com", "company": "Dablist", "position": "Health Coach I", "work_phone": "+1-310-756-5986", "mobile_phone": "+1-901-456-1424", "fax": "+1-812-946-1676", "street": "7 Schlimgen Place", "city": "Santa Monica", "post_code": 90410, "state": "CA", "country": "United States", "referred_by": "Zedekiah Senechault", "created_on": new Date("2/16/2018"), "birthday": new Date("9/20/1979"), "last_activity": new Date("2/21/2018"), "next_activity": new Date("7/21/2019"), "deals_won": 1, "deals_lost": 5, "deals_pending": 16, "deals_total": 22, "ratio": 17, "estimated_sales": 2176512, "actual_sales": 165808, "tags": "subscriber, pharmaceutical" }, + { "id": 501490394, "avatar": "assets/images/women/1.jpg", "name": "Kelcy Witton", "email": "kwittonc8@ucla.edu", "company": "Layo", "position": "Analyst Programmer", "work_phone": "+1-336-143-5784", "mobile_phone": "+1-806-671-0940", "fax": "+1-518-874-2244", "street": "5158 Cherokee Way", "city": "Greensboro", "post_code": 27425, "state": "NC", "country": "United States", "referred_by": "Kimberli Syddie", "created_on": new Date("10/8/2017"), "birthday": new Date("2/9/1983"), "last_activity": new Date("10/27/2017"), "next_activity": new Date("5/27/2019"), "deals_won": 21, "deals_lost": 22, "deals_pending": 6, "deals_total": 49, "ratio": 49, "estimated_sales": 1007424, "actual_sales": 4040316, "tags": "hot, financial" }, + { "id": 380298828, "avatar": "assets/images/men/15.jpg", "name": "Hashim Pancast", "email": "hpancastc9@ow.ly", "company": "Nlounge", "position": "Quality Control Specialist", "work_phone": "+1-330-938-7299", "mobile_phone": "+1-509-931-1660", "fax": "+1-602-444-0496", "street": "68 Brickson Park Avenue", "city": "Youngstown", "post_code": 44511, "state": "OH", "country": "United States", "referred_by": "Mirelle Measor", "created_on": new Date("6/29/2017"), "birthday": new Date("3/19/1990"), "last_activity": new Date("7/21/2017"), "next_activity": new Date("12/21/2018"), "deals_won": 8, "deals_lost": 6, "deals_pending": 11, "deals_total": 25, "ratio": 57, "estimated_sales": 1108074, "actual_sales": 735200, "tags": "financial" }, + { "id": 87382037, "avatar": "assets/images/women/95.jpg", "name": "Pegeen Dudley", "email": "pdudleyca@hc360.com", "company": "Jamia", "position": "Office Assistant IV", "work_phone": "+1-770-798-0419", "mobile_phone": "+1-605-658-6952", "fax": "+1-254-824-9619", "street": "5662 School Crossing", "city": "Atlanta", "post_code": 30301, "state": "GA", "country": "United States", "referred_by": "Paddie Krop", "created_on": new Date("3/29/2018"), "birthday": new Date("1/1/1978"), "last_activity": new Date("4/25/2018"), "next_activity": new Date("9/25/2019"), "deals_won": 13, "deals_lost": 6, "deals_pending": 9, "deals_total": 28, "ratio": 68, "estimated_sales": 1224927, "actual_sales": 2493491, "tags": "subscriber, medical" }, + { "id": 379632492, "avatar": "assets/images/men/99.jpg", "name": "Sanders Sewart", "email": "ssewartcb@etsy.com", "company": "Aibox", "position": "Product Engineer", "work_phone": "+1-865-452-8610", "mobile_phone": "+1-304-553-4261", "fax": "+1-571-742-7891", "street": "9 Declaration Point", "city": "Knoxville", "post_code": 37919, "state": "TN", "country": "United States", "referred_by": "Cammy Blamires", "created_on": new Date("4/11/2018"), "birthday": new Date("5/15/1985"), "last_activity": new Date("5/6/2018"), "next_activity": new Date("9/6/2019"), "deals_won": 18, "deals_lost": 5, "deals_pending": 17, "deals_total": 40, "ratio": 78, "estimated_sales": 1276785, "actual_sales": 2073222, "tags": "pro, retail" }, + { "id": 28273168, "avatar": "assets/images/women/32.jpg", "name": "Robina Edlestone", "email": "redlestonecc@biblegateway.com", "company": "Feedmix", "position": "Director of Sales", "work_phone": "+1-309-669-5509", "mobile_phone": "+1-216-789-6625", "fax": "+1-706-631-9450", "street": "4450 Leroy Circle", "city": "Peoria", "post_code": 61629, "state": "IL", "country": "United States", "referred_by": "Salmon Bavidge", "created_on": new Date("7/23/2017"), "birthday": new Date("6/13/1990"), "last_activity": new Date("8/11/2017"), "next_activity": new Date("9/11/2017"), "deals_won": 17, "deals_lost": 24, "deals_pending": 19, "deals_total": 60, "ratio": 41, "estimated_sales": 2521775, "actual_sales": 2098225, "tags": "subscriber, financial" }, + { "id": 242917374, "avatar": "assets/images/women/28.jpg", "name": "Donia Izhakov", "email": "dizhakovcd@chicagotribune.com", "company": "Dynazzy", "position": "Physical Therapy Assistant", "work_phone": "+1-973-831-3172", "mobile_phone": "+1-320-684-4748", "fax": "+1-651-854-9910", "street": "7 Brickson Park Junction", "city": "Newark", "post_code": 7104, "state": "NJ", "country": "United States", "referred_by": "Nickey Cornil", "created_on": new Date("6/7/2017"), "birthday": new Date("4/3/1975"), "last_activity": new Date("6/14/2017"), "next_activity": new Date("12/14/2017"), "deals_won": 10, "deals_lost": 19, "deals_pending": 14, "deals_total": 43, "ratio": 34, "estimated_sales": 793282, "actual_sales": 971960, "tags": "pro, pharmaceutical" }, + { "id": 653296974, "avatar": "assets/images/men/20.jpg", "name": "Francklyn Burds", "email": "fburdsce@nih.gov", "company": "Livefish", "position": "Senior Developer", "work_phone": "+1-718-637-5047", "mobile_phone": "+1-256-410-2762", "fax": "+1-212-191-6979", "street": "30 Ramsey Junction", "city": "Brooklyn", "post_code": 11220, "state": "NY", "country": "United States", "referred_by": "Jackquelin O'Sheerin", "created_on": new Date("4/16/2017"), "birthday": new Date("3/21/1980"), "last_activity": new Date("5/15/2017"), "next_activity": new Date("2/15/2018"), "deals_won": 25, "deals_lost": 26, "deals_pending": 15, "deals_total": 66, "ratio": 49, "estimated_sales": 2240265, "actual_sales": 1491150, "tags": "construction" }, + { "id": 566023741, "avatar": "assets/images/women/92.jpg", "name": "Lizabeth Whitcombe", "email": "lwhitcombecf@amazon.co.jp", "company": "Jabbertype", "position": "Paralegal", "work_phone": "+1-702-951-0879", "mobile_phone": "+1-480-600-7648", "fax": "+1-585-873-5562", "street": "86944 Bonner Trail", "city": "North Las Vegas", "post_code": 89087, "state": "NV", "country": "United States", "referred_by": "Ashia Baysting", "created_on": new Date("6/17/2017"), "birthday": new Date("4/1/1984"), "last_activity": new Date("7/3/2017"), "next_activity": new Date("1/3/2019"), "deals_won": 5, "deals_lost": 2, "deals_pending": 18, "deals_total": 25, "ratio": 71, "estimated_sales": 2418570, "actual_sales": 573820, "tags": "subscriber, engineering" }, + { "id": 18133342, "avatar": "assets/images/men/1.jpg", "name": "Konstantin McPolin", "email": "kmcpolincg@tiny.cc", "company": "Voolith", "position": "Project Manager", "work_phone": "+1-951-552-6295", "mobile_phone": "+1-212-353-2370", "fax": "+1-317-101-3859", "street": "7291 Judy Trail", "city": "Riverside", "post_code": 92519, "state": "CA", "country": "United States", "referred_by": "Granny Willock", "created_on": new Date("5/23/2017"), "birthday": new Date("12/14/1977"), "last_activity": new Date("5/27/2017"), "next_activity": new Date("11/27/2018"), "deals_won": 14, "deals_lost": 17, "deals_pending": 21, "deals_total": 52, "ratio": 45, "estimated_sales": 2043783, "actual_sales": 1491672, "tags": "financial" }, + { "id": 27891491, "avatar": "assets/images/men/87.jpg", "name": "Alasdair Tapsfield", "email": "atapsfieldch@ox.ac.uk", "company": "Shufflebeat", "position": "Civil Engineer", "work_phone": "+1-717-105-2953", "mobile_phone": "+1-773-775-6750", "fax": "+1-843-901-8316", "street": "494 Schurz Place", "city": "Lancaster", "post_code": 17605, "state": "PA", "country": "United States", "referred_by": "Ondrea Beedie", "created_on": new Date("8/3/2017"), "birthday": new Date("11/14/1978"), "last_activity": new Date("9/1/2017"), "next_activity": new Date("11/1/2018"), "deals_won": 26, "deals_lost": 26, "deals_pending": 11, "deals_total": 63, "ratio": 5, "estimated_sales": 1789095, "actual_sales": 1462656, "tags": "financial" }, + { "id": 639109531, "avatar": "assets/images/men/34.jpg", "name": "Ignacio Hammerberg", "email": "ihammerbergci@redcross.org", "company": "Gigaclub", "position": "Marketing Manager", "work_phone": "+1-512-252-7640", "mobile_phone": "+1-323-300-9482", "fax": "+1-941-517-1746", "street": "44585 Birchwood Street", "city": "Round Rock", "post_code": 78682, "state": "TX", "country": "United States", "referred_by": "Dew Bougourd", "created_on": new Date("10/9/2017"), "birthday": new Date("2/14/1982"), "last_activity": new Date("11/3/2017"), "next_activity": new Date("5/3/2018"), "deals_won": 15, "deals_lost": 18, "deals_pending": 19, "deals_total": 52, "ratio": 45, "estimated_sales": 1600845, "actual_sales": 910485, "tags": "hot, engineering" }, + { "id": 754217072, "avatar": "assets/images/men/87.jpg", "name": "Vincents O'Donohue", "email": "vodonohuecj@cocolog-nifty.com", "company": "Mymm", "position": "Social Worker", "work_phone": "+1-336-558-5931", "mobile_phone": "+1-432-375-7039", "fax": "+1-404-708-3324", "street": "57815 Kingsford Trail", "city": "Winston Salem", "post_code": 27105, "state": "NC", "country": "United States", "referred_by": "Olivier Pohl", "created_on": new Date("2/2/2018"), "birthday": new Date("7/27/1996"), "last_activity": new Date("2/11/2018"), "next_activity": new Date("9/11/2019"), "deals_won": 6, "deals_lost": 7, "deals_pending": 2, "deals_total": 15, "ratio": 46, "estimated_sales": 269990, "actual_sales": 319632, "tags": "cold, pharmaceutical" }, + { "id": 520274335, "avatar": "assets/images/women/32.jpg", "name": "Leela Fantone", "email": "lfantoneck@epa.gov", "company": "Mita", "position": "Speech Pathologist", "work_phone": "+1-202-530-7372", "mobile_phone": "+1-817-484-6218", "fax": "+1-651-205-1650", "street": "57848 Melvin Point", "city": "Washington", "post_code": 20073, "state": "DC", "country": "United States", "referred_by": "Daphne Ingon", "created_on": new Date("11/6/2017"), "birthday": new Date("7/31/2000"), "last_activity": new Date("12/2/2017"), "next_activity": new Date("9/2/2019"), "deals_won": 11, "deals_lost": 10, "deals_pending": 11, "deals_total": 32, "ratio": 52, "estimated_sales": 1639594, "actual_sales": 1256145, "tags": "hot, retail" }, + { "id": 716523610, "avatar": "assets/images/men/19.jpg", "name": "Justus Cadore", "email": "jcadorecl@reference.com", "company": "Twitterlist", "position": "Programmer Analyst IV", "work_phone": "+1-407-225-3479", "mobile_phone": "+1-321-111-5937", "fax": "+1-954-738-4877", "street": "199 Gateway Center", "city": "Winter Haven", "post_code": 33884, "state": "FL", "country": "United States", "referred_by": "Maddy Aspinal", "created_on": new Date("9/24/2017"), "birthday": new Date("2/13/2003"), "last_activity": new Date("10/2/2017"), "next_activity": new Date("10/2/2018"), "deals_won": 22, "deals_lost": 18, "deals_pending": 5, "deals_total": 45, "ratio": 55, "estimated_sales": 474130, "actual_sales": 3567278, "tags": "financial" }, + { "id": 329842916, "avatar": "assets/images/women/46.jpg", "name": "Alis Nowakowski", "email": "anowakowskicm@wikimedia.org", "company": "Wordware", "position": "Technical Writer", "work_phone": "+1-402-516-1553", "mobile_phone": "+1-360-150-4360", "fax": "+1-915-934-7228", "street": "5333 Sunfield Center", "city": "Omaha", "post_code": 68197, "state": "NE", "country": "United States", "referred_by": "Miguelita Gerler", "created_on": new Date("3/18/2017"), "birthday": new Date("2/15/1973"), "last_activity": new Date("3/26/2017"), "next_activity": new Date("7/26/2017"), "deals_won": 26, "deals_lost": 20, "deals_pending": 17, "deals_total": 63, "ratio": 57, "estimated_sales": 2466598, "actual_sales": 4936620, "tags": "cool, retail" }, + { "id": 75323534, "avatar": "assets/images/women/52.jpg", "name": "Lorena Mousdall", "email": "lmousdallcn@elegantthemes.com", "company": "Aimbo", "position": "Geologist III", "work_phone": "+1-720-341-5046", "mobile_phone": "+1-916-195-7584", "fax": "+1-215-624-1834", "street": "12 Melby Place", "city": "Denver", "post_code": 80241, "state": "CO", "country": "United States", "referred_by": "Carmina Tomaszek", "created_on": new Date("3/13/2017"), "birthday": new Date("9/13/1978"), "last_activity": new Date("3/24/2017"), "next_activity": new Date("10/24/2018"), "deals_won": 14, "deals_lost": 11, "deals_pending": 2, "deals_total": 27, "ratio": 56, "estimated_sales": 300438, "actual_sales": 1338988, "tags": "cool, engineering" }, + { "id": 46063202, "avatar": "assets/images/women/71.jpg", "name": "Gayle St Pierre", "email": "gstco@cargocollective.com", "company": "Trupe", "position": "VP Accounting", "work_phone": "+1-530-168-6924", "mobile_phone": "+1-646-366-5359", "fax": "+1-757-548-1834", "street": "48 Veith Junction", "city": "Chico", "post_code": 95973, "state": "CA", "country": "United States", "referred_by": "Lynda Drinan", "created_on": new Date("3/26/2017"), "birthday": new Date("3/10/1971"), "last_activity": new Date("4/17/2017"), "next_activity": new Date("10/17/2018"), "deals_won": 13, "deals_lost": 14, "deals_pending": 9, "deals_total": 36, "ratio": 48, "estimated_sales": 1716966, "actual_sales": 668928, "tags": "cold, medical" }, + { "id": 743401827, "avatar": "assets/images/women/56.jpg", "name": "Romy Giacomelli", "email": "rgiacomellicp@ezinearticles.com", "company": "Eimbee", "position": "Cost Accountant", "work_phone": "+1-719-646-0552", "mobile_phone": "+1-203-707-2786", "fax": "+1-214-685-1141", "street": "952 Springs Alley", "city": "Colorado Springs", "post_code": 80915, "state": "CO", "country": "United States", "referred_by": "Alanna Begg", "created_on": new Date("11/18/2017"), "birthday": new Date("10/16/1982"), "last_activity": new Date("12/2/2017"), "next_activity": new Date("2/2/2018"), "deals_won": 5, "deals_lost": 13, "deals_pending": 8, "deals_total": 26, "ratio": 28, "estimated_sales": 1423424, "actual_sales": 949815, "tags": "subscriber, construction" }]; +/* tslint:enable */ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/0.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/0.jpg new file mode 100644 index 000000000..e29aaafb9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/0.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/1.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/1.jpg new file mode 100644 index 000000000..8004cc411 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/1.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/10.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/10.jpg new file mode 100644 index 000000000..8a9edd8d1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/10.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/100.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/100.jpg new file mode 100644 index 000000000..26f9951ab Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/100.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/11.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/11.jpg new file mode 100644 index 000000000..abddef0e8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/11.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/12.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/12.jpg new file mode 100644 index 000000000..b83a77397 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/12.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/13.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/13.jpg new file mode 100644 index 000000000..43269e045 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/13.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/14.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/14.jpg new file mode 100644 index 000000000..606b1a6f7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/14.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/15.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/15.jpg new file mode 100644 index 000000000..2818c5dda Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/15.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/16.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/16.jpg new file mode 100644 index 000000000..fc6bd1496 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/16.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/17.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/17.jpg new file mode 100644 index 000000000..cfc6f311c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/17.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/18.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/18.jpg new file mode 100644 index 000000000..1de43e925 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/18.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/19.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/19.jpg new file mode 100644 index 000000000..53023f84e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/19.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/2.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/2.jpg new file mode 100644 index 000000000..7c2b4d634 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/20.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/20.jpg new file mode 100644 index 000000000..3e5f9457e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/20.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/21.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/21.jpg new file mode 100644 index 000000000..cfba1fe4d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/21.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/22.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/22.jpg new file mode 100644 index 000000000..dcbaf260c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/22.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/23.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/23.jpg new file mode 100644 index 000000000..3a2b514c3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/23.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/24.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/24.jpg new file mode 100644 index 000000000..c76f3f512 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/24.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/25.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/25.jpg new file mode 100644 index 000000000..f4fb14873 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/25.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/26.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/26.jpg new file mode 100644 index 000000000..9dc05580e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/26.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/27.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/27.jpg new file mode 100644 index 000000000..f3758fcb8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/27.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/28.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/28.jpg new file mode 100644 index 000000000..dfc34c2f9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/28.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/29.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/29.jpg new file mode 100644 index 000000000..6c3e004c1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/29.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/3.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/3.jpg new file mode 100644 index 000000000..4fc0e104c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/3.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/30.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/30.jpg new file mode 100644 index 000000000..d04b7a266 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/30.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/31.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/31.jpg new file mode 100644 index 000000000..d5d739100 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/31.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/32.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/32.jpg new file mode 100644 index 000000000..279b70def Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/32.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/33.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/33.jpg new file mode 100644 index 000000000..076529467 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/33.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/34.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/34.jpg new file mode 100644 index 000000000..138fc3946 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/34.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/35.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/35.jpg new file mode 100644 index 000000000..ad943c9de Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/35.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/36.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/36.jpg new file mode 100644 index 000000000..62ea75fb8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/36.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/37.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/37.jpg new file mode 100644 index 000000000..41dca98ae Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/37.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/38.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/38.jpg new file mode 100644 index 000000000..ed97c9d0b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/38.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/39.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/39.jpg new file mode 100644 index 000000000..26f9951ab Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/39.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/4.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/4.jpg new file mode 100644 index 000000000..68b8bb441 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/4.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/40.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/40.jpg new file mode 100644 index 000000000..c28fc2c74 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/40.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/41.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/41.jpg new file mode 100644 index 000000000..1daa4b8ae Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/41.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/42.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/42.jpg new file mode 100644 index 000000000..c0ec114ca Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/42.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/43.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/43.jpg new file mode 100644 index 000000000..a6a39bfc8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/43.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/44.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/44.jpg new file mode 100644 index 000000000..f24b739a2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/44.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/45.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/45.jpg new file mode 100644 index 000000000..6d1e41cc9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/45.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/46.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/46.jpg new file mode 100644 index 000000000..5609a0edf Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/46.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/47.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/47.jpg new file mode 100644 index 000000000..6888bdd2c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/47.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/48.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/48.jpg new file mode 100644 index 000000000..89f03a971 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/48.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/49.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/49.jpg new file mode 100644 index 000000000..dcf2608a8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/49.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/5.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/5.jpg new file mode 100644 index 000000000..4d47bd1af Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/5.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/50.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/50.jpg new file mode 100644 index 000000000..822813ec4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/50.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/51.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/51.jpg new file mode 100644 index 000000000..b4101aecb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/51.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/52.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/52.jpg new file mode 100644 index 000000000..1de43e925 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/52.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/53.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/53.jpg new file mode 100644 index 000000000..8968d3cf2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/53.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/54.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/54.jpg new file mode 100644 index 000000000..3e229e6a7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/54.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/55.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/55.jpg new file mode 100644 index 000000000..02a105559 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/55.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/56.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/56.jpg new file mode 100644 index 000000000..fc9f3fa07 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/56.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57 (1).jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57 (1).jpg new file mode 100644 index 000000000..c45665be7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57 (1).jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57.jpg new file mode 100644 index 000000000..ea4a22e51 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/57.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/58.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/58.jpg new file mode 100644 index 000000000..847910998 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/58.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/59.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/59.jpg new file mode 100644 index 000000000..b7b9a3905 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/59.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/6.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/6.jpg new file mode 100644 index 000000000..1258f0a9d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/6.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/60.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/60.jpg new file mode 100644 index 000000000..52c1920c6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/60.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/61.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/61.jpg new file mode 100644 index 000000000..2481114b7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/61.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/62.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/62.jpg new file mode 100644 index 000000000..124dbe71c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/62.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/63.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/63.jpg new file mode 100644 index 000000000..fa6d48193 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/63.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/64.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/64.jpg new file mode 100644 index 000000000..6cbce1af0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/64.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/65.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/65.jpg new file mode 100644 index 000000000..c00492000 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/65.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/66.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/66.jpg new file mode 100644 index 000000000..437143fb3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/66.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/67.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/67.jpg new file mode 100644 index 000000000..68b8bb441 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/67.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/68.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/68.jpg new file mode 100644 index 000000000..b318dd4b4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/68.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/69.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/69.jpg new file mode 100644 index 000000000..d39345ff8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/69.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/7.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/7.jpg new file mode 100644 index 000000000..1171cfb51 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/7.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/70.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/70.jpg new file mode 100644 index 000000000..1e4b6773f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/70.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/71.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/71.jpg new file mode 100644 index 000000000..7007fabea Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/71.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/72.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/72.jpg new file mode 100644 index 000000000..fb926529a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/72.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/73.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/73.jpg new file mode 100644 index 000000000..b6a30e278 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/73.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/74.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/74.jpg new file mode 100644 index 000000000..abacfd1a2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/74.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/75.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/75.jpg new file mode 100644 index 000000000..04cb79753 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/75.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/76.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/76.jpg new file mode 100644 index 000000000..681a7f100 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/76.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/77.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/77.jpg new file mode 100644 index 000000000..a243818b3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/77.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/78.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/78.jpg new file mode 100644 index 000000000..6438e80b9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/78.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/79.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/79.jpg new file mode 100644 index 000000000..cf30fdf36 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/79.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/8.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/8.jpg new file mode 100644 index 000000000..33f2cdfcb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/8.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/80.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/80.jpg new file mode 100644 index 000000000..b2d9bcee1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/80.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/81.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/81.jpg new file mode 100644 index 000000000..0b3226775 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/81.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/82.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/82.jpg new file mode 100644 index 000000000..f32459ae1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/82.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/83.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/83.jpg new file mode 100644 index 000000000..dc3ae1f9b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/83.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/84.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/84.jpg new file mode 100644 index 000000000..f3758fcb8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/84.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/85.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/85.jpg new file mode 100644 index 000000000..43ece1907 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/85.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/86.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/86.jpg new file mode 100644 index 000000000..935849110 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/86.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/87.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/87.jpg new file mode 100644 index 000000000..2a4032424 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/87.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/88.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/88.jpg new file mode 100644 index 000000000..02fa1cac6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/88.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/89.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/89.jpg new file mode 100644 index 000000000..57962bde0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/89.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/9.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/9.jpg new file mode 100644 index 000000000..be4d0110e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/9.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/90.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/90.jpg new file mode 100644 index 000000000..00720c2f6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/90.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/91.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/91.jpg new file mode 100644 index 000000000..8c3ac42c4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/91.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/92.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/92.jpg new file mode 100644 index 000000000..b96231b56 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/92.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/93.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/93.jpg new file mode 100644 index 000000000..3a2b514c3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/93.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/94.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/94.jpg new file mode 100644 index 000000000..57b6c6b63 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/94.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/95.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/95.jpg new file mode 100644 index 000000000..138fc3946 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/95.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/96.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/96.jpg new file mode 100644 index 000000000..ad943c9de Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/96.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/97.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/97.jpg new file mode 100644 index 000000000..62ea75fb8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/97.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/98.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/98.jpg new file mode 100644 index 000000000..41dca98ae Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/98.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/99.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/99.jpg new file mode 100644 index 000000000..ed97c9d0b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/men/99.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/propeller-logo.svg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/propeller-logo.svg new file mode 100644 index 000000000..96f8491a9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/propeller-logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/0.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/0.jpg new file mode 100644 index 000000000..c6009f9eb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/0.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/1.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/1.jpg new file mode 100644 index 000000000..d426fa2bf Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/1.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/10.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/10.jpg new file mode 100644 index 000000000..c73223863 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/10.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/100.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/100.jpg new file mode 100644 index 000000000..188758a49 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/100.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/11.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/11.jpg new file mode 100644 index 000000000..1027c5908 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/11.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/12.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/12.jpg new file mode 100644 index 000000000..ab53c42d0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/12.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/13.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/13.jpg new file mode 100644 index 000000000..9ac7687af Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/13.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/14.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/14.jpg new file mode 100644 index 000000000..22ab07506 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/14.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/15.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/15.jpg new file mode 100644 index 000000000..2818c5dda Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/15.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/16.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/16.jpg new file mode 100644 index 000000000..208d90246 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/16.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/17.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/17.jpg new file mode 100644 index 000000000..97e4885ed Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/17.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/18.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/18.jpg new file mode 100644 index 000000000..c21271a20 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/18.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/19.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/19.jpg new file mode 100644 index 000000000..c2e442865 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/19.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/2.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/2.jpg new file mode 100644 index 000000000..fdf962529 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/20.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/20.jpg new file mode 100644 index 000000000..5e359ec31 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/20.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/21.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/21.jpg new file mode 100644 index 000000000..d4ec655fb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/21.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/22.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/22.jpg new file mode 100644 index 000000000..86ee471d2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/22.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/23.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/23.jpg new file mode 100644 index 000000000..3e1fe98e6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/23.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/24.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/24.jpg new file mode 100644 index 000000000..7839f26a7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/24.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/25.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/25.jpg new file mode 100644 index 000000000..f88c98b6c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/25.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/26.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/26.jpg new file mode 100644 index 000000000..96e193445 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/26.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/27.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/27.jpg new file mode 100644 index 000000000..4c46653c6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/27.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/28.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/28.jpg new file mode 100644 index 000000000..c6c722e4b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/28.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/29.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/29.jpg new file mode 100644 index 000000000..d916ac9f1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/29.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/3.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/3.jpg new file mode 100644 index 000000000..c0e9afee2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/3.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/30.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/30.jpg new file mode 100644 index 000000000..ad6ad9ff1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/30.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/31.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/31.jpg new file mode 100644 index 000000000..fcd6723d4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/31.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/32.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/32.jpg new file mode 100644 index 000000000..a6a2e5f83 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/32.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/33.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/33.jpg new file mode 100644 index 000000000..f2659bd7d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/33.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/34.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/34.jpg new file mode 100644 index 000000000..49a471352 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/34.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/35.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/35.jpg new file mode 100644 index 000000000..eb92fd802 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/35.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/36.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/36.jpg new file mode 100644 index 000000000..f0edc4237 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/36.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/37.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/37.jpg new file mode 100644 index 000000000..13f863a64 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/37.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/38.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/38.jpg new file mode 100644 index 000000000..3e89648c6 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/38.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/39.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/39.jpg new file mode 100644 index 000000000..7c0d29bcb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/39.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/4.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/4.jpg new file mode 100644 index 000000000..eb41bf6e4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/4.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/40.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/40.jpg new file mode 100644 index 000000000..8d21d688b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/40.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/41.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/41.jpg new file mode 100644 index 000000000..a359e5454 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/41.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/42.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/42.jpg new file mode 100644 index 000000000..0abe17d44 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/42.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/43.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/43.jpg new file mode 100644 index 000000000..3aeb58e34 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/43.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/44.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/44.jpg new file mode 100644 index 000000000..a63f8ce57 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/44.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/45.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/45.jpg new file mode 100644 index 000000000..9bef78e23 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/45.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/46.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/46.jpg new file mode 100644 index 000000000..f77567141 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/46.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/47.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/47.jpg new file mode 100644 index 000000000..7839f26a7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/47.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/48.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/48.jpg new file mode 100644 index 000000000..502e68474 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/48.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/49.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/49.jpg new file mode 100644 index 000000000..ecead1fae Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/49.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/5.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/5.jpg new file mode 100644 index 000000000..0d810bd3f Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/5.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/50.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/50.jpg new file mode 100644 index 000000000..98fa7b11b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/50.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/51.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/51.jpg new file mode 100644 index 000000000..502e68474 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/51.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/52.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/52.jpg new file mode 100644 index 000000000..6efac62c4 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/52.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/53.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/53.jpg new file mode 100644 index 000000000..085c6c0fd Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/53.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/54.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/54.jpg new file mode 100644 index 000000000..4c574932c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/54.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/55.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/55.jpg new file mode 100644 index 000000000..9e24b8ef0 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/55.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/56.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/56.jpg new file mode 100644 index 000000000..f2659bd7d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/56.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/57.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/57.jpg new file mode 100644 index 000000000..ea4a22e51 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/57.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/58.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/58.jpg new file mode 100644 index 000000000..f39c0d7c1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/58.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/59.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/59.jpg new file mode 100644 index 000000000..b96857892 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/59.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/6.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/6.jpg new file mode 100644 index 000000000..e6e223fac Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/6.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/60.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/60.jpg new file mode 100644 index 000000000..4e88252a3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/60.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/61.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/61.jpg new file mode 100644 index 000000000..5e822646a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/61.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/62.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/62.jpg new file mode 100644 index 000000000..f0edc4237 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/62.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/63.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/63.jpg new file mode 100644 index 000000000..21e482dc7 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/63.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/64.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/64.jpg new file mode 100644 index 000000000..ec96c1046 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/64.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/65.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/65.jpg new file mode 100644 index 000000000..3cab57987 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/65.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/66.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/66.jpg new file mode 100644 index 000000000..36cc0a597 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/66.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/67.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/67.jpg new file mode 100644 index 000000000..8d0815e01 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/67.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/68.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/68.jpg new file mode 100644 index 000000000..339130427 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/68.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/69.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/69.jpg new file mode 100644 index 000000000..ea027b14b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/69.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/7.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/7.jpg new file mode 100644 index 000000000..acab0389c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/7.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/70.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/70.jpg new file mode 100644 index 000000000..0cc2dff1b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/70.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/71.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/71.jpg new file mode 100644 index 000000000..402ac4141 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/71.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/72.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/72.jpg new file mode 100644 index 000000000..3435bc700 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/72.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/73.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/73.jpg new file mode 100644 index 000000000..2b0c8a21a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/73.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/74.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/74.jpg new file mode 100644 index 000000000..188758a49 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/74.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/75.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/75.jpg new file mode 100644 index 000000000..08b043a4a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/75.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/76.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/76.jpg new file mode 100644 index 000000000..e6dbae8e2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/76.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/77.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/77.jpg new file mode 100644 index 000000000..fcababdb2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/77.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/78.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/78.jpg new file mode 100644 index 000000000..9c1a119fb Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/78.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/79.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/79.jpg new file mode 100644 index 000000000..b6dd0668d Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/79.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/8.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/8.jpg new file mode 100644 index 000000000..6ab25af13 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/8.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/80.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/80.jpg new file mode 100644 index 000000000..981542f66 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/80.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/81.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/81.jpg new file mode 100644 index 000000000..bf1dc8c1b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/81.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/82.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/82.jpg new file mode 100644 index 000000000..fa1a29747 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/82.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/83.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/83.jpg new file mode 100644 index 000000000..32a4a7e93 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/83.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/84.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/84.jpg new file mode 100644 index 000000000..beb5491df Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/84.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/85.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/85.jpg new file mode 100644 index 000000000..0a900f9e8 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/85.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/86.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/86.jpg new file mode 100644 index 000000000..4a01b17b1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/86.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/87.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/87.jpg new file mode 100644 index 000000000..3c40620c5 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/87.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/88.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/88.jpg new file mode 100644 index 000000000..3be827194 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/88.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/89.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/89.jpg new file mode 100644 index 000000000..ad6ad9ff1 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/89.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/9.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/9.jpg new file mode 100644 index 000000000..0c730dc04 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/9.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/90.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/90.jpg new file mode 100644 index 000000000..6dff1dea3 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/90.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/91.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/91.jpg new file mode 100644 index 000000000..97466f849 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/91.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/92.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/92.jpg new file mode 100644 index 000000000..cd667ab83 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/92.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/93.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/93.jpg new file mode 100644 index 000000000..81ea06138 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/93.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/94.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/94.jpg new file mode 100644 index 000000000..fc71188bc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/94.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/95.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/95.jpg new file mode 100644 index 000000000..ff819b3e9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/95.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/96.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/96.jpg new file mode 100644 index 000000000..0cc2dff1b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/96.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/97.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/97.jpg new file mode 100644 index 000000000..402ac4141 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/97.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/98.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/98.jpg new file mode 100644 index 000000000..3435bc700 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/98.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/99.jpg b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/99.jpg new file mode 100644 index 000000000..2b0c8a21a Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/files/src/assets/images/women/99.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/index.ts new file mode 100644 index 000000000..a0aa32130 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/crm-grid/index.ts @@ -0,0 +1,47 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGridCRMTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "crm-grid"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "CRM Grid"; + this.description = "CRM IgxGrid"; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" }, + { + provide: [ + "IgxCsvExporterService", + "IgxExcelExporterService" + ], + from: "<%=igxPackage%>" }, + { + import: [ + "IgxAvatarModule", + "IgxBadgeModule", + "IgxButtonModule", + "IgxIconModule", + "IgxInputGroupModule", + "IgxProgressBarModule", + "IgxRippleModule", + "IgxSwitchModule", + "IgxToggleModule", + "IgxCheckboxModule" + ], + from: "<%=igxPackage%>" + }, + { + import: [ + "IgxSparklineModule", + "IgxSparklineCoreModule" + ], + from: "igniteui-angular-charts" + }, + { import: "FormsModule", from: "@angular/forms" } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; + } +} +module.exports = new IgxGridCRMTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..90abbf391 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,233 @@ +
+
+
+
+ Dark +
+
+ + Grouped +
+
+ Toolbar +
+
+ + +
+
+ + +
+
+
+ +
+
+
+ Feeding {{volume}} records every {{frequency / 1000}} sec. + {{volume}} records updated. + Feeding {{volume}} records every {{frequency / 1000}} sec. + ~{{volume/5}} records updated. +
+ + + + + + + + + + + + + + + + + + + + + {{ c }} + + + + + + + + + + {{ r.Region }} + + + + + + + + +
+ {{cell.value | currency:'USD':'symbol':'1.4-4'}} + trending_up + trending_down +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ Chart + +
+ + +
+ +
+ +
+
+
+ + +
+
+
Category: {{ item.Category }}
+
+
+
Country: {{ item.Country }}
+
+
+
Price: ${{ item.Price }}
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..1f69471a9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,254 @@ +@use '<%=igxPackage%>/theming' as *; + +:host { + display: block; + width: 100%; + padding: 0 !important; +} +:host ::ng-deep { + .fin-dark-theme { + .fintech-slider, + .sample-toolbar { + color: rgba(255, 255, 255, 0.87); + } + } + + .fintech-icons { + display: flex; + align-items: center; + igx-icon { + font-size: 16px; + width: 16px; + height: 16px; + margin-left: 4px; + } + } + .igx-grid__grouparea { + max-height: 100%; + height: auto; + } + .changePos, + .changeNeg, + .strongPositive, + .strongNegative { + color: #fff !important; + .igx-grid__td-text { + padding: 2px 5px; + } + } + .positive { + color: #4eb862 !important; + } + .positive.strongPositive { + .igx-grid__td-text { + color: rgba(78, 184, 98, 0.8) !important; + } + } + .negative { + color: #d31642 !important; + } + .negative.strongNegative { + .igx-grid__td-text { + color: rgba(255, 19, 74, 0.8) !important; + } + } + // NORMAL + // positive + .changePos { + .igx-grid__td-text { + background: #335e3b; + } + } + .changePos1 { + background: #335e3b; + color: #fff; + } + .changePos2 { + .igx-grid__td-text { + border-right: 4px solid #335e3b; + padding-right: 4px; + } + } + // negative + .changeNeg { + .igx-grid__td-text { + background: #7a1c32; + } + } + .changeNeg1 { + color: #fff; + background: #7a1c32; + } + .changeNeg2 { + .igx-grid__td-text { + border-right: 4px solid #7a1c32; + padding-right: 4px; + } + } + // selected + .igx-grid__td--selected.changePos1, + .igx-grid__td--selected.changePos2, + .igx-grid__td--selected.changePos { + background-color: #335e3b !important; + .fintech-icons, + .igx-grid__td-text { + color: #fff; + } + } + .igx-grid__td--selected.changeNeg1, + .igx-grid__td--selected.changeNeg2, + .igx-grid__td--selected.changeNeg { + background-color: #7a1c32 !important; + .fintech-icons, + .igx-grid__td-text { + color: #fff; + } + } + // STRONG + // positive + .strongPositive { + .igx-grid__td-text { + background: #459a55; + } + } + .strongPositive1 { + background: #459a55; + color: #fff; + } + .strongPositive2 { + .igx-grid__td-text { + border-right: 4px solid #459a55; + padding-right: 4px; + } + } + // negative + .strongNegative { + .igx-grid__td-text { + background: #d31642; + color: #fff; + } + } + .strongNegative1 { + background: #d31642; + color: #fff; + } + .strongNegative2 { + .igx-grid__td-text { + border-right: 4px solid #d31642; + padding-right: 4px; + } + } + // selected + .igx-grid__td--selected.strongPositive1, + .igx-grid__td--selected.strongPositive2, + .igx-grid__td--selected.strongPositive { + background-color: #459a55 !important; + .fintech-icons, + .igx-grid__td-text { + color: #fff; + } + } + .igx-grid__td--selected.strongNegative1, + .igx-grid__td--selected.strongNegative2, + .igx-grid__td--selected.strongNegative { + background-color: #d31642 !important; + .fintech-icons, + .igx-grid__td-text { + color: #fff; + } + } + .controls-holder { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + width: 100%; + padding-bottom: 15px; + } + + .switches { + display: flex; + justify-content: space-between; + align-items: center; + flex: 1 0 0%; + padding-right: 20px; + font-size: 0.9rem; + } + .control-item { + padding-right: 20px; + label { + color: var(--igx-surface-500-contrast); + } + } + .igx-slider, + .igx-slider--disabled { + height: 24px; + } + .fintech-slider { + width: 40%; + min-width: 145px; + } + .fintech-play-controls { + width: 45%; + min-width: 620px; + margin-top: 10px; + } + .sample-toolbar { + height: 20px; + font-size: 0.8rem; + line-height: 20px; + /* position: absolute; */ + /* bottom: 10px; */ + /* left: 10px; */ + margin-top: 11px; + } + .fin-dark-theme { + .fintech-slider, + .sample-toolbar { + color: rgba(255, 255, 255, 0.87); + } + } + .igx-grid__outlet span, + .igx-excel-filter span, + .igx-excel-filter header, + .igx-excel-filter input { + font-size: 0.8125rem; + } + + .igx-button--icon { + width: 2rem; + height: 2rem; + } +} + +.grid__wrapper { + padding: 5px 15px; + height: 100%; +} + +@include core(); +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); + + +$green-palette: palette($primary: #09f, $secondary: #72da67, $surface: #333); + +:host { + ::ng-deep { + + .fin-dark-theme { + @include dark-theme($green-palette); + background: #333; + + igx-grid-cell { + .igx-button--icon { + width: 2rem; + height: 2rem; + } + } + + ::-moz-placeholder { + opacity: 1; + } + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..c0c310799 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,31 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { IgxGridModule, IgxButtonModule, IgxSwitchModule, IgxSliderModule, IgxCheckboxModule, IgxDialogModule } from '<%=igxPackage%>'; +import { IgxCategoryChartModule } from 'igniteui-angular-charts'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component ], + imports: [ FormsModule, BrowserAnimationsModule, + IgxGridModule, IgxDialogModule, IgxCategoryChartModule, + IgxButtonModule, IgxSwitchModule, IgxSliderModule, IgxCheckboxModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..885c64e1d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,470 @@ +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { + CellType, + DefaultSortingStrategy, + GridSelectionMode, + IButtonGroupEventArgs, + IChangeCheckboxEventArgs, + IGridKeydownEventArgs, + IgxButtonGroupComponent, + IgxDialogComponent, + IgxGridComponent, + IgxSliderComponent, + IRowSelectionEventArgs, + SortingDirection +} from '<%=igxPackage%>'; +import { CategoryChartType, IgxCategoryChartComponent } from 'igniteui-angular-charts'; +import { timer } from 'rxjs'; +import { debounce } from 'rxjs/operators'; +import { LocalDataService } from './localData.service'; +import { Contract, REGIONS } from './localData/financialData'; + +@Component({ + providers: [LocalDataService], + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit, AfterViewInit, OnDestroy { + @ViewChild('grid1', { static: true }) public grid1!: IgxGridComponent; + @ViewChild('buttonGroup1', { static: true }) public buttonGroup1!: IgxButtonGroupComponent; + @ViewChild('buttonGroup2', { static: true }) public buttonGroup2!: IgxButtonGroupComponent; + @ViewChild('slider1', { static: true }) public volumeSlider!: IgxSliderComponent; + @ViewChild('slider2', { static: true }) public intervalSlider!: IgxSliderComponent; + @ViewChild('chart1', { static: true }) public chart1!: IgxCategoryChartComponent; + @ViewChild('dialog', { static: true }) public dialog!: IgxDialogComponent; + + public showToolbar: boolean = false; + public properties: string[] = []; + public selectionMode: GridSelectionMode = 'multiple'; + public chartType = CategoryChartType; + public theme: boolean = false; + public volume: number = 1000; + public frequency: number = 500; + public data: any[] = []; + public chartData: any[] = []; + public multiCellSelection: { data: any[] } = { data: [] }; + public controls = [ + { + disabled: false, + icon: 'update', + label: 'LIVE PRICES', + selected: false + }, + { + disabled: false, + icon: 'update', + label: 'LIVE ALL PRICES', + selected: false + }, + { + disabled: true, + icon: 'stop', + label: 'Stop', + selected: false + }, + { + disabled: false, + icon: 'insert_chart_outlined', + label: 'Chart', + selected: false + } + ]; + + public contracts = Contract; + public regions = REGIONS; + private subscription: any; + private selectedButton: number = -1; + private timer: any; + private volumeChanged: any; + constructor( + private localService: LocalDataService, + private elRef: ElementRef, + private cdr: ChangeDetectorRef) { + this.subscription = this.localService.getData(this.volume); + this.localService.records.subscribe(x => { this.data = x; }); + } + + public ngOnInit(): void { + this.grid1.groupingExpressions = [{ + dir: SortingDirection.Desc, + fieldName: 'Category', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + }, + { + dir: SortingDirection.Desc, + fieldName: 'Type', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + }, + { + dir: SortingDirection.Desc, + fieldName: 'Settlement', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + } + ]; + this.volumeChanged = this.volumeSlider.valueChange.pipe(debounce(() => timer(200))); + this.volumeChanged.subscribe( + (x: any) => { + this.localService.getData(this.volume); + }, + (err: string) => console.log('Error: ' + err)); + } + + public ngAfterViewInit(): void { + this.grid1.hideGroupedColumns = true; + this.grid1.reflow(); + this.selectFirstGroupAndFillChart(); + this.cdr.detectChanges(); + } + + public selectFirstGroupAndFillChart(): void { + this.properties = ['Price', 'Country']; + this.setChartConfig('Countries', 'Prices (USD)', 'Data Chart with prices by Category and Country'); + + if (this.grid1.groupsRecords[0].groups && this.grid1.groupsRecords[0]?.groups[0]?.groups) { + const recordsToBeSelected = this.grid1.selectionService.getRowIDs(this.grid1.groupsRecords[0].groups[0].groups[0].records); + recordsToBeSelected.forEach(item => { + this.grid1.selectionService.selectRowById(item, false, true); + }); + } + } + + public setChartConfig(xAsis: string, yAxis: string, title: string): void { + // update label interval and angle based on data + this.setLabelIntervalAndAngle(); + + this.chart1.xAxisTitle = xAsis; + this.chart1.yAxisTitle = yAxis; + this.chart1.chartTitle = title; + } + + public onButtonAction(evt: IButtonGroupEventArgs): void { + switch (evt.index) { + case 0: { + this.disableOtherButtons(evt.index, true); + const currData = this.grid1.data; + this.timer = setInterval(() => this.ticker(currData), this.frequency); + break; + } + case 1: { + this.disableOtherButtons(evt.index, true); + const currData = this.grid1.data; + this.timer = setInterval(() => this.tickerAllPrices(currData), this.frequency); + break; + } + case 2: { + this.disableOtherButtons(evt.index, false); + this.stopFeed(); + break; + } + case 3: { + this.disableOtherButtons(evt.index, true); + this.dialog.open(); + break; + } + default: + { + break; + } + } + } + + public onCloseHandler(): void { + this.buttonGroup1.selectButton(2); + if (this.grid1.navigation.activeNode) { + if (this.grid1.navigation.activeNode.row === -1) { + this.grid1.theadRow.nativeElement.focus(); + } else { + this.grid1.tbody.nativeElement.focus(); + } + } + } + + public closeDialog(evt: KeyboardEvent): void { + if (this.dialog.isOpen && + evt.shiftKey === true && evt.ctrlKey === true && evt.key.toLowerCase() === 'd') { + evt.preventDefault(); + this.dialog.close(); + } + } + + public onChange(event: IChangeCheckboxEventArgs): void { + if (this.grid1.groupingExpressions.length > 0) { + this.grid1.groupingExpressions = []; + } else { + this.grid1.groupingExpressions = [{ + dir: SortingDirection.Desc, + fieldName: 'Category', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + }, + { + dir: SortingDirection.Desc, + fieldName: 'Type', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + }, + { + dir: SortingDirection.Desc, + fieldName: 'Contract', + ignoreCase: false, + strategy: DefaultSortingStrategy.instance() + } + ]; + } + } + + public rowSelectionChanging(args: IRowSelectionEventArgs): void { + this.grid1.clearCellSelection(); + this.chartData = []; + args.newSelection.forEach(row => { + if (this.grid1.data) { + this.chartData.push(this.grid1.data[row]); + this.chart1.notifyInsertItem(this.chartData, this.chartData.length - 1, + this.grid1.data[row]); + } + }); + this.setLabelIntervalAndAngle(); + this.setChartConfig('Countries', 'Prices (USD)', 'Data Chart with prices by Category and Country'); + } + + public openSingleRowChart(cell: CellType): void { + this.chartData = []; + setTimeout(() => { + this.chartData = this.data.filter(item => item.Region === cell.row.data.Region && + item.Category === cell.row.data.Category); + + this.chart1.notifyInsertItem(this.chartData, this.chartData.length - 1, {}); + + this.setLabelIntervalAndAngle(); + this.chart1.chartTitle = 'Data Chart with prices of ' + this.chartData[0].Category + ' in ' + + this.chartData[0].Region + ' Region'; + + this.dialog.open(); + }, 200); + } + + public stopFeed(): void { + if (this.timer) { + clearInterval(this.timer); + } + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + public formatNumber(value: number): string { + return value.toFixed(2); + } + + public percentage(value: number): string { + return value.toFixed(2) + '%'; + } + + public formatCurrency(value: number): string { + return '$' + value.toFixed(3); + } + + /** + * the below code is needed when accessing the sample through the navigation + * it will style all the space below the sample component element, but not the navigation menu + */ + public onThemeChanged(event: IChangeCheckboxEventArgs): void { + const parentEl = this.parentComponentEl(); + if (event.checked && parentEl.classList.contains('main')) { + parentEl.classList.add('fin-dark-theme'); + } else { + parentEl.classList.remove('fin-dark-theme'); + } + } + + public ngOnDestroy(): void { + this.stopFeed(); + this.volumeChanged.unsubscribe(); + } + + public toggleToolbar(): void { + this.showToolbar = !this.showToolbar; + } + + private negative = (rowData: any): boolean => { + return rowData['Change(%)'] < 0; + } + private positive = (rowData: any): boolean => { + return rowData['Change(%)'] > 0; + } + private changeNegative = (rowData: any): boolean => { + return rowData['Change(%)'] < 0 && rowData['Change(%)'] > -1; + } + private changePositive = (rowData: any): boolean => { + return rowData['Change(%)'] > 0 && rowData['Change(%)'] < 1; + } + private strongPositive = (rowData: any): boolean => { + return rowData['Change(%)'] >= 1; + } + private strongNegative = (rowData: any, key: string): boolean => { + return rowData['Change(%)'] <= -1; + } + + // tslint:disable:member-ordering + public trends = { + changeNeg: this.changeNegative, + changePos: this.changePositive, + negative: this.negative, + positive: this.positive, + strongNegative: this.strongNegative, + strongPositive: this.strongPositive + }; + + public trendsChange = { + changeNeg2: this.changeNegative, + changePos2: this.changePositive, + strongNegative2: this.strongNegative, + strongPositive2: this.strongPositive + }; + + public setLabelIntervalAndAngle(): void { + const intervalSet = this.chartData.length; + if (intervalSet < 10) { + this.chart1.xAxisLabelAngle = 0; + this.chart1.xAxisInterval = 1; + } else if (intervalSet < 15) { + this.chart1.xAxisLabelAngle = 30; + this.chart1.xAxisInterval = 1; + } else if (intervalSet < 40) { + this.chart1.xAxisLabelAngle = 90; + this.chart1.xAxisInterval = 1; + } else if (intervalSet < 100) { + this.chart1.xAxisLabelAngle = 90; + this.chart1.xAxisInterval = 3; + } else if (intervalSet < 200) { + this.chart1.xAxisLabelAngle = 90; + this.chart1.xAxisInterval = 5; + } else if (intervalSet < 400) { + this.chart1.xAxisLabelAngle = 90; + this.chart1.xAxisInterval = 7; + } else if (intervalSet > 400) { + this.chart1.xAxisLabelAngle = 90; + this.chart1.xAxisInterval = 10; + } + this.chart1.yAxisAbbreviateLargeNumbers = true; + } + + public gridKeydown(evt: KeyboardEvent): void { + if (this.grid1.selectedRows.length > 0 && + evt.shiftKey === true && evt.ctrlKey === true && evt.key.toLowerCase() === 'd') { + evt.preventDefault(); + this.dialog.open(); + } + } + + public customKeydown(args: IGridKeydownEventArgs): void { + const target: CellType = args.target as CellType; + const evt: KeyboardEvent = args.event as KeyboardEvent; + const type = args.targetType; + + if (type === 'dataCell' && target.column.field === 'Chart' && evt.key.toLowerCase() === 'enter') { + this.grid1.selectRows([target.row.key], true); + this.openSingleRowChart(target); + } + } + + // tslint:enable:member-ordering + + private disableOtherButtons(ind: number, disableButtons: boolean): void { + if (this.subscription) { + this.subscription.unsubscribe(); + } + this.volumeSlider.disabled = disableButtons; + this.intervalSlider.disabled = disableButtons; + this.selectedButton = ind; + this.buttonGroup1.buttons.forEach((button, index) => { + if (index === 2) { button.disabled = !disableButtons; } else { + this.buttonGroup1.buttons[0].disabled = disableButtons; + this.buttonGroup1.buttons[1].disabled = disableButtons; + } + }); + } + + /** + * returns the main div container of the Index Component, + * if path is /samples/sample-url, or the appRoot, if path is /sample-url + */ + private parentComponentEl(): HTMLElement { + return this.elRef.nativeElement.parentElement.parentElement; + } + + private ticker(data: any): void { + this.grid1.data = this.updateRandomPrices(data); + } + + private tickerAllPrices(data: any): void { + this.grid1.data = this.updateAllPrices(data); + } + + /** + * Updates values in every record + */ + private updateAllPrices(data: any[]): any[] { + const newData = []; + for (const dataRow of data) { + newData.push(this.randomizeObjectData(dataRow)); + } + return newData; + } + + /** + * Updates values in random number of records + */ + private updateRandomPrices(data: any[]): any { + const newData = data.slice(); + for (let i = Math.round(Math.random() * 10), y = 0; i < data.length; i += Math.round(Math.random() * 10)) { + newData[i] = this.randomizeObjectData(data[i]); + y++; + } + return newData; + } + + /** + * Generates ne values for Change, Price and ChangeP columns + */ + private randomizeObjectData(dataObj: any) { + const changeP = 'Change(%)'; + const res = this.generateNewPrice(dataObj.Price); + dataObj.Change = res.Price - dataObj.Price; + dataObj.Price = res.Price; + dataObj[changeP] = res.ChangePercent; + return { ...dataObj }; + } + + private generateNewPrice(oldPrice: number): any { + let rnd = Math.random(); + rnd = Math.round(rnd * 100) / 100; + const volatility = 2; + let newPrice = 0; + let changePercent = 2 * volatility * rnd; + if (changePercent > volatility) { + changePercent -= (2 * volatility); + } + const changeAmount = oldPrice * (changePercent / 100); + newPrice = oldPrice + changeAmount; + newPrice = Math.round(newPrice * 100) / 100; + const result = { Price: 0, ChangePercent: 0 }; + changePercent = Math.round(changePercent * 100) / 100; + result.Price = newPrice; + result.ChangePercent = changePercent; + + return result; + } + + get grouped(): boolean { + return this.grid1.groupingExpressions.length > 0; + } + + get buttonSelected(): number { + return this.selectedButton || this.selectedButton === 0 ? this.selectedButton : -1; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData.service.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData.service.ts new file mode 100644 index 000000000..5868d1753 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable} from 'rxjs'; +import { FinancialData } from './localData/financialData'; + +@Injectable() +export class LocalDataService { + public records: Observable; + public records$: BehaviorSubject; + + constructor() { + this.records$ = new BehaviorSubject([] as any); + this.records = this.records$.asObservable(); + } + + public getData(count: number = 10) { + const financialData: FinancialData = new FinancialData(); + this.records$.next(financialData.generateData(count)); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData/financialData.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData/financialData.ts new file mode 100644 index 000000000..157f4256d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/files/src/app/__path__/localData/financialData.ts @@ -0,0 +1,1013 @@ +/* tslint:disable */ +export const REGIONS: any[] = [ + { + "Region": "North America", + "Countries": [ "Canada", "United States", "Mexico" ] + }, + { + "Region": "Middle East", + "Countries": [ "Turkey", "Iraq", "Saudi Arabia", "Syria", "UAE", "Israel", "Jordan", "Lebanon", "Oman", "Kuwait", "Qatar", "Bahrain", "Iran" ] + }, + { + "Region": "Europe", + "Countries": [ "Russia", "Germany", "France", "United Kingdom", "Italy", "Spain", "Poland", "Romania", "Netherlands", "Belgium", "Greece", + "Portugal", "Czech Republic", "Hungary", "Sweden", "Austria", "Switzerland", "Bulgaria", "Denmark", "Finland", "Slovakia", "Norway", + "Ireland", "Croatia", "Slovenia", "Estonia", "Iceland",] + }, + { + "Region": "Africa", + "Countries": [ "Nigeria", "Ethiopia", "Egypt", "South Africa", "Algeria", "Morocco", "Cameroon", "Niger", "Senegal", "Tunisia", "Libya"] + }, + { + "Region": "Asia Pacific", + "Countries": [ "Afghanistan", "Australia", "Azerbaijan", "China", "Hong Kong", "India", "Indonesia", + "Japan", "Malaysia", "New Zealand", "Pakistan", "Philippines", "Korea", "Singapore", "Taiwan", "Thailand"] + }, + { + "Region": "South America", + "Countries": [ "Argentina", "Bolivia", "Brazil", "Chile", "Colombia", "Ecuador", "Guyana", "Paraguay", "Peru", "Suriname", "Uruguay", "Venezuela" ] + }, + +] + +export const DealType: any[] = [ + "Buy", "Sell" +] + +export const Contract: any[] = [ + "Forwards", "Futures", "Options", "Swap", "CFD" +] + +export const Settlement: any[] = [ + "Deliverable", "Cash" +] + +export const MOCKFINANCEDATA: any[] = [ +{ + "IndGrou": "Airlines", + "IndSect": "Consumer, Cyclical", + "IndSubg": "Airlines", + "SecType": "PUBLIC", + // tslint:disable-next-line:object-literal-sort-keys + "CpnTyp": "FIXED", + "IssuerN": "AMERICAN AIRLINES GROUP", + "Moodys": "WR", + "Fitch": "N.A.", + "DBRS": "N.A.", + "CollatT": "NEW MONEY", + "Curncy": "USD", + "Security": "001765866 Pfd", + "sector": "Pfd", + "CUSIP": "1765866", + "Ticker": "AAL", + "Cpn": "7.875", + "Maturity": "7/13/1939", + "KRD_3YR": 0.00006, + "RISK_COUNTRY": "", + "MUNI_SECTOR": "", + "ZV_SPREAD": 28.302, + "KRD_5YR": 0, + "KRD_1YR": -0.00187, + "PD_WALA": null +}]; + +export const DATA: any[] = [ + { + "Category": "Metal", + "Type": "Gold", + "Spread": 0.01, + "Open Price": 1281.10, + "Price": 1280.7317, + "Buy": 1280.7267, + "Sell": 1280.7367, + "Change": -0.3683, + "Change(%)": -0.0287, + "Volume": 48387, + "High(D)": 1289.50, + "Low(D)": 1279.10, + "High(Y)": 1306, + "Low(Y)": 1047.20, + "Start(Y)": 1176.60, + "Change On Year(%)": 8.8502 + }, + { + "Category": "Metal", + "Type": "Silver", + "Spread": 0.01, + "Open Price": 17.43, + "Price": 17.42, + "Buy": 17.43, + "Sell": 17.43, + "Change": -0.01, + "Change(%)": -0.0574, + "Volume": 11720, + "High(D)": 17.51, + "Low(D)": 17.37, + "High(Y)": 18.06, + "Low(Y)": 13.73, + "Start(Y)": 15.895, + "Change On Year(%)": 9.5942 + }, + { + "Category": "Metal", + "Type": "Copper", + "Spread": 0.02, + "Open Price": 2.123, + "Price": 2.113, + "Buy": 2.123, + "Sell": 2.123, + "Change": -0.01, + "Change(%)": -0.471, + "Volume": 28819, + "High(D)": 2.16, + "Low(D)": 2.11, + "High(Y)": 2.94, + "Low(Y)": 1.96, + "Start(Y)": 2.45, + "Change On Year(%)": -13.7551 + }, + { + "Category": "Metal", + "Type": "Platinum", + "Spread": 0.01, + "Open Price": 1071.60, + "Price": 1071.0993, + "Buy": 1071.0943, + "Sell": 1071.1043, + "Change": -0.5007, + "Change(%)": -0.0467, + "Volume": 3039, + "High(D)": 1081.20, + "Low(D)": 1070.50, + "High(Y)": 1120.60, + "Low(Y)": 812.40, + "Start(Y)": 966.50, + "Change On Year(%)": 10.8225 + }, + { + "Category": "Metal", + "Type": "Palladium", + "Spread": 0.01, + "Open Price": 600.55, + "Price": 601.0005, + "Buy": 600.9955, + "Sell": 601.0055, + "Change": 0.4505, + "Change(%)": 0.075, + "Volume": 651, + "High(D)": 607.20, + "Low(D)": 598.40, + "High(Y)": 690, + "Low(Y)": 458.6, + "Start(Y)": 574.3, + "Change On Year(%)": 4.6492 + }, + { + "Category": "Oil", + "Type": "Oil", + "Spread": 0.015, + "Open Price": 45.54, + "Price": 45.7899, + "Buy": 45.7824, + "Sell": 45.7974, + "Change": 0.2499, + "Change(%)": 0.5487, + "Volume": 107196, + "High(D)": 45.94, + "Low(D)": 45.00, + "High(Y)": 65.28, + "Low(Y)": 30.79, + "Start(Y)": 48.035, + "Change On Year(%)": -4.6739 + }, + { + "Category": "Oil", + "Type": "Brent", + "Spread": 0.01, + "Open Price": 46.06, + "Price": 46.05, + "Buy": 46.06, + "Sell": 46.06, + "Change": -0.01, + "Change(%)": -0.0217, + "Volume": 59818, + "High(D)": 46.48, + "Low(D)": 45.60, + "High(Y)": 71.14, + "Low(Y)": 30.02, + "Start(Y)": 50.58, + "Change On Year(%)": -8.9561 + }, + { + "Category": "Oil", + "Type": "Natural Gas", + "Spread": 0.02, + "Open Price": 2.094, + "Price": 2.104, + "Buy": 2.094, + "Sell": 2.094, + "Change": 0.01, + "Change(%)": 0.4776, + "Volume": 2783, + "High(D)": 2.11, + "Low(D)": 2.09, + "High(Y)": 3.20, + "Low(Y)": 1.84, + "Start(Y)": 2.52, + "Change On Year(%)": -16.5079 + }, + { + "Category": "Oil", + "Type": "RBOB Gas", + "Spread": 0.015, + "Open Price": 1.5086, + "Price": 1.9532, + "Buy": 1.9457, + "Sell": 1.9607, + "Change": 0.4446, + "Change(%)": 29.4686, + "Volume": 2646, + "High(D)": 1.9532, + "Low(D)": 1.50, + "High(Y)": 2.05, + "Low(Y)": 1.15, + "Start(Y)": 1.60, + "Change On Year(%)": 22.0727 + }, + { + "Category": "Oil", + "Type": "Diesel", + "Spread": 0.015, + "Open Price": 1.3474, + "Price": 1.3574, + "Buy": 1.3474, + "Sell": 1.3474, + "Change": 0.01, + "Change(%)": 0.7422, + "Volume": 2971, + "High(D)": 1.36, + "Low(D)": 1.34, + "High(Y)": 2.11, + "Low(Y)": 0.92, + "Start(Y)": 1.515, + "Change On Year(%)": -10.4026 + }, + { + "Category": "Oil", + "Type": "Ethanol", + "Spread": 0.01, + "Open Price": 1.512, + "Price": 2.7538, + "Buy": 2.7488, + "Sell": 2.7588, + "Change": 1.2418, + "Change(%)": 82.1323, + "Volume": 14, + "High(D)": 2.7538, + "Low(D)": 1.1168, + "High(Y)": 2.7538, + "Low(Y)": 1.1168, + "Start(Y)": 1.475, + "Change On Year(%)": 86.7011 + }, + { + "Category": "Oil", + "Type": "Uranium", + "Spread": 0.02, + "Open Price": 27.55, + "Price": 27.58, + "Buy": 27.55, + "Sell": 27.55, + "Change": 0.03, + "Change(%)": 0.1089, + "Volume": 12, + "High(D)": 27.55, + "Low(D)": 27.55, + "High(Y)": 29.32, + "Low(Y)": 21.28, + "Start(Y)": 25.30, + "Change On Year(%)": 9.0119 + }, + { + "Category": "Oil", + "Type": "Coal", + "Spread": 0.015, + "Open Price": 0.4363, + "Price": 0.4163, + "Buy": 0.4363, + "Sell": 0.4363, + "Change": -0.02, + "Change(%)": -4.584, + "Volume": 3, + "High(D)": 0.4363, + "Low(D)": 0.4363, + "High(Y)": 0.4841, + "Low(Y)": 0.3954, + "Start(Y)": 0.4398, + "Change On Year(%)": -5.3326 + }, + { + "Category": "Agriculture", + "Type": "Wheat", + "Spread": 0.01, + "Open Price": 465.50, + "Price": 465.52, + "Buy": 465.50, + "Sell": 465.50, + "Change": 0.02, + "Change(%)": 0.0043, + "Volume": 4318, + "High(D)": 467.00, + "Low(D)": 463.25, + "High(Y)": 628.50, + "Low(Y)": 449.50, + "Start(Y)": 539.00, + "Change On Year(%)": -13.6327 + }, + { + "Category": "Agriculture", + "Type": "Corn", + "Spread": 0.01, + "Open Price": 379.50, + "Price": 379.8026, + "Buy": 379.7976, + "Sell": 379.8076, + "Change": 0.3026, + "Change(%)": 0.0797, + "Volume": 11266, + "High(D)": 381.00, + "Low(D)": 377.75, + "High(Y)": 471.25, + "Low(Y)": 351.25, + "Start(Y)": 411.25, + "Change On Year(%)": -7.6468 + }, + { + "Category": "Agriculture", + "Type": "Sugar", + "Spread": 0.01, + "Open Price": 15.68, + "Price": 14.6742, + "Buy": 14.6692, + "Sell": 14.6792, + "Change": -1.0058, + "Change(%)": -6.4146, + "Volume": 4949, + "High(D)": 15.70, + "Low(D)": 14.6742, + "High(Y)": 16.87, + "Low(Y)": 11.37, + "Start(Y)": 14.12, + "Change On Year(%)": 3.9249 + }, + { + "Category": "Agriculture", + "Type": "Soybean", + "Spread": 0.01, + "Open Price": 1038.00, + "Price": 1038.6171, + "Buy": 1038.6121, + "Sell": 1038.6221, + "Change": 0.6171, + "Change(%)": 0.0595, + "Volume": 20356, + "High(D)": 1044.00, + "Low(D)": 1031.75, + "High(Y)": 1057.00, + "Low(Y)": 859.50, + "Start(Y)": 958.25, + "Change On Year(%)": 8.3869 + }, + { + "Category": "Agriculture", + "Type": "Soy oil", + "Spread": 0.01, + "Open Price": 33.26, + "Price": 33.7712, + "Buy": 33.7662, + "Sell": 33.7762, + "Change": 0.5112, + "Change(%)": 1.5371, + "Volume": 10592, + "High(D)": 33.7712, + "Low(D)": 33.06, + "High(Y)": 35.43, + "Low(Y)": 26.61, + "Start(Y)": 31.02, + "Change On Year(%)": 8.8692 + }, + { + "Category": "Agriculture", + "Type": "Soy Meat", + "Spread": 0.01, + "Open Price": 342.60, + "Price": 342.62, + "Buy": 342.60, + "Sell": 342.60, + "Change": 0.02, + "Change(%)": 0.0058, + "Volume": 5646, + "High(D)": 345.40, + "Low(D)": 340.30, + "High(Y)": 353.40, + "Low(Y)": 261.70, + "Start(Y)": 307.55, + "Change On Year(%)": 11.403 + }, + { + "Category": "Agriculture", + "Type": "OJ Future", + "Spread": 0.01, + "Open Price": 140.60, + "Price": 140.1893, + "Buy": 140.1843, + "Sell": 140.1943, + "Change": -0.4107, + "Change(%)": -0.2921, + "Volume": 7, + "High(D)": 140.1893, + "Low(D)": 0.00, + "High(Y)": 155.95, + "Low(Y)": 113.00, + "Start(Y)": 134.475, + "Change On Year(%)": 4.2493 + }, + { + "Category": "Agriculture", + "Type": "Coffee", + "Spread": 0.01, + "Open Price": 125.70, + "Price": 125.69, + "Buy": 125.70, + "Sell": 125.70, + "Change": -0.01, + "Change(%)": -0.008, + "Volume": 1654, + "High(D)": 125.80, + "Low(D)": 125.00, + "High(Y)": 155.75, + "Low(Y)": 115.35, + "Start(Y)": 135.55, + "Change On Year(%)": -7.2741 + }, + { + "Category": "Agriculture", + "Type": "Cocoa", + "Spread": 0.01, + "Open Price": 3076.00, + "Price": 3076.03, + "Buy": 3076.00, + "Sell": 3076.00, + "Change": 0.03, + "Change(%)": 0.001, + "Volume": 978, + "High(D)": 3078.00, + "Low(D)": 3066.00, + "High(Y)": 3406.00, + "Low(Y)": 2746.00, + "Start(Y)": 3076.00, + "Change On Year(%)": 0.001 + }, + { + "Category": "Agriculture", + "Type": "Rice", + "Spread": 0.01, + "Open Price": 11.245, + "Price": 10.4154, + "Buy": 10.4104, + "Sell": 10.4204, + "Change": -0.8296, + "Change(%)": -7.3779, + "Volume": 220, + "High(D)": 11.38, + "Low(D)": 10.4154, + "High(Y)": 14.14, + "Low(Y)": 9.70, + "Start(Y)": 11.92, + "Change On Year(%)": -12.6228 + }, + { + "Category": "Agriculture", + "Type": "Oats", + "Spread": 0.01, + "Open Price": 194.50, + "Price": 194.2178, + "Buy": 194.2128, + "Sell": 194.2228, + "Change": -0.2822, + "Change(%)": -0.1451, + "Volume": 64, + "High(D)": 195.75, + "Low(D)": 194.00, + "High(Y)": 241.25, + "Low(Y)": 183.75, + "Start(Y)": 212.50, + "Change On Year(%)": -8.6034 + }, + { + "Category": "Agriculture", + "Type": "Milk", + "Spread": 0.01, + "Open Price": 12.87, + "Price": 12.86, + "Buy": 12.87, + "Sell": 12.87, + "Change": -0.01, + "Change(%)": -0.0777, + "Volume": 7, + "High(D)": 12.89, + "Low(D)": 12.81, + "High(Y)": 16.96, + "Low(Y)": 12.81, + "Start(Y)": 14.885, + "Change On Year(%)": -13.6043 + }, + { + "Category": "Agriculture", + "Type": "Cotton", + "Spread": 0.01, + "Open Price": 61.77, + "Price": 61.76, + "Buy": 61.77, + "Sell": 61.77, + "Change": -0.01, + "Change(%)": -0.0162, + "Volume": 3612, + "High(D)": 62.06, + "Low(D)": 61.32, + "High(Y)": 67.59, + "Low(Y)": 54.33, + "Start(Y)": 60.96, + "Change On Year(%)": 1.3123 + }, + { + "Category": "Agriculture", + "Type": "Lumber", + "Spread": 0.01, + "Open Price": 303.90, + "Price": 304.5994, + "Buy": 304.5944, + "Sell": 304.6044, + "Change": 0.6994, + "Change(%)": 0.2302, + "Volume": 2, + "High(D)": 304.5994, + "Low(D)": 303.90, + "High(Y)": 317.10, + "Low(Y)": 236.00, + "Start(Y)": 276.55, + "Change On Year(%)": 10.1426 + }, + { + "Category": "Livestock", + "Type": "LV Cattle", + "Spread": 0.01, + "Open Price": 120.725, + "Price": 120.705, + "Buy": 120.725, + "Sell": 120.725, + "Change": -0.02, + "Change(%)": -0.0166, + "Volume": 4, + "High(D)": 120.725, + "Low(D)": 120.725, + "High(Y)": 147.98, + "Low(Y)": 113.90, + "Start(Y)": 130.94, + "Change On Year(%)": -7.8166 + }, + { + "Category": "Livestock", + "Type": "FD Cattle", + "Spread": 0.01, + "Open Price": 147.175, + "Price": 148.6065, + "Buy": 148.6015, + "Sell": 148.6115, + "Change": 1.4315, + "Change(%)": 0.9727, + "Volume": 5, + "High(D)": 148.6065, + "Low(D)": 147.175, + "High(Y)": 190.00, + "Low(Y)": 138.10, + "Start(Y)": 164.05, + "Change On Year(%)": -9.4139 + }, + { + "Category": "Livestock", + "Type": "Lean Hogs", + "Spread": 0.01, + "Open Price": 81.275, + "Price": 81.8146, + "Buy": 81.8096, + "Sell": 81.8196, + "Change": 0.5396, + "Change(%)": 0.664, + "Volume": 1, + "High(D)": 81.8146, + "Low(D)": 81.275, + "High(Y)": 83.98, + "Low(Y)": 70.25, + "Start(Y)": 77.115, + "Change On Year(%)": 6.0943 + }, + { + "Category": "Currencies", + "Type": "USD IDX Future", + "Spread": 0.02, + "Open Price": 93.88, + "Price": 93.7719, + "Buy": 93.7619, + "Sell": 93.7819, + "Change": -0.1081, + "Change(%)": -0.1151, + "Volume": 5788, + "High(D)": 94.05, + "Low(D)": 93.7534, + "High(Y)": 100.70, + "Low(Y)": 91.88, + "Start(Y)": 96.29, + "Change On Year(%)": -2.6151 + }, + { + "Category": "Currencies", + "Type": "USD/JPY Future", + "Spread": 0.02, + "Open Price": 9275.50, + "Price": 9277.3342, + "Buy": 9277.3242, + "Sell": 9277.3442, + "Change": 1.8342, + "Change(%)": 0.0198, + "Volume": 47734, + "High(D)": 9277.3342, + "Low(D)": 0.93, + "High(Y)": 9483.00, + "Low(Y)": 0.93, + "Start(Y)": 4741.965, + "Change On Year(%)": 95.6432 + }, + { + "Category": "Currencies", + "Type": "GBP/USD Future", + "Spread": 0.02, + "Open Price": 1.4464, + "Price": 1.1941, + "Buy": 1.1841, + "Sell": 1.2041, + "Change": -0.2523, + "Change(%)": -17.4441, + "Volume": 29450, + "High(D)": 1.45, + "Low(D)": 1.1941, + "High(Y)": 1.59, + "Low(Y)": 1.1941, + "Start(Y)": 1.485, + "Change On Year(%)": -19.59 + }, + { + "Category": "Currencies", + "Type": "AUD/USD Future", + "Spread": 0.02, + "Open Price": 0.7344, + "Price": 0.7444, + "Buy": 0.7344, + "Sell": 0.7344, + "Change": 0.01, + "Change(%)": 1.3617, + "Volume": 36764, + "High(D)": 0.74, + "Low(D)": 0.73, + "High(Y)": 0.79, + "Low(Y)": 0.68, + "Start(Y)": 0.735, + "Change On Year(%)": 1.2789 + }, + { + "Category": "Currencies", + "Type": "USD/CAD Future", + "Spread": 0.02, + "Open Price": 0.7744, + "Price": 0.9545, + "Buy": 0.9445, + "Sell": 0.9645, + "Change": 0.1801, + "Change(%)": 23.2622, + "Volume": 13669, + "High(D)": 0.9545, + "Low(D)": 0.77, + "High(Y)": 0.9545, + "Low(Y)": 0.68, + "Start(Y)": 0.755, + "Change On Year(%)": 26.4295 + }, + { + "Category": "Currencies", + "Type": "USD/CHF Future", + "Spread": 0.02, + "Open Price": 1.0337, + "Price": 1.0437, + "Buy": 1.0337, + "Sell": 1.0337, + "Change": 0.01, + "Change(%)": 0.9674, + "Volume": 5550, + "High(D)": 1.03, + "Low(D)": 1.03, + "High(Y)": 1.11, + "Low(Y)": 0.98, + "Start(Y)": 1.045, + "Change On Year(%)": -0.1244 + }, + { + "Category": "Index", + "Type": "DOW Future", + "Spread": 0.01, + "Open Price": 17711.00, + "Price": 17712.1515, + "Buy": 17712.1465, + "Sell": 17712.1565, + "Change": 1.1515, + "Change(%)": 0.0065, + "Volume": 22236, + "High(D)": 17727.00, + "Low(D)": 17642.00, + "High(Y)": 18083.00, + "Low(Y)": 15299.00, + "Start(Y)": 16691.00, + "Change On Year(%)": 6.118 + }, + { + "Category": "Index", + "Type": "S&P Future", + "Spread": 0.01, + "Open Price": 2057.50, + "Price": 2056.6018, + "Buy": 2056.5968, + "Sell": 2056.6068, + "Change": -0.8982, + "Change(%)": -0.0437, + "Volume": 142780, + "High(D)": 2059.50, + "Low(D)": 2049.00, + "High(Y)": 2105.50, + "Low(Y)": 1794.50, + "Start(Y)": 1950.00, + "Change On Year(%)": 5.4668 + }, + { + "Category": "Index", + "Type": "NAS Future", + "Spread": 0.01, + "Open Price": 4341.25, + "Price": 4341.28, + "Buy": 4341.25, + "Sell": 4341.25, + "Change": 0.03, + "Change(%)": 0.0007, + "Volume": 18259, + "High(D)": 4347.00, + "Low(D)": 4318.00, + "High(Y)": 4719.75, + "Low(Y)": 3867.75, + "Start(Y)": 4293.75, + "Change On Year(%)": 1.107 + }, + { + "Category": "Index", + "Type": "S&P MID MINI", + "Spread": 0.01, + "Open Price": 1454.30, + "Price": 1455.7812, + "Buy": 1455.7762, + "Sell": 1455.7862, + "Change": 1.4812, + "Change(%)": 0.1018, + "Volume": 338, + "High(D)": 1455.7812, + "Low(D)": 1448.00, + "High(Y)": 1527.30, + "Low(Y)": 1236.00, + "Start(Y)": 1381.65, + "Change On Year(%)": 5.3654 + }, + { + "Category": "Index", + "Type": "S&P 600 MINI", + "Spread": 0.01, + "Open Price": 687.90, + "Price": 687.88, + "Buy": 687.90, + "Sell": 687.90, + "Change": -0.02, + "Change(%)": -0.0029, + "Volume": 0, + "High(D)": 0.00, + "Low(D)": 0.00, + "High(Y)": 620.32, + "Low(Y)": 595.90, + "Start(Y)": 608.11, + "Change On Year(%)": 13.1177 + }, + { + "Category": "Interest Rate", + "Type": "US 30YR Future", + "Spread": 0.01, + "Open Price": 164.875, + "Price": 164.1582, + "Buy": 164.1532, + "Sell": 164.1632, + "Change": -0.7168, + "Change(%)": -0.4347, + "Volume": 28012, + "High(D)": 165.25, + "Low(D)": 164.0385, + "High(Y)": 169.38, + "Low(Y)": 151.47, + "Start(Y)": 160.425, + "Change On Year(%)": 2.3271 + }, + { + "Category": "Interest Rate", + "Type": "US 2Y Future", + "Spread": 0.01, + "Open Price": 109.3984, + "Price": 109.3884, + "Buy": 109.3984, + "Sell": 109.3984, + "Change": -0.01, + "Change(%)": -0.0091, + "Volume": 17742, + "High(D)": 109.41, + "Low(D)": 109.38, + "High(Y)": 109.80, + "Low(Y)": 108.62, + "Start(Y)": 109.21, + "Change On Year(%)": 0.1634 + }, + { + "Category": "Interest Rate", + "Type": "US 10YR Future", + "Spread": 0.01, + "Open Price": 130.5625, + "Price": 130.5825, + "Buy": 130.5625, + "Sell": 130.5625, + "Change": 0.02, + "Change(%)": 0.0153, + "Volume": 189310, + "High(D)": 130.63, + "Low(D)": 130.44, + "High(Y)": 132.64, + "Low(Y)": 125.48, + "Start(Y)": 129.06, + "Change On Year(%)": 1.1797 + }, + { + "Category": "Interest Rate", + "Type": "Euro$ 3M", + "Spread": 0.01, + "Open Price": 99.18, + "Price": 99.17, + "Buy": 99.18, + "Sell": 99.18, + "Change": -0.01, + "Change(%)": -0.0101, + "Volume": 29509, + "High(D)": 99.18, + "Low(D)": 99.17, + "High(Y)": 99.38, + "Low(Y)": 98.41, + "Start(Y)": 98.895, + "Change On Year(%)": 0.2781 + } +]; +interface IResponse { + data: any[]; + recordsUpdated: number; + } +/* tslint:enable */ +export class FinancialData { + public generateData(count: number): any[] { + const currData = []; + for (let i = 0; i < count; i++) { + const rand = Math.floor(Math.random() * Math.floor(DATA.length)); + const dataObj = Object.assign({}, DATA[rand]); + + dataObj.Settlement = Settlement[this.generateRandomNumber(0, 1)]; + dataObj.Contract = Contract[this.generateRandomNumber(0, 4)]; + const region = REGIONS[this.generateRandomNumber(0, 5)]; + dataObj.Region = region.Region; + dataObj.Country = this.randomizeCountry(region); + // for (let y = 0; y < 80; y++) { + // dataObj["Text" + y] = "Text"; + // } + + for (const mockData of MOCKFINANCEDATA) { + for (const prop in mockData) { + if (mockData.hasOwnProperty(prop)) { + dataObj[prop] = mockData[prop]; + } + } + } + + dataObj.ID = i; + this.randomizeObjectData(dataObj); + currData.push(dataObj); + } + return currData; + } + public updateAllPrices(data: any[]): any[] { + const currData = []; + for (const dataRow of data) { + const dataObj = Object.assign({}, dataRow); + this.randomizeObjectData(dataObj); + currData.push(dataObj); + } + return currData; + } + + public updateRandomPrices(data: any[]): any { + const currData = data.slice(0, data.length + 1); + let y = 0; + for (let i = Math.round(Math.random() * 10); i < data.length; i += Math.round(Math.random() * 10)) { + const dataObj = Object.assign({}, data[i]); + this.randomizeObjectData(dataObj); + currData[i] = dataObj; + y++; + } + // return {data: currData, recordsUpdated: y }; + return currData; + } + public updateRandomPrices2(data: any[]): IResponse { + const currData = data.slice(0, data.length + 1); + let y = 0; + for (let i = Math.round(Math.random() * 10); i < data.length; i += Math.round(Math.random() * 10)) { + const dataObj = Object.assign({}, data[i]); + this.randomizeObjectData(dataObj); + currData[i] = dataObj; + y++; + } + return {data: currData, recordsUpdated: y }; + } + private randomizeObjectData(dataObj: any) { + const changeP = 'Change(%)'; + const res = this.generateNewPrice(dataObj.Price); + dataObj.Change = res.Price - dataObj.Price; + dataObj.Price = res.Price; + dataObj[changeP] = res.ChangePercent; + } + private generateNewPrice(oldPrice: number): any { + const rnd = parseFloat(Math.random().toFixed(2)); + const volatility = 2; + let newPrice = 0; + + let changePercent = 2 * volatility * rnd; + if (changePercent > volatility) { + changePercent -= (2 * volatility); + } + + const changeAmount = oldPrice * (changePercent / 100); + newPrice = oldPrice + changeAmount; + + const result = {Price: 0, ChangePercent: 0}; + result.Price = parseFloat(newPrice.toFixed(2)); + result.ChangePercent = parseFloat(changePercent.toFixed(2)); + + return result; + } + private generateRandomNumber(min: number, max: number) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + private randomizeCountry(region: any) { + let country; + switch (region.Region) { + case 'North America': { + country = region.Countries[this.generateRandomNumber(0, 2)]; + break; + } + case 'South America': { + country = region.Countries[this.generateRandomNumber(0, 11)]; + break; + } + case 'Europe': { + country = region.Countries[this.generateRandomNumber(0, 26)]; + break; + } + case 'Asia Pacific': { + country = region.Countries[this.generateRandomNumber(0, 15)]; + break; + } + case 'Africa': { + country = region.Countries[this.generateRandomNumber(0, 11)]; + break; + } + case 'Middle East': { + country = region.Countries[this.generateRandomNumber(0, 12)]; + break; + } + } + return country; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/index.ts new file mode 100644 index 000000000..4557c1c11 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-grid/index.ts @@ -0,0 +1,35 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxFinTechGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "fintech-grid"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "FinTech Grid"; + this.description = "Grid with simulated high-frequency data feed"; + this.dependencies = [ + { import: "IgxCategoryChartModule", from: "igniteui-angular-charts" }, + { provide: "IgxExcelExporterService", from: "<%=igxPackage%>" }, + { + import: [ + "IgxButtonGroupModule", + "IgxDialogModule", + "IgxFocusModule", + "IgxGridModule", + "IgxIconModule", + "IgxRippleModule", + "IgxSelectModule", + "IgxSliderModule", + "IgxSwitchModule", + "IgxToggleModule" + ], + from: "<%=igxPackage%>" + }, + { import: "FormsModule", from: "@angular/forms" } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; + } +} +module.exports = new IgxFinTechGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..e23e16b02 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,78 @@ +
+
+
+
+ Dark +
+
+ Toolbar +
+
+ + +
+
+ + +
+
+
+ +
+
+
+ Feeding {{volume}} records every {{frequency / 1000}} sec. + {{volume}} records updated. + Feeding {{volume}} records every {{frequency / 1000}} sec. + ~{{volume/5}} records updated. +
+ + + + + + + + + + + + + + + + + + +
+ {{cell.value | currency:'USD':'symbol':'1.4-4'}} + trending_up + trending_down +
+
+
+ + + + + + + + + + + + + + + + +
+
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..abeacb70a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,229 @@ +@use '<%=igxPackage%>/theming' as *; + +:host ::ng-deep { + .finjs-icons { + display: flex; + align-items: center; + igx-icon { + font-size: 16px; + width: 16px; + height: 16px; + margin-left: 4px; + } + } + .igx-grid__grouparea { + max-height: 100%; + height: auto; + } + .changePos, + .changeNeg, + .strongPositive, + .strongNegative { + color: #fff !important; + .igx-grid__td-text { + padding: 2px 5px; + } + } + .positive { + color: #4eb862 !important; + } + .positive.strongPositive { + .igx-grid__td-text { + color: rgba(78, 184, 98, 0.8) !important; + } + } + .negative { + color: #d31642 !important; + } + .negative.strongNegative { + .igx-grid__td-text { + color: rgba(255, 19, 74, 0.8) !important; + } + } + // NORMAL + // positive + .changePos { + .igx-grid__td-text { + background: #335e3b; + } + } + .changePos1 { + background: #335e3b; + color: #fff; + } + .changePos2 { + .igx-grid__td-text { + border-right: 4px solid #335e3b; + padding-right: 4px; + } + } + // negative + .changeNeg { + .igx-grid__td-text { + background: #7a1c32; + } + } + .changeNeg1 { + color: #fff; + background: #7a1c32; + } + .changeNeg2 { + .igx-grid__td-text { + border-right: 4px solid #7a1c32; + padding-right: 4px; + } + } + // selected + .igx-grid__td--selected.changePos1, + .igx-grid__td--selected.changePos2, + .igx-grid__td--selected.changePos { + background-color: #335e3b !important; + .finjs-icons, + .igx-grid__td-text { + color: #fff; + } + } + .igx-grid__td--selected.changeNeg1, + .igx-grid__td--selected.changeNeg2, + .igx-grid__td--selected.changeNeg { + background-color: #7a1c32 !important; + .finjs-icons, + .igx-grid__td-text { + color: #fff; + } + } + // STRONG + // positive + .strongPositive { + .igx-grid__td-text { + background: #459a55; + } + } + .strongPositive1 { + background: #459a55; + color: #fff; + } + .strongPositive2 { + .igx-grid__td-text { + border-right: 4px solid #459a55; + padding-right: 4px; + } + } + // negative + .strongNegative { + .igx-grid__td-text { + background: #d31642; + color: #fff; + } + } + .strongNegative1 { + background: #d31642; + color: #fff; + } + .strongNegative2 { + .igx-grid__td-text { + border-right: 4px solid #d31642; + padding-right: 4px; + } + } + // selected + .igx-grid__td--selected.strongPositive1, + .igx-grid__td--selected.strongPositive2, + .igx-grid__td--selected.strongPositive { + background-color: #459a55 !important; + .finjs-icons, + .igx-grid__td-text { + color: #fff; + } + } + .igx-grid__td--selected.strongNegative1, + .igx-grid__td--selected.strongNegative2, + .igx-grid__td--selected.strongNegative { + background-color: #d31642 !important; + .finjs-icons, + .igx-grid__td-text { + color: #fff; + } + } + .controls-holder { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + } + .switches { + display: flex; + justify-content: space-between; + align-items: center; + flex: 1 0 0%; + min-width: 500px; + padding-right: 20px; + font-size: 0.9rem; + margin-bottom: -20px; + } + .control-item { + padding-right: 20px; + } + .igx-slider, + .igx-slider--disabled { + height: 24px; + } + .finjs-slider { + width: 40%; + min-width: 145px; + } + .finjs-play-controls { + width: 45%; + min-width: 500px; + margin-top: 20px; + } + .sample-toolbar { + height: 20px; + font-size: 0.8rem; + line-height: 20px; + } + .fin-dark-theme { + .finjs-slider, + .sample-toolbar { + color: rgba(255, 255, 255, 0.87); + } + } + .igx-grid__outlet span, + .igx-excel-filter span, + .igx-excel-filter header, + .igx-excel-filter input { + font-size: 0.8125rem; + } +} + +.grid__wrapper { + padding: 5px 15px; + height: 100%; +} + +// Custom Dark Theme + +// Import the theme utilities first +@include core(); +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); +@include theme($default-palette); + + +$green-palette: palette($primary: #09f, $secondary: #72da67, $surface: #333); + +:host { + padding: 0 !important; + width: 100%; + + ::ng-deep { + + .fin-dark-theme { + @include dark-theme($green-palette); + background: #333; + + ::-moz-placeholder { + opacity: 1; + } + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..add80e6fc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,36 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { <%=ClassName%>TreeGridGroupingPipe } from './tree-grid-grouping.pipe'; +import { IgxTreeGridModule, IgxCheckboxModule, IgxButtonModule, IgxSliderModule, IgxSwitchModule } from '<%=igxPackage%>'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component, <%=ClassName%>TreeGridGroupingPipe ], + imports: [ + FormsModule, + BrowserAnimationsModule, + IgxTreeGridModule, + IgxCheckboxModule, + IgxButtonModule, + IgxSliderModule, + IgxSwitchModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..42ba02d9c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,317 @@ +import { + Component, + AfterViewInit, ElementRef, OnDestroy, OnInit, ViewChild, NgZone +} from '@angular/core'; +import { + AbsoluteScrollStrategy, + ConnectedPositioningStrategy, + GridSelectionMode, + HorizontalAlignment, + IButtonGroupEventArgs, + IChangeCheckboxEventArgs, + IgxButtonGroupComponent, + IgxSliderComponent, + IgxTreeGridComponent, + OverlaySettings, + PositionSettings, + SortingDirection, + VerticalAlignment +} from '<%=igxPackage%>'; +import { timer } from 'rxjs'; +import { debounce } from 'rxjs/operators'; +import { LocalDataService } from './localData.service'; +import { ITreeGridAggregation } from './tree-grid-grouping.pipe'; + +@Component({ + providers: [LocalDataService], + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit, AfterViewInit, OnDestroy { + @ViewChild('grid1', { static: true }) public grid1!: IgxTreeGridComponent; + @ViewChild('buttonGroup1', { static: true }) public buttonGroup1!: IgxButtonGroupComponent; + @ViewChild('slider1', { static: true }) public volumeSlider!: IgxSliderComponent; + @ViewChild('slider2', { static: true }) public intervalSlider!: IgxSliderComponent; + + public showToolbar: boolean = true; + public selectionMode: GridSelectionMode = 'multiple'; + public theme: boolean = false; + public volume: number = 1000; + public frequency: number = 500; + public data: any[] = []; + public controls = [ + { + disabled: false, + icon: 'update', + label: 'LIVE PRICES', + selected: false + }, + { + disabled: false, + icon: 'update', + label: 'LIVE ALL PRICES', + selected: false + }, + { + disabled: true, + icon: 'stop', + label: 'Stop', + selected: false + } + ]; + public groupColumns = ['Category', 'Type', 'Contract']; + public aggregations: ITreeGridAggregation[] = [ + { + aggregate: (parent: any, data: any[]) => { + return data.map((r) => r.Change).reduce((ty, u) => ty + u, 0); + }, + field: 'Change' + }, + { + aggregate: (parent: any, data: any[]) => { + return data.map((r) => r.Price).reduce((ty, u) => ty + u, 0); + }, + field: 'Price' + }, + { + aggregate: (parent: any, data: any[]) => { + return parent.Change / (parent.Price - parent.Change) * 100; + }, + field: 'Change(%)' + } + ]; + public primaryKey = 'ID'; + public childDataKey = 'Children'; + public groupColumnKey = 'Categories'; + + public items: any[] = [{field: 'Export native'}, { field: 'Export JS Excel'}]; + + public positionSettings: PositionSettings = { + horizontalDirection: HorizontalAlignment.Left, + horizontalStartPoint: HorizontalAlignment.Right, + verticalStartPoint: VerticalAlignment.Bottom + }; + + public overlaySettings: OverlaySettings = { + closeOnOutsideClick: true, + modal: false, + positionStrategy: new ConnectedPositioningStrategy(this.positionSettings), + scrollStrategy: new AbsoluteScrollStrategy() + }; + + private subscription: any; + private selectedButton: number = -1; + private timer: any; + private volumeChanged: any; + + constructor(private zone: NgZone, private localService: LocalDataService, private elRef: ElementRef) { + this.subscription = this.localService.getData(this.volume); + this.localService.records.subscribe((d) => this.data = d); + } + + public ngOnInit(): void { + this.grid1.sortingExpressions = [{ fieldName: this.groupColumnKey, dir: SortingDirection.Desc }]; + this.volumeChanged = this.volumeSlider.valueChange.pipe(debounce(() => timer(200))); + this.volumeChanged.subscribe( + (x: any) => { + this.localService.getData(this.volume); + }, + (err: string) => console.log('Error: ' + err)); + } + + public ngAfterViewInit(): void { + this.grid1.reflow(); + } + public onButtonAction(evt: IButtonGroupEventArgs): void { + switch (evt.index) { + case 0: { + this.disableOtherButtons(evt.index, true); + this.timer = setInterval(() => this.ticker(this.data), this.frequency); + break; + } + case 1: { + this.disableOtherButtons(evt.index, true); + this.timer = setInterval(() => this.tickerAllPrices(this.data), this.frequency); + break; + } + case 2: { + this.disableOtherButtons(evt.index, false); + this.stopFeed(); + break; + } + default: + { + break; + } + } + } + + public stopFeed(): void { + if (this.timer) { + clearInterval(this.timer); + } + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + public formatNumber(value: number): string { + return value ? value.toFixed(2) : ''; + } + + public percentage(value: number): string { + return value ? value.toFixed(2) + '%' : ''; + } + + public formatCurrency(value: number): string { + return value ? '$' + value.toFixed(3) : ''; + } + + /** + * the below code is needed when accessing the sample through the navigation + * it will style all the space below the sample component element, but not the navigation menu + */ + public onThemeChanged(evt: IChangeCheckboxEventArgs): void { + const parentEl = this.parentComponentEl(); + if (evt.checked && parentEl.classList.contains('main')) { + parentEl.classList.add('fin-dark-theme'); + } else { + parentEl.classList.remove('fin-dark-theme'); + } + } + + public ngOnDestroy(): void { + this.stopFeed(); + this.volumeChanged.unsubscribe(); + } + + public toggleToolbar(): void { + this.showToolbar = !this.showToolbar; + } + + private negative = (rowData: any): boolean => { + return rowData['Change(%)'] < 0; + } + private positive = (rowData: any): boolean => { + return rowData['Change(%)'] > 0; + } + private changeNegative = (rowData: any): boolean => { + return rowData['Change(%)'] < 0 && rowData['Change(%)'] > -1; + } + private changePositive = (rowData: any): boolean => { + return rowData['Change(%)'] > 0 && rowData['Change(%)'] < 1; + } + private strongPositive = (rowData: any): boolean => { + return rowData['Change(%)'] >= 1; + } + private strongNegative = (rowData: any, key: string): boolean => { + return rowData['Change(%)'] <= -1; + } + + // tslint:disable:member-ordering + public trends = { + changeNeg: this.changeNegative, + changePos: this.changePositive, + negative: this.negative, + positive: this.positive, + strongNegative: this.strongNegative, + strongPositive: this.strongPositive + }; + + public trendsChange = { + changeNeg2: this.changeNegative, + changePos2: this.changePositive, + strongNegative2: this.strongNegative, + strongPositive2: this.strongPositive + }; + // tslint:enable:member-ordering + + private disableOtherButtons(ind: number, disableButtons: boolean): void { + if (this.subscription) { + this.subscription.unsubscribe(); + } + this.volumeSlider.disabled = disableButtons; + this.intervalSlider.disabled = disableButtons; + this.selectedButton = ind; + this.buttonGroup1.buttons.forEach((button, index) => { + if (index === 2) { button.disabled = !disableButtons; } else { + button.disabled = disableButtons; + } + }); + } + + /** + * returns the main div container of the Index Component, + * if path is /samples/sample-url, or the appRoot, if path is /sample-url + */ + private parentComponentEl(): HTMLElement { + return this.elRef.nativeElement.parentElement.parentElement; + } + + private ticker(data: any): void { + this.data = this.updateRandomPrices(data); + } + + private tickerAllPrices(data: any): void { + this.updateAllPrices(data); + } + + /** + * Updates values in every record + */ + private updateAllPrices(data: any[]): void { + for (const dataRow of data) { + this.randomizeObjectData(dataRow); + } + (this.grid1 as any).notifyChanges(); + } + + /** + * Updates values in random number of records + */ + private updateRandomPrices(data: any[]): any { + const newData = data.slice(); + let y = 0; + for (let i = Math.round(Math.random() * 10); i < newData.length; i += Math.round(Math.random() * 10)) { + this.randomizeObjectData(newData[i]); + y++; + } + return newData; + } + + /** + * Generates ne values for Change, Price and ChangeP columns + */ + private randomizeObjectData(dataObj: any): void { + const changeP = 'Change(%)'; + const res = this.generateNewPrice(dataObj.Price); + dataObj.Change = res.Price - dataObj.Price; + dataObj.Price = res.Price; + dataObj[changeP] = res.ChangePercent; + } + + private generateNewPrice(oldPrice: number): any { + let rnd = Math.random(); + rnd = Math.round(rnd * 100) / 100; + const volatility = 2; + let newPrice = 0; + let changePercent = 2 * volatility * rnd; + if (changePercent > volatility) { + changePercent -= (2 * volatility); + } + const changeAmount = oldPrice * (changePercent / 100); + newPrice = oldPrice + changeAmount; + newPrice = Math.round(newPrice * 100) / 100; + const result = {Price: 0, ChangePercent: 0}; + changePercent = Math.round(changePercent * 100) / 100; + result.Price = newPrice; + result.ChangePercent = changePercent; + + return result; + } + + get buttonSelected(): number { + return this.selectedButton || this.selectedButton === 0 ? this.selectedButton : -1; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/assets/financialData.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/assets/financialData.ts new file mode 100644 index 000000000..157f4256d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/assets/financialData.ts @@ -0,0 +1,1013 @@ +/* tslint:disable */ +export const REGIONS: any[] = [ + { + "Region": "North America", + "Countries": [ "Canada", "United States", "Mexico" ] + }, + { + "Region": "Middle East", + "Countries": [ "Turkey", "Iraq", "Saudi Arabia", "Syria", "UAE", "Israel", "Jordan", "Lebanon", "Oman", "Kuwait", "Qatar", "Bahrain", "Iran" ] + }, + { + "Region": "Europe", + "Countries": [ "Russia", "Germany", "France", "United Kingdom", "Italy", "Spain", "Poland", "Romania", "Netherlands", "Belgium", "Greece", + "Portugal", "Czech Republic", "Hungary", "Sweden", "Austria", "Switzerland", "Bulgaria", "Denmark", "Finland", "Slovakia", "Norway", + "Ireland", "Croatia", "Slovenia", "Estonia", "Iceland",] + }, + { + "Region": "Africa", + "Countries": [ "Nigeria", "Ethiopia", "Egypt", "South Africa", "Algeria", "Morocco", "Cameroon", "Niger", "Senegal", "Tunisia", "Libya"] + }, + { + "Region": "Asia Pacific", + "Countries": [ "Afghanistan", "Australia", "Azerbaijan", "China", "Hong Kong", "India", "Indonesia", + "Japan", "Malaysia", "New Zealand", "Pakistan", "Philippines", "Korea", "Singapore", "Taiwan", "Thailand"] + }, + { + "Region": "South America", + "Countries": [ "Argentina", "Bolivia", "Brazil", "Chile", "Colombia", "Ecuador", "Guyana", "Paraguay", "Peru", "Suriname", "Uruguay", "Venezuela" ] + }, + +] + +export const DealType: any[] = [ + "Buy", "Sell" +] + +export const Contract: any[] = [ + "Forwards", "Futures", "Options", "Swap", "CFD" +] + +export const Settlement: any[] = [ + "Deliverable", "Cash" +] + +export const MOCKFINANCEDATA: any[] = [ +{ + "IndGrou": "Airlines", + "IndSect": "Consumer, Cyclical", + "IndSubg": "Airlines", + "SecType": "PUBLIC", + // tslint:disable-next-line:object-literal-sort-keys + "CpnTyp": "FIXED", + "IssuerN": "AMERICAN AIRLINES GROUP", + "Moodys": "WR", + "Fitch": "N.A.", + "DBRS": "N.A.", + "CollatT": "NEW MONEY", + "Curncy": "USD", + "Security": "001765866 Pfd", + "sector": "Pfd", + "CUSIP": "1765866", + "Ticker": "AAL", + "Cpn": "7.875", + "Maturity": "7/13/1939", + "KRD_3YR": 0.00006, + "RISK_COUNTRY": "", + "MUNI_SECTOR": "", + "ZV_SPREAD": 28.302, + "KRD_5YR": 0, + "KRD_1YR": -0.00187, + "PD_WALA": null +}]; + +export const DATA: any[] = [ + { + "Category": "Metal", + "Type": "Gold", + "Spread": 0.01, + "Open Price": 1281.10, + "Price": 1280.7317, + "Buy": 1280.7267, + "Sell": 1280.7367, + "Change": -0.3683, + "Change(%)": -0.0287, + "Volume": 48387, + "High(D)": 1289.50, + "Low(D)": 1279.10, + "High(Y)": 1306, + "Low(Y)": 1047.20, + "Start(Y)": 1176.60, + "Change On Year(%)": 8.8502 + }, + { + "Category": "Metal", + "Type": "Silver", + "Spread": 0.01, + "Open Price": 17.43, + "Price": 17.42, + "Buy": 17.43, + "Sell": 17.43, + "Change": -0.01, + "Change(%)": -0.0574, + "Volume": 11720, + "High(D)": 17.51, + "Low(D)": 17.37, + "High(Y)": 18.06, + "Low(Y)": 13.73, + "Start(Y)": 15.895, + "Change On Year(%)": 9.5942 + }, + { + "Category": "Metal", + "Type": "Copper", + "Spread": 0.02, + "Open Price": 2.123, + "Price": 2.113, + "Buy": 2.123, + "Sell": 2.123, + "Change": -0.01, + "Change(%)": -0.471, + "Volume": 28819, + "High(D)": 2.16, + "Low(D)": 2.11, + "High(Y)": 2.94, + "Low(Y)": 1.96, + "Start(Y)": 2.45, + "Change On Year(%)": -13.7551 + }, + { + "Category": "Metal", + "Type": "Platinum", + "Spread": 0.01, + "Open Price": 1071.60, + "Price": 1071.0993, + "Buy": 1071.0943, + "Sell": 1071.1043, + "Change": -0.5007, + "Change(%)": -0.0467, + "Volume": 3039, + "High(D)": 1081.20, + "Low(D)": 1070.50, + "High(Y)": 1120.60, + "Low(Y)": 812.40, + "Start(Y)": 966.50, + "Change On Year(%)": 10.8225 + }, + { + "Category": "Metal", + "Type": "Palladium", + "Spread": 0.01, + "Open Price": 600.55, + "Price": 601.0005, + "Buy": 600.9955, + "Sell": 601.0055, + "Change": 0.4505, + "Change(%)": 0.075, + "Volume": 651, + "High(D)": 607.20, + "Low(D)": 598.40, + "High(Y)": 690, + "Low(Y)": 458.6, + "Start(Y)": 574.3, + "Change On Year(%)": 4.6492 + }, + { + "Category": "Oil", + "Type": "Oil", + "Spread": 0.015, + "Open Price": 45.54, + "Price": 45.7899, + "Buy": 45.7824, + "Sell": 45.7974, + "Change": 0.2499, + "Change(%)": 0.5487, + "Volume": 107196, + "High(D)": 45.94, + "Low(D)": 45.00, + "High(Y)": 65.28, + "Low(Y)": 30.79, + "Start(Y)": 48.035, + "Change On Year(%)": -4.6739 + }, + { + "Category": "Oil", + "Type": "Brent", + "Spread": 0.01, + "Open Price": 46.06, + "Price": 46.05, + "Buy": 46.06, + "Sell": 46.06, + "Change": -0.01, + "Change(%)": -0.0217, + "Volume": 59818, + "High(D)": 46.48, + "Low(D)": 45.60, + "High(Y)": 71.14, + "Low(Y)": 30.02, + "Start(Y)": 50.58, + "Change On Year(%)": -8.9561 + }, + { + "Category": "Oil", + "Type": "Natural Gas", + "Spread": 0.02, + "Open Price": 2.094, + "Price": 2.104, + "Buy": 2.094, + "Sell": 2.094, + "Change": 0.01, + "Change(%)": 0.4776, + "Volume": 2783, + "High(D)": 2.11, + "Low(D)": 2.09, + "High(Y)": 3.20, + "Low(Y)": 1.84, + "Start(Y)": 2.52, + "Change On Year(%)": -16.5079 + }, + { + "Category": "Oil", + "Type": "RBOB Gas", + "Spread": 0.015, + "Open Price": 1.5086, + "Price": 1.9532, + "Buy": 1.9457, + "Sell": 1.9607, + "Change": 0.4446, + "Change(%)": 29.4686, + "Volume": 2646, + "High(D)": 1.9532, + "Low(D)": 1.50, + "High(Y)": 2.05, + "Low(Y)": 1.15, + "Start(Y)": 1.60, + "Change On Year(%)": 22.0727 + }, + { + "Category": "Oil", + "Type": "Diesel", + "Spread": 0.015, + "Open Price": 1.3474, + "Price": 1.3574, + "Buy": 1.3474, + "Sell": 1.3474, + "Change": 0.01, + "Change(%)": 0.7422, + "Volume": 2971, + "High(D)": 1.36, + "Low(D)": 1.34, + "High(Y)": 2.11, + "Low(Y)": 0.92, + "Start(Y)": 1.515, + "Change On Year(%)": -10.4026 + }, + { + "Category": "Oil", + "Type": "Ethanol", + "Spread": 0.01, + "Open Price": 1.512, + "Price": 2.7538, + "Buy": 2.7488, + "Sell": 2.7588, + "Change": 1.2418, + "Change(%)": 82.1323, + "Volume": 14, + "High(D)": 2.7538, + "Low(D)": 1.1168, + "High(Y)": 2.7538, + "Low(Y)": 1.1168, + "Start(Y)": 1.475, + "Change On Year(%)": 86.7011 + }, + { + "Category": "Oil", + "Type": "Uranium", + "Spread": 0.02, + "Open Price": 27.55, + "Price": 27.58, + "Buy": 27.55, + "Sell": 27.55, + "Change": 0.03, + "Change(%)": 0.1089, + "Volume": 12, + "High(D)": 27.55, + "Low(D)": 27.55, + "High(Y)": 29.32, + "Low(Y)": 21.28, + "Start(Y)": 25.30, + "Change On Year(%)": 9.0119 + }, + { + "Category": "Oil", + "Type": "Coal", + "Spread": 0.015, + "Open Price": 0.4363, + "Price": 0.4163, + "Buy": 0.4363, + "Sell": 0.4363, + "Change": -0.02, + "Change(%)": -4.584, + "Volume": 3, + "High(D)": 0.4363, + "Low(D)": 0.4363, + "High(Y)": 0.4841, + "Low(Y)": 0.3954, + "Start(Y)": 0.4398, + "Change On Year(%)": -5.3326 + }, + { + "Category": "Agriculture", + "Type": "Wheat", + "Spread": 0.01, + "Open Price": 465.50, + "Price": 465.52, + "Buy": 465.50, + "Sell": 465.50, + "Change": 0.02, + "Change(%)": 0.0043, + "Volume": 4318, + "High(D)": 467.00, + "Low(D)": 463.25, + "High(Y)": 628.50, + "Low(Y)": 449.50, + "Start(Y)": 539.00, + "Change On Year(%)": -13.6327 + }, + { + "Category": "Agriculture", + "Type": "Corn", + "Spread": 0.01, + "Open Price": 379.50, + "Price": 379.8026, + "Buy": 379.7976, + "Sell": 379.8076, + "Change": 0.3026, + "Change(%)": 0.0797, + "Volume": 11266, + "High(D)": 381.00, + "Low(D)": 377.75, + "High(Y)": 471.25, + "Low(Y)": 351.25, + "Start(Y)": 411.25, + "Change On Year(%)": -7.6468 + }, + { + "Category": "Agriculture", + "Type": "Sugar", + "Spread": 0.01, + "Open Price": 15.68, + "Price": 14.6742, + "Buy": 14.6692, + "Sell": 14.6792, + "Change": -1.0058, + "Change(%)": -6.4146, + "Volume": 4949, + "High(D)": 15.70, + "Low(D)": 14.6742, + "High(Y)": 16.87, + "Low(Y)": 11.37, + "Start(Y)": 14.12, + "Change On Year(%)": 3.9249 + }, + { + "Category": "Agriculture", + "Type": "Soybean", + "Spread": 0.01, + "Open Price": 1038.00, + "Price": 1038.6171, + "Buy": 1038.6121, + "Sell": 1038.6221, + "Change": 0.6171, + "Change(%)": 0.0595, + "Volume": 20356, + "High(D)": 1044.00, + "Low(D)": 1031.75, + "High(Y)": 1057.00, + "Low(Y)": 859.50, + "Start(Y)": 958.25, + "Change On Year(%)": 8.3869 + }, + { + "Category": "Agriculture", + "Type": "Soy oil", + "Spread": 0.01, + "Open Price": 33.26, + "Price": 33.7712, + "Buy": 33.7662, + "Sell": 33.7762, + "Change": 0.5112, + "Change(%)": 1.5371, + "Volume": 10592, + "High(D)": 33.7712, + "Low(D)": 33.06, + "High(Y)": 35.43, + "Low(Y)": 26.61, + "Start(Y)": 31.02, + "Change On Year(%)": 8.8692 + }, + { + "Category": "Agriculture", + "Type": "Soy Meat", + "Spread": 0.01, + "Open Price": 342.60, + "Price": 342.62, + "Buy": 342.60, + "Sell": 342.60, + "Change": 0.02, + "Change(%)": 0.0058, + "Volume": 5646, + "High(D)": 345.40, + "Low(D)": 340.30, + "High(Y)": 353.40, + "Low(Y)": 261.70, + "Start(Y)": 307.55, + "Change On Year(%)": 11.403 + }, + { + "Category": "Agriculture", + "Type": "OJ Future", + "Spread": 0.01, + "Open Price": 140.60, + "Price": 140.1893, + "Buy": 140.1843, + "Sell": 140.1943, + "Change": -0.4107, + "Change(%)": -0.2921, + "Volume": 7, + "High(D)": 140.1893, + "Low(D)": 0.00, + "High(Y)": 155.95, + "Low(Y)": 113.00, + "Start(Y)": 134.475, + "Change On Year(%)": 4.2493 + }, + { + "Category": "Agriculture", + "Type": "Coffee", + "Spread": 0.01, + "Open Price": 125.70, + "Price": 125.69, + "Buy": 125.70, + "Sell": 125.70, + "Change": -0.01, + "Change(%)": -0.008, + "Volume": 1654, + "High(D)": 125.80, + "Low(D)": 125.00, + "High(Y)": 155.75, + "Low(Y)": 115.35, + "Start(Y)": 135.55, + "Change On Year(%)": -7.2741 + }, + { + "Category": "Agriculture", + "Type": "Cocoa", + "Spread": 0.01, + "Open Price": 3076.00, + "Price": 3076.03, + "Buy": 3076.00, + "Sell": 3076.00, + "Change": 0.03, + "Change(%)": 0.001, + "Volume": 978, + "High(D)": 3078.00, + "Low(D)": 3066.00, + "High(Y)": 3406.00, + "Low(Y)": 2746.00, + "Start(Y)": 3076.00, + "Change On Year(%)": 0.001 + }, + { + "Category": "Agriculture", + "Type": "Rice", + "Spread": 0.01, + "Open Price": 11.245, + "Price": 10.4154, + "Buy": 10.4104, + "Sell": 10.4204, + "Change": -0.8296, + "Change(%)": -7.3779, + "Volume": 220, + "High(D)": 11.38, + "Low(D)": 10.4154, + "High(Y)": 14.14, + "Low(Y)": 9.70, + "Start(Y)": 11.92, + "Change On Year(%)": -12.6228 + }, + { + "Category": "Agriculture", + "Type": "Oats", + "Spread": 0.01, + "Open Price": 194.50, + "Price": 194.2178, + "Buy": 194.2128, + "Sell": 194.2228, + "Change": -0.2822, + "Change(%)": -0.1451, + "Volume": 64, + "High(D)": 195.75, + "Low(D)": 194.00, + "High(Y)": 241.25, + "Low(Y)": 183.75, + "Start(Y)": 212.50, + "Change On Year(%)": -8.6034 + }, + { + "Category": "Agriculture", + "Type": "Milk", + "Spread": 0.01, + "Open Price": 12.87, + "Price": 12.86, + "Buy": 12.87, + "Sell": 12.87, + "Change": -0.01, + "Change(%)": -0.0777, + "Volume": 7, + "High(D)": 12.89, + "Low(D)": 12.81, + "High(Y)": 16.96, + "Low(Y)": 12.81, + "Start(Y)": 14.885, + "Change On Year(%)": -13.6043 + }, + { + "Category": "Agriculture", + "Type": "Cotton", + "Spread": 0.01, + "Open Price": 61.77, + "Price": 61.76, + "Buy": 61.77, + "Sell": 61.77, + "Change": -0.01, + "Change(%)": -0.0162, + "Volume": 3612, + "High(D)": 62.06, + "Low(D)": 61.32, + "High(Y)": 67.59, + "Low(Y)": 54.33, + "Start(Y)": 60.96, + "Change On Year(%)": 1.3123 + }, + { + "Category": "Agriculture", + "Type": "Lumber", + "Spread": 0.01, + "Open Price": 303.90, + "Price": 304.5994, + "Buy": 304.5944, + "Sell": 304.6044, + "Change": 0.6994, + "Change(%)": 0.2302, + "Volume": 2, + "High(D)": 304.5994, + "Low(D)": 303.90, + "High(Y)": 317.10, + "Low(Y)": 236.00, + "Start(Y)": 276.55, + "Change On Year(%)": 10.1426 + }, + { + "Category": "Livestock", + "Type": "LV Cattle", + "Spread": 0.01, + "Open Price": 120.725, + "Price": 120.705, + "Buy": 120.725, + "Sell": 120.725, + "Change": -0.02, + "Change(%)": -0.0166, + "Volume": 4, + "High(D)": 120.725, + "Low(D)": 120.725, + "High(Y)": 147.98, + "Low(Y)": 113.90, + "Start(Y)": 130.94, + "Change On Year(%)": -7.8166 + }, + { + "Category": "Livestock", + "Type": "FD Cattle", + "Spread": 0.01, + "Open Price": 147.175, + "Price": 148.6065, + "Buy": 148.6015, + "Sell": 148.6115, + "Change": 1.4315, + "Change(%)": 0.9727, + "Volume": 5, + "High(D)": 148.6065, + "Low(D)": 147.175, + "High(Y)": 190.00, + "Low(Y)": 138.10, + "Start(Y)": 164.05, + "Change On Year(%)": -9.4139 + }, + { + "Category": "Livestock", + "Type": "Lean Hogs", + "Spread": 0.01, + "Open Price": 81.275, + "Price": 81.8146, + "Buy": 81.8096, + "Sell": 81.8196, + "Change": 0.5396, + "Change(%)": 0.664, + "Volume": 1, + "High(D)": 81.8146, + "Low(D)": 81.275, + "High(Y)": 83.98, + "Low(Y)": 70.25, + "Start(Y)": 77.115, + "Change On Year(%)": 6.0943 + }, + { + "Category": "Currencies", + "Type": "USD IDX Future", + "Spread": 0.02, + "Open Price": 93.88, + "Price": 93.7719, + "Buy": 93.7619, + "Sell": 93.7819, + "Change": -0.1081, + "Change(%)": -0.1151, + "Volume": 5788, + "High(D)": 94.05, + "Low(D)": 93.7534, + "High(Y)": 100.70, + "Low(Y)": 91.88, + "Start(Y)": 96.29, + "Change On Year(%)": -2.6151 + }, + { + "Category": "Currencies", + "Type": "USD/JPY Future", + "Spread": 0.02, + "Open Price": 9275.50, + "Price": 9277.3342, + "Buy": 9277.3242, + "Sell": 9277.3442, + "Change": 1.8342, + "Change(%)": 0.0198, + "Volume": 47734, + "High(D)": 9277.3342, + "Low(D)": 0.93, + "High(Y)": 9483.00, + "Low(Y)": 0.93, + "Start(Y)": 4741.965, + "Change On Year(%)": 95.6432 + }, + { + "Category": "Currencies", + "Type": "GBP/USD Future", + "Spread": 0.02, + "Open Price": 1.4464, + "Price": 1.1941, + "Buy": 1.1841, + "Sell": 1.2041, + "Change": -0.2523, + "Change(%)": -17.4441, + "Volume": 29450, + "High(D)": 1.45, + "Low(D)": 1.1941, + "High(Y)": 1.59, + "Low(Y)": 1.1941, + "Start(Y)": 1.485, + "Change On Year(%)": -19.59 + }, + { + "Category": "Currencies", + "Type": "AUD/USD Future", + "Spread": 0.02, + "Open Price": 0.7344, + "Price": 0.7444, + "Buy": 0.7344, + "Sell": 0.7344, + "Change": 0.01, + "Change(%)": 1.3617, + "Volume": 36764, + "High(D)": 0.74, + "Low(D)": 0.73, + "High(Y)": 0.79, + "Low(Y)": 0.68, + "Start(Y)": 0.735, + "Change On Year(%)": 1.2789 + }, + { + "Category": "Currencies", + "Type": "USD/CAD Future", + "Spread": 0.02, + "Open Price": 0.7744, + "Price": 0.9545, + "Buy": 0.9445, + "Sell": 0.9645, + "Change": 0.1801, + "Change(%)": 23.2622, + "Volume": 13669, + "High(D)": 0.9545, + "Low(D)": 0.77, + "High(Y)": 0.9545, + "Low(Y)": 0.68, + "Start(Y)": 0.755, + "Change On Year(%)": 26.4295 + }, + { + "Category": "Currencies", + "Type": "USD/CHF Future", + "Spread": 0.02, + "Open Price": 1.0337, + "Price": 1.0437, + "Buy": 1.0337, + "Sell": 1.0337, + "Change": 0.01, + "Change(%)": 0.9674, + "Volume": 5550, + "High(D)": 1.03, + "Low(D)": 1.03, + "High(Y)": 1.11, + "Low(Y)": 0.98, + "Start(Y)": 1.045, + "Change On Year(%)": -0.1244 + }, + { + "Category": "Index", + "Type": "DOW Future", + "Spread": 0.01, + "Open Price": 17711.00, + "Price": 17712.1515, + "Buy": 17712.1465, + "Sell": 17712.1565, + "Change": 1.1515, + "Change(%)": 0.0065, + "Volume": 22236, + "High(D)": 17727.00, + "Low(D)": 17642.00, + "High(Y)": 18083.00, + "Low(Y)": 15299.00, + "Start(Y)": 16691.00, + "Change On Year(%)": 6.118 + }, + { + "Category": "Index", + "Type": "S&P Future", + "Spread": 0.01, + "Open Price": 2057.50, + "Price": 2056.6018, + "Buy": 2056.5968, + "Sell": 2056.6068, + "Change": -0.8982, + "Change(%)": -0.0437, + "Volume": 142780, + "High(D)": 2059.50, + "Low(D)": 2049.00, + "High(Y)": 2105.50, + "Low(Y)": 1794.50, + "Start(Y)": 1950.00, + "Change On Year(%)": 5.4668 + }, + { + "Category": "Index", + "Type": "NAS Future", + "Spread": 0.01, + "Open Price": 4341.25, + "Price": 4341.28, + "Buy": 4341.25, + "Sell": 4341.25, + "Change": 0.03, + "Change(%)": 0.0007, + "Volume": 18259, + "High(D)": 4347.00, + "Low(D)": 4318.00, + "High(Y)": 4719.75, + "Low(Y)": 3867.75, + "Start(Y)": 4293.75, + "Change On Year(%)": 1.107 + }, + { + "Category": "Index", + "Type": "S&P MID MINI", + "Spread": 0.01, + "Open Price": 1454.30, + "Price": 1455.7812, + "Buy": 1455.7762, + "Sell": 1455.7862, + "Change": 1.4812, + "Change(%)": 0.1018, + "Volume": 338, + "High(D)": 1455.7812, + "Low(D)": 1448.00, + "High(Y)": 1527.30, + "Low(Y)": 1236.00, + "Start(Y)": 1381.65, + "Change On Year(%)": 5.3654 + }, + { + "Category": "Index", + "Type": "S&P 600 MINI", + "Spread": 0.01, + "Open Price": 687.90, + "Price": 687.88, + "Buy": 687.90, + "Sell": 687.90, + "Change": -0.02, + "Change(%)": -0.0029, + "Volume": 0, + "High(D)": 0.00, + "Low(D)": 0.00, + "High(Y)": 620.32, + "Low(Y)": 595.90, + "Start(Y)": 608.11, + "Change On Year(%)": 13.1177 + }, + { + "Category": "Interest Rate", + "Type": "US 30YR Future", + "Spread": 0.01, + "Open Price": 164.875, + "Price": 164.1582, + "Buy": 164.1532, + "Sell": 164.1632, + "Change": -0.7168, + "Change(%)": -0.4347, + "Volume": 28012, + "High(D)": 165.25, + "Low(D)": 164.0385, + "High(Y)": 169.38, + "Low(Y)": 151.47, + "Start(Y)": 160.425, + "Change On Year(%)": 2.3271 + }, + { + "Category": "Interest Rate", + "Type": "US 2Y Future", + "Spread": 0.01, + "Open Price": 109.3984, + "Price": 109.3884, + "Buy": 109.3984, + "Sell": 109.3984, + "Change": -0.01, + "Change(%)": -0.0091, + "Volume": 17742, + "High(D)": 109.41, + "Low(D)": 109.38, + "High(Y)": 109.80, + "Low(Y)": 108.62, + "Start(Y)": 109.21, + "Change On Year(%)": 0.1634 + }, + { + "Category": "Interest Rate", + "Type": "US 10YR Future", + "Spread": 0.01, + "Open Price": 130.5625, + "Price": 130.5825, + "Buy": 130.5625, + "Sell": 130.5625, + "Change": 0.02, + "Change(%)": 0.0153, + "Volume": 189310, + "High(D)": 130.63, + "Low(D)": 130.44, + "High(Y)": 132.64, + "Low(Y)": 125.48, + "Start(Y)": 129.06, + "Change On Year(%)": 1.1797 + }, + { + "Category": "Interest Rate", + "Type": "Euro$ 3M", + "Spread": 0.01, + "Open Price": 99.18, + "Price": 99.17, + "Buy": 99.18, + "Sell": 99.18, + "Change": -0.01, + "Change(%)": -0.0101, + "Volume": 29509, + "High(D)": 99.18, + "Low(D)": 99.17, + "High(Y)": 99.38, + "Low(Y)": 98.41, + "Start(Y)": 98.895, + "Change On Year(%)": 0.2781 + } +]; +interface IResponse { + data: any[]; + recordsUpdated: number; + } +/* tslint:enable */ +export class FinancialData { + public generateData(count: number): any[] { + const currData = []; + for (let i = 0; i < count; i++) { + const rand = Math.floor(Math.random() * Math.floor(DATA.length)); + const dataObj = Object.assign({}, DATA[rand]); + + dataObj.Settlement = Settlement[this.generateRandomNumber(0, 1)]; + dataObj.Contract = Contract[this.generateRandomNumber(0, 4)]; + const region = REGIONS[this.generateRandomNumber(0, 5)]; + dataObj.Region = region.Region; + dataObj.Country = this.randomizeCountry(region); + // for (let y = 0; y < 80; y++) { + // dataObj["Text" + y] = "Text"; + // } + + for (const mockData of MOCKFINANCEDATA) { + for (const prop in mockData) { + if (mockData.hasOwnProperty(prop)) { + dataObj[prop] = mockData[prop]; + } + } + } + + dataObj.ID = i; + this.randomizeObjectData(dataObj); + currData.push(dataObj); + } + return currData; + } + public updateAllPrices(data: any[]): any[] { + const currData = []; + for (const dataRow of data) { + const dataObj = Object.assign({}, dataRow); + this.randomizeObjectData(dataObj); + currData.push(dataObj); + } + return currData; + } + + public updateRandomPrices(data: any[]): any { + const currData = data.slice(0, data.length + 1); + let y = 0; + for (let i = Math.round(Math.random() * 10); i < data.length; i += Math.round(Math.random() * 10)) { + const dataObj = Object.assign({}, data[i]); + this.randomizeObjectData(dataObj); + currData[i] = dataObj; + y++; + } + // return {data: currData, recordsUpdated: y }; + return currData; + } + public updateRandomPrices2(data: any[]): IResponse { + const currData = data.slice(0, data.length + 1); + let y = 0; + for (let i = Math.round(Math.random() * 10); i < data.length; i += Math.round(Math.random() * 10)) { + const dataObj = Object.assign({}, data[i]); + this.randomizeObjectData(dataObj); + currData[i] = dataObj; + y++; + } + return {data: currData, recordsUpdated: y }; + } + private randomizeObjectData(dataObj: any) { + const changeP = 'Change(%)'; + const res = this.generateNewPrice(dataObj.Price); + dataObj.Change = res.Price - dataObj.Price; + dataObj.Price = res.Price; + dataObj[changeP] = res.ChangePercent; + } + private generateNewPrice(oldPrice: number): any { + const rnd = parseFloat(Math.random().toFixed(2)); + const volatility = 2; + let newPrice = 0; + + let changePercent = 2 * volatility * rnd; + if (changePercent > volatility) { + changePercent -= (2 * volatility); + } + + const changeAmount = oldPrice * (changePercent / 100); + newPrice = oldPrice + changeAmount; + + const result = {Price: 0, ChangePercent: 0}; + result.Price = parseFloat(newPrice.toFixed(2)); + result.ChangePercent = parseFloat(changePercent.toFixed(2)); + + return result; + } + private generateRandomNumber(min: number, max: number) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + private randomizeCountry(region: any) { + let country; + switch (region.Region) { + case 'North America': { + country = region.Countries[this.generateRandomNumber(0, 2)]; + break; + } + case 'South America': { + country = region.Countries[this.generateRandomNumber(0, 11)]; + break; + } + case 'Europe': { + country = region.Countries[this.generateRandomNumber(0, 26)]; + break; + } + case 'Asia Pacific': { + country = region.Countries[this.generateRandomNumber(0, 15)]; + break; + } + case 'Africa': { + country = region.Countries[this.generateRandomNumber(0, 11)]; + break; + } + case 'Middle East': { + country = region.Countries[this.generateRandomNumber(0, 12)]; + break; + } + } + return country; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/localData.service.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/localData.service.ts new file mode 100644 index 000000000..4b5398012 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/localData.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable} from 'rxjs'; +import { FinancialData } from './assets/financialData'; + +@Injectable() +export class LocalDataService { + public records: Observable; + public records$: BehaviorSubject; + + constructor() { + this.records$ = new BehaviorSubject([] as any); + this.records = this.records$.asObservable(); + } + + public getData(count: number = 10): void { + const financialData: FinancialData = new FinancialData(); + this.records$.next(financialData.generateData(count)); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts new file mode 100644 index 000000000..052aa4866 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts @@ -0,0 +1,98 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +class GroupByRecord { + public key: any; + public groups: GroupByRecord[] = []; + public records: any[] = []; +} + +export class ITreeGridAggregation { + public field: string = ''; + public aggregate: (parent: any, children: any[]) => any = [] as any; +} + +@Pipe({ + name: 'treeGridGrouping', + pure: true +}) +export class <%=ClassName%>TreeGridGroupingPipe implements PipeTransform { + + public transform(collection: any[], + groupColumns: string[], + aggregations: ITreeGridAggregation[], + groupKey: string, + primaryKey: string, + childDataKey: string): any[] { + const result: any[] = []; + + const groupedRecords = this.groupByMultiple(collection, groupColumns); + this.flattenGrouping(groupedRecords, groupKey, primaryKey, + childDataKey, aggregations, '', result); + + return result; + } + + private flattenGrouping(groupRecords: GroupByRecord[], + groupKey: string, + primaryKey: string, + childDataKey: string, + aggregations: ITreeGridAggregation[], + parentID: any, + data: any[]) { + for (const groupRecord of groupRecords) { + const parent: { [key: string]: any } = {}; + const children = groupRecord.records; + + parent[primaryKey] = parentID + groupRecord.key; + parent[childDataKey] = []; + + for (const aggregation of aggregations) { + parent[aggregation.field] = aggregation.aggregate(parent, children); + } + + parent[groupKey] = groupRecord.key; + data.push(parent); + + if (groupRecord.groups) { + this.flattenGrouping(groupRecord.groups, groupKey, primaryKey, childDataKey, + aggregations, parent[primaryKey], parent[childDataKey]); + } else { + parent[childDataKey] = children; + } + } + } + + private groupByMultiple(array: any[], fieldNames: string[], index = 0): GroupByRecord[] { + const res = this.groupBy(array, fieldNames[index]); + + if (index + 1 < fieldNames.length) { + for (const groupByRecord of res) { + groupByRecord.groups = this.groupByMultiple(groupByRecord.records, fieldNames, index + 1); + } + } + + return res; + } + + private groupBy(array: any[], fieldName: string): GroupByRecord[] { + const map: Map = new Map(); + + for (const record of array) { + const key = record[fieldName]; + let groupByRecord: GroupByRecord; + + if (map.has(key)) { + groupByRecord = map.get(key)!; + } else { + groupByRecord = new GroupByRecord(); + groupByRecord.key = key; + groupByRecord.records = []; + map.set(key, groupByRecord); + } + + groupByRecord.records.push(record); + } + + return Array.from(map.values()); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/index.ts new file mode 100644 index 000000000..4d4b286cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/fintech-tree-grid/index.ts @@ -0,0 +1,30 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxTreeGridFinTechTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "fintech-tree-grid"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "FinTech Tree Grid"; + this.description = "This sample demonstrates the TreeGrid handling thousands of updates per second."; + this.dependencies = [ + { import: "IgxTreeGridModule", from: "<%=igxPackage%>" }, + { provide: "IgxExcelExporterService", from: "<%=igxPackage%>" }, + { + import: [ + "IgxButtonGroupModule", + "IgxCheckboxModule", + "IgxIconModule", + "IgxSwitchModule", + "IgxSliderModule" + ], + from: "<%=igxPackage%>" + }, + { import: "FormsModule", from: "@angular/forms" }, + { declare: "<%=ClassName%>TreeGridGroupingPipe", from: "./src/app/<%=path%>/tree-grid-grouping.pipe.ts" } + ]; + } +} +module.exports = new IgxTreeGridFinTechTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..7c5eb07ab --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,45 @@ +
+

Welcome Back

+ + + account_circle + + + + + + + lock + + + + + + Register +
+ +
You've successfully logged in
+ +
+

Create your account

+ + + + + + + + + + + + + + + + + + Log in +
+ +
You have successfully registered.
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..6bcb59119 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,25 @@ +:host { + display: block; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12); + padding: 24px 16px; + margin: 16px; + width: 400px; + max-height: 600px; +} + +h3 { + color: #66ccff; +} + +a { + cursor: pointer; +} + +.igx-input-group, button { + margin-top: 32px; +} + +button { + + width: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..573811259 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,55 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { IgxInputGroupModule, IgxIconModule, IgxButtonModule, IgxRippleModule } from '<%=igxPackage%>'; + +const MAIL_GROUP_NAME = 'email'; +const PASSWORD_GROUP_NAME = 'password'; +const NEW_MAIL_GROUP_NAME = 'newEmail'; +const NEW_PASSWORD_GROUP_NAME = 'newPassword'; +const FIRST_NAME_GROUP_NAME = 'firstName'; +const LAST_NAME_GROUP_NAME = 'lastName'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ ReactiveFormsModule, NoopAnimationsModule, IgxInputGroupModule, IgxIconModule, IgxButtonModule, IgxRippleModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should not allow login until valid', async () => { + expect(component.loginForm.valid).toBeFalsy(); + component.loginForm.controls[MAIL_GROUP_NAME].setValue('test@example.com'); + expect(component.loginForm.valid).toBeFalsy(); + component.loginForm.controls[PASSWORD_GROUP_NAME].setValue('123456'); + expect(component.loginForm.valid).toBeTruthy(); + }); + + it('should not allow register until valid', async () => { + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[NEW_MAIL_GROUP_NAME].setValue('test@example.com'); + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[FIRST_NAME_GROUP_NAME].setValue('John'); + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[LAST_NAME_GROUP_NAME].setValue('Doe'); + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[NEW_PASSWORD_GROUP_NAME].setValue('123456'); + expect(component.registrationForm.valid).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..15d96a428 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,54 @@ +import {Component} from '@angular/core'; +import { FormBuilder, Validators, FormGroup } from '@angular/forms'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) + + export class <%=ClassName%>Component { + public loginForm: FormGroup; + public registrationForm: FormGroup; + public showLogin = true; + public showRegister = false; + public showSuccessLogin = false; + public showSuccessRegister = false; + + constructor(fb: FormBuilder) { + this.loginForm = fb.group( { + email: ['', Validators.required], + password: ['', Validators.required] + }); + + this.registrationForm = fb.group( { + newEmail: ['', Validators.required], + newPassword: ['', Validators.required], + firstName: ['', Validators.required], + lastName: ['', Validators.required] + }); + } + + tryLogin() { + const loginInfo = this.loginForm.value; + // use loginInfo + this.showLogin = false; + this.showSuccessLogin = true; + } + + showRegistrationForm() { + this.showLogin = false; + this.showRegister = true; + } + showLoginForm() { + this.showLogin = true; + this.showRegister = false; + } + + tryRegister() { + const registerInfo = this.registrationForm.value; + // use registerInfo + this.showRegister = false; + this.showSuccessRegister = true; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/login/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/login/index.ts new file mode 100644 index 000000000..caa1144d1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/login/index.ts @@ -0,0 +1,21 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxLoginTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "login"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "Login view"; + this.description = "Login view"; + this.dependencies = [{ + import: ["IgxInputGroupModule", "IgxIconModule", "IgxButtonModule", "IgxRippleModule"], + from: "<%=igxPackage%>" + }, { + import: ["ReactiveFormsModule"], + from: "@angular/forms" + }]; + } +} +module.exports = new IgxLoginTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..9ba81e40a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,34 @@ +
+ + +

{{data.city}}

+
{{data.dateTime}}, {{data.today.description}}
+
+ +
+
+
{{data.today.tempMax}}°C
+
+
+
+
{{data.precipitation}} Precipitation
+
{{data.humidity}} Humidity
+
+
+ + + +
+
+
{{day.name}}
+
+ + {{day.tempMin}}°/{{day.tempMax}}° +
+
+
+
+
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..dd2aa4721 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,59 @@ +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fontawesome.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-regular.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-solid.css"); + +.sample-wrapper { + width: 24rem; + margin-top: 20px; +} + +%columnDisplay { + display: flex; + > * { + flex: 1 1 auto; + } + + igx-icon { + font-size: 1.5em; + margin-right: 1rem; + } +} +.forecast__day { + @extend %columnDisplay; + padding-top: 1rem; +} + +.right { + text-align: right; +} + +igx-icon.weather-icon { + &--gray { + color: gray; + } + &--blue { + color: blue; + } + &--orange { + color: orange; + } + &--skyblue { + color: skyblue; + } +} + +.weather__main-temp { + @extend %columnDisplay; + font-size: 4rem; + line-height: 4rem; + igx-icon { + font-size: 4rem; + width: 4rem; + height: 4rem; + } +} + +.weather__main-hum { + @extend %columnDisplay; + padding: .7rem 0; +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..794e887cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,37 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { + IgxButtonModule, + IgxCardModule, + IgxExpansionPanelModule, + IgxIconModule +} from '<%=igxPackage%>'; +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ + BrowserAnimationsModule, + IgxButtonModule, + IgxCardModule, + IgxExpansionPanelModule, + IgxIconModule + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..40a88cacc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,19 @@ +import { Component, ViewChild } from '@angular/core'; +import { IgxExpansionPanelComponent } from '<%=igxPackage%>'; +import { data as weatherData } from './weather-data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + + @ViewChild(IgxExpansionPanelComponent, { static: true }) + public panel!: IgxExpansionPanelComponent; + public data = weatherData; + + public toggleDetails() { + this.panel.toggle(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/weather-data.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/weather-data.ts new file mode 100644 index 000000000..dae6070c9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/files/src/app/__path__/weather-data.ts @@ -0,0 +1,58 @@ +// tslint:disable:object-literal-sort-keys +export const data = { + city: 'Sofia', + humidity: '44%', + precipitation: '5%', + windSpeed: 279, + dateTime: '10/7/2018, 14:35:00 PM', + today: { + name: 'Sunday', + tempMax: 25, + tempMin: 15, + description: 'Sunday', + iconColor: 'gray', + iconName: 'fa-cloud' + }, + daysOfWeek: [ + { + name: 'Monday', + tempMax: 22, + tempMin: 15, + description: 'Sunny', + iconColor: 'orange', + iconName: 'fa-sun' + }, + { + name: 'Tuesday', + tempMax: 25, + tempMin: 14, + description: 'Rainy', + iconColor: 'blue', + iconName: 'fa-tint' + }, + { + name: 'Wednesday', + tempMax: 28, + tempMin: 18, + description: 'Sunny', + iconColor: 'orange', + iconName: 'fa-sun' + }, + { + name: 'Thursday', + tempMax: 20, + tempMin: 12, + description: 'Few Clouds', + iconColor: 'gray', + iconName: 'fa-cloud' + }, + { + name: 'Friday', + tempMax: 23, + tempMin: 13, + description: 'Light Rain', + iconColor: 'blue', + iconName: 'fa-tint' + } + ] +}; diff --git a/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/index.ts b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/index.ts new file mode 100644 index 000000000..858aa1906 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/custom-templates/weather-forecast/index.ts @@ -0,0 +1,25 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxWeatherForecastTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.id = "weather-forecast"; + this.projectType = "igx-ts"; + this.listInComponentTemplates = false; + this.listInCustomTemplates = true; + this.name = "Weather Forecast"; + this.description = "Weather Forecast"; + this.dependencies = [ + { + import: [ + "IgxButtonModule", + "IgxCardModule", + "IgxExpansionPanelModule", + "IgxIconModule" + ], + from: "<%=igxPackage%>" + } + ]; + } +} +module.exports = new IgxWeatherForecastTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..d23dfbdce --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,7 @@ +
+

igx-date-picker component.

+

You can read more about configuring the igx-date-picker component in the + README or the + official documentation.

+ +
diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e2b1ee4a1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,3 @@ +.igx-date-picker { + width: 200px; +} diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..5bb78a1f4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxDatePickerModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxDatePickerModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..34eb87be7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,11 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.Emulated, +}) +export class <%=ClassName%>Component { + public today: Date = new Date(Date.now()); +} diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/default/index.ts b/packages/igx-templates/igx-ts-legacy/date-picker/default/index.ts new file mode 100644 index 000000000..ffd5a458c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/default/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxDatePickerTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Date Picker"]; + this.controlGroup = "Scheduling"; + this.listInComponentTemplates = true; + this.id = "date-picker"; + this.projectType = "igx-ts"; + this.name = "Date Picker"; + this.description = "basic IgxDatePicker"; + this.dependencies = [ + { import: "IgxDatePickerModule", from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxDatePickerTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/date-picker/index.ts b/packages/igx-templates/igx-ts-legacy/date-picker/index.ts new file mode 100644 index 000000000..a6752c23f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/date-picker/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxDatePickerComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Date Picker"; + this.group = "Scheduling"; + this.description = "displays a month-view calendar or a pop-up calendar that lets users pick a single date"; + } +} +module.exports = new IgxDatePickerComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..14ca03f70 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,9 @@ +

Standard dialog window template

+

You can read more about configuring the igx-dialog component in the + README or the + official documentation. +

+ + + diff --git a/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..ab5ea4891 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,6 @@ +:host { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} diff --git a/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..a211d81af --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxDialogModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ IgxDialogModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..c589c6b80 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { IDialogEventArgs } from '<%=igxPackage%>'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) + +export class <%=ClassName%>Component { + dialogOKSelected(args: IDialogEventArgs) { + args.dialog.close(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/dialog/default/index.ts b/packages/igx-templates/igx-ts-legacy/dialog/default/index.ts new file mode 100644 index 000000000..c34b6a970 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxDialogTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Dialog"]; + this.controlGroup = "Interactions"; + this.listInComponentTemplates = true; + this.id = "dialog"; + this.projectType = "igx-ts"; + this.name = "Dialog"; + this.description = "Standart dialog template"; + this.dependencies = [{ + import: ["IgxDialogModule", "IgxButtonModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxDialogTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/dialog/index.ts b/packages/igx-templates/igx-ts-legacy/dialog/index.ts new file mode 100644 index 000000000..9706c1653 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dialog/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxDialogComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Dialog"; + this.group = "Interactions"; + } +} +module.exports = new IgxDialogComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..164735d01 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,16 @@ + +
Content 1
+
Content 2
+
+

igx-dock-manager component.

+

You can read more about configuring the igx-dock-manager component in the + official documentation. +

+
+
Content 4
+
Content 5
+
Content 6
+
Content 7
+
Content 8
+
Content 9
+
diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..828cb3a6e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,8 @@ +.dockManagerContent { + padding: 0.5rem; +} + +:host { + flex: 1 1 auto; + padding: 0 !important; +} diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..8746a1f72 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { defineCustomElements } from '<%=dockManagerPackage%>/loader'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +defineCustomElements(); + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + expect(document.querySelector('igc-dockmanager')?.constructor).toBe(customElements.get('igc-dockmanager')); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..cb7ada9dc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,121 @@ +import { Component } from '@angular/core'; +import { + IgcDockManagerLayout, + IgcDockManagerPaneType, + IgcSplitPaneOrientation +} from '<%=dockManagerPackage%>'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + + public layout: IgcDockManagerLayout = { + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + panes: [ + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.vertical, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content1', + header: 'Content Pane 1' + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content2', + header: 'Unpinned Pane 1', + isPinned: false + } + ] + }, + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.vertical, + size: 200, + panes: [ + { + type: IgcDockManagerPaneType.documentHost, + size: 200, + rootPane: { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + panes: [ + { + type: IgcDockManagerPaneType.tabGroupPane, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + header: 'Document 1', + contentId: 'content3' + }, + { + type: IgcDockManagerPaneType.contentPane, + header: 'Document 2', + contentId: 'content4' + } + ] + } + ] + } + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content5', + header: 'Unpinned Pane 2', + isPinned: false + } + ] + }, + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.vertical, + panes: [ + { + type: IgcDockManagerPaneType.tabGroupPane, + size: 200, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content6', + header: 'Tab 1' + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content7', + header: 'Tab 2' + } + ] + }, + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content8', + header: 'Content Pane 2' + } + ] + } + ] + }, + floatingPanes: [ + { + type: IgcDockManagerPaneType.splitPane, + orientation: IgcSplitPaneOrientation.horizontal, + floatingHeight: 150, + floatingWidth: 250, + floatingLocation: { x: 300, y: 200 }, + panes: [ + { + type: IgcDockManagerPaneType.contentPane, + contentId: 'content9', + header: 'Floating Pane' + } + ] + } + ] + }; +} diff --git a/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.module.ts b/packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.module.ts rename to packages/igx-templates/igx-ts-legacy/dock-manager/default/files/src/app/__path__/__filePrefix__.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/default/index.ts b/packages/igx-templates/igx-ts-legacy/dock-manager/default/index.ts new file mode 100644 index 000000000..9a65564e4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/default/index.ts @@ -0,0 +1,25 @@ +import { TypeScriptFileUpdate } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; +import { NPM_DOCK_MANAGER, resolveIgxPackage } from "../../../package-resolve"; + +class IgcDockManagerTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Dock Manager"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "dock-manager"; + this.projectType = "igx-ts"; + this.name = "Dock Manager"; + this.description = "basic IgcDockManager"; + this.dependencies = [ + { import: "<%=ClassName%>Module", from: "./src/app/<%=path%>/<%=filePrefix%>.module.ts" } + ]; + // "igniteui-dockmanager@~1.0.0": + this.packages = [ `${resolveIgxPackage(NPM_DOCK_MANAGER)}@~1.8.0` ]; + } + protected addClassDeclaration(mainModule: TypeScriptFileUpdate, projPath: string, name: string, modulePath: string) { + // not applicable with custom module + } +} +module.exports = new IgcDockManagerTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/dock-manager/index.ts b/packages/igx-templates/igx-ts-legacy/dock-manager/index.ts new file mode 100644 index 000000000..9f1607e1f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dock-manager/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxDockManagerComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Dock Manager"; + this.group = "Layouts"; + this.description = `provides means to manage the layout of your application through panes, allowing your end-users to customize it further by pinning, resizing, moving and hiding panes.`; + } +} +module.exports = new IgxDockManagerComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..64b515ce9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,13 @@ +

igx-dropdown component.

+

You can read more about configuring the igx-dropdown component in the +README or the +official documentation.

+ + diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..fa908d682 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,14 @@ +:host { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.drop-down-wrapper { + margin: 10px; + width: 200px; +} + +button { + width: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..8b32a9e16 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxDropDownModule, IgxToggleModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ IgxDropDownModule, NoopAnimationsModule, IgxToggleModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..971fcafeb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { Country, data } from './local-data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) + +export class <%=ClassName%>Component { + public items: Country[] = data; +} diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/local-data.ts b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/local-data.ts new file mode 100644 index 000000000..6bfad517c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/files/src/app/__path__/local-data.ts @@ -0,0 +1,21 @@ +export interface Country { + name: string; + header?: boolean; + disabled?: boolean; +} + +const data: Country[] = [ + { name: 'EU', header: true }, + { name: 'Germany' }, + { name: 'Bulgaria' }, + { name: 'UK', disabled: true }, + { name: 'NA', header: true }, + { name: 'Canada' }, + { name: 'USA' }, + { name: 'Mexico' }, + { name: 'SA', header: true }, + { name: 'Brazil' }, + { name: 'Colombia', disabled: true }, + { name: 'Argentina' }]; + +export { data }; diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/default/index.ts b/packages/igx-templates/igx-ts-legacy/dropdown/default/index.ts new file mode 100644 index 000000000..32b406a78 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxDropDownTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Drop Down"]; + this.controlGroup = "Data Entry & Display"; + this.listInComponentTemplates = true; + this.id = "dropdown"; + this.projectType = "igx-ts"; + this.name = "Drop Down"; + this.description = "Basic IgxDropDown sample"; + this.dependencies = [{ + import: ["IgxDropDownModule", "IgxButtonModule", "IgxToggleModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxDropDownTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/dropdown/index.ts b/packages/igx-templates/igx-ts-legacy/dropdown/index.ts new file mode 100644 index 000000000..66288a0b3 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/dropdown/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxDropDownComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Drop Down"; + this.group = "Data Entry & Display"; + } +} +module.exports = new IgxDropDownComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..3f4e1d222 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,7 @@ +

Basic financial chart with automatic toolbar and type selection.

+

You can read more about configuring the igx-financial-chart component in the + official documentation. +

+ + diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b9bc65ea4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,3 @@ +:host { + width: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..3335976b7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IgxFinancialChartModule } from 'igniteui-angular-charts'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxFinancialChartModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..a25543ed0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { AMZNData, Stock } from './data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public data: Stock[] = AMZNData; +} diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/data.ts new file mode 100644 index 000000000..9ba1ab42e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/files/src/app/__path__/data.ts @@ -0,0 +1,1270 @@ +export interface Stock { + time: Date; + open: number; + high: number; + low: number; + close: number; + volume: number; +} + +export const AMZNData: Stock[] = [ + { time: new Date(2013, 1, 1), open: 268.93, high: 268.93, low: 262.80, close: 265.00, volume: 6118146 }, + { time: new Date(2013, 1, 4), open: 262.78, high: 264.68, low: 259.07, close: 259.98, volume: 3723793 }, + { time: new Date(2013, 1, 5), open: 262.00, high: 268.03, low: 261.46, close: 266.89, volume: 4013780 }, + { time: new Date(2013, 1, 6), open: 265.16, high: 266.89, low: 261.11, close: 262.22, volume: 2772204 }, + { time: new Date(2013, 1, 7), open: 264.10, high: 264.10, low: 255.11, close: 260.23, volume: 3977065 }, + { time: new Date(2013, 1, 8), open: 261.40, high: 265.25, low: 260.56, close: 261.95, volume: 3879628 }, + { time: new Date(2013, 1, 11), open: 263.20, high: 263.25, low: 256.60, close: 257.21, volume: 3407457 }, + { time: new Date(2013, 1, 12), open: 259.19, high: 260.16, low: 257.00, close: 258.70, volume: 2944730 }, + { time: new Date(2013, 1, 13), open: 261.53, high: 269.96, low: 260.30, close: 269.47, volume: 5295786 }, + { time: new Date(2013, 1, 14), open: 267.37, high: 270.65, low: 265.40, close: 269.24, volume: 3464080 }, + { time: new Date(2013, 1, 15), open: 267.63, high: 268.92, low: 263.11, close: 265.09, volume: 3981233 }, + { time: new Date(2013, 1, 19), open: 265.91, high: 270.11, low: 264.50, close: 269.75, volume: 2856410 }, + { time: new Date(2013, 1, 20), open: 270.20, high: 274.30, low: 266.37, close: 266.41, volume: 3530656 }, + { time: new Date(2013, 1, 21), open: 265.12, high: 269.48, low: 263.25, close: 265.94, volume: 3638795 }, + { time: new Date(2013, 1, 22), open: 266.62, high: 267.11, low: 261.61, close: 265.42, volume: 3125202 }, + { time: new Date(2013, 1, 25), open: 266.94, high: 268.69, low: 259.65, close: 259.87, volume: 3032709 }, + { time: new Date(2013, 1, 26), open: 260.89, high: 262.04, low: 255.73, close: 259.36, volume: 3348760 }, + { time: new Date(2013, 1, 27), open: 259.40, high: 265.83, low: 256.86, close: 263.25, volume: 2908410 }, + { time: new Date(2013, 1, 28), open: 261.81, high: 267.00, low: 260.63, close: 264.27, volume: 2668154 }, + { time: new Date(2013, 2, 1), open: 263.27, high: 266.60, low: 261.04, close: 265.74, volume: 2958799 }, + { time: new Date(2013, 2, 4), open: 265.36, high: 273.30, low: 264.14, close: 273.11, volume: 3457519 }, + { time: new Date(2013, 2, 5), open: 274.00, high: 276.68, low: 269.99, close: 275.59, volume: 3688583 }, + { time: new Date(2013, 2, 6), open: 275.76, high: 276.49, low: 271.83, close: 273.79, volume: 2051552 }, + { time: new Date(2013, 2, 7), open: 274.10, high: 274.80, low: 271.85, close: 273.88, volume: 1939787 }, + { time: new Date(2013, 2, 8), open: 275.00, high: 275.44, low: 271.50, close: 274.19, volume: 1880117 }, + { time: new Date(2013, 2, 11), open: 273.43, high: 273.99, low: 270.40, close: 271.24, volume: 1905076 }, + { time: new Date(2013, 2, 12), open: 271.00, high: 277.40, low: 270.36, close: 274.13, volume: 3246856 }, + { time: new Date(2013, 2, 13), open: 275.24, high: 276.50, low: 272.64, close: 275.10, volume: 1884215 }, + { time: new Date(2013, 2, 14), open: 269.67, high: 270.00, low: 263.53, close: 265.74, volume: 5227305 }, + { time: new Date(2013, 2, 15), open: 264.98, high: 267.26, low: 260.05, close: 261.82, volume: 4866472 }, + { time: new Date(2013, 2, 18), open: 259.30, high: 261.49, low: 257.12, close: 257.89, volume: 2721496 }, + { time: new Date(2013, 2, 19), open: 258.40, high: 259.50, low: 252.62, close: 256.41, volume: 3739566 }, + { time: new Date(2013, 2, 20), open: 258.05, high: 259.76, low: 254.55, close: 257.28, volume: 2738970 }, + { time: new Date(2013, 2, 21), open: 256.11, high: 257.00, low: 252.68, close: 253.39, volume: 2806446 }, + { time: new Date(2013, 2, 22), open: 254.55, high: 257.77, low: 252.07, close: 257.75, volume: 3126299 }, + { time: new Date(2013, 2, 25), open: 258.58, high: 259.43, low: 254.50, close: 256.02, volume: 2515058 }, + { time: new Date(2013, 2, 26), open: 257.05, high: 261.48, low: 256.28, close: 260.31, volume: 2421160 }, + { time: new Date(2013, 2, 27), open: 258.75, high: 265.93, low: 257.90, close: 265.30, volume: 2874924 }, + { time: new Date(2013, 2, 28), open: 265.82, high: 267.38, low: 264.06, close: 266.49, volume: 2473857 }, + { time: new Date(2013, 3, 1), open: 266.98, high: 267.40, low: 261.01, close: 261.61, volume: 2525200 }, + { time: new Date(2013, 3, 2), open: 262.40, high: 265.89, low: 260.55, close: 263.32, volume: 2632338 }, + { time: new Date(2013, 3, 3), open: 262.12, high: 263.67, low: 257.75, close: 259.03, volume: 2414484 }, + { time: new Date(2013, 3, 4), open: 259.23, high: 260.41, low: 256.12, close: 259.08, volume: 1964612 }, + { time: new Date(2013, 3, 5), open: 255.72, high: 256.18, low: 253.67, close: 255.48, volume: 2558157 }, + { time: new Date(2013, 3, 8), open: 255.92, high: 259.68, low: 255.63, close: 258.95, volume: 2296823 }, + { time: new Date(2013, 3, 9), open: 258.85, high: 262.61, low: 257.00, close: 261.14, volume: 2158332 }, + { time: new Date(2013, 3, 10), open: 261.78, high: 265.98, low: 259.32, close: 264.77, volume: 2322707 }, + { time: new Date(2013, 3, 11), open: 264.74, high: 270.97, low: 264.74, close: 269.85, volume: 3092065 }, + { time: new Date(2013, 3, 12), open: 270.12, high: 273.27, low: 267.02, close: 272.87, volume: 2868165 }, + { time: new Date(2013, 3, 15), open: 271.08, high: 275.12, low: 267.10, close: 267.72, volume: 3325919 }, + { time: new Date(2013, 3, 16), open: 269.31, high: 272.80, low: 268.06, close: 272.34, volume: 2138618 }, + { time: new Date(2013, 3, 17), open: 270.80, high: 270.85, low: 264.25, close: 267.40, volume: 3135291 }, + { time: new Date(2013, 3, 18), open: 266.81, high: 266.99, low: 256.60, close: 259.42, volume: 3138006 }, + { time: new Date(2013, 3, 19), open: 258.16, high: 262.88, low: 257.50, close: 260.32, volume: 2602870 }, + { time: new Date(2013, 3, 22), open: 259.35, high: 264.60, low: 258.03, close: 263.55, volume: 2119351 }, + { time: new Date(2013, 3, 23), open: 264.50, high: 269.87, low: 264.50, close: 268.90, volume: 2274694 }, + { time: new Date(2013, 3, 24), open: 269.50, high: 271.47, low: 266.81, close: 268.78, volume: 1855081 }, + { time: new Date(2013, 3, 25), open: 271.53, high: 275.80, low: 270.50, close: 274.70, volume: 6116498 }, + { time: new Date(2013, 3, 26), open: 269.97, high: 272.02, low: 252.81, close: 254.81, volume: 14035877 }, + { time: new Date(2013, 3, 29), open: 254.90, high: 257.01, low: 249.15, close: 249.74, volume: 7120310 }, + { time: new Date(2013, 3, 30), open: 249.37, high: 254.68, low: 248.56, close: 253.81, volume: 4250210 }, + { time: new Date(2013, 4, 1), open: 253.90, high: 254.20, low: 245.75, close: 248.23, volume: 4392202 }, + { time: new Date(2013, 4, 2), open: 248.94, high: 252.93, low: 245.78, close: 252.55, volume: 3936170 }, + { time: new Date(2013, 4, 3), open: 256.14, high: 259.25, low: 254.70, close: 258.05, volume: 3514674 }, + { time: new Date(2013, 4, 6), open: 258.09, high: 259.50, low: 253.42, close: 255.72, volume: 2349545 }, + { time: new Date(2013, 4, 7), open: 256.31, high: 259.74, low: 252.91, close: 257.73, volume: 3134069 }, + { time: new Date(2013, 4, 8), open: 256.87, high: 260.30, low: 255.33, close: 258.68, volume: 2677086 }, + { time: new Date(2013, 4, 9), open: 258.73, high: 263.55, low: 256.88, close: 260.16, volume: 2769255 }, + { time: new Date(2013, 4, 10), open: 260.88, high: 263.65, low: 260.21, close: 263.63, volume: 3145869 }, + { time: new Date(2013, 4, 13), open: 262.77, high: 265.88, low: 262.00, close: 264.51, volume: 2149498 }, + { time: new Date(2013, 4, 14), open: 264.50, high: 269.40, low: 264.03, close: 268.33, volume: 2700674 }, + { time: new Date(2013, 4, 15), open: 267.07, high: 269.05, low: 264.56, close: 266.56, volume: 2721687 }, + { time: new Date(2013, 4, 16), open: 265.96, high: 268.43, low: 263.85, close: 264.12, volume: 1643668 }, + { time: new Date(2013, 4, 17), open: 265.83, high: 269.98, low: 265.00, close: 269.90, volume: 2528227 }, + { time: new Date(2013, 4, 20), open: 269.00, high: 271.79, low: 266.50, close: 267.63, volume: 2209034 }, + { time: new Date(2013, 4, 21), open: 268.74, high: 270.77, low: 267.66, close: 268.86, volume: 1741466 }, + { time: new Date(2013, 4, 22), open: 267.39, high: 267.59, low: 260.80, close: 262.96, volume: 3332597 }, + { time: new Date(2013, 4, 23), open: 260.49, high: 263.17, low: 259.59, close: 261.80, volume: 2007811 }, + { time: new Date(2013, 4, 24), open: 259.85, high: 261.93, low: 258.34, close: 261.74, volume: 1696415 }, + { time: new Date(2013, 4, 28), open: 266.48, high: 271.10, low: 266.00, close: 267.29, volume: 3471096 }, + { time: new Date(2013, 4, 29), open: 265.46, high: 268.25, low: 264.84, close: 265.53, volume: 1903590 }, + { time: new Date(2013, 4, 30), open: 265.71, high: 268.57, low: 265.62, close: 266.83, volume: 1668469 }, + { time: new Date(2013, 4, 31), open: 266.00, high: 271.91, low: 265.94, close: 269.20, volume: 3374919 }, + { time: new Date(2013, 5, 3), open: 265.38, high: 269.11, low: 262.95, close: 266.88, volume: 2545284 }, + { time: new Date(2013, 5, 4), open: 267.00, high: 268.88, low: 263.02, close: 265.70, volume: 2088972 }, + { time: new Date(2013, 5, 5), open: 265.81, high: 271.66, low: 265.02, close: 267.17, volume: 3512867 }, + { time: new Date(2013, 5, 6), open: 267.75, high: 270.50, low: 264.21, close: 267.83, volume: 2476368 }, + { time: new Date(2013, 5, 7), open: 269.74, high: 280.10, low: 269.13, close: 276.87, volume: 4632539 }, + { time: new Date(2013, 5, 10), open: 276.68, high: 282.47, low: 275.24, close: 281.07, volume: 3088355 }, + { time: new Date(2013, 5, 11), open: 276.00, high: 278.41, low: 274.24, close: 274.78, volume: 3094367 }, + { time: new Date(2013, 5, 12), open: 276.60, high: 276.80, low: 270.45, close: 271.67, volume: 2239259 }, + { time: new Date(2013, 5, 13), open: 271.50, high: 276.80, low: 270.29, close: 275.79, volume: 2651715 }, + { time: new Date(2013, 5, 14), open: 275.00, high: 277.07, low: 273.44, close: 273.99, volume: 2147223 }, + { time: new Date(2013, 5, 17), open: 276.35, high: 280.20, low: 275.65, close: 278.06, volume: 2885680 }, + { time: new Date(2013, 5, 18), open: 279.08, high: 282.91, low: 278.11, close: 281.76, volume: 2147649 }, + { time: new Date(2013, 5, 19), open: 281.26, high: 283.34, low: 277.87, close: 278.16, volume: 2828375 }, + { time: new Date(2013, 5, 20), open: 275.14, high: 278.60, low: 272.39, close: 273.44, volume: 2985196 }, + { time: new Date(2013, 5, 21), open: 274.57, high: 275.84, low: 269.79, close: 273.36, volume: 4202058 }, + { time: new Date(2013, 5, 24), open: 271.29, high: 273.16, low: 265.00, close: 270.61, volume: 3866168 }, + { time: new Date(2013, 5, 25), open: 272.30, high: 273.47, low: 269.00, close: 272.09, volume: 2452910 }, + { time: new Date(2013, 5, 26), open: 273.98, high: 277.98, low: 273.50, close: 277.57, volume: 3029816 }, + { time: new Date(2013, 5, 27), open: 279.18, high: 280.20, low: 274.54, close: 277.55, volume: 2520422 }, + { time: new Date(2013, 5, 28), open: 276.19, high: 279.83, low: 276.19, close: 277.69, volume: 3193515 }, + { time: new Date(2013, 6, 1), open: 279.00, high: 283.29, low: 277.16, close: 282.10, volume: 2890065 }, + { time: new Date(2013, 6, 2), open: 281.04, high: 286.58, low: 280.59, close: 283.73, volume: 3238618 }, + { time: new Date(2013, 6, 3), open: 282.00, high: 285.40, low: 282.00, close: 284.03, volume: 1380205 }, + { time: new Date(2013, 6, 5), open: 285.00, high: 286.38, low: 282.07, close: 285.88, volume: 1985923 }, + { time: new Date(2013, 6, 8), open: 286.42, high: 291.67, low: 286.14, close: 290.59, volume: 3047197 }, + { time: new Date(2013, 6, 9), open: 291.00, high: 292.57, low: 288.01, close: 291.53, volume: 2775516 }, + { time: new Date(2013, 6, 10), open: 291.41, high: 293.34, low: 289.40, close: 292.33, volume: 1810122 }, + { time: new Date(2013, 6, 11), open: 294.99, high: 300.69, low: 292.10, close: 299.66, volume: 4007601 }, + { time: new Date(2013, 6, 12), open: 298.69, high: 307.55, low: 298.50, close: 307.55, volume: 4543264 }, + { time: new Date(2013, 6, 15), open: 307.27, high: 307.99, low: 304.35, close: 306.57, volume: 2245687 }, + { time: new Date(2013, 6, 16), open: 307.30, high: 309.39, low: 305.51, close: 306.87, volume: 2660597 }, + { time: new Date(2013, 6, 17), open: 306.97, high: 308.80, low: 305.69, close: 308.69, volume: 2031626 }, + { time: new Date(2013, 6, 18), open: 306.27, high: 306.34, low: 301.87, close: 304.11, volume: 3064359 }, + { time: new Date(2013, 6, 19), open: 304.39, high: 305.79, low: 301.91, close: 305.23, volume: 2973181 }, + { time: new Date(2013, 6, 22), open: 309.25, high: 309.25, low: 302.00, close: 303.48, volume: 2522023 }, + { time: new Date(2013, 6, 23), open: 303.16, high: 305.06, low: 300.56, close: 301.06, volume: 1999624 }, + { time: new Date(2013, 6, 24), open: 303.02, high: 303.84, low: 298.04, close: 298.94, volume: 2002745 }, + { time: new Date(2013, 6, 25), open: 299.00, high: 304.50, low: 296.75, close: 303.40, volume: 5484465 }, + { time: new Date(2013, 6, 26), open: 299.55, high: 313.62, low: 295.55, close: 312.01, volume: 8819755 }, + { time: new Date(2013, 6, 29), open: 311.07, high: 313.00, low: 305.90, close: 306.10, volume: 3213115 }, + { time: new Date(2013, 6, 30), open: 307.72, high: 309.78, low: 301.57, close: 302.41, volume: 3053775 }, + { time: new Date(2013, 6, 31), open: 303.91, high: 305.15, low: 301.00, close: 301.22, volume: 1891514 }, + { time: new Date(2013, 7, 1), open: 303.08, high: 306.21, low: 298.90, close: 305.57, volume: 2971659 }, + { time: new Date(2013, 7, 2), open: 304.63, high: 305.33, low: 301.50, close: 304.21, volume: 2508358 }, + { time: new Date(2013, 7, 5), open: 303.40, high: 303.62, low: 298.30, close: 300.99, volume: 2233258 }, + { time: new Date(2013, 7, 6), open: 300.51, high: 301.36, low: 297.52, close: 300.75, volume: 1849796 }, + { time: new Date(2013, 7, 7), open: 300.15, high: 300.99, low: 296.15, close: 296.91, volume: 1963110 }, + { time: new Date(2013, 7, 8), open: 298.52, high: 298.52, low: 292.55, close: 295.74, volume: 2346335 }, + { time: new Date(2013, 7, 9), open: 295.68, high: 299.27, low: 294.30, close: 297.26, volume: 1950386 }, + { time: new Date(2013, 7, 12), open: 295.79, high: 299.08, low: 295.26, close: 296.69, volume: 1504625 }, + { time: new Date(2013, 7, 13), open: 295.88, high: 296.37, low: 290.67, close: 293.97, volume: 2355093 }, + { time: new Date(2013, 7, 14), open: 294.29, high: 294.29, low: 290.54, close: 291.34, volume: 1415476 }, + { time: new Date(2013, 7, 15), open: 288.79, high: 289.30, low: 285.15, close: 286.47, volume: 2261493 }, + { time: new Date(2013, 7, 16), open: 286.55, high: 288.33, low: 284.50, close: 284.82, volume: 2423056 }, + { time: new Date(2013, 7, 19), open: 285.19, high: 289.56, low: 283.48, close: 285.57, volume: 2479612 }, + { time: new Date(2013, 7, 20), open: 285.88, high: 289.52, low: 285.74, close: 287.09, volume: 1586236 }, + { time: new Date(2013, 7, 21), open: 285.09, high: 288.50, low: 283.83, close: 284.57, volume: 1816344 }, + { time: new Date(2013, 7, 22), open: 284.80, high: 289.87, low: 284.80, close: 289.73, volume: 1422672 }, + { time: new Date(2013, 7, 23), open: 291.21, high: 291.50, low: 287.90, close: 290.01, volume: 1968285 }, + { time: new Date(2013, 7, 26), open: 290.43, high: 291.05, low: 285.62, close: 286.21, volume: 1718213 }, + { time: new Date(2013, 7, 27), open: 283.87, high: 285.28, low: 279.74, close: 280.93, volume: 2475991 }, + { time: new Date(2013, 7, 28), open: 280.36, high: 283.00, low: 279.33, close: 281.58, volume: 1457461 }, + { time: new Date(2013, 7, 29), open: 281.45, high: 285.98, low: 280.00, close: 283.98, volume: 1566544 }, + { time: new Date(2013, 7, 30), open: 284.59, high: 284.87, low: 280.00, close: 280.98, volume: 1534706 }, + { time: new Date(2013, 8, 3), open: 284.73, high: 291.39, low: 284.17, close: 288.80, volume: 2898422 }, + { time: new Date(2013, 8, 4), open: 288.33, high: 295.23, low: 287.58, close: 293.64, volume: 2439351 }, + { time: new Date(2013, 8, 5), open: 293.63, high: 297.00, low: 292.71, close: 294.10, volume: 1819790 }, + { time: new Date(2013, 8, 6), open: 295.33, high: 298.88, low: 290.80, close: 295.86, volume: 2293345 }, + { time: new Date(2013, 8, 9), open: 297.22, high: 299.96, low: 296.60, close: 299.71, volume: 1646244 }, + { time: new Date(2013, 8, 10), open: 300.55, high: 301.00, low: 297.22, close: 300.36, volume: 1781037 }, + { time: new Date(2013, 8, 11), open: 298.91, high: 301.86, low: 297.84, close: 299.64, volume: 1742264 }, + { time: new Date(2013, 8, 12), open: 299.39, high: 302.00, low: 297.66, close: 298.86, volume: 1606393 }, + { time: new Date(2013, 8, 13), open: 300.14, high: 300.22, low: 296.20, close: 297.92, volume: 1350645 }, + { time: new Date(2013, 8, 16), open: 299.82, high: 301.00, low: 295.26, close: 296.06, volume: 1818400 }, + { time: new Date(2013, 8, 17), open: 297.63, high: 304.65, low: 296.01, close: 304.17, volume: 2297381 }, + { time: new Date(2013, 8, 18), open: 304.06, high: 312.74, low: 302.91, close: 312.03, volume: 2946988 }, + { time: new Date(2013, 8, 19), open: 313.77, high: 314.54, low: 311.04, close: 312.06, volume: 2350946 }, + { time: new Date(2013, 8, 20), open: 312.54, high: 320.57, low: 312.41, close: 316.34, volume: 5306003 }, + { time: new Date(2013, 8, 23), open: 314.01, high: 315.90, low: 308.77, close: 311.49, volume: 1885197 }, + { time: new Date(2013, 8, 24), open: 312.43, high: 318.08, low: 311.28, close: 314.13, volume: 2033546 }, + { time: new Date(2013, 8, 25), open: 314.53, high: 316.71, low: 310.75, close: 312.65, volume: 2010249 }, + { time: new Date(2013, 8, 26), open: 313.90, high: 319.37, low: 313.26, close: 318.12, volume: 1990982 }, + { time: new Date(2013, 8, 27), open: 316.92, high: 317.21, low: 313.35, close: 316.01, volume: 1658435 }, + { time: new Date(2013, 8, 30), open: 313.41, high: 315.31, low: 311.06, close: 312.64, volume: 1625844 }, + { time: new Date(2013, 9, 1), open: 314.22, high: 321.00, low: 313.65, close: 320.95, volume: 2398999 }, + { time: new Date(2013, 9, 2), open: 318.04, high: 321.73, low: 317.52, close: 320.51, volume: 2224623 }, + { time: new Date(2013, 9, 3), open: 320.39, high: 322.92, low: 313.02, close: 314.76, volume: 2679440 }, + { time: new Date(2013, 9, 4), open: 315.13, high: 319.20, low: 312.62, close: 319.04, volume: 1814976 }, + { time: new Date(2013, 9, 7), open: 315.24, high: 315.34, low: 309.74, close: 310.03, volume: 2085725 }, + { time: new Date(2013, 9, 8), open: 311.50, high: 311.54, low: 300.27, close: 303.23, volume: 3171592 }, + { time: new Date(2013, 9, 9), open: 303.42, high: 303.50, low: 296.50, close: 298.23, volume: 3252771 }, + { time: new Date(2013, 9, 10), open: 304.63, high: 306.70, low: 302.59, close: 305.17, volume: 2557138 }, + { time: new Date(2013, 9, 11), open: 304.77, high: 310.93, low: 303.84, close: 310.89, volume: 2163093 }, + { time: new Date(2013, 9, 14), open: 309.22, high: 311.64, low: 307.00, close: 310.70, volume: 1939092 }, + { time: new Date(2013, 9, 15), open: 309.87, high: 310.79, low: 305.26, close: 306.40, volume: 2261554 }, + { time: new Date(2013, 9, 16), open: 308.38, high: 310.80, low: 305.55, close: 310.49, volume: 2180521 }, + { time: new Date(2013, 9, 17), open: 307.07, high: 311.00, low: 305.24, close: 310.77, volume: 2648384 }, + { time: new Date(2013, 9, 18), open: 319.36, high: 331.89, low: 316.75, close: 328.93, volume: 5969814 }, + { time: new Date(2013, 9, 21), open: 329.89, high: 330.00, low: 323.80, close: 326.44, volume: 2527617 }, + { time: new Date(2013, 9, 22), open: 327.72, high: 337.11, low: 325.68, close: 332.54, volume: 3942953 }, + { time: new Date(2013, 9, 23), open: 330.84, high: 331.72, low: 324.06, close: 326.76, volume: 2818158 }, + { time: new Date(2013, 9, 24), open: 329.63, high: 332.65, low: 326.75, close: 332.21, volume: 5884655 }, + { time: new Date(2013, 9, 25), open: 358.60, high: 368.40, low: 352.62, close: 363.39, volume: 12043903 }, + { time: new Date(2013, 9, 28), open: 359.92, high: 362.75, low: 357.20, close: 358.16, volume: 3635848 }, + { time: new Date(2013, 9, 29), open: 358.96, high: 362.89, low: 356.29, close: 362.70, volume: 2190763 }, + { time: new Date(2013, 9, 30), open: 362.62, high: 365.00, low: 358.65, close: 361.08, volume: 4505005 }, + { time: new Date(2013, 9, 31), open: 361.73, high: 366.00, low: 359.00, close: 364.03, volume: 2466937 }, + { time: new Date(2013, 10, 1), open: 365.63, high: 365.77, low: 356.10, close: 359.00, volume: 3332126 }, + { time: new Date(2013, 10, 4), open: 360.12, high: 361.00, low: 354.40, close: 358.74, volume: 1940496 }, + { time: new Date(2013, 10, 5), open: 356.78, high: 360.17, low: 354.84, close: 358.89, volume: 2007275 }, + { time: new Date(2013, 10, 6), open: 360.45, high: 362.87, low: 354.50, close: 356.18, volume: 2288077 }, + { time: new Date(2013, 10, 7), open: 355.86, high: 357.90, low: 341.88, close: 343.56, volume: 4250065 }, + { time: new Date(2013, 10, 8), open: 345.95, high: 351.05, low: 344.04, close: 350.31, volume: 2656865 }, + { time: new Date(2013, 10, 11), open: 350.59, high: 355.37, low: 348.06, close: 354.38, volume: 2262538 }, + { time: new Date(2013, 10, 12), open: 352.99, high: 355.48, low: 347.28, close: 349.53, volume: 2344304 }, + { time: new Date(2013, 10, 13), open: 347.40, high: 356.22, low: 345.68, close: 356.22, volume: 2777832 }, + { time: new Date(2013, 10, 14), open: 357.39, high: 368.94, low: 356.43, close: 367.40, volume: 4164128 }, + { time: new Date(2013, 10, 15), open: 367.63, high: 372.90, low: 365.55, close: 369.17, volume: 4494773 }, + { time: new Date(2013, 10, 18), open: 370.28, high: 373.49, low: 364.67, close: 366.18, volume: 2738214 }, + { time: new Date(2013, 10, 19), open: 365.82, high: 368.78, low: 362.50, close: 364.94, volume: 1904797 }, + { time: new Date(2013, 10, 20), open: 367.56, high: 367.56, low: 360.45, close: 362.57, volume: 1772984 }, + { time: new Date(2013, 10, 21), open: 364.05, high: 369.25, low: 363.30, close: 368.92, volume: 1967041 }, + { time: new Date(2013, 10, 22), open: 370.00, high: 374.50, low: 366.31, close: 372.31, volume: 2967833 }, + { time: new Date(2013, 10, 25), open: 373.82, high: 377.79, low: 373.18, close: 376.64, volume: 2972546 }, + { time: new Date(2013, 10, 26), open: 377.61, high: 382.50, low: 374.82, close: 381.37, volume: 2730689 }, + { time: new Date(2013, 10, 27), open: 383.50, high: 387.00, low: 382.61, close: 386.71, volume: 2269656 }, + { time: new Date(2013, 10, 29), open: 389.10, high: 394.10, low: 388.62, close: 393.62, volume: 2405985 }, + { time: new Date(2013, 11, 2), open: 399.00, high: 399.00, low: 389.10, close: 392.30, volume: 4718883 }, + { time: new Date(2013, 11, 3), open: 390.11, high: 390.95, low: 383.10, close: 384.66, volume: 3707536 }, + { time: new Date(2013, 11, 4), open: 383.50, high: 389.69, low: 381.49, close: 385.96, volume: 2355719 }, + { time: new Date(2013, 11, 5), open: 386.65, high: 386.65, low: 381.37, close: 384.49, volume: 1906452 }, + { time: new Date(2013, 11, 6), open: 388.35, high: 388.35, low: 383.83, close: 386.95, volume: 1987762 }, + { time: new Date(2013, 11, 9), open: 388.21, high: 388.21, low: 382.57, close: 384.89, volume: 2766573 }, + { time: new Date(2013, 11, 10), open: 383.50, high: 389.06, low: 383.02, close: 387.78, volume: 2739875 }, + { time: new Date(2013, 11, 11), open: 387.71, high: 388.98, low: 382.00, close: 382.19, volume: 2451254 }, + { time: new Date(2013, 11, 12), open: 381.55, high: 385.00, low: 379.50, close: 381.25, volume: 2123652 }, + { time: new Date(2013, 11, 13), open: 384.62, high: 389.42, low: 383.80, close: 384.24, volume: 3025145 }, + { time: new Date(2013, 11, 16), open: 385.50, high: 391.70, low: 385.00, close: 388.97, volume: 2258884 }, + { time: new Date(2013, 11, 17), open: 391.00, high: 391.36, low: 386.50, close: 387.65, volume: 2348377 }, + { time: new Date(2013, 11, 18), open: 389.56, high: 396.30, low: 383.10, close: 395.96, volume: 3493635 }, + { time: new Date(2013, 11, 19), open: 394.36, high: 397.29, low: 392.60, close: 395.19, volume: 2429598 }, + { time: new Date(2013, 11, 20), open: 396.84, high: 404.72, low: 395.78, close: 402.20, volume: 5038537 }, + { time: new Date(2013, 11, 23), open: 403.69, high: 405.00, low: 399.20, close: 402.92, volume: 2661823 }, + { time: new Date(2013, 11, 24), open: 402.52, high: 403.72, low: 396.37, close: 399.20, volume: 1380373 }, + { time: new Date(2013, 11, 26), open: 401.79, high: 404.52, low: 396.81, close: 404.39, volume: 1871590 }, + { time: new Date(2013, 11, 27), open: 404.65, high: 405.63, low: 396.25, close: 398.08, volume: 1987280 }, + { time: new Date(2013, 11, 30), open: 399.41, high: 399.92, low: 392.45, close: 393.37, volume: 2487812 }, + { time: new Date(2013, 11, 31), open: 394.58, high: 398.83, low: 393.80, close: 398.79, volume: 1997051 }, + { time: new Date(2014, 0, 2), open: 398.80, high: 399.36, low: 394.02, close: 397.97, volume: 2140246 }, + { time: new Date(2014, 0, 3), open: 398.29, high: 402.71, low: 396.22, close: 396.44, volume: 2213512 }, + { time: new Date(2014, 0, 6), open: 395.85, high: 397.00, low: 388.42, close: 393.63, volume: 3172207 }, + { time: new Date(2014, 0, 7), open: 395.04, high: 398.47, low: 394.29, close: 398.03, volume: 1916684 }, + { time: new Date(2014, 0, 8), open: 398.47, high: 403.00, low: 396.04, close: 401.92, volume: 2316903 }, + { time: new Date(2014, 0, 9), open: 403.71, high: 406.89, low: 398.44, close: 401.01, volume: 2103793 }, + { time: new Date(2014, 0, 10), open: 402.53, high: 403.76, low: 393.80, close: 397.66, volume: 2681701 }, + { time: new Date(2014, 0, 13), open: 397.98, high: 399.78, low: 388.45, close: 390.98, volume: 2846507 }, + { time: new Date(2014, 0, 14), open: 392.13, high: 398.63, low: 391.29, close: 397.54, volume: 2340401 }, + { time: new Date(2014, 0, 15), open: 398.94, high: 399.31, low: 392.53, close: 395.87, volume: 2678794 }, + { time: new Date(2014, 0, 16), open: 393.68, high: 399.29, low: 389.41, close: 395.80, volume: 2602506 }, + { time: new Date(2014, 0, 17), open: 394.26, high: 403.49, low: 393.66, close: 399.61, volume: 4508791 }, + { time: new Date(2014, 0, 21), open: 403.00, high: 407.80, low: 401.60, close: 407.05, volume: 3122705 }, + { time: new Date(2014, 0, 22), open: 408.00, high: 408.06, low: 402.00, close: 404.54, volume: 2069759 }, + { time: new Date(2014, 0, 23), open: 401.00, high: 406.17, low: 397.79, close: 399.87, volume: 3026272 }, + { time: new Date(2014, 0, 24), open: 398.16, high: 400.20, low: 387.27, close: 387.60, volume: 4513038 }, + { time: new Date(2014, 0, 27), open: 390.50, high: 394.10, low: 380.49, close: 386.28, volume: 3944752 }, + { time: new Date(2014, 0, 28), open: 387.40, high: 394.74, low: 387.12, close: 394.43, volume: 2901611 }, + { time: new Date(2014, 0, 29), open: 392.16, high: 392.85, low: 383.24, close: 384.20, volume: 3399294 }, + { time: new Date(2014, 0, 30), open: 393.77, high: 406.25, low: 387.70, close: 403.01, volume: 10900116 }, + { time: new Date(2014, 0, 31), open: 371.76, high: 375.45, low: 357.76, close: 358.69, volume: 16181519 }, + { time: new Date(2014, 1, 3), open: 358.98, high: 360.85, low: 340.10, close: 346.15, volume: 10290934 }, + { time: new Date(2014, 1, 4), open: 349.59, high: 354.00, low: 344.02, close: 347.95, volume: 4821177 }, + { time: new Date(2014, 1, 5), open: 346.00, high: 349.37, low: 337.73, close: 346.45, volume: 4439010 }, + { time: new Date(2014, 1, 6), open: 347.40, high: 354.82, low: 347.40, close: 354.59, volume: 3340542 }, + { time: new Date(2014, 1, 7), open: 358.98, high: 361.80, low: 352.49, close: 361.08, volume: 4347189 }, + { time: new Date(2014, 1, 10), open: 361.61, high: 365.00, low: 359.35, close: 360.87, volume: 3451093 }, + { time: new Date(2014, 1, 11), open: 361.84, high: 363.61, low: 356.25, close: 361.79, volume: 3225200 }, + { time: new Date(2014, 1, 12), open: 356.43, high: 357.75, low: 346.32, close: 349.25, volume: 6599199 }, + { time: new Date(2014, 1, 13), open: 347.70, high: 357.20, low: 346.50, close: 357.20, volume: 4181445 }, + { time: new Date(2014, 1, 14), open: 359.34, high: 359.34, low: 353.35, close: 357.35, volume: 3524570 }, + { time: new Date(2014, 1, 18), open: 355.28, high: 355.73, low: 349.45, close: 353.65, volume: 5000493 }, + { time: new Date(2014, 1, 19), open: 352.64, high: 354.54, low: 346.10, close: 347.38, volume: 4175393 }, + { time: new Date(2014, 1, 20), open: 348.80, high: 350.46, low: 344.38, close: 349.80, volume: 3496663 }, + { time: new Date(2014, 1, 21), open: 352.44, high: 354.14, low: 346.75, close: 346.76, volume: 4212144 }, + { time: new Date(2014, 1, 24), open: 345.19, high: 353.00, low: 343.29, close: 351.78, volume: 3647182 }, + { time: new Date(2014, 1, 25), open: 353.00, high: 361.08, low: 351.58, close: 358.32, volume: 3747076 }, + { time: new Date(2014, 1, 26), open: 359.86, high: 364.75, low: 357.17, close: 359.80, volume: 3622506 }, + { time: new Date(2014, 1, 27), open: 357.22, high: 360.59, low: 355.50, close: 360.13, volume: 3105442 }, + { time: new Date(2014, 1, 28), open: 360.60, high: 365.86, low: 357.08, close: 362.10, volume: 3885207 }, + { time: new Date(2014, 2, 3), open: 358.74, high: 360.96, low: 354.48, close: 359.78, volume: 2804261 }, + { time: new Date(2014, 2, 4), open: 363.90, high: 365.68, low: 362.46, close: 363.90, volume: 2706843 }, + { time: new Date(2014, 2, 5), open: 364.13, high: 372.73, low: 363.90, close: 372.37, volume: 3862706 }, + { time: new Date(2014, 2, 6), open: 374.05, high: 375.33, low: 368.90, close: 372.16, volume: 2927497 }, + { time: new Date(2014, 2, 7), open: 374.58, high: 374.99, low: 369.53, close: 372.06, volume: 2280358 }, + { time: new Date(2014, 2, 10), open: 372.69, high: 372.73, low: 367.00, close: 370.53, volume: 2107820 }, + { time: new Date(2014, 2, 11), open: 370.99, high: 372.80, low: 367.28, close: 368.82, volume: 2248019 }, + { time: new Date(2014, 2, 12), open: 366.40, high: 371.16, low: 363.61, close: 370.64, volume: 2219663 }, + { time: new Date(2014, 2, 13), open: 376.62, high: 383.11, low: 368.08, close: 371.51, volume: 6829047 }, + { time: new Date(2014, 2, 14), open: 372.80, high: 378.57, low: 371.55, close: 373.74, volume: 4402220 }, + { time: new Date(2014, 2, 17), open: 375.72, high: 378.85, low: 374.88, close: 375.04, volume: 2306821 }, + { time: new Date(2014, 2, 18), open: 377.32, high: 379.00, low: 375.00, close: 378.77, volume: 2483508 }, + { time: new Date(2014, 2, 19), open: 378.77, high: 379.00, low: 369.42, close: 373.23, volume: 2646687 }, + { time: new Date(2014, 2, 20), open: 370.64, high: 373.00, low: 366.22, close: 368.97, volume: 2558460 }, + { time: new Date(2014, 2, 21), open: 371.00, high: 372.84, low: 358.40, close: 360.62, volume: 5417935 }, + { time: new Date(2014, 2, 24), open: 360.09, high: 361.50, low: 348.60, close: 351.85, volume: 4879627 }, + { time: new Date(2014, 2, 25), open: 354.03, high: 358.97, low: 348.84, close: 354.71, volume: 4455703 }, + { time: new Date(2014, 2, 26), open: 357.13, high: 357.60, low: 343.40, close: 343.41, volume: 4120665 }, + { time: new Date(2014, 2, 27), open: 343.15, high: 344.00, low: 330.88, close: 338.47, volume: 5770462 }, + { time: new Date(2014, 2, 28), open: 340.05, high: 347.00, low: 336.08, close: 338.29, volume: 3986782 }, + { time: new Date(2014, 2, 31), open: 342.40, high: 346.29, low: 334.06, close: 336.36, volume: 4297487 }, + { time: new Date(2014, 3, 1), open: 338.09, high: 344.43, low: 338.00, close: 342.99, volume: 3602899 }, + { time: new Date(2014, 3, 2), open: 345.99, high: 348.30, low: 340.38, close: 341.96, volume: 4475523 }, + { time: new Date(2014, 3, 3), open: 341.82, high: 342.50, low: 328.46, close: 333.62, volume: 6399299 }, + { time: new Date(2014, 3, 4), open: 335.15, high: 335.44, low: 315.61, close: 323.00, volume: 12534578 }, + { time: new Date(2014, 3, 7), open: 320.99, high: 324.94, low: 313.13, close: 317.76, volume: 7077360 }, + { time: new Date(2014, 3, 8), open: 321.88, high: 328.00, low: 318.44, close: 327.07, volume: 6585583 }, + { time: new Date(2014, 3, 9), open: 328.47, high: 332.18, low: 322.50, close: 331.80, volume: 5058664 }, + { time: new Date(2014, 3, 10), open: 330.60, high: 331.00, low: 316.50, close: 317.11, volume: 6133376 }, + { time: new Date(2014, 3, 11), open: 314.00, high: 316.50, low: 309.50, close: 311.73, volume: 7292028 }, + { time: new Date(2014, 3, 14), open: 317.67, high: 320.48, low: 311.28, close: 315.91, volume: 4293532 }, + { time: new Date(2014, 3, 15), open: 316.70, high: 318.28, low: 305.50, close: 316.08, volume: 5399337 }, + { time: new Date(2014, 3, 16), open: 321.17, high: 324.00, low: 314.71, close: 323.68, volume: 4285901 }, + { time: new Date(2014, 3, 17), open: 319.76, high: 328.66, low: 319.76, close: 324.91, volume: 4300378 }, + { time: new Date(2014, 3, 21), open: 323.97, high: 331.15, low: 322.31, close: 330.87, volume: 3000598 }, + { time: new Date(2014, 3, 22), open: 332.00, high: 337.50, low: 328.94, close: 329.32, volume: 3714288 }, + { time: new Date(2014, 3, 23), open: 333.06, high: 333.13, low: 323.39, close: 324.58, volume: 3604586 }, + { time: new Date(2014, 3, 24), open: 329.67, high: 337.40, low: 322.95, close: 337.15, volume: 9293735 }, + { time: new Date(2014, 3, 25), open: 316.25, high: 316.49, low: 302.71, close: 303.83, volume: 16186737 }, + { time: new Date(2014, 3, 28), open: 304.00, high: 304.39, low: 288.00, close: 296.58, volume: 14479803 }, + { time: new Date(2014, 3, 29), open: 296.44, high: 301.84, low: 290.45, close: 300.38, volume: 6510591 }, + { time: new Date(2014, 3, 30), open: 298.10, high: 304.56, low: 298.10, close: 304.13, volume: 4090006 }, + { time: new Date(2014, 4, 1), open: 304.13, high: 310.48, low: 304.00, close: 307.89, volume: 4329167 }, + { time: new Date(2014, 4, 2), open: 310.42, high: 313.29, low: 304.31, close: 308.01, volume: 3995218 }, + { time: new Date(2014, 4, 5), open: 306.37, high: 310.23, low: 305.00, close: 310.05, volume: 2520300 }, + { time: new Date(2014, 4, 6), open: 309.53, high: 309.81, low: 297.04, close: 297.38, volume: 4682327 }, + { time: new Date(2014, 4, 7), open: 295.56, high: 296.40, low: 286.68, close: 292.71, volume: 7016937 }, + { time: new Date(2014, 4, 8), open: 290.82, high: 295.88, low: 287.23, close: 288.32, volume: 3848996 }, + { time: new Date(2014, 4, 9), open: 290.57, high: 293.68, low: 284.38, close: 292.24, volume: 4062984 }, + { time: new Date(2014, 4, 12), open: 294.30, high: 303.34, low: 294.16, close: 302.86, volume: 3735443 }, + { time: new Date(2014, 4, 13), open: 302.60, high: 305.60, low: 300.75, close: 304.64, volume: 3509937 }, + { time: new Date(2014, 4, 14), open: 302.50, high: 304.64, low: 296.66, close: 297.62, volume: 3328414 }, + { time: new Date(2014, 4, 15), open: 298.02, high: 299.20, low: 290.38, close: 295.19, volume: 4299530 }, + { time: new Date(2014, 4, 16), open: 292.80, high: 298.88, low: 291.55, close: 297.70, volume: 3637649 }, + { time: new Date(2014, 4, 19), open: 295.76, high: 299.00, low: 293.81, close: 296.76, volume: 2286313 }, + { time: new Date(2014, 4, 20), open: 297.10, high: 304.46, low: 296.75, close: 301.19, volume: 4096308 }, + { time: new Date(2014, 4, 21), open: 302.21, high: 305.96, low: 301.52, close: 305.01, volume: 3409200 }, + { time: new Date(2014, 4, 22), open: 305.05, high: 308.54, low: 303.01, close: 304.91, volume: 2576888 }, + { time: new Date(2014, 4, 23), open: 305.46, high: 312.35, low: 304.90, close: 312.24, volume: 3055997 }, + { time: new Date(2014, 4, 27), open: 314.41, high: 314.63, low: 307.38, close: 310.82, volume: 4864163 }, + { time: new Date(2014, 4, 28), open: 309.50, high: 313.82, low: 307.42, close: 310.16, volume: 2726803 }, + { time: new Date(2014, 4, 29), open: 310.42, high: 314.87, low: 310.20, close: 313.78, volume: 2365679 }, + { time: new Date(2014, 4, 30), open: 314.43, high: 314.65, low: 307.57, close: 312.55, volume: 4260624 }, + { time: new Date(2014, 5, 2), open: 312.59, high: 312.60, low: 307.00, close: 308.84, volume: 2205909 }, + { time: new Date(2014, 5, 3), open: 305.75, high: 307.92, low: 305.07, close: 307.19, volume: 2379273 }, + { time: new Date(2014, 5, 4), open: 306.85, high: 309.50, low: 303.84, close: 306.78, volume: 2111176 }, + { time: new Date(2014, 5, 5), open: 308.10, high: 327.94, low: 306.90, close: 323.57, volume: 7803760 }, + { time: new Date(2014, 5, 6), open: 325.00, high: 330.88, low: 324.93, close: 329.67, volume: 5246723 }, + { time: new Date(2014, 5, 9), open: 331.57, high: 333.00, low: 325.65, close: 327.50, volume: 3212755 }, + { time: new Date(2014, 5, 10), open: 327.65, high: 335.50, low: 327.50, close: 332.41, volume: 3668904 }, + { time: new Date(2014, 5, 11), open: 336.00, high: 340.72, low: 333.88, close: 335.20, volume: 4439178 }, + { time: new Date(2014, 5, 12), open: 335.55, high: 335.55, low: 324.66, close: 325.91, volume: 4276316 }, + { time: new Date(2014, 5, 13), open: 327.05, high: 329.30, low: 323.53, close: 326.27, volume: 2766909 }, + { time: new Date(2014, 5, 16), open: 324.86, high: 328.69, low: 323.52, close: 327.62, volume: 2449843 }, + { time: new Date(2014, 5, 17), open: 327.54, high: 331.34, low: 325.23, close: 325.62, volume: 2924058 }, + { time: new Date(2014, 5, 18), open: 328.00, high: 335.75, low: 325.00, close: 334.38, volume: 6409334 }, + { time: new Date(2014, 5, 19), open: 335.26, high: 338.90, low: 325.98, close: 327.00, volume: 5327002 }, + { time: new Date(2014, 5, 20), open: 327.76, high: 328.22, low: 320.42, close: 324.20, volume: 6056210 }, + { time: new Date(2014, 5, 23), open: 323.33, high: 327.55, low: 321.41, close: 327.24, volume: 2609628 }, + { time: new Date(2014, 5, 24), open: 327.54, high: 329.73, low: 322.74, close: 324.16, volume: 2627978 }, + { time: new Date(2014, 5, 25), open: 324.33, high: 328.15, low: 321.74, close: 327.44, volume: 2328006 }, + { time: new Date(2014, 5, 26), open: 328.49, high: 328.65, low: 322.13, close: 325.69, volume: 2699908 }, + { time: new Date(2014, 5, 27), open: 325.88, high: 326.52, low: 323.27, close: 324.57, volume: 2419626 }, + { time: new Date(2014, 5, 30), open: 324.98, high: 326.98, low: 322.24, close: 324.78, volume: 2672165 }, + { time: new Date(2014, 6, 1), open: 325.86, high: 333.20, low: 325.10, close: 332.39, volume: 3178548 }, + { time: new Date(2014, 6, 2), open: 333.20, high: 336.76, low: 331.66, close: 332.85, volume: 2681578 }, + { time: new Date(2014, 6, 3), open: 334.83, high: 338.30, low: 333.08, close: 337.49, volume: 1944300 }, + { time: new Date(2014, 6, 7), open: 337.50, high: 337.55, low: 332.52, close: 333.55, volume: 2130028 }, + { time: new Date(2014, 6, 8), open: 333.10, high: 333.74, low: 321.40, close: 323.81, volume: 4275447 }, + { time: new Date(2014, 6, 9), open: 324.71, high: 330.20, low: 323.15, close: 329.97, volume: 3167133 }, + { time: new Date(2014, 6, 10), open: 324.34, high: 329.98, low: 322.65, close: 327.92, volume: 2665753 }, + { time: new Date(2014, 6, 11), open: 334.71, high: 347.00, low: 334.71, close: 346.20, volume: 8309079 }, + { time: new Date(2014, 6, 14), open: 347.03, high: 355.77, low: 345.36, close: 355.32, volume: 5615482 }, + { time: new Date(2014, 6, 15), open: 353.72, high: 355.59, low: 349.40, close: 354.44, volume: 4176758 }, + { time: new Date(2014, 6, 16), open: 355.62, high: 359.32, low: 353.00, close: 355.90, volume: 3505023 }, + { time: new Date(2014, 6, 17), open: 353.44, high: 356.96, low: 351.38, close: 352.45, volume: 3640290 }, + { time: new Date(2014, 6, 18), open: 354.40, high: 359.68, low: 352.08, close: 358.66, volume: 3410032 }, + { time: new Date(2014, 6, 21), open: 358.10, high: 361.71, low: 356.72, close: 359.76, volume: 2282741 }, + { time: new Date(2014, 6, 22), open: 355.25, high: 362.93, low: 355.25, close: 360.84, volume: 2889366 }, + { time: new Date(2014, 6, 23), open: 359.05, high: 360.63, low: 356.62, close: 358.14, volume: 2688761 }, + { time: new Date(2014, 6, 24), open: 359.98, high: 364.85, low: 358.52, close: 358.61, volume: 7088655 }, + { time: new Date(2014, 6, 25), open: 317.30, high: 324.87, low: 314.76, close: 324.01, volume: 17855141 }, + { time: new Date(2014, 6, 28), open: 324.25, high: 324.82, low: 316.50, close: 320.41, volume: 5933999 }, + { time: new Date(2014, 6, 29), open: 321.98, high: 322.90, low: 319.50, close: 320.00, volume: 2885644 }, + { time: new Date(2014, 6, 30), open: 321.45, high: 322.73, low: 318.50, close: 322.51, volume: 3973213 }, + { time: new Date(2014, 6, 31), open: 320.01, high: 320.68, low: 311.86, close: 312.99, volume: 5193770 }, + { time: new Date(2014, 7, 1), open: 313.69, high: 315.83, low: 304.59, close: 307.06, volume: 7443091 }, + { time: new Date(2014, 7, 4), open: 308.84, high: 316.18, low: 308.50, close: 313.65, volume: 4208660 }, + { time: new Date(2014, 7, 5), open: 313.65, high: 314.55, low: 310.06, close: 312.32, volume: 2856294 }, + { time: new Date(2014, 7, 6), open: 310.83, high: 315.78, low: 310.20, close: 313.89, volume: 2297476 }, + { time: new Date(2014, 7, 7), open: 315.21, high: 315.88, low: 309.66, close: 311.45, volume: 2936913 }, + { time: new Date(2014, 7, 8), open: 311.94, high: 317.32, low: 310.66, close: 316.80, volume: 2708416 }, + { time: new Date(2014, 7, 11), open: 318.48, high: 320.38, low: 316.88, close: 318.33, volume: 2472819 }, + { time: new Date(2014, 7, 12), open: 318.89, high: 321.31, low: 316.95, close: 319.32, volume: 1916143 }, + { time: new Date(2014, 7, 13), open: 327.60, high: 331.72, low: 326.14, close: 326.28, volume: 4945094 }, + { time: new Date(2014, 7, 14), open: 327.80, high: 334.09, low: 326.71, close: 333.21, volume: 3420646 }, + { time: new Date(2014, 7, 15), open: 334.00, high: 335.00, low: 328.32, close: 333.63, volume: 3897928 }, + { time: new Date(2014, 7, 18), open: 335.48, high: 337.80, low: 333.77, close: 334.53, volume: 2488186 }, + { time: new Date(2014, 7, 19), open: 334.87, high: 335.81, low: 333.01, close: 335.13, volume: 1714120 }, + { time: new Date(2014, 7, 20), open: 334.68, high: 337.16, low: 334.02, close: 335.78, volume: 1811462 }, + { time: new Date(2014, 7, 21), open: 336.48, high: 336.58, low: 332.23, close: 332.91, volume: 1975792 }, + { time: new Date(2014, 7, 22), open: 332.99, high: 334.08, low: 330.80, close: 331.59, volume: 2212965 }, + { time: new Date(2014, 7, 25), open: 333.21, high: 336.77, low: 332.71, close: 334.02, volume: 1960978 }, + { time: new Date(2014, 7, 26), open: 337.00, high: 344.36, low: 334.55, close: 341.83, volume: 3654702 }, + { time: new Date(2014, 7, 27), open: 342.09, high: 346.67, low: 341.34, close: 343.18, volume: 2961767 }, + { time: new Date(2014, 7, 28), open: 340.00, high: 341.79, low: 338.80, close: 340.02, volume: 2254725 }, + { time: new Date(2014, 7, 29), open: 341.76, high: 341.82, low: 337.68, close: 339.04, volume: 1939848 }, + { time: new Date(2014, 8, 2), open: 339.98, high: 342.50, low: 337.16, close: 342.38, volume: 2328881 }, + { time: new Date(2014, 8, 3), open: 342.54, high: 343.27, low: 337.55, close: 339.00, volume: 1998540 }, + { time: new Date(2014, 8, 4), open: 343.69, high: 349.38, low: 343.58, close: 345.95, volume: 3965557 }, + { time: new Date(2014, 8, 5), open: 346.30, high: 346.83, low: 342.50, close: 346.38, volume: 2111220 }, + { time: new Date(2014, 8, 8), open: 344.54, high: 345.81, low: 339.04, close: 342.34, volume: 2960693 }, + { time: new Date(2014, 8, 9), open: 341.61, high: 341.76, low: 329.18, close: 329.75, volume: 4646832 }, + { time: new Date(2014, 8, 10), open: 334.30, high: 334.98, low: 328.82, close: 331.33, volume: 3798904 }, + { time: new Date(2014, 8, 11), open: 329.94, high: 333.01, low: 326.39, close: 330.52, volume: 2721893 }, + { time: new Date(2014, 8, 12), open: 329.56, high: 332.89, low: 328.79, close: 331.19, volume: 3429727 }, + { time: new Date(2014, 8, 15), open: 330.91, high: 331.33, low: 319.00, close: 323.89, volume: 4006918 }, + { time: new Date(2014, 8, 16), open: 321.07, high: 329.48, low: 320.10, close: 327.76, volume: 3265860 }, + { time: new Date(2014, 8, 17), open: 327.76, high: 328.00, low: 321.52, close: 324.00, volume: 4138950 }, + { time: new Date(2014, 8, 18), open: 325.44, high: 327.10, low: 323.71, close: 325.00, volume: 2577706 }, + { time: new Date(2014, 8, 19), open: 327.60, high: 332.76, low: 325.57, close: 331.32, volume: 6886382 }, + { time: new Date(2014, 8, 22), open: 328.49, high: 329.49, low: 321.06, close: 324.50, volume: 3118649 }, + { time: new Date(2014, 8, 23), open: 322.46, high: 327.60, low: 321.25, close: 323.63, volume: 2353590 }, + { time: new Date(2014, 8, 24), open: 324.17, high: 329.44, low: 319.56, close: 328.21, volume: 2647232 }, + { time: new Date(2014, 8, 25), open: 327.99, high: 328.54, low: 321.40, close: 321.93, volume: 2934944 }, + { time: new Date(2014, 8, 26), open: 320.60, high: 323.50, low: 317.64, close: 323.21, volume: 3639155 }, + { time: new Date(2014, 8, 29), open: 320.50, high: 323.75, low: 319.00, close: 321.82, volume: 1929589 }, + { time: new Date(2014, 8, 30), open: 321.36, high: 323.43, low: 318.51, close: 322.44, volume: 2639967 }, + { time: new Date(2014, 9, 1), open: 322.04, high: 322.16, low: 315.55, close: 317.46, volume: 3096735 }, + { time: new Date(2014, 9, 2), open: 316.92, high: 318.53, low: 311.31, close: 318.41, volume: 3553944 }, + { time: new Date(2014, 9, 3), open: 320.36, high: 325.16, low: 319.53, close: 322.74, volume: 3037891 }, + { time: new Date(2014, 9, 6), open: 323.50, high: 324.13, low: 319.60, close: 322.20, volume: 2294194 }, + { time: new Date(2014, 9, 7), open: 319.43, high: 322.00, low: 316.67, close: 316.98, volume: 2365698 }, + { time: new Date(2014, 9, 8), open: 316.58, high: 324.11, low: 314.14, close: 322.70, volume: 3458960 }, + { time: new Date(2014, 9, 9), open: 321.49, high: 322.27, low: 314.52, close: 315.37, volume: 3589464 }, + { time: new Date(2014, 9, 10), open: 314.02, high: 317.77, low: 311.38, close: 311.39, volume: 3684314 }, + { time: new Date(2014, 9, 13), open: 309.87, high: 313.20, low: 303.47, close: 306.45, volume: 4369850 }, + { time: new Date(2014, 9, 14), open: 308.00, high: 312.24, low: 305.75, close: 308.31, volume: 3385809 }, + { time: new Date(2014, 9, 15), open: 304.35, high: 307.90, low: 299.10, close: 305.97, volume: 5348254 }, + { time: new Date(2014, 9, 16), open: 293.83, high: 306.82, low: 293.83, close: 302.86, volume: 4731866 }, + { time: new Date(2014, 9, 17), open: 307.15, high: 309.20, low: 302.72, close: 303.64, volume: 4409218 }, + { time: new Date(2014, 9, 20), open: 302.95, high: 306.53, low: 302.02, close: 306.21, volume: 3239490 }, + { time: new Date(2014, 9, 21), open: 309.90, high: 315.64, low: 307.07, close: 315.33, volume: 3563351 }, + { time: new Date(2014, 9, 22), open: 315.43, high: 318.98, low: 312.64, close: 312.97, volume: 3130049 }, + { time: new Date(2014, 9, 23), open: 313.40, high: 316.80, low: 311.40, close: 313.18, volume: 9038193 }, + { time: new Date(2014, 9, 24), open: 284.40, high: 293.81, low: 284.00, close: 287.06, volume: 19805911 }, + { time: new Date(2014, 9, 27), open: 285.70, high: 290.42, low: 285.02, close: 289.97, volume: 5950594 }, + { time: new Date(2014, 9, 28), open: 289.76, high: 298.00, low: 289.76, close: 295.59, volume: 5576646 }, + { time: new Date(2014, 9, 29), open: 299.11, high: 299.61, low: 293.07, close: 294.12, volume: 4883259 }, + { time: new Date(2014, 9, 30), open: 293.98, high: 299.74, low: 292.36, close: 299.07, volume: 4055155 }, + { time: new Date(2014, 9, 31), open: 305.15, high: 305.72, low: 301.50, close: 305.46, volume: 4551795 }, + { time: new Date(2014, 10, 3), open: 306.24, high: 308.01, low: 303.24, close: 305.72, volume: 3244150 }, + { time: new Date(2014, 10, 4), open: 303.99, high: 304.25, low: 300.17, close: 302.81, volume: 3427384 }, + { time: new Date(2014, 10, 5), open: 303.01, high: 304.00, low: 294.16, close: 296.52, volume: 4674492 }, + { time: new Date(2014, 10, 6), open: 296.69, high: 297.00, low: 292.29, close: 296.64, volume: 3758121 }, + { time: new Date(2014, 10, 7), open: 297.82, high: 299.99, low: 296.29, close: 299.86, volume: 2647352 }, + { time: new Date(2014, 10, 10), open: 300.00, high: 305.80, low: 300.00, close: 305.11, volume: 2809056 }, + { time: new Date(2014, 10, 11), open: 305.94, high: 312.38, low: 303.65, close: 312.01, volume: 3807333 }, + { time: new Date(2014, 10, 12), open: 310.75, high: 312.58, low: 308.79, close: 311.51, volume: 2182982 }, + { time: new Date(2014, 10, 13), open: 312.00, high: 317.89, low: 311.51, close: 316.48, volume: 3686428 }, + { time: new Date(2014, 10, 14), open: 317.12, high: 332.88, low: 316.40, close: 327.82, volume: 8877785 }, + { time: new Date(2014, 10, 17), open: 326.44, high: 328.00, low: 318.03, close: 323.05, volume: 4784933 }, + { time: new Date(2014, 10, 18), open: 323.99, high: 329.56, low: 323.25, close: 324.93, volume: 3551161 }, + { time: new Date(2014, 10, 19), open: 327.25, high: 328.40, low: 324.02, close: 326.54, volume: 3281614 }, + { time: new Date(2014, 10, 20), open: 324.00, high: 332.67, low: 323.33, close: 330.54, volume: 3436721 }, + { time: new Date(2014, 10, 21), open: 335.42, high: 338.33, low: 331.47, close: 332.63, volume: 4466587 }, + { time: new Date(2014, 10, 24), open: 334.78, high: 337.39, low: 333.60, close: 335.64, volume: 2754186 }, + { time: new Date(2014, 10, 25), open: 335.27, high: 336.33, low: 331.28, close: 335.04, volume: 2564989 }, + { time: new Date(2014, 10, 26), open: 333.78, high: 334.65, low: 331.75, close: 333.57, volume: 1985949 }, + { time: new Date(2014, 10, 28), open: 336.03, high: 341.26, low: 336.03, close: 338.64, volume: 3051798 }, + { time: new Date(2014, 11, 1), open: 338.12, high: 340.64, low: 325.93, close: 326.00, volume: 4944861 }, + { time: new Date(2014, 11, 2), open: 327.50, high: 327.93, low: 323.25, close: 326.31, volume: 2790257 }, + { time: new Date(2014, 11, 3), open: 325.73, high: 326.77, low: 314.36, close: 316.50, volume: 5689904 }, + { time: new Date(2014, 11, 4), open: 315.53, high: 318.59, low: 313.47, close: 316.93, volume: 3296642 }, + { time: new Date(2014, 11, 5), open: 316.80, high: 316.93, low: 310.84, close: 312.63, volume: 3265214 }, + { time: new Date(2014, 11, 8), open: 311.57, high: 316.56, low: 304.82, close: 306.64, volume: 3639180 }, + { time: new Date(2014, 11, 9), open: 302.99, high: 313.64, low: 301.14, close: 312.50, volume: 4049506 }, + { time: new Date(2014, 11, 10), open: 312.00, high: 313.19, low: 304.68, close: 305.84, volume: 3245890 }, + { time: new Date(2014, 11, 11), open: 307.89, high: 312.64, low: 306.01, close: 307.36, volume: 3272919 }, + { time: new Date(2014, 11, 12), open: 303.99, high: 310.64, low: 303.01, close: 307.32, volume: 3162322 }, + { time: new Date(2014, 11, 15), open: 308.87, high: 310.86, low: 302.15, close: 306.07, volume: 3841577 }, + { time: new Date(2014, 11, 16), open: 304.35, high: 304.49, low: 295.01, close: 295.06, volume: 6501252 }, + { time: new Date(2014, 11, 17), open: 296.37, high: 299.67, low: 293.03, close: 298.88, volume: 4433505 }, + { time: new Date(2014, 11, 18), open: 304.01, high: 304.50, low: 293.25, close: 297.73, volume: 7738067 }, + { time: new Date(2014, 11, 19), open: 296.91, high: 301.54, low: 295.52, close: 299.90, volume: 8709129 }, + { time: new Date(2014, 11, 22), open: 301.94, high: 307.36, low: 301.94, close: 306.54, volume: 4003827 }, + { time: new Date(2014, 11, 23), open: 306.98, high: 307.49, low: 303.25, close: 306.28, volume: 2718359 }, + { time: new Date(2014, 11, 24), open: 306.38, high: 307.00, low: 302.88, close: 303.03, volume: 1518107 }, + { time: new Date(2014, 11, 26), open: 305.00, high: 310.78, low: 303.81, close: 309.09, volume: 2893801 }, + { time: new Date(2014, 11, 29), open: 307.85, high: 314.27, low: 306.58, close: 312.04, volume: 3009046 }, + { time: new Date(2014, 11, 30), open: 309.91, high: 313.94, low: 309.34, close: 310.30, volume: 2093023 }, + { time: new Date(2014, 11, 31), open: 311.55, high: 312.98, low: 310.01, close: 310.35, volume: 2057766 }, + { time: new Date(2015, 0, 2), open: 312.58, high: 314.75, low: 306.96, close: 308.52, volume: 2788101 }, + { time: new Date(2015, 0, 5), open: 307.01, high: 308.38, low: 300.85, close: 302.19, volume: 2774231 }, + { time: new Date(2015, 0, 6), open: 302.24, high: 303.00, low: 292.38, close: 295.29, volume: 3519034 }, + { time: new Date(2015, 0, 7), open: 297.50, high: 301.28, low: 295.33, close: 298.42, volume: 2640349 }, + { time: new Date(2015, 0, 8), open: 300.32, high: 303.14, low: 296.11, close: 300.46, volume: 3088398 }, + { time: new Date(2015, 0, 9), open: 301.48, high: 302.87, low: 296.68, close: 296.93, volume: 2592360 }, + { time: new Date(2015, 0, 12), open: 297.56, high: 298.51, low: 289.28, close: 291.41, volume: 3421392 }, + { time: new Date(2015, 0, 13), open: 297.48, high: 301.50, low: 293.23, close: 294.74, volume: 4136442 }, + { time: new Date(2015, 0, 14), open: 291.93, high: 295.91, low: 286.50, close: 293.27, volume: 5538666 }, + { time: new Date(2015, 0, 15), open: 294.00, high: 296.00, low: 286.82, close: 286.95, volume: 4419196 }, + { time: new Date(2015, 0, 16), open: 286.28, high: 290.79, low: 285.25, close: 290.74, volume: 3478176 }, + { time: new Date(2015, 0, 20), open: 292.59, high: 293.36, low: 286.39, close: 289.44, volume: 3075081 }, + { time: new Date(2015, 0, 21), open: 289.64, high: 306.00, low: 287.26, close: 297.25, volume: 10065076 }, + { time: new Date(2015, 0, 22), open: 300.00, high: 312.25, low: 300.00, close: 310.32, volume: 5362640 }, + { time: new Date(2015, 0, 23), open: 308.08, high: 316.93, low: 307.72, close: 312.39, volume: 4496419 }, + { time: new Date(2015, 0, 26), open: 311.82, high: 313.00, low: 307.52, close: 309.66, volume: 3169665 }, + { time: new Date(2015, 0, 27), open: 306.30, high: 310.24, low: 302.62, close: 306.75, volume: 2920315 }, + { time: new Date(2015, 0, 28), open: 309.81, high: 311.51, low: 303.80, close: 303.91, volume: 3063774 }, + { time: new Date(2015, 0, 29), open: 304.73, high: 312.80, low: 299.33, close: 311.78, volume: 8656567 }, + { time: new Date(2015, 0, 30), open: 346.32, high: 359.50, low: 340.74, close: 354.53, volume: 23856060 }, + { time: new Date(2015, 1, 2), open: 350.05, high: 365.00, low: 350.01, close: 364.47, volume: 10231914 }, + { time: new Date(2015, 1, 3), open: 360.29, high: 367.82, low: 360.21, close: 363.55, volume: 6212565 }, + { time: new Date(2015, 1, 4), open: 358.38, high: 367.50, low: 358.23, close: 364.75, volume: 4169927 }, + { time: new Date(2015, 1, 5), open: 366.00, high: 378.80, low: 365.90, close: 373.89, volume: 7247605 }, + { time: new Date(2015, 1, 6), open: 374.87, high: 375.99, low: 371.01, close: 374.28, volume: 3892382 }, + { time: new Date(2015, 1, 9), open: 371.00, high: 374.41, low: 367.20, close: 370.56, volume: 2724630 }, + { time: new Date(2015, 1, 10), open: 371.19, high: 374.30, low: 368.51, close: 373.00, volume: 2287232 }, + { time: new Date(2015, 1, 11), open: 371.23, high: 377.10, low: 371.10, close: 375.14, volume: 2786523 }, + { time: new Date(2015, 1, 12), open: 375.10, high: 378.51, low: 373.15, close: 377.17, volume: 2791050 }, + { time: new Date(2015, 1, 13), open: 378.41, high: 383.00, low: 377.01, close: 381.83, volume: 3475069 }, + { time: new Date(2015, 1, 17), open: 377.72, high: 379.98, low: 372.67, close: 375.43, volume: 3673208 }, + { time: new Date(2015, 1, 18), open: 375.42, high: 376.74, low: 372.85, close: 373.37, volume: 2650610 }, + { time: new Date(2015, 1, 19), open: 373.49, high: 381.88, low: 373.43, close: 379.00, volume: 2953752 }, + { time: new Date(2015, 1, 20), open: 378.62, high: 383.70, low: 375.84, close: 383.66, volume: 3258023 }, + { time: new Date(2015, 1, 23), open: 383.44, high: 384.54, low: 378.00, close: 380.14, volume: 2176989 }, + { time: new Date(2015, 1, 24), open: 378.65, high: 380.48, low: 376.16, close: 378.59, volume: 1921850 }, + { time: new Date(2015, 1, 25), open: 377.27, high: 387.85, low: 376.54, close: 385.37, volume: 3174495 }, + { time: new Date(2015, 1, 26), open: 384.07, high: 389.37, low: 383.28, close: 384.80, volume: 2687107 }, + { time: new Date(2015, 1, 27), open: 384.00, high: 385.99, low: 379.79, close: 380.16, volume: 2532309 }, + { time: new Date(2015, 2, 2), open: 380.85, high: 385.90, low: 379.48, close: 385.66, volume: 2139205 }, + { time: new Date(2015, 2, 3), open: 383.95, high: 386.10, low: 381.60, close: 384.61, volume: 1946498 }, + { time: new Date(2015, 2, 4), open: 385.71, high: 387.90, low: 382.19, close: 382.72, volume: 2259141 }, + { time: new Date(2015, 2, 5), open: 385.61, high: 388.42, low: 383.89, close: 387.83, volume: 2693518 }, + { time: new Date(2015, 2, 6), open: 385.52, high: 387.00, low: 378.88, close: 380.09, volume: 2627042 }, + { time: new Date(2015, 2, 9), open: 378.40, high: 379.33, low: 375.28, close: 378.56, volume: 2311390 }, + { time: new Date(2015, 2, 10), open: 377.45, high: 377.77, low: 369.18, close: 369.51, volume: 3120972 }, + { time: new Date(2015, 2, 11), open: 370.61, high: 373.35, low: 366.26, close: 366.37, volume: 2495097 }, + { time: new Date(2015, 2, 12), open: 368.82, high: 375.50, low: 367.52, close: 374.24, volume: 2810001 }, + { time: new Date(2015, 2, 13), open: 371.52, high: 373.99, low: 366.68, close: 370.58, volume: 2611658 }, + { time: new Date(2015, 2, 16), open: 370.38, high: 373.94, low: 366.72, close: 373.35, volume: 2354059 }, + { time: new Date(2015, 2, 17), open: 371.11, high: 374.50, low: 369.64, close: 371.92, volume: 2036961 }, + { time: new Date(2015, 2, 18), open: 369.97, high: 375.99, low: 366.70, close: 375.14, volume: 2654135 }, + { time: new Date(2015, 2, 19), open: 373.87, high: 377.11, low: 372.19, close: 373.24, volume: 1915671 }, + { time: new Date(2015, 2, 20), open: 376.29, high: 379.37, low: 375.92, close: 378.49, volume: 3763553 }, + { time: new Date(2015, 2, 23), open: 378.07, high: 381.77, low: 374.94, close: 375.11, volume: 2239343 }, + { time: new Date(2015, 2, 24), open: 373.99, high: 375.24, low: 372.27, close: 374.09, volume: 2228214 }, + { time: new Date(2015, 2, 25), open: 375.17, high: 380.50, low: 370.28, close: 370.96, volume: 3429497 }, + { time: new Date(2015, 2, 26), open: 369.59, high: 371.40, low: 365.65, close: 367.35, volume: 2929962 }, + { time: new Date(2015, 2, 27), open: 367.11, high: 373.17, low: 366.57, close: 370.56, volume: 2609774 }, + { time: new Date(2015, 2, 30), open: 371.87, high: 376.12, low: 371.55, close: 374.59, volume: 1820933 }, + { time: new Date(2015, 2, 31), open: 373.24, high: 377.70, low: 371.51, close: 372.10, volume: 2506122 }, + { time: new Date(2015, 3, 1), open: 372.10, high: 373.16, low: 368.34, close: 370.26, volume: 2458095 }, + { time: new Date(2015, 3, 2), open: 370.50, high: 373.28, low: 369.00, close: 372.25, volume: 1875279 }, + { time: new Date(2015, 3, 6), open: 370.10, high: 380.20, low: 369.36, close: 377.04, volume: 3050709 }, + { time: new Date(2015, 3, 7), open: 376.15, high: 379.31, low: 374.03, close: 374.41, volume: 1954902 }, + { time: new Date(2015, 3, 8), open: 374.66, high: 381.58, low: 374.65, close: 381.20, volume: 2636434 }, + { time: new Date(2015, 3, 9), open: 380.66, high: 384.42, low: 378.80, close: 383.54, volume: 2392328 }, + { time: new Date(2015, 3, 10), open: 384.31, high: 387.12, low: 381.32, close: 382.65, volume: 2573519 }, + { time: new Date(2015, 3, 13), open: 383.53, high: 385.28, low: 380.14, close: 382.36, volume: 1894453 }, + { time: new Date(2015, 3, 14), open: 383.51, high: 387.81, low: 381.21, close: 385.11, volume: 2583575 }, + { time: new Date(2015, 3, 15), open: 384.65, high: 385.78, low: 381.64, close: 383.45, volume: 1933229 }, + { time: new Date(2015, 3, 16), open: 383.69, high: 387.45, low: 383.55, close: 386.04, volume: 2080418 }, + { time: new Date(2015, 3, 17), open: 382.63, high: 383.56, low: 374.40, close: 375.56, volume: 3839664 }, + { time: new Date(2015, 3, 20), open: 378.55, high: 391.94, low: 377.00, close: 389.51, volume: 5016148 }, + { time: new Date(2015, 3, 21), open: 391.31, high: 394.60, low: 386.80, close: 391.18, volume: 4643524 }, + { time: new Date(2015, 3, 22), open: 391.91, high: 394.28, low: 388.00, close: 389.80, volume: 3474724 }, + { time: new Date(2015, 3, 23), open: 390.21, high: 391.88, low: 386.15, close: 389.99, volume: 7979985 }, + { time: new Date(2015, 3, 24), open: 439.00, high: 452.65, low: 439.00, close: 445.10, volume: 17176904 }, + { time: new Date(2015, 3, 27), open: 443.86, high: 446.99, low: 437.41, close: 438.56, volume: 5430949 }, + { time: new Date(2015, 3, 28), open: 438.51, high: 439.00, low: 428.04, close: 429.31, volume: 4140483 }, + { time: new Date(2015, 3, 29), open: 426.75, high: 434.24, low: 426.03, close: 429.37, volume: 3621688 }, + { time: new Date(2015, 3, 30), open: 427.11, high: 431.75, low: 419.24, close: 421.78, volume: 3647877 }, + { time: new Date(2015, 4, 1), open: 423.82, high: 425.64, low: 416.00, close: 422.87, volume: 3565824 }, + { time: new Date(2015, 4, 4), open: 424.80, high: 429.77, low: 422.42, close: 423.04, volume: 2270448 }, + { time: new Date(2015, 4, 5), open: 422.85, high: 427.51, low: 421.02, close: 421.19, volume: 2856386 }, + { time: new Date(2015, 4, 6), open: 421.43, high: 422.72, low: 414.55, close: 419.10, volume: 2552474 }, + { time: new Date(2015, 4, 7), open: 424.15, high: 428.50, low: 422.85, close: 426.88, volume: 2766132 }, + { time: new Date(2015, 4, 8), open: 430.75, high: 435.20, low: 430.17, close: 433.69, volume: 2908838 }, + { time: new Date(2015, 4, 11), open: 432.51, high: 439.00, low: 431.37, close: 432.85, volume: 2393737 }, + { time: new Date(2015, 4, 12), open: 431.08, high: 433.25, low: 426.71, close: 431.02, volume: 1947822 }, + { time: new Date(2015, 4, 13), open: 429.98, high: 433.53, low: 425.80, close: 426.87, volume: 1996328 }, + { time: new Date(2015, 4, 14), open: 429.45, high: 433.00, low: 427.01, close: 432.28, volume: 1888477 }, + { time: new Date(2015, 4, 15), open: 428.00, high: 430.40, low: 424.30, close: 426.00, volume: 4240306 }, + { time: new Date(2015, 4, 18), open: 426.00, high: 427.27, low: 421.46, close: 425.24, volume: 2390229 }, + { time: new Date(2015, 4, 19), open: 424.87, high: 428.24, low: 420.63, close: 421.71, volume: 2465240 }, + { time: new Date(2015, 4, 20), open: 420.60, high: 427.10, low: 418.36, close: 423.86, volume: 2196159 }, + { time: new Date(2015, 4, 21), open: 428.00, high: 436.90, low: 428.00, close: 431.63, volume: 4121401 }, + { time: new Date(2015, 4, 22), open: 431.55, high: 432.44, low: 427.61, close: 427.63, volume: 2020629 }, + { time: new Date(2015, 4, 26), open: 426.20, high: 427.00, low: 422.00, close: 425.47, volume: 2244185 }, + { time: new Date(2015, 4, 27), open: 427.45, high: 431.85, low: 425.01, close: 431.42, volume: 2231088 }, + { time: new Date(2015, 4, 28), open: 429.71, high: 431.35, low: 425.47, close: 426.57, volume: 1912436 }, + { time: new Date(2015, 4, 29), open: 427.23, high: 432.50, low: 427.23, close: 429.23, volume: 3016060 }, + { time: new Date(2015, 5, 1), open: 430.40, high: 433.16, low: 426.20, close: 430.92, volume: 2253264 }, + { time: new Date(2015, 5, 2), open: 430.07, high: 433.23, low: 426.25, close: 430.99, volume: 1669845 }, + { time: new Date(2015, 5, 3), open: 434.40, high: 438.39, low: 432.75, close: 436.59, volume: 2727914 }, + { time: new Date(2015, 5, 4), open: 434.40, high: 436.76, low: 429.26, close: 430.78, volume: 2510761 }, + { time: new Date(2015, 5, 5), open: 429.66, high: 430.80, low: 426.50, close: 426.95, volume: 1907855 }, + { time: new Date(2015, 5, 8), open: 425.62, high: 426.80, low: 421.42, close: 423.50, volume: 2172525 }, + { time: new Date(2015, 5, 9), open: 422.96, high: 427.49, low: 419.14, close: 425.48, volume: 2288663 }, + { time: new Date(2015, 5, 10), open: 426.46, high: 432.20, low: 425.66, close: 430.77, volume: 2172333 }, + { time: new Date(2015, 5, 11), open: 432.29, high: 438.89, low: 431.47, close: 432.97, volume: 2922459 }, + { time: new Date(2015, 5, 12), open: 431.25, high: 432.36, low: 428.26, close: 429.92, volume: 2054385 }, + { time: new Date(2015, 5, 15), open: 427.66, high: 428.05, low: 422.64, close: 423.67, volume: 2050987 }, + { time: new Date(2015, 5, 16), open: 424.15, high: 427.97, low: 422.67, close: 427.26, volume: 2297469 }, + { time: new Date(2015, 5, 17), open: 428.36, high: 431.35, low: 424.75, close: 427.81, volume: 2185869 }, + { time: new Date(2015, 5, 18), open: 430.30, high: 439.73, low: 429.40, close: 439.39, volume: 3378360 }, + { time: new Date(2015, 5, 19), open: 440.26, high: 444.99, low: 433.24, close: 434.92, volume: 4495087 }, + { time: new Date(2015, 5, 22), open: 437.00, high: 439.24, low: 434.18, close: 436.29, volume: 1823572 }, + { time: new Date(2015, 5, 23), open: 435.59, high: 447.04, low: 433.69, close: 445.99, volume: 3245049 }, + { time: new Date(2015, 5, 24), open: 444.97, high: 446.47, low: 440.23, close: 440.84, volume: 2620827 }, + { time: new Date(2015, 5, 25), open: 438.07, high: 443.47, low: 436.39, close: 440.10, volume: 2237458 }, + { time: new Date(2015, 5, 26), open: 441.76, high: 443.49, low: 435.06, close: 438.10, volume: 2624479 }, + { time: new Date(2015, 5, 29), open: 434.98, high: 437.00, low: 429.00, close: 429.86, volume: 2753193 }, + { time: new Date(2015, 5, 30), open: 434.20, high: 435.57, low: 430.46, close: 434.09, volume: 2596873 }, + { time: new Date(2015, 6, 1), open: 439.35, high: 440.00, low: 435.58, close: 437.39, volume: 1987076 }, + { time: new Date(2015, 6, 2), open: 437.00, high: 438.20, low: 433.48, close: 437.71, volume: 1343397 }, + { time: new Date(2015, 6, 6), open: 435.23, high: 439.73, low: 433.52, close: 436.04, volume: 1903161 }, + { time: new Date(2015, 6, 7), open: 435.68, high: 437.73, low: 425.57, close: 436.72, volume: 3454248 }, + { time: new Date(2015, 6, 8), open: 434.35, high: 435.99, low: 428.83, close: 429.70, volume: 2383130 }, + { time: new Date(2015, 6, 9), open: 434.90, high: 438.72, low: 434.15, close: 434.39, volume: 2271395 }, + { time: new Date(2015, 6, 10), open: 440.49, high: 444.72, low: 439.00, close: 443.51, volume: 2400981 }, + { time: new Date(2015, 6, 13), open: 448.29, high: 457.87, low: 447.54, close: 455.57, volume: 3956802 }, + { time: new Date(2015, 6, 14), open: 462.32, high: 469.60, low: 458.16, close: 465.57, volume: 4736215 }, + { time: new Date(2015, 6, 15), open: 463.04, high: 464.70, low: 460.20, close: 461.19, volume: 2987399 }, + { time: new Date(2015, 6, 16), open: 465.50, high: 475.88, low: 464.80, close: 475.48, volume: 4095581 }, + { time: new Date(2015, 6, 17), open: 477.70, high: 485.42, low: 477.25, close: 483.01, volume: 4932176 }, + { time: new Date(2015, 6, 20), open: 492.57, high: 493.20, low: 485.40, close: 488.10, volume: 4752491 }, + { time: new Date(2015, 6, 21), open: 487.90, high: 488.88, low: 482.55, close: 488.00, volume: 3181831 }, + { time: new Date(2015, 6, 22), open: 485.99, high: 492.50, low: 484.90, close: 488.27, volume: 3114898 }, + { time: new Date(2015, 6, 23), open: 491.66, high: 491.66, low: 475.70, close: 482.18, volume: 9374431 }, + { time: new Date(2015, 6, 24), open: 578.99, high: 580.57, low: 529.35, close: 529.42, volume: 21909381 }, + { time: new Date(2015, 6, 27), open: 527.75, high: 544.95, low: 526.60, close: 531.41, volume: 7490960 }, + { time: new Date(2015, 6, 28), open: 536.00, high: 536.39, low: 523.12, close: 526.03, volume: 5273092 }, + { time: new Date(2015, 6, 29), open: 530.92, high: 532.97, low: 525.02, close: 529.00, volume: 3752634 }, + { time: new Date(2015, 6, 30), open: 527.65, high: 539.20, low: 524.29, close: 536.76, volume: 3743065 }, + { time: new Date(2015, 6, 31), open: 539.09, high: 542.84, low: 534.52, close: 536.15, volume: 3025598 }, + { time: new Date(2015, 7, 3), open: 537.45, high: 540.44, low: 529.36, close: 535.03, volume: 3014236 }, + { time: new Date(2015, 7, 4), open: 529.69, high: 536.95, low: 529.16, close: 531.90, volume: 2934590 }, + { time: new Date(2015, 7, 5), open: 538.80, high: 539.14, low: 534.12, close: 537.01, volume: 2889350 }, + { time: new Date(2015, 7, 6), open: 539.30, high: 542.74, low: 527.52, close: 529.46, volume: 3820453 }, + { time: new Date(2015, 7, 7), open: 529.16, high: 529.46, low: 518.21, close: 522.62, volume: 3969215 }, + { time: new Date(2015, 7, 10), open: 528.52, high: 532.28, low: 523.00, close: 524.00, volume: 2615926 }, + { time: new Date(2015, 7, 11), open: 523.65, high: 528.98, low: 522.00, close: 527.46, volume: 2676600 }, + { time: new Date(2015, 7, 12), open: 523.75, high: 527.50, low: 513.06, close: 525.91, volume: 4014684 }, + { time: new Date(2015, 7, 13), open: 527.37, high: 534.66, low: 525.48, close: 529.66, volume: 2895238 }, + { time: new Date(2015, 7, 14), open: 528.25, high: 534.11, low: 528.25, close: 531.52, volume: 1994799 }, + { time: new Date(2015, 7, 17), open: 531.29, high: 538.74, low: 527.12, close: 535.22, volume: 2581680 }, + { time: new Date(2015, 7, 18), open: 535.04, high: 539.49, low: 533.00, close: 535.02, volume: 2071342 }, + { time: new Date(2015, 7, 19), open: 533.74, high: 537.25, low: 529.00, close: 532.92, volume: 2324040 }, + { time: new Date(2015, 7, 20), open: 530.39, high: 533.25, low: 515.77, close: 515.78, volume: 4374857 }, + { time: new Date(2015, 7, 21), open: 507.36, high: 512.33, low: 494.47, close: 494.47, volume: 6636405 }, + { time: new Date(2015, 7, 24), open: 463.58, high: 489.76, low: 451.00, close: 463.37, volume: 10063882 }, + { time: new Date(2015, 7, 25), open: 487.49, high: 489.44, low: 466.25, close: 466.37, volume: 5643973 }, + { time: new Date(2015, 7, 26), open: 484.02, high: 503.72, low: 478.76, close: 500.77, volume: 6323581 }, + { time: new Date(2015, 7, 27), open: 513.71, high: 522.69, low: 507.26, close: 518.37, volume: 6064885 }, + { time: new Date(2015, 7, 28), open: 517.50, high: 521.50, low: 513.04, close: 518.01, volume: 2733815 }, + { time: new Date(2015, 7, 31), open: 516.44, high: 519.41, low: 509.07, close: 512.89, volume: 2982995 }, + { time: new Date(2015, 8, 1), open: 499.14, high: 510.00, low: 493.43, close: 496.54, volume: 3824035 }, + { time: new Date(2015, 8, 2), open: 505.09, high: 510.86, low: 497.72, close: 510.55, volume: 3689628 }, + { time: new Date(2015, 8, 3), open: 514.50, high: 515.84, low: 502.57, close: 504.72, volume: 3098941 }, + { time: new Date(2015, 8, 4), open: 497.65, high: 502.85, low: 495.64, close: 499.00, volume: 2666341 }, + { time: new Date(2015, 8, 8), open: 508.69, high: 518.35, low: 508.51, close: 517.54, volume: 3777499 }, + { time: new Date(2015, 8, 9), open: 524.00, high: 529.95, low: 515.06, close: 516.89, volume: 4338714 }, + { time: new Date(2015, 8, 10), open: 515.15, high: 526.13, low: 514.78, close: 522.24, volume: 2562832 }, + { time: new Date(2015, 8, 11), open: 521.07, high: 529.44, low: 520.60, close: 529.44, volume: 3218563 }, + { time: new Date(2015, 8, 14), open: 529.44, high: 532.45, low: 518.58, close: 521.38, volume: 3127107 }, + { time: new Date(2015, 8, 15), open: 523.25, high: 527.92, low: 517.20, close: 522.37, volume: 2845635 }, + { time: new Date(2015, 8, 16), open: 521.98, high: 528.30, low: 518.52, close: 527.39, volume: 2248046 }, + { time: new Date(2015, 8, 17), open: 526.98, high: 546.97, low: 526.57, close: 538.87, volume: 4124870 }, + { time: new Date(2015, 8, 18), open: 534.62, high: 546.24, low: 531.35, close: 540.26, volume: 6125617 }, + { time: new Date(2015, 8, 21), open: 544.33, high: 549.78, low: 539.59, close: 548.39, volume: 3265264 }, + { time: new Date(2015, 8, 22), open: 539.71, high: 543.55, low: 532.66, close: 538.40, volume: 3824240 }, + { time: new Date(2015, 8, 23), open: 538.30, high: 541.21, low: 534.00, close: 536.07, volume: 2228055 }, + { time: new Date(2015, 8, 24), open: 530.55, high: 534.56, low: 522.87, close: 533.75, volume: 3481804 }, + { time: new Date(2015, 8, 25), open: 542.57, high: 542.80, low: 521.40, close: 524.25, volume: 3910275 }, + { time: new Date(2015, 8, 28), open: 520.02, high: 520.28, low: 494.33, close: 504.06, volume: 5383198 }, + { time: new Date(2015, 8, 29), open: 506.00, high: 511.48, low: 490.50, close: 496.07, volume: 4443224 }, + { time: new Date(2015, 8, 30), open: 505.44, high: 512.80, low: 501.67, close: 511.89, volume: 3990425 }, + { time: new Date(2015, 9, 1), open: 511.00, high: 520.80, low: 506.00, close: 520.72, volume: 3741058 }, + { time: new Date(2015, 9, 2), open: 512.99, high: 532.60, low: 508.10, close: 532.54, volume: 4576555 }, + { time: new Date(2015, 9, 5), open: 536.99, high: 545.91, low: 536.00, close: 543.68, volume: 3352397 }, + { time: new Date(2015, 9, 6), open: 545.50, high: 551.50, low: 533.33, close: 537.48, volume: 4502815 }, + { time: new Date(2015, 9, 7), open: 541.79, high: 542.00, low: 529.00, close: 541.94, volume: 3788801 }, + { time: new Date(2015, 9, 8), open: 536.71, high: 539.39, low: 519.89, close: 533.16, volume: 4648953 }, + { time: new Date(2015, 9, 9), open: 534.48, high: 541.79, low: 530.27, close: 539.80, volume: 3527237 }, + { time: new Date(2015, 9, 12), open: 539.96, high: 550.82, low: 539.80, close: 550.19, volume: 2761080 }, + { time: new Date(2015, 9, 13), open: 546.26, high: 553.20, low: 543.10, close: 548.90, volume: 2737089 }, + { time: new Date(2015, 9, 14), open: 551.34, high: 552.25, low: 539.68, close: 544.83, volume: 3561089 }, + { time: new Date(2015, 9, 15), open: 547.75, high: 563.00, low: 547.00, close: 562.44, volume: 4914627 }, + { time: new Date(2015, 9, 16), open: 565.27, high: 570.94, low: 560.31, close: 570.76, volume: 4218101 }, + { time: new Date(2015, 9, 19), open: 570.76, high: 579.00, low: 567.38, close: 573.15, volume: 4326293 }, + { time: new Date(2015, 9, 20), open: 572.00, high: 573.00, low: 555.28, close: 560.88, volume: 4327920 }, + { time: new Date(2015, 9, 21), open: 563.87, high: 565.25, low: 552.52, close: 555.77, volume: 3343551 }, + { time: new Date(2015, 9, 22), open: 562.70, high: 569.15, low: 556.67, close: 563.91, volume: 7250534 }, + { time: new Date(2015, 9, 23), open: 617.68, high: 619.45, low: 595.36, close: 599.03, volume: 10671575 }, + { time: new Date(2015, 9, 26), open: 602.30, high: 609.85, low: 596.29, close: 608.61, volume: 4259250 }, + { time: new Date(2015, 9, 27), open: 608.60, high: 614.71, low: 605.53, close: 611.01, volume: 3721355 }, + { time: new Date(2015, 9, 28), open: 612.30, high: 617.23, low: 609.50, close: 617.10, volume: 3911944 }, + { time: new Date(2015, 9, 29), open: 617.70, high: 627.54, low: 615.39, close: 626.55, volume: 3858609 }, + { time: new Date(2015, 9, 30), open: 626.01, high: 630.72, low: 625.28, close: 625.90, volume: 3840398 }, + { time: new Date(2015, 10, 2), open: 627.13, high: 628.63, low: 620.41, close: 628.35, volume: 2792454 }, + { time: new Date(2015, 10, 3), open: 629.53, high: 629.89, low: 622.00, close: 625.31, volume: 3242365 }, + { time: new Date(2015, 10, 4), open: 627.76, high: 645.93, low: 627.35, close: 640.95, volume: 4831843 }, + { time: new Date(2015, 10, 5), open: 647.10, high: 657.00, low: 643.09, close: 655.65, volume: 4707393 }, + { time: new Date(2015, 10, 6), open: 655.00, high: 662.26, low: 652.00, close: 659.37, volume: 4082524 }, + { time: new Date(2015, 10, 9), open: 658.65, high: 661.96, low: 647.85, close: 655.49, volume: 4040181 }, + { time: new Date(2015, 10, 10), open: 653.00, high: 660.00, low: 647.26, close: 659.68, volume: 3464933 }, + { time: new Date(2015, 10, 11), open: 663.25, high: 675.96, low: 663.25, close: 673.25, volume: 5373772 }, + { time: new Date(2015, 10, 12), open: 673.00, high: 675.64, low: 664.22, close: 665.60, volume: 4246218 }, + { time: new Date(2015, 10, 13), open: 663.57, high: 667.00, low: 640.45, close: 642.35, volume: 6213880 }, + { time: new Date(2015, 10, 16), open: 640.92, high: 649.99, low: 622.29, close: 647.81, volume: 7403464 }, + { time: new Date(2015, 10, 17), open: 650.65, high: 653.25, low: 641.00, close: 643.30, volume: 4291990 }, + { time: new Date(2015, 10, 18), open: 646.51, high: 664.88, low: 646.37, close: 663.54, volume: 4315747 }, + { time: new Date(2015, 10, 19), open: 664.99, high: 672.86, low: 659.00, close: 661.27, volume: 4674078 }, + { time: new Date(2015, 10, 20), open: 663.95, high: 668.87, low: 657.57, close: 668.45, volume: 3860188 }, + { time: new Date(2015, 10, 23), open: 671.50, high: 682.77, low: 670.12, close: 678.99, volume: 4367129 }, + { time: new Date(2015, 10, 24), open: 674.14, high: 675.80, low: 661.21, close: 671.15, volume: 4533750 }, + { time: new Date(2015, 10, 25), open: 675.00, high: 679.70, low: 671.24, close: 675.34, volume: 2697889 }, + { time: new Date(2015, 10, 27), open: 680.80, high: 680.99, low: 672.10, close: 673.26, volume: 1966551 }, + { time: new Date(2015, 10, 30), open: 675.90, high: 681.29, low: 664.60, close: 664.80, volume: 5474105 }, + { time: new Date(2015, 11, 1), open: 673.75, high: 681.00, low: 667.86, close: 679.06, volume: 4739462 }, + { time: new Date(2015, 11, 2), open: 681.00, high: 684.82, low: 674.25, close: 676.01, volume: 4259104 }, + { time: new Date(2015, 11, 3), open: 679.44, high: 682.79, low: 661.48, close: 666.25, volume: 5064736 }, + { time: new Date(2015, 11, 4), open: 666.00, high: 674.78, low: 661.40, close: 672.64, volume: 4534796 }, + { time: new Date(2015, 11, 7), open: 674.74, high: 675.46, low: 660.50, close: 669.83, volume: 3732814 }, + { time: new Date(2015, 11, 8), open: 663.13, high: 679.99, low: 659.79, close: 677.33, volume: 3651908 }, + { time: new Date(2015, 11, 9), open: 678.00, high: 679.00, low: 655.68, close: 664.79, volume: 5158172 }, + { time: new Date(2015, 11, 10), open: 665.59, high: 668.53, low: 659.56, close: 662.32, volume: 3455472 }, + { time: new Date(2015, 11, 11), open: 651.23, high: 657.88, low: 639.62, close: 640.15, volume: 5474420 }, + { time: new Date(2015, 11, 14), open: 641.75, high: 658.58, low: 635.27, close: 657.91, volume: 4329653 }, + { time: new Date(2015, 11, 15), open: 665.03, high: 671.50, low: 657.35, close: 658.64, volume: 4753415 }, + { time: new Date(2015, 11, 16), open: 663.56, high: 677.35, low: 659.32, close: 675.77, volume: 3964470 }, + { time: new Date(2015, 11, 17), open: 680.00, high: 682.50, low: 670.65, close: 670.65, volume: 3681645 }, + { time: new Date(2015, 11, 18), open: 668.65, high: 676.84, low: 664.13, close: 664.14, volume: 6841304 }, + { time: new Date(2015, 11, 21), open: 668.50, high: 669.90, low: 658.93, close: 664.51, volume: 3250900 }, + { time: new Date(2015, 11, 22), open: 666.83, high: 668.49, low: 659.26, close: 663.15, volume: 2667795 }, + { time: new Date(2015, 11, 23), open: 666.50, high: 666.60, low: 656.63, close: 663.70, volume: 2722922 }, + { time: new Date(2015, 11, 24), open: 663.35, high: 664.68, low: 660.60, close: 662.79, volume: 1092970 }, + { time: new Date(2015, 11, 28), open: 665.56, high: 675.50, low: 665.50, close: 675.20, volume: 3783555 }, + { time: new Date(2015, 11, 29), open: 677.98, high: 696.44, low: 677.89, close: 693.97, volume: 5734996 }, + { time: new Date(2015, 11, 30), open: 691.89, high: 695.49, low: 686.38, close: 689.07, volume: 3519003 }, + { time: new Date(2015, 11, 31), open: 686.08, high: 687.75, low: 675.89, close: 675.89, volume: 3749560 }, + { time: new Date(2016, 0, 4), open: 656.29, high: 657.72, low: 627.51, close: 636.99, volume: 9280761 }, + { time: new Date(2016, 0, 5), open: 646.86, high: 646.91, low: 627.65, close: 633.79, volume: 5822603 }, + { time: new Date(2016, 0, 6), open: 622.00, high: 639.79, low: 620.31, close: 632.65, volume: 5329197 }, + { time: new Date(2016, 0, 7), open: 621.80, high: 630.00, low: 605.21, close: 607.94, volume: 7074915 }, + { time: new Date(2016, 0, 8), open: 619.66, high: 624.14, low: 606.00, close: 607.05, volume: 5512915 }, + { time: new Date(2016, 0, 11), open: 612.48, high: 619.85, low: 598.57, close: 617.74, volume: 4891551 }, + { time: new Date(2016, 0, 12), open: 625.25, high: 625.99, low: 612.24, close: 617.89, volume: 4724100 }, + { time: new Date(2016, 0, 13), open: 620.88, high: 620.88, low: 579.16, close: 581.81, volume: 7599968 }, + { time: new Date(2016, 0, 14), open: 580.25, high: 602.25, low: 569.88, close: 593.00, volume: 7203038 }, + { time: new Date(2016, 0, 15), open: 572.24, high: 584.62, low: 565.30, close: 570.18, volume: 7754464 }, + { time: new Date(2016, 0, 19), open: 577.09, high: 584.00, low: 566.45, close: 574.48, volume: 4782763 }, + { time: new Date(2016, 0, 20), open: 564.36, high: 578.45, low: 547.18, close: 571.77, volume: 7944703 }, + { time: new Date(2016, 0, 21), open: 573.58, high: 588.81, low: 568.22, close: 575.02, volume: 4932633 }, + { time: new Date(2016, 0, 22), open: 588.73, high: 600.10, low: 584.11, close: 596.38, volume: 5101123 }, + { time: new Date(2016, 0, 25), open: 597.99, high: 608.50, low: 594.56, close: 596.53, volume: 4376653 }, + { time: new Date(2016, 0, 26), open: 603.45, high: 604.50, low: 590.38, close: 601.25, volume: 3743213 }, + { time: new Date(2016, 0, 27), open: 601.99, high: 603.39, low: 578.78, close: 583.35, volume: 5029472 }, + { time: new Date(2016, 0, 28), open: 608.37, high: 638.06, low: 597.55, close: 635.35, volume: 12615917 }, + { time: new Date(2016, 0, 29), open: 571.98, high: 593.00, low: 570.00, close: 587.00, volume: 14622317 }, + { time: new Date(2016, 1, 1), open: 578.15, high: 581.80, low: 570.31, close: 574.81, volume: 6313793 }, + { time: new Date(2016, 1, 2), open: 570.00, high: 571.56, low: 550.09, close: 552.10, volume: 6281425 }, + { time: new Date(2016, 1, 3), open: 553.50, high: 556.00, low: 521.90, close: 531.07, volume: 10037222 }, + { time: new Date(2016, 1, 4), open: 525.00, high: 538.99, low: 519.22, close: 536.26, volume: 6176558 }, + { time: new Date(2016, 1, 5), open: 529.28, high: 529.45, low: 499.19, close: 502.13, volume: 9639606 }, + { time: new Date(2016, 1, 8), open: 486.47, high: 493.50, low: 475.21, close: 488.10, volume: 9808766 }, + { time: new Date(2016, 1, 9), open: 478.01, high: 498.38, low: 474.00, close: 482.07, volume: 7045885 }, + { time: new Date(2016, 1, 10), open: 491.76, high: 504.66, low: 486.00, close: 490.48, volume: 6746103 }, + { time: new Date(2016, 1, 11), open: 491.17, high: 509.30, low: 484.00, close: 503.82, volume: 7372686 }, + { time: new Date(2016, 1, 12), open: 510.70, high: 516.75, low: 501.49, close: 507.08, volume: 5357247 }, + { time: new Date(2016, 1, 16), open: 519.48, high: 524.45, low: 511.66, close: 521.10, volume: 5080654 }, + { time: new Date(2016, 1, 17), open: 528.74, high: 537.48, low: 519.39, close: 534.10, volume: 4777467 }, + { time: new Date(2016, 1, 18), open: 541.19, high: 541.20, low: 523.73, close: 525.00, volume: 4704237 }, + { time: new Date(2016, 1, 19), open: 520.71, high: 535.95, low: 515.35, close: 534.90, volume: 4941120 }, + { time: new Date(2016, 1, 22), open: 542.20, high: 560.65, low: 541.08, close: 559.50, volume: 5541066 }, + { time: new Date(2016, 1, 23), open: 555.55, high: 556.91, low: 545.33, close: 552.94, volume: 4035929 }, + { time: new Date(2016, 1, 24), open: 545.75, high: 554.27, low: 533.15, close: 554.04, volume: 6207285 }, + { time: new Date(2016, 1, 25), open: 555.52, high: 559.39, low: 545.29, close: 555.15, volume: 4510534 }, + { time: new Date(2016, 1, 26), open: 560.12, high: 562.50, low: 553.17, close: 555.23, volume: 4858230 }, + { time: new Date(2016, 1, 29), open: 554.00, high: 564.81, low: 552.51, close: 552.52, volume: 4013368 }, + { time: new Date(2016, 2, 1), open: 556.29, high: 579.25, low: 556.00, close: 579.04, volume: 5014414 }, + { time: new Date(2016, 2, 2), open: 581.75, high: 585.00, low: 573.70, close: 580.21, volume: 4576922 }, + { time: new Date(2016, 2, 3), open: 577.96, high: 579.87, low: 573.11, close: 577.49, volume: 2736673 }, + { time: new Date(2016, 2, 4), open: 581.07, high: 581.40, low: 571.06, close: 575.14, volume: 3405070 }, + { time: new Date(2016, 2, 7), open: 573.54, high: 573.63, low: 555.55, close: 562.80, volume: 4926936 }, + { time: new Date(2016, 2, 8), open: 557.87, high: 571.35, low: 554.74, close: 560.26, volume: 4709432 }, + { time: new Date(2016, 2, 9), open: 559.56, high: 560.35, low: 550.12, close: 559.47, volume: 4373282 }, + { time: new Date(2016, 2, 10), open: 566.74, high: 567.00, low: 547.90, close: 558.93, volume: 3914343 }, + { time: new Date(2016, 2, 11), open: 566.95, high: 570.06, low: 562.73, close: 569.61, volume: 3755372 }, + { time: new Date(2016, 2, 14), open: 567.00, high: 576.89, low: 563.05, close: 573.37, volume: 3451873 }, + { time: new Date(2016, 2, 15), open: 571.00, high: 581.52, low: 567.00, close: 577.02, volume: 3876821 }, + { time: new Date(2016, 2, 16), open: 576.64, high: 581.32, low: 571.14, close: 574.27, volume: 3474570 }, + { time: new Date(2016, 2, 17), open: 569.51, high: 571.40, low: 555.01, close: 559.44, volume: 5918200 }, + { time: new Date(2016, 2, 18), open: 560.94, high: 562.33, low: 546.09, close: 552.08, volume: 7263345 }, + { time: new Date(2016, 2, 21), open: 548.91, high: 555.24, low: 538.58, close: 553.98, volume: 5146137 }, + { time: new Date(2016, 2, 22), open: 545.11, high: 562.76, low: 545.05, close: 560.48, volume: 3990902 }, + { time: new Date(2016, 2, 23), open: 561.00, high: 572.48, low: 558.10, close: 569.63, volume: 3966131 }, + { time: new Date(2016, 2, 24), open: 567.11, high: 583.55, low: 567.08, close: 582.95, volume: 5141569 }, + { time: new Date(2016, 2, 28), open: 584.40, high: 584.75, low: 575.56, close: 579.87, volume: 3118032 }, + { time: new Date(2016, 2, 29), open: 580.15, high: 595.85, low: 576.50, close: 593.86, volume: 4167059 }, + { time: new Date(2016, 2, 30), open: 596.71, high: 603.24, low: 595.00, close: 598.69, volume: 3887968 }, + { time: new Date(2016, 2, 31), open: 599.28, high: 600.75, low: 592.21, close: 593.64, volume: 2673617 }, + { time: new Date(2016, 3, 1), open: 590.49, high: 599.03, low: 588.30, close: 598.50, volume: 2912350 }, + { time: new Date(2016, 3, 4), open: 599.00, high: 599.50, low: 590.55, close: 593.19, volume: 2466710 }, + { time: new Date(2016, 3, 5), open: 590.77, high: 593.47, low: 585.25, close: 586.14, volume: 2277169 }, + { time: new Date(2016, 3, 6), open: 587.52, high: 602.39, low: 587.50, close: 602.08, volume: 2833480 }, + { time: new Date(2016, 3, 7), open: 598.76, high: 599.60, low: 589.08, close: 591.43, volume: 3153717 }, + { time: new Date(2016, 3, 8), open: 594.32, high: 597.86, low: 589.00, close: 594.60, volume: 2589156 }, + { time: new Date(2016, 3, 11), open: 596.14, high: 604.00, low: 594.91, close: 595.93, volume: 2696498 }, + { time: new Date(2016, 3, 12), open: 598.40, high: 604.06, low: 592.31, close: 603.17, volume: 2636315 }, + { time: new Date(2016, 3, 13), open: 607.68, high: 616.81, low: 605.29, close: 614.82, volume: 4209763 }, + { time: new Date(2016, 3, 14), open: 615.07, high: 624.38, low: 615.07, close: 620.75, volume: 3474327 }, + { time: new Date(2016, 3, 15), open: 621.92, high: 626.77, low: 618.11, close: 625.89, volume: 2880881 }, + { time: new Date(2016, 3, 18), open: 625.35, high: 637.64, low: 624.96, close: 635.35, volume: 4336419 }, + { time: new Date(2016, 3, 19), open: 637.14, high: 638.01, low: 620.80, close: 627.90, volume: 4048806 }, + { time: new Date(2016, 3, 20), open: 630.00, high: 636.55, low: 623.00, close: 632.99, volume: 2601549 }, + { time: new Date(2016, 3, 21), open: 631.00, high: 637.82, low: 628.50, close: 631.00, volume: 2550919 }, + { time: new Date(2016, 3, 22), open: 624.47, high: 628.25, low: 611.56, close: 620.50, volume: 5069891 }, + { time: new Date(2016, 3, 25), open: 616.61, high: 626.98, low: 616.25, close: 626.20, volume: 2666702 }, + { time: new Date(2016, 3, 26), open: 626.17, high: 626.75, low: 614.88, close: 616.88, volume: 2492620 }, + { time: new Date(2016, 3, 27), open: 611.80, high: 615.95, low: 601.28, close: 606.57, volume: 4020813 }, + { time: new Date(2016, 3, 28), open: 615.54, high: 626.80, low: 599.20, close: 602.00, volume: 7142090 }, + { time: new Date(2016, 3, 29), open: 666.00, high: 669.98, low: 654.00, close: 659.59, volume: 10291785 }, + { time: new Date(2016, 4, 2), open: 663.92, high: 685.50, low: 662.03, close: 683.85, volume: 6560872 }, + { time: new Date(2016, 4, 3), open: 677.36, high: 680.30, low: 670.43, close: 671.32, volume: 4902099 }, + { time: new Date(2016, 4, 4), open: 662.59, high: 674.00, low: 662.14, close: 670.90, volume: 4574490 }, + { time: new Date(2016, 4, 5), open: 673.31, high: 676.49, low: 656.00, close: 659.09, volume: 4875480 }, + { time: new Date(2016, 4, 6), open: 656.05, high: 676.95, low: 656.01, close: 673.95, volume: 4347214 }, + { time: new Date(2016, 4, 9), open: 673.95, high: 686.98, low: 671.41, close: 679.75, volume: 3972272 }, + { time: new Date(2016, 4, 10), open: 694.00, high: 704.55, low: 693.50, close: 703.07, volume: 6087032 }, + { time: new Date(2016, 4, 11), open: 705.79, high: 719.00, low: 701.65, close: 713.23, volume: 7315995 }, + { time: new Date(2016, 4, 12), open: 717.38, high: 722.45, low: 711.51, close: 717.93, volume: 5034666 }, + { time: new Date(2016, 4, 13), open: 714.64, high: 719.25, low: 706.51, close: 709.92, volume: 4746626 }, + { time: new Date(2016, 4, 16), open: 710.13, high: 713.25, low: 700.28, close: 710.66, volume: 5425097 }, + { time: new Date(2016, 4, 17), open: 709.90, high: 714.47, low: 693.91, close: 695.27, volume: 5093930 }, + { time: new Date(2016, 4, 18), open: 689.56, high: 702.54, low: 688.76, close: 697.45, volume: 4272357 }, + { time: new Date(2016, 4, 19), open: 691.88, high: 699.40, low: 689.56, close: 698.52, volume: 3014968 }, + { time: new Date(2016, 4, 20), open: 701.05, high: 707.24, low: 700.00, close: 702.80, volume: 2867442 }, + { time: new Date(2016, 4, 23), open: 704.25, high: 706.00, low: 696.42, close: 696.75, volume: 2579171 }, + { time: new Date(2016, 4, 24), open: 698.01, high: 707.50, low: 698.00, close: 704.20, volume: 2851442 }, + { time: new Date(2016, 4, 25), open: 708.00, high: 710.86, low: 705.52, close: 708.35, volume: 3267686 }, + { time: new Date(2016, 4, 26), open: 708.33, high: 715.00, low: 707.29, close: 714.91, volume: 2436846 }, + { time: new Date(2016, 4, 27), open: 715.00, high: 716.60, low: 711.10, close: 712.24, volume: 2246353 }, + { time: new Date(2016, 4, 31), open: 712.33, high: 724.23, low: 711.32, close: 722.79, volume: 3618323 }, + { time: new Date(2016, 5, 1), open: 720.90, high: 726.43, low: 718.22, close: 719.44, volume: 3263107 }, + { time: new Date(2016, 5, 2), open: 720.97, high: 728.28, low: 715.50, close: 728.24, volume: 3026583 }, + { time: new Date(2016, 5, 3), open: 726.74, high: 727.00, low: 718.43, close: 725.54, volume: 3367306 }, + { time: new Date(2016, 5, 6), open: 726.50, high: 731.50, low: 724.42, close: 726.73, volume: 2704806 }, + { time: new Date(2016, 5, 7), open: 729.89, high: 730.00, low: 720.55, close: 723.74, volume: 2732463 }, + { time: new Date(2016, 5, 8), open: 726.40, high: 729.42, low: 721.60, close: 726.64, volume: 2223366 }, + { time: new Date(2016, 5, 9), open: 723.10, high: 728.91, low: 722.30, close: 727.65, volume: 2170318 }, + { time: new Date(2016, 5, 10), open: 722.35, high: 724.98, low: 714.21, close: 717.91, volume: 3425718 }, + { time: new Date(2016, 5, 13), open: 714.01, high: 721.99, low: 711.16, close: 715.24, volume: 3352201 }, + { time: new Date(2016, 5, 14), open: 712.33, high: 720.80, low: 712.27, close: 719.30, volume: 2506922 }, + { time: new Date(2016, 5, 15), open: 722.00, high: 722.56, low: 713.35, close: 714.26, volume: 2709447 }, + { time: new Date(2016, 5, 16), open: 712.05, high: 718.00, low: 705.30, close: 717.51, volume: 3097961 }, + { time: new Date(2016, 5, 17), open: 718.19, high: 718.20, low: 699.18, close: 706.39, volume: 5897788 }, + { time: new Date(2016, 5, 20), open: 713.50, high: 721.31, low: 710.81, close: 714.01, volume: 3677162 }, + { time: new Date(2016, 5, 21), open: 715.72, high: 718.40, low: 712.72, close: 715.82, volume: 2137534 }, + { time: new Date(2016, 5, 22), open: 716.58, high: 717.00, low: 707.56, close: 710.60, volume: 2260454 }, + { time: new Date(2016, 5, 23), open: 715.50, high: 722.12, low: 712.50, close: 722.08, volume: 2824974 }, + { time: new Date(2016, 5, 24), open: 693.00, high: 712.53, low: 692.20, close: 698.96, volume: 7632511 }, + { time: new Date(2016, 5, 27), open: 692.01, high: 696.82, low: 682.12, close: 691.36, volume: 5584037 }, + { time: new Date(2016, 5, 28), open: 700.00, high: 708.00, low: 698.17, close: 707.95, volume: 4036957 }, + { time: new Date(2016, 5, 29), open: 715.75, high: 719.50, low: 713.54, close: 715.60, volume: 3070052 }, + { time: new Date(2016, 5, 30), open: 717.20, high: 719.37, low: 712.54, close: 715.62, volume: 2855142 }, + { time: new Date(2016, 6, 1), open: 717.32, high: 728.00, low: 716.54, close: 725.68, volume: 2920423 }, + { time: new Date(2016, 6, 5), open: 722.80, high: 728.11, low: 719.61, close: 728.10, volume: 2431431 }, + { time: new Date(2016, 6, 6), open: 725.71, high: 737.77, low: 722.58, close: 737.61, volume: 3938249 }, + { time: new Date(2016, 6, 7), open: 739.33, high: 739.55, low: 731.63, close: 736.57, volume: 2945783 }, + { time: new Date(2016, 6, 8), open: 740.14, high: 746.10, low: 738.00, close: 745.81, volume: 3429217 }, + { time: new Date(2016, 6, 11), open: 750.00, high: 755.90, low: 747.00, close: 753.78, volume: 3195272 }, + { time: new Date(2016, 6, 12), open: 756.86, high: 757.34, low: 740.33, close: 748.21, volume: 5623657 }, + { time: new Date(2016, 6, 13), open: 746.76, high: 756.87, low: 741.25, close: 742.63, volume: 4142265 }, + { time: new Date(2016, 6, 14), open: 748.86, high: 749.04, low: 739.02, close: 741.20, volume: 2390472 }, + { time: new Date(2016, 6, 15), open: 746.55, high: 746.55, low: 734.05, close: 735.44, volume: 3121385 }, + { time: new Date(2016, 6, 18), open: 735.49, high: 741.60, low: 728.72, close: 736.07, volume: 2954914 }, + { time: new Date(2016, 6, 19), open: 732.50, high: 743.33, low: 732.31, close: 739.95, volume: 2216820 }, + { time: new Date(2016, 6, 20), open: 744.00, high: 746.25, low: 740.70, close: 745.72, volume: 2214023 }, + { time: new Date(2016, 6, 21), open: 747.50, high: 749.36, low: 742.79, close: 744.43, volume: 2317072 }, + { time: new Date(2016, 6, 22), open: 747.79, high: 751.28, low: 743.53, close: 744.86, volume: 2277711 }, + { time: new Date(2016, 6, 25), open: 746.55, high: 748.50, low: 735.35, close: 739.61, volume: 2679290 }, + { time: new Date(2016, 6, 26), open: 742.71, high: 743.13, low: 732.75, close: 735.59, volume: 2529692 }, + { time: new Date(2016, 6, 27), open: 737.97, high: 740.94, low: 733.86, close: 736.67, volume: 2913134 }, + { time: new Date(2016, 6, 28), open: 745.98, high: 753.36, low: 739.70, close: 752.61, volume: 7617580 }, + { time: new Date(2016, 6, 29), open: 765.00, high: 766.00, low: 755.00, close: 758.81, volume: 6777050 }, + { time: new Date(2016, 7, 1), open: 759.87, high: 770.50, low: 757.06, close: 767.74, volume: 3578205 }, + { time: new Date(2016, 7, 2), open: 763.81, high: 765.01, low: 757.02, close: 760.58, volume: 3603280 }, + { time: new Date(2016, 7, 3), open: 757.06, high: 758.89, low: 752.25, close: 754.64, volume: 3581525 }, + { time: new Date(2016, 7, 4), open: 753.70, high: 765.00, low: 750.35, close: 760.77, volume: 3178208 }, + { time: new Date(2016, 7, 5), open: 764.81, high: 768.47, low: 763.09, close: 765.98, volume: 2704391 }, + { time: new Date(2016, 7, 8), open: 766.81, high: 767.00, low: 761.02, close: 766.56, volume: 1986272 }, + { time: new Date(2016, 7, 9), open: 767.39, high: 772.60, low: 766.90, close: 768.31, volume: 1876091 }, + { time: new Date(2016, 7, 10), open: 769.80, high: 772.10, low: 766.19, close: 768.56, volume: 1604280 }, + { time: new Date(2016, 7, 11), open: 769.94, high: 773.75, low: 769.12, close: 771.24, volume: 2019740 }, + { time: new Date(2016, 7, 12), open: 768.46, high: 773.15, low: 768.42, close: 772.56, volume: 1563318 }, + { time: new Date(2016, 7, 15), open: 771.90, high: 772.04, low: 767.71, close: 768.49, volume: 2118521 }, + { time: new Date(2016, 7, 16), open: 768.62, high: 768.73, low: 763.82, close: 764.04, volume: 1604561 }, + { time: new Date(2016, 7, 17), open: 764.41, high: 765.22, low: 759.20, close: 764.63, volume: 1891116 }, + { time: new Date(2016, 7, 18), open: 764.00, high: 765.17, low: 760.60, close: 764.46, volume: 1458834 }, + { time: new Date(2016, 7, 19), open: 761.90, high: 762.49, low: 756.89, close: 757.31, volume: 2343237 }, + { time: new Date(2016, 7, 22), open: 757.50, high: 759.85, low: 752.10, close: 759.48, volume: 1679251 }, + { time: new Date(2016, 7, 23), open: 763.31, high: 764.70, low: 761.00, close: 762.45, volume: 1524131 }, + { time: new Date(2016, 7, 24), open: 763.00, high: 763.41, low: 755.36, close: 757.25, volume: 1744107 }, + { time: new Date(2016, 7, 25), open: 756.00, high: 760.56, low: 754.74, close: 759.22, volume: 1622992 }, + { time: new Date(2016, 7, 26), open: 760.05, high: 770.00, low: 759.80, close: 769.00, volume: 2776830 }, + { time: new Date(2016, 7, 29), open: 768.72, high: 774.98, low: 768.60, close: 771.29, volume: 2198560 }, + { time: new Date(2016, 7, 30), open: 771.05, high: 771.84, low: 765.56, close: 767.58, volume: 1709158 }, + { time: new Date(2016, 7, 31), open: 766.60, high: 769.64, low: 764.00, close: 769.16, volume: 1633789 }, + { time: new Date(2016, 8, 1), open: 770.90, high: 772.04, low: 766.75, close: 770.62, volume: 1792271 }, + { time: new Date(2016, 8, 2), open: 774.11, high: 776.00, low: 771.70, close: 772.44, volume: 2157422 }, + { time: new Date(2016, 8, 6), open: 774.04, high: 789.48, low: 770.22, close: 788.87, volume: 3719788 }, + { time: new Date(2016, 8, 7), open: 789.53, high: 790.79, low: 784.33, close: 784.48, volume: 2424622 }, + { time: new Date(2016, 8, 8), open: 783.89, high: 786.50, low: 781.44, close: 784.06, volume: 2030511 }, + { time: new Date(2016, 8, 9), open: 779.36, high: 781.00, low: 760.11, close: 760.14, volume: 4257344 }, + { time: new Date(2016, 8, 12), open: 757.35, high: 772.66, low: 756.00, close: 771.49, volume: 3124704 }, + { time: new Date(2016, 8, 13), open: 768.77, high: 769.89, low: 759.05, close: 761.01, volume: 3117224 }, + { time: new Date(2016, 8, 14), open: 762.20, high: 767.50, low: 758.85, close: 761.09, volume: 2531822 }, + { time: new Date(2016, 8, 15), open: 762.00, high: 770.87, low: 757.58, close: 769.69, volume: 3043534 }, + { time: new Date(2016, 8, 16), open: 773.28, high: 780.46, low: 771.66, close: 778.52, volume: 5499182 }, + { time: new Date(2016, 8, 19), open: 779.97, high: 781.94, low: 771.00, close: 775.10, volume: 2297221 }, + { time: new Date(2016, 8, 20), open: 776.00, high: 781.37, low: 776.00, close: 780.22, volume: 1937164 }, + { time: new Date(2016, 8, 21), open: 783.25, high: 790.69, low: 779.01, close: 789.74, volume: 2718644 }, + { time: new Date(2016, 8, 22), open: 794.27, high: 805.89, low: 794.27, close: 804.70, volume: 4078910 }, + { time: new Date(2016, 8, 23), open: 803.13, high: 807.75, low: 802.12, close: 805.75, volume: 2353511 }, + { time: new Date(2016, 8, 26), open: 801.80, high: 805.93, low: 797.14, close: 799.16, volume: 2651397 }, + { time: new Date(2016, 8, 27), open: 801.85, high: 816.64, low: 801.11, close: 816.11, volume: 3819600 }, + { time: new Date(2016, 8, 28), open: 818.00, high: 830.14, low: 817.03, close: 828.72, volume: 4422078 }, + { time: new Date(2016, 8, 29), open: 828.26, high: 837.50, low: 824.63, close: 829.05, volume: 4922248 }, + { time: new Date(2016, 8, 30), open: 832.61, high: 839.95, low: 832.40, close: 837.31, volume: 4430566 }, + { time: new Date(2016, 9, 3), open: 836.00, high: 839.86, low: 831.25, close: 836.74, volume: 2769448 }, + { time: new Date(2016, 9, 4), open: 840.91, high: 842.36, low: 830.26, close: 834.03, volume: 2950314 }, + { time: new Date(2016, 9, 5), open: 838.00, high: 845.67, low: 836.12, close: 844.36, volume: 3469055 }, + { time: new Date(2016, 9, 6), open: 843.70, high: 847.21, low: 840.60, close: 841.66, volume: 2684013 }, + { time: new Date(2016, 9, 7), open: 845.79, high: 845.95, low: 837.45, close: 839.43, volume: 2426228 }, + { time: new Date(2016, 9, 10), open: 843.25, high: 845.20, low: 840.27, close: 841.71, volume: 1827143 }, + { time: new Date(2016, 9, 11), open: 841.02, high: 841.29, low: 828.35, close: 831.00, volume: 3588180 }, + { time: new Date(2016, 9, 12), open: 834.00, high: 837.67, low: 830.10, close: 834.09, volume: 2380416 }, + { time: new Date(2016, 9, 13), open: 829.00, high: 831.80, low: 821.21, close: 829.28, volume: 3091387 }, + { time: new Date(2016, 9, 14), open: 835.08, high: 835.74, low: 822.96, close: 822.96, volume: 2999814 }, + { time: new Date(2016, 9, 17), open: 821.50, high: 822.00, low: 811.68, close: 812.95, volume: 3361492 }, + { time: new Date(2016, 9, 18), open: 822.11, high: 823.26, low: 815.02, close: 817.65, volume: 2512504 }, + { time: new Date(2016, 9, 19), open: 820.40, high: 820.67, low: 815.17, close: 817.69, volume: 2090706 }, + { time: new Date(2016, 9, 20), open: 813.99, high: 815.71, low: 803.10, close: 810.32, volume: 3151954 }, + { time: new Date(2016, 9, 21), open: 809.36, high: 819.42, low: 809.00, close: 818.99, volume: 2793015 }, + { time: new Date(2016, 9, 24), open: 824.95, high: 838.30, low: 822.21, close: 838.09, volume: 4060899 }, + { time: new Date(2016, 9, 25), open: 839.30, high: 843.09, low: 833.22, close: 835.18, volume: 3248358 }, + { time: new Date(2016, 9, 26), open: 832.76, high: 833.44, low: 820.00, close: 822.59, volume: 3998102 }, + { time: new Date(2016, 9, 27), open: 831.24, high: 831.72, low: 815.43, close: 818.36, volume: 7406385 }, + { time: new Date(2016, 9, 28), open: 782.00, high: 789.49, low: 774.61, close: 776.32, volume: 10841073 }, + { time: new Date(2016, 9, 31), open: 781.03, high: 793.70, low: 780.11, close: 789.82, volume: 5413326 }, + { time: new Date(2016, 10, 1), open: 799.00, high: 800.84, low: 776.71, close: 785.41, volume: 5305428 }, + { time: new Date(2016, 10, 2), open: 783.93, high: 784.75, low: 763.55, close: 765.56, volume: 5026504 }, + { time: new Date(2016, 10, 3), open: 765.05, high: 777.00, low: 764.00, close: 767.03, volume: 3872496 }, + { time: new Date(2016, 10, 4), open: 762.79, high: 766.00, low: 753.23, close: 755.05, volume: 5122103 }, + { time: new Date(2016, 10, 7), open: 771.64, high: 787.73, low: 770.94, close: 784.93, volume: 5984354 }, + { time: new Date(2016, 10, 8), open: 784.97, high: 791.74, low: 779.10, close: 787.75, volume: 3412629 }, + { time: new Date(2016, 10, 9), open: 764.00, high: 777.50, low: 760.09, close: 771.88, volume: 8562892 }, + { time: new Date(2016, 10, 10), open: 778.81, high: 778.83, low: 717.70, close: 742.38, volume: 12746994 }, + { time: new Date(2016, 10, 11), open: 735.73, high: 743.26, low: 728.90, close: 739.01, volume: 6622784 }, + { time: new Date(2016, 10, 14), open: 745.51, high: 746.00, low: 710.10, close: 719.07, volume: 7321344 }, + { time: new Date(2016, 10, 15), open: 730.00, high: 746.78, low: 725.99, close: 743.24, volume: 6755785 }, + { time: new Date(2016, 10, 16), open: 739.88, high: 749.87, low: 735.61, close: 746.49, volume: 3648791 }, + { time: new Date(2016, 10, 17), open: 749.32, high: 757.50, low: 748.00, close: 756.40, volume: 3651345 }, + { time: new Date(2016, 10, 18), open: 761.00, high: 767.74, low: 757.64, close: 760.16, volume: 4373408 }, + { time: new Date(2016, 10, 21), open: 766.00, high: 780.35, low: 765.11, close: 780.00, volume: 4614574 }, + { time: new Date(2016, 10, 22), open: 788.17, high: 792.40, low: 781.00, close: 785.33, volume: 5311320 }, + { time: new Date(2016, 10, 23), open: 781.73, high: 781.75, low: 773.12, close: 780.12, volume: 3540263 }, + { time: new Date(2016, 10, 25), open: 786.50, high: 786.75, low: 777.90, close: 780.37, volume: 1837068 }, + { time: new Date(2016, 10, 28), open: 776.99, high: 777.00, low: 764.24, close: 766.77, volume: 4438828 }, + { time: new Date(2016, 10, 29), open: 768.00, high: 769.89, low: 761.32, close: 762.52, volume: 3272344 }, + { time: new Date(2016, 10, 30), open: 762.00, high: 768.09, low: 750.25, close: 750.57, volume: 4625946 }, + { time: new Date(2016, 11, 1), open: 752.41, high: 753.37, low: 738.03, close: 743.65, volume: 4665993 }, + { time: new Date(2016, 11, 2), open: 743.40, high: 748.49, low: 736.70, close: 740.34, volume: 3561307 }, + { time: new Date(2016, 11, 5), open: 745.00, high: 761.49, low: 742.00, close: 759.36, volume: 4314723 }, + { time: new Date(2016, 11, 6), open: 763.99, high: 768.24, low: 757.25, close: 764.72, volume: 3794746 }, + { time: new Date(2016, 11, 7), open: 764.55, high: 770.42, low: 755.82, close: 770.42, volume: 3684906 }, + { time: new Date(2016, 11, 8), open: 771.87, high: 773.79, low: 765.19, close: 767.33, volume: 3189608 }, + { time: new Date(2016, 11, 9), open: 770.00, high: 770.25, low: 765.34, close: 768.66, volume: 2470923 }, + { time: new Date(2016, 11, 12), open: 766.40, high: 766.89, low: 757.20, close: 760.12, volume: 2963945 }, + { time: new Date(2016, 11, 13), open: 764.96, high: 782.46, low: 762.00, close: 774.34, volume: 5285288 }, + { time: new Date(2016, 11, 14), open: 778.25, high: 780.86, low: 762.81, close: 768.82, volume: 5454836 }, + { time: new Date(2016, 11, 15), open: 766.28, high: 769.10, low: 760.31, close: 761.00, volume: 3801927 }, + { time: new Date(2016, 11, 16), open: 765.00, high: 765.13, low: 754.00, close: 757.77, volume: 4848219 }, + { time: new Date(2016, 11, 19), open: 758.89, high: 770.50, low: 756.16, close: 766.00, volume: 3113240 }, + { time: new Date(2016, 11, 20), open: 768.65, high: 774.39, low: 767.71, close: 771.22, volume: 2703629 }, + { time: new Date(2016, 11, 21), open: 770.00, high: 771.22, low: 765.70, close: 770.60, volume: 2044629 }, + { time: new Date(2016, 11, 22), open: 768.12, high: 771.21, low: 763.02, close: 766.34, volume: 2543551 }, + { time: new Date(2016, 11, 23), open: 764.55, high: 766.50, low: 757.99, close: 760.59, volume: 1981616 }, + { time: new Date(2016, 11, 27), open: 763.40, high: 774.65, low: 761.20, close: 771.40, volume: 2638725 }, + { time: new Date(2016, 11, 28), open: 776.25, high: 780.00, low: 770.50, close: 772.13, volume: 3301025 }, + { time: new Date(2016, 11, 29), open: 772.40, high: 773.40, low: 760.85, close: 765.15, volume: 3158299 }, + { time: new Date(2016, 11, 30), open: 766.47, high: 767.40, low: 748.28, close: 749.87, volume: 4139449 }, + { time: new Date(2017, 0, 3), open: 757.92, high: 758.76, low: 747.70, close: 753.67, volume: 3521066 }, + { time: new Date(2017, 0, 4), open: 758.39, high: 759.68, low: 754.20, close: 757.18, volume: 2510526 }, + { time: new Date(2017, 0, 5), open: 761.55, high: 782.40, low: 760.26, close: 780.45, volume: 5830068 }, + { time: new Date(2017, 0, 6), open: 782.36, high: 799.44, low: 778.48, close: 795.99, volume: 5986234 }, + { time: new Date(2017, 0, 9), open: 798.00, high: 801.77, low: 791.77, close: 796.92, volume: 3446109 }, + { time: new Date(2017, 0, 10), open: 796.60, high: 798.00, low: 789.54, close: 795.90, volume: 2558369 }, + { time: new Date(2017, 0, 11), open: 793.66, high: 799.50, low: 789.51, close: 799.02, volume: 2992791 }, + { time: new Date(2017, 0, 12), open: 800.31, high: 814.13, low: 799.50, close: 813.64, volume: 4873922 }, + { time: new Date(2017, 0, 13), open: 814.32, high: 821.65, low: 811.40, close: 817.14, volume: 3791945 }, + { time: new Date(2017, 0, 17), open: 815.70, high: 816.00, low: 803.44, close: 809.72, volume: 3670529 }, + { time: new Date(2017, 0, 18), open: 809.50, high: 811.73, low: 804.27, close: 807.48, volume: 2354201 }, + { time: new Date(2017, 0, 19), open: 810.00, high: 813.51, low: 807.32, close: 809.04, volume: 2540784 }, + { time: new Date(2017, 0, 20), open: 815.28, high: 816.02, low: 806.26, close: 808.33, volume: 3376196 }, + { time: new Date(2017, 0, 23), open: 806.80, high: 818.50, low: 805.08, close: 817.88, volume: 2797474 }, + { time: new Date(2017, 0, 24), open: 822.00, high: 823.99, low: 814.50, close: 822.44, volume: 2971740 }, + { time: new Date(2017, 0, 25), open: 825.79, high: 837.42, low: 825.29, close: 836.52, volume: 4023078 }, + { time: new Date(2017, 0, 26), open: 835.53, high: 843.84, low: 833.00, close: 839.15, volume: 3586323 }, + { time: new Date(2017, 0, 27), open: 839.00, high: 839.70, low: 829.44, close: 835.77, volume: 2998700 }, + { time: new Date(2017, 0, 30), open: 833.00, high: 833.50, low: 816.38, close: 830.38, volume: 3747336 }, + { time: new Date(2017, 0, 31), open: 823.75, high: 826.99, low: 819.56, close: 823.48, volume: 3137196 }, + { time: new Date(2017, 1, 1), open: 829.21, high: 833.78, low: 824.94, close: 832.35, volume: 3850181 }, + { time: new Date(2017, 1, 2), open: 836.59, high: 842.49, low: 828.26, close: 839.95, volume: 7350492 }, + { time: new Date(2017, 1, 3), open: 806.72, high: 818.30, low: 804.00, close: 810.20, volume: 10868773 }, + { time: new Date(2017, 1, 6), open: 809.80, high: 810.72, low: 803.00, close: 807.64, volume: 3897301 }, + { time: new Date(2017, 1, 7), open: 809.31, high: 816.16, low: 807.50, close: 812.50, volume: 3466091 }, + { time: new Date(2017, 1, 8), open: 812.69, high: 821.48, low: 812.50, close: 819.71, volume: 2857985 }, + { time: new Date(2017, 1, 9), open: 821.60, high: 825.00, low: 819.71, close: 821.36, volume: 2484948 }, + { time: new Date(2017, 1, 10), open: 823.82, high: 828.00, low: 822.85, close: 827.46, volume: 2429609 }, + { time: new Date(2017, 1, 13), open: 831.62, high: 843.00, low: 828.55, close: 836.53, volume: 4172618 }, + { time: new Date(2017, 1, 14), open: 837.00, high: 838.31, low: 831.45, close: 836.39, volume: 2792442 }, + { time: new Date(2017, 1, 15), open: 834.00, high: 842.81, low: 832.82, close: 842.70, volume: 2968853 }, + { time: new Date(2017, 1, 16), open: 841.84, high: 845.00, low: 839.38, close: 844.14, volume: 2714667 }, + { time: new Date(2017, 1, 17), open: 842.00, high: 847.27, low: 840.73, close: 845.07, volume: 3112275 }, + { time: new Date(2017, 1, 21), open: 848.84, high: 857.98, low: 847.25, close: 856.44, volume: 3507742 }, + { time: new Date(2017, 1, 22), open: 856.95, high: 858.43, low: 852.18, close: 855.61, volume: 2616971 }, + { time: new Date(2017, 1, 23), open: 857.57, high: 860.86, low: 848.00, close: 852.19, volume: 3461984 }, + { time: new Date(2017, 1, 24), open: 844.69, high: 845.81, low: 837.75, close: 845.24, volume: 3687963 }, + { time: new Date(2017, 1, 27), open: 842.38, high: 852.50, low: 839.67, close: 848.64, volume: 2713627 }, + { time: new Date(2017, 1, 28), open: 851.45, high: 854.09, low: 842.05, close: 845.04, volume: 2793709 }, + { time: new Date(2017, 2, 1), open: 853.05, high: 854.83, low: 849.01, close: 853.08, volume: 2760083 }, + { time: new Date(2017, 2, 2), open: 853.08, high: 854.82, low: 847.28, close: 848.91, volume: 2132098 }, + { time: new Date(2017, 2, 3), open: 847.20, high: 851.98, low: 846.27, close: 849.88, volume: 1951575 }, + { time: new Date(2017, 2, 6), open: 845.23, high: 848.49, low: 841.12, close: 846.61, volume: 2610370 }, + { time: new Date(2017, 2, 7), open: 845.48, high: 848.46, low: 843.75, close: 846.02, volume: 2247554 }, + { time: new Date(2017, 2, 8), open: 848.00, high: 853.07, low: 846.79, close: 850.50, volume: 2288317 }, + { time: new Date(2017, 2, 9), open: 851.00, high: 856.40, low: 850.31, close: 853.00, volume: 2048187 }, + { time: new Date(2017, 2, 10), open: 857.00, high: 857.35, low: 851.72, close: 852.46, volume: 2436434 }, + { time: new Date(2017, 2, 13), open: 851.77, high: 855.69, low: 851.71, close: 854.59, volume: 1909672 }, + { time: new Date(2017, 2, 14), open: 853.55, high: 853.75, low: 847.55, close: 852.53, volume: 2130586 }, + { time: new Date(2017, 2, 15), open: 854.33, high: 854.45, low: 847.11, close: 852.97, volume: 2562176 }, + { time: new Date(2017, 2, 16), open: 855.30, high: 855.50, low: 850.51, close: 853.42, volume: 1842296 }, + { time: new Date(2017, 2, 17), open: 853.49, high: 853.83, low: 850.64, close: 852.31, volume: 3384403 }, + { time: new Date(2017, 2, 20), open: 851.51, high: 857.80, low: 851.01, close: 856.97, volume: 2282727 }, + { time: new Date(2017, 2, 21), open: 858.84, high: 862.80, low: 841.31, close: 843.20, volume: 4382852 }, + { time: new Date(2017, 2, 22), open: 840.43, high: 849.37, low: 839.05, close: 848.06, volume: 2658669 }, + { time: new Date(2017, 2, 23), open: 848.20, high: 850.89, low: 844.80, close: 847.38, volume: 1952964 }, + { time: new Date(2017, 2, 24), open: 851.68, high: 851.80, low: 843.53, close: 845.61, volume: 2138269 }, + { time: new Date(2017, 2, 27), open: 838.07, high: 850.30, low: 833.50, close: 846.82, volume: 2755775 }, + { time: new Date(2017, 2, 28), open: 851.75, high: 858.46, low: 850.10, close: 856.00, volume: 3041633 }, + { time: new Date(2017, 2, 29), open: 859.05, high: 876.44, low: 859.02, close: 874.32, volume: 4485770 }, + { time: new Date(2017, 2, 30), open: 874.95, high: 877.06, low: 871.66, close: 876.34, volume: 2762730 }, + { time: new Date(2017, 2, 31), open: 877.00, high: 890.35, low: 876.65, close: 886.54, volume: 3957612 }, + { time: new Date(2017, 3, 3), open: 888.00, high: 893.49, low: 885.42, close: 891.51, volume: 3422328 }, + { time: new Date(2017, 3, 4), open: 891.50, high: 908.54, low: 890.28, close: 906.83, volume: 4984656 }, + { time: new Date(2017, 3, 5), open: 910.82, high: 923.72, low: 905.62, close: 909.28, volume: 7508370 }, + { time: new Date(2017, 3, 6), open: 913.80, high: 917.19, low: 894.49, close: 898.28, volume: 6344065 }, + { time: new Date(2017, 3, 7), open: 899.65, high: 900.09, low: 889.31, close: 894.88, volume: 3710922 }, + { time: new Date(2017, 3, 10), open: 899.63, high: 908.51, low: 899.00, close: 907.04, volume: 3184301 }, + { time: new Date(2017, 3, 11), open: 907.04, high: 911.24, low: 897.50, close: 902.36, volume: 3012743 }, + { time: new Date(2017, 3, 12), open: 903.09, high: 904.09, low: 895.25, close: 896.23, volume: 2456140 }, + { time: new Date(2017, 3, 13), open: 891.45, high: 894.97, low: 884.49, close: 884.67, volume: 3174583 }, + { time: new Date(2017, 3, 17), open: 887.50, high: 902.38, low: 887.50, close: 901.99, volume: 2854673 }, + { time: new Date(2017, 3, 18), open: 900.99, high: 909.61, low: 900.78, close: 903.78, volume: 2999238 }, + { time: new Date(2017, 3, 19), open: 907.84, high: 910.50, low: 897.37, close: 899.20, volume: 2870242 }, + { time: new Date(2017, 3, 20), open: 899.70, high: 905.32, low: 896.29, close: 902.06, volume: 2814441 }, + { time: new Date(2017, 3, 21), open: 902.67, high: 903.65, low: 896.77, close: 898.53, volume: 2420494 }, + { time: new Date(2017, 3, 24), open: 908.68, high: 909.99, low: 903.82, close: 907.41, volume: 3122893 }, + { time: new Date(2017, 3, 25), open: 907.04, high: 909.48, low: 903.00, close: 907.62, volume: 3380639 }, + { time: new Date(2017, 3, 26), open: 910.30, high: 915.75, low: 907.56, close: 909.29, volume: 2608948 }, + { time: new Date(2017, 3, 27), open: 914.39, high: 921.86, low: 912.11, close: 918.38, volume: 5305543 }, + { time: new Date(2017, 3, 28), open: 948.83, high: 949.59, low: 924.33, close: 924.99, volume: 7364681 }, + { time: new Date(2017, 4, 1), open: 927.80, high: 954.40, low: 927.80, close: 948.23, volume: 5466544 }, + { time: new Date(2017, 4, 2), open: 946.64, high: 950.10, low: 941.41, close: 946.94, volume: 3848835 }, + { time: new Date(2017, 4, 3), open: 946.00, high: 946.00, low: 935.90, close: 941.03, volume: 3582686 }, + { time: new Date(2017, 4, 4), open: 944.75, high: 945.00, low: 934.22, close: 937.53, volume: 2418381 }, + { time: new Date(2017, 4, 5), open: 940.52, high: 940.79, low: 930.30, close: 934.15, volume: 2866397 }, + { time: new Date(2017, 4, 8), open: 940.95, high: 949.05, low: 939.21, close: 949.04, volume: 3415731 }, + { time: new Date(2017, 4, 9), open: 952.80, high: 957.89, low: 950.20, close: 952.82, volume: 3262113 }, + { time: new Date(2017, 4, 10), open: 953.50, high: 953.75, low: 945.00, close: 948.95, volume: 2096512 }, + { time: new Date(2017, 4, 11), open: 945.11, high: 950.29, low: 940.78, close: 947.62, volume: 2194070 }, + { time: new Date(2017, 4, 12), open: 954.50, high: 962.79, low: 951.53, close: 961.35, volume: 3625857 }, + { time: new Date(2017, 4, 15), open: 958.73, high: 963.15, low: 956.06, close: 957.97, volume: 4270625 }, + { time: new Date(2017, 4, 16), open: 961.00, high: 970.06, low: 960.91, close: 966.07, volume: 3126051 }, + { time: new Date(2017, 4, 17), open: 954.70, high: 960.40, low: 944.12, close: 944.76, volume: 5145578 }, + { time: new Date(2017, 4, 18), open: 944.80, high: 962.75, low: 944.76, close: 958.49, volume: 3939347 }, + { time: new Date(2017, 4, 19), open: 962.84, high: 968.92, low: 959.72, close: 959.84, volume: 3972089 }, + { time: new Date(2017, 4, 22), open: 964.00, high: 971.38, low: 962.90, close: 970.67, volume: 2642217 }, + { time: new Date(2017, 4, 23), open: 975.02, high: 975.20, low: 966.85, close: 971.54, volume: 2415594 }, + { time: new Date(2017, 4, 24), open: 976.00, high: 981.00, low: 970.23, close: 980.35, volume: 2463052 }, + { time: new Date(2017, 4, 25), open: 984.85, high: 999.00, low: 982.11, close: 993.38, volume: 4822032 }, + { time: new Date(2017, 4, 26), open: 995.00, high: 998.65, low: 989.25, close: 995.78, volume: 3469154 }, + { time: new Date(2017, 4, 30), open: 996.51, high: 1001.20, low: 995.52, close: 996.70, volume: 3263069 }, + { time: new Date(2017, 4, 31), open: 1000.00, high: 1000.12, low: 982.16, close: 994.62, volume: 3913115 }, + { time: new Date(2017, 5, 1), open: 998.59, high: 998.99, low: 991.37, close: 995.95, volume: 2454841 }, + { time: new Date(2017, 5, 2), open: 998.99, high: 1008.48, low: 995.67, close: 1006.73, volume: 3752328 }, + { time: new Date(2017, 5, 5), open: 1007.23, high: 1013.21, low: 1003.51, close: 1011.34, volume: 2719859 }, + { time: new Date(2017, 5, 6), open: 1012.00, high: 1016.50, low: 1001.25, close: 1003.00, volume: 3346432 }, + { time: new Date(2017, 5, 7), open: 1005.95, high: 1010.25, low: 1002.00, close: 1010.07, volume: 2823041 }, + { time: new Date(2017, 5, 8), open: 1012.06, high: 1013.61, low: 1006.11, close: 1010.27, volume: 2767857 }, + { time: new Date(2017, 5, 9), open: 1012.50, high: 1012.99, low: 927.00, close: 978.31, volume: 7647692 }, + { time: new Date(2017, 5, 12), open: 967.00, high: 975.95, low: 945.00, close: 964.91, volume: 9447233 }, + { time: new Date(2017, 5, 13), open: 977.99, high: 984.50, low: 966.10, close: 980.79, volume: 4580011 }, + { time: new Date(2017, 5, 14), open: 988.59, high: 990.34, low: 966.71, close: 976.47, volume: 3974900 }, + { time: new Date(2017, 5, 15), open: 958.70, high: 965.73, low: 950.86, close: 964.17, volume: 5373865 }, + { time: new Date(2017, 5, 16), open: 996.00, high: 999.75, low: 982.00, close: 987.71, volume: 11472662 }, + { time: new Date(2017, 5, 19), open: 1017.00, high: 1017.00, low: 989.90, close: 995.17, volume: 5043408 }, + { time: new Date(2017, 5, 20), open: 998.00, high: 1004.88, low: 992.02, close: 992.59, volume: 4076828 }, + { time: new Date(2017, 5, 21), open: 998.70, high: 1002.72, low: 992.65, close: 1002.23, volume: 2922473 }, + { time: new Date(2017, 5, 22), open: 1002.23, high: 1006.96, low: 997.20, close: 1001.30, volume: 2253433 }, + { time: new Date(2017, 5, 23), open: 1002.54, high: 1004.62, low: 998.02, close: 1003.74, volume: 2879145 }, + { time: new Date(2017, 5, 26), open: 1008.50, high: 1009.80, low: 992.00, close: 993.98, volume: 3386157 }, + { time: new Date(2017, 5, 27), open: 990.69, high: 998.80, low: 976.00, close: 976.78, volume: 3782389 }, + { time: new Date(2017, 5, 28), open: 978.55, high: 990.68, low: 969.21, close: 990.33, volume: 3737567 }, + { time: new Date(2017, 5, 29), open: 979.00, high: 987.56, low: 965.25, close: 975.93, volume: 4302968 }, + { time: new Date(2017, 5, 30), open: 980.12, high: 983.47, low: 967.61, close: 968.00, volume: 3390345 }, + { time: new Date(2017, 6, 3), open: 972.79, high: 974.49, low: 951.00, close: 953.66, volume: 2909108 }, + { time: new Date(2017, 6, 5), open: 961.53, high: 975.00, low: 955.25, close: 971.40, volume: 3652955 }, + { time: new Date(2017, 6, 6), open: 964.66, high: 974.40, low: 959.02, close: 965.14, volume: 3259613 }, + { time: new Date(2017, 6, 7), open: 969.55, high: 980.11, low: 969.14, close: 978.76, volume: 2643387 }, + { time: new Date(2017, 6, 10), open: 985.00, high: 999.44, low: 983.50, close: 996.47, volume: 3546268 }, + { time: new Date(2017, 6, 11), open: 993.00, high: 995.99, low: 983.72, close: 994.13, volume: 2982726 }, + { time: new Date(2017, 6, 12), open: 1000.65, high: 1008.55, low: 998.10, close: 1006.51, volume: 3608574 }, + { time: new Date(2017, 6, 13), open: 1004.62, high: 1006.88, low: 995.90, close: 1000.63, volume: 2880769 }, + { time: new Date(2017, 6, 14), open: 1002.40, high: 1004.45, low: 996.89, close: 1001.81, volume: 2102469 }, + { time: new Date(2017, 6, 17), open: 1004.69, high: 1014.75, low: 1003.81, close: 1010.04, volume: 3712587 }, + { time: new Date(2017, 6, 18), open: 1006.00, high: 1026.03, low: 1004.00, close: 1024.45, volume: 4007624 }, + { time: new Date(2017, 6, 19), open: 1025.00, high: 1031.59, low: 1022.50, close: 1026.87, volume: 2963964 }, + { time: new Date(2017, 6, 20), open: 1031.59, high: 1034.97, low: 1022.52, close: 1028.70, volume: 3097487 }, + { time: new Date(2017, 6, 21), open: 1021.28, high: 1026.10, low: 1011.00, close: 1025.67, volume: 2734577 }, + { time: new Date(2017, 6, 24), open: 1028.34, high: 1043.01, low: 1027.43, close: 1038.95, volume: 3288020 }, + { time: new Date(2017, 6, 25), open: 1038.05, high: 1043.33, low: 1032.48, close: 1039.87, volume: 2447629 }, + { time: new Date(2017, 6, 26), open: 1043.20, high: 1053.20, low: 1043.20, close: 1052.80, volume: 2921253 }, + { time: new Date(2017, 6, 27), open: 1069.55, high: 1083.31, low: 1040.18, close: 1046.00, volume: 10991715 }, + { time: new Date(2017, 6, 28), open: 1012.14, high: 1032.85, low: 1001.00, close: 1020.04, volume: 7709420 }, + { time: new Date(2017, 6, 31), open: 1019.05, high: 1019.05, low: 987.02, close: 987.78, volume: 7352063 }, + { time: new Date(2017, 7, 1), open: 996.11, high: 1006.40, low: 991.58, close: 996.19, volume: 4572576 }, + { time: new Date(2017, 7, 2), open: 1001.77, high: 1003.21, low: 981.73, close: 995.89, volume: 4069993 }, + { time: new Date(2017, 7, 3), open: 999.47, high: 999.50, low: 984.59, close: 986.92, volume: 3255764 }, + { time: new Date(2017, 7, 4), open: 989.68, high: 991.67, low: 982.00, close: 987.58, volume: 2730308 }, + { time: new Date(2017, 7, 7), open: 990.65, high: 995.00, low: 987.14, close: 992.27, volume: 2676607 }, + { time: new Date(2017, 7, 8), open: 994.35, high: 996.28, low: 985.79, close: 989.84, volume: 2902815 }, + { time: new Date(2017, 7, 9), open: 982.60, high: 988.00, low: 975.27, close: 982.01, volume: 3569731 }, + { time: new Date(2017, 7, 10), open: 976.30, high: 979.86, low: 954.68, close: 956.92, volume: 5684068 }, + { time: new Date(2017, 7, 11), open: 960.00, high: 970.39, low: 951.38, close: 967.99, volume: 3468017 }, + { time: new Date(2017, 7, 14), open: 978.41, high: 985.50, low: 976.19, close: 983.30, volume: 3172892 }, + { time: new Date(2017, 7, 15), open: 988.90, high: 991.74, low: 982.00, close: 982.74, volume: 2549295 }, + { time: new Date(2017, 7, 16), open: 981.65, high: 986.46, low: 973.22, close: 978.18, volume: 3132066 }, + { time: new Date(2017, 7, 17), open: 977.84, high: 977.84, low: 960.32, close: 960.57, volume: 3512397 }, + { time: new Date(2017, 7, 18), open: 961.40, high: 965.43, low: 954.65, close: 958.47, volume: 3284821 }, + { time: new Date(2017, 7, 21), open: 957.57, high: 961.20, low: 945.46, close: 953.29, volume: 3164483 }, + { time: new Date(2017, 7, 22), open: 955.52, high: 967.93, low: 955.50, close: 966.90, volume: 2749970 }, + { time: new Date(2017, 7, 23), open: 959.38, high: 962.00, low: 954.20, close: 958.00, volume: 2668264 }, + { time: new Date(2017, 7, 24), open: 957.42, high: 959.00, low: 941.14, close: 952.45, volume: 5195726 }, + { time: new Date(2017, 7, 25), open: 956.00, high: 957.62, low: 944.10, close: 945.26, volume: 3324791 }, + { time: new Date(2017, 7, 28), open: 946.54, high: 953.00, low: 942.25, close: 946.02, volume: 2596737 }, + { time: new Date(2017, 7, 29), open: 940.00, high: 956.00, low: 936.33, close: 954.06, volume: 2874299 }, + { time: new Date(2017, 7, 30), open: 958.44, high: 969.41, low: 956.91, close: 967.59, volume: 2904604 }, + { time: new Date(2017, 7, 31), open: 974.70, high: 981.00, low: 972.76, close: 980.60, volume: 3331488 }, + { time: new Date(2017, 8, 1), open: 984.20, high: 984.50, low: 976.88, close: 978.25, volume: 2535917 }, + { time: new Date(2017, 8, 5), open: 975.40, high: 976.77, low: 960.37, close: 965.27, volume: 2998649 }, + { time: new Date(2017, 8, 6), open: 968.32, high: 971.84, low: 960.60, close: 967.80, volume: 2129861 }, + { time: new Date(2017, 8, 7), open: 974.00, high: 980.59, low: 972.55, close: 979.47, volume: 2566794 }, + { time: new Date(2017, 8, 8), open: 979.10, high: 979.88, low: 963.47, close: 965.90, volume: 2605322 }, + { time: new Date(2017, 8, 11), open: 974.46, high: 981.94, low: 974.22, close: 977.96, volume: 2186666 }, + { time: new Date(2017, 8, 12), open: 983.27, high: 984.67, low: 975.52, close: 982.58, volume: 2481066 }, + { time: new Date(2017, 8, 13), open: 983.97, high: 1000.00, low: 979.42, close: 999.60, volume: 3374650 }, + { time: new Date(2017, 8, 14), open: 996.80, high: 998.56, low: 987.74, close: 992.21, volume: 3913263 }, + { time: new Date(2017, 8, 15), open: 993.01, high: 996.25, low: 984.03, close: 986.79, volume: 3760183 }, + { time: new Date(2017, 8, 18), open: 990.40, high: 992.79, low: 968.17, close: 974.19, volume: 3411324 }, + { time: new Date(2017, 8, 19), open: 977.25, high: 978.24, low: 967.46, close: 969.86, volume: 2671054 }, + { time: new Date(2017, 8, 20), open: 971.79, high: 974.81, low: 962.16, close: 973.21, volume: 2888795 }, + { time: new Date(2017, 8, 21), open: 971.31, high: 971.70, low: 962.02, close: 964.65, volume: 2337576 }, + { time: new Date(2017, 8, 22), open: 961.01, high: 965.61, low: 954.42, close: 955.10, volume: 2641787 }, + { time: new Date(2017, 8, 25), open: 949.31, high: 949.42, low: 932.89, close: 939.79, volume: 5123997 }, + { time: new Date(2017, 8, 26), open: 945.49, high: 948.63, low: 931.75, close: 938.60, volume: 3564848 }, + { time: new Date(2017, 8, 27), open: 948.00, high: 955.30, low: 943.30, close: 950.87, volume: 3124726 }, + { time: new Date(2017, 8, 28), open: 951.86, high: 959.70, low: 950.10, close: 956.40, volume: 2522567 }, + { time: new Date(2017, 8, 29), open: 960.11, high: 964.83, low: 958.38, close: 961.35, volume: 2543759 }, + { time: new Date(2017, 9, 2), open: 964.00, high: 967.30, low: 952.12, close: 959.19, volume: 2442937 }, + { time: new Date(2017, 9, 3), open: 958.00, high: 963.69, low: 950.37, close: 957.10, volume: 2666574 }, + { time: new Date(2017, 9, 4), open: 954.21, high: 967.79, low: 954.05, close: 965.45, volume: 2527352 }, + { time: new Date(2017, 9, 5), open: 970.00, high: 981.51, low: 969.64, close: 980.85, volume: 3229224 }, + { time: new Date(2017, 9, 6), open: 975.64, high: 995.75, low: 975.64, close: 989.58, volume: 3782067 }, + { time: new Date(2017, 9, 9), open: 993.24, high: 998.50, low: 987.50, close: 990.99, volume: 2938586 }, + { time: new Date(2017, 9, 10), open: 996.67, high: 997.95, low: 980.10, close: 987.20, volume: 3084921 }, + { time: new Date(2017, 9, 11), open: 991.27, high: 995.50, low: 986.70, close: 995.00, volume: 2337113 }, + { time: new Date(2017, 9, 12), open: 996.81, high: 1008.44, low: 992.40, close: 1000.93, volume: 4067317 }, + { time: new Date(2017, 9, 13), open: 1007.00, high: 1007.77, low: 1001.03, close: 1002.94, volume: 2431462 }, + { time: new Date(2017, 9, 16), open: 1008.44, high: 1009.57, low: 1001.04, close: 1006.34, volume: 2008908 }, + { time: new Date(2017, 9, 17), open: 1005.59, high: 1011.47, low: 1004.38, close: 1009.13, volume: 2319742 }, + { time: new Date(2017, 9, 18), open: 1009.27, high: 1022.31, low: 996.55, close: 997.00, volume: 2499681 }, + { time: new Date(2017, 9, 19), open: 990.00, high: 991.05, low: 980.24, close: 986.61, volume: 3108197 }, + { time: new Date(2017, 9, 20), open: 993.53, high: 994.62, low: 982.00, close: 982.91, volume: 2365122 }, + { time: new Date(2017, 9, 23), open: 986.73, high: 986.78, low: 962.50, close: 966.30, volume: 3494100 }, + { time: new Date(2017, 9, 24), open: 969.00, high: 979.85, low: 965.00, close: 975.90, volume: 2723935 }, + { time: new Date(2017, 9, 25), open: 978.00, high: 984.44, low: 966.24, close: 972.91, volume: 3033113 }, + { time: new Date(2017, 9, 26), open: 980.33, high: 982.90, low: 968.55, close: 972.43, volume: 5618675 }, + { time: new Date(2017, 9, 27), open: 1058.14, high: 1105.58, low: 1050.55, close: 1100.95, volume: 16565021 }, + { time: new Date(2017, 9, 30), open: 1095.01, high: 1122.79, low: 1093.56, close: 1110.85, volume: 6613064 }, + { time: new Date(2017, 9, 31), open: 1109.00, high: 1110.54, low: 1101.12, close: 1105.28, volume: 3476967 }, + { time: new Date(2017, 10, 1), open: 1105.40, high: 1108.97, low: 1096.74, close: 1103.68, volume: 3755511 }, + { time: new Date(2017, 10, 2), open: 1097.81, high: 1101.94, low: 1086.87, close: 1094.22, volume: 3684876 }, + { time: new Date(2017, 10, 3), open: 1091.15, high: 1112.68, low: 1088.52, close: 1111.60, volume: 3751480 }, + { time: new Date(2017, 10, 6), open: 1109.15, high: 1125.41, low: 1108.77, close: 1120.66, volume: 3381138 }, + { time: new Date(2017, 10, 7), open: 1124.74, high: 1130.60, low: 1117.50, close: 1123.17, volume: 2688977 }, + { time: new Date(2017, 10, 8), open: 1122.82, high: 1135.54, low: 1119.11, close: 1132.88, volume: 2581451 }, + { time: new Date(2017, 10, 9), open: 1125.96, high: 1129.62, low: 1115.77, close: 1129.13, volume: 3732732 }, + { time: new Date(2017, 10, 10), open: 1126.10, high: 1131.75, low: 1124.06, close: 1125.35, volume: 2179937 }, + { time: new Date(2017, 10, 13), open: 1123.00, high: 1139.90, low: 1122.34, close: 1129.17, volume: 2918439 }, + { time: new Date(2017, 10, 14), open: 1130.11, high: 1138.00, low: 1123.89, close: 1136.84, volume: 3138423 }, + { time: new Date(2017, 10, 15), open: 1127.01, high: 1131.75, low: 1121.63, close: 1126.69, volume: 3928680 }, + { time: new Date(2017, 10, 16), open: 1130.16, high: 1138.16, low: 1130.05, close: 1137.29, volume: 2213322 }, + { time: new Date(2017, 10, 17), open: 1138.28, high: 1138.80, low: 1125.81, close: 1129.88, volume: 2413388 }, + { time: new Date(2017, 10, 20), open: 1129.77, high: 1133.42, low: 1122.55, close: 1126.31, volume: 2163855 }, + { time: new Date(2017, 10, 21), open: 1132.86, high: 1140.00, low: 1128.20, close: 1139.49, volume: 2479397 }, + { time: new Date(2017, 10, 22), open: 1141.00, high: 1160.27, low: 1141.00, close: 1156.16, volume: 3555273 }, + { time: new Date(2017, 10, 24), open: 1160.70, high: 1186.84, low: 1160.70, close: 1186.00, volume: 3528011 }, + { time: new Date(2017, 10, 27), open: 1202.66, high: 1213.41, low: 1191.15, close: 1195.83, volume: 6744045 }, + { time: new Date(2017, 10, 28), open: 1204.88, high: 1205.34, low: 1188.52, close: 1193.60, volume: 4559449 }, + { time: new Date(2017, 10, 29), open: 1194.80, high: 1194.80, low: 1145.19, close: 1161.27, volume: 9257512 }, + { time: new Date(2017, 10, 30), open: 1167.10, high: 1178.57, low: 1160.00, close: 1176.75, volume: 4509208 }, + { time: new Date(2017, 11, 1), open: 1172.05, high: 1179.65, low: 1152.00, close: 1162.35, volume: 4107094 }, + { time: new Date(2017, 11, 4), open: 1173.85, high: 1175.20, low: 1128.00, close: 1133.95, volume: 5931915 }, + { time: new Date(2017, 11, 5), open: 1128.26, high: 1159.27, low: 1124.74, close: 1141.57, volume: 4079774 }, + { time: new Date(2017, 11, 6), open: 1137.99, high: 1155.89, low: 1136.08, close: 1152.35, volume: 2853316 }, + { time: new Date(2017, 11, 7), open: 1156.59, high: 1163.19, low: 1151.00, close: 1159.79, volume: 2511569 }, + { time: new Date(2017, 11, 8), open: 1170.40, high: 1172.79, low: 1157.10, close: 1162.00, volume: 3050074 }, + { time: new Date(2017, 11, 11), open: 1164.60, high: 1169.90, low: 1157.00, close: 1168.92, volume: 2363473 }, + { time: new Date(2017, 11, 12), open: 1166.51, high: 1173.60, low: 1161.61, close: 1165.08, volume: 2235892 }, + { time: new Date(2017, 11, 13), open: 1170.00, high: 1170.87, low: 1160.27, close: 1164.13, volume: 2616760 }, + { time: new Date(2017, 11, 14), open: 1163.71, high: 1177.93, low: 1162.45, close: 1174.26, volume: 3214337 }, + { time: new Date(2017, 11, 15), open: 1179.03, high: 1182.75, low: 1169.33, close: 1179.14, volume: 4778621 }, + { time: new Date(2017, 11, 18), open: 1187.37, high: 1194.78, low: 1180.91, close: 1190.58, volume: 2947625 }, + { time: new Date(2017, 11, 19), open: 1189.15, high: 1192.97, low: 1179.14, close: 1187.38, volume: 2587792 }, + { time: new Date(2017, 11, 20), open: 1190.50, high: 1191.00, low: 1176.00, close: 1177.62, volume: 2371166 }, + { time: new Date(2017, 11, 21), open: 1175.90, high: 1179.17, low: 1167.64, close: 1174.76, volume: 2123117 }, + { time: new Date(2017, 11, 22), open: 1172.08, high: 1174.62, low: 1167.83, close: 1168.36, volume: 1585054 }, + { time: new Date(2017, 11, 26), open: 1168.36, high: 1178.32, low: 1160.55, close: 1176.76, volume: 2005187 }, + { time: new Date(2017, 11, 27), open: 1179.91, high: 1187.29, low: 1175.61, close: 1182.26, volume: 1867208 }, + { time: new Date(2017, 11, 28), open: 1189.00, high: 1190.10, low: 1184.38, close: 1186.10, volume: 1841676 }, + { time: new Date(2017, 11, 29), open: 1182.35, high: 1184.00, low: 1167.50, close: 1169.47, volume: 2688391 }, + { time: new Date(2018, 0, 2), open: 1172.00, high: 1190.00, low: 1170.51, close: 1189.01, volume: 2694494 }, + { time: new Date(2018, 0, 3), open: 1188.30, high: 1205.49, low: 1188.30, close: 1204.20, volume: 3108793 }, + { time: new Date(2018, 0, 4), open: 1205.00, high: 1215.87, low: 1204.66, close: 1209.59, volume: 3022089 }, + { time: new Date(2018, 0, 5), open: 1217.51, high: 1229.14, low: 1210.00, close: 1229.14, volume: 3544743 }, + { time: new Date(2018, 0, 8), open: 1236.00, high: 1253.08, low: 1232.03, close: 1246.87, volume: 4279475 }, + { time: new Date(2018, 0, 9), open: 1256.90, high: 1259.33, low: 1241.76, close: 1252.70, volume: 3661316 }, + { time: new Date(2018, 0, 10), open: 1245.15, high: 1254.33, low: 1237.23, close: 1254.33, volume: 2686017 }, + { time: new Date(2018, 0, 11), open: 1259.74, high: 1276.77, low: 1256.46, close: 1276.68, volume: 3125048 }, + { time: new Date(2018, 0, 12), open: 1273.39, high: 1305.76, low: 1273.39, close: 1305.20, volume: 5443730 }, + { time: new Date(2018, 0, 16), open: 1323.00, high: 1339.94, low: 1292.30, close: 1304.86, volume: 7220701 }, + { time: new Date(2018, 0, 17), open: 1312.24, high: 1314.00, low: 1280.88, close: 1295.00, volume: 5253754 }, + { time: new Date(2018, 0, 18), open: 1293.95, high: 1304.60, low: 1284.02, close: 1293.32, volume: 4026915 }, + { time: new Date(2018, 0, 19), open: 1312.00, high: 1313.00, low: 1292.99, close: 1294.58, volume: 4578536 }, + { time: new Date(2018, 0, 22), open: 1297.17, high: 1327.45, low: 1296.66, close: 1327.31, volume: 4140061 }, + { time: new Date(2018, 0, 23), open: 1338.09, high: 1364.90, low: 1337.34, close: 1362.54, volume: 5169306 }, + { time: new Date(2018, 0, 24), open: 1374.82, high: 1388.16, low: 1338.00, close: 1357.51, volume: 6807457 }, + { time: new Date(2018, 0, 25), open: 1368.00, high: 1378.34, low: 1357.62, close: 1377.95, volume: 4753012 }, + { time: new Date(2018, 0, 26), open: 1392.01, high: 1402.53, low: 1380.91, close: 1402.05, volume: 4857310 }, + { time: new Date(2018, 0, 29), open: 1409.18, high: 1431.39, low: 1400.44, close: 1417.68, volume: 5701898 }, + { time: new Date(2018, 0, 30), open: 1403.17, high: 1439.25, low: 1392.00, close: 1437.82, volume: 5871942 }, + { time: new Date(2018, 0, 31), open: 1451.30, high: 1472.58, low: 1450.04, close: 1450.89, volume: 6424693 } +]; diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/default/index.ts b/packages/igx-templates/igx-ts-legacy/financial-chart/default/index.ts new file mode 100644 index 000000000..88793ed42 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/default/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxFinancialChartTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Financial Chart"]; + this.controlGroup = "Charts"; + this.listInComponentTemplates = true; + this.id = "financial-chart"; + this.projectType = "igx-ts"; + this.name = "Financial Chart"; + this.dependencies = [ + { import: "IgxFinancialChartModule", from: "igniteui-angular-charts" } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; + } +} +module.exports = new IgxFinancialChartTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/financial-chart/index.ts b/packages/igx-templates/igx-ts-legacy/financial-chart/index.ts new file mode 100644 index 000000000..f13b6766e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/financial-chart/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxFinancialChartComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Financial Chart"; + this.group = "Charts"; + } +} +module.exports = new IgxFinancialChartComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..b48e871cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,4 @@ +
+

Name: <%=name%>

+

<%=description%>

+
diff --git a/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..633df6792 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxCarouselModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it("should create", () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..e4f51fd68 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/generate/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: "<%=filePrefix%>", + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], +}) +export class <%=ClassName%>Component { + title = '<%=name%>'; + constructor() { } +} diff --git a/packages/igx-templates/igx-ts-legacy/generate/template.json b/packages/igx-templates/igx-ts-legacy/generate/template.json new file mode 100644 index 000000000..b9b763913 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/generate/template.json @@ -0,0 +1,13 @@ +{ + "id": "$(templateName)", + "name": "$(templateName)", + "description": "Ignite UI for Angular template created with Ignite UI CLI", + "framework": "$(templateFramework)", + "projectType": "$(templateType)", + "components": [], + "controlGroup": "", + "listInCustomTemplates": true, + "listInComponentTemplates": false, + "dependencies": [], + "packages": [] +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..dc3a9937d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,8 @@ +

igx-grid component with auto generated columns below and local data.

+

You can read more about configuring the igx-grid component in the + README or the + official documentation. +

+ + + diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..b1c519d87 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxGridModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..e3548e985 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { ColumnType } from '<%=igxPackage%>'; +import { Employee, employeesData } from './localData'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + public localData: Employee[] = []; + title = '<%=name%>'; + + ngOnInit(): void { + this.localData = employeesData; + } + + public onColumnInit(column: ColumnType): void { + if (column.field === 'RegistererDate') { + column.formatter = (date => date.toLocaleDateString()); + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/localData.ts b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/localData.ts new file mode 100644 index 000000000..cda12c1fa --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/default/files/src/app/__path__/localData.ts @@ -0,0 +1,354 @@ +export interface Employee { + EmployeeID: string; + FirstName: string; + LastName: string; + Country: string; + Age: number; + RegistererDate: Date; + IsActive: boolean; +} + +const lastYear = new Date().getFullYear() - 1; +export const employeesData: Employee[] = [ + { + EmployeeID: '56250fa57ab1535722e564a6', + FirstName: 'Downs', + LastName: 'Holcomb', + Country: 'Italy', + Age: 35, + RegistererDate: new Date(lastYear, 7, 25), + IsActive: false + }, + { + EmployeeID: '56250fa5c0fd04f12555d44d', + FirstName: 'Mckenzie', + LastName: 'Calderon', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 9, 22), + IsActive: false + }, + { + EmployeeID: '56250fa565a7bcc21f6bd15e', + FirstName: 'Howell', + LastName: 'Hawkins', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear, 8, 8), + IsActive: false + }, + { + EmployeeID: '56250fa5d71a83c33f3f6479', + FirstName: 'Sheppard', + LastName: 'Nicholson', + Country: 'Italy', + Age: 49, + RegistererDate: new Date(lastYear - 1, 6, 28), + IsActive: false + }, + { + EmployeeID: '56250fa546abbe8c616d37eb', + FirstName: 'Bettye', + LastName: 'Trujillo', + Country: 'Canada', + Age: 37, + RegistererDate: new Date(new Date().setDate(-20)), + IsActive: false + }, + { + EmployeeID: '56250fa535809820f2c44291', + FirstName: 'Joyce', + LastName: 'Vaughan', + Country: 'USA', + Age: 48, + RegistererDate: new Date(lastYear - 1, 4, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5732f6adc0b52ace0', + FirstName: 'Janine', + LastName: 'Munoz', + Country: 'USA', + Age: 59, + RegistererDate: new Date(lastYear - 1, 2, 9), + IsActive: true + }, + { + EmployeeID: '56250fa540b15dfd507cffb9', + FirstName: 'Betsy', + LastName: 'Short', + Country: 'USA', + Age: 26, + RegistererDate: new Date(new Date().setMonth(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa5a33146a85fdeda66', + FirstName: 'Tanisha', + LastName: 'Harrington', + Country: 'USA', + Age: 31, + RegistererDate: new Date(lastYear - 1, 11, 25), + IsActive: false + }, + { + EmployeeID: '56250fa572bea435113bb3be', + FirstName: 'French', + LastName: 'Sullivan', + Country: 'Italy', + Age: 37, + RegistererDate: new Date(new Date().setMonth(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa55f17965b7b19e3cf', + FirstName: 'Gomez', + LastName: 'Sandoval', + Country: 'Italy', + Age: 24, + RegistererDate: new Date(lastYear - 1, 6, 19), + IsActive: true + }, + { + EmployeeID: '56250fa5f630e559e163de06', + FirstName: 'Estes', + LastName: 'Soto', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(new Date().setDate(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa5c797f025a835abd4', + FirstName: 'Newman', + LastName: 'Mathews', + Country: 'Italy', + Age: 60, + RegistererDate: new Date(lastYear - 1, 10, 9), + IsActive: true + }, + { + EmployeeID: '56250fa5fd5cd14418a9c790', + FirstName: 'Paul', + LastName: 'Harper', + Country: 'USA', + Age: 52, + RegistererDate: new Date(lastYear - 1, 5, 9), + IsActive: true + }, + { + EmployeeID: '56250fa56a88b994f0925d7c', + FirstName: 'Sharpe', + LastName: 'Blair', + Country: 'Canada', + Age: 41, + RegistererDate: new Date(new Date().setMonth(-3)), + IsActive: false + }, + { + EmployeeID: '56250fa53793e85f499fbf8b', + FirstName: 'Kirk', + LastName: 'Downs', + Country: 'USA', + Age: 58, + RegistererDate: new Date(lastYear, 7, 10), + IsActive: false + }, + { + EmployeeID: '56250fa581c03d4c735c0e8b', + FirstName: 'Abby', + LastName: 'Wheeler', + Country: 'Canada', + Age: 42, + RegistererDate: new Date(lastYear, 3, 28), + IsActive: false + }, + { + EmployeeID: '56250fa576d7ce7293fc09c6', + FirstName: 'Walter', + LastName: 'Roth', + Country: 'Canada', + Age: 36, + RegistererDate: new Date(lastYear, 7, 24), + IsActive: true + }, + { + EmployeeID: '56250fa5d88119d49b29d8ce', + FirstName: 'Pratt', + LastName: 'Mann', + Country: 'Canada', + Age: 40, + RegistererDate: new Date(lastYear, 7, 3), + IsActive: true + }, + { + EmployeeID: '56250fa52152c985dfbfcccb', + FirstName: 'Blackwell', + LastName: 'Randall', + Country: 'Italy', + Age: 20, + RegistererDate: new Date(new Date().setDate(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa51a20b01e6ed8f726', + FirstName: 'Linda', + LastName: 'Sanchez', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 7, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5330ca7347f162f06', + FirstName: 'Nieves', + LastName: 'Hampton', + Country: 'Italy', + Age: 27, + RegistererDate: new Date(lastYear - 1, 11, 10), + IsActive: false + }, + { + EmployeeID: '56250fa5afae141d6229d5b1', + FirstName: 'Pruitt', + LastName: 'Pace', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 11, 8), + IsActive: true + }, + { + EmployeeID: '56250fa5340a5a2c9124717b', + FirstName: 'Byrd', + LastName: 'Bailey', + Country: 'Canada', + Age: 20, + RegistererDate: new Date(lastYear - 1, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa5cf7613339d7e89ef', + FirstName: 'Hardy', + LastName: 'Terry', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear - 1, 6, 1), + IsActive: false + }, + { + EmployeeID: '56250fa566f393ab8dadba48', + FirstName: 'Millie', + LastName: 'Boyd', + Country: 'USA', + Age: 28, + RegistererDate: new Date(lastYear, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa58eeb7bba0116b2d5', + FirstName: 'Rosa', + LastName: 'Mercer', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 8, 18), + IsActive: true + }, + { + EmployeeID: '56250fa5f85bd1754870f53f', + FirstName: 'Blair', + LastName: 'Long', + Country: 'Canada', + Age: 21, + RegistererDate: new Date(lastYear - 1, 9, 26), + IsActive: false + }, + { + EmployeeID: '56250fa5a0b51fe08c3c767b', + FirstName: 'Whitfield', + LastName: 'Cherry', + Country: 'USA', + Age: 38, + RegistererDate: new Date(lastYear - 1, 4, 25), + IsActive: true + }, + { + EmployeeID: '56250fa5b4e64d93a5742a57', + FirstName: 'Cathryn', + LastName: 'Hunt', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 6, 16), + IsActive: true + }, + { + EmployeeID: '56250fa5fad324f0adefae2d', + FirstName: 'Morris', + LastName: 'Stout', + Country: 'Italy', + Age: 41, + RegistererDate: new Date(lastYear - 1, 3, 26), + IsActive: true + }, + { + EmployeeID: '56250fa59c7408d236d6a804', + FirstName: 'Vera', + LastName: 'Richardson', + Country: 'Canada', + Age: 32, + RegistererDate: new Date(lastYear - 1, 1, 2), + IsActive: false + }, + { + EmployeeID: '56250fa5d6cd5f712b557a0d', + FirstName: 'Shelton', + LastName: 'Henderson', + Country: 'Canada', + Age: 53, + RegistererDate: new Date(lastYear, 9, 6), + IsActive: true + }, + { + EmployeeID: '56250fa5a11af8868f285db6', + FirstName: 'Jimmie', + LastName: 'Cain', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear, 6, 5), + IsActive: true + }, + { + EmployeeID: '56250fa53c8439c4e5e7d864', + FirstName: 'Bryan', + LastName: 'Bradshaw', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(lastYear - 1, 8, 2), + IsActive: true + }, + { + EmployeeID: '56250fa5fc8d4f4859804c7e', + FirstName: 'Decker', + LastName: 'Kane', + Country: 'Canada', + Age: 29, + RegistererDate: new Date(lastYear - 1, 6, 7), + IsActive: false + }, + { + EmployeeID: '56250fa50158aa6a0fd162f2', + FirstName: 'Keisha', + LastName: 'Phelps', + Country: 'Canada', + Age: 34, + RegistererDate: new Date(lastYear - 1, 10, 11), + IsActive: true + }, + { + EmployeeID: '56250fa58ca7ea6c3dfe7830', + FirstName: 'West', + LastName: 'Frye', + Country: 'Italy', + Age: 40, + RegistererDate: new Date(lastYear - 1, 6, 25), + IsActive: false + }]; diff --git a/packages/igx-templates/igx-ts-legacy/grid/default/index.ts b/packages/igx-templates/igx-ts-legacy/grid/default/index.ts new file mode 100644 index 000000000..8e30ef60d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/default/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "grid"; + this.projectType = "igx-ts"; + this.name = "Grid"; + this.description = "basic IgxGrid"; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..ca470fba1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,54 @@ +

igx-grid component with batch editing.

+

You can read more about configuring the igx-grid component in the + README or the + official documentation. +

+ + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ + + + + + {{ typeFormatter(val) }} + + + + + {{ stateFormatter(val) }} + + + +
+ + + +
+
diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..5607f62d9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,34 @@ +h4 { + text-align: center; + padding-top: 2%; + padding-bottom: 2%; +} +.buttons-row { + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 5px; +} +.buttons-wrapper { + display: flex; + flex-direction: row; + justify-content: center; + padding: 10px 0; +} +.transaction--update, +.transaction--delete, +.transaction--add { + font-weight: 600; +} +.transaction--add { + color: #6b3; +} +.transaction--update { + color: #4a71b9; +} +.transaction--delete { + color: #ee4920; +} +.transaction-log { + word-wrap: none; +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..d14653f18 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,34 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxButtonModule, + IgxDialogModule, + IgxFocusModule, + IgxGridModule, + IgxRippleModule +} from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ FormsModule, NoopAnimationsModule, IgxDialogModule, IgxGridModule, IgxFocusModule, IgxButtonModule, IgxRippleModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..53d44cd55 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,95 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { IgxDialogComponent, IgxGridComponent, State, Transaction, TransactionService } from '<%=igxPackage%>'; +import { data, Product } from './data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + styleUrls: ['./<%=filePrefix%>.component.scss'], + templateUrl: './<%=filePrefix%>.component.html' +}) +export class <%=ClassName%>Component implements OnInit { + @ViewChild('gridRowEditTransaction', { static: true, read: IgxGridComponent }) public grid!: IgxGridComponent; + @ViewChild(IgxDialogComponent, { static: true }) public dialog!: IgxDialogComponent; + @ViewChild('dialogGrid', { static: true, read: IgxGridComponent }) public dialogGrid!: IgxGridComponent; + + public data: Product[]; + public transactionsData: Transaction[] = []; + private addProductId: number; + + public get transactions(): TransactionService { + return this.grid.transactions; + } + + constructor() { + this.data = data; + this.addProductId = this.data.length + 1; + } + + public ngOnInit(): void { + this.transactionsData = this.transactions.getAggregatedChanges(true); + this.grid.rendered$.subscribe(() => { + this.transactions.onStateUpdate?.subscribe(() => { + this.transactionsData = this.transactions.getAggregatedChanges(true); + }) + }) + } + + public addRow(): void { + this.grid.addRow({ + CategoryID: this.getRandomInt(1, 10), + Discontinued: this.getRandomInt(1, 10) % 2 === 0, + OrderDate: new Date(this.getRandomInt(2000, 2050), this.getRandomInt(0, 11), this.getRandomInt(1, 25)), + ProductID: this.addProductId++, + ProductName: 'Product with index ' + this.getRandomInt(0, 20), + QuantityPerUnit: (this.getRandomInt(1, 10) * 10).toString() + ' pcs.', + ReorderLevel: this.getRandomInt(10, 20), + SupplierID: this.getRandomInt(1, 20), + UnitPrice: this.getRandomInt(10, 1000), + UnitsInStock: this.getRandomInt(1, 100), + UnitsOnOrder: this.getRandomInt(1, 20) + }); + } + + public classFromType(type: string): string { + return `transaction--${type.toLowerCase()}`; + } + + public deleteRow(rowID: any): void { + this.grid.deleteRow(rowID); + } + + public openCommitDialog(): void { + this.dialog.open(); + this.dialogGrid.reflow(); + } + + public commit(): void { + this.grid.transactions.commit(this.data); + this.dialog.close(); + } + + public cancel(): void { + this.dialog.close(); + } + + public discard(): void { + this.grid.transactions.clear(); + this.dialog.close(); + } + + private getRandomInt(min: number, max: number): number { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + + public get hasTransactions(): boolean { + return this.grid.transactions.getAggregatedChanges(false).length > 0; + } + + public stateFormatter(value: string): string { + return JSON.stringify(value); + } + + public typeFormatter(value: string): string { + return value.toUpperCase(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/data.ts new file mode 100644 index 000000000..108b43e13 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/files/src/app/__path__/data.ts @@ -0,0 +1,137 @@ +export interface Product { + CategoryID: number; + Discontinued: boolean; + OrderDate: Date; + ProductID: number; + ProductName: string; + QuantityPerUnit: string; + ReorderLevel: number; + SupplierID: number; + UnitPrice: string; + UnitsInStock: number; + UnitsOnOrder: number; +} + +export const data: Product[] = [ + { + CategoryID: 1, + Discontinued: false, + OrderDate: new Date('2012-02-12'), + ProductID: 1, + ProductName: 'Chai', + QuantityPerUnit: '10 boxes x 20 bags', + ReorderLevel: 10, + SupplierID: 1, + UnitPrice: '18.0000', + UnitsInStock: 39, + UnitsOnOrder: 0 + }, { + CategoryID: 1, + Discontinued: false, + OrderDate: new Date('2003-03-17'), + ProductID: 2, + ProductName: 'Chang', + QuantityPerUnit: '24 - 12 oz bottles', + ReorderLevel: 25, + SupplierID: 1, + UnitPrice: '19.0000', + UnitsInStock: 17, + UnitsOnOrder: 40 + }, { + CategoryID: 2, + Discontinued: false, + OrderDate: new Date('2006-03-17'), + ProductID: 3, + ProductName: 'Aniseed Syrup', + QuantityPerUnit: '12 - 550 ml bottles', + ReorderLevel: 25, + SupplierID: 1, + UnitPrice: '10.0000', + UnitsInStock: 13, + UnitsOnOrder: 70 + }, { + CategoryID: 2, + Discontinued: false, + OrderDate: new Date('2020-03-17'), + ProductID: 4, + ProductName: 'Chef Antons Cajun Seasoning', + QuantityPerUnit: '48 - 6 oz jars', + ReorderLevel: 0, + SupplierID: 2, + UnitPrice: '22.0000', + UnitsInStock: 53, + UnitsOnOrder: 0 + }, { + CategoryID: 2, + Discontinued: true, + OrderDate: new Date('2011-11-11'), + ProductID: 5, + ProductName: 'Chef Antons Gumbo Mix', + QuantityPerUnit: '36 boxes', + ReorderLevel: 0, + SupplierID: 2, + UnitPrice: '21.3500', + UnitsInStock: 0, + UnitsOnOrder: 0 + }, { + CategoryID: 2, + Discontinued: false, + OrderDate: new Date('2017-12-17'), + ProductID: 6, + ProductName: 'Grandmas Boysenberry Spread', + QuantityPerUnit: '12 - 8 oz jars', + ReorderLevel: 25, + SupplierID: 3, + UnitPrice: '25.0000', + UnitsInStock: 0, + UnitsOnOrder: 0 + }, { + CategoryID: 7, + Discontinued: false, + OrderDate: new Date('2016-07-17'), + ProductID: 7, + ProductName: 'Uncle Bobs Organic Dried Pears', + QuantityPerUnit: '12 - 1 lb pkgs.', + ReorderLevel: 10, + SupplierID: 3, + UnitPrice: '30.0000', + UnitsInStock: 150, + UnitsOnOrder: 0 + }, { + CategoryID: 2, + Discontinued: false, + OrderDate: new Date('2025-01-17'), + ProductID: 8, + ProductName: 'Northwoods Cranberry Sauce', + QuantityPerUnit: '12 - 12 oz jars', + ReorderLevel: 0, + SupplierID: 3, + UnitPrice: '40.0000', + UnitsInStock: 6, + UnitsOnOrder: 0 + }, { + CategoryID: 6, + Discontinued: true, + OrderDate: new Date('2010-02-17'), + ProductID: 9, + ProductName: 'Mishi Kobe Niku', + QuantityPerUnit: '18 - 500 g pkgs.', + ReorderLevel: 0, + SupplierID: 4, + UnitPrice: '$97.0000', + UnitsInStock: 29, + UnitsOnOrder: 0 + }, { + CategoryID: 8, + Discontinued: false, + OrderDate: new Date('2008-05-17'), + ProductID: 10, + ProductName: 'Ikura', + QuantityPerUnit: '12 - 200 ml jars', + ReorderLevel: 0, + SupplierID: 4, + UnitPrice: '31.0000', + UnitsInStock: 31, + UnitsOnOrder: 0 + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/index.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/index.ts new file mode 100644 index 000000000..438c52269 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-batch-editing/index.ts @@ -0,0 +1,28 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGridBatchEditingTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "grid-batch-editing"; + this.projectType = "igx-ts"; + this.name = "Grid Batch Editing"; + this.description = "Sample IgxGrid with batch editing"; + this.dependencies = [ + { + import: [ + "IgxGridModule", + "IgxFocusModule", + "IgxButtonModule", + "IgxDialogModule", + "IgxRippleModule" + ], + from: "<%=igxPackage%>" + }, + { import: "FormsModule", from: "@angular/forms" } + ]; + } +} +module.exports = new IgxGridBatchEditingTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..d05901597 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,25 @@ +

<%=description%>
+You can read more about configuring the igx-grid component in the +README or the +official documentation.

+<%=selectedFeatures%> +> + <%=columnPinning%>> + + <%=columnPinning%>> + + <%=groupByColumn%>> + + <%=groupByColumn%>> + + > + + {{ value | date }} + + + > + + > + + <%=additionalMarkup%> + diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..29bec9fa9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxCheckboxModule, IgxDatePickerModule, IgxGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..5f3da949f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; +import { Employee, employeesData } from './localData'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + public localData: Employee[] = []; + title = '<%=name%>'; + + ngOnInit(): void { + this.localData = employeesData; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/localData.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/localData.ts new file mode 100644 index 000000000..0df9b2896 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/files/src/app/__path__/localData.ts @@ -0,0 +1,355 @@ +export interface Employee { + EmployeeID: string; + FirstName: string; + LastName: string; + Country: string; + Age: number; + RegistererDate: Date; + IsActive: boolean; +} + +const lastYear = new Date().getFullYear() - 1; +export const employeesData: Employee[] = [ + { + EmployeeID: '56250fa57ab1535722e564a6', + FirstName: 'Downs', + LastName: 'Holcomb', + Country: 'Italy', + Age: 35, + RegistererDate: new Date(lastYear, 7, 25), + IsActive: false + }, + { + EmployeeID: '56250fa5c0fd04f12555d44d', + FirstName: 'Mckenzie', + LastName: 'Calderon', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 9, 22), + IsActive: false + }, + { + EmployeeID: '56250fa565a7bcc21f6bd15e', + FirstName: 'Howell', + LastName: 'Hawkins', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear, 8, 8), + IsActive: false + }, + { + EmployeeID: '56250fa5d71a83c33f3f6479', + FirstName: 'Sheppard', + LastName: 'Nicholson', + Country: 'Italy', + Age: 49, + RegistererDate: new Date(lastYear - 1, 6, 28), + IsActive: false + }, + { + EmployeeID: '56250fa546abbe8c616d37eb', + FirstName: 'Bettye', + LastName: 'Trujillo', + Country: 'Canada', + Age: 37, + RegistererDate: new Date(new Date().setDate(-20)), + IsActive: false + }, + { + EmployeeID: '56250fa535809820f2c44291', + FirstName: 'Joyce', + LastName: 'Vaughan', + Country: 'USA', + Age: 48, + RegistererDate: new Date(lastYear - 1, 4, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5732f6adc0b52ace0', + FirstName: 'Janine', + LastName: 'Munoz', + Country: 'USA', + Age: 59, + RegistererDate: new Date(lastYear - 1, 2, 9), + IsActive: true + }, + { + EmployeeID: '56250fa540b15dfd507cffb9', + FirstName: 'Betsy', + LastName: 'Short', + Country: 'USA', + Age: 26, + RegistererDate: new Date(new Date().setMonth(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa5a33146a85fdeda66', + FirstName: 'Tanisha', + LastName: 'Harrington', + Country: 'USA', + Age: 31, + RegistererDate: new Date(lastYear - 1, 11, 25), + IsActive: false + }, + { + EmployeeID: '56250fa572bea435113bb3be', + FirstName: 'French', + LastName: 'Sullivan', + Country: 'Italy', + Age: 37, + RegistererDate: new Date(new Date().setMonth(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa55f17965b7b19e3cf', + FirstName: 'Gomez', + LastName: 'Sandoval', + Country: 'Italy', + Age: 24, + RegistererDate: new Date(lastYear - 1, 6, 19), + IsActive: true + }, + { + EmployeeID: '56250fa5f630e559e163de06', + FirstName: 'Estes', + LastName: 'Soto', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(new Date().setDate(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa5c797f025a835abd4', + FirstName: 'Newman', + LastName: 'Mathews', + Country: 'Italy', + Age: 60, + RegistererDate: new Date(lastYear - 1, 10, 9), + IsActive: true + }, + { + EmployeeID: '56250fa5fd5cd14418a9c790', + FirstName: 'Paul', + LastName: 'Harper', + Country: 'USA', + Age: 52, + RegistererDate: new Date(lastYear - 1, 5, 9), + IsActive: true + }, + { + EmployeeID: '56250fa56a88b994f0925d7c', + FirstName: 'Sharpe', + LastName: 'Blair', + Country: 'Canada', + Age: 41, + RegistererDate: new Date(new Date().setMonth(-3)), + IsActive: false + }, + { + EmployeeID: '56250fa53793e85f499fbf8b', + FirstName: 'Kirk', + LastName: 'Downs', + Country: 'USA', + Age: 58, + RegistererDate: new Date(lastYear, 7, 10), + IsActive: false + }, + { + EmployeeID: '56250fa581c03d4c735c0e8b', + FirstName: 'Abby', + LastName: 'Wheeler', + Country: 'Canada', + Age: 42, + RegistererDate: new Date(lastYear, 3, 28), + IsActive: false + }, + { + EmployeeID: '56250fa576d7ce7293fc09c6', + FirstName: 'Walter', + LastName: 'Roth', + Country: 'Canada', + Age: 36, + RegistererDate: new Date(lastYear, 7, 24), + IsActive: true + }, + { + EmployeeID: '56250fa5d88119d49b29d8ce', + FirstName: 'Pratt', + LastName: 'Mann', + Country: 'Canada', + Age: 40, + RegistererDate: new Date(lastYear, 7, 3), + IsActive: true + }, + { + EmployeeID: '56250fa52152c985dfbfcccb', + FirstName: 'Blackwell', + LastName: 'Randall', + Country: 'Italy', + Age: 20, + RegistererDate: new Date(new Date().setDate(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa51a20b01e6ed8f726', + FirstName: 'Linda', + LastName: 'Sanchez', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 7, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5330ca7347f162f06', + FirstName: 'Nieves', + LastName: 'Hampton', + Country: 'Italy', + Age: 27, + RegistererDate: new Date(lastYear - 1, 11, 10), + IsActive: false + }, + { + EmployeeID: '56250fa5afae141d6229d5b1', + FirstName: 'Pruitt', + LastName: 'Pace', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 11, 8), + IsActive: true + }, + { + EmployeeID: '56250fa5340a5a2c9124717b', + FirstName: 'Byrd', + LastName: 'Bailey', + Country: 'Canada', + Age: 20, + RegistererDate: new Date(lastYear - 1, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa5cf7613339d7e89ef', + FirstName: 'Hardy', + LastName: 'Terry', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear - 1, 6, 1), + IsActive: false + }, + { + EmployeeID: '56250fa566f393ab8dadba48', + FirstName: 'Millie', + LastName: 'Boyd', + Country: 'USA', + Age: 28, + RegistererDate: new Date(lastYear, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa58eeb7bba0116b2d5', + FirstName: 'Rosa', + LastName: 'Mercer', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 8, 18), + IsActive: true + }, + { + EmployeeID: '56250fa5f85bd1754870f53f', + FirstName: 'Blair', + LastName: 'Long', + Country: 'Canada', + Age: 21, + RegistererDate: new Date(lastYear - 1, 9, 26), + IsActive: false + }, + { + EmployeeID: '56250fa5a0b51fe08c3c767b', + FirstName: 'Whitfield', + LastName: 'Cherry', + Country: 'USA', + Age: 38, + RegistererDate: new Date(lastYear - 1, 4, 25), + IsActive: true + }, + { + EmployeeID: '56250fa5b4e64d93a5742a57', + FirstName: 'Cathryn', + LastName: 'Hunt', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 6, 16), + IsActive: true + }, + { + EmployeeID: '56250fa5fad324f0adefae2d', + FirstName: 'Morris', + LastName: 'Stout', + Country: 'Italy', + Age: 41, + RegistererDate: new Date(lastYear - 1, 3, 26), + IsActive: true + }, + { + EmployeeID: '56250fa59c7408d236d6a804', + FirstName: 'Vera', + LastName: 'Richardson', + Country: 'Canada', + Age: 32, + RegistererDate: new Date(lastYear - 1, 1, 2), + IsActive: false + }, + { + EmployeeID: '56250fa5d6cd5f712b557a0d', + FirstName: 'Shelton', + LastName: 'Henderson', + Country: 'Canada', + Age: 53, + RegistererDate: new Date(lastYear, 9, 6), + IsActive: true + }, + { + EmployeeID: '56250fa5a11af8868f285db6', + FirstName: 'Jimmie', + LastName: 'Cain', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear, 6, 5), + IsActive: true + }, + { + EmployeeID: '56250fa53c8439c4e5e7d864', + FirstName: 'Bryan', + LastName: 'Bradshaw', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(lastYear - 1, 8, 2), + IsActive: true + }, + { + EmployeeID: '56250fa5fc8d4f4859804c7e', + FirstName: 'Decker', + LastName: 'Kane', + Country: 'Canada', + Age: 29, + RegistererDate: new Date(lastYear - 1, 6, 7), + IsActive: false + }, + { + EmployeeID: '56250fa50158aa6a0fd162f2', + FirstName: 'Keisha', + LastName: 'Phelps', + Country: 'Canada', + Age: 34, + RegistererDate: new Date(lastYear - 1, 10, 11), + IsActive: true + }, + { + EmployeeID: '56250fa58ca7ea6c3dfe7830', + FirstName: 'West', + LastName: 'Frye', + Country: 'Italy', + Age: 40, + RegistererDate: new Date(lastYear - 1, 6, 25), + IsActive: false + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-custom/index.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/index.ts new file mode 100644 index 000000000..4fee15412 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-custom/index.ts @@ -0,0 +1,184 @@ +import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxCustomGridTemplate extends IgniteUIForAngularTemplate { + private userExtraConfiguration: {} = {}; + + constructor() { + super(__dirname); + this.components = ["Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "custom-grid"; + this.projectType = "igx-ts"; + this.name = "Custom Grid"; + this.description = "IgxGrid with optional features like sorting, filtering, editing, etc."; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" }, + { import: "IgxCheckboxModule", from: "<%=igxPackage%>" } + ]; + + this.hasExtraConfiguration = true; + } + + public setExtraConfiguration(extraConfigKeys: {}) { + this.userExtraConfiguration = extraConfigKeys; + } + + public getExtraConfiguration(): ControlExtraConfiguration[] { + return [{ + choices: ["Sorting", "Filtering", "Cell Editing", "Row Editing", "Group By", "Resizing", + "Row Selection", "Paging", "Column Pinning", "Column Moving", "Column Hiding"], + default: "", + key: "columnFeatures", + message: "Choose features for the igx-grid", + type: ControlExtraConfigType.MultiChoice + }]; + } + + public generateConfig(name: string, ...options: any[]): {[key: string]: any} { + const columnFeatures = []; + const columnBoolFeatures = []; + const gridFeatures = []; + const featureUrl = "https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/"; + const anchorWrapper = { + start: ``, + text: ``, + end: `` + }; + let checkBoxBind = `[checked]="cell.value" [disabled]="true"`; + const datePickerEditor = ""; + let selectedFeatures = ""; + let columnPinning = ""; + let groupByColumn = ""; + let additionalMarkup = ""; + /** starts with empty string to create a new line on join when something else is added */ + const additionalElements = [""]; + const toolbarActions = []; + + if (this.userExtraConfiguration["columnFeatures"]) { + const features = this.userExtraConfiguration["columnFeatures"] as string[]; + const featuresUrls = []; + for (const feature of this.userExtraConfiguration["columnFeatures"] as string[]) { + switch (feature) { + case "Sorting": + case "Filtering": + gridFeatures.push(`[allowFiltering]="true"`); + case "Resizing": + const text = `[${feature.toLowerCase().replace("ing", "able")}]="true"`; + columnFeatures.push(text); + columnBoolFeatures.push(text); + break; + case "Column Moving": + gridFeatures.push('[moving]="true"'); + break; + case "Column Hiding": + toolbarActions.push(" "); + break; + case "Cell Editing": + columnFeatures.push(`[editable]="true"`); + checkBoxBind = `[ngModel]="cell.value" (ngModelChange)="cell.update($event)"`; + // enable Date Picker, ngModel + // this.dependencies.push({ import: "IgxDatePickerModule", from: "<%=igxPackage%>" }); + this.dependencies.push({ import: "FormsModule", from: "@angular/forms" }); + // datePickerEditor = EOL + + // `` + EOL + + // ` ` + EOL + + // ` ` + EOL + + // ``; + // TODO: make a Util .pad() + // datePickerEditor = datePickerEditor.replace(/([\r\n]+)/g, `$&${" ".repeat(3)}`); + break; + case "Row Editing": + gridFeatures.push(`[rowEditable]="true"`); + this.dependencies.push({ import: "IgxDatePickerModule", from: "<%=igxPackage%>" }); + break; + case "Row Selection": + const gridFeatureText = `rowSelection="multiple"`; + gridFeatures.push(gridFeatureText); + break; + case "Paging": + additionalElements.push(` `); + break; + case "Column Pinning": + columnPinning = '[pinned]="true"'; + toolbarActions.push(" "); + break; + case "Group By": + groupByColumn = '[groupable]="true"'; + break; + } + switch (feature) { + case "Sorting": + case "Filtering": + case "Paging": + featuresUrls.push(`${featureUrl}${feature.toLocaleLowerCase()}`); + break; + case "Resizing": + featuresUrls.push(`${featureUrl}column-resizing`); + break; + case "Column Pinning": + featuresUrls.push(`${featureUrl}column-pinning`); + break; + case "Cell Editing": + featuresUrls.push(`${featureUrl}editing`); + break; + case "Row Editing": + featuresUrls.push(`${featureUrl}row-editing`); + break; + case "Column Moving": + featuresUrls.push(`${featureUrl}column-moving`); + break; + case "Column Hiding": + featuresUrls.push(`${featureUrl}column-hiding`); + break; + case "Row Selection": + featuresUrls.push(`${featureUrl}selection`); + break; + case "Group By": + featuresUrls.push(`${featureUrl}groupby`); + break; + } + } + selectedFeatures = features.map((e, i) => { + anchorWrapper.href = featuresUrls[i]; + anchorWrapper.text = e; + return ` ${anchorWrapper.start}${anchorWrapper.href}${anchorWrapper.middle}` + + `${anchorWrapper.text}${anchorWrapper.end}`; + }).toString(); + if (selectedFeatures.length > 0) { + selectedFeatures = `

Active Features: ${selectedFeatures}

`; + } + if (toolbarActions.length) { + const parts = [ + " ", + " Employees", + " ", + ...toolbarActions, + " ", + " " + ]; + additionalElements.splice(1, 0, parts.join("\n")); + } + additionalMarkup = additionalElements.join("\n"); + } + + const extraConfig = { + additionalMarkup, + checkBoxBind, + columnPinning, + datePickerEditor, + groupByColumn, + selectedFeatures, + columnBoolFeatures: columnBoolFeatures.join(" "), + columnFeatures: columnFeatures.join(" "), + gridFeatures: gridFeatures.join(" ") + }; + return super.generateConfig(name, { extraConfig }); + } +} +module.exports = new IgxCustomGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..4d4bce593 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,46 @@ +

igx-grid component with a predefined set of default summaries and a custom summary.

+

You can read more about configuring the igx-grid summaries feature in the + README or the + official documentation. +

+ + + + + {{col.field}} + functions + + + + + {{col.field}} + functions + + + + + {{col.field}} + functions + + + + + {{col.field}} + functions + + + + + {{col.field}} + functions + + + + + {{col.field}} + functions + + + + diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..c45b1b782 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,17 @@ +.igx-grid__th-title { + display: flex; + justify-content: space-between; + align-items: center; +} + +.header-icon { + font-size: 1.4em; + width: 1.1em; + height: 1.1em; + float: right; + cursor: pointer; +} + +.summary-color { + color: #731963; +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..182602bbf --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxGridModule] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..6cef43d3f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,58 @@ +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { IgxDateSummaryOperand, IgxGridComponent, IgxSummaryResult } from '<%=igxPackage%>'; +import { Employee, employeesData } from './localData'; + +@Component({ + encapsulation: ViewEncapsulation.None, + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + @ViewChild('sampleGrid', { static: true, read: IgxGridComponent }) + public sampleGrid!: IgxGridComponent; + public customDateSummary = CustomDateSummary; + + public localData!: Employee[]; + title = 'Grid Summaries'; + + ngOnInit(): void { + this.localData = employeesData; + } + + public formatDate(value: Date): string { + return value.toLocaleDateString(); + } + + public toggleSummary(name: string): void { + if (this.sampleGrid.getColumnByName(name).hasSummary) { + this.sampleGrid.disableSummaries(name); + } else { + this.sampleGrid.enableSummaries(name); + } + } +} + +class CustomDateSummary extends IgxDateSummaryOperand { + constructor() { + super(); + } + public override operate(data?: Date[]): IgxSummaryResult[] { + const result: IgxSummaryResult[] = []; + if (!data) { + return result; + } + result.push({ + key: 'earliest', + label: 'Earliest Date', + summaryResult: data.length ? (IgxDateSummaryOperand.earliest(data)).toLocaleDateString() : null + }); + result.push({ + key: 'latest', + label: 'Latest Date', + summaryResult: data.length ? (IgxDateSummaryOperand.latest(data)).toLocaleDateString() : null + }); + + return result; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/localData.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/localData.ts new file mode 100644 index 000000000..cda12c1fa --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/files/src/app/__path__/localData.ts @@ -0,0 +1,354 @@ +export interface Employee { + EmployeeID: string; + FirstName: string; + LastName: string; + Country: string; + Age: number; + RegistererDate: Date; + IsActive: boolean; +} + +const lastYear = new Date().getFullYear() - 1; +export const employeesData: Employee[] = [ + { + EmployeeID: '56250fa57ab1535722e564a6', + FirstName: 'Downs', + LastName: 'Holcomb', + Country: 'Italy', + Age: 35, + RegistererDate: new Date(lastYear, 7, 25), + IsActive: false + }, + { + EmployeeID: '56250fa5c0fd04f12555d44d', + FirstName: 'Mckenzie', + LastName: 'Calderon', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 9, 22), + IsActive: false + }, + { + EmployeeID: '56250fa565a7bcc21f6bd15e', + FirstName: 'Howell', + LastName: 'Hawkins', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear, 8, 8), + IsActive: false + }, + { + EmployeeID: '56250fa5d71a83c33f3f6479', + FirstName: 'Sheppard', + LastName: 'Nicholson', + Country: 'Italy', + Age: 49, + RegistererDate: new Date(lastYear - 1, 6, 28), + IsActive: false + }, + { + EmployeeID: '56250fa546abbe8c616d37eb', + FirstName: 'Bettye', + LastName: 'Trujillo', + Country: 'Canada', + Age: 37, + RegistererDate: new Date(new Date().setDate(-20)), + IsActive: false + }, + { + EmployeeID: '56250fa535809820f2c44291', + FirstName: 'Joyce', + LastName: 'Vaughan', + Country: 'USA', + Age: 48, + RegistererDate: new Date(lastYear - 1, 4, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5732f6adc0b52ace0', + FirstName: 'Janine', + LastName: 'Munoz', + Country: 'USA', + Age: 59, + RegistererDate: new Date(lastYear - 1, 2, 9), + IsActive: true + }, + { + EmployeeID: '56250fa540b15dfd507cffb9', + FirstName: 'Betsy', + LastName: 'Short', + Country: 'USA', + Age: 26, + RegistererDate: new Date(new Date().setMonth(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa5a33146a85fdeda66', + FirstName: 'Tanisha', + LastName: 'Harrington', + Country: 'USA', + Age: 31, + RegistererDate: new Date(lastYear - 1, 11, 25), + IsActive: false + }, + { + EmployeeID: '56250fa572bea435113bb3be', + FirstName: 'French', + LastName: 'Sullivan', + Country: 'Italy', + Age: 37, + RegistererDate: new Date(new Date().setMonth(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa55f17965b7b19e3cf', + FirstName: 'Gomez', + LastName: 'Sandoval', + Country: 'Italy', + Age: 24, + RegistererDate: new Date(lastYear - 1, 6, 19), + IsActive: true + }, + { + EmployeeID: '56250fa5f630e559e163de06', + FirstName: 'Estes', + LastName: 'Soto', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(new Date().setDate(-2)), + IsActive: true + }, + { + EmployeeID: '56250fa5c797f025a835abd4', + FirstName: 'Newman', + LastName: 'Mathews', + Country: 'Italy', + Age: 60, + RegistererDate: new Date(lastYear - 1, 10, 9), + IsActive: true + }, + { + EmployeeID: '56250fa5fd5cd14418a9c790', + FirstName: 'Paul', + LastName: 'Harper', + Country: 'USA', + Age: 52, + RegistererDate: new Date(lastYear - 1, 5, 9), + IsActive: true + }, + { + EmployeeID: '56250fa56a88b994f0925d7c', + FirstName: 'Sharpe', + LastName: 'Blair', + Country: 'Canada', + Age: 41, + RegistererDate: new Date(new Date().setMonth(-3)), + IsActive: false + }, + { + EmployeeID: '56250fa53793e85f499fbf8b', + FirstName: 'Kirk', + LastName: 'Downs', + Country: 'USA', + Age: 58, + RegistererDate: new Date(lastYear, 7, 10), + IsActive: false + }, + { + EmployeeID: '56250fa581c03d4c735c0e8b', + FirstName: 'Abby', + LastName: 'Wheeler', + Country: 'Canada', + Age: 42, + RegistererDate: new Date(lastYear, 3, 28), + IsActive: false + }, + { + EmployeeID: '56250fa576d7ce7293fc09c6', + FirstName: 'Walter', + LastName: 'Roth', + Country: 'Canada', + Age: 36, + RegistererDate: new Date(lastYear, 7, 24), + IsActive: true + }, + { + EmployeeID: '56250fa5d88119d49b29d8ce', + FirstName: 'Pratt', + LastName: 'Mann', + Country: 'Canada', + Age: 40, + RegistererDate: new Date(lastYear, 7, 3), + IsActive: true + }, + { + EmployeeID: '56250fa52152c985dfbfcccb', + FirstName: 'Blackwell', + LastName: 'Randall', + Country: 'Italy', + Age: 20, + RegistererDate: new Date(new Date().setDate(-1)), + IsActive: true + }, + { + EmployeeID: '56250fa51a20b01e6ed8f726', + FirstName: 'Linda', + LastName: 'Sanchez', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 7, 24), + IsActive: false + }, + { + EmployeeID: '56250fa5330ca7347f162f06', + FirstName: 'Nieves', + LastName: 'Hampton', + Country: 'Italy', + Age: 27, + RegistererDate: new Date(lastYear - 1, 11, 10), + IsActive: false + }, + { + EmployeeID: '56250fa5afae141d6229d5b1', + FirstName: 'Pruitt', + LastName: 'Pace', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 11, 8), + IsActive: true + }, + { + EmployeeID: '56250fa5340a5a2c9124717b', + FirstName: 'Byrd', + LastName: 'Bailey', + Country: 'Canada', + Age: 20, + RegistererDate: new Date(lastYear - 1, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa5cf7613339d7e89ef', + FirstName: 'Hardy', + LastName: 'Terry', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear - 1, 6, 1), + IsActive: false + }, + { + EmployeeID: '56250fa566f393ab8dadba48', + FirstName: 'Millie', + LastName: 'Boyd', + Country: 'USA', + Age: 28, + RegistererDate: new Date(lastYear, 7, 7), + IsActive: false + }, + { + EmployeeID: '56250fa58eeb7bba0116b2d5', + FirstName: 'Rosa', + LastName: 'Mercer', + Country: 'Canada', + Age: 25, + RegistererDate: new Date(lastYear - 1, 8, 18), + IsActive: true + }, + { + EmployeeID: '56250fa5f85bd1754870f53f', + FirstName: 'Blair', + LastName: 'Long', + Country: 'Canada', + Age: 21, + RegistererDate: new Date(lastYear - 1, 9, 26), + IsActive: false + }, + { + EmployeeID: '56250fa5a0b51fe08c3c767b', + FirstName: 'Whitfield', + LastName: 'Cherry', + Country: 'USA', + Age: 38, + RegistererDate: new Date(lastYear - 1, 4, 25), + IsActive: true + }, + { + EmployeeID: '56250fa5b4e64d93a5742a57', + FirstName: 'Cathryn', + LastName: 'Hunt', + Country: 'USA', + Age: 26, + RegistererDate: new Date(lastYear - 1, 6, 16), + IsActive: true + }, + { + EmployeeID: '56250fa5fad324f0adefae2d', + FirstName: 'Morris', + LastName: 'Stout', + Country: 'Italy', + Age: 41, + RegistererDate: new Date(lastYear - 1, 3, 26), + IsActive: true + }, + { + EmployeeID: '56250fa59c7408d236d6a804', + FirstName: 'Vera', + LastName: 'Richardson', + Country: 'Canada', + Age: 32, + RegistererDate: new Date(lastYear - 1, 1, 2), + IsActive: false + }, + { + EmployeeID: '56250fa5d6cd5f712b557a0d', + FirstName: 'Shelton', + LastName: 'Henderson', + Country: 'Canada', + Age: 53, + RegistererDate: new Date(lastYear, 9, 6), + IsActive: true + }, + { + EmployeeID: '56250fa5a11af8868f285db6', + FirstName: 'Jimmie', + LastName: 'Cain', + Country: 'USA', + Age: 45, + RegistererDate: new Date(lastYear, 6, 5), + IsActive: true + }, + { + EmployeeID: '56250fa53c8439c4e5e7d864', + FirstName: 'Bryan', + LastName: 'Bradshaw', + Country: 'Canada', + Age: 24, + RegistererDate: new Date(lastYear - 1, 8, 2), + IsActive: true + }, + { + EmployeeID: '56250fa5fc8d4f4859804c7e', + FirstName: 'Decker', + LastName: 'Kane', + Country: 'Canada', + Age: 29, + RegistererDate: new Date(lastYear - 1, 6, 7), + IsActive: false + }, + { + EmployeeID: '56250fa50158aa6a0fd162f2', + FirstName: 'Keisha', + LastName: 'Phelps', + Country: 'Canada', + Age: 34, + RegistererDate: new Date(lastYear - 1, 10, 11), + IsActive: true + }, + { + EmployeeID: '56250fa58ca7ea6c3dfe7830', + FirstName: 'West', + LastName: 'Frye', + Country: 'Italy', + Age: 40, + RegistererDate: new Date(lastYear - 1, 6, 25), + IsActive: false + }]; diff --git a/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/index.ts b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/index.ts new file mode 100644 index 000000000..e61a236fd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/grid-summaries/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "grid-summaries"; + this.projectType = "igx-ts"; + this.name = "Grid Summaries"; + this.description = "Sample IgxGrid with summaries feature"; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" }, + { import: "IgxIconModule", from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/grid/index.ts b/packages/igx-templates/igx-ts-legacy/grid/index.ts new file mode 100644 index 000000000..8767aefa0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/index.ts @@ -0,0 +1,12 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxGridComponent extends BaseComponent { + constructor() { + super(__dirname); + this.name = "Grid"; + this.group = "Grids & Lists"; + this.description = "pick from grids: basic or custom"; + this.groupPriority = 10; + } +} +module.exports = new IgxGridComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..39a53375b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,30 @@ +

<%=description%>

+

You can read more about configuring the igx-grid component in the + README or the + official documentation. +

+ +

Active features: <%=selectedFeatures%>

+ > + field="ID"> + header="General Information"> + field="CompanyName"> + header="Person Details"> + field="ContactName"> + field="ContactTitle"> + + + + header="Location"> + field="Country"> + field="Region"> + field="City"> + field="Address"> + + header="Contact Information"> + field="Phone"> + [resizable]="true" field="Fax"> + [resizable]="true" field="PostalCode"> + + <%=additionalMarkup%> + diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..29bec9fa9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxCheckboxModule, IgxDatePickerModule, IgxGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..21b594b48 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; +import { Company, localData } from './localData'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + public localData: Company[] = []; + title = '<%=name%>'; + + ngOnInit(): void { + this.localData = localData; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/localData.ts b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/localData.ts new file mode 100644 index 000000000..4c9dd270b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/files/src/app/__path__/localData.ts @@ -0,0 +1,367 @@ +export interface Company { + ID: string; + CompanyName: string; + ContactName: string; + ContactTitle: string; + Address: string; + City: string; + Region: string | null; + PostalCode: string; + Country: string; + Phone: string; + Fax: string | null; +} + +export const localData: Company[] = [ + { + ID: 'ALFKI', + CompanyName: 'Alfreds Futterkiste', + ContactName: 'Maria Anders', + ContactTitle: 'Sales Representative', + Address: 'Obere Str. 57', + City: 'Berlin', + Region: null, + PostalCode: '12209', + Country: 'Germany', + Phone: '030-0074321', + Fax: '030-0076545' + }, + { + ID: 'ANATR', + CompanyName: 'Ana Trujillo Emparedados y helados', + ContactName: 'Ana Trujillo', + ContactTitle: 'Owner', + Address: 'Avda. de la Constitución 2222', + City: 'México D.F.', + Region: null, + PostalCode: '05021', + Country: 'Mexico', + Phone: '(5) 555-4729', + Fax: '(5) 555-3745' + }, + { + ID: 'ANTON', + CompanyName: 'Antonio Moreno Taquería', + ContactName: 'Antonio Moreno', + ContactTitle: 'Owner', + Address: 'Mataderos 2312', + City: 'México D.F.', + Region: null, + PostalCode: '05023', + Country: 'Mexico', + Phone: '(5) 555-3932', + Fax: null + }, + { + ID: 'AROUT', + CompanyName: 'Around the Horn', + ContactName: 'Thomas Hardy', + ContactTitle: 'Sales Representative', + Address: '120 Hanover Sq.', + City: 'London', + Region: null, + PostalCode: 'WA1 1DP', + Country: 'UK', + Phone: '(171) 555-7788', + Fax: '(171) 555-6750' + }, + { + ID: 'BERGS', + CompanyName: 'Berglunds snabbköp', + ContactName: 'Christina Berglund', + ContactTitle: 'Order Administrator', + Address: 'Berguvsvägen 8', + City: 'Luleå', + Region: null, + PostalCode: 'S-958 22', + Country: 'Sweden', + Phone: '0921-12 34 65', + Fax: '0921-12 34 67' + }, + { + ID: 'BLAUS', + CompanyName: 'Blauer See Delikatessen', + ContactName: 'Hanna Moos', + ContactTitle: 'Sales Representative', + Address: 'Forsterstr. 57', + City: 'Mannheim', + Region: null, + PostalCode: '68306', + Country: 'Germany', + Phone: '0621-08460', + Fax: '0621-08924' + }, + { + ID: 'BLONP', + CompanyName: 'Blondesddsl père et fils', + ContactName: 'Frédérique Citeaux', + ContactTitle: 'Marketing Manager', + Address: '24,place Kléber', + City: 'Strasbourg', + Region: null, + PostalCode: '67000', + Country: 'France', + Phone: '88.60.15.31', + Fax: '88.60.15.32' + }, + { + ID: 'BOLID', + CompanyName: 'Bólido Comidas preparadas', + ContactName: 'Martín Sommer', + ContactTitle: 'Owner', + Address: 'C/ Araquil,67', + City: 'Madrid', + Region: null, + PostalCode: '28023', + Country: 'Spain', + Phone: '(91) 555 22 82', + Fax: '(91) 555 91 99' + }, + { + ID: 'BONAP', + CompanyName: 'Bon app\'', + ContactName: 'Laurence Lebihan', + ContactTitle: 'Owner', + Address: '12,rue des Bouchers', + City: 'Marseille', + Region: null, + PostalCode: '13008', + Country: 'France', + Phone: '91.24.45.40', + Fax: '91.24.45.41' + }, + { + ID: 'BOTTM', + CompanyName: 'Bottom-Dollar Markets', + ContactName: 'Elizabeth Lincoln', + ContactTitle: 'Accounting Manager', + Address: '23 Tsawassen Blvd.', + City: 'Tsawassen', + Region: 'BC', + PostalCode: 'T2F 8M4', + Country: 'Canada', + Phone: '(604) 555-4729', + Fax: '(604) 555-3745' + }, + { + ID: 'BSBEV', + CompanyName: 'B\'s Beverages', + ContactName: 'Victoria Ashworth', + ContactTitle: 'Sales Representative', + Address: 'Fauntleroy Circus', + City: 'London', + Region: null, + PostalCode: 'EC2 5NT', + Country: 'UK', + Phone: '(171) 555-1212', + Fax: null + }, + { + ID: 'CACTU', + CompanyName: 'Cactus Comidas para llevar', + ContactName: 'Patricio Simpson', + ContactTitle: 'Sales Agent', + Address: 'Cerrito 333', + City: 'Buenos Aires', + Region: null, + PostalCode: '1010', + Country: 'Argentina', + Phone: '(1) 135-5555', + Fax: '(1) 135-4892' + }, + { + ID: 'CENTC', + CompanyName: 'Centro comercial Moctezuma', + ContactName: 'Francisco Chang', + ContactTitle: 'Marketing Manager', + Address: 'Sierras de Granada 9993', + City: 'México D.F.', + Region: null, + PostalCode: '05022', + Country: 'Mexico', + Phone: '(5) 555-3392', + Fax: '(5) 555-7293' + }, + { + ID: 'CHOPS', + CompanyName: 'Chop-suey Chinese', + ContactName: 'Yang Wang', + ContactTitle: 'Owner', + Address: 'Hauptstr. 29', + City: 'Bern', + Region: null, + PostalCode: '3012', + Country: 'Switzerland', + Phone: '0452-076545', + Fax: null + }, + { + ID: 'COMMI', + CompanyName: 'Comércio Mineiro', + ContactName: 'Pedro Afonso', + ContactTitle: 'Sales Associate', + Address: 'Av. dos Lusíadas,23', + City: 'Sao Paulo', + Region: 'SP', + PostalCode: '05432-043', + Country: 'Brazil', + Phone: '(11) 555-7647', + Fax: null + }, + { + ID: 'CONSH', + CompanyName: 'Consolidated Holdings', + ContactName: 'Elizabeth Brown', + ContactTitle: 'Sales Representative', + Address: 'Berkeley Gardens 12 Brewery', + City: 'London', + Region: null, + PostalCode: 'WX1 6LT', + Country: 'UK', + Phone: '(171) 555-2282', + Fax: '(171) 555-9199' + }, + { + ID: 'DRACD', + CompanyName: 'Drachenblut Delikatessen', + ContactName: 'Sven Ottlieb', + ContactTitle: 'Order Administrator', + Address: 'Walserweg 21', + City: 'Aachen', + Region: null, + PostalCode: '52066', + Country: 'Germany', + Phone: '0241-039123', + Fax: '0241-059428' + }, + { + ID: 'DUMON', + CompanyName: 'Du monde entier', + ContactName: 'Janine Labrune', + ContactTitle: 'Owner', + Address: '67, rue des Cinquante Otages', + City: 'Nantes', + Region: null, + PostalCode: '44000', + Country: 'France', + Phone: '40.67.88.88', + Fax: '40.67.89.89' + }, + { + ID: 'EASTC', + CompanyName: 'Eastern Connection', + ContactName: 'Ann Devon', + ContactTitle: 'Sales Agent', + Address: '35 King George', + City: 'London', + Region: null, + PostalCode: 'WX3 6FW', + Country: 'UK', + Phone: '(171) 555-0297', + Fax: '(171) 555-3373' + }, + { + ID: 'ERNSH', + CompanyName: 'Ernst Handel', + ContactName: 'Roland Mendel', + ContactTitle: 'Sales Manager', + Address: 'Kirchgasse 6', + City: 'Graz', + Region: null, + PostalCode: '8010', + Country: 'Austria', + Phone: '7675-3425', + Fax: '7675-3426' + }, + { + ID: 'FAMIA', + CompanyName: 'Familia Arquibaldo', + ContactName: 'Aria Cruz', + ContactTitle: 'Marketing Assistant', + Address: 'Rua Orós, 92', + City: 'Sao Paulo', + Region: 'SP', + PostalCode: '05442-030', + Country: 'Brazil', + Phone: '(11) 555-9857', + Fax: null + }, + { + ID: 'FISSA', + CompanyName: 'FISSA Fabrica Inter. Salchichas S.A.', + ContactName: 'Diego Roel', + ContactTitle: 'Accounting Manager', + Address: 'C/ Moralzarzal, 86', + City: 'Madrid', + Region: null, + PostalCode: '28034', + Country: 'Spain', + Phone: '(91) 555 94 44', + Fax: '(91) 555 55 93' + }, + { + ID: 'FOLIG', + CompanyName: 'Folies gourmandes', + ContactName: 'Martine Rancé', + ContactTitle: 'Assistant Sales Agent', + Address: '184, chaussée de Tournai', + City: 'Lille', + Region: null, + PostalCode: '59000', + Country: 'France', + Phone: '20.16.10.16', + Fax: '20.16.10.17' + }, + { + ID: 'FOLKO', + CompanyName: 'Folk och fä HB', + ContactName: 'Maria Larsson', + ContactTitle: 'Owner', + Address: 'Åkergatan 24', + City: 'Bräcke', + Region: null, + PostalCode: 'S-844 67', + Country: 'Sweden', + Phone: '0695-34 67 21', + Fax: null + }, + { + ID: 'FRANK', + CompanyName: 'Frankenversand', + ContactName: 'Peter Franken', + ContactTitle: 'Marketing Manager', + Address: 'Berliner Platz 43', + City: 'München', + Region: null, + PostalCode: '80805', + Country: 'Germany', + Phone: '089-0877310', + Fax: '089-0877451' + }, + { + ID: 'FRANR', + CompanyName: 'France restauration', + ContactName: 'Carine Schmitt', + ContactTitle: 'Marketing Manager', + Address: '54, rue Royale', + City: 'Nantes', + Region: null, + PostalCode: '44000', + Country: 'France', + Phone: '40.32.21.21', + Fax: '40.32.21.20' + }, + { + ID: 'FRANS', + CompanyName: 'Franchi S.p.A.', + ContactName: 'Paolo Accorti', + ContactTitle: 'Sales Representative', + Address: 'Via Monte Bianco 34', + City: 'Torino', + Region: null, + PostalCode: '10100', + Country: 'Italy', + Phone: '011-4988260', + Fax: '011-4988261' + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/index.ts b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/index.ts new file mode 100644 index 000000000..2cf79b0d1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/grid/multi-column-headers/index.ts @@ -0,0 +1,85 @@ +import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxMultiColumnHeadersTemplate extends IgniteUIForAngularTemplate { + private userExtraConfiguration: {} = {}; + + constructor() { + super(__dirname); + this.components = ["Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "grid-multi-column-headers"; + this.projectType = "igx-ts"; + this.name = "Multi Column Headers"; + this.description = "IgxGrid with multiple header columns."; + this.dependencies = [ + { import: "IgxGridModule", from: "<%=igxPackage%>" }, + { import: "IgxCheckboxModule", from: "<%=igxPackage%>" }, + { import: "FormsModule", from: "@angular/forms" } + ]; + + this.hasExtraConfiguration = true; + } + + public setExtraConfiguration(extraConfigKeys: {}) { + this.userExtraConfiguration = extraConfigKeys; + } + + public getExtraConfiguration(): ControlExtraConfiguration[] { + return [{ + choices: ["Sorting", "Filtering", "Resizing", "Paging", "Column Pinning", "Moving"], + default: "", + key: "columnFeatures", + message: "Choose features for the igx-grid", + type: ControlExtraConfigType.MultiChoice + }]; + } + + public generateConfig(name: string, ...options: any[]): {[key: string]: any} { + const columnFeatures = []; + const columnBoolFeatures = []; + const gridFeatures = []; + /** starts with empty string to create a new line on join when something else is added */ + const additionalElements = [""]; + let additionalMarkup = ""; + const checkBoxBind = `[checked]="cell.value" [disabled]="true"`; + let selectedFeatures = ""; + + if (this.userExtraConfiguration["columnFeatures"]) { + const features = this.userExtraConfiguration["columnFeatures"] as string[]; + for (const feature of this.userExtraConfiguration["columnFeatures"] as string[]) { + switch (feature) { + case "Sorting": + case "Filtering": + case "Resizing": + case "Moving": + const text = `[${feature.toLowerCase().replace("ing", "able")}]="true"`; + columnFeatures.push(text); + columnBoolFeatures.push(text); + break; + case "Row Selection": + const gridFeatureText = `rowSelection="multiple"`; + gridFeatures.push(gridFeatureText); + break; + case "Paging": + additionalElements.push(` `); + break; + } + } + selectedFeatures = features.join(", "); + additionalMarkup = additionalElements.join("\n"); + } + + const extraConfig = { + additionalMarkup, + checkBoxBind, + selectedFeatures, + columnBoolFeatures: columnBoolFeatures.join(" "), + columnFeatures: columnFeatures.join(" "), + gridFeatures: gridFeatures.join(" ") + }; + return super.generateConfig(name, { extraConfig }); + } +} +module.exports = new IgxMultiColumnHeadersTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/groups.json b/packages/igx-templates/igx-ts-legacy/groups.json new file mode 100644 index 000000000..27a526269 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/groups.json @@ -0,0 +1,10 @@ +{ + "Grids & Lists": "display data sets with feature rich Grids, Combo or List.", + "Charts": "high-performance data visualization for category and financial data.", + "Maps": "display data that contains geographic locations from view models or geo-spatial data.", + "Gauges": "scale measure Controls including Linear and Radial Gauge and Bullet Graph.", + "Data Entry & Display": "contains Progress Bars, Button, Drop Down, Checkbox, Label & Input, etc.", + "Interactions": "includes Dialog Window, Slider, Toggle, Overlay, Ripple, etc.", + "Layouts": "content layout building blocks such as Dock Manager, Bottom Navigation and Carousel.", + "Scheduling": "date and time controls including Calendar, Date and Time pickers." +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..f6df67e94 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,25 @@ +

IgxHierarchicalGrid with basic configuration.

+

You can read more about configuring the igx-hierarchical-gird component in the + README or the + official documentation.

+ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..0c1f3c3e7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxHierarchicalGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component ], + imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..4e326d0cd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { ARTISTS, Artist } from './data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public localData: Artist[] = ARTISTS; +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/data.ts new file mode 100644 index 000000000..58b560d6a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/files/src/app/__path__/data.ts @@ -0,0 +1,1038 @@ +export interface Artist { + Artist: string; + HasGrammyAward: boolean; + Debut: number; + GrammyNominations: number; + GrammyAwards: number; + Albums?: Album[]; +} + +export interface Album { + Album: string; + LaunchDate: Date; + BillboardReview: number; + USBillboard200: number; + Artist: string; + Songs?: Song[]; +} + +export interface Song { + TrackNumber: number; + Title: string; + Released: string; + Genre: string; + Album: string; +} + +export const ARTISTS: Artist[] = [ + { + Artist: "Naomí Yepes", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 6, + GrammyAwards: 0, + Albums: [ + { + Album: "Initiation", + LaunchDate: new Date("September 3, 2013"), + BillboardReview: 86, + USBillboard200: 1, + Artist: "Naomí Yepes" + }, + { + Album: "Dream Driven", + LaunchDate: new Date("August 25, 2014"), + BillboardReview: 81, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: 1, + Title: "Intro", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 2, + Title: "Ferocious", + Released: "28-Apr-2014", + Genre: "Dance-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 3, + Title: "Going crazy", + Released: "10-Feb-2015", + Genre: "Dance-pop EDM", + Album: "Dream Driven" + }, + { + TrackNumber: 4, + Title: "Future past", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 5, + Title: "Roaming like them", + Released: "2-Jul-2014", + Genre: "Electro house Electropop", + Album: "Dream Driven" + }, + { + TrackNumber: 6, + Title: "Last Wishes", + Released: "12-Aug-2014", + Genre: "R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 7, + Title: "Stay where you are", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 8, + Title: "Imaginarium", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 9, + Title: "Tell me", + Released: "30-Sep-2014", + Genre: "Synth-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 10, + Title: "Shredded into pieces", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 11, + Title: "Capture this moment", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 12, + Title: "Dream Driven", + Released: "*", + Genre: "*", + Album: "Dream Driven" + } + ] + }, + { + Album: "The dragon journey", + LaunchDate: new Date("May 20, 2016"), + BillboardReview: 60, + USBillboard200: 2, + Artist: "Naomí Yepes" + }, + { + Album: "Organic me", + LaunchDate: new Date("August 17, 2018"), + BillboardReview: 82, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: 1, + Title: "I Love", + Released: "11-May-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + }, + { + TrackNumber: 2, + Title: "Early Morning Compass", + Released: "15-Jan-2020", + Genre: "mystical parody-bap ", + Album: "Organic me" + }, + { + TrackNumber: 3, + Title: "Key Fields Forever", + Released: "2-Jan-2020", + Genre: "Dance-pop EDM", + Album: "Organic me" + }, + { + TrackNumber: 4, + Title: "Stand by Your Goblins", + Released: "20-Nov-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 5, + Title: "Mad to Walk", + Released: "12-May-2019", + Genre: "Electro house Electropop", + Album: "Organic me" + }, + { + TrackNumber: 6, + Title: "Alice's Waiting", + Released: "28-Jan-2020", + Genre: "R&B", + Album: "Organic me" + }, + { + TrackNumber: 7, + Title: "We Shall Kiss", + Released: "30-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 8, + Title: "Behind Single Ants", + Released: "2-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 9, + Title: "Soap Autopsy", + Released: "8-Aug-2019", + Genre: "Synth-pop R&B", + Album: "Organic me" + }, + { + TrackNumber: 10, + Title: "Have You Met Rich?", + Released: "1-Jul-2019", + Genre: "ethno-tunes", + Album: "Organic me" + }, + { + TrackNumber: 11, + Title: "Livin' on a Banana", + Released: "22-Nov-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + } + ] + }, + { + Album: "Curiosity", + LaunchDate: new Date("December 7, 2019"), + BillboardReview: 75, + USBillboard200: 12, + Artist: "Naomí Yepes" + } + ] + }, + { + Artist: "Babila Ebwélé", + HasGrammyAward: true, + Debut: 2009, + GrammyNominations: 0, + GrammyAwards: 11, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("May 31, 2000"), + BillboardReview: 86, + USBillboard200: 42, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: 1, + Title: "Wood Shavings Forever", + Released: "9-Jun-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 2, + Title: "Early Morning Drive", + Released: "20-May-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 3, + Title: "Don't Natter", + Released: "10-Jun-2019", + Genre: "adult calypso-industrial", + Album: "Pushing up daisies" + }, + { + TrackNumber: 4, + Title: "Stairway to Balloons", + Released: "18-Jun-2019", + Genre: "calypso and mariachi", + Album: "Pushing up daisies" + }, + { + TrackNumber: 5, + Title: "The Number of your Apple", + Released: "29-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 6, + Title: "Your Delightful Heart", + Released: "24-Feb-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 7, + Title: "Nice Weather For Balloons", + Released: "1-Aug-2019", + Genre: "rap-hop", + Album: "Pushing up daisies" + }, + { + TrackNumber: 8, + Title: "The Girl From Cornwall", + Released: "4-May-2019", + Genre: "enigmatic rock-and-roll", + Album: "Pushing up daisies" + }, + { + TrackNumber: 9, + Title: "Here Without Jack", + Released: "24-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 10, + Title: "Born Rancid", + Released: "19-Mar-2019", + Genre: "*", + Album: "Pushing up daisies" + } + ] + }, + { + Album: "Death's dead", + LaunchDate: new Date("June 8, 2016"), + BillboardReview: 85, + USBillboard200: 95, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: 1, + Title: "Men Sound Better With You", + Released: "20-Oct-2019", + Genre: "rap-hop", + Album: "Death's dead" + }, + { + TrackNumber: 2, + Title: "Ghost in My Rod", + Released: "5-Oct-2019", + Genre: "enigmatic rock-and-roll", + Album: "Death's dead" + }, + { + TrackNumber: 3, + Title: "Bed of Men", + Released: "14-Nov-2019", + Genre: "whimsical comedy-grass ", + Album: "Death's dead" + }, + { + TrackNumber: 4, + Title: "Don't Push", + Released: "2-Jan-2020", + Genre: "unblack electronic-trip-hop", + Album: "Death's dead" + }, + { + TrackNumber: 5, + Title: "Nice Weather For Men", + Released: "18-Dec-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 6, + Title: "Rancid Rhapsody", + Released: "10-Mar-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 7, + Title: "Push, Push, Push!", + Released: "21-Feb-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 8, + Title: "My Name is Sarah", + Released: "15-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 9, + Title: "The Girl From My Hotel", + Released: "6-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 10, + Title: "Free Box", + Released: "18-Apr-2019", + Genre: "splitter-funk", + Album: "Death's dead" + }, + { + TrackNumber: 11, + Title: "Hotel Cardiff", + Released: "30-Dec-2019", + Genre: "guilty pleasure ebm", + Album: "Death's dead" + } + ] + } + ] + }, + { + Artist: "Ahmad Nazeri", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 3, + GrammyAwards: 1, + Albums: [ + { + Album: "Emergency", + LaunchDate: new Date("March 6, 2004"), + BillboardReview: 98, + USBillboard200: 69, + Artist: "Ahmad Nazeri" + }, + { + Album: "Bursting bubbles", + LaunchDate: new Date("April 17, 2006"), + BillboardReview: 69, + USBillboard200: 39, + Artist: "Ahmad Nazeri" + } + ] + }, + { + Artist: "Kimmy McIlmorie", + HasGrammyAward: true, + Debut: 2007, + GrammyNominations: 21, + GrammyAwards: 3, + Albums: [ + { + Album: "Here we go again", + LaunchDate: new Date("November 18, 2017"), + BillboardReview: 68, + USBillboard200: 1, + Artist: "Kimmy McIlmorie" + } + ] + }, + { + Artist: "Mar Rueda", + HasGrammyAward: true, + Debut: 1996, + GrammyNominations: 14, + GrammyAwards: 2 + }, + { + Artist: "Izabella Tabakova", + HasGrammyAward: true, + Debut: 2017, + GrammyNominations: 7, + GrammyAwards: 11, + Albums: [ + { + Album: "Once bitten", + LaunchDate: new Date("July 16, 2007"), + BillboardReview: 79, + USBillboard200: 53, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: 1, + Title: "Whole Lotta Super Cats", + Released: "21-May-2019", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 2, + Title: "Enter Becky", + Released: "16-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 3, + Title: "Your Cheatin' Flamingo", + Released: "14-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 4, + Title: "Mad to Kiss", + Released: "6-Nov-2019", + Genre: "Synth-pop R&B", + Album: "Once bitten" + }, + { + TrackNumber: 5, + Title: "Hotel Prague", + Released: "20-Oct-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + }, + { + TrackNumber: 6, + Title: "Jail on My Mind", + Released: "31-May-2019", + Genre: "Crunk reggaeton", + Album: "Once bitten" + }, + { + TrackNumber: 7, + Title: "Amazing Blues", + Released: "29-May-2019", + Genre: "mystical parody-bap ", + Album: "Once bitten" + }, + { + TrackNumber: 8, + Title: "Goody Two Iron Filings", + Released: "4-Jul-2019", + Genre: "Electro house Electropop", + Album: "Once bitten" + }, + { + TrackNumber: 9, + Title: "I Love in Your Arms", + Released: "7-Jun-2019", + Genre: "R&B", + Album: "Once bitten" + }, + { + TrackNumber: 10, + Title: "Truly Madly Amazing", + Released: "12-Sep-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + } + ] + }, + { + Album: "Your graciousness", + LaunchDate: new Date("November 17, 2004"), + BillboardReview: 69, + USBillboard200: 30, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: 1, + Title: "We Shall Tickle", + Released: "31-Aug-2019", + Genre: "old emo-garage ", + Album: "Your graciousness" + }, + { + TrackNumber: 2, + Title: "Snail Boogie", + Released: "14-Jun-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 3, + Title: "Amazing Liz", + Released: "15-Oct-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 4, + Title: "When Sexy Aardvarks Cry", + Released: "1-Oct-2019", + Genre: "whimsical comedy-grass ", + Album: "Your graciousness" + }, + { + TrackNumber: 5, + Title: "Stand By Dave", + Released: "18-Aug-2019", + Genre: "unblack electronic-trip-hop", + Album: "Your graciousness" + }, + { + TrackNumber: 6, + Title: "The Golf Course is Your Land", + Released: "2-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 7, + Title: "Where Have All the Men Gone?", + Released: "29-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 8, + Title: "Rhythm of the Leg", + Released: "5-Aug-2019", + Genre: "ethno-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: 9, + Title: "Baby, I Need Your Hats", + Released: "5-Dec-2019", + Genre: "neuro-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: 10, + Title: "Stand by Your Cat", + Released: "25-Jul-2019", + Genre: "*", + Album: "Your graciousness" + } + ] + }, + { + Album: "Dark matters", + LaunchDate: new Date("November 3, 2002"), + BillboardReview: 79, + USBillboard200: 85, + Artist: "Izabella Tabakova" + } + ] + }, + { + Artist: "Nguyễn Diệp Chi", + HasGrammyAward: true, + Debut: 1992, + GrammyNominations: 4, + GrammyAwards: 2, + Albums: [ + { + Album: "Library of liberty", + LaunchDate: new Date("December 22, 2003"), + BillboardReview: 93, + USBillboard200: 5, + Artist: "Nguyễn Diệp Chi" + } + ] + }, + { + Artist: "Eva Lee", + HasGrammyAward: false, + Debut: 2008, + GrammyNominations: 2, + GrammyAwards: 0, + Albums: [ + { + Album: "Just a tease", + LaunchDate: new Date("May 3, 2001"), + BillboardReview: 91, + USBillboard200: 29, + Artist: "Eva Lee" + } + ] + }, + { + Artist: "Siri Jakobsson", + HasGrammyAward: true, + Debut: 1990, + GrammyNominations: 2, + GrammyAwards: 8, + Albums: [ + { + Album: "Under the bus", + LaunchDate: new Date("May 14, 2000"), + BillboardReview: 67, + USBillboard200: 67, + Artist: "Siri Jakobsson", + Songs: [ + { + TrackNumber: 1, + Title: "Jack Broke My Heart At Tesco's", + Released: "19-Jan-2020", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 2, + Title: "Cat Deep, Hats High", + Released: "5-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 3, + Title: "In Snail We Trust", + Released: "31-May-2019", + Genre: "hardcore opera", + Album: "Under the bus" + }, + { + TrackNumber: 4, + Title: "Liz's Waiting", + Released: "22-Jul-2019", + Genre: "emotional C-jam ", + Album: "Under the bus" + }, + { + TrackNumber: 5, + Title: "Lifeless Blues", + Released: "14-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 6, + Title: "I Spin", + Released: "26-Mar-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 7, + Title: "Ring of Rock", + Released: "12-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 8, + Title: "Livin' on a Rock", + Released: "17-Apr-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 9, + Title: "Your Lifeless Heart", + Released: "15-Sep-2019", + Genre: "adult calypso-industrial", + Album: "Under the bus" + }, + { + TrackNumber: 10, + Title: "The High Street on My Mind", + Released: "11-Nov-2019", + Genre: "calypso and mariachi", + Album: "Under the bus" + }, + { + TrackNumber: 11, + Title: "Behind Ugly Curtains", + Released: "8-May-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 12, + Title: "Where Have All the Curtains Gone?", + Released: "28-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 13, + Title: "Ghost in My Apple", + Released: "14-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 14, + Title: "I Chatter", + Released: "30-Nov-2019", + Genre: "*", + Album: "Under the bus" + } + ] + } + ] + }, + { + Artist: "Pablo Cambeiro", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 5, + GrammyAwards: 0, + Albums: [ + { + Album: "Fluke", + LaunchDate: new Date("August 4, 2017"), + BillboardReview: 93, + USBillboard200: 98, + Artist: "Pablo Cambeiro" + }, + { + Album: "Crowd control", + LaunchDate: new Date("August 26, 2003"), + BillboardReview: 68, + USBillboard200: 84, + Artist: "Pablo Cambeiro", + Songs: [ + { + TrackNumber: 1, + Title: "My Bed on My Mind", + Released: "25-Mar-2019", + Genre: "ethno-tunes", + Album: "Crowd control" + }, + { + TrackNumber: 2, + Title: "Bright Blues", + Released: "28-Sep-2019", + Genre: "neuro-tunes", + Album: "Crowd control" + }, + { + TrackNumber: 3, + Title: "Sail, Sail, Sail!", + Released: "5-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 4, + Title: "Hotel My Bed", + Released: "22-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 5, + Title: "Gonna Make You Mash", + Released: "18-May-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 6, + Title: "Straight Outta America", + Released: "16-Jan-2020", + Genre: "hardcore opera", + Album: "Crowd control" + }, + { + TrackNumber: 7, + Title: "I Drive", + Released: "23-Feb-2019", + Genre: "emotional C-jam ", + Album: "Crowd control" + }, + { + TrackNumber: 8, + Title: "Like a Teddy", + Released: "31-Aug-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 9, + Title: "Teddy Boogie", + Released: "30-Nov-2019", + Genre: "*", + Album: "Crowd control" + } + ] + } + ] + }, + { + Artist: "Athar Malakooti", + HasGrammyAward: false, + Debut: 2017, + GrammyNominations: 0, + GrammyAwards: 0, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("February 24, 2016"), + BillboardReview: 74, + USBillboard200: 77, + Artist: "Athar Malakooti" + } + ] + }, + { + Artist: "Marti Valencia", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 1, + GrammyAwards: 1, + Albums: [ + { + Album: "Nemesis", + LaunchDate: new Date("June 30, 2004"), + BillboardReview: 94, + USBillboard200: 9, + Artist: "Marti Valencia" + }, + { + Album: "First chance", + LaunchDate: new Date("January 7, 2019"), + BillboardReview: 96, + USBillboard200: 19, + Artist: "Marti Valencia", + Songs: [ + { + TrackNumber: 1, + Title: "My Name is Jason", + Released: "12-Jul-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 2, + Title: "Amazing Andy", + Released: "5-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 3, + Title: "The Number of your Knight", + Released: "4-Dec-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 4, + Title: "I Sail", + Released: "3-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 5, + Title: "Goody Two Hands", + Released: "11-Oct-2019", + Genre: "Electro house Electropop", + Album: "First chance" + }, + { + TrackNumber: 6, + Title: "Careful With That Knife", + Released: "18-Dec-2019", + Genre: "R&B", + Album: "First chance" + }, + { + TrackNumber: 7, + Title: "Four Single Ants", + Released: "18-Jan-2020", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 8, + Title: "Kiss Forever", + Released: "10-Aug-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 9, + Title: "Rich's Waiting", + Released: "15-Mar-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + }, + { + TrackNumber: 10, + Title: "Japan is Your Land", + Released: "7-Mar-2019", + Genre: "ethno-tunes", + Album: "First chance" + }, + { + TrackNumber: 11, + Title: "Pencils in My Banana", + Released: "21-Jun-2019", + Genre: "Crunk reggaeton", + Album: "First chance" + }, + { + TrackNumber: 12, + Title: "I Sail in Your Arms", + Released: "30-Apr-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + } + ] + }, + { + Album: "God's advocate", + LaunchDate: new Date("April 29, 2007"), + BillboardReview: 66, + USBillboard200: 37, + Artist: "Marti Valencia" + } + ] + }, + { + Artist: "Alicia Stanger", + HasGrammyAward: false, + Debut: 2010, + GrammyNominations: 1, + GrammyAwards: 0, + Albums: [ + { + Album: "Forever alone", + LaunchDate: new Date("November 3, 2005"), + BillboardReview: 82, + USBillboard200: 7, + Artist: "Alicia Stanger" + } + ] + }, + { + Artist: "Peter Taylor", + HasGrammyAward: true, + Debut: 2005, + GrammyNominations: 0, + GrammyAwards: 2, + Albums: [ + { + Album: "Decisions decisions", + LaunchDate: new Date("April 10, 2008"), + BillboardReview: 85, + USBillboard200: 35, + Artist: "Peter Taylor" + }, + { + Album: "Climate changed", + LaunchDate: new Date("June 20, 2015"), + BillboardReview: 66, + USBillboard200: 89, + Artist: "Peter Taylor" + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/index.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/index.ts new file mode 100644 index 000000000..d4fd4b0f7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/default/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Hierarchical Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "hierarchical-grid"; + this.projectType = "igx-ts"; + this.name = "Hierarchical Grid"; + this.description = "basic IgxHierarchicalGrid"; + this.dependencies = [ + { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..70b0de846 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,94 @@ +

IgxHierarchicalGrid with enabled batch editing. You can edit parent as well as child layout records. You can also add a record on root level using Add singer button.
+ You can read more about configuring the igx-hierarchical-grid component in the + README or the + official documentation.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + +
+ + + + + Has Grammy Award + + + + + + + + + + + + +
+
+ + + + + + + {{ typeFormatter(val) }} + + + + + {{ stateFormatter(val) }} + + + +
+ + + +
+
diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..570ea3432 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,56 @@ +h4 { + text-align: center; + padding-top: 2%; + padding-bottom: 2%; +} +.buttons-row { + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 5px; +} +.buttons-wrapper { + display: flex; + flex-direction: row; + justify-content: center; + padding: 10px 0; +} + +.addSingerBtn.igx-button--raised { + margin-bottom: 10px; +} + +.dialogNewSinger, +.dialogNewAlbum { + margin: 10px; + padding: 10px; +} + +.igx-input-group { + margin-bottom: 10px; + padding: 5px; +} +.igx-checkbox { + margin-top: 5px; + margin-bottom: 5px; + padding-top: 8px; + padding-bottom: 5px; +} + +.transaction--update, +.transaction--delete, +.transaction--add { + font-weight: 600; +} +.transaction--add { + color: #6b3; +} +.transaction--update { + color: #4a71b9; +} +.transaction--delete { + color: #ee4920; +} +.transaction-log { + word-wrap: none; +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..dfc43e3b0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,38 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxGridModule, IgxDatePickerModule, IgxCheckboxModule, IgxDialogModule, IgxHierarchicalGridModule +} from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ + FormsModule, + NoopAnimationsModule, + IgxGridModule, + IgxHierarchicalGridModule, + IgxDatePickerModule, + IgxCheckboxModule, + IgxDialogModule + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..003595985 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,132 @@ +import { Component, ViewChild } from '@angular/core'; +import { IgxDialogComponent, IgxGridComponent, IgxHierarchicalGridComponent, + IgxRowIslandComponent, Transaction } from '<%=igxPackage%>'; +import { GridType } from '<%=igxPackage%>/lib/grids/common/grid.interface'; +import { SINGERS } from './data'; +import { Singer } from './singer'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public get undoEnabledParent(): boolean { + return this.hierarchicalGrid.transactions.canUndo; + } + + public get redoEnabledParent(): boolean { + return this.hierarchicalGrid.transactions.canRedo; + } + + public get hasTransactions(): boolean { + return this.hierarchicalGrid.transactions.getAggregatedChanges(false).length > 0 || this.hasChildTransactions; + } + + public get hasChildTransactions(): boolean { + return this.layout1.gridAPI.getChildGrids() + .find(c => c.transactions.getAggregatedChanges(false).length > 0) !== undefined; + } + + public localdata: Singer[] = SINGERS; + public transactionsDataAll: Transaction[] = []; + private id = 14; + public singer: Singer = { + ID: this.id, + Artist: 'Mock Jagger', + Debut: 2005, + GrammyAwards: 4, + GrammyNominations: 7, + HasGrammyAward: false + }; + + @ViewChild('dialogChanges', { read: IgxDialogComponent, static: true }) + public dialogChanges!: IgxDialogComponent; + + @ViewChild('dialogGrid', { read: IgxGridComponent, static: true }) + public dialogGrid!: IgxGridComponent; + + @ViewChild('layout1', { static: true }) + private layout1!: IgxRowIslandComponent; + + @ViewChild('hierarchicalGrid', { static: true }) + private hierarchicalGrid!: IgxHierarchicalGridComponent; + + @ViewChild('dialogAddSinger', { read: IgxDialogComponent, static: true }) + private dialogSinger!: IgxDialogComponent; + + public formatter = (a: number): number => a; + + public undo(grid: GridType): void { + /* exit edit mode */ + grid.crudService.endEdit(/* commit the edit transaction */ false); + grid.transactions.undo(); + } + + public redo(grid: GridType): void { + grid.transactions.redo(); + } + + public commit(): void { + this.hierarchicalGrid.transactions.commit(this.localdata); + this.layout1.gridAPI.getChildGrids().forEach((grid) => { + grid.transactions.commit(grid.data as any[]); + }); + this.dialogChanges.close(); + } + + public discard(): void { + this.hierarchicalGrid.transactions.clear(); + this.layout1.gridAPI.getChildGrids().forEach((grid) => { + grid.transactions.clear(); + }); + this.dialogChanges.close(); + } + + public openCommitDialog(): void { + this.transactionsDataAll = [...this.hierarchicalGrid.transactions.getAggregatedChanges(true)]; + this.layout1.gridAPI.getChildGrids().forEach((grid) => { + this.transactionsDataAll = this.transactionsDataAll.concat(grid.transactions.getAggregatedChanges(true)); + }); + this.dialogChanges.open(); + this.dialogGrid.reflow(); + } + + public addSinger(): void { + this.hierarchicalGrid.addRow(this.singer); + ++this.id; + this.cancel(); + } + + public removeRow(rowIndex: number): void { + const row = this.hierarchicalGrid.getRowByIndex(rowIndex); + if (row && row.delete) { + row.delete(); + } + } + + public stateFormatter(value: string): string { + return JSON.stringify(value); + } + + public typeFormatter(value: string): string { + return value.toUpperCase(); + } + + public classFromType(type: string): string { + return `transaction--${type.toLowerCase()}`; + } + + public cancel(): void { + this.dialogChanges.close(); + this.dialogSinger.close(); + this.singer = { + ID: this.id, + Artist: 'Mock Jagger', + Debut: 2005, + GrammyAwards: 4, + GrammyNominations: 7, + HasGrammyAward: false + }; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/data.ts new file mode 100644 index 000000000..b726e1be5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/data.ts @@ -0,0 +1,37123 @@ +import { Singer } from "./singer"; + +export const SINGERS: Singer[] = [ + { + ID: 0, + Artist: "Naomí Yepes", + Photo: "assets/images/hgrid/naomi.jpg", + Debut: 2011, + GrammyNominations: 6, + GrammyAwards: 0, + HasGrammyAward: false, + Tours: [ + { + Tour: "Faithful Tour", + StartedOn: "Sep 12", + Location: "Worldwide", + Headliner: "NO", + TouredBy: "Naomí Yepes" + }, + { + Tour: "City Jam Sessions", + StartedOn: "Aug 13", + Location: "North America", + Headliner: "YES", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Christmas NYC 2013", + StartedOn: "Dec 13", + Location: "United States", + Headliner: "NO", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Christmas NYC 2014", + StartedOn: "Dec 14", + Location: "North America", + Headliner: "NO", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Watermelon Tour", + StartedOn: "Feb 15", + Location: "Worldwide", + Headliner: "YES", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Christmas NYC 2016", + StartedOn: "Dec 16", + Location: "United States", + Headliner: "NO", + TouredBy: "Naomí Yepes" + }, + { + Tour: "The Dragon Tour", + StartedOn: "Feb 17", + Location: "Worldwide", + Headliner: "NO", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Organic Sessions", + StartedOn: "Aug 18", + Location: "United States, England", + Headliner: "YES", + TouredBy: "Naomí Yepes" + }, + { + Tour: "Hope World Tour", + StartedOn: "Mar 19", + Location: "Worldwide", + Headliner: "NO", + TouredBy: "Naomí Yepes" + } + ], + Albums: [ + { + Album: "Initiation", + LaunchDate: new Date("September 3, 2013"), + BillboardReview: 86, + USBillboard200: 1, + Artist: "Naomí Yepes" + }, + { + Album: "Dream Driven", + LaunchDate: new Date("August 25, 2014"), + BillboardReview: 81, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: 1, + Title: "Intro", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 2, + Title: "Ferocious", + Released: new Date("28 Apr 2014"), + Genre: "Dance-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 3, + Title: "Going crazy", + Released: new Date("10 Feb 2015"), + Genre: "Dance-pop EDM", + Album: "Dream Driven" + }, + { + TrackNumber: 4, + Title: "Future past", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 5, + Title: "Roaming like them", + Released: new Date("2 Jul 2014"), + Genre: "Electro house Electropop", + Album: "Dream Driven" + }, + { + TrackNumber: 6, + Title: "Last Wishes", + Released: new Date("12 Aug 2014"), + Genre: "R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 7, + Title: "Stay where you are", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 8, + Title: "Imaginarium", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 9, + Title: "Tell me", + Released: new Date("30 Sep 2014"), + Genre: "Synth-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: 10, + Title: "Shredded into pieces", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 11, + Title: "Capture this moment", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: 12, + Title: "Dream Driven", + Genre: "*", + Album: "Dream Driven" + } + ] + }, + { + Album: "The dragon journey", + LaunchDate: new Date("May 20, 2016"), + BillboardReview: 60, + USBillboard200: 2, + Artist: "Naomí Yepes" + }, + { + Album: "Organic me", + LaunchDate: new Date("August 17, 2018"), + BillboardReview: 82, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: 1, + Title: "I Love", + Released: new Date("11 May 2019"), + Genre: "Crunk reggaeton", + Album: "Organic me" + }, + { + TrackNumber: 2, + Title: "Early Morning Compass", + Released: new Date("15 Jan 2020"), + Genre: "mystical parody-bap ", + Album: "Organic me" + }, + { + TrackNumber: 3, + Title: "Key Fields Forever", + Released: new Date("2 Jan 2020"), + Genre: "Dance-pop EDM", + Album: "Organic me" + }, + { + TrackNumber: 4, + Title: "Stand by Your Goblins", + Released: new Date("20 Nov 2019"), + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 5, + Title: "Mad to Walk", + Released: new Date("12 May 2019"), + Genre: "Electro house Electropop", + Album: "Organic me" + }, + { + TrackNumber: 6, + Title: "Alice's Waiting", + Released: new Date("28 Jan 2020"), + Genre: "R&B", + Album: "Organic me" + }, + { + TrackNumber: 7, + Title: "We Shall Kiss", + Released: new Date("30 Oct 2019"), + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 8, + Title: "Behind Single Ants", + Released: new Date("2 Oct 2019"), + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: 9, + Title: "Soap Autopsy", + Released: new Date("8 Aug 2019"), + Genre: "Synth-pop R&B", + Album: "Organic me" + }, + { + TrackNumber: 10, + Title: "Have You Met Rich?", + Released: new Date("1 Jul 2019"), + Genre: "ethno-tunes", + Album: "Organic me" + }, + { + TrackNumber: 11, + Title: "Livin' on a Banana", + Released: new Date("22 Nov 2019"), + Genre: "Crunk reggaeton", + Album: "Organic me" + } + ] + }, + { + Album: "Curiosity", + LaunchDate: new Date("December 7, 2019"), + BillboardReview: 75, + USBillboard200: 12, + Artist: "Naomí Yepes" + } + ] + }, + { + ID: 1, + Artist: "Babila Ebwélé", + Photo: "assets/images/hgrid/babila.jpg", + Debut: 2009, + GrammyNominations: 0, + GrammyAwards: 11, + HasGrammyAward: true, + Tours: [ + { + Tour: "The last straw", + StartedOn: "May 09", + Location: "Europe, Asia", + Headliner: "NO", + TouredBy: "Babila Ebwélé" + }, + { + Tour: "No foundations", + StartedOn: "Jun 04", + Location: "United States, Europe", + Headliner: "YES", + TouredBy: "Babila Ebwélé" + }, + { + Tour: "Crazy eyes", + StartedOn: "Jun 08", + Location: "North America", + Headliner: "NO", + TouredBy: "Babila Ebwélé" + }, + { + Tour: "Zero gravity", + StartedOn: "Apr 19", + Location: "United States", + Headliner: "NO", + TouredBy: "Babila Ebwélé" + }, + { + Tour: "Battle with myself", + StartedOn: "Mar 08", + Location: "North America", + Headliner: "YES", + TouredBy: "Babila Ebwélé" + } + ], + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("May 31, 2000"), + BillboardReview: 86, + USBillboard200: 42, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: 1, + Title: "Wood Shavings Forever", + Released: new Date("9 Jun 2019"), + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 2, + Title: "Early Morning Drive", + Released: new Date("20 May 2019"), + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 3, + Title: "Don't Natter", + Released: new Date("10 Jun 2019"), + Genre: "adult calypso-industrial", + Album: "Pushing up daisies" + }, + { + TrackNumber: 4, + Title: "Stairway to Balloons", + Released: new Date("18 Jun 2019"), + Genre: "calypso and mariachi", + Album: "Pushing up daisies" + }, + { + TrackNumber: 5, + Title: "The Number of your Apple", + Released: new Date("29 Oct 2019"), + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 6, + Title: "Your Delightful Heart", + Released: new Date("24 Feb 2019"), + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 7, + Title: "Nice Weather For Balloons", + Released: new Date("1 Aug 2019"), + Genre: "rap-hop", + Album: "Pushing up daisies" + }, + { + TrackNumber: 8, + Title: "The Girl From Cornwall", + Released: new Date("4 May 2019"), + Genre: "enigmatic rock-and-roll", + Album: "Pushing up daisies" + }, + { + TrackNumber: 9, + Title: "Here Without Jack", + Released: new Date("24 Oct 2019"), + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: 10, + Title: "Born Rancid", + Released: new Date("19 Mar 2019"), + Genre: "*", + Album: "Pushing up daisies" + } + ] + }, + { + Album: "Death's dead", + LaunchDate: new Date("June 8, 2016"), + BillboardReview: 85, + USBillboard200: 95, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: 1, + Title: "Men Sound Better With You", + Released: new Date("20 Oct 2019"), + Genre: "rap-hop", + Album: "Death's dead" + }, + { + TrackNumber: 2, + Title: "Ghost in My Rod", + Released: new Date("5 Oct 2019"), + Genre: "enigmatic rock-and-roll", + Album: "Death's dead" + }, + { + TrackNumber: 3, + Title: "Bed of Men", + Released: new Date("14 Nov 2019"), + Genre: "whimsical comedy-grass ", + Album: "Death's dead" + }, + { + TrackNumber: 4, + Title: "Don't Push", + Released: new Date("2 Jan 2020"), + Genre: "unblack electronic-trip-hop", + Album: "Death's dead" + }, + { + TrackNumber: 5, + Title: "Nice Weather For Men", + Released: new Date("18 Dec 2019"), + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 6, + Title: "Rancid Rhapsody", + Released: new Date("10 Mar 2019"), + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 7, + Title: "Push, Push, Push!", + Released: new Date("21 Feb 2019"), + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 8, + Title: "My Name is Sarah", + Released: new Date("15 Nov 2019"), + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 9, + Title: "The Girl From My Hotel", + Released: new Date("6 Nov 2019"), + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: 10, + Title: "Free Box", + Released: new Date("18 Apr 2019"), + Genre: "splitter-funk", + Album: "Death's dead" + }, + { + TrackNumber: 11, + Title: "Hotel Cardiff", + Released: new Date("30 Dec 2019"), + Genre: "guilty pleasure ebm", + Album: "Death's dead" + } + ] + } + ] + }, + { + ID: 2, + Artist: "Ahmad Nazeri", + Photo: "assets/images/hgrid/ahmad.jpg", + Debut: 2004, + GrammyNominations: 3, + GrammyAwards: 1, + HasGrammyAward: true, + Tours: [], + Albums: [ + { + Album: "Emergency", + LaunchDate: new Date("March 6, 2004"), + BillboardReview: 98, + USBillboard200: 69, + Artist: "Ahmad Nazeri" + }, + { + Album: "Bursting bubbles", + LaunchDate: new Date("April 17, 2006"), + BillboardReview: 69, + USBillboard200: 39, + Artist: "Ahmad Nazeri" + } + ] + }, + { + ID: 3, + Artist: "Kimmy McIlmorie", + Photo: "assets/images/hgrid/kimmy.jpg", + Debut: 2007, + GrammyNominations: 21, + GrammyAwards: 3, + HasGrammyAward: true, + Albums: [ + { + Album: "Here we go again", + LaunchDate: new Date("November 18, 2017"), + BillboardReview: 68, + USBillboard200: 1, + Artist: "Kimmy McIlmorie" + } + ] + }, + { + ID: 4, + Artist: "Mar Rueda", + Photo: "assets/images/hgrid/mar.jpg", + Debut: 1996, + GrammyNominations: 14, + GrammyAwards: 2, + HasGrammyAward: true + }, + { + ID: 5, + Artist: "Izabella Tabakova", + Photo: "assets/images/hgrid/izabella.jpg", + Debut: 2017, + GrammyNominations: 7, + GrammyAwards: 11, + HasGrammyAward: true, + Tours: [ + { + Tour: "Final breath", + StartedOn: "Jun 13", + Location: "Europe", + Headliner: "YES", + TouredBy: "Izabella Tabakova" + }, + { + Tour: "Once bitten", + StartedOn: "Dec 18", + Location: "Australia, United States", + Headliner: "NO", + TouredBy: "Izabella Tabakova" + }, + { + Tour: "Code word", + StartedOn: "Sep 19", + Location: "United States, Europe", + Headliner: "NO", + TouredBy: "Izabella Tabakova" + }, + { + Tour: "Final draft", + StartedOn: "Sep 17", + Location: "United States, Europe", + Headliner: "YES", + TouredBy: "Izabella Tabakova" + } + ], + Albums: [ + { + Album: "Once bitten", + LaunchDate: new Date("July 16, 2007"), + BillboardReview: 79, + USBillboard200: 53, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: 1, + Title: "Whole Lotta Super Cats", + Released: new Date("21 May 2019"), + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 2, + Title: "Enter Becky", + Released: new Date("16 Jan 2020"), + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 3, + Title: "Your Cheatin' Flamingo", + Released: new Date("14 Jan 2020"), + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: 4, + Title: "Mad to Kiss", + Released: new Date("6 Nov 2019"), + Genre: "Synth-pop R&B", + Album: "Once bitten" + }, + { + TrackNumber: 5, + Title: "Hotel Prague", + Released: new Date("20 Oct 2019"), + Genre: "ethno-tunes", + Album: "Once bitten" + }, + { + TrackNumber: 6, + Title: "Jail on My Mind", + Released: new Date("31 May 2019"), + Genre: "Crunk reggaeton", + Album: "Once bitten" + }, + { + TrackNumber: 7, + Title: "Amazing Blues", + Released: new Date("29 May 2019"), + Genre: "mystical parody-bap ", + Album: "Once bitten" + }, + { + TrackNumber: 8, + Title: "Goody Two Iron Filings", + Released: new Date("4 Jul 2019"), + Genre: "Electro house Electropop", + Album: "Once bitten" + }, + { + TrackNumber: 9, + Title: "I Love in Your Arms", + Released: new Date("7 Jun 2019"), + Genre: "R&B", + Album: "Once bitten" + }, + { + TrackNumber: 10, + Title: "Truly Madly Amazing", + Released: new Date("12 Sep 2019"), + Genre: "ethno-tunes", + Album: "Once bitten" + } + ] + }, + { + Album: "Your graciousness", + LaunchDate: new Date("November 17, 2004"), + BillboardReview: 69, + USBillboard200: 30, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: 1, + Title: "We Shall Tickle", + Released: new Date("31 Aug 2019"), + Genre: "old emo-garage ", + Album: "Your graciousness" + }, + { + TrackNumber: 2, + Title: "Snail Boogie", + Released: new Date("14 Jun 2019"), + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 3, + Title: "Amazing Liz", + Released: new Date("15 Oct 2019"), + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 4, + Title: "When Sexy Aardvarks Cry", + Released: new Date("1 Oct 2019"), + Genre: "whimsical comedy-grass ", + Album: "Your graciousness" + }, + { + TrackNumber: 5, + Title: "Stand By Dave", + Released: new Date("18 Aug 2019"), + Genre: "unblack electronic-trip-hop", + Album: "Your graciousness" + }, + { + TrackNumber: 6, + Title: "The Golf Course is Your Land", + Released: new Date("2 Apr 2019"), + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 7, + Title: "Where Have All the Men Gone?", + Released: new Date("29 Apr 2019"), + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: 8, + Title: "Rhythm of the Leg", + Released: new Date("5 Aug 2019"), + Genre: "ethno-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: 9, + Title: "Baby, I Need Your Hats", + Released: new Date("5 Dec 2019"), + Genre: "neuro-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: 10, + Title: "Stand by Your Cat", + Released: new Date("25 Jul 2019"), + Genre: "*", + Album: "Your graciousness" + } + ] + }, + { + Album: "Dark matters", + LaunchDate: new Date("November 3, 2002"), + BillboardReview: 79, + USBillboard200: 85, + Artist: "Izabella Tabakova" + } + ] + }, + { + ID: 6, + Artist: "Nguyễn Diệp Chi", + Photo: "assets/images/hgrid/nguyen.jpg", + Debut: 1992, + GrammyNominations: 4, + GrammyAwards: 2, + HasGrammyAward: true, + Albums: [ + { + Album: "Library of liberty", + LaunchDate: new Date("December 22, 2003"), + BillboardReview: 93, + USBillboard200: 5, + Artist: "Nguyễn Diệp Chi" + } + ] + }, + { + ID: 7, + Artist: "Eva Lee", + Photo: "assets/images/hgrid/eva.jpg", + Debut: 2008, + GrammyNominations: 2, + GrammyAwards: 0, + HasGrammyAward: false, + Albums: [ + { + Album: "Just a tease", + LaunchDate: new Date("May 3, 2001"), + BillboardReview: 91, + USBillboard200: 29, + Artist: "Eva Lee" + } + ] + }, + { + ID: 8, + Artist: "Siri Jakobsson", + Photo: "assets/images/hgrid/siri.jpg", + Debut: 1990, + GrammyNominations: 2, + GrammyAwards: 8, + HasGrammyAward: true, + Tours: [ + { + Tour: "Basket case", + StartedOn: "Jan 07", + Location: "Europe, Asia", + Headliner: "NO", + TouredBy: "Siri Jakobsson" + }, + { + Tour: "The bigger fish", + StartedOn: "Dec 07", + Location: "United States, Europe", + Headliner: "YES", + TouredBy: "Siri Jakobsson" + }, + { + Tour: "Missed the boat", + StartedOn: "Jun 09", + Location: "Europe, Asia", + Headliner: "NO", + TouredBy: "Siri Jakobsson" + }, + { + Tour: "Equivalent exchange", + StartedOn: "Feb 06", + Location: "United States, Europe", + Headliner: "YES", + TouredBy: "Siri Jakobsson" + }, + { + Tour: "Damage control", + StartedOn: "Oct 11", + Location: "Australia, United States", + Headliner: "NO", + TouredBy: "Siri Jakobsson" + } + ], + Albums: [ + { + Album: "Under the bus", + LaunchDate: new Date("May 14, 2000"), + BillboardReview: 67, + USBillboard200: 67, + Artist: "Siri Jakobsson", + Songs: [ + { + TrackNumber: 1, + Title: "Jack Broke My Heart At Tesco's", + Released: new Date("19 Jan 2020"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 2, + Title: "Cat Deep, Hats High", + Released: new Date("5 Dec 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 3, + Title: "In Snail We Trust", + Released: new Date("31 May 2019"), + Genre: "hardcore opera", + Album: "Under the bus" + }, + { + TrackNumber: 4, + Title: "Liz's Waiting", + Released: new Date("22 Jul 2019"), + Genre: "emotional C-jam ", + Album: "Under the bus" + }, + { + TrackNumber: 5, + Title: "Lifeless Blues", + Released: new Date("14 Jun 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 6, + Title: "I Spin", + Released: new Date("26 Mar 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 7, + Title: "Ring of Rock", + Released: new Date("12 Dec 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 8, + Title: "Livin' on a Rock", + Released: new Date("17 Apr 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 9, + Title: "Your Lifeless Heart", + Released: new Date("15 Sep 2019"), + Genre: "adult calypso-industrial", + Album: "Under the bus" + }, + { + TrackNumber: 10, + Title: "The High Street on My Mind", + Released: new Date("11 Nov 2019"), + Genre: "calypso and mariachi", + Album: "Under the bus" + }, + { + TrackNumber: 11, + Title: "Behind Ugly Curtains", + Released: new Date("8 May 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 12, + Title: "Where Have All the Curtains Gone?", + Released: new Date("28 Jun 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 13, + Title: "Ghost in My Apple", + Released: new Date("14 Dec 2019"), + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: 14, + Title: "I Chatter", + Released: new Date("30 Nov 2019"), + Genre: "*", + Album: "Under the bus" + } + ] + } + ] + }, + { + ID: 9, + Artist: "Pablo Cambeiro", + Photo: "assets/images/hgrid/pablo.jpg", + Debut: 2011, + GrammyNominations: 5, + GrammyAwards: 0, + HasGrammyAward: false, + Tours: [ + { + Tour: "Beads", + StartedOn: "May 11", + Location: "Worldwide", + Headliner: "NO", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Concept art", + StartedOn: "Dec 18", + Location: "United States", + Headliner: "YES", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Glass shoe", + StartedOn: "Jan 20", + Location: "Worldwide", + Headliner: "YES", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Pushing buttons", + StartedOn: "Feb 15", + Location: "Europe, Asia", + Headliner: "NO", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Dark matters", + StartedOn: "Jan 04", + Location: "Australia, United States", + Headliner: "YES", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Greener grass", + StartedOn: "Sep 09", + Location: "United States, Europe", + Headliner: "NO", + TouredBy: "Pablo Cambeiro" + }, + { + Tour: "Apparatus", + StartedOn: "Nov 16", + Location: "Europe", + Headliner: "NO", + TouredBy: "Pablo Cambeiro" + } + ], + Albums: [ + { + Album: "Fluke", + LaunchDate: new Date("August 4, 2017"), + BillboardReview: 93, + USBillboard200: 98, + Artist: "Pablo Cambeiro" + }, + { + Album: "Crowd control", + LaunchDate: new Date("August 26, 2003"), + BillboardReview: 68, + USBillboard200: 84, + Artist: "Pablo Cambeiro", + Songs: [ + { + TrackNumber: 1, + Title: "My Bed on My Mind", + Released: new Date("25 Mar 2019"), + Genre: "ethno-tunes", + Album: "Crowd control" + }, + { + TrackNumber: 2, + Title: "Bright Blues", + Released: new Date("28 Sep 2019"), + Genre: "neuro-tunes", + Album: "Crowd control" + }, + { + TrackNumber: 3, + Title: "Sail, Sail, Sail!", + Released: new Date("5 Mar 2019"), + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 4, + Title: "Hotel My Bed", + Released: new Date("22 Mar 2019"), + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 5, + Title: "Gonna Make You Mash", + Released: new Date("18 May 2019"), + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 6, + Title: "Straight Outta America", + Released: new Date("16 Jan 2020"), + Genre: "hardcore opera", + Album: "Crowd control" + }, + { + TrackNumber: 7, + Title: "I Drive", + Released: new Date("23 Feb 2019"), + Genre: "emotional C-jam ", + Album: "Crowd control" + }, + { + TrackNumber: 8, + Title: "Like a Teddy", + Released: new Date("31 Aug 2019"), + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: 9, + Title: "Teddy Boogie", + Released: new Date("30 Nov 2019"), + Genre: "*", + Album: "Crowd control" + } + ] + } + ] + }, + { + ID: 10, + Artist: "Athar Malakooti", + Photo: "assets/images/hgrid/athar.jpg", + Debut: 2017, + GrammyNominations: 0, + GrammyAwards: 0, + HasGrammyAward: false, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("February 24, 2016"), + BillboardReview: 74, + USBillboard200: 77, + Artist: "Athar Malakooti" + } + ] + }, + { + ID: 11, + Artist: "Marti Valencia", + Photo: "assets/images/hgrid/marti.jpg", + Debut: 2004, + GrammyNominations: 1, + GrammyAwards: 1, + HasGrammyAward: true, + Tours: [ + { + Tour: "Cat eat cat world", + StartedOn: "Sep 00", + Location: "Worldwide", + Headliner: "YES", + TouredBy: "Marti Valencia" + }, + { + Tour: "Final straw", + StartedOn: "Sep 06", + Location: "United States, Europe", + Headliner: "NO", + TouredBy: "Marti Valencia" + } + ], + Albums: [ + { + Album: "Nemesis", + LaunchDate: new Date("June 30, 2004"), + BillboardReview: 94, + USBillboard200: 9, + Artist: "Marti Valencia" + }, + { + Album: "First chance", + LaunchDate: new Date("January 7, 2019"), + BillboardReview: 96, + USBillboard200: 19, + Artist: "Marti Valencia", + Songs: [ + { + TrackNumber: 1, + Title: "My Name is Jason", + Released: new Date("12 Jul 2019"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 2, + Title: "Amazing Andy", + Released: new Date("5 Mar 2019"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 3, + Title: "The Number of your Knight", + Released: new Date("4 Dec 2019"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 4, + Title: "I Sail", + Released: new Date("3 Mar 2019"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 5, + Title: "Goody Two Hands", + Released: new Date("11 Oct 2019"), + Genre: "Electro house Electropop", + Album: "First chance" + }, + { + TrackNumber: 6, + Title: "Careful With That Knife", + Released: new Date("18 Dec 2019"), + Genre: "R&B", + Album: "First chance" + }, + { + TrackNumber: 7, + Title: "Four Single Ants", + Released: new Date("18 Jan 2020"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 8, + Title: "Kiss Forever", + Released: new Date("10 Aug 2019"), + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: 9, + Title: "Rich's Waiting", + Released: new Date("15 Mar 2019"), + Genre: "Synth-pop R&B", + Album: "First chance" + }, + { + TrackNumber: 10, + Title: "Japan is Your Land", + Released: new Date("7 Mar 2019"), + Genre: "ethno-tunes", + Album: "First chance" + }, + { + TrackNumber: 11, + Title: "Pencils in My Banana", + Released: new Date("21 Jun 2019"), + Genre: "Crunk reggaeton", + Album: "First chance" + }, + { + TrackNumber: 12, + Title: "I Sail in Your Arms", + Released: new Date("30 Apr 2019"), + Genre: "Synth-pop R&B", + Album: "First chance" + } + ] + }, + { + Album: "God's advocate", + LaunchDate: new Date("April 29, 2007"), + BillboardReview: 66, + USBillboard200: 37, + Artist: "Marti Valencia" + } + ] + }, + { + ID: 12, + Artist: "Alicia Stanger", + Photo: "assets/images/hgrid/alicia.jpg", + Debut: 2010, + GrammyNominations: 1, + GrammyAwards: 0, + HasGrammyAward: false, + Albums: [ + { + Album: "Forever alone", + LaunchDate: new Date("November 3, 2005"), + BillboardReview: 82, + USBillboard200: 7, + Artist: "Alicia Stanger" + } + ] + }, + { + ID: 13, + Artist: "Peter Taylor", + Photo: "assets/images/hgrid/peter.jpg", + Debut: 2005, + GrammyNominations: 0, + GrammyAwards: 2, + HasGrammyAward: true, + Tours: [ + { + Tour: "Love", + StartedOn: "Jun 04", + Location: "Europe, Asia", + Headliner: "YES", + TouredBy: "Peter Taylor" + }, + { + Tour: "Fault of treasures", + StartedOn: "Oct 13", + Location: "North America", + Headliner: "NO", + TouredBy: "Peter Taylor" + }, + { + Tour: "For eternity", + StartedOn: "Mar 05", + Location: "United States", + Headliner: "YES", + TouredBy: "Peter Taylor" + }, + { + Tour: "Time flies", + StartedOn: "Jun 03", + Location: "North America", + Headliner: "NO", + TouredBy: "Peter Taylor" + }, + { + Tour: "Highest difficulty", + StartedOn: "Nov 01", + Location: "Worldwide", + Headliner: "YES", + TouredBy: "Peter Taylor" + }, + { + Tour: "Sleeping dogs", + StartedOn: "May 04", + Location: "United States, Europe", + Headliner: "NO", + TouredBy: "Peter Taylor" + } + ], + Albums: [ + { + Album: "Decisions decisions", + LaunchDate: new Date("April 10, 2008"), + BillboardReview: 85, + USBillboard200: 35, + Artist: "Peter Taylor" + }, + { + Album: "Climate changed", + LaunchDate: new Date("June 20, 2015"), + BillboardReview: 66, + USBillboard200: 89, + Artist: "Peter Taylor" + } + ] + } +]; + +export const CUSTOMERS = [ + { + CustomerID: "VINET", + CompanyName: "Vins et alcools Chevalier", + ContactName: "Paul Henriot", + ContactTitle: "Accounting Manager", + Address: "59 rue de l'Abbaye", + City: "Reims", + PostalCode: "51100", + Country: "France", + Phone: "26.47.15.10", + Fax: "26.47.15.11", + Orders: [ + { + OrderID: 10248, + EmployeeID: 5, + OrderDate: new Date("1996-07-04T00:00:00"), + RequiredDate: new Date("1996-08-01T00:00:00"), + ShippedDate: new Date("1996-07-16T00:00:00"), + ShipVia: 3, + Freight: 32.3800, + ShipName: "Vins et alcools Chevalier", + ShipAddress: "59 rue de l'Abbaye", + ShipCity: "Reims", + ShipPostalCode: "51100", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 14.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, + { + ProductID: 42, + UnitPrice: 9.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, + { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, + { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10249, + EmployeeID: 6, + OrderDate: new Date("1996-07-05T00:00:00"), + RequiredDate: new Date("1996-08-16T00:00:00"), + ShippedDate: new Date("1996-07-10T00:00:00"), + ShipVia: 1, + Freight: 11.6100, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10250, + EmployeeID: 4, + OrderDate: new Date("1996-07-08T00:00:00"), + RequiredDate: new Date("1996-08-05T00:00:00"), + ShippedDate: new Date("1996-07-12T00:00:00"), + ShipVia: 2, + Freight: 65.8300, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 35, + Discount: 1.5000001e-001 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10251, + EmployeeID: 3, + OrderDate: new Date("1996-07-08T00:00:00"), + RequiredDate: new Date("1996-08-05T00:00:00"), + ShippedDate: new Date("1996-07-15T00:00:00"), + ShipVia: 1, + Freight: 41.3400, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 16.8000, + Quantity: 6, + Discount: 5.0000001e-002 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10252, + EmployeeID: 4, + OrderDate: new Date("1996-07-09T00:00:00"), + RequiredDate: new Date("1996-08-06T00:00:00"), + ShippedDate: new Date("1996-07-11T00:00:00"), + ShipVia: 2, + Freight: 51.3000, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 64.8000, + Quantity: 40, + Discount: 5.0000001e-002 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 25, + Discount: 5.0000001e-002 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10253, + EmployeeID: 3, + OrderDate: new Date("1996-07-10T00:00:00"), + RequiredDate: new Date("1996-07-24T00:00:00"), + ShippedDate: new Date("1996-07-16T00:00:00"), + ShipVia: 2, + Freight: 58.1700, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10254, + EmployeeID: 5, + OrderDate: new Date("1996-07-11T00:00:00"), + RequiredDate: new Date("1996-08-08T00:00:00"), + ShippedDate: new Date("1996-07-23T00:00:00"), + ShipVia: 2, + Freight: 22.9800, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 21, + Discount: 1.5000001e-001 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10255, + EmployeeID: 9, + OrderDate: new Date("1996-07-12T00:00:00"), + RequiredDate: new Date("1996-08-09T00:00:00"), + ShippedDate: new Date("1996-07-15T00:00:00"), + ShipVia: 3, + Freight: 148.3300, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10256, + EmployeeID: 3, + OrderDate: new Date("1996-07-15T00:00:00"), + RequiredDate: new Date("1996-08-12T00:00:00"), + ShippedDate: new Date("1996-07-17T00:00:00"), + ShipVia: 2, + Freight: 13.9700, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10257, + EmployeeID: 4, + OrderDate: new Date("1996-07-16T00:00:00"), + RequiredDate: new Date("1996-08-13T00:00:00"), + ShippedDate: new Date("1996-07-22T00:00:00"), + ShipVia: 3, + Freight: 81.9100, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 27, + UnitPrice: 35.1000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10258, + EmployeeID: 1, + OrderDate: new Date("1996-07-17T00:00:00"), + RequiredDate: new Date("1996-08-14T00:00:00"), + ShippedDate: new Date("1996-07-23T00:00:00"), + ShipVia: 1, + Freight: 140.5100, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 50, + Discount: 2.0000000e-001 + }, { + ProductID: 5, + UnitPrice: 17.0000, + Quantity: 65, + Discount: 2.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 25.6000, + Quantity: 6, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "CENTC", + CompanyName: "Centro comercial Moctezuma", + ContactName: "Francisco Chang", + ContactTitle: "Marketing Manager", + Address: "Sierras de Granada 9993", + City: "México D.F.", + PostalCode: "05022", + Country: "Mexico", + Phone: "(5) 555-3392", + Fax: "(5) 555-7293", + Orders: [ + { + OrderID: 10259, + EmployeeID: 4, + OrderDate: new Date("1996-07-18T00:00:00"), + RequiredDate: new Date("1996-08-15T00:00:00"), + ShippedDate: new Date("1996-07-25T00:00:00"), + ShipVia: 3, + Freight: 3.2500, + ShipName: "Centro comercial Moctezuma", + ShipAddress: "Sierras de Granada 9993", + ShipCity: "México D.F.", + ShipPostalCode: "05022", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 37, + UnitPrice: 20.8000, + Quantity: 1, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10260, + EmployeeID: 4, + OrderDate: new Date("1996-07-19T00:00:00"), + RequiredDate: new Date("1996-08-16T00:00:00"), + ShippedDate: new Date("1996-07-29T00:00:00"), + ShipVia: 1, + Freight: 55.0900, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 16, + Discount: 2.5000000e-001 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 21, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10261, + EmployeeID: 4, + OrderDate: new Date("1996-07-19T00:00:00"), + RequiredDate: new Date("1996-08-16T00:00:00"), + ShippedDate: new Date("1996-07-30T00:00:00"), + ShipVia: 2, + Freight: 3.0500, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10262, + EmployeeID: 8, + OrderDate: new Date("1996-07-22T00:00:00"), + RequiredDate: new Date("1996-08-19T00:00:00"), + ShippedDate: new Date("1996-07-25T00:00:00"), + ShipVia: 3, + Freight: 48.2900, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 17.0000, + Quantity: 12, + Discount: 2.0000000e-001 + }, { + ProductID: 7, + UnitPrice: 24.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10263, + EmployeeID: 9, + OrderDate: new Date("1996-07-23T00:00:00"), + RequiredDate: new Date("1996-08-20T00:00:00"), + ShippedDate: new Date("1996-07-31T00:00:00"), + ShipVia: 3, + Freight: 146.0600, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 60, + Discount: 2.5000000e-001 + }, { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 60, + Discount: 2.5000000e-001 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 36, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10264, + EmployeeID: 6, + OrderDate: new Date("1996-07-24T00:00:00"), + RequiredDate: new Date("1996-08-21T00:00:00"), + ShippedDate: new Date("1996-08-23T00:00:00"), + ShipVia: 3, + Freight: 3.6700, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 25, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10265, + EmployeeID: 2, + OrderDate: new Date("1996-07-25T00:00:00"), + RequiredDate: new Date("1996-08-22T00:00:00"), + ShippedDate: new Date("1996-08-12T00:00:00"), + ShipVia: 1, + Freight: 55.2800, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10266, + EmployeeID: 3, + OrderDate: new Date("1996-07-26T00:00:00"), + RequiredDate: new Date("1996-09-06T00:00:00"), + ShippedDate: new Date("1996-07-31T00:00:00"), + ShipVia: 3, + Freight: 25.7300, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 30.4000, + Quantity: 12, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10267, + EmployeeID: 4, + OrderDate: new Date("1996-07-29T00:00:00"), + RequiredDate: new Date("1996-08-26T00:00:00"), + ShippedDate: new Date("1996-08-06T00:00:00"), + ShipVia: 1, + Freight: 208.5800, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 70, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "GROSR", + CompanyName: "GROSELLA-Restaurante", + ContactName: "Manuel Pereira", + ContactTitle: "Owner", + Address: "5ª Ave. Los Palos Grandes", + City: "Caracas", + Region: "DF", + PostalCode: "1081", + Country: "Venezuela", + Phone: "(2) 283-2951", + Fax: "(2) 283-3397", + Orders: [ + { + OrderID: 10268, + EmployeeID: 8, + OrderDate: new Date("1996-07-30T00:00:00"), + RequiredDate: new Date("1996-08-27T00:00:00"), + ShippedDate: new Date("1996-08-02T00:00:00"), + ShipVia: 3, + Freight: 66.2900, + ShipName: "GROSELLA-Restaurante", + ShipAddress: "5ª Ave. Los Palos Grandes", + ShipCity: "Caracas", + ShipRegion: "DF", + ShipPostalCode: "1081", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10269, + EmployeeID: 5, + OrderDate: new Date("1996-07-31T00:00:00"), + RequiredDate: new Date("1996-08-14T00:00:00"), + ShippedDate: new Date("1996-08-09T00:00:00"), + ShipVia: 1, + Freight: 4.5600, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 60, + Discount: 5.0000001e-002 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10270, + EmployeeID: 1, + OrderDate: new Date("1996-08-01T00:00:00"), + RequiredDate: new Date("1996-08-29T00:00:00"), + ShippedDate: new Date("1996-08-02T00:00:00"), + ShipVia: 1, + Freight: 136.5400, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10271, + EmployeeID: 6, + OrderDate: new Date("1996-08-01T00:00:00"), + RequiredDate: new Date("1996-08-29T00:00:00"), + ShippedDate: new Date("1996-08-30T00:00:00"), + ShipVia: 2, + Freight: 4.5400, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10272, + EmployeeID: 6, + OrderDate: new Date("1996-08-02T00:00:00"), + RequiredDate: new Date("1996-08-30T00:00:00"), + ShippedDate: new Date("1996-08-06T00:00:00"), + ShipVia: 2, + Freight: 98.0300, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 64.8000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10273, + EmployeeID: 3, + OrderDate: new Date("1996-08-05T00:00:00"), + RequiredDate: new Date("1996-09-02T00:00:00"), + ShippedDate: new Date("1996-08-12T00:00:00"), + ShipVia: 3, + Freight: 76.0700, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 24, + Discount: 5.0000001e-002 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 60, + Discount: 5.0000001e-002 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 33, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "VINET", + CompanyName: "Vins et alcools Chevalier", + ContactName: "Paul Henriot", + ContactTitle: "Accounting Manager", + Address: "59 rue de l'Abbaye", + City: "Reims", + PostalCode: "51100", + Country: "France", + Phone: "26.47.15.10", + Fax: "26.47.15.11", + Orders: [ + { + OrderID: 10274, + EmployeeID: 6, + OrderDate: new Date("1996-08-06T00:00:00"), + RequiredDate: new Date("1996-09-03T00:00:00"), + ShippedDate: new Date("1996-08-16T00:00:00"), + ShipVia: 1, + Freight: 6.0100, + ShipName: "Vins et alcools Chevalier", + ShipAddress: "59 rue de l'Abbaye", + ShipCity: "Reims", + ShipPostalCode: "51100", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10275, + EmployeeID: 1, + OrderDate: new Date("1996-08-07T00:00:00"), + RequiredDate: new Date("1996-09-04T00:00:00"), + ShippedDate: new Date("1996-08-09T00:00:00"), + ShipVia: 1, + Freight: 26.9300, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 6, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10276, + EmployeeID: 8, + OrderDate: new Date("1996-08-08T00:00:00"), + RequiredDate: new Date("1996-08-22T00:00:00"), + ShippedDate: new Date("1996-08-14T00:00:00"), + ShipVia: 3, + Freight: 13.8400, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MORGK", + CompanyName: "Morgenstern Gesundkost", + ContactName: "Alexander Feuer", + ContactTitle: "Marketing Assistant", + Address: "Heerstr. 22", + City: "Leipzig", + PostalCode: "04179", + Country: "Germany", + Phone: "0342-023176", + Orders: [ + { + OrderID: 10277, + EmployeeID: 2, + OrderDate: new Date("1996-08-09T00:00:00"), + RequiredDate: new Date("1996-09-06T00:00:00"), + ShippedDate: new Date("1996-08-13T00:00:00"), + ShipVia: 3, + Freight: 125.7700, + ShipName: "Morgenstern Gesundkost", + ShipAddress: "Heerstr. 22", + ShipCity: "Leipzig", + ShipPostalCode: "04179", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10278, + EmployeeID: 8, + OrderDate: new Date("1996-08-12T00:00:00"), + RequiredDate: new Date("1996-09-09T00:00:00"), + ShippedDate: new Date("1996-08-16T00:00:00"), + ShipVia: 2, + Freight: 92.6900, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 12.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10279, + EmployeeID: 8, + OrderDate: new Date("1996-08-13T00:00:00"), + RequiredDate: new Date("1996-09-10T00:00:00"), + ShippedDate: new Date("1996-08-16T00:00:00"), + ShipVia: 2, + Freight: 25.8300, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 15, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10280, + EmployeeID: 2, + OrderDate: new Date("1996-08-14T00:00:00"), + RequiredDate: new Date("1996-09-11T00:00:00"), + ShippedDate: new Date("1996-09-12T00:00:00"), + ShipVia: 1, + Freight: 8.9800, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ROMEY", + CompanyName: "Romero y tomillo", + ContactName: "Alejandra Camino", + ContactTitle: "Accounting Manager", + Address: "Gran Vía, 1", + City: "Madrid", + PostalCode: "28001", + Country: "Spain", + Phone: "(91) 745 6200", + Fax: "(91) 745 6210", + Orders: [ + { + OrderID: 10281, + EmployeeID: 4, + OrderDate: new Date("1996-08-14T00:00:00"), + RequiredDate: new Date("1996-08-28T00:00:00"), + ShippedDate: new Date("1996-08-21T00:00:00"), + ShipVia: 1, + Freight: 2.9400, + ShipName: "Romero y tomillo", + ShipAddress: "Gran Vía, 1", + ShipCity: "Madrid", + ShipPostalCode: "28001", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10282, + EmployeeID: 4, + OrderDate: new Date("1996-08-15T00:00:00"), + RequiredDate: new Date("1996-09-12T00:00:00"), + ShippedDate: new Date("1996-08-21T00:00:00"), + ShipVia: 1, + Freight: 12.6900, + ShipName: "Romero y tomillo", + ShipAddress: "Gran Vía, 1", + ShipCity: "Madrid", + ShipPostalCode: "28001", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10283, + EmployeeID: 3, + OrderDate: new Date("1996-08-16T00:00:00"), + RequiredDate: new Date("1996-09-13T00:00:00"), + ShippedDate: new Date("1996-08-23T00:00:00"), + ShipVia: 3, + Freight: 84.8100, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 12.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10284, + EmployeeID: 4, + OrderDate: new Date("1996-08-19T00:00:00"), + RequiredDate: new Date("1996-09-16T00:00:00"), + ShippedDate: new Date("1996-08-27T00:00:00"), + ShipVia: 1, + Freight: 76.5600, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 27, + UnitPrice: 35.1000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 67, + UnitPrice: 11.2000, + Quantity: 5, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10285, + EmployeeID: 1, + OrderDate: new Date("1996-08-20T00:00:00"), + RequiredDate: new Date("1996-09-17T00:00:00"), + ShippedDate: new Date("1996-08-26T00:00:00"), + ShipVia: 2, + Freight: 76.8300, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 45, + Discount: 2.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 36, + Discount: 2.0000000e-001 + } + ] + }, { + OrderID: 10286, + EmployeeID: 8, + OrderDate: new Date("1996-08-21T00:00:00"), + RequiredDate: new Date("1996-09-18T00:00:00"), + ShippedDate: new Date("1996-08-30T00:00:00"), + ShipVia: 3, + Freight: 229.2400, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 100, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10287, + EmployeeID: 8, + OrderDate: new Date("1996-08-22T00:00:00"), + RequiredDate: new Date("1996-09-19T00:00:00"), + ShippedDate: new Date("1996-08-28T00:00:00"), + ShipVia: 3, + Freight: 12.7600, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10288, + EmployeeID: 4, + OrderDate: new Date("1996-08-23T00:00:00"), + RequiredDate: new Date("1996-09-20T00:00:00"), + ShippedDate: new Date("1996-09-03T00:00:00"), + ShipVia: 1, + Freight: 7.4500, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 3, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10289, + EmployeeID: 7, + OrderDate: new Date("1996-08-26T00:00:00"), + RequiredDate: new Date("1996-09-23T00:00:00"), + ShippedDate: new Date("1996-08-28T00:00:00"), + ShipVia: 3, + Freight: 22.7700, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 8.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "COMMI", + CompanyName: "Comércio Mineiro", + ContactName: "Pedro Afonso", + ContactTitle: "Sales Associate", + Address: "Av. dos Lusíadas, 23", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05432-043", + Country: "Brazil", + Phone: "(11) 555-7647", + Orders: [ + { + OrderID: 10290, + EmployeeID: 8, + OrderDate: new Date("1996-08-27T00:00:00"), + RequiredDate: new Date("1996-09-24T00:00:00"), + ShippedDate: new Date("1996-09-03T00:00:00"), + ShipVia: 1, + Freight: 79.7000, + ShipName: "Comércio Mineiro", + ShipAddress: "Av. dos Lusíadas, 23", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05432-043", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 17.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10291, + EmployeeID: 6, + OrderDate: new Date("1996-08-27T00:00:00"), + RequiredDate: new Date("1996-09-24T00:00:00"), + ShippedDate: new Date("1996-09-04T00:00:00"), + ShipVia: 2, + Freight: 6.4000, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 24, + Discount: 1.0000000e-001 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 2, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10292, + EmployeeID: 1, + OrderDate: new Date("1996-08-28T00:00:00"), + RequiredDate: new Date("1996-09-25T00:00:00"), + ShippedDate: new Date("1996-09-02T00:00:00"), + ShipVia: 2, + Freight: 1.3500, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 64.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10293, + EmployeeID: 1, + OrderDate: new Date("1996-08-29T00:00:00"), + RequiredDate: new Date("1996-09-26T00:00:00"), + ShippedDate: new Date("1996-09-11T00:00:00"), + ShipVia: 3, + Freight: 21.1800, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10294, + EmployeeID: 4, + OrderDate: new Date("1996-08-30T00:00:00"), + RequiredDate: new Date("1996-09-27T00:00:00"), + ShippedDate: new Date("1996-09-05T00:00:00"), + ShipVia: 2, + Freight: 147.2600, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VINET", + CompanyName: "Vins et alcools Chevalier", + ContactName: "Paul Henriot", + ContactTitle: "Accounting Manager", + Address: "59 rue de l'Abbaye", + City: "Reims", + PostalCode: "51100", + Country: "France", + Phone: "26.47.15.10", + Fax: "26.47.15.11", + Orders: [ + { + OrderID: 10295, + EmployeeID: 2, + OrderDate: new Date("1996-09-02T00:00:00"), + RequiredDate: new Date("1996-09-30T00:00:00"), + ShippedDate: new Date("1996-09-10T00:00:00"), + ShipVia: 2, + Freight: 1.1500, + ShipName: "Vins et alcools Chevalier", + ShipAddress: "59 rue de l'Abbaye", + ShipCity: "Reims", + ShipPostalCode: "51100", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10296, + EmployeeID: 6, + OrderDate: new Date("1996-09-03T00:00:00"), + RequiredDate: new Date("1996-10-01T00:00:00"), + ShippedDate: new Date("1996-09-11T00:00:00"), + ShipVia: 1, + Freight: 0.1200, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10297, + EmployeeID: 5, + OrderDate: new Date("1996-09-04T00:00:00"), + RequiredDate: new Date("1996-10-16T00:00:00"), + ShippedDate: new Date("1996-09-10T00:00:00"), + ShipVia: 2, + Freight: 5.7400, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10298, + EmployeeID: 6, + OrderDate: new Date("1996-09-05T00:00:00"), + RequiredDate: new Date("1996-10-03T00:00:00"), + ShippedDate: new Date("1996-09-11T00:00:00"), + ShipVia: 2, + Freight: 168.2200, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10299, + EmployeeID: 4, + OrderDate: new Date("1996-09-06T00:00:00"), + RequiredDate: new Date("1996-10-04T00:00:00"), + ShippedDate: new Date("1996-09-13T00:00:00"), + ShipVia: 2, + Freight: 29.7600, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10300, + EmployeeID: 2, + OrderDate: new Date("1996-09-09T00:00:00"), + RequiredDate: new Date("1996-10-07T00:00:00"), + ShippedDate: new Date("1996-09-18T00:00:00"), + ShipVia: 2, + Freight: 17.6800, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 66, + UnitPrice: 13.6000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10301, + EmployeeID: 8, + OrderDate: new Date("1996-09-09T00:00:00"), + RequiredDate: new Date("1996-10-07T00:00:00"), + ShippedDate: new Date("1996-09-17T00:00:00"), + ShipVia: 2, + Freight: 45.0800, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10302, + EmployeeID: 4, + OrderDate: new Date("1996-09-10T00:00:00"), + RequiredDate: new Date("1996-10-08T00:00:00"), + ShippedDate: new Date("1996-10-09T00:00:00"), + ShipVia: 2, + Freight: 6.2700, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10303, + EmployeeID: 7, + OrderDate: new Date("1996-09-11T00:00:00"), + RequiredDate: new Date("1996-10-09T00:00:00"), + ShippedDate: new Date("1996-09-18T00:00:00"), + ShipVia: 2, + Freight: 107.8300, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10304, + EmployeeID: 1, + OrderDate: new Date("1996-09-12T00:00:00"), + RequiredDate: new Date("1996-10-10T00:00:00"), + ShippedDate: new Date("1996-09-17T00:00:00"), + ShipVia: 2, + Freight: 63.7900, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10305, + EmployeeID: 8, + OrderDate: new Date("1996-09-13T00:00:00"), + RequiredDate: new Date("1996-10-11T00:00:00"), + ShippedDate: new Date("1996-10-09T00:00:00"), + ShipVia: 3, + Freight: 257.6200, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 30, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ROMEY", + CompanyName: "Romero y tomillo", + ContactName: "Alejandra Camino", + ContactTitle: "Accounting Manager", + Address: "Gran Vía, 1", + City: "Madrid", + PostalCode: "28001", + Country: "Spain", + Phone: "(91) 745 6200", + Fax: "(91) 745 6210", + Orders: [ + { + OrderID: 10306, + EmployeeID: 1, + OrderDate: new Date("1996-09-16T00:00:00"), + RequiredDate: new Date("1996-10-14T00:00:00"), + ShippedDate: new Date("1996-09-23T00:00:00"), + ShipVia: 3, + Freight: 7.5600, + ShipName: "Romero y tomillo", + ShipAddress: "Gran Vía, 1", + ShipCity: "Madrid", + ShipPostalCode: "28001", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10307, + EmployeeID: 2, + OrderDate: new Date("1996-09-17T00:00:00"), + RequiredDate: new Date("1996-10-15T00:00:00"), + ShippedDate: new Date("1996-09-25T00:00:00"), + ShipVia: 2, + Freight: 0.5600, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANATR", + CompanyName: "Ana Trujillo Emparedados y helados", + ContactName: "Ana Trujillo", + ContactTitle: "Owner", + Address: "Avda. de la Constitución 2222", + City: "México D.F.", + PostalCode: "05021", + Country: "Mexico", + Phone: "(5) 555-4729", + Fax: "(5) 555-3745", + Orders: [ + { + OrderID: 10308, + EmployeeID: 7, + OrderDate: new Date("1996-09-18T00:00:00"), + RequiredDate: new Date("1996-10-16T00:00:00"), + ShippedDate: new Date("1996-09-24T00:00:00"), + ShipVia: 3, + Freight: 1.6100, + ShipName: "Ana Trujillo Emparedados y helados", + ShipAddress: "Avda. de la Constitución 2222", + ShipCity: "México D.F.", + ShipPostalCode: "05021", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10309, + EmployeeID: 3, + OrderDate: new Date("1996-09-19T00:00:00"), + RequiredDate: new Date("1996-10-17T00:00:00"), + ShippedDate: new Date("1996-10-23T00:00:00"), + ShipVia: 1, + Freight: 47.3000, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 6, + UnitPrice: 20.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "THEBI", + CompanyName: "The Big Cheese", + ContactName: "Liz Nixon", + ContactTitle: "Marketing Manager", + Address: "89 Jefferson Way Suite 2", + City: "Portland", + Region: "OR", + PostalCode: "97201", + Country: "USA", + Phone: "(503) 555-3612", + Orders: [ + { + OrderID: 10310, + EmployeeID: 8, + OrderDate: new Date("1996-09-20T00:00:00"), + RequiredDate: new Date("1996-10-18T00:00:00"), + ShippedDate: new Date("1996-09-27T00:00:00"), + ShipVia: 2, + Freight: 17.5200, + ShipName: "The Big Cheese", + ShipAddress: "89 Jefferson Way Suite 2", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97201", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DUMON", + CompanyName: "Du monde entier", + ContactName: "Janine Labrune", + ContactTitle: "Owner", + Address: "67, rue des Cinquante Otages", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.67.88.88", + Fax: "40.67.89.89", + Orders: [ + { + OrderID: 10311, + EmployeeID: 1, + OrderDate: new Date("1996-09-20T00:00:00"), + RequiredDate: new Date("1996-10-04T00:00:00"), + ShippedDate: new Date("1996-09-26T00:00:00"), + ShipVia: 3, + Freight: 24.6900, + ShipName: "Du monde entier", + ShipAddress: "67, rue des Cinquante Otages", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10312, + EmployeeID: 2, + OrderDate: new Date("1996-09-23T00:00:00"), + RequiredDate: new Date("1996-10-21T00:00:00"), + ShippedDate: new Date("1996-10-03T00:00:00"), + ShipVia: 2, + Freight: 40.2600, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10313, + EmployeeID: 2, + OrderDate: new Date("1996-09-24T00:00:00"), + RequiredDate: new Date("1996-10-22T00:00:00"), + ShippedDate: new Date("1996-10-04T00:00:00"), + ShipVia: 2, + Freight: 1.9600, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10314, + EmployeeID: 1, + OrderDate: new Date("1996-09-25T00:00:00"), + RequiredDate: new Date("1996-10-23T00:00:00"), + ShippedDate: new Date("1996-10-04T00:00:00"), + ShipVia: 2, + Freight: 74.1600, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 32, + UnitPrice: 25.6000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 58, + UnitPrice: 10.6000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 25, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10315, + EmployeeID: 4, + OrderDate: new Date("1996-09-26T00:00:00"), + RequiredDate: new Date("1996-10-24T00:00:00"), + ShippedDate: new Date("1996-10-03T00:00:00"), + ShipVia: 2, + Freight: 41.7600, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10316, + EmployeeID: 1, + OrderDate: new Date("1996-09-27T00:00:00"), + RequiredDate: new Date("1996-10-25T00:00:00"), + ShippedDate: new Date("1996-10-08T00:00:00"), + ShipVia: 3, + Freight: 150.1500, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 70, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10317, + EmployeeID: 6, + OrderDate: new Date("1996-09-30T00:00:00"), + RequiredDate: new Date("1996-10-28T00:00:00"), + ShippedDate: new Date("1996-10-10T00:00:00"), + ShipVia: 1, + Freight: 12.6900, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10318, + EmployeeID: 8, + OrderDate: new Date("1996-10-01T00:00:00"), + RequiredDate: new Date("1996-10-29T00:00:00"), + ShippedDate: new Date("1996-10-04T00:00:00"), + ShipVia: 2, + Freight: 4.7300, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10319, + EmployeeID: 7, + OrderDate: new Date("1996-10-02T00:00:00"), + RequiredDate: new Date("1996-10-30T00:00:00"), + ShippedDate: new Date("1996-10-11T00:00:00"), + ShipVia: 3, + Freight: 64.5000, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10320, + EmployeeID: 5, + OrderDate: new Date("1996-10-03T00:00:00"), + RequiredDate: new Date("1996-10-17T00:00:00"), + ShippedDate: new Date("1996-10-18T00:00:00"), + ShipVia: 3, + Freight: 34.5700, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10321, + EmployeeID: 3, + OrderDate: new Date("1996-10-03T00:00:00"), + RequiredDate: new Date("1996-10-31T00:00:00"), + ShippedDate: new Date("1996-10-11T00:00:00"), + ShipVia: 2, + Freight: 3.4300, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 10322, + EmployeeID: 7, + OrderDate: new Date("1996-10-04T00:00:00"), + RequiredDate: new Date("1996-11-01T00:00:00"), + ShippedDate: new Date("1996-10-23T00:00:00"), + ShipVia: 3, + Freight: 0.4000, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 5.6000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10323, + EmployeeID: 4, + OrderDate: new Date("1996-10-07T00:00:00"), + RequiredDate: new Date("1996-11-04T00:00:00"), + ShippedDate: new Date("1996-10-14T00:00:00"), + ShipVia: 1, + Freight: 4.8800, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 12.4000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10324, + EmployeeID: 9, + OrderDate: new Date("1996-10-08T00:00:00"), + RequiredDate: new Date("1996-11-05T00:00:00"), + ShippedDate: new Date("1996-10-10T00:00:00"), + ShipVia: 1, + Freight: 214.2700, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 21, + Discount: 1.5000001e-001 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 70, + Discount: 1.5000001e-001 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 80, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10325, + EmployeeID: 1, + OrderDate: new Date("1996-10-09T00:00:00"), + RequiredDate: new Date("1996-10-23T00:00:00"), + ShippedDate: new Date("1996-10-14T00:00:00"), + ShipVia: 3, + Freight: 64.8600, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 20.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOLID", + CompanyName: "Bólido Comidas preparadas", + ContactName: "Martín Sommer", + ContactTitle: "Owner", + Address: "C\/ Araquil, 67", + City: "Madrid", + PostalCode: "28023", + Country: "Spain", + Phone: "(91) 555 22 82", + Fax: "(91) 555 91 99", + Orders: [ + { + OrderID: 10326, + EmployeeID: 4, + OrderDate: new Date("1996-10-10T00:00:00"), + RequiredDate: new Date("1996-11-07T00:00:00"), + ShippedDate: new Date("1996-10-14T00:00:00"), + ShipVia: 2, + Freight: 77.9200, + ShipName: "Bólido Comidas preparadas", + ShipAddress: "C\/ Araquil, 67", + ShipCity: "Madrid", + ShipPostalCode: "28023", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10327, + EmployeeID: 2, + OrderDate: new Date("1996-10-11T00:00:00"), + RequiredDate: new Date("1996-11-08T00:00:00"), + ShippedDate: new Date("1996-10-14T00:00:00"), + ShipVia: 1, + Freight: 63.3600, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 25, + Discount: 2.0000000e-001 + }, { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 50, + Discount: 2.0000000e-001 + }, { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 58, + UnitPrice: 10.6000, + Quantity: 30, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10328, + EmployeeID: 4, + OrderDate: new Date("1996-10-14T00:00:00"), + RequiredDate: new Date("1996-11-11T00:00:00"), + ShippedDate: new Date("1996-10-17T00:00:00"), + ShipVia: 3, + Freight: 87.0300, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10329, + EmployeeID: 4, + OrderDate: new Date("1996-10-15T00:00:00"), + RequiredDate: new Date("1996-11-26T00:00:00"), + ShippedDate: new Date("1996-10-23T00:00:00"), + ShipVia: 2, + Freight: 191.6700, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 8, + Discount: 5.0000001e-002 + }, { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 12, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10330, + EmployeeID: 3, + OrderDate: new Date("1996-10-16T00:00:00"), + RequiredDate: new Date("1996-11-13T00:00:00"), + ShippedDate: new Date("1996-10-28T00:00:00"), + ShipVia: 1, + Freight: 12.7500, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 50, + Discount: 1.5000001e-001 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 25, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10331, + EmployeeID: 9, + OrderDate: new Date("1996-10-16T00:00:00"), + RequiredDate: new Date("1996-11-27T00:00:00"), + ShippedDate: new Date("1996-10-21T00:00:00"), + ShipVia: 1, + Freight: 10.1900, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10332, + EmployeeID: 3, + OrderDate: new Date("1996-10-17T00:00:00"), + RequiredDate: new Date("1996-11-28T00:00:00"), + ShippedDate: new Date("1996-10-21T00:00:00"), + ShipVia: 2, + Freight: 52.8400, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 47, + UnitPrice: 7.6000, + Quantity: 16, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10333, + EmployeeID: 5, + OrderDate: new Date("1996-10-18T00:00:00"), + RequiredDate: new Date("1996-11-15T00:00:00"), + ShippedDate: new Date("1996-10-25T00:00:00"), + ShipVia: 3, + Freight: 0.5900, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 40, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10334, + EmployeeID: 8, + OrderDate: new Date("1996-10-21T00:00:00"), + RequiredDate: new Date("1996-11-18T00:00:00"), + ShippedDate: new Date("1996-10-28T00:00:00"), + ShipVia: 2, + Freight: 8.5600, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 5.6000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10335, + EmployeeID: 7, + OrderDate: new Date("1996-10-22T00:00:00"), + RequiredDate: new Date("1996-11-19T00:00:00"), + ShippedDate: new Date("1996-10-24T00:00:00"), + ShipVia: 2, + Freight: 42.1100, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 7, + Discount: 2.0000000e-001 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 25, + Discount: 2.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 25.6000, + Quantity: 6, + Discount: 2.0000000e-001 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 48, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "PRINI", + CompanyName: "Princesa Isabel Vinhos", + ContactName: "Isabel de Castro", + ContactTitle: "Sales Representative", + Address: "Estrada da saúde n. 58", + City: "Lisboa", + PostalCode: "1756", + Country: "Portugal", + Phone: "(1) 356-5634", + Orders: [ + { + OrderID: 10336, + EmployeeID: 7, + OrderDate: new Date("1996-10-23T00:00:00"), + RequiredDate: new Date("1996-11-20T00:00:00"), + ShippedDate: new Date("1996-10-25T00:00:00"), + ShipVia: 2, + Freight: 15.5100, + ShipName: "Princesa Isabel Vinhos", + ShipAddress: "Estrada da saúde n. 58", + ShipCity: "Lisboa", + ShipPostalCode: "1756", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 18, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10337, + EmployeeID: 4, + OrderDate: new Date("1996-10-24T00:00:00"), + RequiredDate: new Date("1996-11-21T00:00:00"), + ShippedDate: new Date("1996-10-29T00:00:00"), + ShipVia: 3, + Freight: 108.2600, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 37, + UnitPrice: 20.8000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10338, + EmployeeID: 4, + OrderDate: new Date("1996-10-25T00:00:00"), + RequiredDate: new Date("1996-11-22T00:00:00"), + ShippedDate: new Date("1996-10-29T00:00:00"), + ShipVia: 3, + Freight: 84.2100, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10339, + EmployeeID: 2, + OrderDate: new Date("1996-10-28T00:00:00"), + RequiredDate: new Date("1996-11-25T00:00:00"), + ShippedDate: new Date("1996-11-04T00:00:00"), + ShipVia: 2, + Freight: 15.6600, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 70, + Discount: 5.0000001e-002 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10340, + EmployeeID: 1, + OrderDate: new Date("1996-10-29T00:00:00"), + RequiredDate: new Date("1996-11-26T00:00:00"), + ShippedDate: new Date("1996-11-08T00:00:00"), + ShipVia: 3, + Freight: 166.3100, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 40, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10341, + EmployeeID: 7, + OrderDate: new Date("1996-10-29T00:00:00"), + RequiredDate: new Date("1996-11-26T00:00:00"), + ShippedDate: new Date("1996-11-05T00:00:00"), + ShipVia: 3, + Freight: 26.7800, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 9, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10342, + EmployeeID: 4, + OrderDate: new Date("1996-10-30T00:00:00"), + RequiredDate: new Date("1996-11-13T00:00:00"), + ShippedDate: new Date("1996-11-04T00:00:00"), + ShipVia: 2, + Freight: 54.8300, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 24, + Discount: 2.0000000e-001 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 56, + Discount: 2.0000000e-001 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 40, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10343, + EmployeeID: 4, + OrderDate: new Date("1996-10-31T00:00:00"), + RequiredDate: new Date("1996-11-28T00:00:00"), + ShippedDate: new Date("1996-11-06T00:00:00"), + ShipVia: 1, + Freight: 110.3700, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 4, + Discount: 5.0000001e-002 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10344, + EmployeeID: 4, + OrderDate: new Date("1996-11-01T00:00:00"), + RequiredDate: new Date("1996-11-29T00:00:00"), + ShippedDate: new Date("1996-11-05T00:00:00"), + ShipVia: 2, + Freight: 23.2900, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 8, + UnitPrice: 32.0000, + Quantity: 70, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10345, + EmployeeID: 2, + OrderDate: new Date("1996-11-04T00:00:00"), + RequiredDate: new Date("1996-12-02T00:00:00"), + ShippedDate: new Date("1996-11-11T00:00:00"), + ShipVia: 2, + Freight: 249.0600, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 32.0000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 80, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10346, + EmployeeID: 3, + OrderDate: new Date("1996-11-05T00:00:00"), + RequiredDate: new Date("1996-12-17T00:00:00"), + ShippedDate: new Date("1996-11-08T00:00:00"), + ShipVia: 3, + Freight: 142.0800, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 36, + Discount: 1.0000000e-001 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10347, + EmployeeID: 4, + OrderDate: new Date("1996-11-06T00:00:00"), + RequiredDate: new Date("1996-12-04T00:00:00"), + ShippedDate: new Date("1996-11-08T00:00:00"), + ShipVia: 3, + Freight: 3.1000, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 50, + Discount: 1.5000001e-001 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 6, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10348, + EmployeeID: 4, + OrderDate: new Date("1996-11-07T00:00:00"), + RequiredDate: new Date("1996-12-05T00:00:00"), + ShippedDate: new Date("1996-11-15T00:00:00"), + ShipVia: 2, + Freight: 0.7800, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10349, + EmployeeID: 7, + OrderDate: new Date("1996-11-08T00:00:00"), + RequiredDate: new Date("1996-12-06T00:00:00"), + ShippedDate: new Date("1996-11-15T00:00:00"), + ShipVia: 1, + Freight: 8.6300, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10350, + EmployeeID: 6, + OrderDate: new Date("1996-11-11T00:00:00"), + RequiredDate: new Date("1996-12-09T00:00:00"), + ShippedDate: new Date("1996-12-03T00:00:00"), + ShipVia: 2, + Freight: 64.1900, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 50, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 18, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10351, + EmployeeID: 1, + OrderDate: new Date("1996-11-11T00:00:00"), + RequiredDate: new Date("1996-12-09T00:00:00"), + ShippedDate: new Date("1996-11-20T00:00:00"), + ShipVia: 1, + Freight: 162.3300, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 13, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 77, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10352, + EmployeeID: 3, + OrderDate: new Date("1996-11-12T00:00:00"), + RequiredDate: new Date("1996-11-26T00:00:00"), + ShippedDate: new Date("1996-11-18T00:00:00"), + ShipVia: 3, + Freight: 1.3000, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 20, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10353, + EmployeeID: 7, + OrderDate: new Date("1996-11-13T00:00:00"), + RequiredDate: new Date("1996-12-11T00:00:00"), + ShippedDate: new Date("1996-11-25T00:00:00"), + ShipVia: 3, + Freight: 360.6300, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 12, + Discount: 2.0000000e-001 + }, { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 50, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 10354, + EmployeeID: 8, + OrderDate: new Date("1996-11-14T00:00:00"), + RequiredDate: new Date("1996-12-12T00:00:00"), + ShippedDate: new Date("1996-11-20T00:00:00"), + ShipVia: 3, + Freight: 53.8000, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10355, + EmployeeID: 6, + OrderDate: new Date("1996-11-15T00:00:00"), + RequiredDate: new Date("1996-12-13T00:00:00"), + ShippedDate: new Date("1996-11-20T00:00:00"), + ShipVia: 1, + Freight: 41.9500, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10356, + EmployeeID: 6, + OrderDate: new Date("1996-11-18T00:00:00"), + RequiredDate: new Date("1996-12-16T00:00:00"), + ShippedDate: new Date("1996-11-27T00:00:00"), + ShipVia: 2, + Freight: 36.7100, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10357, + EmployeeID: 1, + OrderDate: new Date("1996-11-19T00:00:00"), + RequiredDate: new Date("1996-12-17T00:00:00"), + ShippedDate: new Date("1996-12-02T00:00:00"), + ShipVia: 3, + Freight: 34.8800, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 8, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10358, + EmployeeID: 5, + OrderDate: new Date("1996-11-20T00:00:00"), + RequiredDate: new Date("1996-12-18T00:00:00"), + ShippedDate: new Date("1996-11-27T00:00:00"), + ShipVia: 1, + Freight: 19.6400, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10359, + EmployeeID: 5, + OrderDate: new Date("1996-11-21T00:00:00"), + RequiredDate: new Date("1996-12-19T00:00:00"), + ShippedDate: new Date("1996-11-26T00:00:00"), + ShipVia: 3, + Freight: 288.4300, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 56, + Discount: 5.0000001e-002 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 70, + Discount: 5.0000001e-002 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 80, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10360, + EmployeeID: 4, + OrderDate: new Date("1996-11-22T00:00:00"), + RequiredDate: new Date("1996-12-20T00:00:00"), + ShippedDate: new Date("1996-12-02T00:00:00"), + ShipVia: 3, + Freight: 131.7000, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10361, + EmployeeID: 1, + OrderDate: new Date("1996-11-22T00:00:00"), + RequiredDate: new Date("1996-12-20T00:00:00"), + ShippedDate: new Date("1996-12-03T00:00:00"), + ShipVia: 2, + Freight: 183.1700, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 54, + Discount: 1.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 55, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10362, + EmployeeID: 3, + OrderDate: new Date("1996-11-25T00:00:00"), + RequiredDate: new Date("1996-12-23T00:00:00"), + ShippedDate: new Date("1996-11-28T00:00:00"), + ShipVia: 1, + Freight: 96.0400, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 10363, + EmployeeID: 4, + OrderDate: new Date("1996-11-26T00:00:00"), + RequiredDate: new Date("1996-12-24T00:00:00"), + ShippedDate: new Date("1996-12-04T00:00:00"), + ShipVia: 3, + Freight: 30.5400, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 10364, + EmployeeID: 1, + OrderDate: new Date("1996-11-26T00:00:00"), + RequiredDate: new Date("1997-01-07T00:00:00"), + ShippedDate: new Date("1996-12-04T00:00:00"), + ShipVia: 1, + Freight: 71.9700, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10365, + EmployeeID: 3, + OrderDate: new Date("1996-11-27T00:00:00"), + RequiredDate: new Date("1996-12-25T00:00:00"), + ShippedDate: new Date("1996-12-02T00:00:00"), + ShipVia: 2, + Freight: 22.0000, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GALED", + CompanyName: "Galería del gastrónomo", + ContactName: "Eduardo Saavedra", + ContactTitle: "Marketing Manager", + Address: "Rambla de Cataluña, 23", + City: "Barcelona", + PostalCode: "08022", + Country: "Spain", + Phone: "(93) 203 4560", + Fax: "(93) 203 4561", + Orders: [ + { + OrderID: 10366, + EmployeeID: 8, + OrderDate: new Date("1996-11-28T00:00:00"), + RequiredDate: new Date("1997-01-09T00:00:00"), + ShippedDate: new Date("1996-12-30T00:00:00"), + ShipVia: 2, + Freight: 10.1400, + ShipName: "Galería del gastronómo", + ShipAddress: "Rambla de Cataluña, 23", + ShipCity: "Barcelona", + ShipPostalCode: "8022", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10367, + EmployeeID: 7, + OrderDate: new Date("1996-11-28T00:00:00"), + RequiredDate: new Date("1996-12-26T00:00:00"), + ShippedDate: new Date("1996-12-02T00:00:00"), + ShipVia: 3, + Freight: 13.5500, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10368, + EmployeeID: 2, + OrderDate: new Date("1996-11-29T00:00:00"), + RequiredDate: new Date("1996-12-27T00:00:00"), + ShippedDate: new Date("1996-12-02T00:00:00"), + ShipVia: 2, + Freight: 101.9500, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 5, + Discount: 1.0000000e-001 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 13, + Discount: 1.0000000e-001 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 35, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10369, + EmployeeID: 8, + OrderDate: new Date("1996-12-02T00:00:00"), + RequiredDate: new Date("1996-12-30T00:00:00"), + ShippedDate: new Date("1996-12-09T00:00:00"), + ShipVia: 2, + Freight: 195.6800, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 18, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10370, + EmployeeID: 6, + OrderDate: new Date("1996-12-03T00:00:00"), + RequiredDate: new Date("1996-12-31T00:00:00"), + ShippedDate: new Date("1996-12-27T00:00:00"), + ShipVia: 2, + Freight: 1.1700, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 20, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10371, + EmployeeID: 1, + OrderDate: new Date("1996-12-03T00:00:00"), + RequiredDate: new Date("1996-12-31T00:00:00"), + ShippedDate: new Date("1996-12-24T00:00:00"), + ShipVia: 1, + Freight: 0.4500, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 6, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10372, + EmployeeID: 5, + OrderDate: new Date("1996-12-04T00:00:00"), + RequiredDate: new Date("1997-01-01T00:00:00"), + ShippedDate: new Date("1996-12-09T00:00:00"), + ShipVia: 2, + Freight: 890.7800, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 64.8000, + Quantity: 12, + Discount: 2.5000000e-001 + }, { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 70, + Discount: 2.5000000e-001 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 42, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10373, + EmployeeID: 4, + OrderDate: new Date("1996-12-05T00:00:00"), + RequiredDate: new Date("1997-01-02T00:00:00"), + ShippedDate: new Date("1996-12-11T00:00:00"), + ShipVia: 3, + Freight: 124.1200, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 58, + UnitPrice: 10.6000, + Quantity: 80, + Discount: 2.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 50, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10374, + EmployeeID: 1, + OrderDate: new Date("1996-12-05T00:00:00"), + RequiredDate: new Date("1997-01-02T00:00:00"), + ShippedDate: new Date("1996-12-09T00:00:00"), + ShipVia: 3, + Freight: 3.9400, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 58, + UnitPrice: 10.6000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGC", + CompanyName: "Hungry Coyote Import Store", + ContactName: "Yoshi Latimer", + ContactTitle: "Sales Representative", + Address: "City Center Plaza 516 Main St.", + City: "Elgin", + Region: "OR", + PostalCode: "97827", + Country: "USA", + Phone: "(503) 555-6874", + Fax: "(503) 555-2376", + Orders: [ + { + OrderID: 10375, + EmployeeID: 3, + OrderDate: new Date("1996-12-06T00:00:00"), + RequiredDate: new Date("1997-01-03T00:00:00"), + ShippedDate: new Date("1996-12-09T00:00:00"), + ShipVia: 2, + Freight: 20.1200, + ShipName: "Hungry Coyote Import Store", + ShipAddress: "City Center Plaza 516 Main St.", + ShipCity: "Elgin", + ShipRegion: "OR", + ShipPostalCode: "97827", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10376, + EmployeeID: 1, + OrderDate: new Date("1996-12-09T00:00:00"), + RequiredDate: new Date("1997-01-06T00:00:00"), + ShippedDate: new Date("1996-12-13T00:00:00"), + ShipVia: 2, + Freight: 20.3900, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 42, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10377, + EmployeeID: 1, + OrderDate: new Date("1996-12-09T00:00:00"), + RequiredDate: new Date("1997-01-06T00:00:00"), + ShippedDate: new Date("1996-12-13T00:00:00"), + ShipVia: 3, + Freight: 22.2100, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10378, + EmployeeID: 5, + OrderDate: new Date("1996-12-10T00:00:00"), + RequiredDate: new Date("1997-01-07T00:00:00"), + ShippedDate: new Date("1996-12-19T00:00:00"), + ShipVia: 3, + Freight: 5.4400, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10379, + EmployeeID: 2, + OrderDate: new Date("1996-12-11T00:00:00"), + RequiredDate: new Date("1997-01-08T00:00:00"), + ShippedDate: new Date("1996-12-13T00:00:00"), + ShipVia: 1, + Freight: 45.0300, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 16, + Discount: 1.0000000e-001 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10380, + EmployeeID: 8, + OrderDate: new Date("1996-12-12T00:00:00"), + RequiredDate: new Date("1997-01-09T00:00:00"), + ShippedDate: new Date("1997-01-16T00:00:00"), + ShipVia: 3, + Freight: 35.0300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 18, + Discount: 1.0000000e-001 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 6, + Discount: 1.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10381, + EmployeeID: 3, + OrderDate: new Date("1996-12-12T00:00:00"), + RequiredDate: new Date("1997-01-09T00:00:00"), + ShippedDate: new Date("1996-12-13T00:00:00"), + ShipVia: 3, + Freight: 7.9900, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10382, + EmployeeID: 4, + OrderDate: new Date("1996-12-13T00:00:00"), + RequiredDate: new Date("1997-01-10T00:00:00"), + ShippedDate: new Date("1996-12-16T00:00:00"), + ShipVia: 1, + Freight: 94.7700, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 17.0000, + Quantity: 32, + Discount: 0.0000000e+000 + }, { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10383, + EmployeeID: 8, + OrderDate: new Date("1996-12-16T00:00:00"), + RequiredDate: new Date("1997-01-13T00:00:00"), + ShippedDate: new Date("1996-12-18T00:00:00"), + ShipVia: 3, + Freight: 34.2400, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 50, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10384, + EmployeeID: 3, + OrderDate: new Date("1996-12-16T00:00:00"), + RequiredDate: new Date("1997-01-13T00:00:00"), + ShippedDate: new Date("1996-12-20T00:00:00"), + ShipVia: 3, + Freight: 168.6400, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 64.8000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10385, + EmployeeID: 1, + OrderDate: new Date("1996-12-17T00:00:00"), + RequiredDate: new Date("1997-01-14T00:00:00"), + ShippedDate: new Date("1996-12-23T00:00:00"), + ShipVia: 2, + Freight: 30.9600, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 24.0000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 8, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10386, + EmployeeID: 9, + OrderDate: new Date("1996-12-18T00:00:00"), + RequiredDate: new Date("1997-01-01T00:00:00"), + ShippedDate: new Date("1996-12-25T00:00:00"), + ShipVia: 3, + Freight: 13.9900, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 10387, + EmployeeID: 1, + OrderDate: new Date("1996-12-18T00:00:00"), + RequiredDate: new Date("1997-01-15T00:00:00"), + ShippedDate: new Date("1996-12-20T00:00:00"), + ShipVia: 2, + Freight: 93.6300, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10388, + EmployeeID: 2, + OrderDate: new Date("1996-12-19T00:00:00"), + RequiredDate: new Date("1997-01-16T00:00:00"), + ShippedDate: new Date("1996-12-20T00:00:00"), + ShipVia: 1, + Freight: 34.8600, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 45, + UnitPrice: 7.6000, + Quantity: 15, + Discount: 2.0000000e-001 + }, { + ProductID: 52, + UnitPrice: 5.6000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10389, + EmployeeID: 4, + OrderDate: new Date("1996-12-20T00:00:00"), + RequiredDate: new Date("1997-01-17T00:00:00"), + ShippedDate: new Date("1996-12-24T00:00:00"), + ShipVia: 2, + Freight: 47.4200, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10390, + EmployeeID: 6, + OrderDate: new Date("1996-12-23T00:00:00"), + RequiredDate: new Date("1997-01-20T00:00:00"), + ShippedDate: new Date("1996-12-26T00:00:00"), + ShipVia: 1, + Freight: 126.3800, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 60, + Discount: 1.0000000e-001 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 24, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 10391, + EmployeeID: 3, + OrderDate: new Date("1996-12-23T00:00:00"), + RequiredDate: new Date("1997-01-20T00:00:00"), + ShippedDate: new Date("1996-12-31T00:00:00"), + ShipVia: 3, + Freight: 5.4500, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10392, + EmployeeID: 2, + OrderDate: new Date("1996-12-24T00:00:00"), + RequiredDate: new Date("1997-01-21T00:00:00"), + ShippedDate: new Date("1997-01-01T00:00:00"), + ShipVia: 3, + Freight: 122.4600, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10393, + EmployeeID: 1, + OrderDate: new Date("1996-12-25T00:00:00"), + RequiredDate: new Date("1997-01-22T00:00:00"), + ShippedDate: new Date("1997-01-03T00:00:00"), + ShipVia: 3, + Freight: 126.5600, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 25, + Discount: 2.5000000e-001 + }, { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 42, + Discount: 2.5000000e-001 + }, { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 7, + Discount: 2.5000000e-001 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 70, + Discount: 2.5000000e-001 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 32, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGC", + CompanyName: "Hungry Coyote Import Store", + ContactName: "Yoshi Latimer", + ContactTitle: "Sales Representative", + Address: "City Center Plaza 516 Main St.", + City: "Elgin", + Region: "OR", + PostalCode: "97827", + Country: "USA", + Phone: "(503) 555-6874", + Fax: "(503) 555-2376", + Orders: [ + { + OrderID: 10394, + EmployeeID: 1, + OrderDate: new Date("1996-12-25T00:00:00"), + RequiredDate: new Date("1997-01-22T00:00:00"), + ShippedDate: new Date("1997-01-03T00:00:00"), + ShipVia: 3, + Freight: 30.3400, + ShipName: "Hungry Coyote Import Store", + ShipAddress: "City Center Plaza 516 Main St.", + ShipCity: "Elgin", + ShipRegion: "OR", + ShipPostalCode: "97827", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10395, + EmployeeID: 6, + OrderDate: new Date("1996-12-26T00:00:00"), + RequiredDate: new Date("1997-01-23T00:00:00"), + ShippedDate: new Date("1997-01-03T00:00:00"), + ShipVia: 1, + Freight: 184.4100, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 28, + Discount: 1.0000000e-001 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 70, + Discount: 1.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10396, + EmployeeID: 1, + OrderDate: new Date("1996-12-27T00:00:00"), + RequiredDate: new Date("1997-01-10T00:00:00"), + ShippedDate: new Date("1997-01-06T00:00:00"), + ShipVia: 3, + Freight: 135.3500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PRINI", + CompanyName: "Princesa Isabel Vinhos", + ContactName: "Isabel de Castro", + ContactTitle: "Sales Representative", + Address: "Estrada da saúde n. 58", + City: "Lisboa", + PostalCode: "1756", + Country: "Portugal", + Phone: "(1) 356-5634", + Orders: [ + { + OrderID: 10397, + EmployeeID: 5, + OrderDate: new Date("1996-12-27T00:00:00"), + RequiredDate: new Date("1997-01-24T00:00:00"), + ShippedDate: new Date("1997-01-02T00:00:00"), + ShipVia: 1, + Freight: 60.2600, + ShipName: "Princesa Isabel Vinhos", + ShipAddress: "Estrada da saúde n. 58", + ShipCity: "Lisboa", + ShipPostalCode: "1756", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 10, + Discount: 1.5000001e-001 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 18, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10398, + EmployeeID: 2, + OrderDate: new Date("1996-12-30T00:00:00"), + RequiredDate: new Date("1997-01-27T00:00:00"), + ShippedDate: new Date("1997-01-09T00:00:00"), + ShipVia: 3, + Freight: 89.1600, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 120, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10399, + EmployeeID: 8, + OrderDate: new Date("1996-12-31T00:00:00"), + RequiredDate: new Date("1997-01-14T00:00:00"), + ShippedDate: new Date("1997-01-08T00:00:00"), + ShipVia: 3, + Freight: 27.3600, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 10400, + EmployeeID: 1, + OrderDate: new Date("1997-01-01T00:00:00"), + RequiredDate: new Date("1997-01-29T00:00:00"), + ShippedDate: new Date("1997-01-16T00:00:00"), + ShipVia: 3, + Freight: 83.9300, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10401, + EmployeeID: 1, + OrderDate: new Date("1997-01-01T00:00:00"), + RequiredDate: new Date("1997-01-29T00:00:00"), + ShippedDate: new Date("1997-01-10T00:00:00"), + ShipVia: 1, + Freight: 12.5100, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10402, + EmployeeID: 8, + OrderDate: new Date("1997-01-02T00:00:00"), + RequiredDate: new Date("1997-02-13T00:00:00"), + ShippedDate: new Date("1997-01-10T00:00:00"), + ShipVia: 2, + Freight: 67.8800, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 65, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10403, + EmployeeID: 4, + OrderDate: new Date("1997-01-03T00:00:00"), + RequiredDate: new Date("1997-01-31T00:00:00"), + ShippedDate: new Date("1997-01-09T00:00:00"), + ShipVia: 3, + Freight: 73.7900, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 21, + Discount: 1.5000001e-001 + }, { + ProductID: 48, + UnitPrice: 10.2000, + Quantity: 70, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10404, + EmployeeID: 2, + OrderDate: new Date("1997-01-03T00:00:00"), + RequiredDate: new Date("1997-01-31T00:00:00"), + ShippedDate: new Date("1997-01-08T00:00:00"), + ShipVia: 1, + Freight: 155.9700, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 40, + Discount: 5.0000001e-002 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 30, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10405, + EmployeeID: 1, + OrderDate: new Date("1997-01-06T00:00:00"), + RequiredDate: new Date("1997-02-03T00:00:00"), + ShippedDate: new Date("1997-01-22T00:00:00"), + ShipVia: 1, + Freight: 34.8200, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 8.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10406, + EmployeeID: 7, + OrderDate: new Date("1997-01-07T00:00:00"), + RequiredDate: new Date("1997-02-18T00:00:00"), + ShippedDate: new Date("1997-01-13T00:00:00"), + ShipVia: 1, + Freight: 108.0400, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 42, + Discount: 1.0000000e-001 + }, { + ProductID: 36, + UnitPrice: 15.2000, + Quantity: 5, + Discount: 1.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 2, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10407, + EmployeeID: 2, + OrderDate: new Date("1997-01-07T00:00:00"), + RequiredDate: new Date("1997-02-04T00:00:00"), + ShippedDate: new Date("1997-01-30T00:00:00"), + ShipVia: 2, + Freight: 91.4800, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLIG", + CompanyName: "Folies gourmandes", + ContactName: "Martine Rancé", + ContactTitle: "Assistant Sales Agent", + Address: "184, chaussée de Tournai", + City: "Lille", + PostalCode: "59000", + Country: "France", + Phone: "20.16.10.16", + Fax: "20.16.10.17", + Orders: [ + { + OrderID: 10408, + EmployeeID: 8, + OrderDate: new Date("1997-01-08T00:00:00"), + RequiredDate: new Date("1997-02-05T00:00:00"), + ShippedDate: new Date("1997-01-14T00:00:00"), + ShipVia: 1, + Freight: 11.2600, + ShipName: "Folies gourmandes", + ShipAddress: "184, chaussée de Tournai", + ShipCity: "Lille", + ShipPostalCode: "59000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 37, + UnitPrice: 20.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OCEAN", + CompanyName: "Océano Atlántico Ltda.", + ContactName: "Yvonne Moncada", + ContactTitle: "Sales Agent", + Address: "Ing. Gustavo Moncada 8585 Piso 20-A", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5333", + Fax: "(1) 135-5535", + Orders: [ + { + OrderID: 10409, + EmployeeID: 3, + OrderDate: new Date("1997-01-09T00:00:00"), + RequiredDate: new Date("1997-02-06T00:00:00"), + ShippedDate: new Date("1997-01-14T00:00:00"), + ShipVia: 1, + Freight: 29.8300, + ShipName: "Océano Atlántico Ltda.", + ShipAddress: "Ing. Gustavo Moncada 8585 Piso 20-A", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10410, + EmployeeID: 3, + OrderDate: new Date("1997-01-10T00:00:00"), + RequiredDate: new Date("1997-02-07T00:00:00"), + ShippedDate: new Date("1997-01-15T00:00:00"), + ShipVia: 3, + Freight: 2.4000, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 49, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10411, + EmployeeID: 9, + OrderDate: new Date("1997-01-10T00:00:00"), + RequiredDate: new Date("1997-02-07T00:00:00"), + ShippedDate: new Date("1997-01-21T00:00:00"), + ShipVia: 3, + Freight: 23.6500, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 25, + Discount: 2.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 9, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10412, + EmployeeID: 8, + OrderDate: new Date("1997-01-13T00:00:00"), + RequiredDate: new Date("1997-02-10T00:00:00"), + ShippedDate: new Date("1997-01-15T00:00:00"), + ShipVia: 2, + Freight: 3.7700, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10413, + EmployeeID: 3, + OrderDate: new Date("1997-01-14T00:00:00"), + RequiredDate: new Date("1997-02-11T00:00:00"), + ShippedDate: new Date("1997-01-16T00:00:00"), + ShipVia: 2, + Freight: 95.6600, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10414, + EmployeeID: 2, + OrderDate: new Date("1997-01-14T00:00:00"), + RequiredDate: new Date("1997-02-11T00:00:00"), + ShippedDate: new Date("1997-01-17T00:00:00"), + ShipVia: 3, + Freight: 21.4800, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 18, + Discount: 5.0000001e-002 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGC", + CompanyName: "Hungry Coyote Import Store", + ContactName: "Yoshi Latimer", + ContactTitle: "Sales Representative", + Address: "City Center Plaza 516 Main St.", + City: "Elgin", + Region: "OR", + PostalCode: "97827", + Country: "USA", + Phone: "(503) 555-6874", + Fax: "(503) 555-2376", + Orders: [ + { + OrderID: 10415, + EmployeeID: 3, + OrderDate: new Date("1997-01-15T00:00:00"), + RequiredDate: new Date("1997-02-12T00:00:00"), + ShippedDate: new Date("1997-01-24T00:00:00"), + ShipVia: 1, + Freight: 0.2000, + ShipName: "Hungry Coyote Import Store", + ShipAddress: "City Center Plaza 516 Main St.", + ShipCity: "Elgin", + ShipRegion: "OR", + ShipPostalCode: "97827", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10416, + EmployeeID: 8, + OrderDate: new Date("1997-01-16T00:00:00"), + RequiredDate: new Date("1997-02-13T00:00:00"), + ShippedDate: new Date("1997-01-27T00:00:00"), + ShipVia: 3, + Freight: 22.7200, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10417, + EmployeeID: 4, + OrderDate: new Date("1997-01-16T00:00:00"), + RequiredDate: new Date("1997-02-13T00:00:00"), + ShippedDate: new Date("1997-01-28T00:00:00"), + ShipVia: 3, + Freight: 70.2900, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 2, + Discount: 2.5000000e-001 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 36, + Discount: 2.5000000e-001 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10418, + EmployeeID: 4, + OrderDate: new Date("1997-01-17T00:00:00"), + RequiredDate: new Date("1997-02-14T00:00:00"), + ShippedDate: new Date("1997-01-24T00:00:00"), + ShipVia: 1, + Freight: 17.5500, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 7.6000, + Quantity: 55, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 22.8000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10419, + EmployeeID: 4, + OrderDate: new Date("1997-01-20T00:00:00"), + RequiredDate: new Date("1997-02-17T00:00:00"), + ShippedDate: new Date("1997-01-30T00:00:00"), + ShipVia: 2, + Freight: 137.3500, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 60, + Discount: 5.0000001e-002 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10420, + EmployeeID: 3, + OrderDate: new Date("1997-01-21T00:00:00"), + RequiredDate: new Date("1997-02-18T00:00:00"), + ShippedDate: new Date("1997-01-27T00:00:00"), + ShipVia: 1, + Freight: 44.1200, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 9, + UnitPrice: 77.6000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 2, + Discount: 1.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 73, + UnitPrice: 12.0000, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10421, + EmployeeID: 8, + OrderDate: new Date("1997-01-21T00:00:00"), + RequiredDate: new Date("1997-03-04T00:00:00"), + ShippedDate: new Date("1997-01-27T00:00:00"), + ShipVia: 1, + Freight: 99.2300, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 4, + Discount: 1.5000001e-001 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 10, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 10422, + EmployeeID: 2, + OrderDate: new Date("1997-01-22T00:00:00"), + RequiredDate: new Date("1997-02-19T00:00:00"), + ShippedDate: new Date("1997-01-31T00:00:00"), + ShipVia: 1, + Freight: 3.0200, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10423, + EmployeeID: 6, + OrderDate: new Date("1997-01-23T00:00:00"), + RequiredDate: new Date("1997-02-06T00:00:00"), + ShippedDate: new Date("1997-02-24T00:00:00"), + ShipVia: 3, + Freight: 24.5000, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10424, + EmployeeID: 7, + OrderDate: new Date("1997-01-23T00:00:00"), + RequiredDate: new Date("1997-02-20T00:00:00"), + ShippedDate: new Date("1997-01-27T00:00:00"), + ShipVia: 2, + Freight: 370.6100, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 60, + Discount: 2.0000000e-001 + }, { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 49, + Discount: 2.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10425, + EmployeeID: 6, + OrderDate: new Date("1997-01-24T00:00:00"), + RequiredDate: new Date("1997-02-21T00:00:00"), + ShippedDate: new Date("1997-02-14T00:00:00"), + ShipVia: 2, + Freight: 7.9300, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 10, + Discount: 2.5000000e-001 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "GALED", + CompanyName: "Galería del gastrónomo", + ContactName: "Eduardo Saavedra", + ContactTitle: "Marketing Manager", + Address: "Rambla de Cataluña, 23", + City: "Barcelona", + PostalCode: "08022", + Country: "Spain", + Phone: "(93) 203 4560", + Fax: "(93) 203 4561", + Orders: [ + { + OrderID: 10426, + EmployeeID: 4, + OrderDate: new Date("1997-01-27T00:00:00"), + RequiredDate: new Date("1997-02-24T00:00:00"), + ShippedDate: new Date("1997-02-06T00:00:00"), + ShipVia: 1, + Freight: 18.6900, + ShipName: "Galería del gastronómo", + ShipAddress: "Rambla de Cataluña, 23", + ShipCity: "Barcelona", + ShipPostalCode: "8022", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10427, + EmployeeID: 4, + OrderDate: new Date("1997-01-27T00:00:00"), + RequiredDate: new Date("1997-02-24T00:00:00"), + ShippedDate: new Date("1997-03-03T00:00:00"), + ShipVia: 2, + Freight: 31.2900, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10428, + EmployeeID: 7, + OrderDate: new Date("1997-01-28T00:00:00"), + RequiredDate: new Date("1997-02-25T00:00:00"), + ShippedDate: new Date("1997-02-04T00:00:00"), + ShipVia: 1, + Freight: 11.0900, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10429, + EmployeeID: 3, + OrderDate: new Date("1997-01-29T00:00:00"), + RequiredDate: new Date("1997-03-12T00:00:00"), + ShippedDate: new Date("1997-02-07T00:00:00"), + ShipVia: 2, + Freight: 56.6300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 50, + UnitPrice: 13.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 35.1000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10430, + EmployeeID: 4, + OrderDate: new Date("1997-01-30T00:00:00"), + RequiredDate: new Date("1997-02-13T00:00:00"), + ShippedDate: new Date("1997-02-03T00:00:00"), + ShipVia: 1, + Freight: 458.7800, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 45, + Discount: 2.0000000e-001 + }, { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 70, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10431, + EmployeeID: 4, + OrderDate: new Date("1997-01-30T00:00:00"), + RequiredDate: new Date("1997-02-13T00:00:00"), + ShippedDate: new Date("1997-02-07T00:00:00"), + ShipVia: 2, + Freight: 44.1700, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 47, + UnitPrice: 7.6000, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10432, + EmployeeID: 3, + OrderDate: new Date("1997-01-31T00:00:00"), + RequiredDate: new Date("1997-02-14T00:00:00"), + ShippedDate: new Date("1997-02-07T00:00:00"), + ShipVia: 2, + Freight: 4.3400, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PRINI", + CompanyName: "Princesa Isabel Vinhos", + ContactName: "Isabel de Castro", + ContactTitle: "Sales Representative", + Address: "Estrada da saúde n. 58", + City: "Lisboa", + PostalCode: "1756", + Country: "Portugal", + Phone: "(1) 356-5634", + Orders: [ + { + OrderID: 10433, + EmployeeID: 3, + OrderDate: new Date("1997-02-03T00:00:00"), + RequiredDate: new Date("1997-03-03T00:00:00"), + ShippedDate: new Date("1997-03-04T00:00:00"), + ShipVia: 3, + Freight: 73.8300, + ShipName: "Princesa Isabel Vinhos", + ShipAddress: "Estrada da saúde n. 58", + ShipCity: "Lisboa", + ShipPostalCode: "1756", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10434, + EmployeeID: 3, + OrderDate: new Date("1997-02-03T00:00:00"), + RequiredDate: new Date("1997-03-03T00:00:00"), + ShippedDate: new Date("1997-02-13T00:00:00"), + ShipVia: 2, + Freight: 17.9200, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 18, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "CONSH", + CompanyName: "Consolidated Holdings", + ContactName: "Elizabeth Brown", + ContactTitle: "Sales Representative", + Address: "Berkeley Gardens 12 Brewery", + City: "London", + PostalCode: "WX1 6LT", + Country: "UK", + Phone: "(171) 555-2282", + Fax: "(171) 555-9199", + Orders: [ + { + OrderID: 10435, + EmployeeID: 8, + OrderDate: new Date("1997-02-04T00:00:00"), + RequiredDate: new Date("1997-03-18T00:00:00"), + ShippedDate: new Date("1997-02-07T00:00:00"), + ShipVia: 2, + Freight: 9.2100, + ShipName: "Consolidated Holdings", + ShipAddress: "Berkeley Gardens 12 Brewery", + ShipCity: "London", + ShipPostalCode: "WX1 6LT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 16.8000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10436, + EmployeeID: 3, + OrderDate: new Date("1997-02-05T00:00:00"), + RequiredDate: new Date("1997-03-05T00:00:00"), + ShippedDate: new Date("1997-02-11T00:00:00"), + ShipVia: 2, + Freight: 156.6600, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 24, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10437, + EmployeeID: 8, + OrderDate: new Date("1997-02-05T00:00:00"), + RequiredDate: new Date("1997-03-05T00:00:00"), + ShippedDate: new Date("1997-02-12T00:00:00"), + ShipVia: 1, + Freight: 19.9700, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10438, + EmployeeID: 3, + OrderDate: new Date("1997-02-06T00:00:00"), + RequiredDate: new Date("1997-03-06T00:00:00"), + ShippedDate: new Date("1997-02-14T00:00:00"), + ShipVia: 2, + Freight: 8.2400, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 15, + Discount: 2.0000000e-001 + }, { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 57, + UnitPrice: 15.6000, + Quantity: 15, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10439, + EmployeeID: 6, + OrderDate: new Date("1997-02-07T00:00:00"), + RequiredDate: new Date("1997-03-07T00:00:00"), + ShippedDate: new Date("1997-02-10T00:00:00"), + ShipVia: 3, + Freight: 4.0700, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 30.4000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10440, + EmployeeID: 4, + OrderDate: new Date("1997-02-10T00:00:00"), + RequiredDate: new Date("1997-03-10T00:00:00"), + ShippedDate: new Date("1997-02-28T00:00:00"), + ShipVia: 2, + Freight: 86.5300, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 45, + Discount: 1.5000001e-001 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 49, + Discount: 1.5000001e-001 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 24, + Discount: 1.5000001e-001 + }, { + ProductID: 61, + UnitPrice: 22.8000, + Quantity: 90, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10441, + EmployeeID: 3, + OrderDate: new Date("1997-02-10T00:00:00"), + RequiredDate: new Date("1997-03-24T00:00:00"), + ShippedDate: new Date("1997-03-14T00:00:00"), + ShipVia: 2, + Freight: 73.0200, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 27, + UnitPrice: 35.1000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10442, + EmployeeID: 3, + OrderDate: new Date("1997-02-11T00:00:00"), + RequiredDate: new Date("1997-03-11T00:00:00"), + ShippedDate: new Date("1997-02-18T00:00:00"), + ShipVia: 2, + Freight: 47.9400, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 80, + Discount: 0.0000000e+000 + }, { + ProductID: 66, + UnitPrice: 13.6000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10443, + EmployeeID: 8, + OrderDate: new Date("1997-02-12T00:00:00"), + RequiredDate: new Date("1997-03-12T00:00:00"), + ShippedDate: new Date("1997-02-14T00:00:00"), + ShipVia: 1, + Freight: 13.9500, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 6, + Discount: 2.0000000e-001 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10444, + EmployeeID: 3, + OrderDate: new Date("1997-02-12T00:00:00"), + RequiredDate: new Date("1997-03-12T00:00:00"), + ShippedDate: new Date("1997-02-21T00:00:00"), + ShipVia: 3, + Freight: 3.5000, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 31.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 14.4000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10445, + EmployeeID: 3, + OrderDate: new Date("1997-02-13T00:00:00"), + RequiredDate: new Date("1997-03-13T00:00:00"), + ShippedDate: new Date("1997-02-20T00:00:00"), + ShipVia: 1, + Freight: 9.3000, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10446, + EmployeeID: 6, + OrderDate: new Date("1997-02-14T00:00:00"), + RequiredDate: new Date("1997-03-14T00:00:00"), + ShippedDate: new Date("1997-02-19T00:00:00"), + ShipVia: 1, + Freight: 14.6800, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 12, + Discount: 1.0000000e-001 + }, { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 3, + Discount: 1.0000000e-001 + }, { + ProductID: 52, + UnitPrice: 5.6000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10447, + EmployeeID: 4, + OrderDate: new Date("1997-02-14T00:00:00"), + RequiredDate: new Date("1997-03-14T00:00:00"), + ShippedDate: new Date("1997-03-07T00:00:00"), + ShipVia: 2, + Freight: 68.6600, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RANCH", + CompanyName: "Rancho grande", + ContactName: "Sergio Gutiérrez", + ContactTitle: "Sales Representative", + Address: "Av. del Libertador 900", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 123-5555", + Fax: "(1) 123-5556", + Orders: [ + { + OrderID: 10448, + EmployeeID: 4, + OrderDate: new Date("1997-02-17T00:00:00"), + RequiredDate: new Date("1997-03-17T00:00:00"), + ShippedDate: new Date("1997-02-24T00:00:00"), + ShipVia: 2, + Freight: 38.8200, + ShipName: "Rancho grande", + ShipAddress: "Av. del Libertador 900", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10449, + EmployeeID: 3, + OrderDate: new Date("1997-02-18T00:00:00"), + RequiredDate: new Date("1997-03-18T00:00:00"), + ShippedDate: new Date("1997-02-27T00:00:00"), + ShipVia: 2, + Freight: 53.3000, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 5.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 39.4000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10450, + EmployeeID: 8, + OrderDate: new Date("1997-02-19T00:00:00"), + RequiredDate: new Date("1997-03-19T00:00:00"), + ShippedDate: new Date("1997-03-11T00:00:00"), + ShipVia: 2, + Freight: 7.2300, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 6, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10451, + EmployeeID: 4, + OrderDate: new Date("1997-02-19T00:00:00"), + RequiredDate: new Date("1997-03-05T00:00:00"), + ShippedDate: new Date("1997-03-12T00:00:00"), + ShipVia: 3, + Freight: 189.0900, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 120, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 35, + Discount: 1.0000000e-001 + }, { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 28, + Discount: 1.0000000e-001 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 55, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10452, + EmployeeID: 8, + OrderDate: new Date("1997-02-20T00:00:00"), + RequiredDate: new Date("1997-03-20T00:00:00"), + ShippedDate: new Date("1997-02-26T00:00:00"), + ShipVia: 1, + Freight: 140.2600, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 100, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10453, + EmployeeID: 1, + OrderDate: new Date("1997-02-21T00:00:00"), + RequiredDate: new Date("1997-03-21T00:00:00"), + ShippedDate: new Date("1997-02-26T00:00:00"), + ShipVia: 2, + Freight: 25.3600, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 48, + UnitPrice: 10.2000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 25, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10454, + EmployeeID: 4, + OrderDate: new Date("1997-02-21T00:00:00"), + RequiredDate: new Date("1997-03-21T00:00:00"), + ShippedDate: new Date("1997-02-25T00:00:00"), + ShipVia: 3, + Freight: 2.7400, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10455, + EmployeeID: 8, + OrderDate: new Date("1997-02-24T00:00:00"), + RequiredDate: new Date("1997-04-07T00:00:00"), + ShippedDate: new Date("1997-03-03T00:00:00"), + ShipVia: 2, + Freight: 180.4500, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 22.8000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10456, + EmployeeID: 8, + OrderDate: new Date("1997-02-25T00:00:00"), + RequiredDate: new Date("1997-04-08T00:00:00"), + ShippedDate: new Date("1997-02-28T00:00:00"), + ShipVia: 2, + Freight: 8.1200, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 21, + Discount: 1.5000001e-001 + } + ] + }, { + OrderID: 10457, + EmployeeID: 2, + OrderDate: new Date("1997-02-25T00:00:00"), + RequiredDate: new Date("1997-03-25T00:00:00"), + ShippedDate: new Date("1997-03-03T00:00:00"), + ShipVia: 1, + Freight: 11.5700, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 36, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10458, + EmployeeID: 7, + OrderDate: new Date("1997-02-26T00:00:00"), + RequiredDate: new Date("1997-03-26T00:00:00"), + ShippedDate: new Date("1997-03-04T00:00:00"), + ShipVia: 3, + Freight: 147.0600, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10459, + EmployeeID: 4, + OrderDate: new Date("1997-02-27T00:00:00"), + RequiredDate: new Date("1997-03-27T00:00:00"), + ShippedDate: new Date("1997-02-28T00:00:00"), + ShipVia: 2, + Freight: 25.0900, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 24.0000, + Quantity: 16, + Discount: 5.0000001e-002 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10460, + EmployeeID: 8, + OrderDate: new Date("1997-02-28T00:00:00"), + RequiredDate: new Date("1997-03-28T00:00:00"), + ShippedDate: new Date("1997-03-03T00:00:00"), + ShipVia: 1, + Freight: 16.2700, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 21, + Discount: 2.5000000e-001 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 4, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10461, + EmployeeID: 1, + OrderDate: new Date("1997-02-28T00:00:00"), + RequiredDate: new Date("1997-03-28T00:00:00"), + ShippedDate: new Date("1997-03-05T00:00:00"), + ShipVia: 3, + Freight: 148.6100, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 28, + Discount: 2.5000000e-001 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 60, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "CONSH", + CompanyName: "Consolidated Holdings", + ContactName: "Elizabeth Brown", + ContactTitle: "Sales Representative", + Address: "Berkeley Gardens 12 Brewery", + City: "London", + PostalCode: "WX1 6LT", + Country: "UK", + Phone: "(171) 555-2282", + Fax: "(171) 555-9199", + Orders: [ + { + OrderID: 10462, + EmployeeID: 2, + OrderDate: new Date("1997-03-03T00:00:00"), + RequiredDate: new Date("1997-03-31T00:00:00"), + ShippedDate: new Date("1997-03-18T00:00:00"), + ShipVia: 1, + Freight: 6.1700, + ShipName: "Consolidated Holdings", + ShipAddress: "Berkeley Gardens 12 Brewery", + ShipCity: "London", + ShipPostalCode: "WX1 6LT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 4.8000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10463, + EmployeeID: 5, + OrderDate: new Date("1997-03-04T00:00:00"), + RequiredDate: new Date("1997-04-01T00:00:00"), + ShippedDate: new Date("1997-03-06T00:00:00"), + ShipVia: 3, + Freight: 14.7800, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10464, + EmployeeID: 4, + OrderDate: new Date("1997-03-04T00:00:00"), + RequiredDate: new Date("1997-04-01T00:00:00"), + ShippedDate: new Date("1997-03-14T00:00:00"), + ShipVia: 2, + Freight: 89.0000, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 17.6000, + Quantity: 16, + Discount: 2.0000000e-001 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10465, + EmployeeID: 1, + OrderDate: new Date("1997-03-05T00:00:00"), + RequiredDate: new Date("1997-04-02T00:00:00"), + ShippedDate: new Date("1997-03-14T00:00:00"), + ShipVia: 3, + Freight: 145.0400, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 99.0000, + Quantity: 18, + Discount: 1.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 45, + UnitPrice: 7.6000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 50, + UnitPrice: 13.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "COMMI", + CompanyName: "Comércio Mineiro", + ContactName: "Pedro Afonso", + ContactTitle: "Sales Associate", + Address: "Av. dos Lusíadas, 23", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05432-043", + Country: "Brazil", + Phone: "(11) 555-7647", + Orders: [ + { + OrderID: 10466, + EmployeeID: 4, + OrderDate: new Date("1997-03-06T00:00:00"), + RequiredDate: new Date("1997-04-03T00:00:00"), + ShippedDate: new Date("1997-03-13T00:00:00"), + ShipVia: 1, + Freight: 11.9300, + ShipName: "Comércio Mineiro", + ShipAddress: "Av. dos Lusíadas, 23", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05432-043", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 9.6000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10467, + EmployeeID: 8, + OrderDate: new Date("1997-03-06T00:00:00"), + RequiredDate: new Date("1997-04-03T00:00:00"), + ShippedDate: new Date("1997-03-11T00:00:00"), + ShipVia: 2, + Freight: 4.9300, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10468, + EmployeeID: 3, + OrderDate: new Date("1997-03-07T00:00:00"), + RequiredDate: new Date("1997-04-04T00:00:00"), + ShippedDate: new Date("1997-03-12T00:00:00"), + ShipVia: 3, + Freight: 44.1200, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 20.7000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 36.8000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10469, + EmployeeID: 1, + OrderDate: new Date("1997-03-10T00:00:00"), + RequiredDate: new Date("1997-04-07T00:00:00"), + ShippedDate: new Date("1997-03-14T00:00:00"), + ShipVia: 1, + Freight: 60.1800, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 35, + Discount: 1.5000001e-001 + }, { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 2, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10470, + EmployeeID: 4, + OrderDate: new Date("1997-03-11T00:00:00"), + RequiredDate: new Date("1997-04-08T00:00:00"), + ShippedDate: new Date("1997-03-14T00:00:00"), + ShipVia: 2, + Freight: 64.5600, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 50.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10471, + EmployeeID: 2, + OrderDate: new Date("1997-03-11T00:00:00"), + RequiredDate: new Date("1997-04-08T00:00:00"), + ShippedDate: new Date("1997-03-18T00:00:00"), + ShipVia: 3, + Freight: 45.5900, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 24.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10472, + EmployeeID: 8, + OrderDate: new Date("1997-03-12T00:00:00"), + RequiredDate: new Date("1997-04-09T00:00:00"), + ShippedDate: new Date("1997-03-19T00:00:00"), + ShipVia: 1, + Freight: 4.2000, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 3.6000, + Quantity: 80, + Discount: 5.0000001e-002 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10473, + EmployeeID: 1, + OrderDate: new Date("1997-03-13T00:00:00"), + RequiredDate: new Date("1997-03-27T00:00:00"), + ShippedDate: new Date("1997-03-21T00:00:00"), + ShipVia: 3, + Freight: 16.3700, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 17.2000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 10474, + EmployeeID: 5, + OrderDate: new Date("1997-03-13T00:00:00"), + RequiredDate: new Date("1997-04-10T00:00:00"), + ShippedDate: new Date("1997-03-21T00:00:00"), + ShipVia: 2, + Freight: 83.4900, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 18.6000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 36.4000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10475, + EmployeeID: 9, + OrderDate: new Date("1997-03-14T00:00:00"), + RequiredDate: new Date("1997-04-11T00:00:00"), + ShippedDate: new Date("1997-04-04T00:00:00"), + ShipVia: 1, + Freight: 68.5200, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 35, + Discount: 1.5000001e-001 + }, { + ProductID: 66, + UnitPrice: 13.6000, + Quantity: 60, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 14.4000, + Quantity: 42, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10476, + EmployeeID: 8, + OrderDate: new Date("1997-03-17T00:00:00"), + RequiredDate: new Date("1997-04-14T00:00:00"), + ShippedDate: new Date("1997-03-24T00:00:00"), + ShipVia: 3, + Freight: 4.4100, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 2, + Discount: 5.0000001e-002 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PRINI", + CompanyName: "Princesa Isabel Vinhos", + ContactName: "Isabel de Castro", + ContactTitle: "Sales Representative", + Address: "Estrada da saúde n. 58", + City: "Lisboa", + PostalCode: "1756", + Country: "Portugal", + Phone: "(1) 356-5634", + Orders: [ + { + OrderID: 10477, + EmployeeID: 5, + OrderDate: new Date("1997-03-17T00:00:00"), + RequiredDate: new Date("1997-04-14T00:00:00"), + ShippedDate: new Date("1997-03-25T00:00:00"), + ShipVia: 2, + Freight: 13.0200, + ShipName: "Princesa Isabel Vinhos", + ShipAddress: "Estrada da saúde n. 58", + ShipCity: "Lisboa", + ShipPostalCode: "1756", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 14.4000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 21, + Discount: 2.5000000e-001 + }, { + ProductID: 39, + UnitPrice: 14.4000, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10478, + EmployeeID: 2, + OrderDate: new Date("1997-03-18T00:00:00"), + RequiredDate: new Date("1997-04-01T00:00:00"), + ShippedDate: new Date("1997-03-26T00:00:00"), + ShipVia: 3, + Freight: 4.8100, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 24.8000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10479, + EmployeeID: 3, + OrderDate: new Date("1997-03-19T00:00:00"), + RequiredDate: new Date("1997-04-16T00:00:00"), + ShippedDate: new Date("1997-03-21T00:00:00"), + ShipVia: 3, + Freight: 708.9500, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 210.8000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 26.2000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 26.6000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLIG", + CompanyName: "Folies gourmandes", + ContactName: "Martine Rancé", + ContactTitle: "Assistant Sales Agent", + Address: "184, chaussée de Tournai", + City: "Lille", + PostalCode: "59000", + Country: "France", + Phone: "20.16.10.16", + Fax: "20.16.10.17", + Orders: [ + { + OrderID: 10480, + EmployeeID: 6, + OrderDate: new Date("1997-03-20T00:00:00"), + RequiredDate: new Date("1997-04-17T00:00:00"), + ShippedDate: new Date("1997-03-24T00:00:00"), + ShipVia: 2, + Freight: 1.3500, + ShipName: "Folies gourmandes", + ShipAddress: "184, chaussée de Tournai", + ShipCity: "Lille", + ShipPostalCode: "59000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 7.6000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10481, + EmployeeID: 8, + OrderDate: new Date("1997-03-20T00:00:00"), + RequiredDate: new Date("1997-04-17T00:00:00"), + ShippedDate: new Date("1997-03-25T00:00:00"), + ShipVia: 2, + Freight: 64.3300, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 49, + UnitPrice: 16.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 27.2000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAZYK", + CompanyName: "Lazy K Kountry Store", + ContactName: "John Steel", + ContactTitle: "Marketing Manager", + Address: "12 Orchestra Terrace", + City: "Walla Walla", + Region: "WA", + PostalCode: "99362", + Country: "USA", + Phone: "(509) 555-7969", + Fax: "(509) 555-6221", + Orders: [ + { + OrderID: 10482, + EmployeeID: 1, + OrderDate: new Date("1997-03-21T00:00:00"), + RequiredDate: new Date("1997-04-18T00:00:00"), + ShippedDate: new Date("1997-04-10T00:00:00"), + ShipVia: 3, + Freight: 7.4800, + ShipName: "Lazy K Kountry Store", + ShipAddress: "12 Orchestra Terrace", + ShipCity: "Walla Walla", + ShipRegion: "WA", + ShipPostalCode: "99362", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10483, + EmployeeID: 7, + OrderDate: new Date("1997-03-24T00:00:00"), + RequiredDate: new Date("1997-04-21T00:00:00"), + ShippedDate: new Date("1997-04-25T00:00:00"), + ShipVia: 2, + Freight: 15.2800, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 11.2000, + Quantity: 35, + Discount: 5.0000001e-002 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 30, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10484, + EmployeeID: 3, + OrderDate: new Date("1997-03-24T00:00:00"), + RequiredDate: new Date("1997-04-21T00:00:00"), + ShippedDate: new Date("1997-04-01T00:00:00"), + ShipVia: 3, + Freight: 6.8800, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 8.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 14.7000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10485, + EmployeeID: 4, + OrderDate: new Date("1997-03-25T00:00:00"), + RequiredDate: new Date("1997-04-08T00:00:00"), + ShippedDate: new Date("1997-03-31T00:00:00"), + ShipVia: 2, + Freight: 64.4500, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 15.2000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 3, + UnitPrice: 8.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 55, + UnitPrice: 19.2000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 12.0000, + Quantity: 60, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10486, + EmployeeID: 1, + OrderDate: new Date("1997-03-26T00:00:00"), + RequiredDate: new Date("1997-04-23T00:00:00"), + ShippedDate: new Date("1997-04-02T00:00:00"), + ShipVia: 2, + Freight: 30.5300, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 42.4000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 8.0000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10487, + EmployeeID: 2, + OrderDate: new Date("1997-03-26T00:00:00"), + RequiredDate: new Date("1997-04-23T00:00:00"), + ShippedDate: new Date("1997-03-28T00:00:00"), + ShipVia: 2, + Freight: 71.0700, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 7.3000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 24.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 5.9000, + Quantity: 24, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10488, + EmployeeID: 8, + OrderDate: new Date("1997-03-27T00:00:00"), + RequiredDate: new Date("1997-04-24T00:00:00"), + ShippedDate: new Date("1997-04-02T00:00:00"), + ShipVia: 2, + Freight: 4.9300, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 12.0000, + Quantity: 20, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10489, + EmployeeID: 6, + OrderDate: new Date("1997-03-28T00:00:00"), + RequiredDate: new Date("1997-04-25T00:00:00"), + ShippedDate: new Date("1997-04-09T00:00:00"), + ShipVia: 2, + Freight: 5.2900, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 16.8000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 16, + UnitPrice: 13.9000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10490, + EmployeeID: 7, + OrderDate: new Date("1997-03-31T00:00:00"), + RequiredDate: new Date("1997-04-28T00:00:00"), + ShippedDate: new Date("1997-04-03T00:00:00"), + ShipVia: 2, + Freight: 210.1900, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 44.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 6.2000, + Quantity: 36, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10491, + EmployeeID: 8, + OrderDate: new Date("1997-03-31T00:00:00"), + RequiredDate: new Date("1997-04-28T00:00:00"), + ShippedDate: new Date("1997-04-08T00:00:00"), + ShipVia: 3, + Freight: 16.9600, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 44, + UnitPrice: 15.5000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 7, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10492, + EmployeeID: 3, + OrderDate: new Date("1997-04-01T00:00:00"), + RequiredDate: new Date("1997-04-29T00:00:00"), + ShippedDate: new Date("1997-04-11T00:00:00"), + ShipVia: 1, + Freight: 62.8900, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 11.2000, + Quantity: 60, + Discount: 5.0000001e-002 + }, { + ProductID: 42, + UnitPrice: 11.2000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10493, + EmployeeID: 4, + OrderDate: new Date("1997-04-02T00:00:00"), + RequiredDate: new Date("1997-04-30T00:00:00"), + ShippedDate: new Date("1997-04-10T00:00:00"), + ShipVia: 3, + Freight: 10.6400, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 65, + UnitPrice: 16.8000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 66, + UnitPrice: 13.6000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 28.8000, + Quantity: 10, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "COMMI", + CompanyName: "Comércio Mineiro", + ContactName: "Pedro Afonso", + ContactTitle: "Sales Associate", + Address: "Av. dos Lusíadas, 23", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05432-043", + Country: "Brazil", + Phone: "(11) 555-7647", + Orders: [ + { + OrderID: 10494, + EmployeeID: 4, + OrderDate: new Date("1997-04-02T00:00:00"), + RequiredDate: new Date("1997-04-30T00:00:00"), + ShippedDate: new Date("1997-04-09T00:00:00"), + ShipVia: 2, + Freight: 65.9900, + ShipName: "Comércio Mineiro", + ShipAddress: "Av. dos Lusíadas, 23", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05432-043", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAUGB", + CompanyName: "Laughing Bacchus Wine Cellars", + ContactName: "Yoshi Tannamuri", + ContactTitle: "Marketing Assistant", + Address: "1900 Oak St.", + City: "Vancouver", + Region: "BC", + PostalCode: "V3F 2K1", + Country: "Canada", + Phone: "(604) 555-3392", + Fax: "(604) 555-7293", + Orders: [ + { + OrderID: 10495, + EmployeeID: 3, + OrderDate: new Date("1997-04-03T00:00:00"), + RequiredDate: new Date("1997-05-01T00:00:00"), + ShippedDate: new Date("1997-04-11T00:00:00"), + ShipVia: 3, + Freight: 4.6500, + ShipName: "Laughing Bacchus Wine Cellars", + ShipAddress: "2319 Elm St.", + ShipCity: "Vancouver", + ShipRegion: "BC", + ShipPostalCode: "V3F 2K1", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 7.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 7.7000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10496, + EmployeeID: 7, + OrderDate: new Date("1997-04-04T00:00:00"), + RequiredDate: new Date("1997-05-02T00:00:00"), + ShippedDate: new Date("1997-04-07T00:00:00"), + ShipVia: 2, + Freight: 46.7700, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10497, + EmployeeID: 7, + OrderDate: new Date("1997-04-04T00:00:00"), + RequiredDate: new Date("1997-05-02T00:00:00"), + ShippedDate: new Date("1997-04-07T00:00:00"), + ShipVia: 1, + Freight: 36.2100, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 30.4000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 27.8000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 10.4000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10498, + EmployeeID: 8, + OrderDate: new Date("1997-04-07T00:00:00"), + RequiredDate: new Date("1997-05-05T00:00:00"), + ShippedDate: new Date("1997-04-11T00:00:00"), + ShipVia: 2, + Freight: 29.7500, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10499, + EmployeeID: 4, + OrderDate: new Date("1997-04-08T00:00:00"), + RequiredDate: new Date("1997-05-06T00:00:00"), + ShippedDate: new Date("1997-04-16T00:00:00"), + ShipVia: 2, + Freight: 102.0200, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10500, + EmployeeID: 6, + OrderDate: new Date("1997-04-09T00:00:00"), + RequiredDate: new Date("1997-05-07T00:00:00"), + ShippedDate: new Date("1997-04-17T00:00:00"), + ShipVia: 1, + Freight: 42.6800, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 15.5000, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 8, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10501, + EmployeeID: 9, + OrderDate: new Date("1997-04-09T00:00:00"), + RequiredDate: new Date("1997-05-07T00:00:00"), + ShippedDate: new Date("1997-04-16T00:00:00"), + ShipVia: 3, + Freight: 8.8500, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 10502, + EmployeeID: 2, + OrderDate: new Date("1997-04-10T00:00:00"), + RequiredDate: new Date("1997-05-08T00:00:00"), + ShippedDate: new Date("1997-04-29T00:00:00"), + ShipVia: 1, + Freight: 69.3200, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10503, + EmployeeID: 6, + OrderDate: new Date("1997-04-11T00:00:00"), + RequiredDate: new Date("1997-05-09T00:00:00"), + ShippedDate: new Date("1997-04-16T00:00:00"), + ShipVia: 2, + Freight: 16.7400, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10504, + EmployeeID: 4, + OrderDate: new Date("1997-04-11T00:00:00"), + RequiredDate: new Date("1997-05-09T00:00:00"), + ShippedDate: new Date("1997-04-18T00:00:00"), + ShipVia: 3, + Freight: 59.1300, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10505, + EmployeeID: 3, + OrderDate: new Date("1997-04-14T00:00:00"), + RequiredDate: new Date("1997-05-12T00:00:00"), + ShippedDate: new Date("1997-04-21T00:00:00"), + ShipVia: 3, + Freight: 7.1300, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10506, + EmployeeID: 9, + OrderDate: new Date("1997-04-15T00:00:00"), + RequiredDate: new Date("1997-05-13T00:00:00"), + ShippedDate: new Date("1997-05-02T00:00:00"), + ShipVia: 2, + Freight: 21.1900, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 18, + Discount: 1.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 14, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10507, + EmployeeID: 7, + OrderDate: new Date("1997-04-15T00:00:00"), + RequiredDate: new Date("1997-05-13T00:00:00"), + ShippedDate: new Date("1997-04-22T00:00:00"), + ShipVia: 1, + Freight: 47.4500, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 48, + UnitPrice: 12.7500, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10508, + EmployeeID: 1, + OrderDate: new Date("1997-04-16T00:00:00"), + RequiredDate: new Date("1997-05-14T00:00:00"), + ShippedDate: new Date("1997-05-13T00:00:00"), + ShipVia: 2, + Freight: 4.9900, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10509, + EmployeeID: 4, + OrderDate: new Date("1997-04-17T00:00:00"), + RequiredDate: new Date("1997-05-15T00:00:00"), + ShippedDate: new Date("1997-04-29T00:00:00"), + ShipVia: 1, + Freight: 0.1500, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10510, + EmployeeID: 6, + OrderDate: new Date("1997-04-18T00:00:00"), + RequiredDate: new Date("1997-05-16T00:00:00"), + ShippedDate: new Date("1997-04-28T00:00:00"), + ShipVia: 3, + Freight: 367.6300, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 36, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10511, + EmployeeID: 4, + OrderDate: new Date("1997-04-18T00:00:00"), + RequiredDate: new Date("1997-05-16T00:00:00"), + ShippedDate: new Date("1997-04-21T00:00:00"), + ShipVia: 3, + Freight: 350.6400, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 50, + Discount: 1.5000001e-001 + }, { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 50, + Discount: 1.5000001e-001 + }, { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 10, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10512, + EmployeeID: 7, + OrderDate: new Date("1997-04-21T00:00:00"), + RequiredDate: new Date("1997-05-19T00:00:00"), + ShippedDate: new Date("1997-04-24T00:00:00"), + ShipVia: 2, + Freight: 3.5300, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 10, + Discount: 1.5000001e-001 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 9, + Discount: 1.5000001e-001 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 6, + Discount: 1.5000001e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 12, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10513, + EmployeeID: 7, + OrderDate: new Date("1997-04-22T00:00:00"), + RequiredDate: new Date("1997-06-03T00:00:00"), + ShippedDate: new Date("1997-04-28T00:00:00"), + ShipVia: 1, + Freight: 105.6500, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 50, + Discount: 2.0000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 15, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10514, + EmployeeID: 3, + OrderDate: new Date("1997-04-22T00:00:00"), + RequiredDate: new Date("1997-05-20T00:00:00"), + ShippedDate: new Date("1997-05-16T00:00:00"), + ShipVia: 2, + Freight: 789.9500, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 39, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 39, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10515, + EmployeeID: 2, + OrderDate: new Date("1997-04-23T00:00:00"), + RequiredDate: new Date("1997-05-07T00:00:00"), + ShippedDate: new Date("1997-05-23T00:00:00"), + ShipVia: 1, + Freight: 204.4700, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 9, + UnitPrice: 97.0000, + Quantity: 16, + Discount: 1.5000001e-001 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 120, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 16, + Discount: 1.5000001e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 84, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10516, + EmployeeID: 2, + OrderDate: new Date("1997-04-24T00:00:00"), + RequiredDate: new Date("1997-05-22T00:00:00"), + ShippedDate: new Date("1997-05-01T00:00:00"), + ShipVia: 3, + Freight: 62.7800, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 80, + Discount: 1.0000000e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "NORTS", + CompanyName: "North\/South", + ContactName: "Simon Crowther", + ContactTitle: "Sales Associate", + Address: "South House 300 Queensbridge", + City: "London", + PostalCode: "SW7 1RZ", + Country: "UK", + Phone: "(171) 555-7733", + Fax: "(171) 555-2530", + Orders: [ + { + OrderID: 10517, + EmployeeID: 3, + OrderDate: new Date("1997-04-24T00:00:00"), + RequiredDate: new Date("1997-05-22T00:00:00"), + ShippedDate: new Date("1997-04-29T00:00:00"), + ShipVia: 3, + Freight: 32.0700, + ShipName: "North\/South", + ShipAddress: "South House 300 Queensbridge", + ShipCity: "London", + ShipPostalCode: "SW7 1RZ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10518, + EmployeeID: 4, + OrderDate: new Date("1997-04-25T00:00:00"), + RequiredDate: new Date("1997-05-09T00:00:00"), + ShippedDate: new Date("1997-05-05T00:00:00"), + ShipVia: 2, + Freight: 218.1500, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10519, + EmployeeID: 6, + OrderDate: new Date("1997-04-28T00:00:00"), + RequiredDate: new Date("1997-05-26T00:00:00"), + ShippedDate: new Date("1997-05-01T00:00:00"), + ShipVia: 3, + Freight: 91.7600, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 16, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 10520, + EmployeeID: 7, + OrderDate: new Date("1997-04-29T00:00:00"), + RequiredDate: new Date("1997-05-27T00:00:00"), + ShippedDate: new Date("1997-05-01T00:00:00"), + ShipVia: 1, + Freight: 13.3700, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 10521, + EmployeeID: 8, + OrderDate: new Date("1997-04-29T00:00:00"), + RequiredDate: new Date("1997-05-27T00:00:00"), + ShippedDate: new Date("1997-05-02T00:00:00"), + ShipVia: 2, + Freight: 17.2200, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10522, + EmployeeID: 4, + OrderDate: new Date("1997-04-30T00:00:00"), + RequiredDate: new Date("1997-05-28T00:00:00"), + ShippedDate: new Date("1997-05-06T00:00:00"), + ShipVia: 1, + Freight: 45.3300, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 25, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10523, + EmployeeID: 7, + OrderDate: new Date("1997-05-01T00:00:00"), + RequiredDate: new Date("1997-05-29T00:00:00"), + ShippedDate: new Date("1997-05-30T00:00:00"), + ShipVia: 2, + Freight: 77.6300, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 37, + UnitPrice: 26.0000, + Quantity: 18, + Discount: 1.0000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 6, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10524, + EmployeeID: 1, + OrderDate: new Date("1997-05-01T00:00:00"), + RequiredDate: new Date("1997-05-29T00:00:00"), + ShippedDate: new Date("1997-05-07T00:00:00"), + ShipVia: 2, + Freight: 244.7900, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10525, + EmployeeID: 1, + OrderDate: new Date("1997-05-02T00:00:00"), + RequiredDate: new Date("1997-05-30T00:00:00"), + ShippedDate: new Date("1997-05-23T00:00:00"), + ShipVia: 2, + Freight: 11.0600, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10526, + EmployeeID: 4, + OrderDate: new Date("1997-05-05T00:00:00"), + RequiredDate: new Date("1997-06-02T00:00:00"), + ShippedDate: new Date("1997-05-15T00:00:00"), + ShipVia: 2, + Freight: 58.5900, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 8, + Discount: 1.5000001e-001 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10527, + EmployeeID: 7, + OrderDate: new Date("1997-05-05T00:00:00"), + RequiredDate: new Date("1997-06-02T00:00:00"), + ShippedDate: new Date("1997-05-07T00:00:00"), + ShipVia: 1, + Freight: 41.9000, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 50, + Discount: 1.0000000e-001 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10528, + EmployeeID: 6, + OrderDate: new Date("1997-05-06T00:00:00"), + RequiredDate: new Date("1997-05-20T00:00:00"), + ShippedDate: new Date("1997-05-09T00:00:00"), + ShipVia: 2, + Freight: 3.3500, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 8, + Discount: 2.0000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10529, + EmployeeID: 5, + OrderDate: new Date("1997-05-07T00:00:00"), + RequiredDate: new Date("1997-06-04T00:00:00"), + ShippedDate: new Date("1997-05-09T00:00:00"), + ShipVia: 2, + Freight: 66.6900, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10530, + EmployeeID: 3, + OrderDate: new Date("1997-05-08T00:00:00"), + RequiredDate: new Date("1997-06-05T00:00:00"), + ShippedDate: new Date("1997-05-12T00:00:00"), + ShipVia: 2, + Freight: 339.2200, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OCEAN", + CompanyName: "Océano Atlántico Ltda.", + ContactName: "Yvonne Moncada", + ContactTitle: "Sales Agent", + Address: "Ing. Gustavo Moncada 8585 Piso 20-A", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5333", + Fax: "(1) 135-5535", + Orders: [ + { + OrderID: 10531, + EmployeeID: 7, + OrderDate: new Date("1997-05-08T00:00:00"), + RequiredDate: new Date("1997-06-05T00:00:00"), + ShippedDate: new Date("1997-05-19T00:00:00"), + ShipVia: 1, + Freight: 8.1200, + ShipName: "Océano Atlántico Ltda.", + ShipAddress: "Ing. Gustavo Moncada 8585 Piso 20-A", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 10532, + EmployeeID: 7, + OrderDate: new Date("1997-05-09T00:00:00"), + RequiredDate: new Date("1997-06-06T00:00:00"), + ShippedDate: new Date("1997-05-12T00:00:00"), + ShipVia: 3, + Freight: 74.4600, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 66, + UnitPrice: 17.0000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10533, + EmployeeID: 8, + OrderDate: new Date("1997-05-12T00:00:00"), + RequiredDate: new Date("1997-06-09T00:00:00"), + ShippedDate: new Date("1997-05-22T00:00:00"), + ShipVia: 1, + Freight: 188.0400, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 24, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10534, + EmployeeID: 8, + OrderDate: new Date("1997-05-12T00:00:00"), + RequiredDate: new Date("1997-06-09T00:00:00"), + ShippedDate: new Date("1997-05-14T00:00:00"), + ShipVia: 2, + Freight: 27.9400, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10535, + EmployeeID: 4, + OrderDate: new Date("1997-05-13T00:00:00"), + RequiredDate: new Date("1997-06-10T00:00:00"), + ShippedDate: new Date("1997-05-21T00:00:00"), + ShipVia: 1, + Freight: 15.6400, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 50, + Discount: 1.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 5, + Discount: 1.0000000e-001 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10536, + EmployeeID: 3, + OrderDate: new Date("1997-05-14T00:00:00"), + RequiredDate: new Date("1997-06-11T00:00:00"), + ShippedDate: new Date("1997-06-06T00:00:00"), + ShipVia: 2, + Freight: 58.8800, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10537, + EmployeeID: 1, + OrderDate: new Date("1997-05-14T00:00:00"), + RequiredDate: new Date("1997-05-28T00:00:00"), + ShippedDate: new Date("1997-05-19T00:00:00"), + ShipVia: 1, + Freight: 78.8500, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10538, + EmployeeID: 9, + OrderDate: new Date("1997-05-15T00:00:00"), + RequiredDate: new Date("1997-06-12T00:00:00"), + ShippedDate: new Date("1997-05-16T00:00:00"), + ShipVia: 3, + Freight: 4.8700, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 1, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10539, + EmployeeID: 6, + OrderDate: new Date("1997-05-16T00:00:00"), + RequiredDate: new Date("1997-06-13T00:00:00"), + ShippedDate: new Date("1997-05-23T00:00:00"), + ShipVia: 3, + Freight: 12.3600, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10540, + EmployeeID: 3, + OrderDate: new Date("1997-05-19T00:00:00"), + RequiredDate: new Date("1997-06-16T00:00:00"), + ShippedDate: new Date("1997-06-13T00:00:00"), + ShipVia: 3, + Freight: 1007.6400, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10541, + EmployeeID: 2, + OrderDate: new Date("1997-05-19T00:00:00"), + RequiredDate: new Date("1997-06-16T00:00:00"), + ShippedDate: new Date("1997-05-29T00:00:00"), + ShipVia: 1, + Freight: 68.6500, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 35, + Discount: 1.0000000e-001 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 4, + Discount: 1.0000000e-001 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 36, + Discount: 1.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 9, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10542, + EmployeeID: 1, + OrderDate: new Date("1997-05-20T00:00:00"), + RequiredDate: new Date("1997-06-17T00:00:00"), + ShippedDate: new Date("1997-05-26T00:00:00"), + ShipVia: 3, + Freight: 10.9500, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 24, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10543, + EmployeeID: 8, + OrderDate: new Date("1997-05-21T00:00:00"), + RequiredDate: new Date("1997-06-18T00:00:00"), + ShippedDate: new Date("1997-05-23T00:00:00"), + ShipVia: 2, + Freight: 48.1700, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 70, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10544, + EmployeeID: 4, + OrderDate: new Date("1997-05-21T00:00:00"), + RequiredDate: new Date("1997-06-18T00:00:00"), + ShippedDate: new Date("1997-05-30T00:00:00"), + ShipVia: 1, + Freight: 24.9100, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAZYK", + CompanyName: "Lazy K Kountry Store", + ContactName: "John Steel", + ContactTitle: "Marketing Manager", + Address: "12 Orchestra Terrace", + City: "Walla Walla", + Region: "WA", + PostalCode: "99362", + Country: "USA", + Phone: "(509) 555-7969", + Fax: "(509) 555-6221", + Orders: [ + { + OrderID: 10545, + EmployeeID: 8, + OrderDate: new Date("1997-05-22T00:00:00"), + RequiredDate: new Date("1997-06-19T00:00:00"), + ShippedDate: new Date("1997-06-26T00:00:00"), + ShipVia: 2, + Freight: 11.9200, + ShipName: "Lazy K Kountry Store", + ShipAddress: "12 Orchestra Terrace", + ShipCity: "Walla Walla", + ShipRegion: "WA", + ShipPostalCode: "99362", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10546, + EmployeeID: 1, + OrderDate: new Date("1997-05-23T00:00:00"), + RequiredDate: new Date("1997-06-20T00:00:00"), + ShippedDate: new Date("1997-05-27T00:00:00"), + ShipVia: 3, + Freight: 194.7200, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10547, + EmployeeID: 3, + OrderDate: new Date("1997-05-23T00:00:00"), + RequiredDate: new Date("1997-06-20T00:00:00"), + ShippedDate: new Date("1997-06-02T00:00:00"), + ShipVia: 2, + Freight: 178.4300, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 24, + Discount: 1.5000001e-001 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10548, + EmployeeID: 3, + OrderDate: new Date("1997-05-26T00:00:00"), + RequiredDate: new Date("1997-06-23T00:00:00"), + ShippedDate: new Date("1997-06-02T00:00:00"), + ShipVia: 2, + Freight: 1.4300, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 2.5000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10549, + EmployeeID: 5, + OrderDate: new Date("1997-05-27T00:00:00"), + RequiredDate: new Date("1997-06-10T00:00:00"), + ShippedDate: new Date("1997-05-30T00:00:00"), + ShipVia: 1, + Freight: 171.2400, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 55, + Discount: 1.5000001e-001 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 100, + Discount: 1.5000001e-001 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 48, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10550, + EmployeeID: 7, + OrderDate: new Date("1997-05-28T00:00:00"), + RequiredDate: new Date("1997-06-25T00:00:00"), + ShippedDate: new Date("1997-06-06T00:00:00"), + ShipVia: 3, + Freight: 4.3200, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 6, + Discount: 1.0000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 10, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10551, + EmployeeID: 4, + OrderDate: new Date("1997-05-28T00:00:00"), + RequiredDate: new Date("1997-07-09T00:00:00"), + ShippedDate: new Date("1997-06-06T00:00:00"), + ShipVia: 3, + Freight: 72.9500, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10552, + EmployeeID: 2, + OrderDate: new Date("1997-05-29T00:00:00"), + RequiredDate: new Date("1997-06-26T00:00:00"), + ShippedDate: new Date("1997-06-05T00:00:00"), + ShipVia: 1, + Freight: 83.2200, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10553, + EmployeeID: 2, + OrderDate: new Date("1997-05-30T00:00:00"), + RequiredDate: new Date("1997-06-27T00:00:00"), + ShippedDate: new Date("1997-06-03T00:00:00"), + ShipVia: 2, + Freight: 149.4900, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10554, + EmployeeID: 4, + OrderDate: new Date("1997-05-30T00:00:00"), + RequiredDate: new Date("1997-06-27T00:00:00"), + ShippedDate: new Date("1997-06-05T00:00:00"), + ShipVia: 3, + Freight: 120.9700, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10555, + EmployeeID: 6, + OrderDate: new Date("1997-06-02T00:00:00"), + RequiredDate: new Date("1997-06-30T00:00:00"), + ShippedDate: new Date("1997-06-04T00:00:00"), + ShipVia: 3, + Freight: 252.4900, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 18, + Discount: 2.0000000e-001 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 40, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10556, + EmployeeID: 2, + OrderDate: new Date("1997-06-03T00:00:00"), + RequiredDate: new Date("1997-07-15T00:00:00"), + ShippedDate: new Date("1997-06-13T00:00:00"), + ShipVia: 1, + Freight: 9.8000, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10557, + EmployeeID: 9, + OrderDate: new Date("1997-06-03T00:00:00"), + RequiredDate: new Date("1997-06-17T00:00:00"), + ShippedDate: new Date("1997-06-06T00:00:00"), + ShipVia: 2, + Freight: 96.7200, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10558, + EmployeeID: 1, + OrderDate: new Date("1997-06-04T00:00:00"), + RequiredDate: new Date("1997-07-02T00:00:00"), + ShippedDate: new Date("1997-06-10T00:00:00"), + ShipVia: 2, + Freight: 72.9700, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10559, + EmployeeID: 6, + OrderDate: new Date("1997-06-05T00:00:00"), + RequiredDate: new Date("1997-07-03T00:00:00"), + ShippedDate: new Date("1997-06-13T00:00:00"), + ShipVia: 1, + Freight: 8.0500, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 18, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10560, + EmployeeID: 8, + OrderDate: new Date("1997-06-06T00:00:00"), + RequiredDate: new Date("1997-07-04T00:00:00"), + ShippedDate: new Date("1997-06-09T00:00:00"), + ShipVia: 1, + Freight: 36.6500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 15, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10561, + EmployeeID: 2, + OrderDate: new Date("1997-06-06T00:00:00"), + RequiredDate: new Date("1997-07-04T00:00:00"), + ShippedDate: new Date("1997-06-09T00:00:00"), + ShipVia: 2, + Freight: 242.2100, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10562, + EmployeeID: 1, + OrderDate: new Date("1997-06-09T00:00:00"), + RequiredDate: new Date("1997-07-07T00:00:00"), + ShippedDate: new Date("1997-06-12T00:00:00"), + ShipVia: 1, + Freight: 22.9500, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 10, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10563, + EmployeeID: 2, + OrderDate: new Date("1997-06-10T00:00:00"), + RequiredDate: new Date("1997-07-22T00:00:00"), + ShippedDate: new Date("1997-06-24T00:00:00"), + ShipVia: 2, + Freight: 60.4300, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 70, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10564, + EmployeeID: 4, + OrderDate: new Date("1997-06-10T00:00:00"), + RequiredDate: new Date("1997-07-08T00:00:00"), + ShippedDate: new Date("1997-06-16T00:00:00"), + ShipVia: 3, + Freight: 13.7500, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 16, + Discount: 5.0000001e-002 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 6, + Discount: 5.0000001e-002 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 25, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10565, + EmployeeID: 8, + OrderDate: new Date("1997-06-11T00:00:00"), + RequiredDate: new Date("1997-07-09T00:00:00"), + ShippedDate: new Date("1997-06-18T00:00:00"), + ShipVia: 2, + Freight: 7.1500, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 18, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10566, + EmployeeID: 9, + OrderDate: new Date("1997-06-12T00:00:00"), + RequiredDate: new Date("1997-07-10T00:00:00"), + ShippedDate: new Date("1997-06-18T00:00:00"), + ShipVia: 1, + Freight: 88.4000, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 35, + Discount: 1.5000001e-001 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 18, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10567, + EmployeeID: 1, + OrderDate: new Date("1997-06-12T00:00:00"), + RequiredDate: new Date("1997-07-10T00:00:00"), + ShippedDate: new Date("1997-06-17T00:00:00"), + ShipVia: 1, + Freight: 33.9700, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 60, + Discount: 2.0000000e-001 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 40, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "GALED", + CompanyName: "Galería del gastrónomo", + ContactName: "Eduardo Saavedra", + ContactTitle: "Marketing Manager", + Address: "Rambla de Cataluña, 23", + City: "Barcelona", + PostalCode: "08022", + Country: "Spain", + Phone: "(93) 203 4560", + Fax: "(93) 203 4561", + Orders: [ + { + OrderID: 10568, + EmployeeID: 3, + OrderDate: new Date("1997-06-13T00:00:00"), + RequiredDate: new Date("1997-07-11T00:00:00"), + ShippedDate: new Date("1997-07-09T00:00:00"), + ShipVia: 3, + Freight: 6.5400, + ShipName: "Galería del gastronómo", + ShipAddress: "Rambla de Cataluña, 23", + ShipCity: "Barcelona", + ShipPostalCode: "8022", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10569, + EmployeeID: 5, + OrderDate: new Date("1997-06-16T00:00:00"), + RequiredDate: new Date("1997-07-14T00:00:00"), + ShippedDate: new Date("1997-07-11T00:00:00"), + ShipVia: 1, + Freight: 58.9800, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10570, + EmployeeID: 3, + OrderDate: new Date("1997-06-17T00:00:00"), + RequiredDate: new Date("1997-07-15T00:00:00"), + ShippedDate: new Date("1997-06-19T00:00:00"), + ShipVia: 3, + Freight: 188.9900, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 60, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10571, + EmployeeID: 8, + OrderDate: new Date("1997-06-17T00:00:00"), + RequiredDate: new Date("1997-07-29T00:00:00"), + ShippedDate: new Date("1997-07-04T00:00:00"), + ShipVia: 3, + Freight: 26.0600, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 11, + Discount: 1.5000001e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 28, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10572, + EmployeeID: 3, + OrderDate: new Date("1997-06-18T00:00:00"), + RequiredDate: new Date("1997-07-16T00:00:00"), + ShippedDate: new Date("1997-06-25T00:00:00"), + ShipVia: 2, + Freight: 116.4300, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 12, + Discount: 1.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10573, + EmployeeID: 7, + OrderDate: new Date("1997-06-19T00:00:00"), + RequiredDate: new Date("1997-07-17T00:00:00"), + ShippedDate: new Date("1997-06-20T00:00:00"), + ShipVia: 3, + Freight: 84.8400, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TRAIH", + CompanyName: "Trail's Head Gourmet Provisioners", + ContactName: "Helvetius Nagy", + ContactTitle: "Sales Associate", + Address: "722 DaVinci Blvd.", + City: "Kirkland", + Region: "WA", + PostalCode: "98034", + Country: "USA", + Phone: "(206) 555-8257", + Fax: "(206) 555-2174", + Orders: [ + { + OrderID: 10574, + EmployeeID: 4, + OrderDate: new Date("1997-06-19T00:00:00"), + RequiredDate: new Date("1997-07-17T00:00:00"), + ShippedDate: new Date("1997-06-30T00:00:00"), + ShipVia: 2, + Freight: 37.6000, + ShipName: "Trail's Head Gourmet Provisioners", + ShipAddress: "722 DaVinci Blvd.", + ShipCity: "Kirkland", + ShipRegion: "WA", + ShipPostalCode: "98034", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MORGK", + CompanyName: "Morgenstern Gesundkost", + ContactName: "Alexander Feuer", + ContactTitle: "Marketing Assistant", + Address: "Heerstr. 22", + City: "Leipzig", + PostalCode: "04179", + Country: "Germany", + Phone: "0342-023176", + Orders: [ + { + OrderID: 10575, + EmployeeID: 5, + OrderDate: new Date("1997-06-20T00:00:00"), + RequiredDate: new Date("1997-07-04T00:00:00"), + ShippedDate: new Date("1997-06-30T00:00:00"), + ShipVia: 1, + Freight: 127.3400, + ShipName: "Morgenstern Gesundkost", + ShipAddress: "Heerstr. 22", + ShipCity: "Leipzig", + ShipPostalCode: "04179", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10576, + EmployeeID: 3, + OrderDate: new Date("1997-06-23T00:00:00"), + RequiredDate: new Date("1997-07-07T00:00:00"), + ShippedDate: new Date("1997-06-30T00:00:00"), + ShipVia: 3, + Freight: 18.5600, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TRAIH", + CompanyName: "Trail's Head Gourmet Provisioners", + ContactName: "Helvetius Nagy", + ContactTitle: "Sales Associate", + Address: "722 DaVinci Blvd.", + City: "Kirkland", + Region: "WA", + PostalCode: "98034", + Country: "USA", + Phone: "(206) 555-8257", + Fax: "(206) 555-2174", + Orders: [ + { + OrderID: 10577, + EmployeeID: 9, + OrderDate: new Date("1997-06-23T00:00:00"), + RequiredDate: new Date("1997-08-04T00:00:00"), + ShippedDate: new Date("1997-06-30T00:00:00"), + ShipVia: 2, + Freight: 25.4100, + ShipName: "Trail's Head Gourmet Provisioners", + ShipAddress: "722 DaVinci Blvd.", + ShipCity: "Kirkland", + ShipRegion: "WA", + ShipPostalCode: "98034", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10578, + EmployeeID: 4, + OrderDate: new Date("1997-06-24T00:00:00"), + RequiredDate: new Date("1997-07-22T00:00:00"), + ShippedDate: new Date("1997-07-25T00:00:00"), + ShipVia: 3, + Freight: 29.6000, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LETSS", + CompanyName: "Let's Stop N Shop", + ContactName: "Jaime Yorres", + ContactTitle: "Owner", + Address: "87 Polk St. Suite 5", + City: "San Francisco", + Region: "CA", + PostalCode: "94117", + Country: "USA", + Phone: "(415) 555-5938", + Orders: [ + { + OrderID: 10579, + EmployeeID: 1, + OrderDate: new Date("1997-06-25T00:00:00"), + RequiredDate: new Date("1997-07-23T00:00:00"), + ShippedDate: new Date("1997-07-04T00:00:00"), + ShipVia: 2, + Freight: 13.7300, + ShipName: "Let's Stop N Shop", + ShipAddress: "87 Polk St. Suite 5", + ShipCity: "San Francisco", + ShipRegion: "CA", + ShipPostalCode: "94117", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 15.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10580, + EmployeeID: 4, + OrderDate: new Date("1997-06-26T00:00:00"), + RequiredDate: new Date("1997-07-24T00:00:00"), + ShippedDate: new Date("1997-07-01T00:00:00"), + ShipVia: 3, + Freight: 75.8900, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 9, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 30, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10581, + EmployeeID: 3, + OrderDate: new Date("1997-06-26T00:00:00"), + RequiredDate: new Date("1997-07-24T00:00:00"), + ShippedDate: new Date("1997-07-02T00:00:00"), + ShipVia: 1, + Freight: 3.0100, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 50, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10582, + EmployeeID: 3, + OrderDate: new Date("1997-06-27T00:00:00"), + RequiredDate: new Date("1997-07-25T00:00:00"), + ShippedDate: new Date("1997-07-14T00:00:00"), + ShipVia: 2, + Freight: 27.7100, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10583, + EmployeeID: 2, + OrderDate: new Date("1997-06-30T00:00:00"), + RequiredDate: new Date("1997-07-28T00:00:00"), + ShippedDate: new Date("1997-07-04T00:00:00"), + ShipVia: 2, + Freight: 7.2800, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 24, + Discount: 1.5000001e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 10, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10584, + EmployeeID: 4, + OrderDate: new Date("1997-06-30T00:00:00"), + RequiredDate: new Date("1997-07-28T00:00:00"), + ShippedDate: new Date("1997-07-04T00:00:00"), + ShipVia: 1, + Freight: 59.1400, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 50, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10585, + EmployeeID: 7, + OrderDate: new Date("1997-07-01T00:00:00"), + RequiredDate: new Date("1997-07-29T00:00:00"), + ShippedDate: new Date("1997-07-10T00:00:00"), + ShipVia: 1, + Freight: 13.4100, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10586, + EmployeeID: 9, + OrderDate: new Date("1997-07-02T00:00:00"), + RequiredDate: new Date("1997-07-30T00:00:00"), + ShippedDate: new Date("1997-07-09T00:00:00"), + ShipVia: 1, + Freight: 0.4800, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 4, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10587, + EmployeeID: 1, + OrderDate: new Date("1997-07-02T00:00:00"), + RequiredDate: new Date("1997-07-30T00:00:00"), + ShippedDate: new Date("1997-07-09T00:00:00"), + ShipVia: 1, + Freight: 62.5200, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10588, + EmployeeID: 2, + OrderDate: new Date("1997-07-03T00:00:00"), + RequiredDate: new Date("1997-07-31T00:00:00"), + ShippedDate: new Date("1997-07-10T00:00:00"), + ShipVia: 3, + Freight: 194.6700, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 100, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10589, + EmployeeID: 8, + OrderDate: new Date("1997-07-04T00:00:00"), + RequiredDate: new Date("1997-08-01T00:00:00"), + ShippedDate: new Date("1997-07-14T00:00:00"), + ShipVia: 2, + Freight: 4.4200, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10590, + EmployeeID: 4, + OrderDate: new Date("1997-07-07T00:00:00"), + RequiredDate: new Date("1997-08-04T00:00:00"), + ShippedDate: new Date("1997-07-14T00:00:00"), + ShipVia: 3, + Freight: 44.7700, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 60, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10591, + EmployeeID: 1, + OrderDate: new Date("1997-07-07T00:00:00"), + RequiredDate: new Date("1997-07-21T00:00:00"), + ShippedDate: new Date("1997-07-16T00:00:00"), + ShipVia: 1, + Freight: 55.9200, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10592, + EmployeeID: 3, + OrderDate: new Date("1997-07-08T00:00:00"), + RequiredDate: new Date("1997-08-05T00:00:00"), + ShippedDate: new Date("1997-07-16T00:00:00"), + ShipVia: 1, + Freight: 32.1000, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 15.5000, + Quantity: 25, + Discount: 5.0000001e-002 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 5, + Discount: 5.0000001e-002 + } + ] + }, { + OrderID: 10593, + EmployeeID: 7, + OrderDate: new Date("1997-07-09T00:00:00"), + RequiredDate: new Date("1997-08-06T00:00:00"), + ShippedDate: new Date("1997-08-13T00:00:00"), + ShipVia: 2, + Freight: 174.2000, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 21, + Discount: 2.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 4, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10594, + EmployeeID: 3, + OrderDate: new Date("1997-07-09T00:00:00"), + RequiredDate: new Date("1997-08-06T00:00:00"), + ShippedDate: new Date("1997-07-16T00:00:00"), + ShipVia: 2, + Freight: 5.2400, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10595, + EmployeeID: 2, + OrderDate: new Date("1997-07-10T00:00:00"), + RequiredDate: new Date("1997-08-07T00:00:00"), + ShippedDate: new Date("1997-07-14T00:00:00"), + ShipVia: 1, + Freight: 96.7800, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 120, + Discount: 2.5000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 65, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10596, + EmployeeID: 8, + OrderDate: new Date("1997-07-11T00:00:00"), + RequiredDate: new Date("1997-08-08T00:00:00"), + ShippedDate: new Date("1997-08-12T00:00:00"), + ShipVia: 1, + Freight: 16.3400, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 5, + Discount: 2.0000000e-001 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 24, + Discount: 2.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 30, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10597, + EmployeeID: 7, + OrderDate: new Date("1997-07-11T00:00:00"), + RequiredDate: new Date("1997-08-08T00:00:00"), + ShippedDate: new Date("1997-07-18T00:00:00"), + ShipVia: 3, + Freight: 35.1200, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 12, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10598, + EmployeeID: 1, + OrderDate: new Date("1997-07-14T00:00:00"), + RequiredDate: new Date("1997-08-11T00:00:00"), + ShippedDate: new Date("1997-07-18T00:00:00"), + ShipVia: 3, + Freight: 44.4200, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10599, + EmployeeID: 6, + OrderDate: new Date("1997-07-15T00:00:00"), + RequiredDate: new Date("1997-08-26T00:00:00"), + ShippedDate: new Date("1997-07-21T00:00:00"), + ShipVia: 3, + Freight: 29.9800, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGC", + CompanyName: "Hungry Coyote Import Store", + ContactName: "Yoshi Latimer", + ContactTitle: "Sales Representative", + Address: "City Center Plaza 516 Main St.", + City: "Elgin", + Region: "OR", + PostalCode: "97827", + Country: "USA", + Phone: "(503) 555-6874", + Fax: "(503) 555-2376", + Orders: [ + { + OrderID: 10600, + EmployeeID: 4, + OrderDate: new Date("1997-07-16T00:00:00"), + RequiredDate: new Date("1997-08-13T00:00:00"), + ShippedDate: new Date("1997-07-21T00:00:00"), + ShipVia: 1, + Freight: 45.1300, + ShipName: "Hungry Coyote Import Store", + ShipAddress: "City Center Plaza 516 Main St.", + ShipCity: "Elgin", + ShipRegion: "OR", + ShipPostalCode: "97827", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10601, + EmployeeID: 7, + OrderDate: new Date("1997-07-16T00:00:00"), + RequiredDate: new Date("1997-08-27T00:00:00"), + ShippedDate: new Date("1997-07-22T00:00:00"), + ShipVia: 1, + Freight: 58.3000, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10602, + EmployeeID: 8, + OrderDate: new Date("1997-07-17T00:00:00"), + RequiredDate: new Date("1997-08-14T00:00:00"), + ShippedDate: new Date("1997-07-22T00:00:00"), + ShipVia: 2, + Freight: 2.9200, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 5, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10603, + EmployeeID: 8, + OrderDate: new Date("1997-07-18T00:00:00"), + RequiredDate: new Date("1997-08-15T00:00:00"), + ShippedDate: new Date("1997-08-08T00:00:00"), + ShipVia: 2, + Freight: 48.7700, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 48, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 25, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10604, + EmployeeID: 1, + OrderDate: new Date("1997-07-18T00:00:00"), + RequiredDate: new Date("1997-08-15T00:00:00"), + ShippedDate: new Date("1997-07-29T00:00:00"), + ShipVia: 1, + Freight: 7.4600, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 48, + UnitPrice: 12.7500, + Quantity: 6, + Discount: 1.0000000e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10605, + EmployeeID: 1, + OrderDate: new Date("1997-07-21T00:00:00"), + RequiredDate: new Date("1997-08-18T00:00:00"), + ShippedDate: new Date("1997-07-29T00:00:00"), + ShipVia: 2, + Freight: 379.1300, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 70, + Discount: 5.0000001e-002 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 15, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10606, + EmployeeID: 4, + OrderDate: new Date("1997-07-22T00:00:00"), + RequiredDate: new Date("1997-08-19T00:00:00"), + ShippedDate: new Date("1997-07-31T00:00:00"), + ShipVia: 3, + Freight: 79.4000, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10607, + EmployeeID: 5, + OrderDate: new Date("1997-07-22T00:00:00"), + RequiredDate: new Date("1997-08-19T00:00:00"), + ShippedDate: new Date("1997-07-25T00:00:00"), + ShipVia: 1, + Freight: 200.2400, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 100, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10608, + EmployeeID: 4, + OrderDate: new Date("1997-07-23T00:00:00"), + RequiredDate: new Date("1997-08-20T00:00:00"), + ShippedDate: new Date("1997-08-01T00:00:00"), + ShipVia: 2, + Freight: 27.7900, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DUMON", + CompanyName: "Du monde entier", + ContactName: "Janine Labrune", + ContactTitle: "Owner", + Address: "67, rue des Cinquante Otages", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.67.88.88", + Fax: "40.67.89.89", + Orders: [ + { + OrderID: 10609, + EmployeeID: 7, + OrderDate: new Date("1997-07-24T00:00:00"), + RequiredDate: new Date("1997-08-21T00:00:00"), + ShippedDate: new Date("1997-07-30T00:00:00"), + ShipVia: 2, + Freight: 1.8500, + ShipName: "Du monde entier", + ShipAddress: "67, rue des Cinquante Otages", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10610, + EmployeeID: 8, + OrderDate: new Date("1997-07-25T00:00:00"), + RequiredDate: new Date("1997-08-22T00:00:00"), + ShippedDate: new Date("1997-08-06T00:00:00"), + ShipVia: 1, + Freight: 26.7800, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 21, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10611, + EmployeeID: 6, + OrderDate: new Date("1997-07-25T00:00:00"), + RequiredDate: new Date("1997-08-22T00:00:00"), + ShippedDate: new Date("1997-08-01T00:00:00"), + ShipVia: 2, + Freight: 80.6500, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10612, + EmployeeID: 1, + OrderDate: new Date("1997-07-28T00:00:00"), + RequiredDate: new Date("1997-08-25T00:00:00"), + ShippedDate: new Date("1997-08-01T00:00:00"), + ShipVia: 2, + Freight: 544.0800, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 55, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 80, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10613, + EmployeeID: 4, + OrderDate: new Date("1997-07-29T00:00:00"), + RequiredDate: new Date("1997-08-26T00:00:00"), + ShippedDate: new Date("1997-08-01T00:00:00"), + ShipVia: 2, + Freight: 8.1100, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10614, + EmployeeID: 8, + OrderDate: new Date("1997-07-29T00:00:00"), + RequiredDate: new Date("1997-08-26T00:00:00"), + ShippedDate: new Date("1997-08-01T00:00:00"), + ShipVia: 3, + Freight: 1.9300, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10615, + EmployeeID: 2, + OrderDate: new Date("1997-07-30T00:00:00"), + RequiredDate: new Date("1997-08-27T00:00:00"), + ShippedDate: new Date("1997-08-06T00:00:00"), + ShipVia: 3, + Freight: 0.7500, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10616, + EmployeeID: 1, + OrderDate: new Date("1997-07-31T00:00:00"), + RequiredDate: new Date("1997-08-28T00:00:00"), + ShippedDate: new Date("1997-08-05T00:00:00"), + ShipVia: 2, + Freight: 116.5300, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 15, + Discount: 5.0000001e-002 + } + ] + }, { + OrderID: 10617, + EmployeeID: 4, + OrderDate: new Date("1997-07-31T00:00:00"), + RequiredDate: new Date("1997-08-28T00:00:00"), + ShippedDate: new Date("1997-08-04T00:00:00"), + ShipVia: 2, + Freight: 18.5300, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 30, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10618, + EmployeeID: 1, + OrderDate: new Date("1997-08-01T00:00:00"), + RequiredDate: new Date("1997-09-12T00:00:00"), + ShippedDate: new Date("1997-08-08T00:00:00"), + ShipVia: 1, + Freight: 154.6800, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10619, + EmployeeID: 3, + OrderDate: new Date("1997-08-04T00:00:00"), + RequiredDate: new Date("1997-09-01T00:00:00"), + ShippedDate: new Date("1997-08-07T00:00:00"), + ShipVia: 3, + Freight: 91.0500, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAUGB", + CompanyName: "Laughing Bacchus Wine Cellars", + ContactName: "Yoshi Tannamuri", + ContactTitle: "Marketing Assistant", + Address: "1900 Oak St.", + City: "Vancouver", + Region: "BC", + PostalCode: "V3F 2K1", + Country: "Canada", + Phone: "(604) 555-3392", + Fax: "(604) 555-7293", + Orders: [ + { + OrderID: 10620, + EmployeeID: 2, + OrderDate: new Date("1997-08-05T00:00:00"), + RequiredDate: new Date("1997-09-02T00:00:00"), + ShippedDate: new Date("1997-08-14T00:00:00"), + ShipVia: 3, + Freight: 0.9400, + ShipName: "Laughing Bacchus Wine Cellars", + ShipAddress: "2319 Elm St.", + ShipCity: "Vancouver", + ShipRegion: "BC", + ShipPostalCode: "V3F 2K1", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10621, + EmployeeID: 4, + OrderDate: new Date("1997-08-05T00:00:00"), + RequiredDate: new Date("1997-09-02T00:00:00"), + ShippedDate: new Date("1997-08-11T00:00:00"), + ShipVia: 2, + Freight: 23.7300, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10622, + EmployeeID: 4, + OrderDate: new Date("1997-08-06T00:00:00"), + RequiredDate: new Date("1997-09-03T00:00:00"), + ShippedDate: new Date("1997-08-11T00:00:00"), + ShipVia: 3, + Freight: 50.9700, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 18, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10623, + EmployeeID: 8, + OrderDate: new Date("1997-08-07T00:00:00"), + RequiredDate: new Date("1997-09-04T00:00:00"), + ShippedDate: new Date("1997-08-12T00:00:00"), + ShipVia: 2, + Freight: 97.1800, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "THECR", + CompanyName: "The Cracker Box", + ContactName: "Liu Wong", + ContactTitle: "Marketing Assistant", + Address: "55 Grizzly Peak Rd.", + City: "Butte", + Region: "MT", + PostalCode: "59801", + Country: "USA", + Phone: "(406) 555-5834", + Fax: "(406) 555-8083", + Orders: [ + { + OrderID: 10624, + EmployeeID: 4, + OrderDate: new Date("1997-08-07T00:00:00"), + RequiredDate: new Date("1997-09-04T00:00:00"), + ShippedDate: new Date("1997-08-19T00:00:00"), + ShipVia: 2, + Freight: 94.8000, + ShipName: "The Cracker Box", + ShipAddress: "55 Grizzly Peak Rd.", + ShipCity: "Butte", + ShipRegion: "MT", + ShipPostalCode: "59801", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANATR", + CompanyName: "Ana Trujillo Emparedados y helados", + ContactName: "Ana Trujillo", + ContactTitle: "Owner", + Address: "Avda. de la Constitución 2222", + City: "México D.F.", + PostalCode: "05021", + Country: "Mexico", + Phone: "(5) 555-4729", + Fax: "(5) 555-3745", + Orders: [ + { + OrderID: 10625, + EmployeeID: 3, + OrderDate: new Date("1997-08-08T00:00:00"), + RequiredDate: new Date("1997-09-05T00:00:00"), + ShippedDate: new Date("1997-08-14T00:00:00"), + ShipVia: 1, + Freight: 43.9000, + ShipName: "Ana Trujillo Emparedados y helados", + ShipAddress: "Avda. de la Constitución 2222", + ShipCity: "México D.F.", + ShipPostalCode: "05021", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10626, + EmployeeID: 1, + OrderDate: new Date("1997-08-11T00:00:00"), + RequiredDate: new Date("1997-09-08T00:00:00"), + ShippedDate: new Date("1997-08-20T00:00:00"), + ShipVia: 2, + Freight: 138.6900, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10627, + EmployeeID: 8, + OrderDate: new Date("1997-08-11T00:00:00"), + RequiredDate: new Date("1997-09-22T00:00:00"), + ShippedDate: new Date("1997-08-21T00:00:00"), + ShipVia: 3, + Freight: 107.4600, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 35, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10628, + EmployeeID: 4, + OrderDate: new Date("1997-08-12T00:00:00"), + RequiredDate: new Date("1997-09-09T00:00:00"), + ShippedDate: new Date("1997-08-20T00:00:00"), + ShipVia: 3, + Freight: 30.3600, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10629, + EmployeeID: 4, + OrderDate: new Date("1997-08-12T00:00:00"), + RequiredDate: new Date("1997-09-09T00:00:00"), + ShippedDate: new Date("1997-08-20T00:00:00"), + ShipVia: 3, + Freight: 85.4600, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10630, + EmployeeID: 1, + OrderDate: new Date("1997-08-13T00:00:00"), + RequiredDate: new Date("1997-09-10T00:00:00"), + ShippedDate: new Date("1997-08-19T00:00:00"), + ShipVia: 2, + Freight: 32.3500, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10631, + EmployeeID: 8, + OrderDate: new Date("1997-08-14T00:00:00"), + RequiredDate: new Date("1997-09-11T00:00:00"), + ShippedDate: new Date("1997-08-15T00:00:00"), + ShipVia: 1, + Freight: 0.8700, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 8, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10632, + EmployeeID: 8, + OrderDate: new Date("1997-08-14T00:00:00"), + RequiredDate: new Date("1997-09-11T00:00:00"), + ShippedDate: new Date("1997-08-19T00:00:00"), + ShipVia: 1, + Freight: 41.3800, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10633, + EmployeeID: 7, + OrderDate: new Date("1997-08-15T00:00:00"), + RequiredDate: new Date("1997-09-12T00:00:00"), + ShippedDate: new Date("1997-08-18T00:00:00"), + ShipVia: 3, + Freight: 477.9000, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 36, + Discount: 1.5000001e-001 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 13, + Discount: 1.5000001e-001 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 35, + Discount: 1.5000001e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 80, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FOLIG", + CompanyName: "Folies gourmandes", + ContactName: "Martine Rancé", + ContactTitle: "Assistant Sales Agent", + Address: "184, chaussée de Tournai", + City: "Lille", + PostalCode: "59000", + Country: "France", + Phone: "20.16.10.16", + Fax: "20.16.10.17", + Orders: [ + { + OrderID: 10634, + EmployeeID: 4, + OrderDate: new Date("1997-08-15T00:00:00"), + RequiredDate: new Date("1997-09-12T00:00:00"), + ShippedDate: new Date("1997-08-21T00:00:00"), + ShipVia: 3, + Freight: 487.3800, + ShipName: "Folies gourmandes", + ShipAddress: "184, chaussée de Tournai", + ShipCity: "Lille", + ShipPostalCode: "59000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10635, + EmployeeID: 8, + OrderDate: new Date("1997-08-18T00:00:00"), + RequiredDate: new Date("1997-09-15T00:00:00"), + ShippedDate: new Date("1997-08-21T00:00:00"), + ShipVia: 3, + Freight: 47.4600, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10636, + EmployeeID: 4, + OrderDate: new Date("1997-08-19T00:00:00"), + RequiredDate: new Date("1997-09-16T00:00:00"), + ShippedDate: new Date("1997-08-26T00:00:00"), + ShipVia: 1, + Freight: 1.1500, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10637, + EmployeeID: 6, + OrderDate: new Date("1997-08-19T00:00:00"), + RequiredDate: new Date("1997-09-16T00:00:00"), + ShippedDate: new Date("1997-08-26T00:00:00"), + ShipVia: 1, + Freight: 201.2900, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 25, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 60, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10638, + EmployeeID: 3, + OrderDate: new Date("1997-08-20T00:00:00"), + RequiredDate: new Date("1997-09-17T00:00:00"), + ShippedDate: new Date("1997-09-01T00:00:00"), + ShipVia: 1, + Freight: 158.4400, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 10639, + EmployeeID: 7, + OrderDate: new Date("1997-08-20T00:00:00"), + RequiredDate: new Date("1997-09-17T00:00:00"), + ShippedDate: new Date("1997-08-27T00:00:00"), + ShipVia: 3, + Freight: 38.6400, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10640, + EmployeeID: 4, + OrderDate: new Date("1997-08-21T00:00:00"), + RequiredDate: new Date("1997-09-18T00:00:00"), + ShippedDate: new Date("1997-08-28T00:00:00"), + ShipVia: 1, + Freight: 23.5500, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 15, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10641, + EmployeeID: 4, + OrderDate: new Date("1997-08-22T00:00:00"), + RequiredDate: new Date("1997-09-19T00:00:00"), + ShippedDate: new Date("1997-08-26T00:00:00"), + ShipVia: 2, + Freight: 179.6100, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10642, + EmployeeID: 7, + OrderDate: new Date("1997-08-22T00:00:00"), + RequiredDate: new Date("1997-09-19T00:00:00"), + ShippedDate: new Date("1997-09-05T00:00:00"), + ShipVia: 3, + Freight: 41.8900, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 20, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 10643, + EmployeeID: 6, + OrderDate: new Date("1997-08-25T00:00:00"), + RequiredDate: new Date("1997-09-22T00:00:00"), + ShippedDate: new Date("1997-09-02T00:00:00"), + ShipVia: 1, + Freight: 29.4600, + ShipName: "Alfreds Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 21, + Discount: 2.5000000e-001 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 2, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10644, + EmployeeID: 3, + OrderDate: new Date("1997-08-25T00:00:00"), + RequiredDate: new Date("1997-09-22T00:00:00"), + ShippedDate: new Date("1997-09-01T00:00:00"), + ShipVia: 2, + Freight: 0.1400, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 4, + Discount: 1.0000000e-001 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 21, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10645, + EmployeeID: 4, + OrderDate: new Date("1997-08-26T00:00:00"), + RequiredDate: new Date("1997-09-23T00:00:00"), + ShippedDate: new Date("1997-09-02T00:00:00"), + ShipVia: 1, + Freight: 12.4100, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10646, + EmployeeID: 9, + OrderDate: new Date("1997-08-27T00:00:00"), + RequiredDate: new Date("1997-10-08T00:00:00"), + ShippedDate: new Date("1997-09-03T00:00:00"), + ShipVia: 3, + Freight: 142.3300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 15, + Discount: 2.5000000e-001 + }, { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 18, + Discount: 2.5000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10647, + EmployeeID: 4, + OrderDate: new Date("1997-08-27T00:00:00"), + RequiredDate: new Date("1997-09-10T00:00:00"), + ShippedDate: new Date("1997-09-03T00:00:00"), + ShipVia: 2, + Freight: 45.5400, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10648, + EmployeeID: 5, + OrderDate: new Date("1997-08-28T00:00:00"), + RequiredDate: new Date("1997-10-09T00:00:00"), + ShippedDate: new Date("1997-09-09T00:00:00"), + ShipVia: 2, + Freight: 14.2500, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10649, + EmployeeID: 5, + OrderDate: new Date("1997-08-28T00:00:00"), + RequiredDate: new Date("1997-09-25T00:00:00"), + ShippedDate: new Date("1997-08-29T00:00:00"), + ShipVia: 3, + Freight: 6.2000, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10650, + EmployeeID: 5, + OrderDate: new Date("1997-08-29T00:00:00"), + RequiredDate: new Date("1997-09-26T00:00:00"), + ShippedDate: new Date("1997-09-03T00:00:00"), + ShipVia: 3, + Freight: 176.8100, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 25, + Discount: 5.0000001e-002 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10651, + EmployeeID: 8, + OrderDate: new Date("1997-09-01T00:00:00"), + RequiredDate: new Date("1997-09-29T00:00:00"), + ShippedDate: new Date("1997-09-11T00:00:00"), + ShipVia: 2, + Freight: 20.6000, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 12, + Discount: 2.5000000e-001 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10652, + EmployeeID: 4, + OrderDate: new Date("1997-09-01T00:00:00"), + RequiredDate: new Date("1997-09-29T00:00:00"), + ShippedDate: new Date("1997-09-08T00:00:00"), + ShipVia: 2, + Freight: 7.1400, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 2, + Discount: 2.5000000e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10653, + EmployeeID: 1, + OrderDate: new Date("1997-09-02T00:00:00"), + RequiredDate: new Date("1997-09-30T00:00:00"), + ShippedDate: new Date("1997-09-19T00:00:00"), + ShipVia: 1, + Freight: 93.2500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10654, + EmployeeID: 5, + OrderDate: new Date("1997-09-02T00:00:00"), + RequiredDate: new Date("1997-09-30T00:00:00"), + ShippedDate: new Date("1997-09-11T00:00:00"), + ShipVia: 1, + Freight: 55.2600, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 12, + Discount: 1.0000000e-001 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 6, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10655, + EmployeeID: 1, + OrderDate: new Date("1997-09-03T00:00:00"), + RequiredDate: new Date("1997-10-01T00:00:00"), + ShippedDate: new Date("1997-09-11T00:00:00"), + ShipVia: 2, + Freight: 4.4100, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 20, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10656, + EmployeeID: 6, + OrderDate: new Date("1997-09-04T00:00:00"), + RequiredDate: new Date("1997-10-02T00:00:00"), + ShippedDate: new Date("1997-09-10T00:00:00"), + ShipVia: 1, + Freight: 57.1500, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 3, + Discount: 1.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 28, + Discount: 1.0000000e-001 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 6, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10657, + EmployeeID: 2, + OrderDate: new Date("1997-09-04T00:00:00"), + RequiredDate: new Date("1997-10-02T00:00:00"), + ShippedDate: new Date("1997-09-15T00:00:00"), + ShipVia: 2, + Freight: 352.6900, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 15, + UnitPrice: 15.5000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10658, + EmployeeID: 4, + OrderDate: new Date("1997-09-05T00:00:00"), + RequiredDate: new Date("1997-10-03T00:00:00"), + ShippedDate: new Date("1997-09-08T00:00:00"), + ShipVia: 1, + Freight: 364.1500, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 70, + Discount: 5.0000001e-002 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 55, + Discount: 5.0000001e-002 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 70, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10659, + EmployeeID: 7, + OrderDate: new Date("1997-09-05T00:00:00"), + RequiredDate: new Date("1997-10-03T00:00:00"), + ShippedDate: new Date("1997-09-10T00:00:00"), + ShipVia: 2, + Freight: 105.8100, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 24, + Discount: 5.0000001e-002 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 40, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "HUNGC", + CompanyName: "Hungry Coyote Import Store", + ContactName: "Yoshi Latimer", + ContactTitle: "Sales Representative", + Address: "City Center Plaza 516 Main St.", + City: "Elgin", + Region: "OR", + PostalCode: "97827", + Country: "USA", + Phone: "(503) 555-6874", + Fax: "(503) 555-2376", + Orders: [ + { + OrderID: 10660, + EmployeeID: 8, + OrderDate: new Date("1997-09-08T00:00:00"), + RequiredDate: new Date("1997-10-06T00:00:00"), + ShippedDate: new Date("1997-10-15T00:00:00"), + ShipVia: 1, + Freight: 111.2900, + ShipName: "Hungry Coyote Import Store", + ShipAddress: "City Center Plaza 516 Main St.", + ShipCity: "Elgin", + ShipRegion: "OR", + ShipPostalCode: "97827", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10661, + EmployeeID: 7, + OrderDate: new Date("1997-09-09T00:00:00"), + RequiredDate: new Date("1997-10-07T00:00:00"), + ShippedDate: new Date("1997-09-15T00:00:00"), + ShipVia: 3, + Freight: 17.5500, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 3, + Discount: 2.0000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 49, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10662, + EmployeeID: 3, + OrderDate: new Date("1997-09-09T00:00:00"), + RequiredDate: new Date("1997-10-07T00:00:00"), + ShippedDate: new Date("1997-09-18T00:00:00"), + ShipVia: 2, + Freight: 1.2800, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10663, + EmployeeID: 2, + OrderDate: new Date("1997-09-10T00:00:00"), + RequiredDate: new Date("1997-09-24T00:00:00"), + ShippedDate: new Date("1997-10-03T00:00:00"), + ShipVia: 2, + Freight: 113.1500, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10664, + EmployeeID: 1, + OrderDate: new Date("1997-09-10T00:00:00"), + RequiredDate: new Date("1997-10-08T00:00:00"), + ShippedDate: new Date("1997-09-19T00:00:00"), + ShipVia: 3, + Freight: 1.2700, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 24, + Discount: 1.5000001e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 12, + Discount: 1.5000001e-001 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10665, + EmployeeID: 1, + OrderDate: new Date("1997-09-11T00:00:00"), + RequiredDate: new Date("1997-10-09T00:00:00"), + ShippedDate: new Date("1997-09-17T00:00:00"), + ShipVia: 2, + Freight: 26.3100, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10666, + EmployeeID: 7, + OrderDate: new Date("1997-09-12T00:00:00"), + RequiredDate: new Date("1997-10-10T00:00:00"), + ShippedDate: new Date("1997-09-22T00:00:00"), + ShipVia: 2, + Freight: 232.4200, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10667, + EmployeeID: 7, + OrderDate: new Date("1997-09-12T00:00:00"), + RequiredDate: new Date("1997-10-10T00:00:00"), + ShippedDate: new Date("1997-09-19T00:00:00"), + ShipVia: 1, + Freight: 78.0900, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 45, + Discount: 2.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 14, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 10668, + EmployeeID: 1, + OrderDate: new Date("1997-09-15T00:00:00"), + RequiredDate: new Date("1997-10-13T00:00:00"), + ShippedDate: new Date("1997-09-23T00:00:00"), + ShipVia: 2, + Freight: 47.2200, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 4, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10669, + EmployeeID: 2, + OrderDate: new Date("1997-09-15T00:00:00"), + RequiredDate: new Date("1997-10-13T00:00:00"), + ShippedDate: new Date("1997-09-22T00:00:00"), + ShipVia: 1, + Freight: 24.3900, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10670, + EmployeeID: 4, + OrderDate: new Date("1997-09-16T00:00:00"), + RequiredDate: new Date("1997-10-14T00:00:00"), + ShippedDate: new Date("1997-09-18T00:00:00"), + ShipVia: 1, + Freight: 203.4800, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 32, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANR", + CompanyName: "France restauration", + ContactName: "Carine Schmitt", + ContactTitle: "Marketing Manager", + Address: "54, rue Royale", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.32.21.21", + Fax: "40.32.21.20", + Orders: [ + { + OrderID: 10671, + EmployeeID: 1, + OrderDate: new Date("1997-09-17T00:00:00"), + RequiredDate: new Date("1997-10-15T00:00:00"), + ShippedDate: new Date("1997-09-24T00:00:00"), + ShipVia: 1, + Freight: 30.3400, + ShipName: "France restauration", + ShipAddress: "54, rue Royale", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10672, + EmployeeID: 9, + OrderDate: new Date("1997-09-17T00:00:00"), + RequiredDate: new Date("1997-10-01T00:00:00"), + ShippedDate: new Date("1997-09-26T00:00:00"), + ShipVia: 2, + Freight: 95.7500, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10673, + EmployeeID: 2, + OrderDate: new Date("1997-09-18T00:00:00"), + RequiredDate: new Date("1997-10-16T00:00:00"), + ShippedDate: new Date("1997-09-19T00:00:00"), + ShipVia: 1, + Freight: 22.7600, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10674, + EmployeeID: 4, + OrderDate: new Date("1997-09-18T00:00:00"), + RequiredDate: new Date("1997-10-16T00:00:00"), + ShippedDate: new Date("1997-09-30T00:00:00"), + ShipVia: 2, + Freight: 0.9000, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10675, + EmployeeID: 5, + OrderDate: new Date("1997-09-19T00:00:00"), + RequiredDate: new Date("1997-10-17T00:00:00"), + ShippedDate: new Date("1997-09-23T00:00:00"), + ShipVia: 2, + Freight: 31.8500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10676, + EmployeeID: 2, + OrderDate: new Date("1997-09-22T00:00:00"), + RequiredDate: new Date("1997-10-20T00:00:00"), + ShippedDate: new Date("1997-09-29T00:00:00"), + ShipVia: 2, + Freight: 2.0100, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10677, + EmployeeID: 1, + OrderDate: new Date("1997-09-22T00:00:00"), + RequiredDate: new Date("1997-10-20T00:00:00"), + ShippedDate: new Date("1997-09-26T00:00:00"), + ShipVia: 3, + Freight: 4.0300, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 8, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10678, + EmployeeID: 7, + OrderDate: new Date("1997-09-23T00:00:00"), + RequiredDate: new Date("1997-10-21T00:00:00"), + ShippedDate: new Date("1997-10-16T00:00:00"), + ShipVia: 3, + Freight: 388.9800, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 100, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 120, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10679, + EmployeeID: 8, + OrderDate: new Date("1997-09-23T00:00:00"), + RequiredDate: new Date("1997-10-21T00:00:00"), + ShippedDate: new Date("1997-09-30T00:00:00"), + ShipVia: 3, + Freight: 27.9400, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10680, + EmployeeID: 1, + OrderDate: new Date("1997-09-24T00:00:00"), + RequiredDate: new Date("1997-10-22T00:00:00"), + ShippedDate: new Date("1997-09-26T00:00:00"), + ShipVia: 1, + Freight: 26.6100, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 40, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10681, + EmployeeID: 3, + OrderDate: new Date("1997-09-25T00:00:00"), + RequiredDate: new Date("1997-10-23T00:00:00"), + ShippedDate: new Date("1997-09-30T00:00:00"), + ShipVia: 3, + Freight: 76.1300, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 12, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10682, + EmployeeID: 3, + OrderDate: new Date("1997-09-25T00:00:00"), + RequiredDate: new Date("1997-10-23T00:00:00"), + ShippedDate: new Date("1997-10-01T00:00:00"), + ShipVia: 2, + Freight: 36.1300, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 66, + UnitPrice: 17.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DUMON", + CompanyName: "Du monde entier", + ContactName: "Janine Labrune", + ContactTitle: "Owner", + Address: "67, rue des Cinquante Otages", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.67.88.88", + Fax: "40.67.89.89", + Orders: [ + { + OrderID: 10683, + EmployeeID: 2, + OrderDate: new Date("1997-09-26T00:00:00"), + RequiredDate: new Date("1997-10-24T00:00:00"), + ShippedDate: new Date("1997-10-01T00:00:00"), + ShipVia: 1, + Freight: 4.4000, + ShipName: "Du monde entier", + ShipAddress: "67, rue des Cinquante Otages", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10684, + EmployeeID: 3, + OrderDate: new Date("1997-09-26T00:00:00"), + RequiredDate: new Date("1997-10-24T00:00:00"), + ShippedDate: new Date("1997-09-30T00:00:00"), + ShipVia: 1, + Freight: 145.6300, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10685, + EmployeeID: 4, + OrderDate: new Date("1997-09-29T00:00:00"), + RequiredDate: new Date("1997-10-13T00:00:00"), + ShippedDate: new Date("1997-10-03T00:00:00"), + ShipVia: 2, + Freight: 33.7500, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10686, + EmployeeID: 2, + OrderDate: new Date("1997-09-30T00:00:00"), + RequiredDate: new Date("1997-10-28T00:00:00"), + ShippedDate: new Date("1997-10-08T00:00:00"), + ShipVia: 1, + Freight: 96.5000, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10687, + EmployeeID: 9, + OrderDate: new Date("1997-09-30T00:00:00"), + RequiredDate: new Date("1997-10-28T00:00:00"), + ShippedDate: new Date("1997-10-30T00:00:00"), + ShipVia: 2, + Freight: 296.4300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 9, + UnitPrice: 97.0000, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 6, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10688, + EmployeeID: 4, + OrderDate: new Date("1997-10-01T00:00:00"), + RequiredDate: new Date("1997-10-15T00:00:00"), + ShippedDate: new Date("1997-10-07T00:00:00"), + ShipVia: 2, + Freight: 299.0900, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 18, + Discount: 1.0000000e-001 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 60, + Discount: 1.0000000e-001 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10689, + EmployeeID: 1, + OrderDate: new Date("1997-10-01T00:00:00"), + RequiredDate: new Date("1997-10-29T00:00:00"), + ShippedDate: new Date("1997-10-07T00:00:00"), + ShipVia: 2, + Freight: 13.4200, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10690, + EmployeeID: 1, + OrderDate: new Date("1997-10-02T00:00:00"), + RequiredDate: new Date("1997-10-30T00:00:00"), + ShippedDate: new Date("1997-10-03T00:00:00"), + ShipVia: 1, + Freight: 15.8000, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10691, + EmployeeID: 2, + OrderDate: new Date("1997-10-03T00:00:00"), + RequiredDate: new Date("1997-11-14T00:00:00"), + ShippedDate: new Date("1997-10-22T00:00:00"), + ShipVia: 2, + Freight: 810.0500, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 48, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 10692, + EmployeeID: 4, + OrderDate: new Date("1997-10-03T00:00:00"), + RequiredDate: new Date("1997-10-31T00:00:00"), + ShippedDate: new Date("1997-10-13T00:00:00"), + ShipVia: 2, + Freight: 61.0200, + ShipName: "Alfred's Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10693, + EmployeeID: 3, + OrderDate: new Date("1997-10-06T00:00:00"), + RequiredDate: new Date("1997-10-20T00:00:00"), + ShippedDate: new Date("1997-10-10T00:00:00"), + ShipVia: 3, + Freight: 139.3400, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 9, + UnitPrice: 97.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 60, + Discount: 1.5000001e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10694, + EmployeeID: 8, + OrderDate: new Date("1997-10-06T00:00:00"), + RequiredDate: new Date("1997-11-03T00:00:00"), + ShippedDate: new Date("1997-10-09T00:00:00"), + ShipVia: 3, + Freight: 398.3600, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 90, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10695, + EmployeeID: 7, + OrderDate: new Date("1997-10-07T00:00:00"), + RequiredDate: new Date("1997-11-18T00:00:00"), + ShippedDate: new Date("1997-10-14T00:00:00"), + ShipVia: 1, + Freight: 16.7200, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10696, + EmployeeID: 8, + OrderDate: new Date("1997-10-08T00:00:00"), + RequiredDate: new Date("1997-11-19T00:00:00"), + ShippedDate: new Date("1997-10-14T00:00:00"), + ShipVia: 3, + Freight: 102.5500, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10697, + EmployeeID: 3, + OrderDate: new Date("1997-10-08T00:00:00"), + RequiredDate: new Date("1997-11-05T00:00:00"), + ShippedDate: new Date("1997-10-14T00:00:00"), + ShipVia: 1, + Freight: 45.5200, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 7, + Discount: 2.5000000e-001 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 9, + Discount: 2.5000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10698, + EmployeeID: 4, + OrderDate: new Date("1997-10-09T00:00:00"), + RequiredDate: new Date("1997-11-06T00:00:00"), + ShippedDate: new Date("1997-10-17T00:00:00"), + ShipVia: 1, + Freight: 272.4700, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 8, + Discount: 5.0000001e-002 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 65, + Discount: 5.0000001e-002 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 8, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "MORGK", + CompanyName: "Morgenstern Gesundkost", + ContactName: "Alexander Feuer", + ContactTitle: "Marketing Assistant", + Address: "Heerstr. 22", + City: "Leipzig", + PostalCode: "04179", + Country: "Germany", + Phone: "0342-023176", + Orders: [ + { + OrderID: 10699, + EmployeeID: 3, + OrderDate: new Date("1997-10-09T00:00:00"), + RequiredDate: new Date("1997-11-06T00:00:00"), + ShippedDate: new Date("1997-10-13T00:00:00"), + ShipVia: 3, + Freight: 0.5800, + ShipName: "Morgenstern Gesundkost", + ShipAddress: "Heerstr. 22", + ShipCity: "Leipzig", + ShipPostalCode: "04179", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10700, + EmployeeID: 3, + OrderDate: new Date("1997-10-10T00:00:00"), + RequiredDate: new Date("1997-11-07T00:00:00"), + ShippedDate: new Date("1997-10-16T00:00:00"), + ShipVia: 1, + Freight: 65.1000, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 5, + Discount: 2.0000000e-001 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 12, + Discount: 2.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 60, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10701, + EmployeeID: 6, + OrderDate: new Date("1997-10-13T00:00:00"), + RequiredDate: new Date("1997-10-27T00:00:00"), + ShippedDate: new Date("1997-10-15T00:00:00"), + ShipVia: 3, + Freight: 220.3100, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 42, + Discount: 1.5000001e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 35, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 10702, + EmployeeID: 4, + OrderDate: new Date("1997-10-13T00:00:00"), + RequiredDate: new Date("1997-11-24T00:00:00"), + ShippedDate: new Date("1997-10-21T00:00:00"), + ShipVia: 1, + Freight: 23.9400, + ShipName: "Alfred's Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10703, + EmployeeID: 6, + OrderDate: new Date("1997-10-14T00:00:00"), + RequiredDate: new Date("1997-11-11T00:00:00"), + ShippedDate: new Date("1997-10-20T00:00:00"), + ShipVia: 2, + Freight: 152.3000, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10704, + EmployeeID: 6, + OrderDate: new Date("1997-10-14T00:00:00"), + RequiredDate: new Date("1997-11-11T00:00:00"), + ShippedDate: new Date("1997-11-07T00:00:00"), + ShipVia: 1, + Freight: 4.7800, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 48, + UnitPrice: 12.7500, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10705, + EmployeeID: 9, + OrderDate: new Date("1997-10-15T00:00:00"), + RequiredDate: new Date("1997-11-12T00:00:00"), + ShippedDate: new Date("1997-11-18T00:00:00"), + ShipVia: 2, + Freight: 3.5200, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10706, + EmployeeID: 8, + OrderDate: new Date("1997-10-16T00:00:00"), + RequiredDate: new Date("1997-11-13T00:00:00"), + ShippedDate: new Date("1997-10-21T00:00:00"), + ShipVia: 3, + Freight: 135.6300, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10707, + EmployeeID: 4, + OrderDate: new Date("1997-10-16T00:00:00"), + RequiredDate: new Date("1997-10-30T00:00:00"), + ShippedDate: new Date("1997-10-23T00:00:00"), + ShipVia: 3, + Freight: 21.7400, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 28, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "THEBI", + CompanyName: "The Big Cheese", + ContactName: "Liz Nixon", + ContactTitle: "Marketing Manager", + Address: "89 Jefferson Way Suite 2", + City: "Portland", + Region: "OR", + PostalCode: "97201", + Country: "USA", + Phone: "(503) 555-3612", + Orders: [ + { + OrderID: 10708, + EmployeeID: 6, + OrderDate: new Date("1997-10-17T00:00:00"), + RequiredDate: new Date("1997-11-28T00:00:00"), + ShippedDate: new Date("1997-11-05T00:00:00"), + ShipVia: 2, + Freight: 2.9600, + ShipName: "The Big Cheese", + ShipAddress: "89 Jefferson Way Suite 2", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97201", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10709, + EmployeeID: 1, + OrderDate: new Date("1997-10-17T00:00:00"), + RequiredDate: new Date("1997-11-14T00:00:00"), + ShippedDate: new Date("1997-11-20T00:00:00"), + ShipVia: 3, + Freight: 210.8000, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 10710, + EmployeeID: 1, + OrderDate: new Date("1997-10-20T00:00:00"), + RequiredDate: new Date("1997-11-17T00:00:00"), + ShippedDate: new Date("1997-10-23T00:00:00"), + ShipVia: 1, + Freight: 4.9800, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10711, + EmployeeID: 5, + OrderDate: new Date("1997-10-21T00:00:00"), + RequiredDate: new Date("1997-12-02T00:00:00"), + ShippedDate: new Date("1997-10-29T00:00:00"), + ShipVia: 2, + Freight: 52.4100, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 120, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10712, + EmployeeID: 3, + OrderDate: new Date("1997-10-21T00:00:00"), + RequiredDate: new Date("1997-11-18T00:00:00"), + ShippedDate: new Date("1997-10-31T00:00:00"), + ShipVia: 1, + Freight: 89.9300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 3, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10713, + EmployeeID: 1, + OrderDate: new Date("1997-10-22T00:00:00"), + RequiredDate: new Date("1997-11-19T00:00:00"), + ShippedDate: new Date("1997-10-24T00:00:00"), + ShipVia: 1, + Freight: 167.0500, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 110, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10714, + EmployeeID: 5, + OrderDate: new Date("1997-10-22T00:00:00"), + RequiredDate: new Date("1997-11-19T00:00:00"), + ShippedDate: new Date("1997-10-27T00:00:00"), + ShipVia: 3, + Freight: 24.4900, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 27, + Discount: 2.5000000e-001 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 18, + Discount: 2.5000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 12, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10715, + EmployeeID: 3, + OrderDate: new Date("1997-10-23T00:00:00"), + RequiredDate: new Date("1997-11-06T00:00:00"), + ShippedDate: new Date("1997-10-29T00:00:00"), + ShipVia: 1, + Freight: 63.2000, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RANCH", + CompanyName: "Rancho grande", + ContactName: "Sergio Gutiérrez", + ContactTitle: "Sales Representative", + Address: "Av. del Libertador 900", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 123-5555", + Fax: "(1) 123-5556", + Orders: [ + { + OrderID: 10716, + EmployeeID: 4, + OrderDate: new Date("1997-10-24T00:00:00"), + RequiredDate: new Date("1997-11-21T00:00:00"), + ShippedDate: new Date("1997-10-27T00:00:00"), + ShipVia: 2, + Freight: 22.5700, + ShipName: "Rancho grande", + ShipAddress: "Av. del Libertador 900", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10717, + EmployeeID: 1, + OrderDate: new Date("1997-10-24T00:00:00"), + RequiredDate: new Date("1997-11-21T00:00:00"), + ShippedDate: new Date("1997-10-29T00:00:00"), + ShipVia: 2, + Freight: 59.2500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 32, + Discount: 5.0000001e-002 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 25, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10718, + EmployeeID: 1, + OrderDate: new Date("1997-10-27T00:00:00"), + RequiredDate: new Date("1997-11-24T00:00:00"), + ShippedDate: new Date("1997-10-29T00:00:00"), + ShipVia: 3, + Freight: 170.8800, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LETSS", + CompanyName: "Let's Stop N Shop", + ContactName: "Jaime Yorres", + ContactTitle: "Owner", + Address: "87 Polk St. Suite 5", + City: "San Francisco", + Region: "CA", + PostalCode: "94117", + Country: "USA", + Phone: "(415) 555-5938", + Orders: [ + { + OrderID: 10719, + EmployeeID: 8, + OrderDate: new Date("1997-10-27T00:00:00"), + RequiredDate: new Date("1997-11-24T00:00:00"), + ShippedDate: new Date("1997-11-05T00:00:00"), + ShipVia: 2, + Freight: 51.4400, + ShipName: "Let's Stop N Shop", + ShipAddress: "87 Polk St. Suite 5", + ShipCity: "San Francisco", + ShipRegion: "CA", + ShipPostalCode: "94117", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 12, + Discount: 2.5000000e-001 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 3, + Discount: 2.5000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 40, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10720, + EmployeeID: 8, + OrderDate: new Date("1997-10-28T00:00:00"), + RequiredDate: new Date("1997-11-11T00:00:00"), + ShippedDate: new Date("1997-11-05T00:00:00"), + ShipVia: 2, + Freight: 9.5300, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10721, + EmployeeID: 5, + OrderDate: new Date("1997-10-29T00:00:00"), + RequiredDate: new Date("1997-11-26T00:00:00"), + ShippedDate: new Date("1997-10-31T00:00:00"), + ShipVia: 3, + Freight: 48.9200, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 50, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10722, + EmployeeID: 8, + OrderDate: new Date("1997-10-29T00:00:00"), + RequiredDate: new Date("1997-12-10T00:00:00"), + ShippedDate: new Date("1997-11-04T00:00:00"), + ShipVia: 1, + Freight: 74.5800, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 42, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10723, + EmployeeID: 3, + OrderDate: new Date("1997-10-30T00:00:00"), + RequiredDate: new Date("1997-11-27T00:00:00"), + ShippedDate: new Date("1997-11-25T00:00:00"), + ShipVia: 1, + Freight: 21.7200, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MEREP", + CompanyName: "Mère Paillarde", + ContactName: "Jean Fresnière", + ContactTitle: "Marketing Assistant", + Address: "43 rue St. Laurent", + City: "Montréal", + Region: "Québec", + PostalCode: "H1J 1C3", + Country: "Canada", + Phone: "(514) 555-8054", + Fax: "(514) 555-8055", + Orders: [ + { + OrderID: 10724, + EmployeeID: 8, + OrderDate: new Date("1997-10-30T00:00:00"), + RequiredDate: new Date("1997-12-11T00:00:00"), + ShippedDate: new Date("1997-11-05T00:00:00"), + ShipVia: 2, + Freight: 57.7500, + ShipName: "Mère Paillarde", + ShipAddress: "43 rue St. Laurent", + ShipCity: "Montréal", + ShipRegion: "Québec", + ShipPostalCode: "H1J 1C3", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FAMIA", + CompanyName: "Familia Arquibaldo", + ContactName: "Aria Cruz", + ContactTitle: "Marketing Assistant", + Address: "Rua Orós, 92", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05442-030", + Country: "Brazil", + Phone: "(11) 555-9857", + Orders: [ + { + OrderID: 10725, + EmployeeID: 4, + OrderDate: new Date("1997-10-31T00:00:00"), + RequiredDate: new Date("1997-11-28T00:00:00"), + ShippedDate: new Date("1997-11-05T00:00:00"), + ShipVia: 3, + Freight: 10.8300, + ShipName: "Familia Arquibaldo", + ShipAddress: "Rua Orós, 92", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05442-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 10726, + EmployeeID: 4, + OrderDate: new Date("1997-11-03T00:00:00"), + RequiredDate: new Date("1997-11-17T00:00:00"), + ShippedDate: new Date("1997-12-05T00:00:00"), + ShipVia: 1, + Freight: 16.5600, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10727, + EmployeeID: 2, + OrderDate: new Date("1997-11-03T00:00:00"), + RequiredDate: new Date("1997-12-01T00:00:00"), + ShippedDate: new Date("1997-12-05T00:00:00"), + ShipVia: 1, + Freight: 89.9000, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10728, + EmployeeID: 4, + OrderDate: new Date("1997-11-04T00:00:00"), + RequiredDate: new Date("1997-12-02T00:00:00"), + ShippedDate: new Date("1997-11-11T00:00:00"), + ShipVia: 2, + Freight: 58.3300, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10729, + EmployeeID: 8, + OrderDate: new Date("1997-11-04T00:00:00"), + RequiredDate: new Date("1997-12-16T00:00:00"), + ShippedDate: new Date("1997-11-14T00:00:00"), + ShipVia: 3, + Freight: 141.0600, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10730, + EmployeeID: 5, + OrderDate: new Date("1997-11-05T00:00:00"), + RequiredDate: new Date("1997-12-03T00:00:00"), + ShippedDate: new Date("1997-11-14T00:00:00"), + ShipVia: 1, + Freight: 20.1200, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 3, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10731, + EmployeeID: 7, + OrderDate: new Date("1997-11-06T00:00:00"), + RequiredDate: new Date("1997-12-04T00:00:00"), + ShippedDate: new Date("1997-11-14T00:00:00"), + ShipVia: 1, + Freight: 96.6500, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 5.0000001e-002 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 30, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10732, + EmployeeID: 3, + OrderDate: new Date("1997-11-06T00:00:00"), + RequiredDate: new Date("1997-12-04T00:00:00"), + ShippedDate: new Date("1997-11-07T00:00:00"), + ShipVia: 1, + Freight: 16.9700, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10733, + EmployeeID: 1, + OrderDate: new Date("1997-11-07T00:00:00"), + RequiredDate: new Date("1997-12-05T00:00:00"), + ShippedDate: new Date("1997-11-10T00:00:00"), + ShipVia: 3, + Freight: 110.1100, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10734, + EmployeeID: 2, + OrderDate: new Date("1997-11-07T00:00:00"), + RequiredDate: new Date("1997-12-05T00:00:00"), + ShippedDate: new Date("1997-11-12T00:00:00"), + ShipVia: 3, + Freight: 1.6300, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LETSS", + CompanyName: "Let's Stop N Shop", + ContactName: "Jaime Yorres", + ContactTitle: "Owner", + Address: "87 Polk St. Suite 5", + City: "San Francisco", + Region: "CA", + PostalCode: "94117", + Country: "USA", + Phone: "(415) 555-5938", + Orders: [ + { + OrderID: 10735, + EmployeeID: 6, + OrderDate: new Date("1997-11-10T00:00:00"), + RequiredDate: new Date("1997-12-08T00:00:00"), + ShippedDate: new Date("1997-11-21T00:00:00"), + ShipVia: 2, + Freight: 45.9700, + ShipName: "Let's Stop N Shop", + ShipAddress: "87 Polk St. Suite 5", + ShipCity: "San Francisco", + ShipRegion: "CA", + ShipPostalCode: "94117", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 2, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10736, + EmployeeID: 9, + OrderDate: new Date("1997-11-11T00:00:00"), + RequiredDate: new Date("1997-12-09T00:00:00"), + ShippedDate: new Date("1997-11-21T00:00:00"), + ShipVia: 2, + Freight: 44.1000, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VINET", + CompanyName: "Vins et alcools Chevalier", + ContactName: "Paul Henriot", + ContactTitle: "Accounting Manager", + Address: "59 rue de l'Abbaye", + City: "Reims", + PostalCode: "51100", + Country: "France", + Phone: "26.47.15.10", + Fax: "26.47.15.11", + Orders: [ + { + OrderID: 10737, + EmployeeID: 2, + OrderDate: new Date("1997-11-11T00:00:00"), + RequiredDate: new Date("1997-12-09T00:00:00"), + ShippedDate: new Date("1997-11-18T00:00:00"), + ShipVia: 2, + Freight: 7.7900, + ShipName: "Vins et alcools Chevalier", + ShipAddress: "59 rue de l'Abbaye", + ShipCity: "Reims", + ShipPostalCode: "51100", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPECD", + CompanyName: "Spécialités du monde", + ContactName: "Dominique Perrier", + ContactTitle: "Marketing Manager", + Address: "25, rue Lauriston", + City: "Paris", + PostalCode: "75016", + Country: "France", + Phone: "(1) 47.55.60.10", + Fax: "(1) 47.55.60.20", + Orders: [ + { + OrderID: 10738, + EmployeeID: 2, + OrderDate: new Date("1997-11-12T00:00:00"), + RequiredDate: new Date("1997-12-10T00:00:00"), + ShippedDate: new Date("1997-11-18T00:00:00"), + ShipVia: 1, + Freight: 2.9100, + ShipName: "Spécialités du monde", + ShipAddress: "25, rue Lauriston", + ShipCity: "Paris", + ShipPostalCode: "75016", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VINET", + CompanyName: "Vins et alcools Chevalier", + ContactName: "Paul Henriot", + ContactTitle: "Accounting Manager", + Address: "59 rue de l'Abbaye", + City: "Reims", + PostalCode: "51100", + Country: "France", + Phone: "26.47.15.10", + Fax: "26.47.15.11", + Orders: [ + { + OrderID: 10739, + EmployeeID: 3, + OrderDate: new Date("1997-11-12T00:00:00"), + RequiredDate: new Date("1997-12-10T00:00:00"), + ShippedDate: new Date("1997-11-17T00:00:00"), + ShipVia: 3, + Freight: 11.0800, + ShipName: "Vins et alcools Chevalier", + ShipAddress: "59 rue de l'Abbaye", + ShipCity: "Reims", + ShipPostalCode: "51100", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10740, + EmployeeID: 4, + OrderDate: new Date("1997-11-13T00:00:00"), + RequiredDate: new Date("1997-12-11T00:00:00"), + ShippedDate: new Date("1997-11-25T00:00:00"), + ShipVia: 2, + Freight: 81.8800, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 5, + Discount: 2.0000000e-001 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 40, + Discount: 2.0000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 14, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10741, + EmployeeID: 4, + OrderDate: new Date("1997-11-14T00:00:00"), + RequiredDate: new Date("1997-11-28T00:00:00"), + ShippedDate: new Date("1997-11-18T00:00:00"), + ShipVia: 3, + Freight: 10.9600, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 15, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10742, + EmployeeID: 3, + OrderDate: new Date("1997-11-14T00:00:00"), + RequiredDate: new Date("1997-12-12T00:00:00"), + ShippedDate: new Date("1997-11-18T00:00:00"), + ShipVia: 3, + Freight: 243.7300, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10743, + EmployeeID: 1, + OrderDate: new Date("1997-11-17T00:00:00"), + RequiredDate: new Date("1997-12-15T00:00:00"), + ShippedDate: new Date("1997-11-21T00:00:00"), + ShipVia: 2, + Freight: 23.7200, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 28, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10744, + EmployeeID: 6, + OrderDate: new Date("1997-11-17T00:00:00"), + RequiredDate: new Date("1997-12-15T00:00:00"), + ShippedDate: new Date("1997-11-24T00:00:00"), + ShipVia: 1, + Freight: 69.1900, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 50, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10745, + EmployeeID: 9, + OrderDate: new Date("1997-11-18T00:00:00"), + RequiredDate: new Date("1997-12-16T00:00:00"), + ShippedDate: new Date("1997-11-27T00:00:00"), + ShipVia: 1, + Freight: 3.5200, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10746, + EmployeeID: 1, + OrderDate: new Date("1997-11-19T00:00:00"), + RequiredDate: new Date("1997-12-17T00:00:00"), + ShippedDate: new Date("1997-11-21T00:00:00"), + ShipVia: 3, + Freight: 31.4300, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10747, + EmployeeID: 6, + OrderDate: new Date("1997-11-19T00:00:00"), + RequiredDate: new Date("1997-12-17T00:00:00"), + ShippedDate: new Date("1997-11-26T00:00:00"), + ShipVia: 1, + Freight: 117.3300, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10748, + EmployeeID: 3, + OrderDate: new Date("1997-11-20T00:00:00"), + RequiredDate: new Date("1997-12-18T00:00:00"), + ShippedDate: new Date("1997-11-28T00:00:00"), + ShipVia: 1, + Freight: 232.5500, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 44, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10749, + EmployeeID: 4, + OrderDate: new Date("1997-11-20T00:00:00"), + RequiredDate: new Date("1997-12-18T00:00:00"), + ShippedDate: new Date("1997-12-19T00:00:00"), + ShipVia: 2, + Freight: 61.5300, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10750, + EmployeeID: 9, + OrderDate: new Date("1997-11-21T00:00:00"), + RequiredDate: new Date("1997-12-19T00:00:00"), + ShippedDate: new Date("1997-11-24T00:00:00"), + ShipVia: 1, + Freight: 79.3000, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 5, + Discount: 1.5000001e-001 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 25, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10751, + EmployeeID: 3, + OrderDate: new Date("1997-11-24T00:00:00"), + RequiredDate: new Date("1997-12-22T00:00:00"), + ShippedDate: new Date("1997-12-03T00:00:00"), + ShipVia: 3, + Freight: 130.7900, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 12, + Discount: 1.0000000e-001 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "NORTS", + CompanyName: "North\/South", + ContactName: "Simon Crowther", + ContactTitle: "Sales Associate", + Address: "South House 300 Queensbridge", + City: "London", + PostalCode: "SW7 1RZ", + Country: "UK", + Phone: "(171) 555-7733", + Fax: "(171) 555-2530", + Orders: [ + { + OrderID: 10752, + EmployeeID: 2, + OrderDate: new Date("1997-11-24T00:00:00"), + RequiredDate: new Date("1997-12-22T00:00:00"), + ShippedDate: new Date("1997-11-28T00:00:00"), + ShipVia: 3, + Freight: 1.3900, + ShipName: "North\/South", + ShipAddress: "South House 300 Queensbridge", + ShipCity: "London", + ShipPostalCode: "SW7 1RZ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 10753, + EmployeeID: 3, + OrderDate: new Date("1997-11-25T00:00:00"), + RequiredDate: new Date("1997-12-23T00:00:00"), + ShippedDate: new Date("1997-11-27T00:00:00"), + ShipVia: 1, + Freight: 7.7000, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 10.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10754, + EmployeeID: 6, + OrderDate: new Date("1997-11-25T00:00:00"), + RequiredDate: new Date("1997-12-23T00:00:00"), + ShippedDate: new Date("1997-11-27T00:00:00"), + ShipVia: 3, + Freight: 2.3800, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10755, + EmployeeID: 4, + OrderDate: new Date("1997-11-26T00:00:00"), + RequiredDate: new Date("1997-12-24T00:00:00"), + ShippedDate: new Date("1997-11-28T00:00:00"), + ShipVia: 2, + Freight: 16.7100, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 14, + Discount: 2.5000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 25, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10756, + EmployeeID: 8, + OrderDate: new Date("1997-11-27T00:00:00"), + RequiredDate: new Date("1997-12-25T00:00:00"), + ShippedDate: new Date("1997-12-02T00:00:00"), + ShipVia: 2, + Freight: 73.2100, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 21, + Discount: 2.0000000e-001 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 6, + Discount: 2.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 20, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10757, + EmployeeID: 6, + OrderDate: new Date("1997-11-27T00:00:00"), + RequiredDate: new Date("1997-12-25T00:00:00"), + ShippedDate: new Date("1997-12-15T00:00:00"), + ShipVia: 1, + Freight: 8.1900, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10758, + EmployeeID: 3, + OrderDate: new Date("1997-11-28T00:00:00"), + RequiredDate: new Date("1997-12-26T00:00:00"), + ShippedDate: new Date("1997-12-04T00:00:00"), + ShipVia: 3, + Freight: 138.1700, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ANATR", + CompanyName: "Ana Trujillo Emparedados y helados", + ContactName: "Ana Trujillo", + ContactTitle: "Owner", + Address: "Avda. de la Constitución 2222", + City: "México D.F.", + PostalCode: "05021", + Country: "Mexico", + Phone: "(5) 555-4729", + Fax: "(5) 555-3745", + Orders: [ + { + OrderID: 10759, + EmployeeID: 3, + OrderDate: new Date("1997-11-28T00:00:00"), + RequiredDate: new Date("1997-12-26T00:00:00"), + ShippedDate: new Date("1997-12-12T00:00:00"), + ShipVia: 3, + Freight: 11.9900, + ShipName: "Ana Trujillo Emparedados y helados", + ShipAddress: "Avda. de la Constitución 2222", + ShipCity: "México D.F.", + ShipPostalCode: "05021", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10760, + EmployeeID: 4, + OrderDate: new Date("1997-12-01T00:00:00"), + RequiredDate: new Date("1997-12-29T00:00:00"), + ShippedDate: new Date("1997-12-10T00:00:00"), + ShipVia: 1, + Freight: 155.6400, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 12, + Discount: 2.5000000e-001 + }, { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10761, + EmployeeID: 5, + OrderDate: new Date("1997-12-02T00:00:00"), + RequiredDate: new Date("1997-12-30T00:00:00"), + ShippedDate: new Date("1997-12-08T00:00:00"), + ShipVia: 2, + Freight: 18.6600, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 35, + Discount: 2.5000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10762, + EmployeeID: 3, + OrderDate: new Date("1997-12-02T00:00:00"), + RequiredDate: new Date("1997-12-30T00:00:00"), + ShippedDate: new Date("1997-12-09T00:00:00"), + ShipVia: 1, + Freight: 328.7400, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLIG", + CompanyName: "Folies gourmandes", + ContactName: "Martine Rancé", + ContactTitle: "Assistant Sales Agent", + Address: "184, chaussée de Tournai", + City: "Lille", + PostalCode: "59000", + Country: "France", + Phone: "20.16.10.16", + Fax: "20.16.10.17", + Orders: [ + { + OrderID: 10763, + EmployeeID: 3, + OrderDate: new Date("1997-12-03T00:00:00"), + RequiredDate: new Date("1997-12-31T00:00:00"), + ShippedDate: new Date("1997-12-08T00:00:00"), + ShipVia: 3, + Freight: 37.3500, + ShipName: "Folies gourmandes", + ShipAddress: "184, chaussée de Tournai", + ShipCity: "Lille", + ShipPostalCode: "59000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10764, + EmployeeID: 6, + OrderDate: new Date("1997-12-03T00:00:00"), + RequiredDate: new Date("1997-12-31T00:00:00"), + ShippedDate: new Date("1997-12-08T00:00:00"), + ShipVia: 3, + Freight: 145.4500, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 130, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10765, + EmployeeID: 3, + OrderDate: new Date("1997-12-04T00:00:00"), + RequiredDate: new Date("1998-01-01T00:00:00"), + ShippedDate: new Date("1997-12-09T00:00:00"), + ShipVia: 3, + Freight: 42.7400, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 80, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10766, + EmployeeID: 4, + OrderDate: new Date("1997-12-05T00:00:00"), + RequiredDate: new Date("1998-01-02T00:00:00"), + ShippedDate: new Date("1997-12-09T00:00:00"), + ShipVia: 1, + Freight: 157.5500, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10767, + EmployeeID: 4, + OrderDate: new Date("1997-12-05T00:00:00"), + RequiredDate: new Date("1998-01-02T00:00:00"), + ShippedDate: new Date("1997-12-15T00:00:00"), + ShipVia: 3, + Freight: 1.5900, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10768, + EmployeeID: 3, + OrderDate: new Date("1997-12-08T00:00:00"), + RequiredDate: new Date("1998-01-05T00:00:00"), + ShippedDate: new Date("1997-12-15T00:00:00"), + ShipVia: 2, + Freight: 146.3200, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10769, + EmployeeID: 3, + OrderDate: new Date("1997-12-08T00:00:00"), + RequiredDate: new Date("1998-01-05T00:00:00"), + ShippedDate: new Date("1997-12-12T00:00:00"), + ShipVia: 1, + Freight: 65.0600, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10770, + EmployeeID: 8, + OrderDate: new Date("1997-12-09T00:00:00"), + RequiredDate: new Date("1998-01-06T00:00:00"), + ShippedDate: new Date("1997-12-17T00:00:00"), + ShipVia: 3, + Freight: 5.3200, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10771, + EmployeeID: 9, + OrderDate: new Date("1997-12-10T00:00:00"), + RequiredDate: new Date("1998-01-07T00:00:00"), + ShippedDate: new Date("1998-01-02T00:00:00"), + ShipVia: 2, + Freight: 11.1900, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10772, + EmployeeID: 3, + OrderDate: new Date("1997-12-10T00:00:00"), + RequiredDate: new Date("1998-01-07T00:00:00"), + ShippedDate: new Date("1997-12-19T00:00:00"), + ShipVia: 2, + Freight: 91.2800, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10773, + EmployeeID: 1, + OrderDate: new Date("1997-12-11T00:00:00"), + RequiredDate: new Date("1998-01-08T00:00:00"), + ShippedDate: new Date("1997-12-16T00:00:00"), + ShipVia: 3, + Freight: 96.4300, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 33, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 70, + Discount: 2.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 7, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10774, + EmployeeID: 4, + OrderDate: new Date("1997-12-11T00:00:00"), + RequiredDate: new Date("1997-12-25T00:00:00"), + ShippedDate: new Date("1997-12-12T00:00:00"), + ShipVia: 1, + Freight: 48.2000, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 2, + Discount: 2.5000000e-001 + }, { + ProductID: 66, + UnitPrice: 17.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "THECR", + CompanyName: "The Cracker Box", + ContactName: "Liu Wong", + ContactTitle: "Marketing Assistant", + Address: "55 Grizzly Peak Rd.", + City: "Butte", + Region: "MT", + PostalCode: "59801", + Country: "USA", + Phone: "(406) 555-5834", + Fax: "(406) 555-8083", + Orders: [ + { + OrderID: 10775, + EmployeeID: 7, + OrderDate: new Date("1997-12-12T00:00:00"), + RequiredDate: new Date("1998-01-09T00:00:00"), + ShippedDate: new Date("1997-12-26T00:00:00"), + ShipVia: 1, + Freight: 20.2500, + ShipName: "The Cracker Box", + ShipAddress: "55 Grizzly Peak Rd.", + ShipCity: "Butte", + ShipRegion: "MT", + ShipPostalCode: "59801", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10776, + EmployeeID: 1, + OrderDate: new Date("1997-12-15T00:00:00"), + RequiredDate: new Date("1998-01-12T00:00:00"), + ShippedDate: new Date("1997-12-18T00:00:00"), + ShipVia: 3, + Freight: 351.5300, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 16, + Discount: 5.0000001e-002 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 27, + Discount: 5.0000001e-002 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 120, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10777, + EmployeeID: 7, + OrderDate: new Date("1997-12-15T00:00:00"), + RequiredDate: new Date("1997-12-29T00:00:00"), + ShippedDate: new Date("1998-01-21T00:00:00"), + ShipVia: 2, + Freight: 3.0100, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10778, + EmployeeID: 3, + OrderDate: new Date("1997-12-16T00:00:00"), + RequiredDate: new Date("1998-01-13T00:00:00"), + ShippedDate: new Date("1997-12-24T00:00:00"), + ShipVia: 1, + Freight: 6.7900, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MORGK", + CompanyName: "Morgenstern Gesundkost", + ContactName: "Alexander Feuer", + ContactTitle: "Marketing Assistant", + Address: "Heerstr. 22", + City: "Leipzig", + PostalCode: "04179", + Country: "Germany", + Phone: "0342-023176", + Orders: [ + { + OrderID: 10779, + EmployeeID: 3, + OrderDate: new Date("1997-12-16T00:00:00"), + RequiredDate: new Date("1998-01-13T00:00:00"), + ShippedDate: new Date("1998-01-14T00:00:00"), + ShipVia: 2, + Freight: 58.1300, + ShipName: "Morgenstern Gesundkost", + ShipAddress: "Heerstr. 22", + ShipCity: "Leipzig", + ShipPostalCode: "04179", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10780, + EmployeeID: 2, + OrderDate: new Date("1997-12-16T00:00:00"), + RequiredDate: new Date("1997-12-30T00:00:00"), + ShippedDate: new Date("1997-12-25T00:00:00"), + ShipVia: 1, + Freight: 42.1300, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 10781, + EmployeeID: 2, + OrderDate: new Date("1997-12-17T00:00:00"), + RequiredDate: new Date("1998-01-14T00:00:00"), + ShippedDate: new Date("1997-12-19T00:00:00"), + ShipVia: 3, + Freight: 73.1600, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 3, + Discount: 2.0000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 74, + UnitPrice: 10.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 10782, + EmployeeID: 9, + OrderDate: new Date("1997-12-17T00:00:00"), + RequiredDate: new Date("1998-01-14T00:00:00"), + ShippedDate: new Date("1997-12-22T00:00:00"), + ShipVia: 3, + Freight: 1.1000, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 1, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10783, + EmployeeID: 4, + OrderDate: new Date("1997-12-18T00:00:00"), + RequiredDate: new Date("1998-01-15T00:00:00"), + ShippedDate: new Date("1997-12-19T00:00:00"), + ShipVia: 2, + Freight: 124.9800, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10784, + EmployeeID: 4, + OrderDate: new Date("1997-12-18T00:00:00"), + RequiredDate: new Date("1998-01-15T00:00:00"), + ShippedDate: new Date("1997-12-22T00:00:00"), + ShipVia: 3, + Freight: 70.0900, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 2, + Discount: 1.5000001e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 30, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "GROSR", + CompanyName: "GROSELLA-Restaurante", + ContactName: "Manuel Pereira", + ContactTitle: "Owner", + Address: "5ª Ave. Los Palos Grandes", + City: "Caracas", + Region: "DF", + PostalCode: "1081", + Country: "Venezuela", + Phone: "(2) 283-2951", + Fax: "(2) 283-3397", + Orders: [ + { + OrderID: 10785, + EmployeeID: 1, + OrderDate: new Date("1997-12-18T00:00:00"), + RequiredDate: new Date("1998-01-15T00:00:00"), + ShippedDate: new Date("1997-12-24T00:00:00"), + ShipVia: 3, + Freight: 1.5100, + ShipName: "GROSELLA-Restaurante", + ShipAddress: "5ª Ave. Los Palos Grandes", + ShipCity: "Caracas", + ShipRegion: "DF", + ShipPostalCode: "1081", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10786, + EmployeeID: 8, + OrderDate: new Date("1997-12-19T00:00:00"), + RequiredDate: new Date("1998-01-16T00:00:00"), + ShippedDate: new Date("1997-12-23T00:00:00"), + ShipVia: 1, + Freight: 110.8700, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 2.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 42, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10787, + EmployeeID: 2, + OrderDate: new Date("1997-12-19T00:00:00"), + RequiredDate: new Date("1998-01-02T00:00:00"), + ShippedDate: new Date("1997-12-26T00:00:00"), + ShipVia: 1, + Freight: 249.9300, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10788, + EmployeeID: 1, + OrderDate: new Date("1997-12-22T00:00:00"), + RequiredDate: new Date("1998-01-19T00:00:00"), + ShippedDate: new Date("1998-01-19T00:00:00"), + ShipVia: 2, + Freight: 42.7000, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 40, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "FOLIG", + CompanyName: "Folies gourmandes", + ContactName: "Martine Rancé", + ContactTitle: "Assistant Sales Agent", + Address: "184, chaussée de Tournai", + City: "Lille", + PostalCode: "59000", + Country: "France", + Phone: "20.16.10.16", + Fax: "20.16.10.17", + Orders: [ + { + OrderID: 10789, + EmployeeID: 1, + OrderDate: new Date("1997-12-22T00:00:00"), + RequiredDate: new Date("1998-01-19T00:00:00"), + ShippedDate: new Date("1997-12-31T00:00:00"), + ShipVia: 2, + Freight: 100.6000, + ShipName: "Folies gourmandes", + ShipAddress: "184, chaussée de Tournai", + ShipCity: "Lille", + ShipPostalCode: "59000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10790, + EmployeeID: 6, + OrderDate: new Date("1997-12-22T00:00:00"), + RequiredDate: new Date("1998-01-19T00:00:00"), + ShippedDate: new Date("1997-12-26T00:00:00"), + ShipVia: 1, + Freight: 28.2300, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 3, + Discount: 1.5000001e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10791, + EmployeeID: 6, + OrderDate: new Date("1997-12-23T00:00:00"), + RequiredDate: new Date("1998-01-20T00:00:00"), + ShippedDate: new Date("1998-01-01T00:00:00"), + ShipVia: 2, + Freight: 16.8500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 14, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10792, + EmployeeID: 1, + OrderDate: new Date("1997-12-23T00:00:00"), + RequiredDate: new Date("1998-01-20T00:00:00"), + ShippedDate: new Date("1997-12-31T00:00:00"), + ShipVia: 3, + Freight: 23.7900, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10793, + EmployeeID: 3, + OrderDate: new Date("1997-12-24T00:00:00"), + RequiredDate: new Date("1998-01-21T00:00:00"), + ShippedDate: new Date("1998-01-08T00:00:00"), + ShipVia: 3, + Freight: 4.5200, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10794, + EmployeeID: 6, + OrderDate: new Date("1997-12-24T00:00:00"), + RequiredDate: new Date("1998-01-21T00:00:00"), + ShippedDate: new Date("1998-01-02T00:00:00"), + ShipVia: 1, + Freight: 21.4900, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 15, + Discount: 2.0000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 6, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10795, + EmployeeID: 8, + OrderDate: new Date("1997-12-24T00:00:00"), + RequiredDate: new Date("1998-01-21T00:00:00"), + ShippedDate: new Date("1998-01-20T00:00:00"), + ShipVia: 2, + Freight: 126.6600, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 65, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10796, + EmployeeID: 3, + OrderDate: new Date("1997-12-25T00:00:00"), + RequiredDate: new Date("1998-01-22T00:00:00"), + ShippedDate: new Date("1998-01-14T00:00:00"), + ShipVia: 1, + Freight: 26.5200, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 21, + Discount: 2.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 24, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 10797, + EmployeeID: 7, + OrderDate: new Date("1997-12-25T00:00:00"), + RequiredDate: new Date("1998-01-22T00:00:00"), + ShippedDate: new Date("1998-01-05T00:00:00"), + ShipVia: 2, + Freight: 33.3500, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10798, + EmployeeID: 2, + OrderDate: new Date("1997-12-26T00:00:00"), + RequiredDate: new Date("1998-01-23T00:00:00"), + ShippedDate: new Date("1998-01-05T00:00:00"), + ShipVia: 1, + Freight: 2.3300, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10799, + EmployeeID: 9, + OrderDate: new Date("1997-12-26T00:00:00"), + RequiredDate: new Date("1998-02-06T00:00:00"), + ShippedDate: new Date("1998-01-05T00:00:00"), + ShipVia: 3, + Freight: 30.7600, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10800, + EmployeeID: 1, + OrderDate: new Date("1997-12-26T00:00:00"), + RequiredDate: new Date("1998-01-23T00:00:00"), + ShippedDate: new Date("1998-01-05T00:00:00"), + ShipVia: 3, + Freight: 137.4400, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 50, + Discount: 1.0000000e-001 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 7, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BOLID", + CompanyName: "Bólido Comidas preparadas", + ContactName: "Martín Sommer", + ContactTitle: "Owner", + Address: "C\/ Araquil, 67", + City: "Madrid", + PostalCode: "28023", + Country: "Spain", + Phone: "(91) 555 22 82", + Fax: "(91) 555 91 99", + Orders: [ + { + OrderID: 10801, + EmployeeID: 4, + OrderDate: new Date("1997-12-29T00:00:00"), + RequiredDate: new Date("1998-01-26T00:00:00"), + ShippedDate: new Date("1997-12-31T00:00:00"), + ShipVia: 2, + Freight: 97.0900, + ShipName: "Bólido Comidas preparadas", + ShipAddress: "C\/ Araquil, 67", + ShipCity: "Madrid", + ShipPostalCode: "28023", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 10802, + EmployeeID: 4, + OrderDate: new Date("1997-12-29T00:00:00"), + RequiredDate: new Date("1998-01-26T00:00:00"), + ShippedDate: new Date("1998-01-02T00:00:00"), + ShipVia: 2, + Freight: 257.2600, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 25, + Discount: 2.5000000e-001 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 60, + Discount: 2.5000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 5, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10803, + EmployeeID: 4, + OrderDate: new Date("1997-12-30T00:00:00"), + RequiredDate: new Date("1998-01-27T00:00:00"), + ShippedDate: new Date("1998-01-06T00:00:00"), + ShipVia: 1, + Freight: 55.2300, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 24, + Discount: 5.0000001e-002 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 15, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10804, + EmployeeID: 6, + OrderDate: new Date("1997-12-30T00:00:00"), + RequiredDate: new Date("1998-01-27T00:00:00"), + ShippedDate: new Date("1998-01-07T00:00:00"), + ShipVia: 2, + Freight: 27.3300, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 4, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "THEBI", + CompanyName: "The Big Cheese", + ContactName: "Liz Nixon", + ContactTitle: "Marketing Manager", + Address: "89 Jefferson Way Suite 2", + City: "Portland", + Region: "OR", + PostalCode: "97201", + Country: "USA", + Phone: "(503) 555-3612", + Orders: [ + { + OrderID: 10805, + EmployeeID: 2, + OrderDate: new Date("1997-12-30T00:00:00"), + RequiredDate: new Date("1998-01-27T00:00:00"), + ShippedDate: new Date("1998-01-09T00:00:00"), + ShipVia: 3, + Freight: 237.3400, + ShipName: "The Big Cheese", + ShipAddress: "89 Jefferson Way Suite 2", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97201", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10806, + EmployeeID: 3, + OrderDate: new Date("1997-12-31T00:00:00"), + RequiredDate: new Date("1998-01-28T00:00:00"), + ShippedDate: new Date("1998-01-05T00:00:00"), + ShipVia: 2, + Freight: 22.1100, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 10.0000, + Quantity: 15, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 10807, + EmployeeID: 4, + OrderDate: new Date("1997-12-31T00:00:00"), + RequiredDate: new Date("1998-01-28T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 1, + Freight: 1.3600, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 1, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10808, + EmployeeID: 2, + OrderDate: new Date("1998-01-01T00:00:00"), + RequiredDate: new Date("1998-01-29T00:00:00"), + ShippedDate: new Date("1998-01-09T00:00:00"), + ShipVia: 3, + Freight: 45.5300, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 50, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10809, + EmployeeID: 7, + OrderDate: new Date("1998-01-01T00:00:00"), + RequiredDate: new Date("1998-01-29T00:00:00"), + ShippedDate: new Date("1998-01-07T00:00:00"), + ShipVia: 1, + Freight: 4.8700, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAUGB", + CompanyName: "Laughing Bacchus Wine Cellars", + ContactName: "Yoshi Tannamuri", + ContactTitle: "Marketing Assistant", + Address: "1900 Oak St.", + City: "Vancouver", + Region: "BC", + PostalCode: "V3F 2K1", + Country: "Canada", + Phone: "(604) 555-3392", + Fax: "(604) 555-7293", + Orders: [ + { + OrderID: 10810, + EmployeeID: 2, + OrderDate: new Date("1998-01-01T00:00:00"), + RequiredDate: new Date("1998-01-29T00:00:00"), + ShippedDate: new Date("1998-01-07T00:00:00"), + ShipVia: 3, + Freight: 4.3300, + ShipName: "Laughing Bacchus Wine Cellars", + ShipAddress: "2319 Elm St.", + ShipCity: "Vancouver", + ShipRegion: "BC", + ShipPostalCode: "V3F 2K1", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10811, + EmployeeID: 8, + OrderDate: new Date("1998-01-02T00:00:00"), + RequiredDate: new Date("1998-01-30T00:00:00"), + ShippedDate: new Date("1998-01-08T00:00:00"), + ShipVia: 1, + Freight: 31.2200, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10812, + EmployeeID: 5, + OrderDate: new Date("1998-01-02T00:00:00"), + RequiredDate: new Date("1998-01-30T00:00:00"), + ShippedDate: new Date("1998-01-12T00:00:00"), + ShipVia: 1, + Freight: 59.7800, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 16, + Discount: 1.0000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10813, + EmployeeID: 1, + OrderDate: new Date("1998-01-05T00:00:00"), + RequiredDate: new Date("1998-02-02T00:00:00"), + ShippedDate: new Date("1998-01-09T00:00:00"), + ShipVia: 1, + Freight: 47.3800, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 12, + Discount: 2.0000000e-001 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10814, + EmployeeID: 3, + OrderDate: new Date("1998-01-05T00:00:00"), + RequiredDate: new Date("1998-02-02T00:00:00"), + ShippedDate: new Date("1998-01-14T00:00:00"), + ShipVia: 3, + Freight: 130.9400, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 48, + UnitPrice: 12.7500, + Quantity: 8, + Discount: 1.5000001e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 30, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10815, + EmployeeID: 2, + OrderDate: new Date("1998-01-05T00:00:00"), + RequiredDate: new Date("1998-02-02T00:00:00"), + ShippedDate: new Date("1998-01-14T00:00:00"), + ShipVia: 3, + Freight: 14.6200, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10816, + EmployeeID: 4, + OrderDate: new Date("1998-01-06T00:00:00"), + RequiredDate: new Date("1998-02-03T00:00:00"), + ShippedDate: new Date("1998-02-04T00:00:00"), + ShipVia: 2, + Freight: 719.7800, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 30, + Discount: 5.0000001e-002 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10817, + EmployeeID: 3, + OrderDate: new Date("1998-01-06T00:00:00"), + RequiredDate: new Date("1998-01-20T00:00:00"), + ShippedDate: new Date("1998-01-13T00:00:00"), + ShipVia: 2, + Freight: 306.0700, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 60, + Discount: 1.5000001e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 25, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10818, + EmployeeID: 7, + OrderDate: new Date("1998-01-07T00:00:00"), + RequiredDate: new Date("1998-02-04T00:00:00"), + ShippedDate: new Date("1998-01-12T00:00:00"), + ShipVia: 3, + Freight: 65.4800, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 10819, + EmployeeID: 2, + OrderDate: new Date("1998-01-07T00:00:00"), + RequiredDate: new Date("1998-02-04T00:00:00"), + ShippedDate: new Date("1998-01-16T00:00:00"), + ShipVia: 3, + Freight: 19.7600, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10820, + EmployeeID: 3, + OrderDate: new Date("1998-01-07T00:00:00"), + RequiredDate: new Date("1998-02-04T00:00:00"), + ShippedDate: new Date("1998-01-13T00:00:00"), + ShipVia: 2, + Freight: 37.5200, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10821, + EmployeeID: 1, + OrderDate: new Date("1998-01-08T00:00:00"), + RequiredDate: new Date("1998-02-05T00:00:00"), + ShippedDate: new Date("1998-01-15T00:00:00"), + ShipVia: 1, + Freight: 36.6800, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TRAIH", + CompanyName: "Trail's Head Gourmet Provisioners", + ContactName: "Helvetius Nagy", + ContactTitle: "Sales Associate", + Address: "722 DaVinci Blvd.", + City: "Kirkland", + Region: "WA", + PostalCode: "98034", + Country: "USA", + Phone: "(206) 555-8257", + Fax: "(206) 555-2174", + Orders: [ + { + OrderID: 10822, + EmployeeID: 6, + OrderDate: new Date("1998-01-08T00:00:00"), + RequiredDate: new Date("1998-02-05T00:00:00"), + ShippedDate: new Date("1998-01-16T00:00:00"), + ShipVia: 3, + Freight: 7.0000, + ShipName: "Trail's Head Gourmet Provisioners", + ShipAddress: "722 DaVinci Blvd.", + ShipCity: "Kirkland", + ShipRegion: "WA", + ShipPostalCode: "98034", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10823, + EmployeeID: 5, + OrderDate: new Date("1998-01-09T00:00:00"), + RequiredDate: new Date("1998-02-06T00:00:00"), + ShippedDate: new Date("1998-01-13T00:00:00"), + ShipVia: 2, + Freight: 163.9700, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10824, + EmployeeID: 8, + OrderDate: new Date("1998-01-09T00:00:00"), + RequiredDate: new Date("1998-02-06T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 1, + Freight: 1.2300, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 10825, + EmployeeID: 1, + OrderDate: new Date("1998-01-09T00:00:00"), + RequiredDate: new Date("1998-02-06T00:00:00"), + ShippedDate: new Date("1998-01-14T00:00:00"), + ShipVia: 1, + Freight: 79.2500, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLONP", + CompanyName: "Blondesddsl père et fils", + ContactName: "Frédérique Citeaux", + ContactTitle: "Marketing Manager", + Address: "24, place Kléber", + City: "Strasbourg", + PostalCode: "67000", + Country: "France", + Phone: "88.60.15.31", + Fax: "88.60.15.32", + Orders: [ + { + OrderID: 10826, + EmployeeID: 6, + OrderDate: new Date("1998-01-12T00:00:00"), + RequiredDate: new Date("1998-02-09T00:00:00"), + ShippedDate: new Date("1998-02-06T00:00:00"), + ShipVia: 1, + Freight: 7.0900, + ShipName: "Blondel père et fils", + ShipAddress: "24, place Kléber", + ShipCity: "Strasbourg", + ShipPostalCode: "67000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10827, + EmployeeID: 1, + OrderDate: new Date("1998-01-12T00:00:00"), + RequiredDate: new Date("1998-01-26T00:00:00"), + ShippedDate: new Date("1998-02-06T00:00:00"), + ShipVia: 2, + Freight: 63.5400, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RANCH", + CompanyName: "Rancho grande", + ContactName: "Sergio Gutiérrez", + ContactTitle: "Sales Representative", + Address: "Av. del Libertador 900", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 123-5555", + Fax: "(1) 123-5556", + Orders: [ + { + OrderID: 10828, + EmployeeID: 9, + OrderDate: new Date("1998-01-13T00:00:00"), + RequiredDate: new Date("1998-01-27T00:00:00"), + ShippedDate: new Date("1998-02-04T00:00:00"), + ShipVia: 1, + Freight: 90.8500, + ShipName: "Rancho grande", + ShipAddress: "Av. del Libertador 900", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10829, + EmployeeID: 9, + OrderDate: new Date("1998-01-13T00:00:00"), + RequiredDate: new Date("1998-02-10T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 1, + Freight: 154.7200, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10830, + EmployeeID: 4, + OrderDate: new Date("1998-01-13T00:00:00"), + RequiredDate: new Date("1998-02-24T00:00:00"), + ShippedDate: new Date("1998-01-21T00:00:00"), + ShipVia: 2, + Freight: 81.8300, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 28, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 10831, + EmployeeID: 3, + OrderDate: new Date("1998-01-14T00:00:00"), + RequiredDate: new Date("1998-02-11T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 2, + Freight: 72.1900, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10832, + EmployeeID: 2, + OrderDate: new Date("1998-01-14T00:00:00"), + RequiredDate: new Date("1998-02-11T00:00:00"), + ShippedDate: new Date("1998-01-19T00:00:00"), + ShipVia: 2, + Freight: 43.2600, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 3, + Discount: 2.0000000e-001 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 16, + Discount: 2.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10833, + EmployeeID: 6, + OrderDate: new Date("1998-01-15T00:00:00"), + RequiredDate: new Date("1998-02-12T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 2, + Freight: 71.4900, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 9, + Discount: 1.0000000e-001 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 9, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10834, + EmployeeID: 1, + OrderDate: new Date("1998-01-15T00:00:00"), + RequiredDate: new Date("1998-02-12T00:00:00"), + ShippedDate: new Date("1998-01-19T00:00:00"), + ShipVia: 3, + Freight: 29.7800, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 8, + Discount: 5.0000001e-002 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 10835, + EmployeeID: 1, + OrderDate: new Date("1998-01-15T00:00:00"), + RequiredDate: new Date("1998-02-12T00:00:00"), + ShippedDate: new Date("1998-01-21T00:00:00"), + ShipVia: 3, + Freight: 69.5300, + ShipName: "Alfred's Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 2, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10836, + EmployeeID: 7, + OrderDate: new Date("1998-01-16T00:00:00"), + RequiredDate: new Date("1998-02-13T00:00:00"), + ShippedDate: new Date("1998-01-21T00:00:00"), + ShipVia: 1, + Freight: 411.8800, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 52, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10837, + EmployeeID: 9, + OrderDate: new Date("1998-01-16T00:00:00"), + RequiredDate: new Date("1998-02-13T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 3, + Freight: 13.3200, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 21, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10838, + EmployeeID: 3, + OrderDate: new Date("1998-01-19T00:00:00"), + RequiredDate: new Date("1998-02-16T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 3, + Freight: 59.2800, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 4, + Discount: 2.5000000e-001 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 25, + Discount: 2.5000000e-001 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 50, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "TRADH", + CompanyName: "Tradição Hipermercados", + ContactName: "Anabela Domingues", + ContactTitle: "Sales Representative", + Address: "Av. Inês de Castro, 414", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05634-030", + Country: "Brazil", + Phone: "(11) 555-2167", + Fax: "(11) 555-2168", + Orders: [ + { + OrderID: 10839, + EmployeeID: 3, + OrderDate: new Date("1998-01-19T00:00:00"), + RequiredDate: new Date("1998-02-16T00:00:00"), + ShippedDate: new Date("1998-01-22T00:00:00"), + ShipVia: 3, + Freight: 35.4300, + ShipName: "Tradiçao Hipermercados", + ShipAddress: "Av. Inês de Castro, 414", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05634-030", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 15, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10840, + EmployeeID: 4, + OrderDate: new Date("1998-01-19T00:00:00"), + RequiredDate: new Date("1998-03-02T00:00:00"), + ShippedDate: new Date("1998-02-16T00:00:00"), + ShipVia: 2, + Freight: 2.7100, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 6, + Discount: 2.0000000e-001 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10841, + EmployeeID: 5, + OrderDate: new Date("1998-01-20T00:00:00"), + RequiredDate: new Date("1998-02-17T00:00:00"), + ShippedDate: new Date("1998-01-29T00:00:00"), + ShipVia: 2, + Freight: 424.3000, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10842, + EmployeeID: 1, + OrderDate: new Date("1998-01-20T00:00:00"), + RequiredDate: new Date("1998-02-17T00:00:00"), + ShippedDate: new Date("1998-01-29T00:00:00"), + ShipVia: 3, + Freight: 54.4200, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10843, + EmployeeID: 4, + OrderDate: new Date("1998-01-21T00:00:00"), + RequiredDate: new Date("1998-02-18T00:00:00"), + ShippedDate: new Date("1998-01-26T00:00:00"), + ShipVia: 2, + Freight: 9.2600, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 4, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 10844, + EmployeeID: 8, + OrderDate: new Date("1998-01-21T00:00:00"), + RequiredDate: new Date("1998-02-18T00:00:00"), + ShippedDate: new Date("1998-01-26T00:00:00"), + ShipVia: 2, + Freight: 25.2200, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10845, + EmployeeID: 8, + OrderDate: new Date("1998-01-21T00:00:00"), + RequiredDate: new Date("1998-02-04T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 1, + Freight: 212.9800, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 70, + Discount: 1.0000000e-001 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 42, + Discount: 1.0000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 60, + Discount: 1.0000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 48, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10846, + EmployeeID: 2, + OrderDate: new Date("1998-01-22T00:00:00"), + RequiredDate: new Date("1998-03-05T00:00:00"), + ShippedDate: new Date("1998-01-23T00:00:00"), + ShipVia: 3, + Freight: 56.4600, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10847, + EmployeeID: 4, + OrderDate: new Date("1998-01-22T00:00:00"), + RequiredDate: new Date("1998-02-05T00:00:00"), + ShippedDate: new Date("1998-02-10T00:00:00"), + ShipVia: 3, + Freight: 487.5700, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 80, + Discount: 2.0000000e-001 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 12, + Discount: 2.0000000e-001 + }, { + ProductID: 37, + UnitPrice: 26.0000, + Quantity: 60, + Discount: 2.0000000e-001 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 36, + Discount: 2.0000000e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 45, + Discount: 2.0000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 55, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "CONSH", + CompanyName: "Consolidated Holdings", + ContactName: "Elizabeth Brown", + ContactTitle: "Sales Representative", + Address: "Berkeley Gardens 12 Brewery", + City: "London", + PostalCode: "WX1 6LT", + Country: "UK", + Phone: "(171) 555-2282", + Fax: "(171) 555-9199", + Orders: [ + { + OrderID: 10848, + EmployeeID: 7, + OrderDate: new Date("1998-01-23T00:00:00"), + RequiredDate: new Date("1998-02-20T00:00:00"), + ShippedDate: new Date("1998-01-29T00:00:00"), + ShipVia: 2, + Freight: 38.2400, + ShipName: "Consolidated Holdings", + ShipAddress: "Berkeley Gardens 12 Brewery", + ShipCity: "London", + ShipPostalCode: "WX1 6LT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 9, + UnitPrice: 97.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10849, + EmployeeID: 9, + OrderDate: new Date("1998-01-23T00:00:00"), + RequiredDate: new Date("1998-02-20T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 2, + Freight: 0.5600, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 49, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 18, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "VICTE", + CompanyName: "Victuailles en stock", + ContactName: "Mary Saveley", + ContactTitle: "Sales Agent", + Address: "2, rue du Commerce", + City: "Lyon", + PostalCode: "69004", + Country: "France", + Phone: "78.32.54.86", + Fax: "78.32.54.87", + Orders: [ + { + OrderID: 10850, + EmployeeID: 1, + OrderDate: new Date("1998-01-23T00:00:00"), + RequiredDate: new Date("1998-03-06T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 1, + Freight: 49.1900, + ShipName: "Victuailles en stock", + ShipAddress: "2, rue du Commerce", + ShipCity: "Lyon", + ShipPostalCode: "69004", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 4, + Discount: 1.5000001e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10851, + EmployeeID: 5, + OrderDate: new Date("1998-01-26T00:00:00"), + RequiredDate: new Date("1998-02-23T00:00:00"), + ShippedDate: new Date("1998-02-02T00:00:00"), + ShipVia: 1, + Freight: 160.5500, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 5, + Discount: 5.0000001e-002 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 42, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10852, + EmployeeID: 8, + OrderDate: new Date("1998-01-26T00:00:00"), + RequiredDate: new Date("1998-02-09T00:00:00"), + ShippedDate: new Date("1998-01-30T00:00:00"), + ShipVia: 1, + Freight: 174.0500, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10853, + EmployeeID: 9, + OrderDate: new Date("1998-01-27T00:00:00"), + RequiredDate: new Date("1998-02-24T00:00:00"), + ShippedDate: new Date("1998-02-03T00:00:00"), + ShipVia: 2, + Freight: 53.8300, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10854, + EmployeeID: 3, + OrderDate: new Date("1998-01-27T00:00:00"), + RequiredDate: new Date("1998-02-24T00:00:00"), + ShippedDate: new Date("1998-02-05T00:00:00"), + ShipVia: 2, + Freight: 100.2200, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 100, + Discount: 1.5000001e-001 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 65, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10855, + EmployeeID: 3, + OrderDate: new Date("1998-01-27T00:00:00"), + RequiredDate: new Date("1998-02-24T00:00:00"), + ShippedDate: new Date("1998-02-04T00:00:00"), + ShipVia: 1, + Freight: 170.9700, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 15, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "ANTON", + CompanyName: "Antonio Moreno Taquería", + ContactName: "Antonio Moreno", + ContactTitle: "Owner", + Address: "Mataderos 2312", + City: "México D.F.", + PostalCode: "05023", + Country: "Mexico", + Phone: "(5) 555-3932", + Orders: [ + { + OrderID: 10856, + EmployeeID: 3, + OrderDate: new Date("1998-01-28T00:00:00"), + RequiredDate: new Date("1998-02-25T00:00:00"), + ShippedDate: new Date("1998-02-10T00:00:00"), + ShipVia: 2, + Freight: 58.4300, + ShipName: "Antonio Moreno Taquería", + ShipAddress: "Mataderos 2312", + ShipCity: "México D.F.", + ShipPostalCode: "05023", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10857, + EmployeeID: 8, + OrderDate: new Date("1998-01-28T00:00:00"), + RequiredDate: new Date("1998-02-25T00:00:00"), + ShippedDate: new Date("1998-02-06T00:00:00"), + ShipVia: 2, + Freight: 188.8500, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 35, + Discount: 2.5000000e-001 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 10, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "LACOR", + CompanyName: "La corne d'abondance", + ContactName: "Daniel Tonini", + ContactTitle: "Sales Representative", + Address: "67, avenue de l'Europe", + City: "Versailles", + PostalCode: "78000", + Country: "France", + Phone: "30.59.84.10", + Fax: "30.59.85.11", + Orders: [ + { + OrderID: 10858, + EmployeeID: 2, + OrderDate: new Date("1998-01-29T00:00:00"), + RequiredDate: new Date("1998-02-26T00:00:00"), + ShippedDate: new Date("1998-02-03T00:00:00"), + ShipVia: 1, + Freight: 52.5100, + ShipName: "La corne d'abondance", + ShipAddress: "67, avenue de l'Europe", + ShipCity: "Versailles", + ShipPostalCode: "78000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10859, + EmployeeID: 1, + OrderDate: new Date("1998-01-29T00:00:00"), + RequiredDate: new Date("1998-02-26T00:00:00"), + ShippedDate: new Date("1998-02-02T00:00:00"), + ShipVia: 2, + Freight: 76.1000, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 35, + Discount: 2.5000000e-001 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANR", + CompanyName: "France restauration", + ContactName: "Carine Schmitt", + ContactTitle: "Marketing Manager", + Address: "54, rue Royale", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.32.21.21", + Fax: "40.32.21.20", + Orders: [ + { + OrderID: 10860, + EmployeeID: 3, + OrderDate: new Date("1998-01-29T00:00:00"), + RequiredDate: new Date("1998-02-26T00:00:00"), + ShippedDate: new Date("1998-02-04T00:00:00"), + ShipVia: 3, + Freight: 19.2600, + ShipName: "France restauration", + ShipAddress: "54, rue Royale", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10861, + EmployeeID: 4, + OrderDate: new Date("1998-01-30T00:00:00"), + RequiredDate: new Date("1998-02-27T00:00:00"), + ShippedDate: new Date("1998-02-17T00:00:00"), + ShipVia: 2, + Freight: 14.9300, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10862, + EmployeeID: 8, + OrderDate: new Date("1998-01-30T00:00:00"), + RequiredDate: new Date("1998-03-13T00:00:00"), + ShippedDate: new Date("1998-02-02T00:00:00"), + ShipVia: 2, + Freight: 53.2300, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10863, + EmployeeID: 4, + OrderDate: new Date("1998-02-02T00:00:00"), + RequiredDate: new Date("1998-03-02T00:00:00"), + ShippedDate: new Date("1998-02-17T00:00:00"), + ShipVia: 2, + Freight: 30.2600, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 12, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10864, + EmployeeID: 4, + OrderDate: new Date("1998-02-02T00:00:00"), + RequiredDate: new Date("1998-03-02T00:00:00"), + ShippedDate: new Date("1998-02-09T00:00:00"), + ShipVia: 2, + Freight: 3.0400, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10865, + EmployeeID: 2, + OrderDate: new Date("1998-02-02T00:00:00"), + RequiredDate: new Date("1998-02-16T00:00:00"), + ShippedDate: new Date("1998-02-12T00:00:00"), + ShipVia: 1, + Freight: 348.1400, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 60, + Discount: 5.0000001e-002 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 80, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10866, + EmployeeID: 5, + OrderDate: new Date("1998-02-03T00:00:00"), + RequiredDate: new Date("1998-03-03T00:00:00"), + ShippedDate: new Date("1998-02-12T00:00:00"), + ShipVia: 1, + Freight: 109.1100, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 21, + Discount: 2.5000000e-001 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 6, + Discount: 2.5000000e-001 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 40, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10867, + EmployeeID: 6, + OrderDate: new Date("1998-02-03T00:00:00"), + RequiredDate: new Date("1998-03-17T00:00:00"), + ShippedDate: new Date("1998-02-11T00:00:00"), + ShipVia: 1, + Freight: 1.9300, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10868, + EmployeeID: 7, + OrderDate: new Date("1998-02-04T00:00:00"), + RequiredDate: new Date("1998-03-04T00:00:00"), + ShippedDate: new Date("1998-02-23T00:00:00"), + ShipVia: 2, + Freight: 191.2700, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 42, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SEVES", + CompanyName: "Seven Seas Imports", + ContactName: "Hari Kumar", + ContactTitle: "Sales Manager", + Address: "90 Wadhurst Rd.", + City: "London", + PostalCode: "OX15 4NB", + Country: "UK", + Phone: "(171) 555-1717", + Fax: "(171) 555-5646", + Orders: [ + { + OrderID: 10869, + EmployeeID: 5, + OrderDate: new Date("1998-02-04T00:00:00"), + RequiredDate: new Date("1998-03-04T00:00:00"), + ShippedDate: new Date("1998-02-09T00:00:00"), + ShipVia: 1, + Freight: 143.2800, + ShipName: "Seven Seas Imports", + ShipAddress: "90 Wadhurst Rd.", + ShipCity: "London", + ShipPostalCode: "OX15 4NB", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10870, + EmployeeID: 5, + OrderDate: new Date("1998-02-04T00:00:00"), + RequiredDate: new Date("1998-03-04T00:00:00"), + ShippedDate: new Date("1998-02-13T00:00:00"), + ShipVia: 3, + Freight: 12.0400, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10871, + EmployeeID: 9, + OrderDate: new Date("1998-02-05T00:00:00"), + RequiredDate: new Date("1998-03-05T00:00:00"), + ShippedDate: new Date("1998-02-10T00:00:00"), + ShipVia: 2, + Freight: 112.2700, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 12, + Discount: 5.0000001e-002 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 16, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10872, + EmployeeID: 5, + OrderDate: new Date("1998-02-05T00:00:00"), + RequiredDate: new Date("1998-03-05T00:00:00"), + ShippedDate: new Date("1998-02-09T00:00:00"), + ShipVia: 2, + Freight: 175.3200, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 10, + Discount: 5.0000001e-002 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 21, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10873, + EmployeeID: 4, + OrderDate: new Date("1998-02-06T00:00:00"), + RequiredDate: new Date("1998-03-06T00:00:00"), + ShippedDate: new Date("1998-02-09T00:00:00"), + ShipVia: 1, + Freight: 0.8200, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10874, + EmployeeID: 5, + OrderDate: new Date("1998-02-06T00:00:00"), + RequiredDate: new Date("1998-03-06T00:00:00"), + ShippedDate: new Date("1998-02-11T00:00:00"), + ShipVia: 2, + Freight: 19.5800, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10875, + EmployeeID: 4, + OrderDate: new Date("1998-02-06T00:00:00"), + RequiredDate: new Date("1998-03-06T00:00:00"), + ShippedDate: new Date("1998-03-03T00:00:00"), + ShipVia: 2, + Freight: 32.3700, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 21, + Discount: 1.0000000e-001 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10876, + EmployeeID: 7, + OrderDate: new Date("1998-02-09T00:00:00"), + RequiredDate: new Date("1998-03-09T00:00:00"), + ShippedDate: new Date("1998-02-12T00:00:00"), + ShipVia: 3, + Freight: 60.4200, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 10877, + EmployeeID: 1, + OrderDate: new Date("1998-02-09T00:00:00"), + RequiredDate: new Date("1998-03-09T00:00:00"), + ShippedDate: new Date("1998-02-19T00:00:00"), + ShipVia: 1, + Freight: 38.0600, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10878, + EmployeeID: 4, + OrderDate: new Date("1998-02-10T00:00:00"), + RequiredDate: new Date("1998-03-10T00:00:00"), + ShippedDate: new Date("1998-02-12T00:00:00"), + ShipVia: 1, + Freight: 46.6900, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10879, + EmployeeID: 3, + OrderDate: new Date("1998-02-10T00:00:00"), + RequiredDate: new Date("1998-03-10T00:00:00"), + ShippedDate: new Date("1998-02-12T00:00:00"), + ShipVia: 3, + Freight: 8.5000, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10880, + EmployeeID: 7, + OrderDate: new Date("1998-02-10T00:00:00"), + RequiredDate: new Date("1998-03-24T00:00:00"), + ShippedDate: new Date("1998-02-18T00:00:00"), + ShipVia: 1, + Freight: 88.0100, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 50, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 10881, + EmployeeID: 4, + OrderDate: new Date("1998-02-11T00:00:00"), + RequiredDate: new Date("1998-03-11T00:00:00"), + ShippedDate: new Date("1998-02-18T00:00:00"), + ShipVia: 1, + Freight: 2.8400, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10882, + EmployeeID: 4, + OrderDate: new Date("1998-02-11T00:00:00"), + RequiredDate: new Date("1998-03-11T00:00:00"), + ShippedDate: new Date("1998-02-20T00:00:00"), + ShipVia: 3, + Freight: 23.1000, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 32, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 10883, + EmployeeID: 8, + OrderDate: new Date("1998-02-12T00:00:00"), + RequiredDate: new Date("1998-03-12T00:00:00"), + ShippedDate: new Date("1998-02-20T00:00:00"), + ShipVia: 3, + Freight: 0.5300, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LETSS", + CompanyName: "Let's Stop N Shop", + ContactName: "Jaime Yorres", + ContactTitle: "Owner", + Address: "87 Polk St. Suite 5", + City: "San Francisco", + Region: "CA", + PostalCode: "94117", + Country: "USA", + Phone: "(415) 555-5938", + Orders: [ + { + OrderID: 10884, + EmployeeID: 4, + OrderDate: new Date("1998-02-12T00:00:00"), + RequiredDate: new Date("1998-03-12T00:00:00"), + ShippedDate: new Date("1998-02-13T00:00:00"), + ShipVia: 2, + Freight: 90.9700, + ShipName: "Let's Stop N Shop", + ShipAddress: "87 Polk St. Suite 5", + ShipCity: "San Francisco", + ShipRegion: "CA", + ShipPostalCode: "94117", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 5.0000001e-002 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 21, + Discount: 5.0000001e-002 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 12, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10885, + EmployeeID: 6, + OrderDate: new Date("1998-02-12T00:00:00"), + RequiredDate: new Date("1998-03-12T00:00:00"), + ShippedDate: new Date("1998-02-18T00:00:00"), + ShipVia: 3, + Freight: 5.6400, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10886, + EmployeeID: 1, + OrderDate: new Date("1998-02-13T00:00:00"), + RequiredDate: new Date("1998-03-13T00:00:00"), + ShippedDate: new Date("1998-03-02T00:00:00"), + ShipVia: 1, + Freight: 4.9900, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GALED", + CompanyName: "Galería del gastrónomo", + ContactName: "Eduardo Saavedra", + ContactTitle: "Marketing Manager", + Address: "Rambla de Cataluña, 23", + City: "Barcelona", + PostalCode: "08022", + Country: "Spain", + Phone: "(93) 203 4560", + Fax: "(93) 203 4561", + Orders: [ + { + OrderID: 10887, + EmployeeID: 8, + OrderDate: new Date("1998-02-13T00:00:00"), + RequiredDate: new Date("1998-03-13T00:00:00"), + ShippedDate: new Date("1998-02-16T00:00:00"), + ShipVia: 3, + Freight: 1.2500, + ShipName: "Galería del gastronómo", + ShipAddress: "Rambla de Cataluña, 23", + ShipCity: "Barcelona", + ShipPostalCode: "8022", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10888, + EmployeeID: 1, + OrderDate: new Date("1998-02-16T00:00:00"), + RequiredDate: new Date("1998-03-16T00:00:00"), + ShippedDate: new Date("1998-02-23T00:00:00"), + ShipVia: 2, + Freight: 51.8700, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10889, + EmployeeID: 9, + OrderDate: new Date("1998-02-16T00:00:00"), + RequiredDate: new Date("1998-03-16T00:00:00"), + ShippedDate: new Date("1998-02-23T00:00:00"), + ShipVia: 3, + Freight: 280.6100, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DUMON", + CompanyName: "Du monde entier", + ContactName: "Janine Labrune", + ContactTitle: "Owner", + Address: "67, rue des Cinquante Otages", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.67.88.88", + Fax: "40.67.89.89", + Orders: [ + { + OrderID: 10890, + EmployeeID: 7, + OrderDate: new Date("1998-02-16T00:00:00"), + RequiredDate: new Date("1998-03-16T00:00:00"), + ShippedDate: new Date("1998-02-18T00:00:00"), + ShipVia: 1, + Freight: 32.7600, + ShipName: "Du monde entier", + ShipAddress: "67, rue des Cinquante Otages", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10891, + EmployeeID: 7, + OrderDate: new Date("1998-02-17T00:00:00"), + RequiredDate: new Date("1998-03-17T00:00:00"), + ShippedDate: new Date("1998-02-19T00:00:00"), + ShipVia: 2, + Freight: 20.3700, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10892, + EmployeeID: 4, + OrderDate: new Date("1998-02-17T00:00:00"), + RequiredDate: new Date("1998-03-17T00:00:00"), + ShippedDate: new Date("1998-02-19T00:00:00"), + ShipVia: 2, + Freight: 120.2700, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 40, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 10893, + EmployeeID: 9, + OrderDate: new Date("1998-02-18T00:00:00"), + RequiredDate: new Date("1998-03-18T00:00:00"), + ShippedDate: new Date("1998-02-20T00:00:00"), + ShipVia: 2, + Freight: 77.7800, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10894, + EmployeeID: 1, + OrderDate: new Date("1998-02-18T00:00:00"), + RequiredDate: new Date("1998-03-18T00:00:00"), + ShippedDate: new Date("1998-02-20T00:00:00"), + ShipVia: 1, + Freight: 116.1300, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 28, + Discount: 5.0000001e-002 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 120, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10895, + EmployeeID: 3, + OrderDate: new Date("1998-02-18T00:00:00"), + RequiredDate: new Date("1998-03-18T00:00:00"), + ShippedDate: new Date("1998-02-23T00:00:00"), + ShipVia: 1, + Freight: 162.7500, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 110, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 91, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 100, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10896, + EmployeeID: 7, + OrderDate: new Date("1998-02-19T00:00:00"), + RequiredDate: new Date("1998-03-19T00:00:00"), + ShippedDate: new Date("1998-02-27T00:00:00"), + ShipVia: 3, + Freight: 32.4500, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10897, + EmployeeID: 3, + OrderDate: new Date("1998-02-19T00:00:00"), + RequiredDate: new Date("1998-03-19T00:00:00"), + ShippedDate: new Date("1998-02-25T00:00:00"), + ShipVia: 2, + Freight: 603.5400, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 80, + Discount: 0.0000000e+000 + }, { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 36, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OCEAN", + CompanyName: "Océano Atlántico Ltda.", + ContactName: "Yvonne Moncada", + ContactTitle: "Sales Agent", + Address: "Ing. Gustavo Moncada 8585 Piso 20-A", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5333", + Fax: "(1) 135-5535", + Orders: [ + { + OrderID: 10898, + EmployeeID: 4, + OrderDate: new Date("1998-02-20T00:00:00"), + RequiredDate: new Date("1998-03-20T00:00:00"), + ShippedDate: new Date("1998-03-06T00:00:00"), + ShipVia: 2, + Freight: 1.2700, + ShipName: "Océano Atlántico Ltda.", + ShipAddress: "Ing. Gustavo Moncada 8585 Piso 20-A", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10899, + EmployeeID: 5, + OrderDate: new Date("1998-02-20T00:00:00"), + RequiredDate: new Date("1998-03-20T00:00:00"), + ShippedDate: new Date("1998-02-26T00:00:00"), + ShipVia: 3, + Freight: 1.2100, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 8, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10900, + EmployeeID: 1, + OrderDate: new Date("1998-02-20T00:00:00"), + RequiredDate: new Date("1998-03-20T00:00:00"), + ShippedDate: new Date("1998-03-04T00:00:00"), + ShipVia: 2, + Freight: 1.6600, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 3, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10901, + EmployeeID: 4, + OrderDate: new Date("1998-02-23T00:00:00"), + RequiredDate: new Date("1998-03-23T00:00:00"), + ShippedDate: new Date("1998-02-26T00:00:00"), + ShipVia: 1, + Freight: 62.0900, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10902, + EmployeeID: 1, + OrderDate: new Date("1998-02-23T00:00:00"), + RequiredDate: new Date("1998-03-23T00:00:00"), + ShippedDate: new Date("1998-03-03T00:00:00"), + ShipVia: 1, + Freight: 44.1500, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 6, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10903, + EmployeeID: 3, + OrderDate: new Date("1998-02-24T00:00:00"), + RequiredDate: new Date("1998-03-24T00:00:00"), + ShippedDate: new Date("1998-03-04T00:00:00"), + ShipVia: 3, + Freight: 36.7100, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 10904, + EmployeeID: 3, + OrderDate: new Date("1998-02-24T00:00:00"), + RequiredDate: new Date("1998-03-24T00:00:00"), + ShippedDate: new Date("1998-02-27T00:00:00"), + ShipVia: 3, + Freight: 162.9500, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10905, + EmployeeID: 9, + OrderDate: new Date("1998-02-24T00:00:00"), + RequiredDate: new Date("1998-03-24T00:00:00"), + ShippedDate: new Date("1998-03-06T00:00:00"), + ShipVia: 2, + Freight: 13.7200, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10906, + EmployeeID: 4, + OrderDate: new Date("1998-02-25T00:00:00"), + RequiredDate: new Date("1998-03-11T00:00:00"), + ShippedDate: new Date("1998-03-03T00:00:00"), + ShipVia: 3, + Freight: 26.2900, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPECD", + CompanyName: "Spécialités du monde", + ContactName: "Dominique Perrier", + ContactTitle: "Marketing Manager", + Address: "25, rue Lauriston", + City: "Paris", + PostalCode: "75016", + Country: "France", + Phone: "(1) 47.55.60.10", + Fax: "(1) 47.55.60.20", + Orders: [ + { + OrderID: 10907, + EmployeeID: 6, + OrderDate: new Date("1998-02-25T00:00:00"), + RequiredDate: new Date("1998-03-25T00:00:00"), + ShippedDate: new Date("1998-02-27T00:00:00"), + ShipVia: 3, + Freight: 9.1900, + ShipName: "Spécialités du monde", + ShipAddress: "25, rue Lauriston", + ShipCity: "Paris", + ShipPostalCode: "75016", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10908, + EmployeeID: 4, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-06T00:00:00"), + ShipVia: 2, + Freight: 32.9600, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 14, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 10909, + EmployeeID: 1, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-10T00:00:00"), + ShipVia: 2, + Freight: 53.0500, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 10910, + EmployeeID: 1, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-04T00:00:00"), + ShipVia: 3, + Freight: 38.1100, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10911, + EmployeeID: 3, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-05T00:00:00"), + ShipVia: 1, + Freight: 38.1900, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10912, + EmployeeID: 2, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 2, + Freight: 580.9100, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 60, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10913, + EmployeeID: 4, + OrderDate: new Date("1998-02-26T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-04T00:00:00"), + ShipVia: 1, + Freight: 33.0500, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 40, + Discount: 2.5000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10914, + EmployeeID: 6, + OrderDate: new Date("1998-02-27T00:00:00"), + RequiredDate: new Date("1998-03-27T00:00:00"), + ShippedDate: new Date("1998-03-02T00:00:00"), + ShipVia: 1, + Freight: 21.1900, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 25, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 10915, + EmployeeID: 2, + OrderDate: new Date("1998-02-27T00:00:00"), + RequiredDate: new Date("1998-03-27T00:00:00"), + ShippedDate: new Date("1998-03-02T00:00:00"), + ShipVia: 2, + Freight: 3.5100, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RANCH", + CompanyName: "Rancho grande", + ContactName: "Sergio Gutiérrez", + ContactTitle: "Sales Representative", + Address: "Av. del Libertador 900", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 123-5555", + Fax: "(1) 123-5556", + Orders: [ + { + OrderID: 10916, + EmployeeID: 1, + OrderDate: new Date("1998-02-27T00:00:00"), + RequiredDate: new Date("1998-03-27T00:00:00"), + ShippedDate: new Date("1998-03-09T00:00:00"), + ShipVia: 2, + Freight: 63.7700, + ShipName: "Rancho grande", + ShipAddress: "Av. del Libertador 900", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ROMEY", + CompanyName: "Romero y tomillo", + ContactName: "Alejandra Camino", + ContactTitle: "Accounting Manager", + Address: "Gran Vía, 1", + City: "Madrid", + PostalCode: "28001", + Country: "Spain", + Phone: "(91) 745 6200", + Fax: "(91) 745 6210", + Orders: [ + { + OrderID: 10917, + EmployeeID: 4, + OrderDate: new Date("1998-03-02T00:00:00"), + RequiredDate: new Date("1998-03-30T00:00:00"), + ShippedDate: new Date("1998-03-11T00:00:00"), + ShipVia: 2, + Freight: 8.2900, + ShipName: "Romero y tomillo", + ShipAddress: "Gran Vía, 1", + ShipCity: "Madrid", + ShipPostalCode: "28001", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10918, + EmployeeID: 3, + OrderDate: new Date("1998-03-02T00:00:00"), + RequiredDate: new Date("1998-03-30T00:00:00"), + ShippedDate: new Date("1998-03-11T00:00:00"), + ShipVia: 3, + Freight: 48.8300, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 60, + Discount: 2.5000000e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 25, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10919, + EmployeeID: 2, + OrderDate: new Date("1998-03-02T00:00:00"), + RequiredDate: new Date("1998-03-30T00:00:00"), + ShippedDate: new Date("1998-03-04T00:00:00"), + ShipVia: 2, + Freight: 19.8000, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10920, + EmployeeID: 4, + OrderDate: new Date("1998-03-03T00:00:00"), + RequiredDate: new Date("1998-03-31T00:00:00"), + ShippedDate: new Date("1998-03-09T00:00:00"), + ShipVia: 2, + Freight: 29.6100, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10921, + EmployeeID: 1, + OrderDate: new Date("1998-03-03T00:00:00"), + RequiredDate: new Date("1998-04-14T00:00:00"), + ShippedDate: new Date("1998-03-09T00:00:00"), + ShipVia: 1, + Freight: 176.4800, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10922, + EmployeeID: 5, + OrderDate: new Date("1998-03-03T00:00:00"), + RequiredDate: new Date("1998-03-31T00:00:00"), + ShippedDate: new Date("1998-03-05T00:00:00"), + ShipVia: 3, + Freight: 62.7400, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 10923, + EmployeeID: 7, + OrderDate: new Date("1998-03-03T00:00:00"), + RequiredDate: new Date("1998-04-14T00:00:00"), + ShippedDate: new Date("1998-03-13T00:00:00"), + ShipVia: 3, + Freight: 68.2600, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 24, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BERGS", + CompanyName: "Berglunds snabbköp", + ContactName: "Christina Berglund", + ContactTitle: "Order Administrator", + Address: "Berguvsvägen 8", + City: "Luleå", + PostalCode: "S-958 22", + Country: "Sweden", + Phone: "0921-12 34 65", + Fax: "0921-12 34 67", + Orders: [ + { + OrderID: 10924, + EmployeeID: 3, + OrderDate: new Date("1998-03-04T00:00:00"), + RequiredDate: new Date("1998-04-01T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 2, + Freight: 151.5200, + ShipName: "Berglunds snabbköp", + ShipAddress: "Berguvsvägen 8", + ShipCity: "Luleå", + ShipPostalCode: "S-958 22", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 20, + Discount: 1.0000000e-001 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10925, + EmployeeID: 3, + OrderDate: new Date("1998-03-04T00:00:00"), + RequiredDate: new Date("1998-04-01T00:00:00"), + ShippedDate: new Date("1998-03-13T00:00:00"), + ShipVia: 1, + Freight: 2.2700, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 25, + Discount: 1.5000001e-001 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 12, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "ANATR", + CompanyName: "Ana Trujillo Emparedados y helados", + ContactName: "Ana Trujillo", + ContactTitle: "Owner", + Address: "Avda. de la Constitución 2222", + City: "México D.F.", + PostalCode: "05021", + Country: "Mexico", + Phone: "(5) 555-4729", + Fax: "(5) 555-3745", + Orders: [ + { + OrderID: 10926, + EmployeeID: 4, + OrderDate: new Date("1998-03-04T00:00:00"), + RequiredDate: new Date("1998-04-01T00:00:00"), + ShippedDate: new Date("1998-03-11T00:00:00"), + ShipVia: 3, + Freight: 39.9200, + ShipName: "Ana Trujillo Emparedados y helados", + ShipAddress: "Avda. de la Constitución 2222", + ShipCity: "México D.F.", + ShipPostalCode: "05021", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LACOR", + CompanyName: "La corne d'abondance", + ContactName: "Daniel Tonini", + ContactTitle: "Sales Representative", + Address: "67, avenue de l'Europe", + City: "Versailles", + PostalCode: "78000", + Country: "France", + Phone: "30.59.84.10", + Fax: "30.59.85.11", + Orders: [ + { + OrderID: 10927, + EmployeeID: 4, + OrderDate: new Date("1998-03-05T00:00:00"), + RequiredDate: new Date("1998-04-02T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 1, + Freight: 19.7900, + ShipName: "La corne d'abondance", + ShipAddress: "67, avenue de l'Europe", + ShipCity: "Versailles", + ShipPostalCode: "78000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GALED", + CompanyName: "Galería del gastrónomo", + ContactName: "Eduardo Saavedra", + ContactTitle: "Marketing Manager", + Address: "Rambla de Cataluña, 23", + City: "Barcelona", + PostalCode: "08022", + Country: "Spain", + Phone: "(93) 203 4560", + Fax: "(93) 203 4561", + Orders: [ + { + OrderID: 10928, + EmployeeID: 1, + OrderDate: new Date("1998-03-05T00:00:00"), + RequiredDate: new Date("1998-04-02T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 1, + Freight: 1.3600, + ShipName: "Galería del gastronómo", + ShipAddress: "Rambla de Cataluña, 23", + ShipCity: "Barcelona", + ShipPostalCode: "8022", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 10929, + EmployeeID: 6, + OrderDate: new Date("1998-03-05T00:00:00"), + RequiredDate: new Date("1998-04-02T00:00:00"), + ShippedDate: new Date("1998-03-12T00:00:00"), + ShipVia: 1, + Freight: 33.9300, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 49, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 10930, + EmployeeID: 4, + OrderDate: new Date("1998-03-06T00:00:00"), + RequiredDate: new Date("1998-04-17T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 3, + Freight: 15.5500, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 36, + Discount: 0.0000000e+000 + }, { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 25, + Discount: 2.0000000e-001 + }, { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 30, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10931, + EmployeeID: 4, + OrderDate: new Date("1998-03-06T00:00:00"), + RequiredDate: new Date("1998-03-20T00:00:00"), + ShippedDate: new Date("1998-03-19T00:00:00"), + ShipVia: 2, + Freight: 13.6000, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 42, + Discount: 1.5000001e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10932, + EmployeeID: 8, + OrderDate: new Date("1998-03-06T00:00:00"), + RequiredDate: new Date("1998-04-03T00:00:00"), + ShippedDate: new Date("1998-03-24T00:00:00"), + ShipVia: 1, + Freight: 134.6400, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 1.0000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 14, + Discount: 1.0000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "ISLAT", + CompanyName: "Island Trading", + ContactName: "Helen Bennett", + ContactTitle: "Marketing Manager", + Address: "Garden House Crowther Way", + City: "Cowes", + Region: "Isle of Wight", + PostalCode: "PO31 7PJ", + Country: "UK", + Phone: "(198) 555-8888", + Orders: [ + { + OrderID: 10933, + EmployeeID: 6, + OrderDate: new Date("1998-03-06T00:00:00"), + RequiredDate: new Date("1998-04-03T00:00:00"), + ShippedDate: new Date("1998-03-16T00:00:00"), + ShipVia: 3, + Freight: 54.1500, + ShipName: "Island Trading", + ShipAddress: "Garden House Crowther Way", + ShipCity: "Cowes", + ShipRegion: "Isle of Wight", + ShipPostalCode: "PO31 7PJ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 10934, + EmployeeID: 3, + OrderDate: new Date("1998-03-09T00:00:00"), + RequiredDate: new Date("1998-04-06T00:00:00"), + ShippedDate: new Date("1998-03-12T00:00:00"), + ShipVia: 3, + Freight: 32.0100, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WELLI", + CompanyName: "Wellington Importadora", + ContactName: "Paula Parente", + ContactTitle: "Sales Manager", + Address: "Rua do Mercado, 12", + City: "Resende", + Region: "SP", + PostalCode: "08737-363", + Country: "Brazil", + Phone: "(14) 555-8122", + Orders: [ + { + OrderID: 10935, + EmployeeID: 4, + OrderDate: new Date("1998-03-09T00:00:00"), + RequiredDate: new Date("1998-04-06T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 3, + Freight: 47.5900, + ShipName: "Wellington Importadora", + ShipAddress: "Rua do Mercado, 12", + ShipCity: "Resende", + ShipRegion: "SP", + ShipPostalCode: "08737-363", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 4, + Discount: 2.5000000e-001 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 8, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 10936, + EmployeeID: 3, + OrderDate: new Date("1998-03-09T00:00:00"), + RequiredDate: new Date("1998-04-06T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 2, + Freight: 33.6800, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 10937, + EmployeeID: 7, + OrderDate: new Date("1998-03-10T00:00:00"), + RequiredDate: new Date("1998-03-24T00:00:00"), + ShippedDate: new Date("1998-03-13T00:00:00"), + ShipVia: 3, + Freight: 31.5100, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10938, + EmployeeID: 3, + OrderDate: new Date("1998-03-10T00:00:00"), + RequiredDate: new Date("1998-04-07T00:00:00"), + ShippedDate: new Date("1998-03-16T00:00:00"), + ShipVia: 2, + Freight: 31.8900, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 24, + Discount: 2.5000000e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 49, + Discount: 2.5000000e-001 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10939, + EmployeeID: 2, + OrderDate: new Date("1998-03-10T00:00:00"), + RequiredDate: new Date("1998-04-07T00:00:00"), + ShippedDate: new Date("1998-03-13T00:00:00"), + ShipVia: 2, + Freight: 76.3300, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 1.5000001e-001 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 40, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 10940, + EmployeeID: 8, + OrderDate: new Date("1998-03-11T00:00:00"), + RequiredDate: new Date("1998-04-08T00:00:00"), + ShippedDate: new Date("1998-03-23T00:00:00"), + ShipVia: 3, + Freight: 19.7700, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10941, + EmployeeID: 7, + OrderDate: new Date("1998-03-11T00:00:00"), + RequiredDate: new Date("1998-04-08T00:00:00"), + ShippedDate: new Date("1998-03-20T00:00:00"), + ShipVia: 2, + Freight: 400.8100, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 44, + Discount: 2.5000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 80, + Discount: 2.5000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 10942, + EmployeeID: 9, + OrderDate: new Date("1998-03-11T00:00:00"), + RequiredDate: new Date("1998-04-08T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 3, + Freight: 17.9500, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10943, + EmployeeID: 4, + OrderDate: new Date("1998-03-11T00:00:00"), + RequiredDate: new Date("1998-04-08T00:00:00"), + ShippedDate: new Date("1998-03-19T00:00:00"), + ShipVia: 2, + Freight: 2.1700, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10944, + EmployeeID: 6, + OrderDate: new Date("1998-03-12T00:00:00"), + RequiredDate: new Date("1998-03-26T00:00:00"), + ShippedDate: new Date("1998-03-13T00:00:00"), + ShipVia: 3, + Freight: 52.9200, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 5, + Discount: 2.5000000e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 18, + Discount: 2.5000000e-001 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MORGK", + CompanyName: "Morgenstern Gesundkost", + ContactName: "Alexander Feuer", + ContactTitle: "Marketing Assistant", + Address: "Heerstr. 22", + City: "Leipzig", + PostalCode: "04179", + Country: "Germany", + Phone: "0342-023176", + Orders: [ + { + OrderID: 10945, + EmployeeID: 4, + OrderDate: new Date("1998-03-12T00:00:00"), + RequiredDate: new Date("1998-04-09T00:00:00"), + ShippedDate: new Date("1998-03-18T00:00:00"), + ShipVia: 1, + Freight: 10.2200, + ShipName: "Morgenstern Gesundkost", + ShipAddress: "Heerstr. 22", + ShipCity: "Leipzig", + ShipPostalCode: "04179", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10946, + EmployeeID: 1, + OrderDate: new Date("1998-03-12T00:00:00"), + RequiredDate: new Date("1998-04-09T00:00:00"), + ShippedDate: new Date("1998-03-19T00:00:00"), + ShipVia: 2, + Freight: 27.2000, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 10947, + EmployeeID: 3, + OrderDate: new Date("1998-03-13T00:00:00"), + RequiredDate: new Date("1998-04-10T00:00:00"), + ShippedDate: new Date("1998-03-16T00:00:00"), + ShipVia: 2, + Freight: 3.2600, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 10948, + EmployeeID: 3, + OrderDate: new Date("1998-03-13T00:00:00"), + RequiredDate: new Date("1998-04-10T00:00:00"), + ShippedDate: new Date("1998-03-19T00:00:00"), + ShipVia: 3, + Freight: 23.3900, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10949, + EmployeeID: 2, + OrderDate: new Date("1998-03-13T00:00:00"), + RequiredDate: new Date("1998-04-10T00:00:00"), + ShippedDate: new Date("1998-03-17T00:00:00"), + ShipVia: 3, + Freight: 74.4400, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAGAA", + CompanyName: "Magazzini Alimentari Riuniti", + ContactName: "Giovanni Rovelli", + ContactTitle: "Marketing Manager", + Address: "Via Ludovico il Moro 22", + City: "Bergamo", + PostalCode: "24100", + Country: "Italy", + Phone: "035-640230", + Fax: "035-640231", + Orders: [ + { + OrderID: 10950, + EmployeeID: 1, + OrderDate: new Date("1998-03-16T00:00:00"), + RequiredDate: new Date("1998-04-13T00:00:00"), + ShippedDate: new Date("1998-03-23T00:00:00"), + ShipVia: 2, + Freight: 2.5000, + ShipName: "Magazzini Alimentari Riuniti", + ShipAddress: "Via Ludovico il Moro 22", + ShipCity: "Bergamo", + ShipPostalCode: "24100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 10951, + EmployeeID: 9, + OrderDate: new Date("1998-03-16T00:00:00"), + RequiredDate: new Date("1998-04-27T00:00:00"), + ShippedDate: new Date("1998-04-07T00:00:00"), + ShipVia: 2, + Freight: 30.8500, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 6, + Discount: 5.0000001e-002 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 50, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 10952, + EmployeeID: 1, + OrderDate: new Date("1998-03-16T00:00:00"), + RequiredDate: new Date("1998-04-27T00:00:00"), + ShippedDate: new Date("1998-03-24T00:00:00"), + ShipVia: 1, + Freight: 40.4200, + ShipName: "Alfred's Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 16, + Discount: 5.0000001e-002 + }, { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 10953, + EmployeeID: 9, + OrderDate: new Date("1998-03-16T00:00:00"), + RequiredDate: new Date("1998-03-30T00:00:00"), + ShippedDate: new Date("1998-03-25T00:00:00"), + ShipVia: 2, + Freight: 23.7200, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 50, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 10954, + EmployeeID: 5, + OrderDate: new Date("1998-03-17T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-03-20T00:00:00"), + ShipVia: 1, + Freight: 27.9100, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 28, + Discount: 1.5000001e-001 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 25, + Discount: 1.5000001e-001 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 24, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10955, + EmployeeID: 8, + OrderDate: new Date("1998-03-17T00:00:00"), + RequiredDate: new Date("1998-04-14T00:00:00"), + ShippedDate: new Date("1998-03-20T00:00:00"), + ShipVia: 2, + Freight: 3.2600, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 12, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 10956, + EmployeeID: 6, + OrderDate: new Date("1998-03-17T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-03-20T00:00:00"), + ShipVia: 2, + Freight: 44.6500, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 14, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10957, + EmployeeID: 8, + OrderDate: new Date("1998-03-18T00:00:00"), + RequiredDate: new Date("1998-04-15T00:00:00"), + ShippedDate: new Date("1998-03-27T00:00:00"), + ShipVia: 3, + Freight: 105.3600, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 8, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OCEAN", + CompanyName: "Océano Atlántico Ltda.", + ContactName: "Yvonne Moncada", + ContactTitle: "Sales Agent", + Address: "Ing. Gustavo Moncada 8585 Piso 20-A", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5333", + Fax: "(1) 135-5535", + Orders: [ + { + OrderID: 10958, + EmployeeID: 7, + OrderDate: new Date("1998-03-18T00:00:00"), + RequiredDate: new Date("1998-04-15T00:00:00"), + ShippedDate: new Date("1998-03-27T00:00:00"), + ShipVia: 2, + Freight: 49.5600, + ShipName: "Océano Atlántico Ltda.", + ShipAddress: "Ing. Gustavo Moncada 8585 Piso 20-A", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 10959, + EmployeeID: 6, + OrderDate: new Date("1998-03-18T00:00:00"), + RequiredDate: new Date("1998-04-29T00:00:00"), + ShippedDate: new Date("1998-03-23T00:00:00"), + ShipVia: 2, + Freight: 4.9800, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 20, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10960, + EmployeeID: 3, + OrderDate: new Date("1998-03-19T00:00:00"), + RequiredDate: new Date("1998-04-02T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 1, + Freight: 2.0800, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 10, + Discount: 2.5000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 10961, + EmployeeID: 8, + OrderDate: new Date("1998-03-19T00:00:00"), + RequiredDate: new Date("1998-04-16T00:00:00"), + ShippedDate: new Date("1998-03-30T00:00:00"), + ShipVia: 1, + Freight: 104.4700, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 6, + Discount: 5.0000001e-002 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10962, + EmployeeID: 8, + OrderDate: new Date("1998-03-19T00:00:00"), + RequiredDate: new Date("1998-04-16T00:00:00"), + ShippedDate: new Date("1998-03-23T00:00:00"), + ShipVia: 2, + Freight: 275.7900, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 77, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 9, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 44, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FURIB", + CompanyName: "Furia Bacalhau e Frutos do Mar", + ContactName: "Lino Rodriguez", + ContactTitle: "Sales Manager", + Address: "Jardim das rosas n. 32", + City: "Lisboa", + PostalCode: "1675", + Country: "Portugal", + Phone: "(1) 354-2534", + Fax: "(1) 354-2535", + Orders: [ + { + OrderID: 10963, + EmployeeID: 9, + OrderDate: new Date("1998-03-19T00:00:00"), + RequiredDate: new Date("1998-04-16T00:00:00"), + ShippedDate: new Date("1998-03-26T00:00:00"), + ShipVia: 3, + Freight: 2.7000, + ShipName: "Furia Bacalhau e Frutos do Mar", + ShipAddress: "Jardim das rosas n. 32", + ShipCity: "Lisboa", + ShipPostalCode: "1675", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 2, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "SPECD", + CompanyName: "Spécialités du monde", + ContactName: "Dominique Perrier", + ContactTitle: "Marketing Manager", + Address: "25, rue Lauriston", + City: "Paris", + PostalCode: "75016", + Country: "France", + Phone: "(1) 47.55.60.10", + Fax: "(1) 47.55.60.20", + Orders: [ + { + OrderID: 10964, + EmployeeID: 3, + OrderDate: new Date("1998-03-20T00:00:00"), + RequiredDate: new Date("1998-04-17T00:00:00"), + ShippedDate: new Date("1998-03-24T00:00:00"), + ShipVia: 2, + Freight: 87.3800, + ShipName: "Spécialités du monde", + ShipAddress: "25, rue Lauriston", + ShipCity: "Paris", + ShipPostalCode: "75016", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 10965, + EmployeeID: 6, + OrderDate: new Date("1998-03-20T00:00:00"), + RequiredDate: new Date("1998-04-17T00:00:00"), + ShippedDate: new Date("1998-03-30T00:00:00"), + ShipVia: 3, + Freight: 144.3800, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 10966, + EmployeeID: 4, + OrderDate: new Date("1998-03-20T00:00:00"), + RequiredDate: new Date("1998-04-17T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 1, + Freight: 27.1900, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 37, + UnitPrice: 26.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 12, + Discount: 1.5000001e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 12, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "TOMSP", + CompanyName: "Toms Spezialitäten", + ContactName: "Karin Josephs", + ContactTitle: "Marketing Manager", + Address: "Luisenstr. 48", + City: "Münster", + PostalCode: "44087", + Country: "Germany", + Phone: "0251-031259", + Fax: "0251-035695", + Orders: [ + { + OrderID: 10967, + EmployeeID: 2, + OrderDate: new Date("1998-03-23T00:00:00"), + RequiredDate: new Date("1998-04-20T00:00:00"), + ShippedDate: new Date("1998-04-02T00:00:00"), + ShipVia: 2, + Freight: 62.2200, + ShipName: "Toms Spezialitäten", + ShipAddress: "Luisenstr. 48", + ShipCity: "Münster", + ShipPostalCode: "44087", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10968, + EmployeeID: 1, + OrderDate: new Date("1998-03-23T00:00:00"), + RequiredDate: new Date("1998-04-20T00:00:00"), + ShippedDate: new Date("1998-04-01T00:00:00"), + ShipVia: 3, + Freight: 74.6000, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "COMMI", + CompanyName: "Comércio Mineiro", + ContactName: "Pedro Afonso", + ContactTitle: "Sales Associate", + Address: "Av. dos Lusíadas, 23", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05432-043", + Country: "Brazil", + Phone: "(11) 555-7647", + Orders: [ + { + OrderID: 10969, + EmployeeID: 1, + OrderDate: new Date("1998-03-23T00:00:00"), + RequiredDate: new Date("1998-04-20T00:00:00"), + ShippedDate: new Date("1998-03-30T00:00:00"), + ShipVia: 2, + Freight: 0.2100, + ShipName: "Comércio Mineiro", + ShipAddress: "Av. dos Lusíadas, 23", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05432-043", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOLID", + CompanyName: "Bólido Comidas preparadas", + ContactName: "Martín Sommer", + ContactTitle: "Owner", + Address: "C\/ Araquil, 67", + City: "Madrid", + PostalCode: "28023", + Country: "Spain", + Phone: "(91) 555 22 82", + Fax: "(91) 555 91 99", + Orders: [ + { + OrderID: 10970, + EmployeeID: 9, + OrderDate: new Date("1998-03-24T00:00:00"), + RequiredDate: new Date("1998-04-07T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 1, + Freight: 16.1600, + ShipName: "Bólido Comidas preparadas", + ShipAddress: "C\/ Araquil, 67", + ShipCity: "Madrid", + ShipPostalCode: "28023", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 40, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANR", + CompanyName: "France restauration", + ContactName: "Carine Schmitt", + ContactTitle: "Marketing Manager", + Address: "54, rue Royale", + City: "Nantes", + PostalCode: "44000", + Country: "France", + Phone: "40.32.21.21", + Fax: "40.32.21.20", + Orders: [ + { + OrderID: 10971, + EmployeeID: 2, + OrderDate: new Date("1998-03-24T00:00:00"), + RequiredDate: new Date("1998-04-21T00:00:00"), + ShippedDate: new Date("1998-04-02T00:00:00"), + ShipVia: 2, + Freight: 121.8200, + ShipName: "France restauration", + ShipAddress: "54, rue Royale", + ShipCity: "Nantes", + ShipPostalCode: "44000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LACOR", + CompanyName: "La corne d'abondance", + ContactName: "Daniel Tonini", + ContactTitle: "Sales Representative", + Address: "67, avenue de l'Europe", + City: "Versailles", + PostalCode: "78000", + Country: "France", + Phone: "30.59.84.10", + Fax: "30.59.85.11", + Orders: [ + { + OrderID: 10972, + EmployeeID: 4, + OrderDate: new Date("1998-03-24T00:00:00"), + RequiredDate: new Date("1998-04-21T00:00:00"), + ShippedDate: new Date("1998-03-26T00:00:00"), + ShipVia: 2, + Freight: 0.0200, + ShipName: "La corne d'abondance", + ShipAddress: "67, avenue de l'Europe", + ShipCity: "Versailles", + ShipPostalCode: "78000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 7, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10973, + EmployeeID: 6, + OrderDate: new Date("1998-03-24T00:00:00"), + RequiredDate: new Date("1998-04-21T00:00:00"), + ShippedDate: new Date("1998-03-27T00:00:00"), + ShipVia: 2, + Freight: 15.1700, + ShipName: "La corne d'abondance", + ShipAddress: "67, avenue de l'Europe", + ShipCity: "Versailles", + ShipPostalCode: "78000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 5, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPLIR", + CompanyName: "Split Rail Beer & Ale", + ContactName: "Art Braunschweiger", + ContactTitle: "Sales Manager", + Address: "P.O. Box 555", + City: "Lander", + Region: "WY", + PostalCode: "82520", + Country: "USA", + Phone: "(307) 555-4680", + Fax: "(307) 555-6525", + Orders: [ + { + OrderID: 10974, + EmployeeID: 3, + OrderDate: new Date("1998-03-25T00:00:00"), + RequiredDate: new Date("1998-04-08T00:00:00"), + ShippedDate: new Date("1998-04-03T00:00:00"), + ShipVia: 3, + Freight: 12.9600, + ShipName: "Split Rail Beer & Ale", + ShipAddress: "P.O. Box 555", + ShipCity: "Lander", + ShipRegion: "WY", + ShipPostalCode: "82520", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10975, + EmployeeID: 1, + OrderDate: new Date("1998-03-25T00:00:00"), + RequiredDate: new Date("1998-04-22T00:00:00"), + ShippedDate: new Date("1998-03-27T00:00:00"), + ShipVia: 3, + Freight: 32.2700, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 16, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 10976, + EmployeeID: 1, + OrderDate: new Date("1998-03-25T00:00:00"), + RequiredDate: new Date("1998-05-06T00:00:00"), + ShippedDate: new Date("1998-04-03T00:00:00"), + ShipVia: 1, + Freight: 37.9700, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10977, + EmployeeID: 8, + OrderDate: new Date("1998-03-26T00:00:00"), + RequiredDate: new Date("1998-04-23T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 3, + Freight: 208.5000, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 47, + UnitPrice: 9.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 10978, + EmployeeID: 9, + OrderDate: new Date("1998-03-26T00:00:00"), + RequiredDate: new Date("1998-04-23T00:00:00"), + ShippedDate: new Date("1998-04-23T00:00:00"), + ShipVia: 2, + Freight: 32.8200, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 6, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10979, + EmployeeID: 8, + OrderDate: new Date("1998-03-26T00:00:00"), + RequiredDate: new Date("1998-04-23T00:00:00"), + ShippedDate: new Date("1998-03-31T00:00:00"), + ShipVia: 2, + Freight: 353.0700, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 18, + Discount: 0.0000000e+000 + }, { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 80, + Discount: 0.0000000e+000 + }, { + ProductID: 27, + UnitPrice: 43.9000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10980, + EmployeeID: 4, + OrderDate: new Date("1998-03-27T00:00:00"), + RequiredDate: new Date("1998-05-08T00:00:00"), + ShippedDate: new Date("1998-04-17T00:00:00"), + ShipVia: 1, + Freight: 1.2600, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 40, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 10981, + EmployeeID: 1, + OrderDate: new Date("1998-03-27T00:00:00"), + RequiredDate: new Date("1998-04-24T00:00:00"), + ShippedDate: new Date("1998-04-02T00:00:00"), + ShipVia: 2, + Freight: 193.3700, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 60, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 10982, + EmployeeID: 2, + OrderDate: new Date("1998-03-27T00:00:00"), + RequiredDate: new Date("1998-04-24T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 1, + Freight: 14.0100, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 10983, + EmployeeID: 2, + OrderDate: new Date("1998-03-27T00:00:00"), + RequiredDate: new Date("1998-04-24T00:00:00"), + ShippedDate: new Date("1998-04-06T00:00:00"), + ShipVia: 2, + Freight: 657.5400, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 84, + Discount: 1.5000001e-001 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + }, { + OrderID: 10984, + EmployeeID: 1, + OrderDate: new Date("1998-03-30T00:00:00"), + RequiredDate: new Date("1998-04-27T00:00:00"), + ShippedDate: new Date("1998-04-03T00:00:00"), + ShipVia: 3, + Freight: 211.2200, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 55, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 10985, + EmployeeID: 2, + OrderDate: new Date("1998-03-30T00:00:00"), + RequiredDate: new Date("1998-04-27T00:00:00"), + ShippedDate: new Date("1998-04-02T00:00:00"), + ShipVia: 1, + Freight: 91.5100, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 36, + Discount: 1.0000000e-001 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 8, + Discount: 1.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 35, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "OCEAN", + CompanyName: "Océano Atlántico Ltda.", + ContactName: "Yvonne Moncada", + ContactTitle: "Sales Agent", + Address: "Ing. Gustavo Moncada 8585 Piso 20-A", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5333", + Fax: "(1) 135-5535", + Orders: [ + { + OrderID: 10986, + EmployeeID: 8, + OrderDate: new Date("1998-03-30T00:00:00"), + RequiredDate: new Date("1998-04-27T00:00:00"), + ShippedDate: new Date("1998-04-21T00:00:00"), + ShipVia: 2, + Freight: 217.8600, + ShipName: "Océano Atlántico Ltda.", + ShipAddress: "Ing. Gustavo Moncada 8585 Piso 20-A", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 10987, + EmployeeID: 8, + OrderDate: new Date("1998-03-31T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-04-06T00:00:00"), + ShipVia: 1, + Freight: 185.4800, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 10988, + EmployeeID: 3, + OrderDate: new Date("1998-03-31T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 2, + Freight: 61.1400, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 40, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "QUEDE", + CompanyName: "Que Delícia", + ContactName: "Bernardo Batista", + ContactTitle: "Accounting Manager", + Address: "Rua da Panificadora, 12", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-673", + Country: "Brazil", + Phone: "(21) 555-4252", + Fax: "(21) 555-4545", + Orders: [ + { + OrderID: 10989, + EmployeeID: 2, + OrderDate: new Date("1998-03-31T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-04-02T00:00:00"), + ShipVia: 1, + Freight: 34.7600, + ShipName: "Que Delícia", + ShipAddress: "Rua da Panificadora, 12", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-673", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 10990, + EmployeeID: 2, + OrderDate: new Date("1998-04-01T00:00:00"), + RequiredDate: new Date("1998-05-13T00:00:00"), + ShippedDate: new Date("1998-04-07T00:00:00"), + ShipVia: 3, + Freight: 117.6100, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 65, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 60, + Discount: 1.5000001e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 65, + Discount: 1.5000001e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 66, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10991, + EmployeeID: 1, + OrderDate: new Date("1998-04-01T00:00:00"), + RequiredDate: new Date("1998-04-29T00:00:00"), + ShippedDate: new Date("1998-04-07T00:00:00"), + ShipVia: 1, + Freight: 38.5100, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 50, + Discount: 2.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 20, + Discount: 2.0000000e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 90, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "THEBI", + CompanyName: "The Big Cheese", + ContactName: "Liz Nixon", + ContactTitle: "Marketing Manager", + Address: "89 Jefferson Way Suite 2", + City: "Portland", + Region: "OR", + PostalCode: "97201", + Country: "USA", + Phone: "(503) 555-3612", + Orders: [ + { + OrderID: 10992, + EmployeeID: 1, + OrderDate: new Date("1998-04-01T00:00:00"), + RequiredDate: new Date("1998-04-29T00:00:00"), + ShippedDate: new Date("1998-04-03T00:00:00"), + ShipVia: 3, + Freight: 4.2700, + ShipName: "The Big Cheese", + ShipAddress: "89 Jefferson Way Suite 2", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97201", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 10993, + EmployeeID: 7, + OrderDate: new Date("1998-04-01T00:00:00"), + RequiredDate: new Date("1998-04-29T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 3, + Freight: 8.8100, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 50, + Discount: 2.5000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 35, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "VAFFE", + CompanyName: "Vaffeljernet", + ContactName: "Palle Ibsen", + ContactTitle: "Sales Manager", + Address: "Smagsloget 45", + City: "Århus", + PostalCode: "8200", + Country: "Denmark", + Phone: "86 21 32 43", + Fax: "86 22 33 44", + Orders: [ + { + OrderID: 10994, + EmployeeID: 2, + OrderDate: new Date("1998-04-02T00:00:00"), + RequiredDate: new Date("1998-04-16T00:00:00"), + ShippedDate: new Date("1998-04-09T00:00:00"), + ShipVia: 3, + Freight: 65.5300, + ShipName: "Vaffeljernet", + ShipAddress: "Smagsloget 45", + ShipCity: "Århus", + ShipPostalCode: "8200", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 18, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 10995, + EmployeeID: 1, + OrderDate: new Date("1998-04-02T00:00:00"), + RequiredDate: new Date("1998-04-30T00:00:00"), + ShippedDate: new Date("1998-04-06T00:00:00"), + ShipVia: 3, + Freight: 46.0000, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 10996, + EmployeeID: 4, + OrderDate: new Date("1998-04-02T00:00:00"), + RequiredDate: new Date("1998-04-30T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 2, + Freight: 1.1200, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 10997, + EmployeeID: 8, + OrderDate: new Date("1998-04-03T00:00:00"), + RequiredDate: new Date("1998-05-15T00:00:00"), + ShippedDate: new Date("1998-04-13T00:00:00"), + ShipVia: 2, + Freight: 73.9100, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 50, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 10998, + EmployeeID: 8, + OrderDate: new Date("1998-04-03T00:00:00"), + RequiredDate: new Date("1998-04-17T00:00:00"), + ShippedDate: new Date("1998-04-17T00:00:00"), + ShipVia: 2, + Freight: 20.3100, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 74, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 10999, + EmployeeID: 6, + OrderDate: new Date("1998-04-03T00:00:00"), + RequiredDate: new Date("1998-05-01T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 2, + Freight: 96.3500, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 21, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 11000, + EmployeeID: 2, + OrderDate: new Date("1998-04-06T00:00:00"), + RequiredDate: new Date("1998-05-04T00:00:00"), + ShippedDate: new Date("1998-04-14T00:00:00"), + ShipVia: 3, + Freight: 55.1200, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 25, + Discount: 2.5000000e-001 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 11001, + EmployeeID: 2, + OrderDate: new Date("1998-04-06T00:00:00"), + RequiredDate: new Date("1998-05-04T00:00:00"), + ShippedDate: new Date("1998-04-14T00:00:00"), + ShipVia: 2, + Freight: 197.3000, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 22, + UnitPrice: 21.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 11002, + EmployeeID: 4, + OrderDate: new Date("1998-04-06T00:00:00"), + RequiredDate: new Date("1998-05-04T00:00:00"), + ShippedDate: new Date("1998-04-16T00:00:00"), + ShipVia: 1, + Freight: 141.1600, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 56, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 15, + Discount: 1.5000001e-001 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 24, + Discount: 1.5000001e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 40, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "THECR", + CompanyName: "The Cracker Box", + ContactName: "Liu Wong", + ContactTitle: "Marketing Assistant", + Address: "55 Grizzly Peak Rd.", + City: "Butte", + Region: "MT", + PostalCode: "59801", + Country: "USA", + Phone: "(406) 555-5834", + Fax: "(406) 555-8083", + Orders: [ + { + OrderID: 11003, + EmployeeID: 3, + OrderDate: new Date("1998-04-06T00:00:00"), + RequiredDate: new Date("1998-05-04T00:00:00"), + ShippedDate: new Date("1998-04-08T00:00:00"), + ShipVia: 3, + Freight: 14.9100, + ShipName: "The Cracker Box", + ShipAddress: "55 Grizzly Peak Rd.", + ShipCity: "Butte", + ShipRegion: "MT", + ShipPostalCode: "59801", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "MAISD", + CompanyName: "Maison Dewey", + ContactName: "Catherine Dewey", + ContactTitle: "Sales Agent", + Address: "Rue Joseph-Bens 532", + City: "Bruxelles", + PostalCode: "B-1180", + Country: "Belgium", + Phone: "(02) 201 24 67", + Fax: "(02) 201 24 68", + Orders: [ + { + OrderID: 11004, + EmployeeID: 3, + OrderDate: new Date("1998-04-07T00:00:00"), + RequiredDate: new Date("1998-05-05T00:00:00"), + ShippedDate: new Date("1998-04-20T00:00:00"), + ShipVia: 1, + Freight: 44.8400, + ShipName: "Maison Dewey", + ShipAddress: "Rue Joseph-Bens 532", + ShipCity: "Bruxelles", + ShipPostalCode: "B-1180", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 6, + Discount: 0.0000000e+000 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WILMK", + CompanyName: "Wilman Kala", + ContactName: "Matti Karttunen", + ContactTitle: "Owner\/Marketing Assistant", + Address: "Keskuskatu 45", + City: "Helsinki", + PostalCode: "21240", + Country: "Finland", + Phone: "90-224 8858", + Fax: "90-224 8858", + Orders: [ + { + OrderID: 11005, + EmployeeID: 2, + OrderDate: new Date("1998-04-07T00:00:00"), + RequiredDate: new Date("1998-05-05T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 1, + Freight: 0.7500, + ShipName: "Wilman Kala", + ShipAddress: "Keskuskatu 45", + ShipCity: "Helsinki", + ShipPostalCode: "21240", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 11006, + EmployeeID: 3, + OrderDate: new Date("1998-04-07T00:00:00"), + RequiredDate: new Date("1998-05-05T00:00:00"), + ShippedDate: new Date("1998-04-15T00:00:00"), + ShipVia: 2, + Freight: 25.1900, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 2, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "PRINI", + CompanyName: "Princesa Isabel Vinhos", + ContactName: "Isabel de Castro", + ContactTitle: "Sales Representative", + Address: "Estrada da saúde n. 58", + City: "Lisboa", + PostalCode: "1756", + Country: "Portugal", + Phone: "(1) 356-5634", + Orders: [ + { + OrderID: 11007, + EmployeeID: 8, + OrderDate: new Date("1998-04-08T00:00:00"), + RequiredDate: new Date("1998-05-06T00:00:00"), + ShippedDate: new Date("1998-04-13T00:00:00"), + ShipVia: 2, + Freight: 202.2400, + ShipName: "Princesa Isabel Vinhos", + ShipAddress: "Estrada da saúde n. 58", + ShipCity: "Lisboa", + ShipPostalCode: "1756", + ShipCountry: "Portugal", + OrderDetails: [ + { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 14, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 11008, + EmployeeID: 7, + OrderDate: new Date("1998-04-08T00:00:00"), + RequiredDate: new Date("1998-05-06T00:00:00"), + ShipVia: 3, + Freight: 79.4600, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 70, + Discount: 5.0000001e-002 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 90, + Discount: 5.0000001e-002 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 21, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 11009, + EmployeeID: 2, + OrderDate: new Date("1998-04-08T00:00:00"), + RequiredDate: new Date("1998-05-06T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 1, + Freight: 59.1100, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 18, + Discount: 2.5000000e-001 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 11010, + EmployeeID: 2, + OrderDate: new Date("1998-04-09T00:00:00"), + RequiredDate: new Date("1998-05-07T00:00:00"), + ShippedDate: new Date("1998-04-21T00:00:00"), + ShipVia: 2, + Freight: 28.7100, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ALFKI", + CompanyName: "Alfreds Futterkiste", + ContactName: "Maria Anders", + ContactTitle: "Sales Representative", + Address: "Obere Str. 57", + City: "Berlin", + PostalCode: "12209", + Country: "Germany", + Phone: "030-0074321", + Fax: "030-0076545", + Orders: [ + { + OrderID: 11011, + EmployeeID: 3, + OrderDate: new Date("1998-04-09T00:00:00"), + RequiredDate: new Date("1998-05-07T00:00:00"), + ShippedDate: new Date("1998-04-13T00:00:00"), + ShipVia: 1, + Freight: 1.2100, + ShipName: "Alfred's Futterkiste", + ShipAddress: "Obere Str. 57", + ShipCity: "Berlin", + ShipPostalCode: "12209", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 58, + UnitPrice: 13.2500, + Quantity: 40, + Discount: 5.0000001e-002 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANK", + CompanyName: "Frankenversand", + ContactName: "Peter Franken", + ContactTitle: "Marketing Manager", + Address: "Berliner Platz 43", + City: "München", + PostalCode: "80805", + Country: "Germany", + Phone: "089-0877310", + Fax: "089-0877451", + Orders: [ + { + OrderID: 11012, + EmployeeID: 1, + OrderDate: new Date("1998-04-09T00:00:00"), + RequiredDate: new Date("1998-04-23T00:00:00"), + ShippedDate: new Date("1998-04-17T00:00:00"), + ShipVia: 3, + Freight: 242.9500, + ShipName: "Frankenversand", + ShipAddress: "Berliner Platz 43", + ShipCity: "München", + ShipPostalCode: "80805", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 50, + Discount: 5.0000001e-002 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 36, + Discount: 5.0000001e-002 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 60, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ROMEY", + CompanyName: "Romero y tomillo", + ContactName: "Alejandra Camino", + ContactTitle: "Accounting Manager", + Address: "Gran Vía, 1", + City: "Madrid", + PostalCode: "28001", + Country: "Spain", + Phone: "(91) 745 6200", + Fax: "(91) 745 6210", + Orders: [ + { + OrderID: 11013, + EmployeeID: 2, + OrderDate: new Date("1998-04-09T00:00:00"), + RequiredDate: new Date("1998-05-07T00:00:00"), + ShippedDate: new Date("1998-04-10T00:00:00"), + ShipVia: 1, + Freight: 32.9900, + ShipName: "Romero y tomillo", + ShipAddress: "Gran Vía, 1", + ShipCity: "Madrid", + ShipPostalCode: "28001", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 45, + UnitPrice: 9.5000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 11014, + EmployeeID: 2, + OrderDate: new Date("1998-04-10T00:00:00"), + RequiredDate: new Date("1998-05-08T00:00:00"), + ShippedDate: new Date("1998-04-15T00:00:00"), + ShipVia: 3, + Freight: 23.6000, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 28, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SANTG", + CompanyName: "Santé Gourmet", + ContactName: "Jonas Bergulfsen", + ContactTitle: "Owner", + Address: "Erling Skakkes gate 78", + City: "Stavern", + PostalCode: "4110", + Country: "Norway", + Phone: "07-98 92 35", + Fax: "07-98 92 47", + Orders: [ + { + OrderID: 11015, + EmployeeID: 2, + OrderDate: new Date("1998-04-10T00:00:00"), + RequiredDate: new Date("1998-04-24T00:00:00"), + ShippedDate: new Date("1998-04-20T00:00:00"), + ShipVia: 2, + Freight: 4.6200, + ShipName: "Santé Gourmet", + ShipAddress: "Erling Skakkes gate 78", + ShipCity: "Stavern", + ShipPostalCode: "4110", + ShipCountry: "Norway", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 18, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "AROUT", + CompanyName: "Around the Horn", + ContactName: "Thomas Hardy", + ContactTitle: "Sales Representative", + Address: "120 Hanover Sq.", + City: "London", + PostalCode: "WA1 1DP", + Country: "UK", + Phone: "(171) 555-7788", + Fax: "(171) 555-6750", + Orders: [ + { + OrderID: 11016, + EmployeeID: 9, + OrderDate: new Date("1998-04-10T00:00:00"), + RequiredDate: new Date("1998-05-08T00:00:00"), + ShippedDate: new Date("1998-04-13T00:00:00"), + ShipVia: 2, + Freight: 33.8000, + ShipName: "Around the Horn", + ShipAddress: "Brook Farm Stratford St. Mary", + ShipCity: "Colchester", + ShipRegion: "Essex", + ShipPostalCode: "CO7 6JX", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 11017, + EmployeeID: 9, + OrderDate: new Date("1998-04-13T00:00:00"), + RequiredDate: new Date("1998-05-11T00:00:00"), + ShippedDate: new Date("1998-04-20T00:00:00"), + ShipVia: 2, + Freight: 754.2600, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 110, + Discount: 0.0000000e+000 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LONEP", + CompanyName: "Lonesome Pine Restaurant", + ContactName: "Fran Wilson", + ContactTitle: "Sales Manager", + Address: "89 Chiaroscuro Rd.", + City: "Portland", + Region: "OR", + PostalCode: "97219", + Country: "USA", + Phone: "(503) 555-9573", + Fax: "(503) 555-9646", + Orders: [ + { + OrderID: 11018, + EmployeeID: 4, + OrderDate: new Date("1998-04-13T00:00:00"), + RequiredDate: new Date("1998-05-11T00:00:00"), + ShippedDate: new Date("1998-04-16T00:00:00"), + ShipVia: 2, + Freight: 11.6500, + ShipName: "Lonesome Pine Restaurant", + ShipAddress: "89 Chiaroscuro Rd.", + ShipCity: "Portland", + ShipRegion: "OR", + ShipPostalCode: "97219", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 5, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RANCH", + CompanyName: "Rancho grande", + ContactName: "Sergio Gutiérrez", + ContactTitle: "Sales Representative", + Address: "Av. del Libertador 900", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 123-5555", + Fax: "(1) 123-5556", + Orders: [ + { + OrderID: 11019, + EmployeeID: 6, + OrderDate: new Date("1998-04-13T00:00:00"), + RequiredDate: new Date("1998-05-11T00:00:00"), + ShipVia: 3, + Freight: 3.1700, + ShipName: "Rancho grande", + ShipAddress: "Av. del Libertador 900", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "OTTIK", + CompanyName: "Ottilies Käseladen", + ContactName: "Henriette Pfalzheim", + ContactTitle: "Owner", + Address: "Mehrheimerstr. 369", + City: "Köln", + PostalCode: "50739", + Country: "Germany", + Phone: "0221-0644327", + Fax: "0221-0765721", + Orders: [ + { + OrderID: 11020, + EmployeeID: 2, + OrderDate: new Date("1998-04-14T00:00:00"), + RequiredDate: new Date("1998-05-12T00:00:00"), + ShippedDate: new Date("1998-04-16T00:00:00"), + ShipVia: 2, + Freight: 43.3000, + ShipName: "Ottilies Käseladen", + ShipAddress: "Mehrheimerstr. 369", + ShipCity: "Köln", + ShipPostalCode: "50739", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 24, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "QUICK", + CompanyName: "QUICK-Stop", + ContactName: "Horst Kloss", + ContactTitle: "Accounting Manager", + Address: "Taucherstraße 10", + City: "Cunewalde", + PostalCode: "01307", + Country: "Germany", + Phone: "0372-035188", + Orders: [ + { + OrderID: 11021, + EmployeeID: 3, + OrderDate: new Date("1998-04-14T00:00:00"), + RequiredDate: new Date("1998-05-12T00:00:00"), + ShippedDate: new Date("1998-04-21T00:00:00"), + ShipVia: 1, + Freight: 297.1800, + ShipName: "QUICK-Stop", + ShipAddress: "Taucherstraße 10", + ShipCity: "Cunewalde", + ShipPostalCode: "01307", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 11, + Discount: 2.5000000e-001 + }, { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 63, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 44, + Discount: 2.5000000e-001 + }, { + ProductID: 72, + UnitPrice: 34.8000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 11022, + EmployeeID: 9, + OrderDate: new Date("1998-04-14T00:00:00"), + RequiredDate: new Date("1998-05-12T00:00:00"), + ShippedDate: new Date("1998-05-04T00:00:00"), + ShipVia: 2, + Freight: 6.2700, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BSBEV", + CompanyName: "B's Beverages", + ContactName: "Victoria Ashworth", + ContactTitle: "Sales Representative", + Address: "Fauntleroy Circus", + City: "London", + PostalCode: "EC2 5NT", + Country: "UK", + Phone: "(171) 555-1212", + Orders: [ + { + OrderID: 11023, + EmployeeID: 1, + OrderDate: new Date("1998-04-14T00:00:00"), + RequiredDate: new Date("1998-04-28T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 2, + Freight: 123.8300, + ShipName: "B's Beverages", + ShipAddress: "Fauntleroy Circus", + ShipCity: "London", + ShipPostalCode: "EC2 5NT", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 11024, + EmployeeID: 4, + OrderDate: new Date("1998-04-15T00:00:00"), + RequiredDate: new Date("1998-05-13T00:00:00"), + ShippedDate: new Date("1998-04-20T00:00:00"), + ShipVia: 1, + Freight: 74.3600, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 26, + UnitPrice: 31.2300, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 65, + UnitPrice: 21.0500, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WARTH", + CompanyName: "Wartian Herkku", + ContactName: "Pirkko Koskitalo", + ContactTitle: "Accounting Manager", + Address: "Torikatu 38", + City: "Oulu", + PostalCode: "90110", + Country: "Finland", + Phone: "981-443655", + Fax: "981-443655", + Orders: [ + { + OrderID: 11025, + EmployeeID: 6, + OrderDate: new Date("1998-04-15T00:00:00"), + RequiredDate: new Date("1998-05-13T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 3, + Freight: 29.1700, + ShipName: "Wartian Herkku", + ShipAddress: "Torikatu 38", + ShipCity: "Oulu", + ShipPostalCode: "90110", + ShipCountry: "Finland", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 1.0000000e-001 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 20, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 11026, + EmployeeID: 4, + OrderDate: new Date("1998-04-15T00:00:00"), + RequiredDate: new Date("1998-05-13T00:00:00"), + ShippedDate: new Date("1998-04-28T00:00:00"), + ShipVia: 1, + Freight: 47.0900, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 11027, + EmployeeID: 1, + OrderDate: new Date("1998-04-16T00:00:00"), + RequiredDate: new Date("1998-05-14T00:00:00"), + ShippedDate: new Date("1998-04-20T00:00:00"), + ShipVia: 1, + Freight: 52.5200, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 30, + Discount: 2.5000000e-001 + }, { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 21, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "KOENE", + CompanyName: "Königlich Essen", + ContactName: "Philip Cramer", + ContactTitle: "Sales Associate", + Address: "Maubelstr. 90", + City: "Brandenburg", + PostalCode: "14776", + Country: "Germany", + Phone: "0555-09876", + Orders: [ + { + OrderID: 11028, + EmployeeID: 2, + OrderDate: new Date("1998-04-16T00:00:00"), + RequiredDate: new Date("1998-05-14T00:00:00"), + ShippedDate: new Date("1998-04-22T00:00:00"), + ShipVia: 1, + Freight: 29.5900, + ShipName: "Königlich Essen", + ShipAddress: "Maubelstr. 90", + ShipCity: "Brandenburg", + ShipPostalCode: "14776", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 11029, + EmployeeID: 4, + OrderDate: new Date("1998-04-16T00:00:00"), + RequiredDate: new Date("1998-05-14T00:00:00"), + ShippedDate: new Date("1998-04-27T00:00:00"), + ShipVia: 1, + Freight: 47.8400, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 56, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 11030, + EmployeeID: 7, + OrderDate: new Date("1998-04-17T00:00:00"), + RequiredDate: new Date("1998-05-15T00:00:00"), + ShippedDate: new Date("1998-04-27T00:00:00"), + ShipVia: 2, + Freight: 830.7500, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 100, + Discount: 2.5000000e-001 + }, { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 70, + Discount: 0.0000000e+000 + }, { + ProductID: 29, + UnitPrice: 123.7900, + Quantity: 60, + Discount: 2.5000000e-001 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 100, + Discount: 2.5000000e-001 + } + ] + }, { + OrderID: 11031, + EmployeeID: 6, + OrderDate: new Date("1998-04-17T00:00:00"), + RequiredDate: new Date("1998-05-15T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 2, + Freight: 227.2200, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 45, + Discount: 0.0000000e+000 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 80, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 16, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 11032, + EmployeeID: 2, + OrderDate: new Date("1998-04-17T00:00:00"), + RequiredDate: new Date("1998-05-15T00:00:00"), + ShippedDate: new Date("1998-04-23T00:00:00"), + ShipVia: 3, + Freight: 606.1900, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 36, + UnitPrice: 19.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 38, + UnitPrice: 263.5000, + Quantity: 25, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 11033, + EmployeeID: 7, + OrderDate: new Date("1998-04-17T00:00:00"), + RequiredDate: new Date("1998-05-15T00:00:00"), + ShippedDate: new Date("1998-04-23T00:00:00"), + ShipVia: 3, + Freight: 84.7400, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 70, + Discount: 1.0000000e-001 + }, { + ProductID: 69, + UnitPrice: 36.0000, + Quantity: 36, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "OLDWO", + CompanyName: "Old World Delicatessen", + ContactName: "Rene Phillips", + ContactTitle: "Sales Representative", + Address: "2743 Bering St.", + City: "Anchorage", + Region: "AK", + PostalCode: "99508", + Country: "USA", + Phone: "(907) 555-7584", + Fax: "(907) 555-2880", + Orders: [ + { + OrderID: 11034, + EmployeeID: 8, + OrderDate: new Date("1998-04-20T00:00:00"), + RequiredDate: new Date("1998-06-01T00:00:00"), + ShippedDate: new Date("1998-04-27T00:00:00"), + ShipVia: 1, + Freight: 40.3200, + ShipName: "Old World Delicatessen", + ShipAddress: "2743 Bering St.", + ShipCity: "Anchorage", + ShipRegion: "AK", + ShipPostalCode: "99508", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 15, + Discount: 1.0000000e-001 + }, { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 6, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 11035, + EmployeeID: 2, + OrderDate: new Date("1998-04-20T00:00:00"), + RequiredDate: new Date("1998-05-18T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 2, + Freight: 0.1700, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 42, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 11036, + EmployeeID: 8, + OrderDate: new Date("1998-04-20T00:00:00"), + RequiredDate: new Date("1998-05-18T00:00:00"), + ShippedDate: new Date("1998-04-22T00:00:00"), + ShipVia: 3, + Freight: 149.4700, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 7, + Discount: 0.0000000e+000 + }, { + ProductID: 59, + UnitPrice: 55.0000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GODOS", + CompanyName: "Godos Cocina Típica", + ContactName: "José Pedro Freyre", + ContactTitle: "Sales Manager", + Address: "C\/ Romero, 33", + City: "Sevilla", + PostalCode: "41101", + Country: "Spain", + Phone: "(95) 555 82 82", + Orders: [ + { + OrderID: 11037, + EmployeeID: 7, + OrderDate: new Date("1998-04-21T00:00:00"), + RequiredDate: new Date("1998-05-19T00:00:00"), + ShippedDate: new Date("1998-04-27T00:00:00"), + ShipVia: 1, + Freight: 3.2000, + ShipName: "Godos Cocina Típica", + ShipAddress: "C\/ Romero, 33", + ShipCity: "Sevilla", + ShipPostalCode: "41101", + ShipCountry: "Spain", + OrderDetails: [ + { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SUPRD", + CompanyName: "Suprêmes délices", + ContactName: "Pascale Cartrain", + ContactTitle: "Accounting Manager", + Address: "Boulevard Tirou, 255", + City: "Charleroi", + PostalCode: "B-6000", + Country: "Belgium", + Phone: "(071) 23 67 22 20", + Fax: "(071) 23 67 22 21", + Orders: [ + { + OrderID: 11038, + EmployeeID: 1, + OrderDate: new Date("1998-04-21T00:00:00"), + RequiredDate: new Date("1998-05-19T00:00:00"), + ShippedDate: new Date("1998-04-30T00:00:00"), + ShipVia: 2, + Freight: 29.5900, + ShipName: "Suprêmes délices", + ShipAddress: "Boulevard Tirou, 255", + ShipCity: "Charleroi", + ShipPostalCode: "B-6000", + ShipCountry: "Belgium", + OrderDetails: [ + { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 5, + Discount: 2.0000000e-001 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 71, + UnitPrice: 21.5000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LINOD", + CompanyName: "LINO-Delicateses", + ContactName: "Felipe Izquierdo", + ContactTitle: "Owner", + Address: "Ave. 5 de Mayo Porlamar", + City: "I. de Margarita", + Region: "Nueva Esparta", + PostalCode: "4980", + Country: "Venezuela", + Phone: "(8) 34-56-12", + Fax: "(8) 34-93-93", + Orders: [ + { + OrderID: 11039, + EmployeeID: 1, + OrderDate: new Date("1998-04-21T00:00:00"), + RequiredDate: new Date("1998-05-19T00:00:00"), + ShipVia: 2, + Freight: 65.0000, + ShipName: "LINO-Delicateses", + ShipAddress: "Ave. 5 de Mayo Porlamar", + ShipCity: "I. de Margarita", + ShipRegion: "Nueva Esparta", + ShipPostalCode: "4980", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 24, + Discount: 0.0000000e+000 + }, { + ProductID: 49, + UnitPrice: 20.0000, + Quantity: 60, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 28, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 11040, + EmployeeID: 4, + OrderDate: new Date("1998-04-22T00:00:00"), + RequiredDate: new Date("1998-05-20T00:00:00"), + ShipVia: 3, + Freight: 18.8400, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "CHOPS", + CompanyName: "Chop-suey Chinese", + ContactName: "Yang Wang", + ContactTitle: "Owner", + Address: "Hauptstr. 29", + City: "Bern", + PostalCode: "3012", + Country: "Switzerland", + Phone: "0452-076545", + Orders: [ + { + OrderID: 11041, + EmployeeID: 3, + OrderDate: new Date("1998-04-22T00:00:00"), + RequiredDate: new Date("1998-05-20T00:00:00"), + ShippedDate: new Date("1998-04-28T00:00:00"), + ShipVia: 2, + Freight: 48.2200, + ShipName: "Chop-suey Chinese", + ShipAddress: "Hauptstr. 31", + ShipCity: "Bern", + ShipPostalCode: "3012", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 63, + UnitPrice: 43.9000, + Quantity: 30, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "COMMI", + CompanyName: "Comércio Mineiro", + ContactName: "Pedro Afonso", + ContactTitle: "Sales Associate", + Address: "Av. dos Lusíadas, 23", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05432-043", + Country: "Brazil", + Phone: "(11) 555-7647", + Orders: [ + { + OrderID: 11042, + EmployeeID: 2, + OrderDate: new Date("1998-04-22T00:00:00"), + RequiredDate: new Date("1998-05-06T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 1, + Freight: 29.9900, + ShipName: "Comércio Mineiro", + ShipAddress: "Av. dos Lusíadas, 23", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05432-043", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 44, + UnitPrice: 19.4500, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SPECD", + CompanyName: "Spécialités du monde", + ContactName: "Dominique Perrier", + ContactTitle: "Marketing Manager", + Address: "25, rue Lauriston", + City: "Paris", + PostalCode: "75016", + Country: "France", + Phone: "(1) 47.55.60.10", + Fax: "(1) 47.55.60.20", + Orders: [ + { + OrderID: 11043, + EmployeeID: 5, + OrderDate: new Date("1998-04-22T00:00:00"), + RequiredDate: new Date("1998-05-20T00:00:00"), + ShippedDate: new Date("1998-04-29T00:00:00"), + ShipVia: 2, + Freight: 8.8000, + ShipName: "Spécialités du monde", + ShipAddress: "25, rue Lauriston", + ShipCity: "Paris", + ShipPostalCode: "75016", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WOLZA", + CompanyName: "Wolski Zajazd", + ContactName: "Zbyszek Piestrzeniewicz", + ContactTitle: "Owner", + Address: "ul. Filtrowa 68", + City: "Warszawa", + PostalCode: "01-012", + Country: "Poland", + Phone: "(26) 642-7012", + Fax: "(26) 642-7012", + Orders: [ + { + OrderID: 11044, + EmployeeID: 4, + OrderDate: new Date("1998-04-23T00:00:00"), + RequiredDate: new Date("1998-05-21T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 1, + Freight: 8.7200, + ShipName: "Wolski Zajazd", + ShipAddress: "ul. Filtrowa 68", + ShipCity: "Warszawa", + ShipPostalCode: "01-012", + ShipCountry: "Poland", + OrderDetails: [ + { + ProductID: 62, + UnitPrice: 49.3000, + Quantity: 12, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 11045, + EmployeeID: 6, + OrderDate: new Date("1998-04-23T00:00:00"), + RequiredDate: new Date("1998-05-21T00:00:00"), + ShipVia: 2, + Freight: 70.5800, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 24, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "WANDK", + CompanyName: "Die Wandernde Kuh", + ContactName: "Rita Müller", + ContactTitle: "Sales Representative", + Address: "Adenauerallee 900", + City: "Stuttgart", + PostalCode: "70563", + Country: "Germany", + Phone: "0711-020361", + Fax: "0711-035428", + Orders: [ + { + OrderID: 11046, + EmployeeID: 8, + OrderDate: new Date("1998-04-23T00:00:00"), + RequiredDate: new Date("1998-05-21T00:00:00"), + ShippedDate: new Date("1998-04-24T00:00:00"), + ShipVia: 2, + Freight: 71.6400, + ShipName: "Die Wandernde Kuh", + ShipAddress: "Adenauerallee 900", + ShipCity: "Stuttgart", + ShipPostalCode: "70563", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 20, + Discount: 5.0000001e-002 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 35, + UnitPrice: 18.0000, + Quantity: 18, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 11047, + EmployeeID: 7, + OrderDate: new Date("1998-04-24T00:00:00"), + RequiredDate: new Date("1998-05-22T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 3, + Freight: 46.6200, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 25, + Discount: 2.5000000e-001 + }, { + ProductID: 5, + UnitPrice: 21.3500, + Quantity: 30, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "BOTTM", + CompanyName: "Bottom-Dollar Markets", + ContactName: "Elizabeth Lincoln", + ContactTitle: "Accounting Manager", + Address: "23 Tsawassen Blvd.", + City: "Tsawassen", + Region: "BC", + PostalCode: "T2F 8M4", + Country: "Canada", + Phone: "(604) 555-4729", + Fax: "(604) 555-3745", + Orders: [ + { + OrderID: 11048, + EmployeeID: 7, + OrderDate: new Date("1998-04-24T00:00:00"), + RequiredDate: new Date("1998-05-22T00:00:00"), + ShippedDate: new Date("1998-04-30T00:00:00"), + ShipVia: 3, + Freight: 24.1200, + ShipName: "Bottom-Dollar Markets", + ShipAddress: "23 Tsawassen Blvd.", + ShipCity: "Tsawassen", + ShipRegion: "BC", + ShipPostalCode: "T2F 8M4", + ShipCountry: "Canada", + OrderDetails: [ + { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 42, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GOURL", + CompanyName: "Gourmet Lanchonetes", + ContactName: "André Fonseca", + ContactTitle: "Sales Associate", + Address: "Av. Brasil, 442", + City: "Campinas", + Region: "SP", + PostalCode: "04876-786", + Country: "Brazil", + Phone: "(11) 555-9482", + Orders: [ + { + OrderID: 11049, + EmployeeID: 3, + OrderDate: new Date("1998-04-24T00:00:00"), + RequiredDate: new Date("1998-05-22T00:00:00"), + ShippedDate: new Date("1998-05-04T00:00:00"), + ShipVia: 1, + Freight: 8.3400, + ShipName: "Gourmet Lanchonetes", + ShipAddress: "Av. Brasil, 442", + ShipCity: "Campinas", + ShipRegion: "SP", + ShipPostalCode: "04876-786", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 4, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "FOLKO", + CompanyName: "Folk och fä HB", + ContactName: "Maria Larsson", + ContactTitle: "Owner", + Address: "Åkergatan 24", + City: "Bräcke", + PostalCode: "S-844 67", + Country: "Sweden", + Phone: "0695-34 67 21", + Orders: [ + { + OrderID: 11050, + EmployeeID: 8, + OrderDate: new Date("1998-04-27T00:00:00"), + RequiredDate: new Date("1998-05-25T00:00:00"), + ShippedDate: new Date("1998-05-05T00:00:00"), + ShipVia: 2, + Freight: 59.4100, + ShipName: "Folk och fä HB", + ShipAddress: "Åkergatan 24", + ShipCity: "Bräcke", + ShipPostalCode: "S-844 67", + ShipCountry: "Sweden", + OrderDetails: [ + { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 50, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "LAMAI", + CompanyName: "La maison d'Asie", + ContactName: "Annette Roulet", + ContactTitle: "Sales Manager", + Address: "1 rue Alsace-Lorraine", + City: "Toulouse", + PostalCode: "31000", + Country: "France", + Phone: "61.77.61.10", + Fax: "61.77.61.11", + Orders: [ + { + OrderID: 11051, + EmployeeID: 7, + OrderDate: new Date("1998-04-27T00:00:00"), + RequiredDate: new Date("1998-05-25T00:00:00"), + ShipVia: 3, + Freight: 2.7900, + ShipName: "La maison d'Asie", + ShipAddress: "1 rue Alsace-Lorraine", + ShipCity: "Toulouse", + ShipPostalCode: "31000", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HANAR", + CompanyName: "Hanari Carnes", + ContactName: "Mario Pontes", + ContactTitle: "Accounting Manager", + Address: "Rua do Paço, 67", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "05454-876", + Country: "Brazil", + Phone: "(21) 555-0091", + Fax: "(21) 555-8765", + Orders: [ + { + OrderID: 11052, + EmployeeID: 3, + OrderDate: new Date("1998-04-27T00:00:00"), + RequiredDate: new Date("1998-05-25T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 1, + Freight: 67.2600, + ShipName: "Hanari Carnes", + ShipAddress: "Rua do Paço, 67", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "05454-876", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 30, + Discount: 2.0000000e-001 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 10, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "PICCO", + CompanyName: "Piccolo und mehr", + ContactName: "Georg Pipps", + ContactTitle: "Sales Manager", + Address: "Geislweg 14", + City: "Salzburg", + PostalCode: "5020", + Country: "Austria", + Phone: "6562-9722", + Fax: "6562-9723", + Orders: [ + { + OrderID: 11053, + EmployeeID: 2, + OrderDate: new Date("1998-04-27T00:00:00"), + RequiredDate: new Date("1998-05-25T00:00:00"), + ShippedDate: new Date("1998-04-29T00:00:00"), + ShipVia: 2, + Freight: 53.0500, + ShipName: "Piccolo und mehr", + ShipAddress: "Geislweg 14", + ShipCity: "Salzburg", + ShipPostalCode: "5020", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 18, + UnitPrice: 62.5000, + Quantity: 35, + Discount: 2.0000000e-001 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 25, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "CACTU", + CompanyName: "Cactus Comidas para llevar", + ContactName: "Patricio Simpson", + ContactTitle: "Sales Agent", + Address: "Cerrito 333", + City: "Buenos Aires", + PostalCode: "1010", + Country: "Argentina", + Phone: "(1) 135-5555", + Fax: "(1) 135-4892", + Orders: [ + { + OrderID: 11054, + EmployeeID: 8, + OrderDate: new Date("1998-04-28T00:00:00"), + RequiredDate: new Date("1998-05-26T00:00:00"), + ShipVia: 1, + Freight: 0.3300, + ShipName: "Cactus Comidas para llevar", + ShipAddress: "Cerrito 333", + ShipCity: "Buenos Aires", + ShipPostalCode: "1010", + ShipCountry: "Argentina", + OrderDetails: [ + { + ProductID: 33, + UnitPrice: 2.5000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 67, + UnitPrice: 14.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "HILAA", + CompanyName: "HILARION-Abastos", + ContactName: "Carlos Hernández", + ContactTitle: "Sales Representative", + Address: "Carrera 22 con Ave. Carlos Soublette #8-35", + City: "San Cristóbal", + Region: "Táchira", + PostalCode: "5022", + Country: "Venezuela", + Phone: "(5) 555-1340", + Fax: "(5) 555-1948", + Orders: [ + { + OrderID: 11055, + EmployeeID: 7, + OrderDate: new Date("1998-04-28T00:00:00"), + RequiredDate: new Date("1998-05-26T00:00:00"), + ShippedDate: new Date("1998-05-05T00:00:00"), + ShipVia: 2, + Freight: 120.9200, + ShipName: "HILARION-Abastos", + ShipAddress: "Carrera 22 con Ave. Carlos Soublette #8-35", + ShipCity: "San Cristóbal", + ShipRegion: "Táchira", + ShipPostalCode: "5022", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 25, + UnitPrice: 14.0000, + Quantity: 15, + Discount: 0.0000000e+000 + }, { + ProductID: 51, + UnitPrice: 53.0000, + Quantity: 20, + Discount: 0.0000000e+000 + }, { + ProductID: 57, + UnitPrice: 19.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "EASTC", + CompanyName: "Eastern Connection", + ContactName: "Ann Devon", + ContactTitle: "Sales Agent", + Address: "35 King George", + City: "London", + PostalCode: "WX3 6FW", + Country: "UK", + Phone: "(171) 555-0297", + Fax: "(171) 555-3373", + Orders: [ + { + OrderID: 11056, + EmployeeID: 8, + OrderDate: new Date("1998-04-28T00:00:00"), + RequiredDate: new Date("1998-05-12T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 2, + Freight: 278.9600, + ShipName: "Eastern Connection", + ShipAddress: "35 King George", + ShipCity: "London", + ShipPostalCode: "WX3 6FW", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 35, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 50, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "NORTS", + CompanyName: "North\/South", + ContactName: "Simon Crowther", + ContactTitle: "Sales Associate", + Address: "South House 300 Queensbridge", + City: "London", + PostalCode: "SW7 1RZ", + Country: "UK", + Phone: "(171) 555-7733", + Fax: "(171) 555-2530", + Orders: [ + { + OrderID: 11057, + EmployeeID: 3, + OrderDate: new Date("1998-04-29T00:00:00"), + RequiredDate: new Date("1998-05-27T00:00:00"), + ShippedDate: new Date("1998-05-01T00:00:00"), + ShipVia: 3, + Freight: 4.1300, + ShipName: "North\/South", + ShipAddress: "South House 300 Queensbridge", + ShipCity: "London", + ShipPostalCode: "SW7 1RZ", + ShipCountry: "UK", + OrderDetails: [ + { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 3, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "BLAUS", + CompanyName: "Blauer See Delikatessen", + ContactName: "Hanna Moos", + ContactTitle: "Sales Representative", + Address: "Forsterstr. 57", + City: "Mannheim", + PostalCode: "68306", + Country: "Germany", + Phone: "0621-08460", + Fax: "0621-08924", + Orders: [ + { + OrderID: 11058, + EmployeeID: 9, + OrderDate: new Date("1998-04-29T00:00:00"), + RequiredDate: new Date("1998-05-27T00:00:00"), + ShipVia: 3, + Freight: 31.1400, + ShipName: "Blauer See Delikatessen", + ShipAddress: "Forsterstr. 57", + ShipCity: "Mannheim", + ShipPostalCode: "68306", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 21, + UnitPrice: 10.0000, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 21, + Discount: 0.0000000e+000 + }, { + ProductID: 61, + UnitPrice: 28.5000, + Quantity: 4, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "RICAR", + CompanyName: "Ricardo Adocicados", + ContactName: "Janete Limeira", + ContactTitle: "Assistant Sales Agent", + Address: "Av. Copacabana, 267", + City: "Rio de Janeiro", + Region: "RJ", + PostalCode: "02389-890", + Country: "Brazil", + Phone: "(21) 555-3412", + Orders: [ + { + OrderID: 11059, + EmployeeID: 2, + OrderDate: new Date("1998-04-29T00:00:00"), + RequiredDate: new Date("1998-06-10T00:00:00"), + ShipVia: 2, + Freight: 85.8000, + ShipName: "Ricardo Adocicados", + ShipAddress: "Av. Copacabana, 267", + ShipCity: "Rio de Janeiro", + ShipRegion: "RJ", + ShipPostalCode: "02389-890", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "FRANS", + CompanyName: "Franchi S.p.A.", + ContactName: "Paolo Accorti", + ContactTitle: "Sales Representative", + Address: "Via Monte Bianco 34", + City: "Torino", + PostalCode: "10100", + Country: "Italy", + Phone: "011-4988260", + Fax: "011-4988261", + Orders: [ + { + OrderID: 11060, + EmployeeID: 2, + OrderDate: new Date("1998-04-30T00:00:00"), + RequiredDate: new Date("1998-05-28T00:00:00"), + ShippedDate: new Date("1998-05-04T00:00:00"), + ShipVia: 2, + Freight: 10.9800, + ShipName: "Franchi S.p.A.", + ShipAddress: "Via Monte Bianco 34", + ShipCity: "Torino", + ShipPostalCode: "10100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 10, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "GREAL", + CompanyName: "Great Lakes Food Market", + ContactName: "Howard Snyder", + ContactTitle: "Marketing Manager", + Address: "2732 Baker Blvd.", + City: "Eugene", + Region: "OR", + PostalCode: "97403", + Country: "USA", + Phone: "(503) 555-7555", + Orders: [ + { + OrderID: 11061, + EmployeeID: 4, + OrderDate: new Date("1998-04-30T00:00:00"), + RequiredDate: new Date("1998-06-11T00:00:00"), + ShipVia: 3, + Freight: 14.0100, + ShipName: "Great Lakes Food Market", + ShipAddress: "2732 Baker Blvd.", + ShipCity: "Eugene", + ShipRegion: "OR", + ShipPostalCode: "97403", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 15, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "REGGC", + CompanyName: "Reggiani Caseifici", + ContactName: "Maurizio Moroni", + ContactTitle: "Sales Associate", + Address: "Strada Provinciale 124", + City: "Reggio Emilia", + PostalCode: "42100", + Country: "Italy", + Phone: "0522-556721", + Fax: "0522-556722", + Orders: [ + { + OrderID: 11062, + EmployeeID: 4, + OrderDate: new Date("1998-04-30T00:00:00"), + RequiredDate: new Date("1998-05-28T00:00:00"), + ShipVia: 2, + Freight: 29.9300, + ShipName: "Reggiani Caseifici", + ShipAddress: "Strada Provinciale 124", + ShipCity: "Reggio Emilia", + ShipPostalCode: "42100", + ShipCountry: "Italy", + OrderDetails: [ + { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 10, + Discount: 2.0000000e-001 + }, { + ProductID: 70, + UnitPrice: 15.0000, + Quantity: 12, + Discount: 2.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "HUNGO", + CompanyName: "Hungry Owl All-Night Grocers", + ContactName: "Patricia McKenna", + ContactTitle: "Sales Associate", + Address: "8 Johnstown Road", + City: "Cork", + Region: "Co. Cork", + Country: "Ireland", + Phone: "2967 542", + Fax: "2967 3333", + Orders: [ + { + OrderID: 11063, + EmployeeID: 3, + OrderDate: new Date("1998-04-30T00:00:00"), + RequiredDate: new Date("1998-05-28T00:00:00"), + ShippedDate: new Date("1998-05-06T00:00:00"), + ShipVia: 2, + Freight: 81.7300, + ShipName: "Hungry Owl All-Night Grocers", + ShipAddress: "8 Johnstown Road", + ShipCity: "Cork", + ShipRegion: "Co. Cork", + ShipCountry: "Ireland", + OrderDetails: [ + { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 30, + Discount: 0.0000000e+000 + }, { + ProductID: 40, + UnitPrice: 18.4000, + Quantity: 40, + Discount: 1.0000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 30, + Discount: 1.0000000e-001 + } + ] + } + ] + }, { + CustomerID: "SAVEA", + CompanyName: "Save-a-lot Markets", + ContactName: "Jose Pavarotti", + ContactTitle: "Sales Representative", + Address: "187 Suffolk Ln.", + City: "Boise", + Region: "ID", + PostalCode: "83720", + Country: "USA", + Phone: "(208) 555-8097", + Orders: [ + { + OrderID: 11064, + EmployeeID: 1, + OrderDate: new Date("1998-05-01T00:00:00"), + RequiredDate: new Date("1998-05-29T00:00:00"), + ShippedDate: new Date("1998-05-04T00:00:00"), + ShipVia: 1, + Freight: 30.0900, + ShipName: "Save-a-lot Markets", + ShipAddress: "187 Suffolk Ln.", + ShipCity: "Boise", + ShipRegion: "ID", + ShipPostalCode: "83720", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 17, + UnitPrice: 39.0000, + Quantity: 77, + Discount: 1.0000000e-001 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 12, + Discount: 0.0000000e+000 + }, { + ProductID: 53, + UnitPrice: 32.8000, + Quantity: 25, + Discount: 1.0000000e-001 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 4, + Discount: 1.0000000e-001 + }, { + ProductID: 68, + UnitPrice: 12.5000, + Quantity: 55, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 11065, + EmployeeID: 8, + OrderDate: new Date("1998-05-01T00:00:00"), + RequiredDate: new Date("1998-05-29T00:00:00"), + ShipVia: 1, + Freight: 12.9100, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 30, + UnitPrice: 25.8900, + Quantity: 4, + Discount: 2.5000000e-001 + }, { + ProductID: 54, + UnitPrice: 7.4500, + Quantity: 20, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "WHITC", + CompanyName: "White Clover Markets", + ContactName: "Karl Jablonski", + ContactTitle: "Owner", + Address: "305 - 14th Ave. S. Suite 3B", + City: "Seattle", + Region: "WA", + PostalCode: "98128", + Country: "USA", + Phone: "(206) 555-4112", + Fax: "(206) 555-4115", + Orders: [ + { + OrderID: 11066, + EmployeeID: 7, + OrderDate: new Date("1998-05-01T00:00:00"), + RequiredDate: new Date("1998-05-29T00:00:00"), + ShippedDate: new Date("1998-05-04T00:00:00"), + ShipVia: 2, + Freight: 44.7200, + ShipName: "White Clover Markets", + ShipAddress: "1029 - 12th Ave. S.", + ShipCity: "Seattle", + ShipRegion: "WA", + ShipPostalCode: "98124", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 42, + Discount: 0.0000000e+000 + }, { + ProductID: 34, + UnitPrice: 14.0000, + Quantity: 35, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "DRACD", + CompanyName: "Drachenblut Delikatessen", + ContactName: "Sven Ottlieb", + ContactTitle: "Order Administrator", + Address: "Walserweg 21", + City: "Aachen", + PostalCode: "52066", + Country: "Germany", + Phone: "0241-039123", + Fax: "0241-059428", + Orders: [ + { + OrderID: 11067, + EmployeeID: 1, + OrderDate: new Date("1998-05-04T00:00:00"), + RequiredDate: new Date("1998-05-18T00:00:00"), + ShippedDate: new Date("1998-05-06T00:00:00"), + ShipVia: 2, + Freight: 7.9800, + ShipName: "Drachenblut Delikatessen", + ShipAddress: "Walserweg 21", + ShipCity: "Aachen", + ShipPostalCode: "52066", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 9, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "QUEEN", + CompanyName: "Queen Cozinha", + ContactName: "Lúcia Carvalho", + ContactTitle: "Marketing Assistant", + Address: "Alameda dos Canàrios, 891", + City: "Sao Paulo", + Region: "SP", + PostalCode: "05487-020", + Country: "Brazil", + Phone: "(11) 555-1189", + Orders: [ + { + OrderID: 11068, + EmployeeID: 8, + OrderDate: new Date("1998-05-04T00:00:00"), + RequiredDate: new Date("1998-06-01T00:00:00"), + ShipVia: 2, + Freight: 81.7500, + ShipName: "Queen Cozinha", + ShipAddress: "Alameda dos Canàrios, 891", + ShipCity: "Sao Paulo", + ShipRegion: "SP", + ShipPostalCode: "05487-020", + ShipCountry: "Brazil", + OrderDetails: [ + { + ProductID: 28, + UnitPrice: 45.6000, + Quantity: 8, + Discount: 1.5000001e-001 + }, { + ProductID: 43, + UnitPrice: 46.0000, + Quantity: 36, + Discount: 1.5000001e-001 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 28, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "TORTU", + CompanyName: "Tortuga Restaurante", + ContactName: "Miguel Angel Paolino", + ContactTitle: "Owner", + Address: "Avda. Azteca 123", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 555-2933", + Orders: [ + { + OrderID: 11069, + EmployeeID: 1, + OrderDate: new Date("1998-05-04T00:00:00"), + RequiredDate: new Date("1998-06-01T00:00:00"), + ShippedDate: new Date("1998-05-06T00:00:00"), + ShipVia: 2, + Freight: 15.6700, + ShipName: "Tortuga Restaurante", + ShipAddress: "Avda. Azteca 123", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LEHMS", + CompanyName: "Lehmanns Marktstand", + ContactName: "Renate Messner", + ContactTitle: "Sales Representative", + Address: "Magazinweg 7", + City: "Frankfurt a.M.", + PostalCode: "60528", + Country: "Germany", + Phone: "069-0245984", + Fax: "069-0245874", + Orders: [ + { + OrderID: 11070, + EmployeeID: 2, + OrderDate: new Date("1998-05-05T00:00:00"), + RequiredDate: new Date("1998-06-02T00:00:00"), + ShipVia: 1, + Freight: 136.0000, + ShipName: "Lehmanns Marktstand", + ShipAddress: "Magazinweg 7", + ShipCity: "Frankfurt a.M.", + ShipPostalCode: "60528", + ShipCountry: "Germany", + OrderDetails: [ + { + ProductID: 1, + UnitPrice: 18.0000, + Quantity: 40, + Discount: 1.5000001e-001 + }, { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 20, + Discount: 1.5000001e-001 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 31, + UnitPrice: 12.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "LILAS", + CompanyName: "LILA-Supermercado", + ContactName: "Carlos González", + ContactTitle: "Accounting Manager", + Address: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + City: "Barquisimeto", + Region: "Lara", + PostalCode: "3508", + Country: "Venezuela", + Phone: "(9) 331-6954", + Fax: "(9) 331-7256", + Orders: [ + { + OrderID: 11071, + EmployeeID: 1, + OrderDate: new Date("1998-05-05T00:00:00"), + RequiredDate: new Date("1998-06-02T00:00:00"), + ShipVia: 1, + Freight: 0.9300, + ShipName: "LILA-Supermercado", + ShipAddress: "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", + ShipCity: "Barquisimeto", + ShipRegion: "Lara", + ShipPostalCode: "3508", + ShipCountry: "Venezuela", + OrderDetails: [ + { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 15, + Discount: 5.0000001e-002 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 10, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "ERNSH", + CompanyName: "Ernst Handel", + ContactName: "Roland Mendel", + ContactTitle: "Sales Manager", + Address: "Kirchgasse 6", + City: "Graz", + PostalCode: "8010", + Country: "Austria", + Phone: "7675-3425", + Fax: "7675-3426", + Orders: [ + { + OrderID: 11072, + EmployeeID: 4, + OrderDate: new Date("1998-05-05T00:00:00"), + RequiredDate: new Date("1998-06-02T00:00:00"), + ShipVia: 2, + Freight: 258.6400, + ShipName: "Ernst Handel", + ShipAddress: "Kirchgasse 6", + ShipCity: "Graz", + ShipPostalCode: "8010", + ShipCountry: "Austria", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 8, + Discount: 0.0000000e+000 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 40, + Discount: 0.0000000e+000 + }, { + ProductID: 50, + UnitPrice: 16.2500, + Quantity: 22, + Discount: 0.0000000e+000 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 130, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "PERIC", + CompanyName: "Pericles Comidas clásicas", + ContactName: "Guillermo Fernández", + ContactTitle: "Sales Representative", + Address: "Calle Dr. Jorge Cash 321", + City: "México D.F.", + PostalCode: "05033", + Country: "Mexico", + Phone: "(5) 552-3745", + Fax: "(5) 545-3745", + Orders: [ + { + OrderID: 11073, + EmployeeID: 2, + OrderDate: new Date("1998-05-05T00:00:00"), + RequiredDate: new Date("1998-06-02T00:00:00"), + ShipVia: 2, + Freight: 24.9500, + ShipName: "Pericles Comidas clásicas", + ShipAddress: "Calle Dr. Jorge Cash 321", + ShipCity: "México D.F.", + ShipPostalCode: "05033", + ShipCountry: "Mexico", + OrderDetails: [ + { + ProductID: 11, + UnitPrice: 21.0000, + Quantity: 10, + Discount: 0.0000000e+000 + }, { + ProductID: 24, + UnitPrice: 4.5000, + Quantity: 20, + Discount: 0.0000000e+000 + } + ] + } + ] + }, { + CustomerID: "SIMOB", + CompanyName: "Simons bistro", + ContactName: "Jytte Petersen", + ContactTitle: "Owner", + Address: "Vinbæltet 34", + City: "Kobenhavn", + PostalCode: "1734", + Country: "Denmark", + Phone: "31 12 34 56", + Fax: "31 13 35 57", + Orders: [ + { + OrderID: 11074, + EmployeeID: 7, + OrderDate: new Date("1998-05-06T00:00:00"), + RequiredDate: new Date("1998-06-03T00:00:00"), + ShipVia: 2, + Freight: 18.4400, + ShipName: "Simons bistro", + ShipAddress: "Vinbæltet 34", + ShipCity: "Kobenhavn", + ShipPostalCode: "1734", + ShipCountry: "Denmark", + OrderDetails: [ + { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 14, + Discount: 5.0000001e-002 + } + ] + } + ] + }, { + CustomerID: "RICSU", + CompanyName: "Richter Supermarkt", + ContactName: "Michael Holz", + ContactTitle: "Sales Manager", + Address: "Grenzacherweg 237", + City: "Genève", + PostalCode: "1203", + Country: "Switzerland", + Phone: "0897-034214", + Orders: [ + { + OrderID: 11075, + EmployeeID: 8, + OrderDate: new Date("1998-05-06T00:00:00"), + RequiredDate: new Date("1998-06-03T00:00:00"), + ShipVia: 2, + Freight: 6.1900, + ShipName: "Richter Supermarkt", + ShipAddress: "Starenweg 5", + ShipCity: "Genève", + ShipPostalCode: "1204", + ShipCountry: "Switzerland", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 10, + Discount: 1.5000001e-001 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 30, + Discount: 1.5000001e-001 + }, { + ProductID: 76, + UnitPrice: 18.0000, + Quantity: 2, + Discount: 1.5000001e-001 + } + ] + } + ] + }, { + CustomerID: "BONAP", + CompanyName: "Bon app'", + ContactName: "Laurence Lebihan", + ContactTitle: "Owner", + Address: "12, rue des Bouchers", + City: "Marseille", + PostalCode: "13008", + Country: "France", + Phone: "91.24.45.40", + Fax: "91.24.45.41", + Orders: [ + { + OrderID: 11076, + EmployeeID: 4, + OrderDate: new Date("1998-05-06T00:00:00"), + RequiredDate: new Date("1998-06-03T00:00:00"), + ShipVia: 2, + Freight: 38.2800, + ShipName: "Bon app'", + ShipAddress: "12, rue des Bouchers", + ShipCity: "Marseille", + ShipPostalCode: "13008", + ShipCountry: "France", + OrderDetails: [ + { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 20, + Discount: 2.5000000e-001 + }, { + ProductID: 19, + UnitPrice: 9.2000, + Quantity: 10, + Discount: 2.5000000e-001 + } + ] + } + ] + }, { + CustomerID: "RATTC", + CompanyName: "Rattlesnake Canyon Grocery", + ContactName: "Paula Wilson", + ContactTitle: "Assistant Sales Representative", + Address: "2817 Milton Dr.", + City: "Albuquerque", + Region: "NM", + PostalCode: "87110", + Country: "USA", + Phone: "(505) 555-5939", + Fax: "(505) 555-3620", + Orders: [ + { + OrderID: 11077, + EmployeeID: 1, + OrderDate: new Date("1998-05-06T00:00:00"), + RequiredDate: new Date("1998-06-03T00:00:00"), + ShipVia: 2, + Freight: 8.5300, + ShipName: "Rattlesnake Canyon Grocery", + ShipAddress: "2817 Milton Dr.", + ShipCity: "Albuquerque", + ShipRegion: "NM", + ShipPostalCode: "87110", + ShipCountry: "USA", + OrderDetails: [ + { + ProductID: 2, + UnitPrice: 19.0000, + Quantity: 24, + Discount: 2.0000000e-001 + }, { + ProductID: 3, + UnitPrice: 10.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 4, + UnitPrice: 22.0000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 6, + UnitPrice: 25.0000, + Quantity: 1, + Discount: 2.0000000e-002 + }, { + ProductID: 7, + UnitPrice: 30.0000, + Quantity: 1, + Discount: 5.0000001e-002 + }, { + ProductID: 8, + UnitPrice: 40.0000, + Quantity: 2, + Discount: 1.0000000e-001 + }, { + ProductID: 10, + UnitPrice: 31.0000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 12, + UnitPrice: 38.0000, + Quantity: 2, + Discount: 5.0000001e-002 + }, { + ProductID: 13, + UnitPrice: 6.0000, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 14, + UnitPrice: 23.2500, + Quantity: 1, + Discount: 2.9999999e-002 + }, { + ProductID: 16, + UnitPrice: 17.4500, + Quantity: 2, + Discount: 2.9999999e-002 + }, { + ProductID: 20, + UnitPrice: 81.0000, + Quantity: 1, + Discount: 3.9999999e-002 + }, { + ProductID: 23, + UnitPrice: 9.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 32, + UnitPrice: 32.0000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 39, + UnitPrice: 18.0000, + Quantity: 2, + Discount: 5.0000001e-002 + }, { + ProductID: 41, + UnitPrice: 9.6500, + Quantity: 3, + Discount: 0.0000000e+000 + }, { + ProductID: 46, + UnitPrice: 12.0000, + Quantity: 3, + Discount: 2.0000000e-002 + }, { + ProductID: 52, + UnitPrice: 7.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 55, + UnitPrice: 24.0000, + Quantity: 2, + Discount: 0.0000000e+000 + }, { + ProductID: 60, + UnitPrice: 34.0000, + Quantity: 2, + Discount: 5.9999999e-002 + }, { + ProductID: 64, + UnitPrice: 33.2500, + Quantity: 2, + Discount: 2.9999999e-002 + }, { + ProductID: 66, + UnitPrice: 17.0000, + Quantity: 1, + Discount: 0.0000000e+000 + }, { + ProductID: 73, + UnitPrice: 15.0000, + Quantity: 2, + Discount: 9.9999998e-003 + }, { + ProductID: 75, + UnitPrice: 7.7500, + Quantity: 4, + Discount: 0.0000000e+000 + }, { + ProductID: 77, + UnitPrice: 13.0000, + Quantity: 2, + Discount: 0.0000000e+000 + } + ] + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/singer.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/singer.ts new file mode 100644 index 000000000..7bc9bb80a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/singer.ts @@ -0,0 +1,35 @@ +// tslint:disable:interface-name +export interface Song { + TrackNumber: number; + Title: string; + Released?: Date; + Genre: string; + Album: string; +} +export interface Tour { + Tour: string; + StartedOn: string; + Location: string; + Headliner: string; + TouredBy: string; +} +export interface Album { + Album: string; + LaunchDate: Date; + BillboardReview: number; + USBillboard200: number; + Artist: string; + Songs?: Song[]; +} + +export interface Singer { + ID: number; + Artist: string; + Photo?: string; + Debut: number; + GrammyNominations: number; + GrammyAwards: number; + HasGrammyAward: boolean; + Tours?: Tour[]; + Albums?: Album[]; +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/index.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/index.ts new file mode 100644 index 000000000..99df5d749 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-batch-editing/index.ts @@ -0,0 +1,21 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Hierarchical Grid With Batch Editing"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "hierarchical-grid-batch-editing"; + this.projectType = "igx-ts"; + this.name = "Hierarchical Grid With Batch Editing"; + this.description = "IgxHierarchicalGrid with batch editing"; + this.dependencies = [ + { + import: ["IgxGridModule", "IgxHierarchicalGridModule", "IgxDialogModule"], + from: "<%=igxPackage%>" + } + ]; + } +} +module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..b7a5e794f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,41 @@ +

A customizable IgxHierarchicalGrid with predefined features
+ You can read more about configuring the igx-hierarchical- grid component in the + README or the + official documentation. +

+ +<%=selectedFeatures%> +> + > + <%=artistPin%> + + > + <%=grammyPin%> + + > + > + <%=nominationsPin%> + + + <%=awardsPin%> + <%=additionalMarkup%> + > + > + <%=albumPin%> + + > + <%=launchPin%> + + > + > + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..d34f838bf --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,31 @@ +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fontawesome.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-regular.css"); +@import url("https://unpkg.com/@fortawesome/fontawesome-free-webfonts@^1.0.9/css/fa-solid.css"); + +.igx-grid__th--pinned { + .pin-icon { + color: #444; + &:hover { + color: #999; + } + } +} + +.title-inner { + display: flex; + justify-content: space-between; + align-items: center; +} + +.pin-icon { + margin-left: 8px; + font-size: 14px; + cursor: pointer; + display: flex; + align-items: center; + color: #999; + + &:hover { + color: #444; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..0c1f3c3e7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxHierarchicalGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component ], + imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..078037a12 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { ColumnType } from '<%=igxPackage%>'; +import { ARTISTS, Artist } from './data'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public localData: Artist[] = ARTISTS; + + public toggleColumn(col: ColumnType, event: MouseEvent): void { + col.pinned ? col.unpin() : col.pin(); + event.stopPropagation(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/data.ts new file mode 100644 index 000000000..300fa1f90 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/data.ts @@ -0,0 +1,1038 @@ +export interface Artist { + Artist: string; + HasGrammyAward: boolean; + Debut: number; + GrammyNominations: number; + GrammyAwards: number; + Albums?: Album[]; +} + +export interface Album { + Album: string; + LaunchDate: Date; + BillboardReview: number; + USBillboard200: number; + Artist: string; + Songs?: Song[]; +} + +export interface Song { + TrackNumber: string; + Title: string; + Released: string; + Genre: string; + Album: string; +} + +export const ARTISTS: Artist[] = [ + { + Artist: "Naomí Yepes", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 6, + GrammyAwards: 0, + Albums: [ + { + Album: "Initiation", + LaunchDate: new Date("September 3, 2013"), + BillboardReview: 86, + USBillboard200: 1, + Artist: "Naomí Yepes" + }, + { + Album: "Dream Driven", + LaunchDate: new Date("August 25, 2014"), + BillboardReview: 81, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: "1", + Title: "Intro", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "2", + Title: "Ferocious", + Released: "28-Apr-2014", + Genre: "Dance-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "3", + Title: "Going crazy", + Released: "10-Feb-2015", + Genre: "Dance-pop EDM", + Album: "Dream Driven" + }, + { + TrackNumber: "4", + Title: "Future past", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "5", + Title: "Roaming like them", + Released: "2-Jul-2014", + Genre: "Electro house Electropop", + Album: "Dream Driven" + }, + { + TrackNumber: "6", + Title: "Last Wishes", + Released: "12-Aug-2014", + Genre: "R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "7", + Title: "Stay where you are", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "8", + Title: "Imaginarium", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "9", + Title: "Tell me", + Released: "30-Sep-2014", + Genre: "Synth-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "10", + Title: "Shredded into pieces", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "11", + Title: "Capture this moment", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "12", + Title: "Dream Driven", + Released: "*", + Genre: "*", + Album: "Dream Driven" + } + ] + }, + { + Album: "The dragon journey", + LaunchDate: new Date("May 20, 2016"), + BillboardReview: 60, + USBillboard200: 2, + Artist: "Naomí Yepes" + }, + { + Album: "Organic me", + LaunchDate: new Date("August 17, 2018"), + BillboardReview: 82, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: "1", + Title: "I Love", + Released: "11-May-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + }, + { + TrackNumber: "2", + Title: "Early Morning Compass", + Released: "15-Jan-2020", + Genre: "mystical parody-bap ", + Album: "Organic me" + }, + { + TrackNumber: "3", + Title: "Key Fields Forever", + Released: "2-Jan-2020", + Genre: "Dance-pop EDM", + Album: "Organic me" + }, + { + TrackNumber: "4", + Title: "Stand by Your Goblins", + Released: "20-Nov-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "5", + Title: "Mad to Walk", + Released: "12-May-2019", + Genre: "Electro house Electropop", + Album: "Organic me" + }, + { + TrackNumber: "6", + Title: "Alice's Waiting", + Released: "28-Jan-2020", + Genre: "R&B", + Album: "Organic me" + }, + { + TrackNumber: "7", + Title: "We Shall Kiss", + Released: "30-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "8", + Title: "Behind Single Ants", + Released: "2-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "9", + Title: "Soap Autopsy", + Released: "8-Aug-2019", + Genre: "Synth-pop R&B", + Album: "Organic me" + }, + { + TrackNumber: "10", + Title: "Have You Met Rich?", + Released: "1-Jul-2019", + Genre: "ethno-tunes", + Album: "Organic me" + }, + { + TrackNumber: "11", + Title: "Livin' on a Banana", + Released: "22-Nov-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + } + ] + }, + { + Album: "Curiosity", + LaunchDate: new Date("December 7, 2019"), + BillboardReview: 75, + USBillboard200: 12, + Artist: "Naomí Yepes" + } + ] + }, + { + Artist: "Babila Ebwélé", + HasGrammyAward: true, + Debut: 2009, + GrammyNominations: 0, + GrammyAwards: 11, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("May 31, 2000"), + BillboardReview: 86, + USBillboard200: 42, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: "1", + Title: "Wood Shavings Forever", + Released: "9-Jun-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "2", + Title: "Early Morning Drive", + Released: "20-May-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "3", + Title: "Don't Natter", + Released: "10-Jun-2019", + Genre: "adult calypso-industrial", + Album: "Pushing up daisies" + }, + { + TrackNumber: "4", + Title: "Stairway to Balloons", + Released: "18-Jun-2019", + Genre: "calypso and mariachi", + Album: "Pushing up daisies" + }, + { + TrackNumber: "5", + Title: "The Number of your Apple", + Released: "29-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "6", + Title: "Your Delightful Heart", + Released: "24-Feb-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "7", + Title: "Nice Weather For Balloons", + Released: "1-Aug-2019", + Genre: "rap-hop", + Album: "Pushing up daisies" + }, + { + TrackNumber: "8", + Title: "The Girl From Cornwall", + Released: "4-May-2019", + Genre: "enigmatic rock-and-roll", + Album: "Pushing up daisies" + }, + { + TrackNumber: "9", + Title: "Here Without Jack", + Released: "24-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "10", + Title: "Born Rancid", + Released: "19-Mar-2019", + Genre: "*", + Album: "Pushing up daisies" + } + ] + }, + { + Album: "Death's dead", + LaunchDate: new Date("June 8, 2016"), + BillboardReview: 85, + USBillboard200: 95, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: "1", + Title: "Men Sound Better With You", + Released: "20-Oct-2019", + Genre: "rap-hop", + Album: "Death's dead" + }, + { + TrackNumber: "2", + Title: "Ghost in My Rod", + Released: "5-Oct-2019", + Genre: "enigmatic rock-and-roll", + Album: "Death's dead" + }, + { + TrackNumber: "3", + Title: "Bed of Men", + Released: "14-Nov-2019", + Genre: "whimsical comedy-grass ", + Album: "Death's dead" + }, + { + TrackNumber: "4", + Title: "Don't Push", + Released: "2-Jan-2020", + Genre: "unblack electronic-trip-hop", + Album: "Death's dead" + }, + { + TrackNumber: "5", + Title: "Nice Weather For Men", + Released: "18-Dec-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "6", + Title: "Rancid Rhapsody", + Released: "10-Mar-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "7", + Title: "Push, Push, Push!", + Released: "21-Feb-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "8", + Title: "My Name is Sarah", + Released: "15-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "9", + Title: "The Girl From My Hotel", + Released: "6-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "10", + Title: "Free Box", + Released: "18-Apr-2019", + Genre: "splitter-funk", + Album: "Death's dead" + }, + { + TrackNumber: "11", + Title: "Hotel Cardiff", + Released: "30-Dec-2019", + Genre: "guilty pleasure ebm", + Album: "Death's dead" + } + ] + } + ] + }, + { + Artist: "Ahmad Nazeri", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 3, + GrammyAwards: 1, + Albums: [ + { + Album: "Emergency", + LaunchDate: new Date("March 6, 2004"), + BillboardReview: 98, + USBillboard200: 69, + Artist: "Ahmad Nazeri" + }, + { + Album: "Bursting bubbles", + LaunchDate: new Date("April 17, 2006"), + BillboardReview: 69, + USBillboard200: 39, + Artist: "Ahmad Nazeri" + } + ] + }, + { + Artist: "Kimmy McIlmorie", + HasGrammyAward: true, + Debut: 2007, + GrammyNominations: 21, + GrammyAwards: 3, + Albums: [ + { + Album: "Here we go again", + LaunchDate: new Date("November 18, 2017"), + BillboardReview: 68, + USBillboard200: 1, + Artist: "Kimmy McIlmorie" + } + ] + }, + { + Artist: "Mar Rueda", + HasGrammyAward: true, + Debut: 1996, + GrammyNominations: 14, + GrammyAwards: 2 + }, + { + Artist: "Izabella Tabakova", + HasGrammyAward: true, + Debut: 2017, + GrammyNominations: 7, + GrammyAwards: 11, + Albums: [ + { + Album: "Once bitten", + LaunchDate: new Date("July 16, 2007"), + BillboardReview: 79, + USBillboard200: 53, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: "1", + Title: "Whole Lotta Super Cats", + Released: "21-May-2019", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "2", + Title: "Enter Becky", + Released: "16-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "3", + Title: "Your Cheatin' Flamingo", + Released: "14-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "4", + Title: "Mad to Kiss", + Released: "6-Nov-2019", + Genre: "Synth-pop R&B", + Album: "Once bitten" + }, + { + TrackNumber: "5", + Title: "Hotel Prague", + Released: "20-Oct-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + }, + { + TrackNumber: "6", + Title: "Jail on My Mind", + Released: "31-May-2019", + Genre: "Crunk reggaeton", + Album: "Once bitten" + }, + { + TrackNumber: "7", + Title: "Amazing Blues", + Released: "29-May-2019", + Genre: "mystical parody-bap ", + Album: "Once bitten" + }, + { + TrackNumber: "8", + Title: "Goody Two Iron Filings", + Released: "4-Jul-2019", + Genre: "Electro house Electropop", + Album: "Once bitten" + }, + { + TrackNumber: "9", + Title: "I Love in Your Arms", + Released: "7-Jun-2019", + Genre: "R&B", + Album: "Once bitten" + }, + { + TrackNumber: "10", + Title: "Truly Madly Amazing", + Released: "12-Sep-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + } + ] + }, + { + Album: "Your graciousness", + LaunchDate: new Date("November 17, 2004"), + BillboardReview: 69, + USBillboard200: 30, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: "1", + Title: "We Shall Tickle", + Released: "31-Aug-2019", + Genre: "old emo-garage ", + Album: "Your graciousness" + }, + { + TrackNumber: "2", + Title: "Snail Boogie", + Released: "14-Jun-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "3", + Title: "Amazing Liz", + Released: "15-Oct-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "4", + Title: "When Sexy Aardvarks Cry", + Released: "1-Oct-2019", + Genre: "whimsical comedy-grass ", + Album: "Your graciousness" + }, + { + TrackNumber: "5", + Title: "Stand By Dave", + Released: "18-Aug-2019", + Genre: "unblack electronic-trip-hop", + Album: "Your graciousness" + }, + { + TrackNumber: "6", + Title: "The Golf Course is Your Land", + Released: "2-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "7", + Title: "Where Have All the Men Gone?", + Released: "29-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "8", + Title: "Rhythm of the Leg", + Released: "5-Aug-2019", + Genre: "ethno-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: "9", + Title: "Baby, I Need Your Hats", + Released: "5-Dec-2019", + Genre: "neuro-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: "10", + Title: "Stand by Your Cat", + Released: "25-Jul-2019", + Genre: "*", + Album: "Your graciousness" + } + ] + }, + { + Album: "Dark matters", + LaunchDate: new Date("November 3, 2002"), + BillboardReview: 79, + USBillboard200: 85, + Artist: "Izabella Tabakova" + } + ] + }, + { + Artist: "Nguyễn Diệp Chi", + HasGrammyAward: true, + Debut: 1992, + GrammyNominations: 4, + GrammyAwards: 2, + Albums: [ + { + Album: "Library of liberty", + LaunchDate: new Date("December 22, 2003"), + BillboardReview: 93, + USBillboard200: 5, + Artist: "Nguyễn Diệp Chi" + } + ] + }, + { + Artist: "Eva Lee", + HasGrammyAward: false, + Debut: 2008, + GrammyNominations: 2, + GrammyAwards: 0, + Albums: [ + { + Album: "Just a tease", + LaunchDate: new Date("May 3, 2001"), + BillboardReview: 91, + USBillboard200: 29, + Artist: "Eva Lee" + } + ] + }, + { + Artist: "Siri Jakobsson", + HasGrammyAward: true, + Debut: 1990, + GrammyNominations: 2, + GrammyAwards: 8, + Albums: [ + { + Album: "Under the bus", + LaunchDate: new Date("May 14, 2000"), + BillboardReview: 67, + USBillboard200: 67, + Artist: "Siri Jakobsson", + Songs: [ + { + TrackNumber: "1", + Title: "Jack Broke My Heart At Tesco's", + Released: "19-Jan-2020", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "2", + Title: "Cat Deep, Hats High", + Released: "5-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "3", + Title: "In Snail We Trust", + Released: "31-May-2019", + Genre: "hardcore opera", + Album: "Under the bus" + }, + { + TrackNumber: "4", + Title: "Liz's Waiting", + Released: "22-Jul-2019", + Genre: "emotional C-jam ", + Album: "Under the bus" + }, + { + TrackNumber: "5", + Title: "Lifeless Blues", + Released: "14-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "6", + Title: "I Spin", + Released: "26-Mar-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "7", + Title: "Ring of Rock", + Released: "12-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "8", + Title: "Livin' on a Rock", + Released: "17-Apr-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "9", + Title: "Your Lifeless Heart", + Released: "15-Sep-2019", + Genre: "adult calypso-industrial", + Album: "Under the bus" + }, + { + TrackNumber: "10", + Title: "The High Street on My Mind", + Released: "11-Nov-2019", + Genre: "calypso and mariachi", + Album: "Under the bus" + }, + { + TrackNumber: "11", + Title: "Behind Ugly Curtains", + Released: "8-May-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "12", + Title: "Where Have All the Curtains Gone?", + Released: "28-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "13", + Title: "Ghost in My Apple", + Released: "14-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "14", + Title: "I Chatter", + Released: "30-Nov-2019", + Genre: "*", + Album: "Under the bus" + } + ] + } + ] + }, + { + Artist: "Pablo Cambeiro", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 5, + GrammyAwards: 0, + Albums: [ + { + Album: "Fluke", + LaunchDate: new Date("August 4, 2017"), + BillboardReview: 93, + USBillboard200: 98, + Artist: "Pablo Cambeiro" + }, + { + Album: "Crowd control", + LaunchDate: new Date("August 26, 2003"), + BillboardReview: 68, + USBillboard200: 84, + Artist: "Pablo Cambeiro", + Songs: [ + { + TrackNumber: "1", + Title: "My Bed on My Mind", + Released: "25-Mar-2019", + Genre: "ethno-tunes", + Album: "Crowd control" + }, + { + TrackNumber: "2", + Title: "Bright Blues", + Released: "28-Sep-2019", + Genre: "neuro-tunes", + Album: "Crowd control" + }, + { + TrackNumber: "3", + Title: "Sail, Sail, Sail!", + Released: "5-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "4", + Title: "Hotel My Bed", + Released: "22-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "5", + Title: "Gonna Make You Mash", + Released: "18-May-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "6", + Title: "Straight Outta America", + Released: "16-Jan-2020", + Genre: "hardcore opera", + Album: "Crowd control" + }, + { + TrackNumber: "7", + Title: "I Drive", + Released: "23-Feb-2019", + Genre: "emotional C-jam ", + Album: "Crowd control" + }, + { + TrackNumber: "8", + Title: "Like a Teddy", + Released: "31-Aug-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "9", + Title: "Teddy Boogie", + Released: "30-Nov-2019", + Genre: "*", + Album: "Crowd control" + } + ] + } + ] + }, + { + Artist: "Athar Malakooti", + HasGrammyAward: false, + Debut: 2017, + GrammyNominations: 0, + GrammyAwards: 0, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("February 24, 2016"), + BillboardReview: 74, + USBillboard200: 77, + Artist: "Athar Malakooti" + } + ] + }, + { + Artist: "Marti Valencia", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 1, + GrammyAwards: 1, + Albums: [ + { + Album: "Nemesis", + LaunchDate: new Date("June 30, 2004"), + BillboardReview: 94, + USBillboard200: 9, + Artist: "Marti Valencia" + }, + { + Album: "First chance", + LaunchDate: new Date("January 7, 2019"), + BillboardReview: 96, + USBillboard200: 19, + Artist: "Marti Valencia", + Songs: [ + { + TrackNumber: "1", + Title: "My Name is Jason", + Released: "12-Jul-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "2", + Title: "Amazing Andy", + Released: "5-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "3", + Title: "The Number of your Knight", + Released: "4-Dec-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "4", + Title: "I Sail", + Released: "3-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "5", + Title: "Goody Two Hands", + Released: "11-Oct-2019", + Genre: "Electro house Electropop", + Album: "First chance" + }, + { + TrackNumber: "6", + Title: "Careful With That Knife", + Released: "18-Dec-2019", + Genre: "R&B", + Album: "First chance" + }, + { + TrackNumber: "7", + Title: "Four Single Ants", + Released: "18-Jan-2020", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "8", + Title: "Kiss Forever", + Released: "10-Aug-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "9", + Title: "Rich's Waiting", + Released: "15-Mar-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + }, + { + TrackNumber: "10", + Title: "Japan is Your Land", + Released: "7-Mar-2019", + Genre: "ethno-tunes", + Album: "First chance" + }, + { + TrackNumber: "11", + Title: "Pencils in My Banana", + Released: "21-Jun-2019", + Genre: "Crunk reggaeton", + Album: "First chance" + }, + { + TrackNumber: "12", + Title: "I Sail in Your Arms", + Released: "30-Apr-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + } + ] + }, + { + Album: "God's advocate", + LaunchDate: new Date("April 29, 2007"), + BillboardReview: 66, + USBillboard200: 37, + Artist: "Marti Valencia" + } + ] + }, + { + Artist: "Alicia Stanger", + HasGrammyAward: false, + Debut: 2010, + GrammyNominations: 1, + GrammyAwards: 0, + Albums: [ + { + Album: "Forever alone", + LaunchDate: new Date("November 3, 2005"), + BillboardReview: 82, + USBillboard200: 7, + Artist: "Alicia Stanger" + } + ] + }, + { + Artist: "Peter Taylor", + HasGrammyAward: true, + Debut: 2005, + GrammyNominations: 0, + GrammyAwards: 2, + Albums: [ + { + Album: "Decisions decisions", + LaunchDate: new Date("April 10, 2008"), + BillboardReview: 85, + USBillboard200: 35, + Artist: "Peter Taylor" + }, + { + Album: "Climate changed", + LaunchDate: new Date("June 20, 2015"), + BillboardReview: 66, + USBillboard200: 89, + Artist: "Peter Taylor" + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/index.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/index.ts new file mode 100644 index 000000000..a8e417d2a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-custom/index.ts @@ -0,0 +1,176 @@ +import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { + private userExtraConfiguration = {}; + private usePinning: boolean; + /** starts with empty string to create a new line on join when something else is added */ + private additionalElements = [""]; + constructor() { + super(__dirname); + this.components = ["Hierarchical Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "hierarchical-grid-custom"; + this.projectType = "igx-ts"; + this.name = "Custom Hierarchical Grid"; + this.description = "a customizable IgxHierarchicalGrid"; + this.dependencies = [ + { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } + ]; + + this.hasExtraConfiguration = true; + } + + public setExtraConfiguration(extraConfigKeys: {}) { + this.userExtraConfiguration = extraConfigKeys; + } + + public getExtraConfiguration(): ControlExtraConfiguration[] { + return [{ + choices: ["Sorting", "Filtering", "Cell Editing", "Resizing", "Row Selection", + "Paging", "Column Pinning", "Column Moving", "Column Hiding"], + default: "", + key: "columnFeatures", + message: "Choose features for the igx-hierarchical-grid", + type: ControlExtraConfigType.MultiChoice + }]; + } + + public generateConfig(name: string, ...options: any[]): {[key: string]: any} { + const columnFeatures = []; + const gridFeatures = []; + const extraConfig = { + selectedFeatures: this.getSelectedFeatures(columnFeatures, gridFeatures), + + // must be assigned after getSelectedFeatures evaluates, TODO: refactor method + additionalMarkup: this.additionalElements.join("\n"), + + // tslint:disable-next-line: object-literal-sort-keys + columnFeatures: columnFeatures.join(" "), + gridFeatures: gridFeatures.join(" "), + rowIslandFeatures: gridFeatures.join(" ").replace(/Singers/g, "Albums") + }; + if (this.usePinning) { + Object.assign(extraConfig, { + albumPin: this.pinningTemplate("Album"), + artistPin: this.pinningTemplate("Artist"), + awardsPin: this.pinningTemplate("Awards"), + grammyPin: this.pinningTemplate("Grammy"), + launchPin: this.pinningTemplate("Launch"), + nominationsPin: this.pinningTemplate("Nominations") + }); + } + + return super.generateConfig(name, { extraConfig }); + } + + //tslint:disable + private pinningTemplate(columnName: string): string { + // https://github.com/IgniteUI/igniteui-angular/issues/3998 + // Defining let-columnRef="column" does not seem to work. + // Angular passes in the $implicit(ly) defined value. + return ` +
+ ${columnName} + +
+
`.replace(/\t/g, " "); + } + + private getSelectedFeatures(columnFeatures: string[], gridFeatures: string[]) { + const toolbarActions = []; + const columnBoolFeatures = []; + let selectedFeatures = ""; + const featureUrl = "https://www.infragistics.com/products/ignite-ui-angular/angular/components/hierarchicalgrid/"; + const anchorWrapper = { + start: ``, + text: ``, + end: `` + }; + + if (this.userExtraConfiguration["columnFeatures"]) { + const features = this.userExtraConfiguration["columnFeatures"] as string[]; + const featuresUrls = []; + for (const feature of this.userExtraConfiguration["columnFeatures"] as string[]) { + switch (feature) { + case "Sorting": + case "Filtering": + case "Resizing": + const text = `[${feature.toLowerCase().replace("ing", "able")}]="true"`; + columnFeatures.push(text); + columnBoolFeatures.push(text); + break; + case "Column Moving": + gridFeatures.push('[moving]="true"'); + break; + case "Column Hiding": + toolbarActions.push(" "); + break; + case "Cell Editing": + columnFeatures.push(`[editable]="true"`); + this.dependencies.push({ import: "FormsModule", from: "@angular/forms" }); + break; + case "Row Selection": + const gridFeatureText = `rowSelection="multiple"`; + gridFeatures.push(gridFeatureText); + break; + case "Paging": + this.additionalElements.push(` `); + break; + case "Column Pinning": + this.usePinning = true; + break; + } + + featuresUrls.push(this.getFeatureUrl(feature, featureUrl)); + selectedFeatures = features.map((e, i) => { + anchorWrapper.href = featuresUrls[i]; + anchorWrapper.text = e; + return ` ${anchorWrapper.start}${anchorWrapper.href}${anchorWrapper.middle}` + + `${anchorWrapper.text}${anchorWrapper.end}`; + }).toString(); + if (selectedFeatures.length > 0) { + selectedFeatures = `

Active Features: ${selectedFeatures}

`; + } + if (toolbarActions.length) { + const parts = [ + " ", + " Singers", + " ", + ...toolbarActions, + " ", + " " + ]; + this.additionalElements.splice(1, 0, parts.join("\n")); + } + } + } + + return selectedFeatures; + } + + private getFeatureUrl(feature: string, featureUrl: string): string { + switch (feature) { + case "Sorting": + case "Filtering": + case "Paging": + return `${featureUrl}${feature.toLocaleLowerCase()}`; + case "Resizing": + return `${featureUrl}column-resizing`; + case "Column Pinning": + return `${featureUrl}column-pinning`; + case "Cell Editing": + return `${featureUrl}editing`; + case "Column Moving": + return `${featureUrl}column-moving`; + case "Column Hiding": + return `${featureUrl}column-hiding`; + case "Row Selection": + return `${featureUrl}selection`; + } + } +} +module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..6f042a783 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,29 @@ +

IgxHierarchicalGrid component with a predefined set of default summaries and a custom summary.

+

You can read more about configuring the igx-hierarchical-grid component in the + README or the + official documentation. +

+ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..0c1f3c3e7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxHierarchicalGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%=ClassName%>Component ], + imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..21422857c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { ARTISTS, Artist } from './data'; +import { CustomSummary } from './custom-summary'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public localData: Artist[] = ARTISTS; + public customSummary = CustomSummary; +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts new file mode 100644 index 000000000..c2022cb27 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts @@ -0,0 +1,31 @@ +import { IgxNumberSummaryOperand, IgxSummaryResult } from '<%=igxPackage%>'; + +export class CustomSummary extends IgxNumberSummaryOperand { + constructor() { + super(); + } + + public operate(data?: number[]): IgxSummaryResult[] { + const result: IgxSummaryResult[] = []; + if (!data) { + return result; + } + result.push( + { + key: 'min', + label: 'Min', + summaryResult: IgxNumberSummaryOperand.min(data) + }, + { + key: 'max', + label: 'Max', + summaryResult: IgxNumberSummaryOperand.max(data) + }, + { + key: 'avg', + label: 'Avg', + summaryResult: IgxNumberSummaryOperand.average(data) + }); + return result; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/data.ts new file mode 100644 index 000000000..300fa1f90 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/data.ts @@ -0,0 +1,1038 @@ +export interface Artist { + Artist: string; + HasGrammyAward: boolean; + Debut: number; + GrammyNominations: number; + GrammyAwards: number; + Albums?: Album[]; +} + +export interface Album { + Album: string; + LaunchDate: Date; + BillboardReview: number; + USBillboard200: number; + Artist: string; + Songs?: Song[]; +} + +export interface Song { + TrackNumber: string; + Title: string; + Released: string; + Genre: string; + Album: string; +} + +export const ARTISTS: Artist[] = [ + { + Artist: "Naomí Yepes", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 6, + GrammyAwards: 0, + Albums: [ + { + Album: "Initiation", + LaunchDate: new Date("September 3, 2013"), + BillboardReview: 86, + USBillboard200: 1, + Artist: "Naomí Yepes" + }, + { + Album: "Dream Driven", + LaunchDate: new Date("August 25, 2014"), + BillboardReview: 81, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: "1", + Title: "Intro", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "2", + Title: "Ferocious", + Released: "28-Apr-2014", + Genre: "Dance-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "3", + Title: "Going crazy", + Released: "10-Feb-2015", + Genre: "Dance-pop EDM", + Album: "Dream Driven" + }, + { + TrackNumber: "4", + Title: "Future past", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "5", + Title: "Roaming like them", + Released: "2-Jul-2014", + Genre: "Electro house Electropop", + Album: "Dream Driven" + }, + { + TrackNumber: "6", + Title: "Last Wishes", + Released: "12-Aug-2014", + Genre: "R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "7", + Title: "Stay where you are", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "8", + Title: "Imaginarium", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "9", + Title: "Tell me", + Released: "30-Sep-2014", + Genre: "Synth-pop R&B", + Album: "Dream Driven" + }, + { + TrackNumber: "10", + Title: "Shredded into pieces", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "11", + Title: "Capture this moment", + Released: "*", + Genre: "*", + Album: "Dream Driven" + }, + { + TrackNumber: "12", + Title: "Dream Driven", + Released: "*", + Genre: "*", + Album: "Dream Driven" + } + ] + }, + { + Album: "The dragon journey", + LaunchDate: new Date("May 20, 2016"), + BillboardReview: 60, + USBillboard200: 2, + Artist: "Naomí Yepes" + }, + { + Album: "Organic me", + LaunchDate: new Date("August 17, 2018"), + BillboardReview: 82, + USBillboard200: 1, + Artist: "Naomí Yepes", + Songs: [ + { + TrackNumber: "1", + Title: "I Love", + Released: "11-May-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + }, + { + TrackNumber: "2", + Title: "Early Morning Compass", + Released: "15-Jan-2020", + Genre: "mystical parody-bap ", + Album: "Organic me" + }, + { + TrackNumber: "3", + Title: "Key Fields Forever", + Released: "2-Jan-2020", + Genre: "Dance-pop EDM", + Album: "Organic me" + }, + { + TrackNumber: "4", + Title: "Stand by Your Goblins", + Released: "20-Nov-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "5", + Title: "Mad to Walk", + Released: "12-May-2019", + Genre: "Electro house Electropop", + Album: "Organic me" + }, + { + TrackNumber: "6", + Title: "Alice's Waiting", + Released: "28-Jan-2020", + Genre: "R&B", + Album: "Organic me" + }, + { + TrackNumber: "7", + Title: "We Shall Kiss", + Released: "30-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "8", + Title: "Behind Single Ants", + Released: "2-Oct-2019", + Genre: "*", + Album: "Organic me" + }, + { + TrackNumber: "9", + Title: "Soap Autopsy", + Released: "8-Aug-2019", + Genre: "Synth-pop R&B", + Album: "Organic me" + }, + { + TrackNumber: "10", + Title: "Have You Met Rich?", + Released: "1-Jul-2019", + Genre: "ethno-tunes", + Album: "Organic me" + }, + { + TrackNumber: "11", + Title: "Livin' on a Banana", + Released: "22-Nov-2019", + Genre: "Crunk reggaeton", + Album: "Organic me" + } + ] + }, + { + Album: "Curiosity", + LaunchDate: new Date("December 7, 2019"), + BillboardReview: 75, + USBillboard200: 12, + Artist: "Naomí Yepes" + } + ] + }, + { + Artist: "Babila Ebwélé", + HasGrammyAward: true, + Debut: 2009, + GrammyNominations: 0, + GrammyAwards: 11, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("May 31, 2000"), + BillboardReview: 86, + USBillboard200: 42, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: "1", + Title: "Wood Shavings Forever", + Released: "9-Jun-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "2", + Title: "Early Morning Drive", + Released: "20-May-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "3", + Title: "Don't Natter", + Released: "10-Jun-2019", + Genre: "adult calypso-industrial", + Album: "Pushing up daisies" + }, + { + TrackNumber: "4", + Title: "Stairway to Balloons", + Released: "18-Jun-2019", + Genre: "calypso and mariachi", + Album: "Pushing up daisies" + }, + { + TrackNumber: "5", + Title: "The Number of your Apple", + Released: "29-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "6", + Title: "Your Delightful Heart", + Released: "24-Feb-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "7", + Title: "Nice Weather For Balloons", + Released: "1-Aug-2019", + Genre: "rap-hop", + Album: "Pushing up daisies" + }, + { + TrackNumber: "8", + Title: "The Girl From Cornwall", + Released: "4-May-2019", + Genre: "enigmatic rock-and-roll", + Album: "Pushing up daisies" + }, + { + TrackNumber: "9", + Title: "Here Without Jack", + Released: "24-Oct-2019", + Genre: "*", + Album: "Pushing up daisies" + }, + { + TrackNumber: "10", + Title: "Born Rancid", + Released: "19-Mar-2019", + Genre: "*", + Album: "Pushing up daisies" + } + ] + }, + { + Album: "Death's dead", + LaunchDate: new Date("June 8, 2016"), + BillboardReview: 85, + USBillboard200: 95, + Artist: "Babila Ebwélé", + Songs: [ + { + TrackNumber: "1", + Title: "Men Sound Better With You", + Released: "20-Oct-2019", + Genre: "rap-hop", + Album: "Death's dead" + }, + { + TrackNumber: "2", + Title: "Ghost in My Rod", + Released: "5-Oct-2019", + Genre: "enigmatic rock-and-roll", + Album: "Death's dead" + }, + { + TrackNumber: "3", + Title: "Bed of Men", + Released: "14-Nov-2019", + Genre: "whimsical comedy-grass ", + Album: "Death's dead" + }, + { + TrackNumber: "4", + Title: "Don't Push", + Released: "2-Jan-2020", + Genre: "unblack electronic-trip-hop", + Album: "Death's dead" + }, + { + TrackNumber: "5", + Title: "Nice Weather For Men", + Released: "18-Dec-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "6", + Title: "Rancid Rhapsody", + Released: "10-Mar-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "7", + Title: "Push, Push, Push!", + Released: "21-Feb-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "8", + Title: "My Name is Sarah", + Released: "15-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "9", + Title: "The Girl From My Hotel", + Released: "6-Nov-2019", + Genre: "*", + Album: "Death's dead" + }, + { + TrackNumber: "10", + Title: "Free Box", + Released: "18-Apr-2019", + Genre: "splitter-funk", + Album: "Death's dead" + }, + { + TrackNumber: "11", + Title: "Hotel Cardiff", + Released: "30-Dec-2019", + Genre: "guilty pleasure ebm", + Album: "Death's dead" + } + ] + } + ] + }, + { + Artist: "Ahmad Nazeri", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 3, + GrammyAwards: 1, + Albums: [ + { + Album: "Emergency", + LaunchDate: new Date("March 6, 2004"), + BillboardReview: 98, + USBillboard200: 69, + Artist: "Ahmad Nazeri" + }, + { + Album: "Bursting bubbles", + LaunchDate: new Date("April 17, 2006"), + BillboardReview: 69, + USBillboard200: 39, + Artist: "Ahmad Nazeri" + } + ] + }, + { + Artist: "Kimmy McIlmorie", + HasGrammyAward: true, + Debut: 2007, + GrammyNominations: 21, + GrammyAwards: 3, + Albums: [ + { + Album: "Here we go again", + LaunchDate: new Date("November 18, 2017"), + BillboardReview: 68, + USBillboard200: 1, + Artist: "Kimmy McIlmorie" + } + ] + }, + { + Artist: "Mar Rueda", + HasGrammyAward: true, + Debut: 1996, + GrammyNominations: 14, + GrammyAwards: 2 + }, + { + Artist: "Izabella Tabakova", + HasGrammyAward: true, + Debut: 2017, + GrammyNominations: 7, + GrammyAwards: 11, + Albums: [ + { + Album: "Once bitten", + LaunchDate: new Date("July 16, 2007"), + BillboardReview: 79, + USBillboard200: 53, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: "1", + Title: "Whole Lotta Super Cats", + Released: "21-May-2019", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "2", + Title: "Enter Becky", + Released: "16-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "3", + Title: "Your Cheatin' Flamingo", + Released: "14-Jan-2020", + Genre: "*", + Album: "Once bitten" + }, + { + TrackNumber: "4", + Title: "Mad to Kiss", + Released: "6-Nov-2019", + Genre: "Synth-pop R&B", + Album: "Once bitten" + }, + { + TrackNumber: "5", + Title: "Hotel Prague", + Released: "20-Oct-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + }, + { + TrackNumber: "6", + Title: "Jail on My Mind", + Released: "31-May-2019", + Genre: "Crunk reggaeton", + Album: "Once bitten" + }, + { + TrackNumber: "7", + Title: "Amazing Blues", + Released: "29-May-2019", + Genre: "mystical parody-bap ", + Album: "Once bitten" + }, + { + TrackNumber: "8", + Title: "Goody Two Iron Filings", + Released: "4-Jul-2019", + Genre: "Electro house Electropop", + Album: "Once bitten" + }, + { + TrackNumber: "9", + Title: "I Love in Your Arms", + Released: "7-Jun-2019", + Genre: "R&B", + Album: "Once bitten" + }, + { + TrackNumber: "10", + Title: "Truly Madly Amazing", + Released: "12-Sep-2019", + Genre: "ethno-tunes", + Album: "Once bitten" + } + ] + }, + { + Album: "Your graciousness", + LaunchDate: new Date("November 17, 2004"), + BillboardReview: 69, + USBillboard200: 30, + Artist: "Izabella Tabakova", + Songs: [ + { + TrackNumber: "1", + Title: "We Shall Tickle", + Released: "31-Aug-2019", + Genre: "old emo-garage ", + Album: "Your graciousness" + }, + { + TrackNumber: "2", + Title: "Snail Boogie", + Released: "14-Jun-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "3", + Title: "Amazing Liz", + Released: "15-Oct-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "4", + Title: "When Sexy Aardvarks Cry", + Released: "1-Oct-2019", + Genre: "whimsical comedy-grass ", + Album: "Your graciousness" + }, + { + TrackNumber: "5", + Title: "Stand By Dave", + Released: "18-Aug-2019", + Genre: "unblack electronic-trip-hop", + Album: "Your graciousness" + }, + { + TrackNumber: "6", + Title: "The Golf Course is Your Land", + Released: "2-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "7", + Title: "Where Have All the Men Gone?", + Released: "29-Apr-2019", + Genre: "*", + Album: "Your graciousness" + }, + { + TrackNumber: "8", + Title: "Rhythm of the Leg", + Released: "5-Aug-2019", + Genre: "ethno-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: "9", + Title: "Baby, I Need Your Hats", + Released: "5-Dec-2019", + Genre: "neuro-tunes", + Album: "Your graciousness" + }, + { + TrackNumber: "10", + Title: "Stand by Your Cat", + Released: "25-Jul-2019", + Genre: "*", + Album: "Your graciousness" + } + ] + }, + { + Album: "Dark matters", + LaunchDate: new Date("November 3, 2002"), + BillboardReview: 79, + USBillboard200: 85, + Artist: "Izabella Tabakova" + } + ] + }, + { + Artist: "Nguyễn Diệp Chi", + HasGrammyAward: true, + Debut: 1992, + GrammyNominations: 4, + GrammyAwards: 2, + Albums: [ + { + Album: "Library of liberty", + LaunchDate: new Date("December 22, 2003"), + BillboardReview: 93, + USBillboard200: 5, + Artist: "Nguyễn Diệp Chi" + } + ] + }, + { + Artist: "Eva Lee", + HasGrammyAward: false, + Debut: 2008, + GrammyNominations: 2, + GrammyAwards: 0, + Albums: [ + { + Album: "Just a tease", + LaunchDate: new Date("May 3, 2001"), + BillboardReview: 91, + USBillboard200: 29, + Artist: "Eva Lee" + } + ] + }, + { + Artist: "Siri Jakobsson", + HasGrammyAward: true, + Debut: 1990, + GrammyNominations: 2, + GrammyAwards: 8, + Albums: [ + { + Album: "Under the bus", + LaunchDate: new Date("May 14, 2000"), + BillboardReview: 67, + USBillboard200: 67, + Artist: "Siri Jakobsson", + Songs: [ + { + TrackNumber: "1", + Title: "Jack Broke My Heart At Tesco's", + Released: "19-Jan-2020", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "2", + Title: "Cat Deep, Hats High", + Released: "5-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "3", + Title: "In Snail We Trust", + Released: "31-May-2019", + Genre: "hardcore opera", + Album: "Under the bus" + }, + { + TrackNumber: "4", + Title: "Liz's Waiting", + Released: "22-Jul-2019", + Genre: "emotional C-jam ", + Album: "Under the bus" + }, + { + TrackNumber: "5", + Title: "Lifeless Blues", + Released: "14-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "6", + Title: "I Spin", + Released: "26-Mar-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "7", + Title: "Ring of Rock", + Released: "12-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "8", + Title: "Livin' on a Rock", + Released: "17-Apr-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "9", + Title: "Your Lifeless Heart", + Released: "15-Sep-2019", + Genre: "adult calypso-industrial", + Album: "Under the bus" + }, + { + TrackNumber: "10", + Title: "The High Street on My Mind", + Released: "11-Nov-2019", + Genre: "calypso and mariachi", + Album: "Under the bus" + }, + { + TrackNumber: "11", + Title: "Behind Ugly Curtains", + Released: "8-May-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "12", + Title: "Where Have All the Curtains Gone?", + Released: "28-Jun-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "13", + Title: "Ghost in My Apple", + Released: "14-Dec-2019", + Genre: "*", + Album: "Under the bus" + }, + { + TrackNumber: "14", + Title: "I Chatter", + Released: "30-Nov-2019", + Genre: "*", + Album: "Under the bus" + } + ] + } + ] + }, + { + Artist: "Pablo Cambeiro", + HasGrammyAward: false, + Debut: 2011, + GrammyNominations: 5, + GrammyAwards: 0, + Albums: [ + { + Album: "Fluke", + LaunchDate: new Date("August 4, 2017"), + BillboardReview: 93, + USBillboard200: 98, + Artist: "Pablo Cambeiro" + }, + { + Album: "Crowd control", + LaunchDate: new Date("August 26, 2003"), + BillboardReview: 68, + USBillboard200: 84, + Artist: "Pablo Cambeiro", + Songs: [ + { + TrackNumber: "1", + Title: "My Bed on My Mind", + Released: "25-Mar-2019", + Genre: "ethno-tunes", + Album: "Crowd control" + }, + { + TrackNumber: "2", + Title: "Bright Blues", + Released: "28-Sep-2019", + Genre: "neuro-tunes", + Album: "Crowd control" + }, + { + TrackNumber: "3", + Title: "Sail, Sail, Sail!", + Released: "5-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "4", + Title: "Hotel My Bed", + Released: "22-Mar-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "5", + Title: "Gonna Make You Mash", + Released: "18-May-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "6", + Title: "Straight Outta America", + Released: "16-Jan-2020", + Genre: "hardcore opera", + Album: "Crowd control" + }, + { + TrackNumber: "7", + Title: "I Drive", + Released: "23-Feb-2019", + Genre: "emotional C-jam ", + Album: "Crowd control" + }, + { + TrackNumber: "8", + Title: "Like a Teddy", + Released: "31-Aug-2019", + Genre: "*", + Album: "Crowd control" + }, + { + TrackNumber: "9", + Title: "Teddy Boogie", + Released: "30-Nov-2019", + Genre: "*", + Album: "Crowd control" + } + ] + } + ] + }, + { + Artist: "Athar Malakooti", + HasGrammyAward: false, + Debut: 2017, + GrammyNominations: 0, + GrammyAwards: 0, + Albums: [ + { + Album: "Pushing up daisies", + LaunchDate: new Date("February 24, 2016"), + BillboardReview: 74, + USBillboard200: 77, + Artist: "Athar Malakooti" + } + ] + }, + { + Artist: "Marti Valencia", + HasGrammyAward: true, + Debut: 2004, + GrammyNominations: 1, + GrammyAwards: 1, + Albums: [ + { + Album: "Nemesis", + LaunchDate: new Date("June 30, 2004"), + BillboardReview: 94, + USBillboard200: 9, + Artist: "Marti Valencia" + }, + { + Album: "First chance", + LaunchDate: new Date("January 7, 2019"), + BillboardReview: 96, + USBillboard200: 19, + Artist: "Marti Valencia", + Songs: [ + { + TrackNumber: "1", + Title: "My Name is Jason", + Released: "12-Jul-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "2", + Title: "Amazing Andy", + Released: "5-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "3", + Title: "The Number of your Knight", + Released: "4-Dec-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "4", + Title: "I Sail", + Released: "3-Mar-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "5", + Title: "Goody Two Hands", + Released: "11-Oct-2019", + Genre: "Electro house Electropop", + Album: "First chance" + }, + { + TrackNumber: "6", + Title: "Careful With That Knife", + Released: "18-Dec-2019", + Genre: "R&B", + Album: "First chance" + }, + { + TrackNumber: "7", + Title: "Four Single Ants", + Released: "18-Jan-2020", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "8", + Title: "Kiss Forever", + Released: "10-Aug-2019", + Genre: "*", + Album: "First chance" + }, + { + TrackNumber: "9", + Title: "Rich's Waiting", + Released: "15-Mar-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + }, + { + TrackNumber: "10", + Title: "Japan is Your Land", + Released: "7-Mar-2019", + Genre: "ethno-tunes", + Album: "First chance" + }, + { + TrackNumber: "11", + Title: "Pencils in My Banana", + Released: "21-Jun-2019", + Genre: "Crunk reggaeton", + Album: "First chance" + }, + { + TrackNumber: "12", + Title: "I Sail in Your Arms", + Released: "30-Apr-2019", + Genre: "Synth-pop R&B", + Album: "First chance" + } + ] + }, + { + Album: "God's advocate", + LaunchDate: new Date("April 29, 2007"), + BillboardReview: 66, + USBillboard200: 37, + Artist: "Marti Valencia" + } + ] + }, + { + Artist: "Alicia Stanger", + HasGrammyAward: false, + Debut: 2010, + GrammyNominations: 1, + GrammyAwards: 0, + Albums: [ + { + Album: "Forever alone", + LaunchDate: new Date("November 3, 2005"), + BillboardReview: 82, + USBillboard200: 7, + Artist: "Alicia Stanger" + } + ] + }, + { + Artist: "Peter Taylor", + HasGrammyAward: true, + Debut: 2005, + GrammyNominations: 0, + GrammyAwards: 2, + Albums: [ + { + Album: "Decisions decisions", + LaunchDate: new Date("April 10, 2008"), + BillboardReview: 85, + USBillboard200: 35, + Artist: "Peter Taylor" + }, + { + Album: "Climate changed", + LaunchDate: new Date("June 20, 2015"), + BillboardReview: 66, + USBillboard200: 89, + Artist: "Peter Taylor" + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/index.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/index.ts new file mode 100644 index 000000000..f9cd03809 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/hierarchical-grid-summaries/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Hierarchical Grid With Summaries"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "hierarchical-grid-summaries"; + this.projectType = "igx-ts"; + this.name = "Hierarchical Grid With Summaries"; + this.description = "IgxHierarchicalGrid with summaries"; + this.dependencies = [ + { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/hierarchical-grid/index.ts b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/index.ts new file mode 100644 index 000000000..ed6fb979b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/hierarchical-grid/index.ts @@ -0,0 +1,12 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxHierarchicalGridComponent extends BaseComponent { + constructor() { + super(__dirname); + this.name = "Hierarchical Grid"; + this.group = "Grids & Lists"; + this.description = "pick from grids: basic or custom"; + this.groupPriority = 10; + } +} +module.exports = new IgxHierarchicalGridComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/index.ts b/packages/igx-templates/igx-ts-legacy/index.ts new file mode 100644 index 000000000..c9516f3da --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/index.ts @@ -0,0 +1,17 @@ +import { BaseProjectLibrary } from "@igniteui/cli-core"; + +class IgxProjectLibrary extends BaseProjectLibrary { + constructor() { + super(__dirname); + this.name = "Ignite UI for Angular NgModules (legacy)"; + this.projectType = "igx-ts-legacy"; + this.themes = ["Custom", "Default"]; + + const groups = require("./groups.json"); + // tslint:disable-next-line:forin + for (const key in groups) { + this.groupDescriptions.set(key, groups[key]); + } + } +} +module.exports = new IgxProjectLibrary(); diff --git a/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..f9bddfa10 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,97 @@ +
+

Form view with igx-input-group, igx-select and igx-combo that allows to book a movie ticket. + You can read more about configuring those components, using the following links: + igx-input-group - + README or the + official documentation, + igx-select - + README or the + official + documentation, + igx-combo - + README or the + official + documentation. + igx-date-picker - + README or the + official documentation. + igx-time-picker - + README or the + official documentation. + igx-date-range-picker - + README or the + official documentation. +

+
+
+
+
+
+

Book your movie ticket

+
+ + + + {{ movie }} + + + + + local_movies + + + + + + + person + + + + +359 + + + + phone + + Ex.: +359 888 123 456 + + + + + + email + + + + + + + today + + + + + access_time + + + +
+
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..0af05a041 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,29 @@ +.container { + height: 100%; + overflow: auto; +} + +.container > * { + margin-top: 32px; +} + +.sample-wrapper { + width: 70%; + height: 100%; + position: relative; + margin: 0 auto; + background: transparent; + margin-top: 30px; +} + +.input-group-form { + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12); + padding: 24px; + margin-bottom: 48px; +} + +.description-container { + width: 70%; + display: flex; + align-self: center; +} diff --git a/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..6452cd2a2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,49 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxButtonModule, + IgxComboModule, + IgxDatePickerModule, + IgxIconModule, + IgxInputGroupModule, + IgxRippleModule, + IgxSelectModule, + IgxTimePickerModule +} from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ + FormsModule, + ReactiveFormsModule, + NoopAnimationsModule, + IgxInputGroupModule, + IgxButtonModule, + IgxRippleModule, + IgxIconModule, + IgxComboModule, + IgxDatePickerModule, + IgxTimePickerModule, + IgxSelectModule + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..ca079bf56 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,54 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +interface Genre { + type: string; + movies: string[]; +} + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + public genres!: Genre[]; + public user!: FormGroup; + public minTime = '06:15:30'; + public maxTime = '09:15:30'; + public minDate = new Date(); + public maxDate = new Date(new Date(this.minDate.getFullYear(), this.minDate.getMonth(), this.minDate.getDate() + 14)); + + constructor(private fb: FormBuilder) { } + + public ngOnInit(): void { + this.genres = [ + { type: 'Action', movies: ['The Matrix', 'Kill Bill: Vol.1', 'The Dark Knight Rises'] }, + { type: 'Adventure', movies: ['Interstellar', 'Inglourious Basterds', 'Inception'] }, + { type: 'Comedy', movies: ['Wild Tales', 'In Bruges', 'Three Billboards Outside Ebbing, Missouri', 'Untouchable', '3 idiots'] }, + { type: 'Crime', movies: ['Training Day', 'Heat', 'American Gangster'] }, + { type: 'Drama', movies: ['Fight Club', 'A Beautiful Mind', 'Good Will Hunting', 'City of God'] }, + { type: 'Biography', movies: ['Amadeus', 'Bohemian Rhapsody'] }, + { type: 'Mystery', movies: ['The Prestige', 'Memento', 'Cloud Atlas'] }, + { type: 'Musical', movies: ['All That Jazz'] }, + { type: 'Romance', movies: ['Love Actually', 'In The Mood for Love'] }, + { type: 'Sci-Fi', movies: ['The Fifth Element'] }, + { type: 'Thriller', movies: ['The Usual Suspects'] }, + { type: 'Western', movies: ['Django Unchained'] } + ]; + + this.user = this.fb.group({ + date: ['', Validators.required], + time: ['', Validators.required], + email: ['', Validators.required], + fullName: ['', Validators.required], + genres: [''], + movie: ['', Validators.required], + phone: [''] + }); + } + + public onSubmit() { + console.log(this.user); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/input-group/default/index.ts b/packages/igx-templates/igx-ts-legacy/input-group/default/index.ts new file mode 100644 index 000000000..39c47e1bb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/default/index.ts @@ -0,0 +1,30 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxInputGroupTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Input Group"]; + this.controlGroup = "Data Entry & Display"; + this.listInComponentTemplates = true; + this.id = "input-group"; + this.projectType = "igx-ts"; + this.name = "Input Group"; + this.description = "IgxInputGroup form view template"; + this.dependencies = [{ + import: [ + "IgxButtonModule", + "IgxComboModule", + "IgxDatePickerModule", + "IgxIconModule", + "IgxInputGroupModule", + "IgxRippleModule", + "IgxTimePickerModule", + "IgxSelectModule" + ], + from: "<%=igxPackage%>" + }, + { import: "FormsModule, ReactiveFormsModule", from: "@angular/forms" } + ]; + } +} +module.exports = new IgxInputGroupTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/input-group/index.ts b/packages/igx-templates/igx-ts-legacy/input-group/index.ts new file mode 100644 index 000000000..d2cf16390 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/input-group/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxInputGroupComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Input Group"; + this.group = "Data Entry & Display"; + } +} +module.exports = new IgxInputGroupComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..f4fb550b8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,32 @@ +
+

You can read more about configuring the linear gauge component in the + official documentation page + . +

+
+
+ + + +
+ +
+ + + +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..9de4fb2fd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,26 @@ +.sample-container { + display: flex; + flex-direction: column; +} + +.buttons-container { + display: flex; + margin-bottom: 5px; +} + +.sample-button { + margin: 3px; + flex-grow: 1; + height: 30px; + font: 12px Titillium Web, sans-serif; + min-width: 5.5rem; + height: 2.25rem; + font-size: 0.875rem; + font-weight: 600; + line-height: 1; + text-align: center; + border: none; + border-radius: 2px; + text-transform: uppercase; + cursor: pointer; +} diff --git a/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..9623b5665 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,29 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxLinearGaugeModule } from 'igniteui-angular-gauges'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxLinearGaugeModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + // disable animation + component.linearGauge.transitionDuration = 0; + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..49159c378 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,239 @@ +import { AfterViewInit, Component, ViewChild, ViewEncapsulation } from '@angular/core'; +import { + IgxLinearGaugeComponent, + IgxLinearGraphRangeComponent, + LinearGraphNeedleShape +} from 'igniteui-angular-gauges'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component implements AfterViewInit { + public needleShape = LinearGraphNeedleShape + + @ViewChild('linearGauge', { static: true }) + public linearGauge!: IgxLinearGaugeComponent; + + public ngAfterViewInit(): void { + // enabling animation duration (in milliseconds) + this.linearGauge.transitionDuration = 500; + this.animateToGauge3(); + } + + public animateToGauge3(): void { + // linear gauge requires settings for these properties: + this.linearGauge.minimumValue = 0; + this.linearGauge.maximumValue = 100; + this.linearGauge.value = 50; + this.linearGauge.interval = 10; + + // setting custom appearance of labels + this.linearGauge.labelInterval = 10; + this.linearGauge.labelExtent = 0.05; + + // setting custom appearance of needle + this.linearGauge.isNeedleDraggingEnabled = true; + this.linearGauge.needleShape = LinearGraphNeedleShape.Needle; + this.linearGauge.needleBrush = '#79797a'; + this.linearGauge.needleOutline = '#ffffffff'; + this.linearGauge.needleStrokeThickness = 1; + this.linearGauge.needleOuterExtent = 0.9; + this.linearGauge.needleInnerExtent = 0.3; + + // setting custom appearance of major/minor ticks + this.linearGauge.minorTickCount = 5; + this.linearGauge.minorTickEndExtent = 0.10; + this.linearGauge.minorTickStartExtent = 0.20; + this.linearGauge.minorTickStrokeThickness = 1; + this.linearGauge.tickStartExtent = 0.25; + this.linearGauge.tickEndExtent = 0.05; + this.linearGauge.tickStrokeThickness = 2; + + // setting custom gauge ranges + const range1 = new IgxLinearGraphRangeComponent(); + range1.startValue = 0; + range1.endValue = 30; + const range2 = new IgxLinearGraphRangeComponent(); + range2.startValue = 30; + range2.endValue = 70; + const range3 = new IgxLinearGraphRangeComponent(); + range3.startValue = 70; + range3.endValue = 100; + + this.linearGauge.rangeBrushes = ['#9FB328', '#438C47', '#3F51B5']; + this.linearGauge.rangeOutlines = ['#9FB328', '#438C47', '#3F51B5']; + this.linearGauge.ranges.clear(); + this.linearGauge.ranges.add(range1); + this.linearGauge.ranges.add(range2); + this.linearGauge.ranges.add(range3); + + // setting extent of all gauge ranges + for(let i = 0; i igx-list component with filtering.

+

You can read more about configuring the igx-list component in the + README or the + official + documentation. +

+ + + search + + + + clear + + + + Contacts + +
+
+ +
+ {{ contact.name }} + {{ contact.phone }} +
+
+ star + +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..235a47a70 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,42 @@ +igx-icon { + cursor: pointer; + user-select: none; +} + +.search { + margin-bottom: 8px; +} + +.item-container { + display: flex; + justify-content: space-between; + align-items: center; +} + +.icon { + color: lightgray; +} + +.icon.icon--favorite { + color: orange; +} + +.contact { + display: flex; + flex: 1 0 240px; + align-items: center; +} + +.contact__info { + display: flex; + flex-flow: column nowrap; + margin-left: 24px; +} + +.name { + font-weight: 600; +} + +.phone { + font-size: 0.875em; +} diff --git a/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..c14aefd5d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { IgxAvatarModule, IgxFilterModule, IgxIconModule, IgxInputGroupModule, IgxListModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [FormsModule, IgxAvatarModule, IgxFilterModule, IgxIconModule, IgxInputGroupModule, IgxListModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..3ccb6a966 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/list/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,63 @@ +import { Component } from '@angular/core'; +import { IgxFilterOptions, IgxListItemComponent } from '<%=igxPackage%>'; + +interface Contact { + isFavorite: boolean; + name: string; + phone: string; + photo: string; +} + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public title = '<%=name%>'; + public searchContact = ''; + public contacts: Contact[] = [ + { + isFavorite: false, + name: 'Terrance Orta', + phone: '770-504-2217', + photo: 'https://randomuser.me/api/portraits/men/27.jpg' + }, + { + isFavorite: true, + name: 'Richard Mahoney', + phone: '423-676-2869', + photo: 'https://randomuser.me/api/portraits/men/1.jpg' + }, + { + isFavorite: false, + name: 'Donna Price', + phone: '859-496-2817', + photo: 'https://randomuser.me/api/portraits/women/50.jpg' + }, + { + isFavorite: false, + name: 'Lisa Landers', + phone: '901-747-3428', + photo: 'https://randomuser.me/api/portraits/women/3.jpg' + }, + { + isFavorite: true, + name: 'Dorothy H. Spencer', + phone: '573-394-9254', + photo: 'https://randomuser.me/api/portraits/women/67.jpg' + } + ]; + + public get filterContacts(): IgxFilterOptions { + const fo = new IgxFilterOptions(); + fo.key = 'name'; + fo.inputValue = this.searchContact; + return fo; + } + + public toggleFavorite(item: IgxListItemComponent): void { + const contact = this.contacts[item.index - 1]; + contact.isFavorite = !contact.isFavorite; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/list/default/index.ts b/packages/igx-templates/igx-ts-legacy/list/default/index.ts new file mode 100644 index 000000000..943aa6c7e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/list/default/index.ts @@ -0,0 +1,25 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxListTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["List"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "list"; + this.projectType = "igx-ts"; + this.name = "List"; + this.description = "basic IgxList"; + this.dependencies = [{ + import: ["IgxListModule", "IgxAvatarModule", "IgxIconModule", "IgxInputGroupModule", "IgxFilterModule"], + from: "<%=igxPackage%>" + }, { + import: ["CommonModule"], + from: "@angular/common" + }, { + import: ["FormsModule"], + from: "@angular/forms" + }]; + } +} +module.exports = new IgxListTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/list/index.ts b/packages/igx-templates/igx-ts-legacy/list/index.ts new file mode 100644 index 000000000..98b00466d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/list/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxListComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "List"; + this.group = "Grids & Lists"; + this.description = `displays rows of items and supports one or more header items as well as + search and filtering of list items.`; + } +} +module.exports = new IgxListComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..bba48b999 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,11 @@ +
+

You can read more about configuring the map component in the + official documentation page + . +

+
+ + diff --git a/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b5bfb2b49 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,7 @@ +:host { + flex: 1 1 auto; +} +.info { + margin: auto; + width: 50%; +} diff --git a/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..2d82b4e1d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxGeographicMapModule } from 'igniteui-angular-maps'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxGeographicMapModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..061226ec8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,17 @@ +import { AfterViewInit, Component, ViewChild } from '@angular/core'; +import { IgxGeographicMapComponent } from 'igniteui-angular-maps'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements AfterViewInit { + + @ViewChild('map', {static: true}) + public map!: IgxGeographicMapComponent; + + public ngAfterViewInit(): void { + this.map.windowRect = { left: 0.2, top: 0.1, width: 0.7, height: 0.7 }; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/map/default/index.ts b/packages/igx-templates/igx-ts-legacy/map/default/index.ts new file mode 100644 index 000000000..8130b3f9d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/default/index.ts @@ -0,0 +1,26 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxGeographicMapTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Geographic Map"]; + this.controlGroup = "Maps"; + this.listInComponentTemplates = true; + this.id = "geographic-map"; + this.projectType = "igx-ts"; + this.name = "Geographic Map"; + this.description = "Basic IgxGeographicMap."; + this.dependencies = [ + { + import: ["IgxGeographicMapModule"], + from: "igniteui-angular-maps" + }, + { + import: ["IgxDataChartInteractivityModule"], + from: "igniteui-angular-charts" + } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0", "igniteui-angular-maps@~17.0.0"]; + } +} +module.exports = new IgxGeographicMapTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/map/index.ts b/packages/igx-templates/igx-ts-legacy/map/index.ts new file mode 100644 index 000000000..2e8f6d5b8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/map/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxGeographicMapComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Geographic Map"; + this.group = "Maps"; + this.description = `allows you to display data that contains geographic locations from view models or geo-spatial data loaded from shape files on geographic imagery maps.`; + } +} +module.exports = new IgxGeographicMapComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..be5332c75 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,7 @@ +

Basic pivot grid.

+

You can read more about configuring the igx-pivot-grid component in the + official documentation. +

+ + diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b9bc65ea4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,3 @@ +:host { + width: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..c967c1f06 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxPivotGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxPivotGridModule, + NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..baaca60ff --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,44 @@ +import { Component } from '@angular/core'; +import { DATA } from './data'; +import { IPivotConfiguration, IgxPivotNumericAggregate } from '<%=igxPackage%>'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public data = DATA; + public pivotConfigHierarchy: IPivotConfiguration = { + columns: [ + { + + memberName: 'Product', + memberFunction: (data) => data.Product.Name, + enabled: true + } + + ], + rows: [ + { + memberName: 'Seller', + memberFunction: (data) => data.Seller.Name, + enabled: true + } + ], + values: [ + { + member: 'NumberOfUnits', + aggregate: { + aggregator: IgxPivotNumericAggregate.sum, + key: 'sum', + label: 'Sum' + }, + enabled: true + + } + ], + filters: null + }; +} + diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/data.ts b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/data.ts new file mode 100644 index 000000000..3f031f475 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/files/src/app/__path__/data.ts @@ -0,0 +1,6502 @@ +export const DATA = [ + { + Product: { + Name: 'Clothing', + UnitPrice: '12.814860936633712' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Seattle' + }, + Date: '2007-01-01T00:00:00', + Value: '94.2652032683907', + NumberOfUnits: '282' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '49.579375120615296' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Sofia' + }, + Date: '2007-01-05T00:00:00', + Value: '70.798922689072285', + NumberOfUnits: '296' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '3.5653273591610266' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2007-01-06T00:00:00', + Value: '35.799331607203619', + NumberOfUnits: '68' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '85.581758145979492' + }, + Seller: { + Name: 'David Haley', + City: 'London' + }, + Date: '2007-01-07T00:00:00', + Value: '41.411331268684627', + NumberOfUnits: '293' + }, + { + Product: { + Name: 'Components', + UnitPrice: '18.137625846144569' + }, + Seller: { + Name: 'John Smith', + City: 'Seattle' + }, + Date: '2007-01-08T00:00:00', + Value: '60.474313730594851', + NumberOfUnits: '240' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '68.330973139186852' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Tokyo' + }, + Date: '2007-01-12T00:00:00', + Value: '37.920727319047195', + NumberOfUnits: '456' + }, + { + Product: { + Name: 'Components', + UnitPrice: '16.056252511244384' + }, + Seller: { + Name: 'Walter Pang', + City: 'Sofia' + }, + Date: '2007-02-09T00:00:00', + Value: '89.1950179306767', + NumberOfUnits: '492' + }, + { + Product: { + Name: 'Components', + UnitPrice: '35.235206612960994' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Tokyo' + }, + Date: '2007-02-16T00:00:00', + Value: '1.8611075365269125', + NumberOfUnits: '78' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '73.215433663323253' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2007-02-17T00:00:00', + Value: '4.611142726899657', + NumberOfUnits: '150' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '73.614934400476017' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'London' + }, + Date: '2007-02-19T00:00:00', + Value: '36.1731772013815', + NumberOfUnits: '262' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '47.080544683654111' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Sofia' + }, + Date: '2007-02-21T00:00:00', + Value: '18.699740766873461', + NumberOfUnits: '125' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '51.298256382019382' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Sofia' + }, + Date: '2007-03-04T00:00:00', + Value: '11.600706917979151', + NumberOfUnits: '42' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '27.466344333936622' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2007-03-04T00:00:00', + Value: '41.252478603856865', + NumberOfUnits: '282' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '22.374118083330856' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Berlin' + }, + Date: '2007-03-17T00:00:00', + Value: '59.82648998490837', + NumberOfUnits: '305' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '85.292836504659078' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'Tokyo' + }, + Date: '2007-03-23T00:00:00', + Value: '31.430979925874148', + NumberOfUnits: '265' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '80.675564091967217' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Mellvile' + }, + Date: '2007-03-25T00:00:00', + Value: '90.425077402230855', + NumberOfUnits: '350' + }, + { + Product: { + Name: 'Components', + UnitPrice: '64.613919642108456' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'Mellvile' + }, + Date: '2007-03-27T00:00:00', + Value: '95.393439147338938', + NumberOfUnits: '82' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '50.041336636078235' + }, + Seller: { + Name: 'Harry Tyler', + City: 'New York' + }, + Date: '2007-04-02T00:00:00', + Value: '1.2766330043210803', + NumberOfUnits: '67' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '16.311566166724809' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Mellvile' + }, + Date: '2007-04-04T00:00:00', + Value: '25.354673632120097', + NumberOfUnits: '370' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '49.852171563474542' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Berlin' + }, + Date: '2007-04-12T00:00:00', + Value: '46.315344491189045', + NumberOfUnits: '228' + }, + { + Product: { + Name: 'Components', + UnitPrice: '44.761602042597531' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Tokyo' + }, + Date: '2007-04-15T00:00:00', + Value: '82.180273524569472', + NumberOfUnits: '272' + }, + { + Product: { + Name: 'Components', + UnitPrice: '44.395412618478488' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Berlin' + }, + Date: '2007-04-18T00:00:00', + Value: '83.970713701085515', + NumberOfUnits: '227' + }, + { + Product: { + Name: 'Components', + UnitPrice: '39.287860616709978' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2007-04-18T00:00:00', + Value: '94.261160769621455', + NumberOfUnits: '248' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '36.581183335083153' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Tokyo' + }, + Date: '2007-04-21T00:00:00', + Value: '45.74127162142716', + NumberOfUnits: '414' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '75.8285212217963' + }, + Seller: { + Name: 'Walter Pang', + City: 'London' + }, + Date: '2007-04-25T00:00:00', + Value: '97.593172917884388', + NumberOfUnits: '43' + }, + { + Product: { + Name: 'Components', + UnitPrice: '57.757038929386553' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2007-04-26T00:00:00', + Value: '20.936109088797174', + NumberOfUnits: '71' + }, + { + Product: { + Name: 'Components', + UnitPrice: '40.231876140568346' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'New York' + }, + Date: '2007-05-14T00:00:00', + Value: '71.862645294453316', + NumberOfUnits: '321' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '49.525128002057379' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'London' + }, + Date: '2007-05-17T00:00:00', + Value: '49.451349419286174', + NumberOfUnits: '329' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '56.460825706115379' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2007-05-17T00:00:00', + Value: '72.704781020388381', + NumberOfUnits: '88' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '67.129778008502811' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'New York' + }, + Date: '2007-05-26T00:00:00', + Value: '56.169638576065019', + NumberOfUnits: '366' + }, + { + Product: { + Name: 'Components', + UnitPrice: '14.628920431541708' + }, + Seller: { + Name: 'Walter Pang', + City: 'Sofia' + }, + Date: '2007-06-02T00:00:00', + Value: '81.322212508563979', + NumberOfUnits: '450' + }, + { + Product: { + Name: 'Components', + UnitPrice: '89.2609520299644' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2007-06-06T00:00:00', + Value: '18.962721814849751', + NumberOfUnits: '475' + }, + { + Product: { + Name: 'Components', + UnitPrice: '33.752368871938607' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2007-06-11T00:00:00', + Value: '54.870849966477067', + NumberOfUnits: '195' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '54.101630511740986' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Sofia' + }, + Date: '2007-06-17T00:00:00', + Value: '71.630847021765462', + NumberOfUnits: '458' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '18.437854628282533' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Sofia' + }, + Date: '2007-07-04T00:00:00', + Value: '24.16097206257329', + NumberOfUnits: '7' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '96.142818264729726' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'New York' + }, + Date: '2007-07-08T00:00:00', + Value: '57.497908062067772', + NumberOfUnits: '158' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '22.990409435234223' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Tokyo' + }, + Date: '2007-07-09T00:00:00', + Value: '58.795889168417027', + NumberOfUnits: '34' + }, + { + Product: { + Name: 'Components', + UnitPrice: '52.664019145380713' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2007-07-10T00:00:00', + Value: '32.396441061234306', + NumberOfUnits: '412' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '62.127701128892468' + }, + Seller: { + Name: 'John Smith', + City: 'Sofia' + }, + Date: '2007-07-15T00:00:00', + Value: '84.924038818536346', + NumberOfUnits: '10' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '10.722568543033008' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'New York' + }, + Date: '2007-07-16T00:00:00', + Value: '52.205748228452052', + NumberOfUnits: '466' + }, + { + Product: { + Name: 'Components', + UnitPrice: '4.6933130848656006' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'London' + }, + Date: '2007-07-20T00:00:00', + Value: '34.224967395060212', + NumberOfUnits: '248' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '43.724528301378953' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Mellvile' + }, + Date: '2007-07-24T00:00:00', + Value: '45.460345011884506', + NumberOfUnits: '307' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '76.440263947677' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2007-07-26T00:00:00', + Value: '26.061410608730007', + NumberOfUnits: '445' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '34.278292178305932' + }, + Seller: { + Name: 'Bryan Culver', + City: 'New York' + }, + Date: '2007-08-01T00:00:00', + Value: '89.2379715522928', + NumberOfUnits: '480' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '68.573393890901187' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Berlin' + }, + Date: '2007-08-02T00:00:00', + Value: '38.090129912872861', + NumberOfUnits: '390' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '65.068199003612719' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Mellvile' + }, + Date: '2007-08-05T00:00:00', + Value: '23.047295037213384', + NumberOfUnits: '388' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '44.938480036770216' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Seattle' + }, + Date: '2007-08-19T00:00:00', + Value: '23.370492376093981', + NumberOfUnits: '37' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '93.468684653504141' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2007-08-24T00:00:00', + Value: '17.307506789130862', + NumberOfUnits: '237' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '94.365085472522807' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2007-08-26T00:00:00', + Value: '54.621032604305555', + NumberOfUnits: '396' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '72.4087734112557' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2007-08-26T00:00:00', + Value: '60.920718014669006', + NumberOfUnits: '3' + }, + { + Product: { + Name: 'Components', + UnitPrice: '80.5917513932063' + }, + Seller: { + Name: 'Russell Shorter', + City: 'New York' + }, + Date: '2007-09-02T00:00:00', + Value: '85.134478139288021', + NumberOfUnits: '330' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '65.4044602836503' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2007-09-04T00:00:00', + Value: '51.209239359576827', + NumberOfUnits: '143' + }, + { + Product: { + Name: 'Components', + UnitPrice: '30.638690912462163' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Seattle' + }, + Date: '2007-09-05T00:00:00', + Value: '55.2145366348394', + NumberOfUnits: '318' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '7.6167185826304928' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Seattle' + }, + Date: '2007-09-06T00:00:00', + Value: '41.804668093940556', + NumberOfUnits: '393' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '46.946888019771727' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Seattle' + }, + Date: '2007-09-10T00:00:00', + Value: '9.0849790764436964', + NumberOfUnits: '129' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '38.017715484843457' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2007-09-17T00:00:00', + Value: '25.578551518534564', + NumberOfUnits: '426' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '2.48126508783608' + }, + Seller: { + Name: 'Harry Tyler', + City: 'London' + }, + Date: '2007-09-18T00:00:00', + Value: '36.332240158846716', + NumberOfUnits: '217' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '77.58936000875633' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2007-09-20T00:00:00', + Value: '27.885909670910756', + NumberOfUnits: '152' + }, + { + Product: { + Name: 'Components', + UnitPrice: '97.145493420374336' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Seattle' + }, + Date: '2007-09-25T00:00:00', + Value: '21.834250782539254', + NumberOfUnits: '452' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '19.697441309549585' + }, + Seller: { + Name: 'Carl Costello', + City: 'Seattle' + }, + Date: '2007-10-02T00:00:00', + Value: '98.261060238937418', + NumberOfUnits: '499' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '32.775894986826877' + }, + Seller: { + Name: 'Mark Slater', + City: 'Seattle' + }, + Date: '2007-10-06T00:00:00', + Value: '79.624117389146292', + NumberOfUnits: '169' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '21.953632739350958' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Berlin' + }, + Date: '2007-10-14T00:00:00', + Value: '69.497183183905292', + NumberOfUnits: '386' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '35.591812029290857' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2007-10-14T00:00:00', + Value: '27.775967413455234', + NumberOfUnits: '454' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '46.950088509800885' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'New York' + }, + Date: '2007-10-25T00:00:00', + Value: '82.136559757467623', + NumberOfUnits: '334' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '41.134977406419338' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2007-10-26T00:00:00', + Value: '54.425787531969036', + NumberOfUnits: '107' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '13.837097405380149' + }, + Seller: { + Name: 'Mark Slater', + City: 'Sofia' + }, + Date: '2007-11-07T00:00:00', + Value: '86.212293890403728', + NumberOfUnits: '275' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '64.159993810653688' + }, + Seller: { + Name: 'Monica Freitag', + City: 'London' + }, + Date: '2007-11-09T00:00:00', + Value: '37.720342091154471', + NumberOfUnits: '241' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '1.2072517076540981' + }, + Seller: { + Name: 'Larry Lieb', + City: 'London' + }, + Date: '2007-11-11T00:00:00', + Value: '75.227352033940775', + NumberOfUnits: '177' + }, + { + Product: { + Name: 'Components', + UnitPrice: '57.8050364078046' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Sofia' + }, + Date: '2007-11-13T00:00:00', + Value: '58.445235415569151', + NumberOfUnits: '494' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '39.492234559493248' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Mellvile' + }, + Date: '2007-11-19T00:00:00', + Value: '40.710543394419616', + NumberOfUnits: '451' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '5.21720713247415' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Tokyo' + }, + Date: '2008-01-01T00:00:00', + Value: '91.820002250289548', + NumberOfUnits: '125' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '53.42944141171381' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'London' + }, + Date: '2008-01-02T00:00:00', + Value: '30.892902720204045', + NumberOfUnits: '103' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '52.157351957707363' + }, + Seller: { + Name: 'Larry Lieb', + City: 'New York' + }, + Date: '2008-01-03T00:00:00', + Value: '42.964697369823554', + NumberOfUnits: '224' + }, + { + Product: { + Name: 'Components', + UnitPrice: '17.694580656334097' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2008-01-07T00:00:00', + Value: '47.573478262672893', + NumberOfUnits: '498' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '80.741111925216913' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2008-01-08T00:00:00', + Value: '15.613263806148089', + NumberOfUnits: '142' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '95.439666973166013' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Berlin' + }, + Date: '2008-01-21T00:00:00', + Value: '87.2099365513818', + NumberOfUnits: '487' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '21.778967427918204' + }, + Seller: { + Name: 'David Haley', + City: 'Mellvile' + }, + Date: '2008-01-27T00:00:00', + Value: '14.448109741531365', + NumberOfUnits: '331' + }, + { + Product: { + Name: 'Components', + UnitPrice: '29.907407625535225' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2008-02-03T00:00:00', + Value: '99.235560325549713', + NumberOfUnits: '418' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '39.839772945195328' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'New York' + }, + Date: '2008-02-04T00:00:00', + Value: '61.018408397686862', + NumberOfUnits: '214' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '40.366990370846814' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Mellvile' + }, + Date: '2008-02-05T00:00:00', + Value: '81.740158694675273', + NumberOfUnits: '229' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '35.198273153602273' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'London' + }, + Date: '2008-02-05T00:00:00', + Value: '54.246561859849173', + NumberOfUnits: '16' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '41.75500964827603' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Sofia' + }, + Date: '2008-02-08T00:00:00', + Value: '17.860554632665849', + NumberOfUnits: '216' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '0.687878998316768' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Sofia' + }, + Date: '2008-02-09T00:00:00', + Value: '84.92055874547016', + NumberOfUnits: '486' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '37.556058092767394' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Tokyo' + }, + Date: '2008-02-13T00:00:00', + Value: '45.0776737858903', + NumberOfUnits: '172' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '20.804581568019735' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'New York' + }, + Date: '2008-02-21T00:00:00', + Value: '60.542486123993285', + NumberOfUnits: '102' + }, + { + Product: { + Name: 'Components', + UnitPrice: '70.646779691170337' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Seattle' + }, + Date: '2008-02-24T00:00:00', + Value: '42.896613079540721', + NumberOfUnits: '36' + }, + { + Product: { + Name: 'Components', + UnitPrice: '53.290544102569356' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2008-02-25T00:00:00', + Value: '11.017731628854634', + NumberOfUnits: '71' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '24.854228983099681' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2008-02-25T00:00:00', + Value: '16.975014478422242', + NumberOfUnits: '53' + }, + { + Product: { + Name: 'Components', + UnitPrice: '64.6324524025584' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Tokyo' + }, + Date: '2008-02-25T00:00:00', + Value: '98.961504315473832', + NumberOfUnits: '104' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '9.6438375346566723' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Tokyo' + }, + Date: '2008-02-26T00:00:00', + Value: '96.234209880341865', + NumberOfUnits: '294' + }, + { + Product: { + Name: 'Components', + UnitPrice: '41.077790568153276' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Sofia' + }, + Date: '2008-03-03T00:00:00', + Value: '93.68367497515105', + NumberOfUnits: '454' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '36.977834551119173' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Berlin' + }, + Date: '2008-03-05T00:00:00', + Value: '82.816526006356128', + NumberOfUnits: '492' + }, + { + Product: { + Name: 'Components', + UnitPrice: '16.830879969909265' + }, + Seller: { + Name: 'Harry Tyler', + City: 'New York' + }, + Date: '2008-03-08T00:00:00', + Value: '0.654079998216629', + NumberOfUnits: '132' + }, + { + Product: { + Name: 'Components', + UnitPrice: '24.716882512307205' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'New York' + }, + Date: '2008-03-09T00:00:00', + Value: '88.519476162511609', + NumberOfUnits: '225' + }, + { + Product: { + Name: 'Components', + UnitPrice: '65.64449792059348' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2008-03-10T00:00:00', + Value: '69.0674314131343', + NumberOfUnits: '422' + }, + { + Product: { + Name: 'Components', + UnitPrice: '70.470670270952709' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2008-03-12T00:00:00', + Value: '97.0884484691026', + NumberOfUnits: '303' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '65.1173483417916' + }, + Seller: { + Name: 'Carl Costello', + City: 'London' + }, + Date: '2008-03-13T00:00:00', + Value: '46.4407860983353', + NumberOfUnits: '319' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '39.577671764221819' + }, + Seller: { + Name: 'Harold Garvin', + City: 'London' + }, + Date: '2008-03-14T00:00:00', + Value: '48.544153733432367', + NumberOfUnits: '262' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '50.714457570907875' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Berlin' + }, + Date: '2008-03-23T00:00:00', + Value: '91.7152666448221', + NumberOfUnits: '345' + }, + { + Product: { + Name: 'Components', + UnitPrice: '88.2468002793597' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2008-04-03T00:00:00', + Value: '87.275520939042579', + NumberOfUnits: '407' + }, + { + Product: { + Name: 'Components', + UnitPrice: '47.252974541509978' + }, + Seller: { + Name: 'Walter Pang', + City: 'Berlin' + }, + Date: '2008-04-04T00:00:00', + Value: '15.127723903920373', + NumberOfUnits: '121' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '30.427555660916283' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2008-04-06T00:00:00', + Value: '44.425472405005934', + NumberOfUnits: '30' + }, + { + Product: { + Name: 'Components', + UnitPrice: '88.243144186326845' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Berlin' + }, + Date: '2008-04-11T00:00:00', + Value: '25.280987110585436', + NumberOfUnits: '293' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '16.463555962063165' + }, + Seller: { + Name: 'David Haley', + City: 'Sofia' + }, + Date: '2008-04-12T00:00:00', + Value: '55.071955618947719', + NumberOfUnits: '271' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '95.208247981596855' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Sofia' + }, + Date: '2008-04-18T00:00:00', + Value: '25.773858011594907', + NumberOfUnits: '107' + }, + { + Product: { + Name: 'Components', + UnitPrice: '7.7514979558771' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Mellvile' + }, + Date: '2008-04-18T00:00:00', + Value: '54.484538247103117', + NumberOfUnits: '87' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '94.826276877348434' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2008-04-23T00:00:00', + Value: '78.9546419768383', + NumberOfUnits: '319' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '37.211896543024061' + }, + Seller: { + Name: 'Lydia Burson', + City: 'New York' + }, + Date: '2008-04-24T00:00:00', + Value: '21.612914242601448', + NumberOfUnits: '346' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '99.308858159607666' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2008-05-07T00:00:00', + Value: '77.780686075697034', + NumberOfUnits: '382' + }, + { + Product: { + Name: 'Components', + UnitPrice: '96.081492582374011' + }, + Seller: { + Name: 'Larry Lieb', + City: 'New York' + }, + Date: '2008-05-11T00:00:00', + Value: '35.351181326131886', + NumberOfUnits: '334' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '26.152281568456569' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Tokyo' + }, + Date: '2008-05-13T00:00:00', + Value: '28.839570995811176', + NumberOfUnits: '176' + }, + { + Product: { + Name: 'Components', + UnitPrice: '80.816311985634414' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2008-05-19T00:00:00', + Value: '8.3833388091918728', + NumberOfUnits: '125' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '78.320334701948028' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Mellvile' + }, + Date: '2008-05-19T00:00:00', + Value: '15.037549294083169', + NumberOfUnits: '458' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '93.996538219040517' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Berlin' + }, + Date: '2008-05-25T00:00:00', + Value: '68.472067345153576', + NumberOfUnits: '331' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '96.600178441312252' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2008-05-27T00:00:00', + Value: '70.953166331608386', + NumberOfUnits: '39' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '37.643226812427507' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2008-06-06T00:00:00', + Value: '97.089249918744542', + NumberOfUnits: '238' + }, + { + Product: { + Name: 'Components', + UnitPrice: '46.977469579771849' + }, + Seller: { + Name: 'Walter Pang', + City: 'London' + }, + Date: '2008-06-07T00:00:00', + Value: '5.6769712854535186', + NumberOfUnits: '84' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '80.151598053123621' + }, + Seller: { + Name: 'Mark Slater', + City: 'Tokyo' + }, + Date: '2008-06-08T00:00:00', + Value: '24.8368413303219', + NumberOfUnits: '363' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '43.5199616679549' + }, + Seller: { + Name: 'Harry Tyler', + City: 'New York' + }, + Date: '2008-06-08T00:00:00', + Value: '58.973721162869467', + NumberOfUnits: '479' + }, + { + Product: { + Name: 'Components', + UnitPrice: '56.316017851380643' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Sofia' + }, + Date: '2008-06-11T00:00:00', + Value: '87.466286116962451', + NumberOfUnits: '404' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '81.685168194437935' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2008-06-18T00:00:00', + Value: '80.283416472507369', + NumberOfUnits: '478' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '90.111846611887145' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Sofia' + }, + Date: '2008-06-19T00:00:00', + Value: '2.328636451777367', + NumberOfUnits: '285' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '99.342426471105966' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Sofia' + }, + Date: '2008-06-22T00:00:00', + Value: '82.489029449638466', + NumberOfUnits: '15' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '30.834545442291788' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Berlin' + }, + Date: '2008-06-26T00:00:00', + Value: '77.825110767886557', + NumberOfUnits: '245' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '99.386958358523884' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2008-07-01T00:00:00', + Value: '8.1397687588537888', + NumberOfUnits: '376' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '73.34977298665315' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'New York' + }, + Date: '2008-07-02T00:00:00', + Value: '48.44682516923492', + NumberOfUnits: '40' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '43.496660489354589' + }, + Seller: { + Name: 'Larry Lieb', + City: 'London' + }, + Date: '2008-07-10T00:00:00', + Value: '37.8727404577065', + NumberOfUnits: '112' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '16.394280649905223' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'New York' + }, + Date: '2008-07-15T00:00:00', + Value: '9.7406020433365388', + NumberOfUnits: '224' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '71.402299390827437' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Tokyo' + }, + Date: '2008-07-16T00:00:00', + Value: '66.4204306278473', + NumberOfUnits: '145' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '94.61881909268854' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2008-07-21T00:00:00', + Value: '46.491464388785637', + NumberOfUnits: '272' + }, + { + Product: { + Name: 'Components', + UnitPrice: '50.753261684790843' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2008-07-27T00:00:00', + Value: '90.114484676213223', + NumberOfUnits: '278' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '12.782123597702999' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2008-07-27T00:00:00', + Value: '89.137324080400788', + NumberOfUnits: '253' + }, + { + Product: { + Name: 'Components', + UnitPrice: '35.780031064422815' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'New York' + }, + Date: '2008-08-01T00:00:00', + Value: '28.40646618437323', + NumberOfUnits: '255' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '17.133888051441819' + }, + Seller: { + Name: 'David Haley', + City: 'Seattle' + }, + Date: '2008-08-02T00:00:00', + Value: '0.455726543653629', + NumberOfUnits: '46' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '22.126638806484006' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Tokyo' + }, + Date: '2008-08-08T00:00:00', + Value: '58.445409852287455', + NumberOfUnits: '279' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '62.986888765816992' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2008-08-08T00:00:00', + Value: '91.802758533415741', + NumberOfUnits: '89' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '83.838022585882825' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Sofia' + }, + Date: '2008-08-14T00:00:00', + Value: '52.590476420051637', + NumberOfUnits: '17' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '14.075806277839376' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Sofia' + }, + Date: '2008-08-21T00:00:00', + Value: '53.912139196839249', + NumberOfUnits: '470' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '34.591086923420008' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Mellvile' + }, + Date: '2008-08-25T00:00:00', + Value: '1.7413051341387', + NumberOfUnits: '195' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '86.727353691462127' + }, + Seller: { + Name: 'Lydia Burson', + City: 'New York' + }, + Date: '2008-08-27T00:00:00', + Value: '23.782985947925127', + NumberOfUnits: '173' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '42.2365329890682' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'New York' + }, + Date: '2008-09-01T00:00:00', + Value: '51.1229278292148', + NumberOfUnits: '472' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '25.687071413587347' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2008-09-06T00:00:00', + Value: '88.372170640328974', + NumberOfUnits: '148' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '23.20858027004105' + }, + Seller: { + Name: 'Walter Pang', + City: 'Mellvile' + }, + Date: '2008-09-06T00:00:00', + Value: '94.485007689560291', + NumberOfUnits: '314' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '83.763652752974835' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2008-09-07T00:00:00', + Value: '66.778043828335612', + NumberOfUnits: '431' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '84.414287882118629' + }, + Seller: { + Name: 'Walter Pang', + City: 'Mellvile' + }, + Date: '2008-09-07T00:00:00', + Value: '27.639171773399774', + NumberOfUnits: '347' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '7.3291354846810624' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Berlin' + }, + Date: '2008-09-11T00:00:00', + Value: '2.7723569435870075', + NumberOfUnits: '27' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '9.5534944019995134' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Berlin' + }, + Date: '2008-09-12T00:00:00', + Value: '11.851146077667897', + NumberOfUnits: '5' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '50.820872164713627' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Mellvile' + }, + Date: '2008-09-19T00:00:00', + Value: '16.46975079386949', + NumberOfUnits: '191' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '79.869313901229447' + }, + Seller: { + Name: 'Bryan Culver', + City: 'New York' + }, + Date: '2008-09-25T00:00:00', + Value: '84.273458730556754', + NumberOfUnits: '421' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '62.238494475483193' + }, + Seller: { + Name: 'Carl Costello', + City: 'Seattle' + }, + Date: '2008-10-03T00:00:00', + Value: '28.857351992678527', + NumberOfUnits: '297' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '96.094717130109075' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'New York' + }, + Date: '2008-10-04T00:00:00', + Value: '15.797333380113047', + NumberOfUnits: '128' + }, + { + Product: { + Name: 'Components', + UnitPrice: '47.009710244373281' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Mellvile' + }, + Date: '2008-10-13T00:00:00', + Value: '37.30084394910412', + NumberOfUnits: '210' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '35.7560529074427' + }, + Seller: { + Name: 'Russell Shorter', + City: 'London' + }, + Date: '2008-10-14T00:00:00', + Value: '26.942082646741571', + NumberOfUnits: '315' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '78.989432462951839' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'New York' + }, + Date: '2008-10-19T00:00:00', + Value: '69.838245990610787', + NumberOfUnits: '489' + }, + { + Product: { + Name: 'Components', + UnitPrice: '84.320317201465514' + }, + Seller: { + Name: 'Walter Pang', + City: 'Mellvile' + }, + Date: '2008-10-21T00:00:00', + Value: '61.3185628137172', + NumberOfUnits: '47' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '25.52848226648219' + }, + Seller: { + Name: 'John Smith', + City: 'Mellvile' + }, + Date: '2008-10-22T00:00:00', + Value: '69.33637818756344', + NumberOfUnits: '92' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '23.874032927618376' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2008-11-01T00:00:00', + Value: '81.091924282299317', + NumberOfUnits: '30' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '53.634575919077996' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Berlin' + }, + Date: '2008-11-01T00:00:00', + Value: '15.006514738782547', + NumberOfUnits: '132' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '68.152902074229388' + }, + Seller: { + Name: 'Bryan Culver', + City: 'London' + }, + Date: '2008-11-10T00:00:00', + Value: '6.0539431898174536', + NumberOfUnits: '368' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '59.880471210871114' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'New York' + }, + Date: '2008-11-11T00:00:00', + Value: '39.091290505179806', + NumberOfUnits: '482' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '5.754821284559938' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2008-11-11T00:00:00', + Value: '48.663099086220889', + NumberOfUnits: '22' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '95.84922096498741' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2008-11-20T00:00:00', + Value: '87.1416628300872', + NumberOfUnits: '159' + }, + { + Product: { + Name: 'Components', + UnitPrice: '59.066441729230078' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Berlin' + }, + Date: '2008-11-25T00:00:00', + Value: '88.637168141378623', + NumberOfUnits: '52' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '94.029234626344049' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Tokyo' + }, + Date: '2009-01-05T00:00:00', + Value: '79.830559240575212', + NumberOfUnits: '194' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '12.794803135467136' + }, + Seller: { + Name: 'David Haley', + City: 'Berlin' + }, + Date: '2009-01-08T00:00:00', + Value: '42.869858277435348', + NumberOfUnits: '100' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '37.852128705872282' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Berlin' + }, + Date: '2009-01-10T00:00:00', + Value: '48.256240528196209', + NumberOfUnits: '252' + }, + { + Product: { + Name: 'Components', + UnitPrice: '79.434888241549444' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Tokyo' + }, + Date: '2009-01-13T00:00:00', + Value: '68.505005337533078', + NumberOfUnits: '116' + }, + { + Product: { + Name: 'Components', + UnitPrice: '90.91811845587479' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'London' + }, + Date: '2009-01-14T00:00:00', + Value: '27.461436776193526', + NumberOfUnits: '259' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '99.848602618951631' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2009-01-19T00:00:00', + Value: '56.725358290935567', + NumberOfUnits: '217' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '43.273846266453084' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Seattle' + }, + Date: '2009-01-22T00:00:00', + Value: '36.4720197098665', + NumberOfUnits: '48' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '0.65436926700843923' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'New York' + }, + Date: '2009-02-02T00:00:00', + Value: '71.425742549554329', + NumberOfUnits: '445' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '60.464150859259135' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Mellvile' + }, + Date: '2009-02-03T00:00:00', + Value: '44.63498086884384', + NumberOfUnits: '90' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '13.659154862938056' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Sofia' + }, + Date: '2009-02-07T00:00:00', + Value: '36.151584394346727', + NumberOfUnits: '453' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '44.160772694349646' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Mellvile' + }, + Date: '2009-02-07T00:00:00', + Value: '85.6432799648695', + NumberOfUnits: '450' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.330096614700793' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Sofia' + }, + Date: '2009-02-07T00:00:00', + Value: '48.103636479053478', + NumberOfUnits: '152' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '8.7838492862805033' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Berlin' + }, + Date: '2009-02-16T00:00:00', + Value: '46.49472713772893', + NumberOfUnits: '119' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '79.235950894298014' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Tokyo' + }, + Date: '2009-02-16T00:00:00', + Value: '29.240355281736868', + NumberOfUnits: '463' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '18.588924276916742' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Tokyo' + }, + Date: '2009-02-17T00:00:00', + Value: '19.761605616547914', + NumberOfUnits: '150' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '27.901109833224265' + }, + Seller: { + Name: 'Walter Pang', + City: 'Berlin' + }, + Date: '2009-02-19T00:00:00', + Value: '17.557824644054204', + NumberOfUnits: '210' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '67.192088797312266' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Tokyo' + }, + Date: '2009-02-20T00:00:00', + Value: '36.321839986518881', + NumberOfUnits: '150' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '35.849487937916763' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'London' + }, + Date: '2009-02-21T00:00:00', + Value: '73.888651083171681', + NumberOfUnits: '97' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '34.073729130473794' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Berlin' + }, + Date: '2009-02-22T00:00:00', + Value: '86.417150211714741', + NumberOfUnits: '256' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '66.299910734547268' + }, + Seller: { + Name: 'Russell Shorter', + City: 'London' + }, + Date: '2009-02-24T00:00:00', + Value: '52.847915213949939', + NumberOfUnits: '172' + }, + { + Product: { + Name: 'Components', + UnitPrice: '14.901878412301596' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Mellvile' + }, + Date: '2009-02-24T00:00:00', + Value: '5.1081647188906389', + NumberOfUnits: '489' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '51.915620757227586' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Sofia' + }, + Date: '2009-02-27T00:00:00', + Value: '9.0917529580610577', + NumberOfUnits: '222' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '98.30828662882945' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Berlin' + }, + Date: '2009-03-03T00:00:00', + Value: '81.314004157350411', + NumberOfUnits: '300' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '72.820251282686485' + }, + Seller: { + Name: 'Harry Tyler', + City: 'London' + }, + Date: '2009-03-03T00:00:00', + Value: '1.3068364007895981', + NumberOfUnits: '270' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '16.260613881172898' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2009-03-07T00:00:00', + Value: '81.4439182083327', + NumberOfUnits: '263' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '93.446688537228241' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Mellvile' + }, + Date: '2009-03-10T00:00:00', + Value: '22.661844046163303', + NumberOfUnits: '28' + }, + { + Product: { + Name: 'Components', + UnitPrice: '42.142761425181646' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'London' + }, + Date: '2009-03-15T00:00:00', + Value: '20.388415884407433', + NumberOfUnits: '237' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '54.983897719059094' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Tokyo' + }, + Date: '2009-03-16T00:00:00', + Value: '64.043450431918473', + NumberOfUnits: '171' + }, + { + Product: { + Name: 'Components', + UnitPrice: '97.311258221655734' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'New York' + }, + Date: '2009-03-27T00:00:00', + Value: '23.9032197389301', + NumberOfUnits: '251' + }, + { + Product: { + Name: 'Components', + UnitPrice: '50.889893039544063' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'London' + }, + Date: '2009-04-01T00:00:00', + Value: '32.324041068704815', + NumberOfUnits: '275' + }, + { + Product: { + Name: 'Components', + UnitPrice: '4.7144460513789417' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'London' + }, + Date: '2009-04-06T00:00:00', + Value: '41.960918783192021', + NumberOfUnits: '311' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '70.850547156692727' + }, + Seller: { + Name: 'Monica Freitag', + City: 'New York' + }, + Date: '2009-04-07T00:00:00', + Value: '82.811493604821848', + NumberOfUnits: '217' + }, + { + Product: { + Name: 'Components', + UnitPrice: '96.778652489547923' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2009-04-09T00:00:00', + Value: '62.226076034002972', + NumberOfUnits: '360' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '83.5057999396258' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Berlin' + }, + Date: '2009-04-12T00:00:00', + Value: '51.587959589244782', + NumberOfUnits: '35' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '96.413802446990189' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'New York' + }, + Date: '2009-04-15T00:00:00', + Value: '80.986556122538886', + NumberOfUnits: '294' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '70.80258972514541' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2009-04-16T00:00:00', + Value: '35.866933425826453', + NumberOfUnits: '436' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.524064517824016' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'London' + }, + Date: '2009-04-20T00:00:00', + Value: '82.488713498454871', + NumberOfUnits: '78' + }, + { + Product: { + Name: 'Components', + UnitPrice: '29.603658024968421' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2009-04-22T00:00:00', + Value: '94.02309180890353', + NumberOfUnits: '301' + }, + { + Product: { + Name: 'Components', + UnitPrice: '70.59798216009419' + }, + Seller: { + Name: 'Mark Slater', + City: 'New York' + }, + Date: '2009-05-02T00:00:00', + Value: '92.598087011183651', + NumberOfUnits: '24' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '71.666997145706318' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2009-05-04T00:00:00', + Value: '19.282113676556438', + NumberOfUnits: '332' + }, + { + Product: { + Name: 'Components', + UnitPrice: '14.552707418125452' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2009-05-11T00:00:00', + Value: '56.428837429931775', + NumberOfUnits: '307' + }, + { + Product: { + Name: 'Components', + UnitPrice: '36.712927202094782' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Seattle' + }, + Date: '2009-05-11T00:00:00', + Value: '34.265398902010823', + NumberOfUnits: '375' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '62.74587812961353' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Mellvile' + }, + Date: '2009-05-12T00:00:00', + Value: '1.9744442785039749', + NumberOfUnits: '499' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '13.699630607710981' + }, + Seller: { + Name: 'Russell Shorter', + City: 'London' + }, + Date: '2009-05-21T00:00:00', + Value: '42.514021341928292', + NumberOfUnits: '337' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '46.090274558444634' + }, + Seller: { + Name: 'Larry Lieb', + City: 'London' + }, + Date: '2009-05-24T00:00:00', + Value: '55.25077774899583', + NumberOfUnits: '284' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '95.33687676085944' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Berlin' + }, + Date: '2009-05-26T00:00:00', + Value: '94.764131631126688', + NumberOfUnits: '292' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '78.090784828220862' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Sofia' + }, + Date: '2009-05-26T00:00:00', + Value: '60.153313800763954', + NumberOfUnits: '424' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '99.392229132071236' + }, + Seller: { + Name: 'Mark Slater', + City: 'Mellvile' + }, + Date: '2009-06-05T00:00:00', + Value: '28.99414483876626', + NumberOfUnits: '271' + }, + { + Product: { + Name: 'Components', + UnitPrice: '86.944918514669368' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Mellvile' + }, + Date: '2009-06-10T00:00:00', + Value: '94.041974653509428', + NumberOfUnits: '6' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '13.495747797887656' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Sofia' + }, + Date: '2009-06-12T00:00:00', + Value: '94.892294562837236', + NumberOfUnits: '44' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '99.648592900321162' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2009-06-12T00:00:00', + Value: '74.204946949242128', + NumberOfUnits: '277' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '16.877442187106908' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Seattle' + }, + Date: '2009-06-13T00:00:00', + Value: '65.121114330888318', + NumberOfUnits: '98' + }, + { + Product: { + Name: 'Components', + UnitPrice: '42.376991707075852' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Mellvile' + }, + Date: '2009-06-22T00:00:00', + Value: '68.602847060469372', + NumberOfUnits: '443' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '79.539957074234252' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Seattle' + }, + Date: '2009-06-26T00:00:00', + Value: '81.434181044546037', + NumberOfUnits: '409' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '26.25291264907127' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2009-07-02T00:00:00', + Value: '68.128146216332979', + NumberOfUnits: '240' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '34.046156627147532' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Seattle' + }, + Date: '2009-07-10T00:00:00', + Value: '95.570359656387168', + NumberOfUnits: '23' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '29.379817577721468' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Mellvile' + }, + Date: '2009-07-12T00:00:00', + Value: '35.889505099453736', + NumberOfUnits: '109' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '86.650452430662909' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Berlin' + }, + Date: '2009-07-13T00:00:00', + Value: '29.856805424139278', + NumberOfUnits: '117' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '58.386603816592419' + }, + Seller: { + Name: 'Mark Slater', + City: 'New York' + }, + Date: '2009-07-15T00:00:00', + Value: '34.369692268953514', + NumberOfUnits: '336' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '39.759629797078496' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Seattle' + }, + Date: '2009-07-18T00:00:00', + Value: '92.39610121231344', + NumberOfUnits: '372' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '10.11000248142984' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Berlin' + }, + Date: '2009-07-19T00:00:00', + Value: '90.408865451071819', + NumberOfUnits: '403' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '17.772769098064288' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2009-07-19T00:00:00', + Value: '66.145469558492991', + NumberOfUnits: '144' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '21.54340814870941' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Seattle' + }, + Date: '2009-07-19T00:00:00', + Value: '41.712649465404752', + NumberOfUnits: '395' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '33.561278383043259' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'New York' + }, + Date: '2009-07-20T00:00:00', + Value: '16.61004327079749', + NumberOfUnits: '236' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '48.76308178005884' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2009-07-20T00:00:00', + Value: '86.7044968934285', + NumberOfUnits: '160' + }, + { + Product: { + Name: 'Components', + UnitPrice: '81.79705179380116' + }, + Seller: { + Name: 'David Haley', + City: 'Sofia' + }, + Date: '2009-07-20T00:00:00', + Value: '65.782062134604', + NumberOfUnits: '157' + }, + { + Product: { + Name: 'Components', + UnitPrice: '9.6737010449514251' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'Sofia' + }, + Date: '2009-07-25T00:00:00', + Value: '0.062564946740197455', + NumberOfUnits: '255' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '88.575547462597285' + }, + Seller: { + Name: 'Mark Slater', + City: 'London' + }, + Date: '2009-08-16T00:00:00', + Value: '42.973863865702349', + NumberOfUnits: '284' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '89.335742634411787' + }, + Seller: { + Name: 'Walter Pang', + City: 'Tokyo' + }, + Date: '2009-08-17T00:00:00', + Value: '15.731296835342096', + NumberOfUnits: '333' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '23.987651161843747' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Seattle' + }, + Date: '2009-08-17T00:00:00', + Value: '51.5363990569191', + NumberOfUnits: '48' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '19.359730239659424' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'New York' + }, + Date: '2009-08-18T00:00:00', + Value: '82.547955160284388', + NumberOfUnits: '399' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '9.30053084590497' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2009-08-24T00:00:00', + Value: '68.607750753223783', + NumberOfUnits: '413' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '1.1489816946671259' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Sofia' + }, + Date: '2009-09-06T00:00:00', + Value: '71.909978693309228', + NumberOfUnits: '182' + }, + { + Product: { + Name: 'Components', + UnitPrice: '76.9795825597735' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Mellvile' + }, + Date: '2009-09-06T00:00:00', + Value: '44.89029713202747', + NumberOfUnits: '156' + }, + { + Product: { + Name: 'Components', + UnitPrice: '80.664513344254587' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2009-09-09T00:00:00', + Value: '92.268023962279784', + NumberOfUnits: '293' + }, + { + Product: { + Name: 'Components', + UnitPrice: '22.788886131154786' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Berlin' + }, + Date: '2009-10-01T00:00:00', + Value: '99.883927823921638', + NumberOfUnits: '16' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '78.05361020288133' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Seattle' + }, + Date: '2009-10-01T00:00:00', + Value: '16.01294182055301', + NumberOfUnits: '106' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '72.974514808959569' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'Tokyo' + }, + Date: '2009-10-06T00:00:00', + Value: '91.593776918758536', + NumberOfUnits: '16' + }, + { + Product: { + Name: 'Components', + UnitPrice: '22.058241871212722' + }, + Seller: { + Name: 'John Smith', + City: 'Tokyo' + }, + Date: '2009-10-07T00:00:00', + Value: '1.8308585983844747', + NumberOfUnits: '187' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '42.79186979066202' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2009-10-10T00:00:00', + Value: '21.78986469367047', + NumberOfUnits: '137' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '46.231171277459325' + }, + Seller: { + Name: 'Mark Slater', + City: 'Seattle' + }, + Date: '2009-10-14T00:00:00', + Value: '14.979823871971956', + NumberOfUnits: '138' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '14.350185037753633' + }, + Seller: { + Name: 'Mark Slater', + City: 'Seattle' + }, + Date: '2009-10-24T00:00:00', + Value: '65.044616239631836', + NumberOfUnits: '256' + }, + { + Product: { + Name: 'Components', + UnitPrice: '40.100955655845326' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'London' + }, + Date: '2009-10-24T00:00:00', + Value: '11.059040581369326', + NumberOfUnits: '353' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '17.189097831579435' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2009-11-01T00:00:00', + Value: '94.950034746411276', + NumberOfUnits: '359' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '52.031028155251882' + }, + Seller: { + Name: 'Walter Pang', + City: 'Tokyo' + }, + Date: '2009-11-04T00:00:00', + Value: '43.162881835905317', + NumberOfUnits: '134' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '90.993871954732526' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2009-11-09T00:00:00', + Value: '25.162065972183861', + NumberOfUnits: '263' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '88.538379077119' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Seattle' + }, + Date: '2009-11-11T00:00:00', + Value: '40.935293185028847', + NumberOfUnits: '313' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '46.481523265355044' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2009-11-16T00:00:00', + Value: '20.430096527761822', + NumberOfUnits: '115' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '20.418462399588183' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Berlin' + }, + Date: '2009-11-17T00:00:00', + Value: '33.038645299635192', + NumberOfUnits: '414' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '70.830144114247588' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'New York' + }, + Date: '2009-11-21T00:00:00', + Value: '2.98972730664058', + NumberOfUnits: '53' + }, + { + Product: { + Name: 'Components', + UnitPrice: '81.628889023153533' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2009-11-22T00:00:00', + Value: '86.668779555088264', + NumberOfUnits: '472' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '9.714081422292665' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Mellvile' + }, + Date: '2009-11-23T00:00:00', + Value: '53.591187323253223', + NumberOfUnits: '199' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '29.755140482334021' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Sofia' + }, + Date: '2009-11-24T00:00:00', + Value: '27.388797945989669', + NumberOfUnits: '241' + }, + { + Product: { + Name: 'Components', + UnitPrice: '33.118537689148695' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'New York' + }, + Date: '2009-11-24T00:00:00', + Value: '1.2120309291463489', + NumberOfUnits: '320' + }, + { + Product: { + Name: 'Components', + UnitPrice: '65.6359763655979' + }, + Seller: { + Name: 'David Haley', + City: 'London' + }, + Date: '2010-01-02T00:00:00', + Value: '20.522539420296688', + NumberOfUnits: '299' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '62.085259967523285' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2010-01-08T00:00:00', + Value: '35.256934368636891', + NumberOfUnits: '366' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '78.474462068860646' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2010-01-10T00:00:00', + Value: '27.762093407922467', + NumberOfUnits: '290' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '11.587155103491226' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Sofia' + }, + Date: '2010-01-11T00:00:00', + Value: '61.712525906838721', + NumberOfUnits: '350' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '33.427815853351639' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2010-01-14T00:00:00', + Value: '33.686906720365819', + NumberOfUnits: '469' + }, + { + Product: { + Name: 'Components', + UnitPrice: '96.141296949303381' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Sofia' + }, + Date: '2010-01-21T00:00:00', + Value: '75.607716606747218', + NumberOfUnits: '352' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '92.171847676938327' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2010-01-25T00:00:00', + Value: '38.822024473371926', + NumberOfUnits: '47' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '93.045955893139336' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Tokyo' + }, + Date: '2010-02-02T00:00:00', + Value: '66.397165863959657', + NumberOfUnits: '153' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '38.888418506313307' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Berlin' + }, + Date: '2010-02-02T00:00:00', + Value: '28.472216533716871', + NumberOfUnits: '211' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '99.255040660153625' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2010-02-04T00:00:00', + Value: '66.975509546220067', + NumberOfUnits: '267' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.418360057481735' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'New York' + }, + Date: '2010-02-04T00:00:00', + Value: '71.271966803479927', + NumberOfUnits: '91' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '19.770187707510864' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Tokyo' + }, + Date: '2010-02-05T00:00:00', + Value: '45.86024901171227', + NumberOfUnits: '84' + }, + { + Product: { + Name: 'Components', + UnitPrice: '87.127108633111746' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Mellvile' + }, + Date: '2010-02-11T00:00:00', + Value: '66.746746220973662', + NumberOfUnits: '270' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '76.21922282326' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Berlin' + }, + Date: '2010-02-12T00:00:00', + Value: '86.961047717817621', + NumberOfUnits: '496' + }, + { + Product: { + Name: 'Components', + UnitPrice: '51.935532154485365' + }, + Seller: { + Name: 'John Smith', + City: 'Seattle' + }, + Date: '2010-02-16T00:00:00', + Value: '47.325407875387654', + NumberOfUnits: '24' + }, + { + Product: { + Name: 'Components', + UnitPrice: '21.709201215630959' + }, + Seller: { + Name: 'Walter Pang', + City: 'Mellvile' + }, + Date: '2010-02-17T00:00:00', + Value: '72.656378696046943', + NumberOfUnits: '41' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '15.665925860249402' + }, + Seller: { + Name: 'John Smith', + City: 'Mellvile' + }, + Date: '2010-02-22T00:00:00', + Value: '65.636205098422337', + NumberOfUnits: '365' + }, + { + Product: { + Name: 'Components', + UnitPrice: '2.6773556613723541' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Sofia' + }, + Date: '2010-03-01T00:00:00', + Value: '68.629750361959324', + NumberOfUnits: '202' + }, + { + Product: { + Name: 'Components', + UnitPrice: '52.256432619065251' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2010-03-01T00:00:00', + Value: '79.248901540063741', + NumberOfUnits: '225' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '0.30659986674161621' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2010-03-03T00:00:00', + Value: '70.065212654911548', + NumberOfUnits: '206' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '22.362647448835265' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Sofia' + }, + Date: '2010-03-11T00:00:00', + Value: '54.673684646689189', + NumberOfUnits: '158' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '94.7514695090947' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'London' + }, + Date: '2010-03-14T00:00:00', + Value: '70.422226083661528', + NumberOfUnits: '169' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '1.1244290979227185' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2010-03-15T00:00:00', + Value: '18.868440258721094', + NumberOfUnits: '4' + }, + { + Product: { + Name: 'Components', + UnitPrice: '12.168197199780586' + }, + Seller: { + Name: 'Monica Freitag', + City: 'New York' + }, + Date: '2010-03-15T00:00:00', + Value: '12.660750706056481', + NumberOfUnits: '232' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '58.754820636825087' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2010-03-16T00:00:00', + Value: '78.751323967590608', + NumberOfUnits: '421' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '43.950277959904767' + }, + Seller: { + Name: 'David Haley', + City: 'Seattle' + }, + Date: '2010-03-25T00:00:00', + Value: '89.636901900934475', + NumberOfUnits: '260' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '54.451138970652188' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Seattle' + }, + Date: '2010-04-02T00:00:00', + Value: '91.929945113104736', + NumberOfUnits: '194' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.565373749735471' + }, + Seller: { + Name: 'Walter Pang', + City: 'Tokyo' + }, + Date: '2010-04-05T00:00:00', + Value: '35.415237739409896', + NumberOfUnits: '491' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '11.121100052781916' + }, + Seller: { + Name: 'Harold Garvin', + City: 'London' + }, + Date: '2010-04-14T00:00:00', + Value: '29.986905041144652', + NumberOfUnits: '256' + }, + { + Product: { + Name: 'Components', + UnitPrice: '18.092416607817828' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2010-04-15T00:00:00', + Value: '84.457366813187193', + NumberOfUnits: '279' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '8.277599657083675' + }, + Seller: { + Name: 'Carl Costello', + City: 'Berlin' + }, + Date: '2010-04-15T00:00:00', + Value: '99.568976647951175', + NumberOfUnits: '287' + }, + { + Product: { + Name: 'Components', + UnitPrice: '77.894294018807955' + }, + Seller: { + Name: 'Carl Costello', + City: 'New York' + }, + Date: '2010-04-22T00:00:00', + Value: '58.9137158165284', + NumberOfUnits: '363' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '55.624015888024125' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2010-04-22T00:00:00', + Value: '16.317631032465783', + NumberOfUnits: '499' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '39.338956605335213' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Berlin' + }, + Date: '2010-04-24T00:00:00', + Value: '0.092080421788655414', + NumberOfUnits: '109' + }, + { + Product: { + Name: 'Components', + UnitPrice: '7.7389456833428447' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Berlin' + }, + Date: '2010-05-04T00:00:00', + Value: '99.529428733293628', + NumberOfUnits: '25' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '62.437906005623709' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2010-05-05T00:00:00', + Value: '47.953826816731052', + NumberOfUnits: '64' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '38.696093037117322' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'London' + }, + Date: '2010-05-06T00:00:00', + Value: '57.667695059286281', + NumberOfUnits: '256' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '17.764891412930979' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Mellvile' + }, + Date: '2010-05-07T00:00:00', + Value: '15.271079826760609', + NumberOfUnits: '50' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '57.771539901276839' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Berlin' + }, + Date: '2010-05-07T00:00:00', + Value: '58.617693865028066', + NumberOfUnits: '437' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '21.412746897625155' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Sofia' + }, + Date: '2010-05-19T00:00:00', + Value: '40.952016665112232', + NumberOfUnits: '253' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '10.10051225782396' + }, + Seller: { + Name: 'Monica Freitag', + City: 'London' + }, + Date: '2010-05-22T00:00:00', + Value: '24.04263714516658', + NumberOfUnits: '312' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '87.649551167920961' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'London' + }, + Date: '2010-05-24T00:00:00', + Value: '12.452408304648664', + NumberOfUnits: '82' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '42.552965526726545' + }, + Seller: { + Name: 'Harold Garvin', + City: 'New York' + }, + Date: '2010-06-01T00:00:00', + Value: '32.21886932487547', + NumberOfUnits: '467' + }, + { + Product: { + Name: 'Components', + UnitPrice: '79.772670743881108' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Sofia' + }, + Date: '2010-06-05T00:00:00', + Value: '69.47704109804566', + NumberOfUnits: '74' + }, + { + Product: { + Name: 'Components', + UnitPrice: '1.8354761888438258' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2010-06-10T00:00:00', + Value: '14.711501968424534', + NumberOfUnits: '81' + }, + { + Product: { + Name: 'Components', + UnitPrice: '15.038684017508608' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Berlin' + }, + Date: '2010-06-25T00:00:00', + Value: '18.710408228780334', + NumberOfUnits: '88' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '43.393069851860908' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2010-06-26T00:00:00', + Value: '44.323160147444881', + NumberOfUnits: '126' + }, + { + Product: { + Name: 'Components', + UnitPrice: '16.236492486780737' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Sofia' + }, + Date: '2010-06-27T00:00:00', + Value: '77.721635707524442', + NumberOfUnits: '112' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '59.192252885174121' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Sofia' + }, + Date: '2010-06-27T00:00:00', + Value: '15.444951837623936', + NumberOfUnits: '47' + }, + { + Product: { + Name: 'Components', + UnitPrice: '39.858141839438183' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Sofia' + }, + Date: '2010-07-05T00:00:00', + Value: '29.309184630079749', + NumberOfUnits: '218' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '27.044425637947594' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'New York' + }, + Date: '2010-07-05T00:00:00', + Value: '29.84750439871452', + NumberOfUnits: '34' + }, + { + Product: { + Name: 'Components', + UnitPrice: '14.269145072563152' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Sofia' + }, + Date: '2010-07-13T00:00:00', + Value: '83.42096804800488', + NumberOfUnits: '492' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '53.378611455382128' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Sofia' + }, + Date: '2010-07-16T00:00:00', + Value: '41.53844534491116', + NumberOfUnits: '464' + }, + { + Product: { + Name: 'Components', + UnitPrice: '21.432887213971881' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2010-07-17T00:00:00', + Value: '83.285907275642217', + NumberOfUnits: '118' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '23.970818670452953' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2010-07-18T00:00:00', + Value: '94.1482592346837', + NumberOfUnits: '442' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '37.523097888344481' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'London' + }, + Date: '2010-07-23T00:00:00', + Value: '59.59416039269145', + NumberOfUnits: '248' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '60.678681014421713' + }, + Seller: { + Name: 'Lydia Burson', + City: 'London' + }, + Date: '2010-07-23T00:00:00', + Value: '83.499601801624337', + NumberOfUnits: '472' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '78.0230887131873' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'New York' + }, + Date: '2010-07-24T00:00:00', + Value: '83.86764092550969', + NumberOfUnits: '140' + }, + { + Product: { + Name: 'Components', + UnitPrice: '47.635253308171059' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2010-07-26T00:00:00', + Value: '86.612572747567938', + NumberOfUnits: '118' + }, + { + Product: { + Name: 'Components', + UnitPrice: '58.201980291959821' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Sofia' + }, + Date: '2010-07-27T00:00:00', + Value: '63.959779713284128', + NumberOfUnits: '176' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '98.375331656250779' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Mellvile' + }, + Date: '2010-08-01T00:00:00', + Value: '23.277100465855142', + NumberOfUnits: '77' + }, + { + Product: { + Name: 'Components', + UnitPrice: '2.9185969396115263' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'Sofia' + }, + Date: '2010-08-08T00:00:00', + Value: '74.269686627327317', + NumberOfUnits: '105' + }, + { + Product: { + Name: 'Components', + UnitPrice: '98.157584806046259' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Tokyo' + }, + Date: '2010-08-21T00:00:00', + Value: '60.648173215169543', + NumberOfUnits: '160' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '79.036749144567537' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Seattle' + }, + Date: '2010-08-26T00:00:00', + Value: '66.923503934835779', + NumberOfUnits: '186' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '17.790103991418192' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Seattle' + }, + Date: '2010-09-04T00:00:00', + Value: '28.990831612139395', + NumberOfUnits: '380' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '38.68470799116637' + }, + Seller: { + Name: 'John Smith', + City: 'Tokyo' + }, + Date: '2010-09-11T00:00:00', + Value: '41.4628619986879', + NumberOfUnits: '470' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '75.233120366573857' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Mellvile' + }, + Date: '2010-09-13T00:00:00', + Value: '42.688516267895935', + NumberOfUnits: '348' + }, + { + Product: { + Name: 'Components', + UnitPrice: '55.30159308356307' + }, + Seller: { + Name: 'Carl Costello', + City: 'London' + }, + Date: '2010-09-14T00:00:00', + Value: '29.383467570591471', + NumberOfUnits: '151' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '51.315049571597505' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'New York' + }, + Date: '2010-09-24T00:00:00', + Value: '86.581237654472346', + NumberOfUnits: '7' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '31.307030995985041' + }, + Seller: { + Name: 'Monica Freitag', + City: 'New York' + }, + Date: '2010-10-07T00:00:00', + Value: '38.936872425925394', + NumberOfUnits: '123' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '79.959242362510068' + }, + Seller: { + Name: 'Mark Slater', + City: 'Seattle' + }, + Date: '2010-10-08T00:00:00', + Value: '8.676337175386184', + NumberOfUnits: '374' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '94.65782241647031' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Mellvile' + }, + Date: '2010-10-11T00:00:00', + Value: '96.669988984554067', + NumberOfUnits: '178' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '41.967610009930844' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Sofia' + }, + Date: '2010-10-22T00:00:00', + Value: '31.412678645650239', + NumberOfUnits: '354' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '46.564729067759927' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'New York' + }, + Date: '2010-10-25T00:00:00', + Value: '85.540413197847272', + NumberOfUnits: '459' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '27.142422565791019' + }, + Seller: { + Name: 'Mark Slater', + City: 'London' + }, + Date: '2010-11-02T00:00:00', + Value: '46.424968795117444', + NumberOfUnits: '78' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '30.232361531924624' + }, + Seller: { + Name: 'Walter Pang', + City: 'Berlin' + }, + Date: '2010-11-03T00:00:00', + Value: '52.08322599161567', + NumberOfUnits: '417' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '82.166215769092659' + }, + Seller: { + Name: 'Walter Pang', + City: 'Seattle' + }, + Date: '2010-11-12T00:00:00', + Value: '15.3999604356475', + NumberOfUnits: '208' + }, + { + Product: { + Name: 'Components', + UnitPrice: '13.240201125498954' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Seattle' + }, + Date: '2010-11-19T00:00:00', + Value: '48.614451078984168', + NumberOfUnits: '359' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '8.82965918110202' + }, + Seller: { + Name: 'Russell Shorter', + City: 'New York' + }, + Date: '2010-11-25T00:00:00', + Value: '24.490439856653307', + NumberOfUnits: '392' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '78.426081770298111' + }, + Seller: { + Name: 'John Smith', + City: 'London' + }, + Date: '2011-01-01T00:00:00', + Value: '37.596409040315265', + NumberOfUnits: '241' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '50.590050290613462' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Seattle' + }, + Date: '2011-01-04T00:00:00', + Value: '27.185391135134452', + NumberOfUnits: '62' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '6.3079299900252046' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Tokyo' + }, + Date: '2011-01-06T00:00:00', + Value: '89.615617641068809', + NumberOfUnits: '485' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '47.444027544671677' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Sofia' + }, + Date: '2011-01-14T00:00:00', + Value: '4.8948556207562124', + NumberOfUnits: '470' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '6.14731172385966' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2011-01-23T00:00:00', + Value: '78.523330706415379', + NumberOfUnits: '197' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '57.598939471691359' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Berlin' + }, + Date: '2011-01-26T00:00:00', + Value: '59.748959848540352', + NumberOfUnits: '353' + }, + { + Product: { + Name: 'Components', + UnitPrice: '37.619407911607723' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Mellvile' + }, + Date: '2011-02-01T00:00:00', + Value: '39.591191541213163', + NumberOfUnits: '338' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '20.995826982425445' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'New York' + }, + Date: '2011-02-08T00:00:00', + Value: '92.874936197360483', + NumberOfUnits: '17' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '11.776900390059176' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Berlin' + }, + Date: '2011-02-12T00:00:00', + Value: '61.288865125406936', + NumberOfUnits: '429' + }, + { + Product: { + Name: 'Components', + UnitPrice: '64.996284649239982' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Tokyo' + }, + Date: '2011-02-14T00:00:00', + Value: '24.293736985090067', + NumberOfUnits: '385' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '19.89953691135139' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'New York' + }, + Date: '2011-02-20T00:00:00', + Value: '35.271121391687132', + NumberOfUnits: '166' + }, + { + Product: { + Name: 'Components', + UnitPrice: '3.2431666288725873' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Seattle' + }, + Date: '2011-02-20T00:00:00', + Value: '52.569142939787895', + NumberOfUnits: '137' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '18.180364006282932' + }, + Seller: { + Name: 'Russell Shorter', + City: 'New York' + }, + Date: '2011-02-24T00:00:00', + Value: '8.2438002378883759', + NumberOfUnits: '443' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '20.442789662835555' + }, + Seller: { + Name: 'Carl Costello', + City: 'Seattle' + }, + Date: '2011-02-26T00:00:00', + Value: '87.327797658428452', + NumberOfUnits: '40' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '20.547325592742919' + }, + Seller: { + Name: 'Glenn Landeros', + City: 'London' + }, + Date: '2011-03-05T00:00:00', + Value: '7.2753519319348747', + NumberOfUnits: '138' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '23.766470804701779' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2011-03-09T00:00:00', + Value: '18.243170770929741', + NumberOfUnits: '15' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '76.253175817547913' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2011-03-09T00:00:00', + Value: '74.498488369629939', + NumberOfUnits: '469' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '93.2519404651839' + }, + Seller: { + Name: 'Russell Shorter', + City: 'London' + }, + Date: '2011-03-11T00:00:00', + Value: '88.996454276608517', + NumberOfUnits: '426' + }, + { + Product: { + Name: 'Components', + UnitPrice: '62.99248866876237' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Seattle' + }, + Date: '2011-03-16T00:00:00', + Value: '32.470836971174386', + NumberOfUnits: '208' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '58.4988099795295' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Seattle' + }, + Date: '2011-03-21T00:00:00', + Value: '50.8492368044561', + NumberOfUnits: '155' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '82.3833047795963' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Seattle' + }, + Date: '2011-03-23T00:00:00', + Value: '33.369716877755579', + NumberOfUnits: '381' + }, + { + Product: { + Name: 'Components', + UnitPrice: '19.168732231095774' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Tokyo' + }, + Date: '2011-04-12T00:00:00', + Value: '75.166610896199288', + NumberOfUnits: '5' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '53.516463960295759' + }, + Seller: { + Name: 'Walter Pang', + City: 'London' + }, + Date: '2011-04-12T00:00:00', + Value: '14.533374232488395', + NumberOfUnits: '221' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '97.407401445045792' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Sofia' + }, + Date: '2011-04-14T00:00:00', + Value: '84.691367803463407', + NumberOfUnits: '39' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '74.054133600580556' + }, + Seller: { + Name: 'Mark Slater', + City: 'New York' + }, + Date: '2011-04-16T00:00:00', + Value: '51.295898599222255', + NumberOfUnits: '468' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '8.1049134061229022' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Seattle' + }, + Date: '2011-04-17T00:00:00', + Value: '0.70214751209232373', + NumberOfUnits: '44' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '59.055603649027468' + }, + Seller: { + Name: 'John Smith', + City: 'Mellvile' + }, + Date: '2011-04-22T00:00:00', + Value: '47.532910968890839', + NumberOfUnits: '287' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '96.816727750383663' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2011-04-24T00:00:00', + Value: '78.545733857222714', + NumberOfUnits: '463' + }, + { + Product: { + Name: 'Components', + UnitPrice: '76.712912356812936' + }, + Seller: { + Name: 'Walter Pang', + City: 'Seattle' + }, + Date: '2011-04-24T00:00:00', + Value: '62.920035218317082', + NumberOfUnits: '335' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '73.424536862142631' + }, + Seller: { + Name: 'Walter Pang', + City: 'Berlin' + }, + Date: '2011-04-24T00:00:00', + Value: '30.569536113445434', + NumberOfUnits: '211' + }, + { + Product: { + Name: 'Components', + UnitPrice: '66.398487550392034' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Seattle' + }, + Date: '2011-05-03T00:00:00', + Value: '87.37479121767673', + NumberOfUnits: '291' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '37.014730059082964' + }, + Seller: { + Name: 'John Smith', + City: 'Sofia' + }, + Date: '2011-05-05T00:00:00', + Value: '40.137041145999468', + NumberOfUnits: '1' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '21.30724839927035' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Seattle' + }, + Date: '2011-05-06T00:00:00', + Value: '46.005596521313116', + NumberOfUnits: '120' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '19.893941804717269' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Berlin' + }, + Date: '2011-05-06T00:00:00', + Value: '72.609930798695387', + NumberOfUnits: '382' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '16.486758420470522' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Seattle' + }, + Date: '2011-05-07T00:00:00', + Value: '7.763772973680763', + NumberOfUnits: '63' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '41.660496658487475' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Seattle' + }, + Date: '2011-05-12T00:00:00', + Value: '94.318148397988708', + NumberOfUnits: '230' + }, + { + Product: { + Name: 'Components', + UnitPrice: '4.9773660045943062' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Tokyo' + }, + Date: '2011-05-13T00:00:00', + Value: '30.891342056398909', + NumberOfUnits: '362' + }, + { + Product: { + Name: 'Components', + UnitPrice: '10.7490869289027' + }, + Seller: { + Name: 'Monica Freitag', + City: 'New York' + }, + Date: '2011-05-17T00:00:00', + Value: '59.668867131540956', + NumberOfUnits: '430' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '66.047576147153777' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2011-05-23T00:00:00', + Value: '91.139627616451875', + NumberOfUnits: '204' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '60.848456370108039' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Berlin' + }, + Date: '2011-05-24T00:00:00', + Value: '86.097605566539613', + NumberOfUnits: '118' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '68.7086188088677' + }, + Seller: { + Name: 'Walter Pang', + City: 'Sofia' + }, + Date: '2011-06-01T00:00:00', + Value: '14.562893060298121', + NumberOfUnits: '17' + }, + { + Product: { + Name: 'Components', + UnitPrice: '40.680891247783265' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2011-06-03T00:00:00', + Value: '9.0439965990576887', + NumberOfUnits: '312' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '96.900314277457227' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Seattle' + }, + Date: '2011-06-12T00:00:00', + Value: '95.038356676249933', + NumberOfUnits: '283' + }, + { + Product: { + Name: 'Components', + UnitPrice: '67.031210179920876' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Seattle' + }, + Date: '2011-06-13T00:00:00', + Value: '27.587484674336149', + NumberOfUnits: '460' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '67.092374324375939' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'New York' + }, + Date: '2011-06-14T00:00:00', + Value: '66.230523523981915', + NumberOfUnits: '295' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '28.048040265239791' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Mellvile' + }, + Date: '2011-06-15T00:00:00', + Value: '50.504170614529478', + NumberOfUnits: '49' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '7.3837493580690348' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Tokyo' + }, + Date: '2011-06-24T00:00:00', + Value: '7.8716053664086409', + NumberOfUnits: '127' + }, + { + Product: { + Name: 'Components', + UnitPrice: '39.219759003827235' + }, + Seller: { + Name: 'Mark Slater', + City: 'Seattle' + }, + Date: '2011-06-27T00:00:00', + Value: '98.71029462605263', + NumberOfUnits: '244' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '53.418671131794646' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Tokyo' + }, + Date: '2011-07-01T00:00:00', + Value: '11.231885622829145', + NumberOfUnits: '188' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '25.523898576164573' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Seattle' + }, + Date: '2011-07-06T00:00:00', + Value: '56.126590052678523', + NumberOfUnits: '458' + }, + { + Product: { + Name: 'Components', + UnitPrice: '70.257199169256353' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2011-07-08T00:00:00', + Value: '82.339177505271124', + NumberOfUnits: '448' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '7.6365943567997752' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Berlin' + }, + Date: '2011-07-27T00:00:00', + Value: '30.461937203287114', + NumberOfUnits: '226' + }, + { + Product: { + Name: 'Components', + UnitPrice: '21.512323069159091' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2011-08-01T00:00:00', + Value: '69.618271463372878', + NumberOfUnits: '474' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '37.596370343862276' + }, + Seller: { + Name: 'David Haley', + City: 'Sofia' + }, + Date: '2011-08-02T00:00:00', + Value: '62.767845142058952', + NumberOfUnits: '338' + }, + { + Product: { + Name: 'Components', + UnitPrice: '99.364743102046077' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'London' + }, + Date: '2011-08-02T00:00:00', + Value: '75.243962125500659', + NumberOfUnits: '88' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '72.232945669550887' + }, + Seller: { + Name: 'Carl Costello', + City: 'Berlin' + }, + Date: '2011-08-04T00:00:00', + Value: '86.276501736732442', + NumberOfUnits: '436' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '34.253647892854012' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2011-08-06T00:00:00', + Value: '9.2189299451275417', + NumberOfUnits: '297' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '46.885990699234412' + }, + Seller: { + Name: 'Russell Shorter', + City: 'London' + }, + Date: '2011-08-07T00:00:00', + Value: '5.0874681701359652', + NumberOfUnits: '240' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '26.369197352961265' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Sofia' + }, + Date: '2011-08-07T00:00:00', + Value: '80.241307141371678', + NumberOfUnits: '415' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '49.072841112070179' + }, + Seller: { + Name: 'David Haley', + City: 'Mellvile' + }, + Date: '2011-08-08T00:00:00', + Value: '61.200517444499084', + NumberOfUnits: '435' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '95.058612569728211' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Berlin' + }, + Date: '2011-08-16T00:00:00', + Value: '73.751322260942', + NumberOfUnits: '64' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '74.181983375075262' + }, + Seller: { + Name: 'John Smith', + City: 'Seattle' + }, + Date: '2011-08-23T00:00:00', + Value: '40.736002680256966', + NumberOfUnits: '21' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '82.506200011124' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2011-08-25T00:00:00', + Value: '54.907956605268623', + NumberOfUnits: '467' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '42.773367531026416' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Sofia' + }, + Date: '2011-09-02T00:00:00', + Value: '28.230239091548249', + NumberOfUnits: '98' + }, + { + Product: { + Name: 'Components', + UnitPrice: '83.472341757022008' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Mellvile' + }, + Date: '2011-09-04T00:00:00', + Value: '72.482020534799446', + NumberOfUnits: '370' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '41.552912276961337' + }, + Seller: { + Name: 'Walter Pang', + City: 'Berlin' + }, + Date: '2011-09-05T00:00:00', + Value: '80.9870070223636', + NumberOfUnits: '94' + }, + { + Product: { + Name: 'Components', + UnitPrice: '74.118408409002427' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'London' + }, + Date: '2011-09-09T00:00:00', + Value: '94.847531102061055', + NumberOfUnits: '106' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '75.404483999779671' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Sofia' + }, + Date: '2011-09-11T00:00:00', + Value: '9.8866479051702889', + NumberOfUnits: '261' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '10.227189357498283' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2011-09-17T00:00:00', + Value: '29.3933310217193', + NumberOfUnits: '307' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '72.929749578670481' + }, + Seller: { + Name: 'Harry Tyler', + City: 'New York' + }, + Date: '2011-09-17T00:00:00', + Value: '56.902403923171761', + NumberOfUnits: '362' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '85.133693080923379' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Tokyo' + }, + Date: '2011-09-24T00:00:00', + Value: '23.863435408036892', + NumberOfUnits: '330' + }, + { + Product: { + Name: 'Components', + UnitPrice: '77.595880943162314' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2011-09-26T00:00:00', + Value: '91.821283424189915', + NumberOfUnits: '23' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '50.362954591569931' + }, + Seller: { + Name: 'David Haley', + City: 'Berlin' + }, + Date: '2011-09-27T00:00:00', + Value: '66.76641896682159', + NumberOfUnits: '392' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '32.290426563606793' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Seattle' + }, + Date: '2011-10-13T00:00:00', + Value: '81.508681122916144', + NumberOfUnits: '16' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '62.986913725262006' + }, + Seller: { + Name: 'Lydia Burson', + City: 'New York' + }, + Date: '2011-10-13T00:00:00', + Value: '30.91040301644728', + NumberOfUnits: '100' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '13.441150036380231' + }, + Seller: { + Name: 'Carl Costello', + City: 'Berlin' + }, + Date: '2011-10-22T00:00:00', + Value: '85.46632834964727', + NumberOfUnits: '132' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '0.36166957596394683' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2011-10-22T00:00:00', + Value: '74.401750589907991', + NumberOfUnits: '22' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '66.237839621602475' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2011-11-02T00:00:00', + Value: '88.135134283516152', + NumberOfUnits: '96' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '50.146415294216204' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Berlin' + }, + Date: '2011-11-03T00:00:00', + Value: '31.431514877561256', + NumberOfUnits: '76' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '67.8830748274378' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Mellvile' + }, + Date: '2011-11-04T00:00:00', + Value: '91.074618506745722', + NumberOfUnits: '492' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '6.5537001036823268' + }, + Seller: { + Name: 'Harry Tyler', + City: 'Berlin' + }, + Date: '2011-11-08T00:00:00', + Value: '51.458535926164373', + NumberOfUnits: '49' + }, + { + Product: { + Name: 'Components', + UnitPrice: '35.5539850124875' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Mellvile' + }, + Date: '2011-11-12T00:00:00', + Value: '20.849885521852357', + NumberOfUnits: '197' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '59.927390962805319' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Tokyo' + }, + Date: '2011-11-12T00:00:00', + Value: '70.322697409578922', + NumberOfUnits: '484' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '67.355707039756567' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Tokyo' + }, + Date: '2011-11-13T00:00:00', + Value: '14.268465300215624', + NumberOfUnits: '182' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '51.975681005034446' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'London' + }, + Date: '2011-11-15T00:00:00', + Value: '18.371498919265111', + NumberOfUnits: '42' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '66.674518802517341' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'New York' + }, + Date: '2011-11-19T00:00:00', + Value: '52.755486291253696', + NumberOfUnits: '109' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '56.137722244550346' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Mellvile' + }, + Date: '2011-11-23T00:00:00', + Value: '40.171580035319352', + NumberOfUnits: '310' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '93.530705568162119' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Sofia' + }, + Date: '2012-01-03T00:00:00', + Value: '53.305936117333331', + NumberOfUnits: '306' + }, + { + Product: { + Name: 'Components', + UnitPrice: '9.5339146487107111' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Seattle' + }, + Date: '2012-01-06T00:00:00', + Value: '82.952573375288665', + NumberOfUnits: '290' + }, + { + Product: { + Name: 'Components', + UnitPrice: '41.1171674454199' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Tokyo' + }, + Date: '2012-01-10T00:00:00', + Value: '29.765262841137712', + NumberOfUnits: '499' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '9.7998786297626239' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Berlin' + }, + Date: '2012-01-11T00:00:00', + Value: '10.743231471042721', + NumberOfUnits: '7' + }, + { + Product: { + Name: 'Components', + UnitPrice: '64.580562228607278' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Sofia' + }, + Date: '2012-01-14T00:00:00', + Value: '34.949488535034234', + NumberOfUnits: '220' + }, + { + Product: { + Name: 'Components', + UnitPrice: '47.282745012679484' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'New York' + }, + Date: '2012-01-15T00:00:00', + Value: '50.185166276146262', + NumberOfUnits: '395' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '14.609382960297811' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Sofia' + }, + Date: '2012-01-18T00:00:00', + Value: '99.998364085330792', + NumberOfUnits: '219' + }, + { + Product: { + Name: 'Components', + UnitPrice: '10.681285248455259' + }, + Seller: { + Name: 'Larry Lieb', + City: 'Mellvile' + }, + Date: '2012-01-18T00:00:00', + Value: '91.928496859934413', + NumberOfUnits: '229' + }, + { + Product: { + Name: 'Components', + UnitPrice: '64.914608125069464' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Mellvile' + }, + Date: '2012-01-22T00:00:00', + Value: '55.807345246806442', + NumberOfUnits: '111' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '47.909127244683511' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'London' + }, + Date: '2012-02-01T00:00:00', + Value: '20.473314877819881', + NumberOfUnits: '237' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '87.815776368517334' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Berlin' + }, + Date: '2012-02-13T00:00:00', + Value: '17.170676690140123', + NumberOfUnits: '114' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '55.404070883711832' + }, + Seller: { + Name: 'Bryan Culver', + City: 'London' + }, + Date: '2012-02-23T00:00:00', + Value: '76.743488422009847', + NumberOfUnits: '329' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '40.75572231819654' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'Seattle' + }, + Date: '2012-02-24T00:00:00', + Value: '1.1660674592322051', + NumberOfUnits: '135' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '57.827554530383807' + }, + Seller: { + Name: 'Harold Garvin', + City: 'New York' + }, + Date: '2012-03-02T00:00:00', + Value: '46.816691358954039', + NumberOfUnits: '187' + }, + { + Product: { + Name: 'Components', + UnitPrice: '14.764199040254672' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2012-03-10T00:00:00', + Value: '17.629321207119766', + NumberOfUnits: '286' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '12.991917372211775' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'Mellvile' + }, + Date: '2012-03-11T00:00:00', + Value: '18.210936299623427', + NumberOfUnits: '468' + }, + { + Product: { + Name: 'Components', + UnitPrice: '26.013292989699771' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Tokyo' + }, + Date: '2012-03-18T00:00:00', + Value: '93.230797952614168', + NumberOfUnits: '71' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '72.623922989062933' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Mellvile' + }, + Date: '2012-03-21T00:00:00', + Value: '61.974642454634719', + NumberOfUnits: '251' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '44.430002777106132' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Berlin' + }, + Date: '2012-03-25T00:00:00', + Value: '57.137854004808631', + NumberOfUnits: '297' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '68.192056365400575' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Berlin' + }, + Date: '2012-03-25T00:00:00', + Value: '4.1927576550248808', + NumberOfUnits: '248' + }, + { + Product: { + Name: 'Components', + UnitPrice: '35.301038918691241' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'Sofia' + }, + Date: '2012-03-26T00:00:00', + Value: '45.234568391570157', + NumberOfUnits: '488' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '41.07974113015446' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Sofia' + }, + Date: '2012-04-06T00:00:00', + Value: '59.4756415856423', + NumberOfUnits: '211' + }, + { + Product: { + Name: 'Components', + UnitPrice: '29.287349586043206' + }, + Seller: { + Name: 'Stanley Brooker', + City: 'Seattle' + }, + Date: '2012-04-14T00:00:00', + Value: '3.1218397911274058', + NumberOfUnits: '149' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '51.960718329977574' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Berlin' + }, + Date: '2012-04-14T00:00:00', + Value: '9.8109557804702572', + NumberOfUnits: '99' + }, + { + Product: { + Name: 'Components', + UnitPrice: '57.838875082246432' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Seattle' + }, + Date: '2012-04-16T00:00:00', + Value: '14.041336026993271', + NumberOfUnits: '225' + }, + { + Product: { + Name: 'Components', + UnitPrice: '25.879090337957759' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Seattle' + }, + Date: '2012-04-27T00:00:00', + Value: '95.393374001324815', + NumberOfUnits: '408' + }, + { + Product: { + Name: 'Components', + UnitPrice: '4.9307178263229865' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Sofia' + }, + Date: '2012-05-09T00:00:00', + Value: '40.24019778717318', + NumberOfUnits: '417' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '3.0351963839657587' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'London' + }, + Date: '2012-05-24T00:00:00', + Value: '67.743256719663393', + NumberOfUnits: '221' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '57.525798798317929' + }, + Seller: { + Name: 'Mark Slater', + City: 'New York' + }, + Date: '2012-06-02T00:00:00', + Value: '45.347840592892766', + NumberOfUnits: '288' + }, + { + Product: { + Name: 'Components', + UnitPrice: '72.260475471737081' + }, + Seller: { + Name: 'Bryan Culver', + City: 'Berlin' + }, + Date: '2012-06-03T00:00:00', + Value: '92.767570816337866', + NumberOfUnits: '372' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '82.533464665773067' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Seattle' + }, + Date: '2012-06-03T00:00:00', + Value: '51.32937051883404', + NumberOfUnits: '408' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '91.596571026182076' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Mellvile' + }, + Date: '2012-06-04T00:00:00', + Value: '28.526107281691441', + NumberOfUnits: '13' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.668206756314362' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Mellvile' + }, + Date: '2012-06-05T00:00:00', + Value: '31.552386019170463', + NumberOfUnits: '487' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '46.269657903476457' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Sofia' + }, + Date: '2012-06-11T00:00:00', + Value: '85.914963570383833', + NumberOfUnits: '276' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '18.243998018207026' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'New York' + }, + Date: '2012-06-16T00:00:00', + Value: '40.241414001323939', + NumberOfUnits: '490' + }, + { + Product: { + Name: 'Components', + UnitPrice: '48.753350437038272' + }, + Seller: { + Name: 'Harold Garvin', + City: 'London' + }, + Date: '2012-06-18T00:00:00', + Value: '55.616326516315496', + NumberOfUnits: '238' + }, + { + Product: { + Name: 'Components', + UnitPrice: '94.427641199169514' + }, + Seller: { + Name: 'David Haley', + City: 'Tokyo' + }, + Date: '2012-06-23T00:00:00', + Value: '91.982604512936717', + NumberOfUnits: '170' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '48.675857367308744' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Mellvile' + }, + Date: '2012-07-04T00:00:00', + Value: '72.766442491098516', + NumberOfUnits: '132' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '82.68037088340165' + }, + Seller: { + Name: 'Mark Slater', + City: 'Mellvile' + }, + Date: '2012-07-05T00:00:00', + Value: '56.774197684961457', + NumberOfUnits: '443' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '38.192183821551588' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'New York' + }, + Date: '2012-07-05T00:00:00', + Value: '27.482847276834232', + NumberOfUnits: '368' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '24.194019718186009' + }, + Seller: { + Name: 'Harold Garvin', + City: 'New York' + }, + Date: '2012-07-11T00:00:00', + Value: '38.517737592811571', + NumberOfUnits: '39' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '3.9898014180314729' + }, + Seller: { + Name: 'Alfredo Fetuchini', + City: 'Tokyo' + }, + Date: '2012-07-13T00:00:00', + Value: '43.237088873627172', + NumberOfUnits: '95' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '81.770755481799483' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'Berlin' + }, + Date: '2012-07-14T00:00:00', + Value: '42.55512666076195', + NumberOfUnits: '42' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '74.867355951511939' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Seattle' + }, + Date: '2012-07-16T00:00:00', + Value: '61.42802050403693', + NumberOfUnits: '200' + }, + { + Product: { + Name: 'Components', + UnitPrice: '85.467303630647862' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Seattle' + }, + Date: '2012-07-16T00:00:00', + Value: '10.45830762500796', + NumberOfUnits: '221' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '96.415402692004761' + }, + Seller: { + Name: 'Larry Lieb', + City: 'New York' + }, + Date: '2012-07-21T00:00:00', + Value: '99.639215692709769', + NumberOfUnits: '54' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '46.199419370945272' + }, + Seller: { + Name: 'Lydia Burson', + City: 'Tokyo' + }, + Date: '2012-07-21T00:00:00', + Value: '55.958572614918737', + NumberOfUnits: '173' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '99.843983026148749' + }, + Seller: { + Name: 'Lydia Burson', + City: 'London' + }, + Date: '2012-07-23T00:00:00', + Value: '10.833150712229847', + NumberOfUnits: '47' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '42.35462483128282' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'Mellvile' + }, + Date: '2012-07-26T00:00:00', + Value: '91.545096361797818', + NumberOfUnits: '173' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '52.198385052475324' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Mellvile' + }, + Date: '2012-08-05T00:00:00', + Value: '98.8178437570193', + NumberOfUnits: '323' + }, + { + Product: { + Name: 'Components', + UnitPrice: '45.456700048156407' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Sofia' + }, + Date: '2012-08-07T00:00:00', + Value: '26.029428060180244', + NumberOfUnits: '264' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '56.771143552274971' + }, + Seller: { + Name: 'Mark Slater', + City: 'Sofia' + }, + Date: '2012-08-09T00:00:00', + Value: '11.488629929483231', + NumberOfUnits: '385' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '3.5650837251753935' + }, + Seller: { + Name: 'Harry Tyler', + City: 'London' + }, + Date: '2012-08-10T00:00:00', + Value: '25.95193755158779', + NumberOfUnits: '56' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '34.601844071690849' + }, + Seller: { + Name: 'Benjamin Dupree', + City: 'Berlin' + }, + Date: '2012-08-12T00:00:00', + Value: '96.15096314630982', + NumberOfUnits: '267' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '92.402922963911166' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Seattle' + }, + Date: '2012-08-14T00:00:00', + Value: '94.912259883672121', + NumberOfUnits: '109' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '34.719441707581019' + }, + Seller: { + Name: 'Mark Slater', + City: 'Berlin' + }, + Date: '2012-08-17T00:00:00', + Value: '62.383219023413595', + NumberOfUnits: '478' + }, + { + Product: { + Name: 'Components', + UnitPrice: '23.335559257928075' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'Berlin' + }, + Date: '2012-08-21T00:00:00', + Value: '57.657432163906023', + NumberOfUnits: '184' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '79.522237963751991' + }, + Seller: { + Name: 'Brandon Mckim', + City: 'Seattle' + }, + Date: '2012-08-21T00:00:00', + Value: '35.349668718571621', + NumberOfUnits: '132' + }, + { + Product: { + Name: 'Components', + UnitPrice: '30.645626285414036' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Sofia' + }, + Date: '2012-08-22T00:00:00', + Value: '95.940469715716532', + NumberOfUnits: '142' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '89.887765138357764' + }, + Seller: { + Name: 'Carl Costello', + City: 'Seattle' + }, + Date: '2012-08-27T00:00:00', + Value: '27.453476901842972', + NumberOfUnits: '46' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '83.189849035437149' + }, + Seller: { + Name: 'Walter Pang', + City: 'Seattle' + }, + Date: '2012-09-03T00:00:00', + Value: '68.605291316567588', + NumberOfUnits: '102' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '0.10354146366172538' + }, + Seller: { + Name: 'Russell Shorter', + City: 'Berlin' + }, + Date: '2012-09-09T00:00:00', + Value: '96.593755668305676', + NumberOfUnits: '21' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '36.629343143026041' + }, + Seller: { + Name: 'Monica Freitag', + City: 'Sofia' + }, + Date: '2012-09-10T00:00:00', + Value: '4.9306348920476788', + NumberOfUnits: '442' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '92.3085672279394' + }, + Seller: { + Name: 'Harry Tyler', + City: 'New York' + }, + Date: '2012-09-13T00:00:00', + Value: '99.215311091027843', + NumberOfUnits: '254' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '28.009415291254136' + }, + Seller: { + Name: 'Nicholas Carmona', + City: 'Sofia' + }, + Date: '2012-09-13T00:00:00', + Value: '49.9100303509785', + NumberOfUnits: '251' + }, + { + Product: { + Name: 'Components', + UnitPrice: '60.30177895925091' + }, + Seller: { + Name: 'Antonio Charbonneau', + City: 'New York' + }, + Date: '2012-09-15T00:00:00', + Value: '43.926440898294764', + NumberOfUnits: '119' + }, + { + Product: { + Name: 'Bikes', + UnitPrice: '33.007745320446666' + }, + Seller: { + Name: 'Claudia Kobayashi', + City: 'New York' + }, + Date: '2012-09-19T00:00:00', + Value: '32.426872864564352', + NumberOfUnits: '256' + }, + { + Product: { + Name: 'Components', + UnitPrice: '99.002955760342516' + }, + Seller: { + Name: 'John Smith', + City: 'New York' + }, + Date: '2012-09-23T00:00:00', + Value: '35.80295570930604', + NumberOfUnits: '456' + }, + { + Product: { + Name: 'Components', + UnitPrice: '16.174323817796225' + }, + Seller: { + Name: 'Kathe Pettel', + City: 'London' + }, + Date: '2012-10-01T00:00:00', + Value: '16.358145333993317', + NumberOfUnits: '430' + }, + { + Product: { + Name: 'Components', + UnitPrice: '72.899271488608449' + }, + Seller: { + Name: 'David Haley', + City: 'Berlin' + }, + Date: '2012-10-02T00:00:00', + Value: '57.0288074934058', + NumberOfUnits: '248' + }, + { + Product: { + Name: 'Components', + UnitPrice: '21.662706984981291' + }, + Seller: { + Name: 'Harold Garvin', + City: 'Berlin' + }, + Date: '2012-10-18T00:00:00', + Value: '28.238128790742778', + NumberOfUnits: '440' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '28.342247115607488' + }, + Seller: { + Name: 'Howard Sprouse', + City: 'New York' + }, + Date: '2012-10-19T00:00:00', + Value: '66.64152637433331', + NumberOfUnits: '234' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '80.468710223431088' + }, + Seller: { + Name: 'Benjamin Meekins', + City: 'New York' + }, + Date: '2012-10-25T00:00:00', + Value: '5.2594607254767141', + NumberOfUnits: '36' + }, + { + Product: { + Name: 'Accessories', + UnitPrice: '97.686087618435764' + }, + Seller: { + Name: 'Harry Tyler', + City: 'London' + }, + Date: '2012-10-26T00:00:00', + Value: '41.233811686389991', + NumberOfUnits: '46' + }, + { + Product: { + Name: 'Components', + UnitPrice: '88.700193301169293' + }, + Seller: { + Name: 'Elisa Longbottom', + City: 'London' + }, + Date: '2012-11-02T00:00:00', + Value: '64.566657210032758', + NumberOfUnits: '211' + }, + { + Product: { + Name: 'Clothing', + UnitPrice: '67.261227205051682' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2012-11-17T00:00:00', + Value: '14.189396572387498', + NumberOfUnits: '408' + }, + { + Product: { + Name: 'Components', + UnitPrice: '7.1456905022010631' + }, + Seller: { + Name: 'Walter Pang', + City: 'New York' + }, + Date: '2012-11-20T00:00:00', + Value: '72.779385965680419', + NumberOfUnits: '376' + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/default/index.ts b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/index.ts new file mode 100644 index 000000000..eb7aa479d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/default/index.ts @@ -0,0 +1,17 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxPivotGridTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Pivot Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "pivot-grid"; + this.projectType = "igx-ts"; + this.name = "Pivot Grid"; + this.dependencies = [ + { import: "IgxPivotGridModule", from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxPivotGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/pivot-grid/index.ts b/packages/igx-templates/igx-ts-legacy/pivot-grid/index.ts new file mode 100644 index 000000000..c3bbad0d9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/pivot-grid/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxPivotGridComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Pivot Grid"; + this.group = "Grids & Lists"; + this.description = "basic IgxPivotGrid"; + } +} +module.exports = new IgxPivotGridComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/README.md b/packages/igx-templates/igx-ts-legacy/projects/_base/files/README.md new file mode 100644 index 000000000..eadfb0ea0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/README.md @@ -0,0 +1,46 @@ +# <%=name%> + +This project was generated with [Ignite UI CLI](https://github.com/IgniteUI/igniteui-cli) version <%=cliVersion%>. + +## Development server + +Run `ig start` to build the application, start a web server and open the application in the default browser. Then navigate to `http://localhost:4200/`. Default serving port can be configured in `ignite-ui-cli.json` via `defaultPort` property. + +## Build + +Run `ig build` to build the application into an output directory. + +## Step by step mode + +If you want to get a guided experience through the available options, you can initialize the step by step mode that will help you to create and setup your new application, as well as update project previously created with the Ignite UI CLI. To start the guide, simply run the `ig` command. + +## List templates + +The `ig list` lists all available templates. When you run the command within a project folder it will list all available templates, even if you have provided different ones. + +## Adding components + +Add a new component or template to the project passing component ID and choosing a name. + +`ig add ` + +The ID matches either a component ("grid", "combo", etc) or a predefined template. Predefined templates can provide either multiple components or fulfilling a specific use case like "form-validation", "master-detail" and so on. + +## Running unit tests + +Run `ig test` to execute the unit tests via [Karma](https://karma-runner.github.io). Runs all `.spec.ts` files under `./src` folder. + +## Running end-to-end tests + +Run `ig test --e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Help + +`ig help` lists the available commands and provides a brief description of what they do. + +### Further help + +To get more help on the IgniteUI CLI go check out the [IgniteUI CLI Wiki](https://github.com/IgniteUI/igniteui-cli/wiki). + +## Angular CLI compatibility +You can run all of the supported Angular CLI commands. More details at [Angular CLI](https://github.com/angular/angular-cli). diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__editorconfig b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__editorconfig new file mode 100644 index 000000000..59d9a3a3e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__eslintrc.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__eslintrc.json new file mode 100644 index 000000000..14d59748b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__eslintrc.json @@ -0,0 +1,50 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__github/workflows/node.js.yml b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__github/workflows/node.js.yml new file mode 100644 index 000000000..c90fa1b13 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__github/workflows/node.js.yml @@ -0,0 +1,35 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +# Using Ignite UI for Angular licensed packages via an access token: +# https://www.infragistics.com/products/ignite-ui-angular/angular/components/general/ignite-ui-licensing#github-actions-configuration + +name: Node.js CI + +on: + push: + branches: [ <%=yamlDefaultBranch%> ] + pull_request: + branches: [ <%=yamlDefaultBranch%> ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16.x, 18.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm ci + - run: npm run lint + - run: npm run build + - run: npm run test -- --watch=false --browsers ChromeHeadless diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__gitignore b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__gitignore new file mode 100644 index 000000000..0711527ef --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/__dot__gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/angular.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/angular.json new file mode 100644 index 000000000..9b81571d1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/angular.json @@ -0,0 +1,132 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "<%=dashName%>": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + }, + "@schematics/angular:application": { + "strict": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/<%=dashName%>", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss"<%=DefaultTheme%> + ], + "scripts": [ + "./node_modules/hammerjs/hammer.min.js" + ], + "stylePreprocessorOptions": { + "includePaths": ["node_modules"] + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "5mb", + "maximumError": "10mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "2mb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "<%=dashName%>:build:production" + }, + "development": { + "buildTarget": "<%=dashName%>:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "<%=dashName%>:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", + "styles": [ + "src/styles.scss" + ], + "scripts": [ + "./node_modules/hammerjs/hammer.min.js" + ], + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "stylePreprocessorOptions": { + "includePaths": ["node_modules"] + } + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + }, + "cli": { + "schematicCollections": ["@angular-eslint/schematics"] + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/ignite-ui-cli.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/ignite-ui-cli.json new file mode 100644 index 000000000..039ad70f3 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/ignite-ui-cli.json @@ -0,0 +1,19 @@ +{ + "version": "<%=cliVersion%>", + "project": { + "defaultPort": 4200, + "framework": "angular", + "projectType": "igx-ts", + "projectTemplate": "<%=projectTemplate%>", + "theme": "<%=theme%>", + "themePath": "<%=themePath%>", + "isBundle": false, + "bundleFilePath": "", + "igniteuiSource": "", + "components": [], + "sourceFiles": [], + "isShowcase": false, + "version": "" + }, + "build": {} +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/karma.conf.js b/packages/igx-templates/igx-ts-legacy/projects/_base/files/karma.conf.js new file mode 100644 index 000000000..faa061679 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/<%=dashName%>'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/package.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/package.json new file mode 100644 index 000000000..46bc878cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/package.json @@ -0,0 +1,51 @@ +{ + "name": "<%=dashName%>", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve -o", + "build": "ng build --configuration production", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "lint": "ng lint" + }, + "private": true, + "dependencies": { + "@angular/animations": "~17.0.0", + "@angular/common": "~17.0.0", + "@angular/compiler": "~17.0.0", + "@angular/core": "~17.0.0", + "@angular/forms": "~17.0.0", + "@angular/platform-browser": "~17.0.0", + "@angular/platform-browser-dynamic": "~17.0.0", + "@angular/router": "~17.0.0", + "hammerjs": "^2.0.8", + "igniteui-angular": "~17.0.0", + "minireset.css": "~0.0.7", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~17.0.0", + "@angular-eslint/builder": "^17.0.0", + "@angular-eslint/eslint-plugin": "^17.0.0", + "@angular-eslint/eslint-plugin-template": "^17.0.0", + "@angular-eslint/schematics": "^17.0.0", + "@angular-eslint/template-parser": "^17.0.0", + "@angular/cli": "~17.0.0", + "@angular/compiler-cli": "~17.0.0", + "@types/jasmine": "~5.1.1", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", + "eslint": "^8.52.0", + "igniteui-cli": "~<%=cliVersion%>", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "typescript": "~5.2.2" + } +} diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app-routing.module.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app-routing.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base/files/src/app/app-routing.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app-routing.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.html b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.html new file mode 100644 index 000000000..0540e6bc2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.scss b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.scss new file mode 100644 index 000000000..65187e57a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.scss @@ -0,0 +1,5 @@ +.outer-wrapper { + display: flex; + justify-content: center; + height: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.ts new file mode 100644 index 000000000..834e5aebe --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + title = 'Home - IgniteUI for Angular'; +} diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.module.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base/files/src/app/app.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/app.module.ts diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/error-routing.module.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error-routing.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/error-routing.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error-routing.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/global-error-handler.service.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/global-error-handler.service.ts new file mode 100644 index 000000000..3aba8811a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/global-error-handler.service.ts @@ -0,0 +1,23 @@ +import { ErrorHandler, Injectable, Injector, NgZone } from '@angular/core'; +import { Router } from '@angular/router'; + +@Injectable() +export class GlobalErrorHandlerService implements ErrorHandler { + + constructor(private injector: Injector, private zone: NgZone) { } + + handleError(error: any) { + // handle and/or log error, for example: + console.error(error); + + // show error page + const router = this.injector.get(Router); + if (router) { + this.zone.run(() => { + router + .navigate(['error']) + .catch((err: any) => console.error(err)); + }); + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/uncaught-error.component.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/uncaught-error.component.ts new file mode 100644 index 000000000..0fbb6ba26 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/error/uncaught-error.component.ts @@ -0,0 +1,6 @@ +import { Component } from '@angular/core'; + +@Component({ + template: '

Error 500: Internal Server Error

', +}) +export class UncaughtErrorComponent { } diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts new file mode 100644 index 000000000..4f027a808 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts @@ -0,0 +1,6 @@ +import { Component } from '@angular/core'; + +@Component({ + template: '

Error 404: Page not found

' +}) +export class PageNotFoundComponent { } diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/assets/__dot__gitkeep b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/assets/__dot__gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.prod.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.prod.ts new file mode 100644 index 000000000..3612073bc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.ts new file mode 100644 index 000000000..7b4f817ad --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/favicon.ico b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/favicon.ico new file mode 100644 index 000000000..997406ad2 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/favicon.ico differ diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/index.html b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/index.html new file mode 100644 index 000000000..298b4b419 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/index.html @@ -0,0 +1,17 @@ + + + + + Ignite UI for Angular + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/main.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/main.ts new file mode 100644 index 000000000..c7b673cf4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/polyfills.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/polyfills.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base/files/src/polyfills.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base/files/src/polyfills.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/styles.scss b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/styles.scss new file mode 100644 index 000000000..d3037e67e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/styles.scss @@ -0,0 +1,8 @@ +/* You can add global styles to this file, and also import other style files */ +// Standard CSS normalize, comment out if not required or using a different module +@use "minireset.css/minireset"; + +<%=CustomTheme%> +html, body { + height: 100%; +} diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/test.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/files/src/test.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base/files/src/test.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base/files/src/test.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.app.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.app.json new file mode 100644 index 000000000..82d91dc4a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.json new file mode 100644 index 000000000..c264a70d7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.json @@ -0,0 +1,29 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.spec.json b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.spec.json new file mode 100644 index 000000000..092345b02 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/files/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base/index.ts b/packages/igx-templates/igx-ts-legacy/projects/_base/index.ts new file mode 100644 index 000000000..b532eeef4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base/index.ts @@ -0,0 +1,86 @@ +import { ControlExtraConfiguration, ProjectTemplate, Util } from "@igniteui/cli-core"; +import * as path from "path"; +import { updateWorkspace } from "../../../Update"; + +export class BaseIgxProject implements ProjectTemplate { + public id: string = "base"; + public name = "base"; + public description = "Empty project layout structure for Ignite UI for Angular"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + public delimiters = { + content: { + end: `%>`, + start: `<%=` + }, + path: { + end: `__`, + start: `__` + } + }; + + private CUSTOM_THEME + = `/* See: https://www.infragistics.com/products/ignite-ui-angular/angular/components/themes/sass/index */ +@use "igniteui-angular/theming" as *; + +$primary: #09f !default; +$secondary: #4db8ff !default; +$surface: #fff !default; + +$app-palette: palette($primary, $secondary, $surface); + +/* autoprefixer grid: on */ + +@include core(); +@include typography($font-family: $material-typeface, $type-scale: $material-type-scale); +@include theme($app-palette); +`; + private DEFAULT_THEME = `, + "node_modules/igniteui-angular/styles/igniteui-angular.css"`; + + public get templatePaths(): string[] { + return [path.join(__dirname, "files")]; + } + + public installModules(): void { + throw new Error("Method not implemented."); + } + + public async upgradeIgniteUIPackages(projectPath: string, packagePath: string): Promise { + return updateWorkspace(projectPath); + } + public getExtraConfiguration(): ControlExtraConfiguration[] { + return []; + } + public setExtraConfiguration(extraConfigKeys: any[]) { } + public generateConfig(name: string, theme: string, ...options: any[]): { [key: string]: any } { + const config = { + name, + theme, + cliVersion: Util.version(), + CustomTheme: "", + dashName: Util.lowerDashed(name), + DefaultTheme: "", + dot: ".", + path: name, + projectTemplate: this.id, + yamlDefaultBranch: "<%=yaml-default-branch%>" // the placeholder will be evaluated by CodeGen + }; + + switch (theme) { + case "Custom": + config["CustomTheme"] = this.CUSTOM_THEME; + config["themePath"] = "Custom"; + break; + case "Default": + default: + config["DefaultTheme"] = this.DEFAULT_THEME; + config["themePath"] = "node_modules/igniteui-angular/styles/igniteui-angular.css"; + break; + } + + return config; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/__dot__github/workflows/node.js.yml b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/__dot__github/workflows/node.js.yml new file mode 100644 index 000000000..f06ae642b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/__dot__github/workflows/node.js.yml @@ -0,0 +1,35 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +# Using Ignite UI for Angular licensed packages via an access token: +# https://www.infragistics.com/products/ignite-ui-angular/angular/components/general/ignite-ui-licensing#github-actions-configuration + +name: Node.js CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16.x, 18.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm ci + - run: npm run lint + - run: npm run build + - run: npm run test -- --watch=false --browsers ChromeHeadless diff --git a/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app-routing.module.ts b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/app-routing.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app-routing.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/app-routing.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.html b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.html new file mode 100644 index 000000000..e1f78eebe --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.html @@ -0,0 +1,9 @@ + +

{{title}}

+Ignite UI CLI + + diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.scss b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.scss new file mode 100644 index 000000000..ae3afa812 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.scss @@ -0,0 +1,35 @@ +a { + color: #731963; + text-decoration: none; +} + +h1 { + font-size: 3rem; + font-weight: 600; + color: rgba(0, 0, 0, .74); +} + +h3 { + font-size: 1.75rem; + font-weight: 600; +} + +.links{ + text-align: center; + padding: 0 35px; +} + +#linksContainer { + flex-flow: row wrap; + display: flex; + justify-content: center; +} + +:host{ + width: 100%; + text-align:center; +} + +img { + max-width:100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.spec.ts new file mode 100644 index 000000000..352706fd8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ RouterTestingModule ], + declarations: [ HomeComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.ts b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.ts new file mode 100644 index 000000000..778c2190f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/app/home/home.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent { + title = 'Welcome to Ignite UI for Angular!'; + constructor() { } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/assets/responsive.gif b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/assets/responsive.gif new file mode 100644 index 000000000..76ecc9510 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/files/src/assets/responsive.gif differ diff --git a/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/index.ts b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/index.ts new file mode 100644 index 000000000..769634ccd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/_base_with_home/index.ts @@ -0,0 +1,19 @@ +import { ProjectTemplate } from "@igniteui/cli-core"; +import * as path from "path"; +import { BaseIgxProject } from "../_base"; + +export class BaseWithHomeProject extends BaseIgxProject implements ProjectTemplate { + public id: string = "base-with-home"; + public name = "Base with home"; + public description = "Empty project layout structure for Ignite UI for Angular with home page"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + + public get templatePaths() { + return [...super.templatePaths, path.join(__dirname, "files")]; + } +} + +export default new BaseWithHomeProject(); diff --git a/packages/igx-templates/igx-ts-legacy/projects/base/index.ts b/packages/igx-templates/igx-ts-legacy/projects/base/index.ts new file mode 100644 index 000000000..af7d2f9fd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/base/index.ts @@ -0,0 +1,18 @@ +import { ProjectTemplate } from "@igniteui/cli-core"; +import * as path from "path"; +import { BaseIgxProject } from "../_base"; + +export class BasePageTemplate extends BaseIgxProject implements ProjectTemplate { + public id: string = "base"; + public name = "Base Project"; + public description = "Project structure with routing"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + + public get templatePaths(): string[] { + return [...super.templatePaths, path.join(__dirname, "files")]; + } +} +export default new BasePageTemplate(); diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app-routing.module.ts b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app-routing.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/empty/files/src/app/app-routing.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app-routing.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.html b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.html new file mode 100644 index 000000000..0540e6bc2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.scss b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.scss new file mode 100644 index 000000000..65187e57a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.scss @@ -0,0 +1,5 @@ +.outer-wrapper { + display: flex; + justify-content: center; + height: 100%; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.ts b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.ts new file mode 100644 index 000000000..834e5aebe --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + title = 'Home - IgniteUI for Angular'; +} diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.module.ts b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/empty/files/src/app/app.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/app.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.html b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.html new file mode 100644 index 000000000..f62088218 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.html @@ -0,0 +1,25 @@ +
+

Welcome to Ignite UI for Angular!

+

50+ Material-based UI Components

+ +

Discover more at

+

+ + www.infragistics.com/products/ignite-ui-angular + +

+

+ + www.infragistics.com/products/indigo-design + +

+

We are also on GitHub

+

+ + Ignite UI for Angular + + + Ignite UI CLI + +

+
diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.scss b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.scss new file mode 100644 index 000000000..a1eed14a5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.scss @@ -0,0 +1,67 @@ +@use 'igniteui-angular/theming' as *; + +%content-display { + width: 100%; + display: flex; + text-align: center; + flex-flow: column nowrap; + justify-content: stretch; + align-items: center; + padding: 40px 24px 40px 24px; + overflow: inherit; +} + +@include b(content) { + @extend %content-display; + + p { + margin: 0px 0px 8px 0px; + + &:nth-last-child(2) { + padding-top: 16px; + } + } + + @include e(header) { + color: color($default-palette, "primary"); + } + + @include e(subject) { + margin-bottom: 16px; + } + + @include e(container, $m: wide) { + display: flex; + flex-flow: row; + justify-content: center; + } + + @include e(link, $m: github) { + position: relative; + display: flex; + flex-flow: row; + align-items: center; + + &:not(:first-child) { + margin-left: 24px; + } + + &::before { + position: relative; + display: block; + content: ""; + min-width: 24px; + min-height: 24px; + background-image: url("../../assets/GitHub/github.svg"); + background-size: 24px 24px; + background-repeat: no-repeat; + margin-right: 8px; + } + } + + @include e(image) { + margin-bottom: 48px; + max-height: 480px; + max-width: 100%; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.ts b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.ts new file mode 100644 index 000000000..d9cc86e08 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/app/home/home.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent { +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/.gitkeep b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/GitHub/github.svg b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/GitHub/github.svg new file mode 100644 index 000000000..0358b9a04 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/GitHub/github.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/indigo-design.svg b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/indigo-design.svg new file mode 100644 index 000000000..d1651e7be --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/files/src/assets/indigo-design.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + import { IgxGridModule } + from 'igniteui-angular'; + @NgModule({ + imports: [ + ... + IgxGridModule + ... + ] + }) + export class AppModule {} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/projects/empty/index.ts b/packages/igx-templates/igx-ts-legacy/projects/empty/index.ts new file mode 100644 index 000000000..36a6ba37c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/empty/index.ts @@ -0,0 +1,18 @@ +import { ProjectTemplate } from "@igniteui/cli-core"; +import * as path from "path"; +import { BaseWithHomeProject } from "../_base_with_home"; + +export class EmptyPageTemplate extends BaseWithHomeProject implements ProjectTemplate { + public id: string = "empty"; + public name = "Empty Project"; + public description = "Project structure with routing and a home page"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + + public get templatePaths(): string[] { + return [...super.templatePaths, path.join(__dirname, "files")]; + } +} +export default new EmptyPageTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/README.md b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/README.md new file mode 100644 index 000000000..c8c3999a6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/README.md @@ -0,0 +1,50 @@ +# <%=name%> + + +TODO: Project setup + links + + +This project was generated with [Ignite UI CLI](https://github.com/IgniteUI/igniteui-cli) version <%=cliVersion%>. + +## Development server + +Run `ig start` to build the application, start a web server and open the application in the default browser. Then navigate to `http://localhost:4200/`. Default serving port can be configured in `ignite-ui-cli.json` via `defaultPort` property. + +## Build + +Run `ig build` to build the application into an output directory. + +## Step by step mode + +If you want to get a guided experience through the available options, you can initialize the step by step mode that will help you to create and setup your new application, as well as update project previously created with the Ignite UI CLI. To start the guide, simply run the `ig` command. + +## List templates + +The `ig list` lists all available templates. When you run the command within a project folder it will list all available templates, even if you have provided different ones. + +## Adding components + +Add a new component or template to the project passing component ID and choosing a name. + +`ig add ` + +The ID matches either a component ("grid", "combo", etc) or a predefined template. Predefined templates can provide either multiple components or fulfilling a specific use case like "form-validation", "master-detail" and so on. + +## Running unit tests + +Run `ig test` to execute the unit tests via [Karma](https://karma-runner.github.io). Runs all `.spec.ts` files under `./src` folder. + +## Running end-to-end tests + +Run `ig test --e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Help + +`ig help` lists the available commands and provides a brief description of what they do. + +### Further help + +To get more help on the IgniteUI CLI go check out the [IgniteUI CLI Wiki](https://github.com/IgniteUI/igniteui-cli/wiki). + +## Angular CLI compatibility +You can run all of the supported Angular CLI commands. More details at [Angular CLI](https://github.com/angular/angular-cli). diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/package.json b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/package.json new file mode 100644 index 000000000..76fe87e6c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/package.json @@ -0,0 +1,55 @@ +{ + "name": "<%=dashName%>", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve -o", + "build": "ng build --configuration production", + "test": "ng test", + "lint": "ng lint" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/common": "~17.0.0", + "@angular/compiler": "~17.0.0", + "@angular/core": "~17.0.0", + "@angular/forms": "~17.0.0", + "@angular/platform-browser": "~17.0.0", + "@angular/platform-browser-dynamic": "~17.0.0", + "@angular/router": "~17.0.0", + "angular-auth-oidc-client": "^15.0.4", + "hammerjs": "^2.0.8", + "igniteui-angular": "~17.0.0", + "minireset.css": "~0.0.7", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~17.0.0", + "@angular-eslint/builder": "^17.0.0", + "@angular-eslint/eslint-plugin": "^17.0.0", + "@angular-eslint/eslint-plugin-template": "^17.0.0", + "@angular-eslint/schematics": "^17.0.0", + "@angular-eslint/template-parser": "^17.0.0", + "@angular/cli": "~17.0.0", + "@angular/compiler-cli": "~17.0.0", + "@angular/language-service": "~17.0.0", + "@types/facebook-js-sdk": "^3.3.6", + "@types/hammerjs": "^2.0.41", + "@types/jasmine": "~5.1.1", + "@types/jasminewd2": "~2.0.3", + "@typescript-eslint/eslint-plugin": "6.9.1", + "@typescript-eslint/parser": "6.9.1", + "eslint": "^8.52.0", + "igniteui-cli": "~<%=cliVersion%>", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.html new file mode 100644 index 000000000..b1f287739 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.html @@ -0,0 +1,16 @@ +
+ + + Views + {{route.name}} + + +
+ + + +
+ +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.spec.ts new file mode 100644 index 000000000..31f35af32 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { IgxLayoutModule, IgxNavbarModule, IgxNavigationDrawerModule, IgxRippleModule } from 'igniteui-angular'; +import { AppComponent } from './app.component'; +import { AuthenticationModule } from './authentication'; +describe('AppComponent', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + RouterTestingModule, + IgxNavigationDrawerModule, + AuthenticationModule, + IgxNavbarModule, + IgxLayoutModule, + IgxRippleModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + it('should create the app', waitForAsync(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + })); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.module.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.module.ts new file mode 100644 index 000000000..22fc8f489 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/app.module.ts @@ -0,0 +1,48 @@ +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { BrowserModule, HammerModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxLayoutModule, IgxNavbarModule, IgxNavigationDrawerModule, IgxRippleModule +} from 'igniteui-angular'; +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { AuthenticationModule, ExternalAuthService } from './authentication'; +import { HomeComponent } from './home/home.component'; + +@NgModule({ + declarations: [ + AppComponent, + HomeComponent + ], + imports: [ + FormsModule, + BrowserModule, + HammerModule, + BrowserAnimationsModule, + // NOTE: `AuthenticationModule` defines child routes, must be imported before root `AppRoutingModule` + AuthenticationModule, + AppRoutingModule, + IgxNavigationDrawerModule, + IgxNavbarModule, + IgxLayoutModule, + IgxRippleModule + ], + providers: [], + bootstrap: [AppComponent] +}) +export class AppModule { + + constructor(private externalAuthService: ExternalAuthService) { + /** + * To register a social login, un-comment one or more of the following and add your service provider Client ID. + * See https://github.com/IgniteUI/igniteui-cli/wiki/Angular-Authentication-Project-Template#add-a-third-party-social-provider + */ + // this.externalAuthService.addGoogle(''); + + // this.externalAuthService.addMicrosoft(''); + + // this.externalAuthService.addFacebook(''); + } + +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.spec.ts new file mode 100644 index 000000000..e9e559f6c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.spec.ts @@ -0,0 +1,34 @@ +import { AuthGuard } from './auth.guard'; + +describe('AuthGuard', () => { + let mockRouter: any; + let mockUserService: any; + beforeEach(() => { + mockRouter = { + navigate: () => { } + }; + mockUserService = { + currentUser: true + }; + }); + + it('Should properly initialize', () => { + const authGuard = new AuthGuard(mockRouter, mockUserService); + expect(authGuard).toBeDefined(); + }); + + it(`Should properly call 'canActivate'`, () => { + const authGuard = new AuthGuard(mockRouter, mockUserService); + const mockSpy = jasmine.createSpy('mockSpy'); + expect(authGuard.canActivate(mockSpy as any, mockSpy as any)).toEqual(true); + }); + it(`Should properly call 'canActivate'`, () => { + const authGuard = new AuthGuard(mockRouter, mockUserService); + const mockSpy = jasmine.createSpy('mockSpy'); + mockUserService.currentUser = false; + spyOn(mockRouter, 'navigate'); + expect(authGuard.canActivate(mockSpy as any, { url: 'test' } as any)).toEqual(false); + expect(mockRouter.navigate).toHaveBeenCalled(); + expect(mockRouter.navigate).toHaveBeenCalledWith([''], { queryParams: { returnUrl: 'test' } }); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.ts new file mode 100644 index 000000000..d21cbe035 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/auth.guard.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { UserService } from './services/user.service'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthGuard implements CanActivate { + constructor(private router: Router, private userService: UserService) { } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + if (this.userService.currentUser) { + return true; + } + this.router.navigate([''], { queryParams: { returnUrl: state.url } }); + return false; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication-routing.module.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication-routing.module.ts new file mode 100644 index 000000000..d2e78209a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from './auth.guard'; +import { ProfileComponent } from './profile/profile.component'; +import { RedirectComponent } from './redirect/redirect.component'; +import { ExternalAuthProvider } from './services/external-auth-configs'; +import { ExternalAuthRedirectUrl } from './services/external-auth.service'; + +const authRoutes: Routes = [ + { path: 'profile', component: ProfileComponent, canActivate: [AuthGuard] }, + { path: ExternalAuthRedirectUrl.Google, component: RedirectComponent, data: { provider: ExternalAuthProvider.Google } }, + { path: ExternalAuthRedirectUrl.Facebook, component: RedirectComponent, data: { provider: ExternalAuthProvider.Facebook } }, + { path: ExternalAuthRedirectUrl.Microsoft, component: RedirectComponent, data: { provider: ExternalAuthProvider.Microsoft } } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(authRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AuthenticationRoutingModule { } diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.spec.ts new file mode 100644 index 000000000..f55a6eb7e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.spec.ts @@ -0,0 +1,13 @@ +import { AuthenticationModule } from './authentication.module'; + +describe('AuthenticationModule', () => { + let authenticationModule: AuthenticationModule; + + beforeEach(() => { + authenticationModule = new AuthenticationModule(); + }); + + it('should create an instance', () => { + expect(authenticationModule).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.ts new file mode 100644 index 000000000..8e02eb1fb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/authentication.module.ts @@ -0,0 +1,67 @@ +import { CommonModule } from '@angular/common'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { AuthModule, OidcConfigService } from 'angular-auth-oidc-client'; +import { + IgxAvatarModule, + IgxButtonModule, + IgxDialogModule, + IgxDropDownModule, + IgxIconModule, + IgxInputGroupModule, + IgxRippleModule, + IgxToggleModule +} from 'igniteui-angular'; +import { AuthGuard } from './auth.guard'; +import { AuthenticationRoutingModule } from './authentication-routing.module'; +import { LoginBarComponent } from './login-bar/login-bar.component'; +import { LoginDialogComponent } from './login-dialog/login-dialog.component'; +import { LoginComponent } from './login/login.component'; +import { ProfileComponent } from './profile/profile.component'; +import { RedirectComponent } from './redirect/redirect.component'; +import { RegisterComponent } from './register/register.component'; +import { BackendProvider } from './services/fake-backend.service'; +import { JwtInterceptor } from './services/jwt.interceptor'; + +@NgModule({ + imports: [ + CommonModule, + HttpClientModule, + ReactiveFormsModule, + AuthModule.forRoot(), + AuthenticationRoutingModule, + IgxAvatarModule, + IgxButtonModule, + IgxDialogModule, + IgxDropDownModule, + IgxIconModule, + IgxInputGroupModule, + IgxRippleModule, + IgxToggleModule + ], + declarations: [ + LoginBarComponent, + LoginComponent, + LoginDialogComponent, + ProfileComponent, + RedirectComponent, + RegisterComponent + ], + providers: [ + AuthGuard, + OidcConfigService, + { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true }, + // TODO: DELETE THIS BEFORE PRODUCTION! + BackendProvider + ], + exports: [ + LoginBarComponent, + LoginComponent, + RedirectComponent, + RegisterComponent, + LoginDialogComponent, + ProfileComponent + ] +}) +export class AuthenticationModule { } diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/index.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/index.ts new file mode 100644 index 000000000..7ab61c2d0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/index.ts @@ -0,0 +1,9 @@ +export * from './auth.guard'; +export * from './authentication-routing.module'; +export * from './authentication.module'; +export * from './models/login'; +export * from './models/register'; +export * from './models/user'; +export * from './services/authentication.service'; +export * from './services/external-auth.service'; +export * from './services/user.service'; diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.html new file mode 100644 index 000000000..377e1c981 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.html @@ -0,0 +1,17 @@ + + + + + + Profile + Log Out + + + diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.scss new file mode 100644 index 000000000..c4b8e44a6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.scss @@ -0,0 +1,8 @@ +.login-button { + height: 3rem; + vertical-align: middle; +} + +igx-drop-down-item { + position: relative; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts new file mode 100644 index 000000000..5f6de9dd5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts @@ -0,0 +1,133 @@ +import { Component } from '@angular/core'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AuthModule } from 'angular-auth-oidc-client'; +import { + IgxAvatarComponent, + IgxAvatarModule, + IgxButtonModule, + IgxDialogModule, + IgxDropDownModule, + IgxIconModule, + IgxRippleModule, + IgxToggleModule +} from 'igniteui-angular'; +import { LoginDialogComponent } from '../login-dialog/login-dialog.component'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; +import { LoginBarComponent } from './login-bar.component'; + +@Component({ + selector: 'app-login-dialog', + template: '' +}) +class TestLoginDialogComponent extends LoginDialogComponent { + open() { } +} + +describe('LoginBarComponent', () => { + let component: LoginBarComponent; + let fixture: ComponentFixture; + class TestUserServSpy { + logout() { } + get currentUser() { return null; } + clearCurrentUser() { return null; } + } + + class TestAuthService { + logout() { } + } + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + NoopAnimationsModule, + AuthModule.forRoot(), + IgxAvatarModule, + IgxButtonModule, + IgxDialogModule, + IgxDropDownModule, + IgxIconModule, + IgxRippleModule, + IgxToggleModule + ], + declarations: [LoginBarComponent, TestLoginDialogComponent], + providers: [ + { provide: UserService, useClass: TestUserServSpy }, + { provide: ExternalAuthService, useClass: TestAuthService } + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoginBarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should switch between buttons based on logged user ', () => { + let buttons = fixture.debugElement.queryAll(By.css('button')); + expect(buttons.length).toBe(1); + expect(buttons[0].nativeElement.innerText).toBe('Log In'); + const userServ = TestBed.inject(UserService); + spyOnProperty(userServ, 'currentUser', 'get').and.returnValue({ + picture: 'picture' + }); + fixture.detectChanges(); + buttons = fixture.debugElement.queryAll(By.css('button')); + expect(buttons.length).toBe(1); + expect(buttons[0].nativeElement.children.length).toEqual(2); + const avatar: IgxAvatarComponent = fixture.debugElement.query(By.css('igx-avatar')).componentInstance; + expect(avatar.src).toBe('picture'); + }); + + it('should open dialog on button click (not logged)', () => { + // override ViewChild: + component.loginDialog = new TestLoginDialogComponent(); + + const button = fixture.debugElement.query(By.css('button')); + spyOn(component.loginDialog, 'open'); + button.triggerEventHandler('click', {}); + expect(component.loginDialog.open).toHaveBeenCalled(); + }); + + it('should open drop down on button click (logged in)', async () => { + const userServ = TestBed.inject(UserService); + spyOnProperty(userServ, 'currentUser', 'get').and.returnValue({ + picture: 'picture' + }); + fixture.detectChanges(); + + const button = fixture.debugElement.query(By.css('button')); + button.triggerEventHandler('click', {}); + await fixture.whenStable(); + expect(component.igxDropDown.collapsed).toBeFalsy(); + }); + + it('should handle user menu items', async () => { + const userServ = TestBed.inject(UserService); + const authServ = TestBed.inject(ExternalAuthService); + const router: Router = TestBed.inject(Router); + spyOn(router, 'navigate'); + spyOn(userServ, 'clearCurrentUser'); + spyOn(authServ, 'logout'); + + component.igxDropDown.open(); + component.igxDropDown.setSelectedItem(0); + expect(router.navigate).toHaveBeenCalledWith(['/profile']); + + component.igxDropDown.setSelectedItem(1); + expect(router.navigate).toHaveBeenCalledWith(['/home']); + expect(userServ.clearCurrentUser).toHaveBeenCalled(); + expect(authServ.logout).toHaveBeenCalled(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts new file mode 100644 index 000000000..b4df2e10b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts @@ -0,0 +1,48 @@ +import { Component, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { IgxDropDownComponent, ISelectionEventArgs } from 'igniteui-angular'; +import { LoginDialogComponent } from '../login-dialog/login-dialog.component'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; + +@Component({ + selector: 'app-login-bar', + templateUrl: './login-bar.component.html', + styleUrls: ['./login-bar.component.scss'] +}) +export class LoginBarComponent { + + @ViewChild(LoginDialogComponent, { static: true }) + loginDialog!: LoginDialogComponent; + + @ViewChild(IgxDropDownComponent, { static: true }) + igxDropDown!: IgxDropDownComponent; + + constructor( + public userService: UserService, + private authService: ExternalAuthService, + private router: Router) { + } + + openDialog() { + this.loginDialog.open(); + } + + handleLogout() { + this.router.navigate(['/home']); + this.userService.clearCurrentUser(); + this.authService.logout(); + } + + menuSelect(args: ISelectionEventArgs) { + // TODO: Use item value, swap to menu component in the future + switch (args.newSelection.index) { + case 0: + this.router.navigate(['/profile']); + break; + case 1: + this.handleLogout(); + break; + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.html new file mode 100644 index 000000000..2160f55cf --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.html @@ -0,0 +1,6 @@ + +
+ + +
+
diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.scss new file mode 100644 index 000000000..09607029f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.scss @@ -0,0 +1,3 @@ +.sign-dialog { + width: 20rem; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts new file mode 100644 index 000000000..d6c072b3b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts @@ -0,0 +1,83 @@ +import { Component, DebugElement, EventEmitter, Output } from '@angular/core'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxDialogModule } from 'igniteui-angular'; +import { LoginDialogComponent } from './login-dialog.component'; + +@Component({ + selector: 'app-login, app-register', + template: '' +}) +class TestSignViewComponent { + @Output() public viewChange = new EventEmitter(); + @Output() public loggedIn = new EventEmitter(); + @Output() public registered = new EventEmitter(); +} + +describe('LoginDialogComponent', () => { + let component: LoginDialogComponent; + let fixture: ComponentFixture; + + const checkViews = (): { loginView: DebugElement, registerView: DebugElement } => { + const loginView = fixture.debugElement.query(By.css('app-login')); + const registerView = fixture.debugElement.query(By.css('app-register')); + return { loginView, registerView }; + }; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [LoginDialogComponent, TestSignViewComponent], + imports: [NoopAnimationsModule, IgxDialogModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoginDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should switch views, show login on open', fakeAsync(() => { + let result = checkViews(); + expect(result.loginView).not.toBeNull(); + expect(result.registerView).toBeNull(); + + component.showLogin = false; + fixture.detectChanges(); + result = checkViews(); + expect(result.loginView).toBeNull(); + expect(result.registerView).not.toBeNull(); + expect(component.loginDialog.title).toEqual('Register'); + + component.open(); + tick(); + fixture.detectChanges(); + result = checkViews(); + expect(result.loginView).not.toBeNull(); + expect(result.registerView).toBeNull(); + expect(component.showLogin).toBeTruthy(); + expect(component.loginDialog.title).toEqual('Login'); + })); + + it('should switch views, close on events', () => { + let view: TestSignViewComponent = fixture.debugElement.query(By.css('app-login')).componentInstance; + spyOn(component.loginDialog, 'close'); + + view.viewChange.emit(); + expect(component.showLogin).toBeFalsy(); + view.loggedIn.emit(); + expect(component.loginDialog.close).toHaveBeenCalledTimes(1); + fixture.detectChanges(); + view = fixture.debugElement.query(By.css('app-register')).componentInstance; + view.viewChange.emit(); + expect(component.showLogin).toBeTruthy(); + view.registered.emit(); + expect(component.loginDialog.close).toHaveBeenCalledTimes(2); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts new file mode 100644 index 000000000..0680c082c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts @@ -0,0 +1,30 @@ +import { Component, ViewChild } from '@angular/core'; +import { IgxDialogComponent } from 'igniteui-angular'; + +@Component({ + selector: 'app-login-dialog', + templateUrl: './login-dialog.component.html', + styleUrls: ['./login-dialog.component.scss'] +}) +export class LoginDialogComponent { + public showLogin = true; + public get title() { return this.showLogin ? 'Login' : 'Register'; } + @ViewChild(IgxDialogComponent, { static: true }) + public loginDialog!: IgxDialogComponent; + + open() { + this.loginDialog.open(); + } + + close() { + this.loginDialog.close(); + } + + onOpen() { + this.showLogin = true; + } + + toggleView() { + this.showLogin = !this.showLogin; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.html new file mode 100644 index 000000000..714c42ea2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.html @@ -0,0 +1,29 @@ +
+ + + account_circle + + + + + + + lock + + + + + +
+ + Create new account? +
+ +
diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.scss new file mode 100644 index 000000000..32492fbae --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.scss @@ -0,0 +1,32 @@ +form { + display: flex; + flex-flow: column; + align-items: center; + padding: 10px; + > * { + width: 100%; + } +} + +a { + padding-top: 10px; + cursor: pointer; +} +button { + margin-top: 15px; + width: 100%; +} + +.social-login { + border-top: 1px solid gray; + + button.google { + background-color: rgb(255, 19, 74); + } + button.facebook { + background-color: rgb(19, 119, 213); + } + button.microsoft { + background-color: rgb(27, 158, 245); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts new file mode 100644 index 000000000..153f07c25 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts @@ -0,0 +1,115 @@ +import { DebugElement } from '@angular/core'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { IgxButtonModule, IgxIconModule, IgxInputGroupModule, IgxRippleModule } from 'igniteui-angular'; +import { AuthenticationService } from '../services/authentication.service'; +import { ExternalAuthProvider } from '../services/external-auth-configs'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; +import { LoginComponent } from './login.component'; + +const MAIL_GROUP_NAME = 'email'; +const PASSWORD_GROUP_NAME = 'password'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + const extAuthSpy = jasmine.createSpyObj('ExternalAuthService', ['login', 'hasProvider']); + const authSpy = jasmine.createSpyObj('AuthenticationService', ['login']); + const userServSpy = jasmine.createSpyObj('UserService', ['setCurrentUser']); + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ReactiveFormsModule, RouterTestingModule, NoopAnimationsModule, + IgxInputGroupModule, IgxButtonModule, IgxIconModule, IgxRippleModule], + declarations: [LoginComponent], + providers: [ + { provide: ExternalAuthService, useValue: extAuthSpy }, + { provide: AuthenticationService, useValue: authSpy }, + { provide: UserService, useValue: userServSpy } + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should submit login data', async () => { + const router: Router = TestBed.inject(Router); + spyOn(router, 'navigate'); + expect(component.loginForm.valid).toBeFalsy(); + component.loginForm.controls[MAIL_GROUP_NAME].setValue('test@example.com'); + expect(component.loginForm.valid).toBeFalsy(); + component.loginForm.controls[PASSWORD_GROUP_NAME].setValue('123456'); + expect(component.loginForm.valid).toBeTruthy(); + spyOn(component.loggedIn, 'emit'); + authSpy.login.and.returnValue(Promise.resolve({ + error: null, + user: { name: 'TEST' } + })); + await component.tryLogin(); + expect(authSpy.login).toHaveBeenCalledTimes(1); + expect(authSpy.login).toHaveBeenCalledWith({ + email: 'test@example.com', + password: '123456' + }); + expect(userServSpy.setCurrentUser).toHaveBeenCalledWith({ name: 'TEST' }); + expect(component.loggedIn.emit).toHaveBeenCalled(); + expect(router.navigate).toHaveBeenCalledWith(['/profile']); + + authSpy.login.and.returnValue(Promise.resolve({ + error: 'Err' + })); + spyOn(window, 'alert'); + await component.tryLogin(); + expect(window.alert).toHaveBeenCalledWith('Err'); + }); + + it('should enable external auth buttons when configured', () => { + let activeProvider = ExternalAuthProvider.Facebook; + const has = (provider: ExternalAuthProvider) => provider ? provider === activeProvider : true; + (extAuthSpy.hasProvider as jasmine.Spy).and.callFake(has); + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('button.facebook'))).toEqual(jasmine.any(DebugElement)); + expect(fixture.debugElement.query(By.css('button.google'))).toBeNull(); + expect(fixture.debugElement.query(By.css('button.microsoft'))).toBeNull(); + activeProvider = ExternalAuthProvider.Google; + fixture.detectChanges(); + expect(fixture.debugElement.query(By.css('button.facebook'))).toBeNull(); + expect(fixture.debugElement.query(By.css('button.google'))).toEqual(jasmine.any(DebugElement)); + expect(fixture.debugElement.query(By.css('button.microsoft'))).toBeNull(); + }); + + it('should call correct external auth login per button', () => { + (extAuthSpy.hasProvider as jasmine.Spy).and.returnValue(true); + fixture.detectChanges(); + spyOn(component.loggedIn, 'emit'); + fixture.debugElement.query(By.css('button.facebook')).nativeElement.click(); + expect(extAuthSpy.login).toHaveBeenCalledWith(ExternalAuthProvider.Facebook); + expect(component.loggedIn.emit).toHaveBeenCalled(); + + fixture.debugElement.query(By.css('button.google')).nativeElement.click(); + expect(extAuthSpy.login).toHaveBeenCalledWith(ExternalAuthProvider.Google); + + fixture.debugElement.query(By.css('button.microsoft')).nativeElement.click(); + expect(extAuthSpy.login).toHaveBeenCalledWith(ExternalAuthProvider.Microsoft); + }); + + it('should emit viewChange on "create account" click', () => { + spyOn(fixture.componentInstance.viewChange, 'emit'); + fixture.debugElement.query(By.css('#register')).nativeElement.click(); + expect(fixture.componentInstance.viewChange.emit).toHaveBeenCalled(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts new file mode 100644 index 000000000..f3ef2701f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts @@ -0,0 +1,63 @@ +import { Component, EventEmitter, Output } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { AuthenticationService } from '../services/authentication.service'; +import { ExternalAuthProvider } from '../services/external-auth-configs'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.scss'] +}) +export class LoginComponent { + public loginForm: FormGroup; + @Output() public viewChange: EventEmitter = new EventEmitter(); + @Output() public loggedIn: EventEmitter = new EventEmitter(); + /** expose to template */ + public providers = ExternalAuthProvider; + + constructor( + public authService: ExternalAuthService, private authentication: AuthenticationService, + private userService: UserService, private router: Router, fb: FormBuilder + ) { + this.loginForm = fb.group({ + email: ['', Validators.required], + password: ['', Validators.required], + }); + } + + signUpG() { + this.authService.login(ExternalAuthProvider.Google); + } + + signUpMS() { + this.authService.login(ExternalAuthProvider.Microsoft); + } + + signUpFb() { + this.authService.login(ExternalAuthProvider.Facebook); + this.loggedIn.emit(); + } + + async tryLogin() { + const response = await this.authentication.login(this.loginForm.value); + if (!response.error) { + this.userService.setCurrentUser(response.user!); + this.router.navigate(['/profile']); + this.loginForm.reset(); + // https://github.com/angular/angular/issues/15741 + Object.keys(this.loginForm.controls).forEach(key => { + this.loginForm.controls[key].setErrors(null); + }); + this.loggedIn.emit(); + } else { + alert(response.error); + } + } + + showRegistrationForm() { + this.viewChange.emit(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/login.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/login.ts new file mode 100644 index 000000000..42bbc3da9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/login.ts @@ -0,0 +1,16 @@ +export interface Login { + email: string; + password: string; +} + +/** Used to send sign in info provided by an external login */ +export interface ExternalLogin { + id: string; + name: string; + given_name?: string; + family_name?: string; + email: string; + picture?: string; + externalToken: string; + externalProvider?: string; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/register.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/register.ts new file mode 100644 index 000000000..6a09e5204 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/register.ts @@ -0,0 +1,6 @@ +export interface Register { + given_name: string; + family_name: string; + email: string; + password: string; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/user.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/user.ts new file mode 100644 index 000000000..8884c6c7f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/models/user.ts @@ -0,0 +1,20 @@ +/** Data transfer model expected from backend API JWT-s */ +export interface UserJWT { + // using registered/public claims per https://www.iana.org/assignments/jwt/jwt.xhtml + exp: number; + name: string; + given_name: string; + family_name: string; + email: string; + picture?: string; +} + +/** Client user model */ +export interface User extends UserJWT { + token: string; +} + +export interface LoginResult { + user?: User; + error?: string; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.html new file mode 100644 index 000000000..f89c3186d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.html @@ -0,0 +1,3 @@ +

+ Hello {{this.userService.currentUser!.name.toUpperCase()}}, you are now logged in! +

diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts new file mode 100644 index 000000000..1b81147cb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UserService } from '../services/user.service'; +import { ProfileComponent } from './profile.component'; + +describe('ProfileComponent', () => { + let component: ProfileComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ProfileComponent], + providers: [ + { provide: UserService, useValue: { currentUser: { name: 'test' } } } + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ProfileComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts new file mode 100644 index 000000000..0e3d452d4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { UserService } from '../services/user.service'; + +@Component({ + selector: 'app-profile', + templateUrl: './profile.component.html', + styleUrls: ['./profile.component.scss'] +}) +export class ProfileComponent { + constructor(public userService: UserService) { } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/auth-provider.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/auth-provider.ts new file mode 100644 index 000000000..e15016e81 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/auth-provider.ts @@ -0,0 +1,8 @@ +import { ExternalLogin } from '../models/login'; + +export interface AuthProvider { + config(): void; + login(): void; + getUserInfo(): Promise; + logout(): void; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/base-oidc-provider.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/base-oidc-provider.ts new file mode 100644 index 000000000..9bcbfb411 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/base-oidc-provider.ts @@ -0,0 +1,71 @@ +import { + AuthWellKnownEndpoints, + OidcConfigService, + OidcSecurityService, + OpenIDImplicitFlowConfiguration +} from 'angular-auth-oidc-client'; +import { take } from 'rxjs/operators'; +import { ExternalLogin } from '../models/login'; +import { ExternalAuthConfig } from '../services/external-auth-configs'; +import { AuthProvider } from './auth-provider'; + +/** Base provider for OpenID Connect (OIDC) https://openid.net/connect/ */ +export abstract class BaseOidcProvider implements AuthProvider { + constructor( + protected oidcConfigService: OidcConfigService, + protected oidcSecurityService: OidcSecurityService, + protected externalStsConfig: ExternalAuthConfig) { } + + public config() { + const openIDImplicitFlowConfiguration = new OpenIDImplicitFlowConfiguration(); + openIDImplicitFlowConfiguration.stsServer = this.externalStsConfig.stsServer; + openIDImplicitFlowConfiguration.redirect_url = this.externalStsConfig.redirect_url; + openIDImplicitFlowConfiguration.client_id = this.externalStsConfig.client_id; + openIDImplicitFlowConfiguration.response_type = this.externalStsConfig.response_type; + openIDImplicitFlowConfiguration.scope = this.externalStsConfig.scope; + openIDImplicitFlowConfiguration.post_logout_redirect_uri = this.externalStsConfig.redirect_url; + openIDImplicitFlowConfiguration.post_login_route = this.externalStsConfig.post_login_route; + openIDImplicitFlowConfiguration.auto_userinfo = this.externalStsConfig.auto_userinfo; + openIDImplicitFlowConfiguration.max_id_token_iat_offset_allowed_in_seconds = + this.externalStsConfig.max_id_token_iat_offset_allowed_in_seconds; + + const authWellKnownEndpoints = new AuthWellKnownEndpoints(); + authWellKnownEndpoints.setWellKnownEndpoints(this.oidcConfigService.wellKnownEndpoints); + this.oidcSecurityService.setupModule(openIDImplicitFlowConfiguration, authWellKnownEndpoints); + } + + public login() { + this.oidcConfigService.onConfigurationLoaded.pipe(take(1)).subscribe(() => { + this.config(); + this.oidcSecurityService.authorize(); + }); + this.oidcConfigService.load_using_stsServer(this.externalStsConfig.stsServer); + } + + public getUserInfo(): Promise { + let resolve: (val: ExternalLogin) => void; + let reject: () => void; + const user = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + this.oidcConfigService.onConfigurationLoaded.pipe(take(1)).subscribe(() => { + this.config(); + this.oidcSecurityService.onAuthorizationResult.subscribe(() => { + this.oidcSecurityService.getUserData().subscribe(userData => { + resolve(this.formatUserData(userData)); + }); + }); + this.oidcSecurityService.authorizedImplicitFlowCallback(); + }); + this.oidcConfigService.load_using_stsServer(this.externalStsConfig.stsServer); + return user; + } + + public logout() { + this.oidcSecurityService.logoff(); + } + + /** Format received user data per provider claims */ + protected abstract formatUserData(userData: { [key: string]: any; }): ExternalLogin; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/facebook-provider.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/facebook-provider.ts new file mode 100644 index 000000000..05ecfa6b2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/facebook-provider.ts @@ -0,0 +1,56 @@ +import { Router } from '@angular/router'; +import { ExternalLogin } from '../models/login'; +import { ExternalAuthConfig } from '../services/external-auth-configs'; +import { AuthProvider } from './auth-provider'; + +export class FacebookProvider implements AuthProvider { + private user?: ExternalLogin; + + constructor(private externalStsConfig: ExternalAuthConfig, private router: Router) { } + + public config() { + // Requiring HTTPS for Facebook Login + // https://developers.facebook.com/blog/post/2018/06/08/enforce-https-facebook-login/ + FB.init({ + appId: this.externalStsConfig.client_id, + xfbml: false, + version: 'v3.1' + }); + } + + public login() { + const accessToken = 'accessToken'; + this.config(); + FB.login((response) => { + if (response.authResponse) { + FB.api( + '/me?fields=id,email,name,first_name,last_name,picture', + (newResponse: { [key: string]: any; }) => { + this.user = { + id: newResponse.id, + name: newResponse.name, + given_name: newResponse.first_name, + family_name: newResponse.last_name, + email: newResponse.email, + picture: newResponse.picture, + externalToken: FB.getAuthResponse()[accessToken] + }; + this.router.navigate([this.externalStsConfig.redirect_url]); + }); + } else { + console.log('User cancelled login or did not fully authorize.'); + } + }, { scope: 'public_profile' }); + } + + public getUserInfo(): Promise { + if (!this.user) { + throw "User not logged in"; + } + return Promise.resolve(this.user); + } + + public logout() { + FB.logout((response) => { }); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/google-provider.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/google-provider.ts new file mode 100644 index 000000000..b9a77551e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/google-provider.ts @@ -0,0 +1,23 @@ +import { ExternalLogin } from '../models/login'; +import { BaseOidcProvider } from './base-oidc-provider'; + +export class GoogleProvider extends BaseOidcProvider { + /** + * Format user data per provider claims: + * https://developers.google.com/identity/protocols/OpenIDConnect + * https://developers.google.com/+/web/api/rest/openidconnect/getOpenIdConnect + */ + protected formatUserData(userData: { [key: string]: any; }): ExternalLogin { + const login: ExternalLogin = { + id: userData.sub, + name: userData.name, + email: userData.email, + given_name: userData.given_name, + family_name: userData.family_name, + picture: userData.picture, + externalToken: this.oidcSecurityService.getToken() + + }; + return login; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/microsoft-provider.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/microsoft-provider.ts new file mode 100644 index 000000000..6bd799034 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/microsoft-provider.ts @@ -0,0 +1,44 @@ +import { ExternalLogin } from '../models/login'; +import { BaseOidcProvider } from './base-oidc-provider'; + +export class MicrosoftProvider extends BaseOidcProvider { + public static keysURL = 'ms-discovery/keys'; + + /** ADD endpoint specific tenant + ID, used when connecting users from work or school accounts. + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc#fetch-the-openid-connect-metadata-document + */ + public tenant = 'consumers'; + public tenantID = ''; + + public config() { + if (this.tenant !== 'consumers') { + // Replace common discovery URL issuer with correct tenant ID for token validation: + this.oidcConfigService.wellKnownEndpoints.issuer = + this.oidcConfigService.wellKnownEndpoints.issuer.replace('{tenantid}', this.tenantID); + } + + // Microsoft OIDC doesn't support CORS for keys discovery URIs, intended for backend + // See https://stackoverflow.com/a/44688644 + // Example implementation: + // tslint:disable-next-line:max-line-length + // https://blogs.msdn.microsoft.com/mihansen/2018/07/12/net-core-angular-app-with-openid-connection-implicit-flow-authentication-angular-auth-oidc-client/ + // https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc + this.oidcConfigService.wellKnownEndpoints.jwks_uri = MicrosoftProvider.keysURL; + super.config(); + } + + /** + * Format user data response from available claims: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#payload-claims + */ + protected formatUserData(userData: { [key: string]: any; }): ExternalLogin { + const login: ExternalLogin = { + id: userData.oid, + name: userData.name, + email: userData.email, + externalToken: this.oidcSecurityService.getToken() + + }; + return login; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/providers.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/providers.spec.ts new file mode 100644 index 000000000..aab774ec3 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/providers/providers.spec.ts @@ -0,0 +1,305 @@ +import { FacebookProvider } from './facebook-provider'; +import { GoogleProvider } from './google-provider'; +import { MicrosoftProvider } from './microsoft-provider'; + +describe('Providers', () => { + const MOCK_EXTERNAL_AUTH_CONFIG = { + stsServer: 'test-stsServer', + redirect_url: 'test-redirect_url', + client_id: 'test-client_id', + response_type: 'test-response_type', + scope: 'test-scope', + post_login_route: 'test-post_login_route', + auto_userinfo: 'test-auto_userinfo', + max_id_token_iat_offset_allowed_in_seconds: 'test-max_id_token_iat_offset_allowed_in_seconds' + } as any; + const MOCK_ROUTER = { + navigate: () => { } + } as any; + const MOCK_OIDC_CONFIG = { + wellKnownEndpoints: { + issuer: '' + }, + load_using_stsServer: () => { }, + onConfigurationLoaded: { + pipe: () => { } + } + } as any; + const MOCK_OIDC_SECURITY = { + setupModule: () => { }, + authorize: () => { }, + getToken: () => { }, + onAuthorizationResult: () => { }, + authorizedImplicitFlowCallback: () => { }, + getUserData: () => { }, + logoff: () => { } + } as any; + describe('Facebook Provider', () => { + const facebookProviderName = 'FB'; + let mockResponse: any = {}; + let mockAPIObj = { + id: 'mock-id', + name: 'mock-name', + first_name: 'mock-first_name', + last_name: 'mock_last_name', + email: 'mock_email', + picture: 'mock_picture' + }; + global[facebookProviderName] = { + login: (callback: (obj: any) => void, scope: { scope: string }) => { callback({ authResponse: mockResponse }); }, + init: () => { }, + api: (params: string, callback: (obj: any) => void) => { callback(mockAPIObj); }, + getAuthResponse: (): any => { return { accessToken: 'mockAccessToken' } }, + logout: () => { }, + AppEvents: null, + Canvas: null, + Event: null, + getLoginStatus: (): any => null, + ui: (params: any, callback: (response: any) => void): void => { }, + XFBML: null + }; + it('Should properly initialize', () => { + const provider = new FacebookProvider(MOCK_EXTERNAL_AUTH_CONFIG, MOCK_ROUTER); + expect(provider).toBeDefined(); + }); + + it('Should properly call config', () => { + const provider = new FacebookProvider(MOCK_EXTERNAL_AUTH_CONFIG, MOCK_ROUTER); + spyOn(FB, 'init'); + provider.config(); + expect(FB.init).toHaveBeenCalled(); + expect(FB.init).toHaveBeenCalledWith({ + appId: MOCK_EXTERNAL_AUTH_CONFIG.client_id, + xfbml: false, + version: 'v3.1' + }); + }); + + it('Should properly call login', () => { + const provider = new FacebookProvider(MOCK_EXTERNAL_AUTH_CONFIG, MOCK_ROUTER); + spyOn(provider, 'config'); + spyOn(FB, 'login').and.callThrough(); + spyOn(console, 'log').and.callThrough(); + spyOn(FB, 'api').and.callThrough(); + mockResponse = false; + provider.login(); + expect(provider.config).toHaveBeenCalledTimes(1); + expect(FB.login).toHaveBeenCalledTimes(1); + expect(FB.api).not.toHaveBeenCalled(); + expect(console.log).toHaveBeenCalledWith('User cancelled login or did not fully authorize.'); + spyOn(FB, 'getAuthResponse').and.returnValue({ accessToken: 'Fake' } as any); + spyOn(MOCK_ROUTER, 'navigate'); + mockResponse = true; + const mockObj = { + id: 'test id', + name: 'test name', + first_name: 'test first name', + last_name: 'test family name', + email: 'test email', + picture: 'test picture' + }; + const expectedObject = { + id: 'test id', + name: 'test name', + given_name: 'test first name', + family_name: 'test family name', + email: 'test email', + picture: 'test picture', + externalToken: 'Fake' + }; + mockAPIObj = mockObj; + provider.login(); + expect(provider.config).toHaveBeenCalledTimes(2); + expect(FB.login).toHaveBeenCalledTimes(2); + expect(FB.api).toHaveBeenCalled(); + expect(MOCK_ROUTER.navigate).toHaveBeenCalledWith([MOCK_EXTERNAL_AUTH_CONFIG.redirect_url]); + expect((provider as any).user).toEqual(expectedObject); + }); + + it(`Should properly call 'getUserInfo'`, () => { + const provider = new FacebookProvider(MOCK_EXTERNAL_AUTH_CONFIG, MOCK_ROUTER); + provider.login(); + spyOn(Promise, 'resolve').and.returnValue('Mock' as any); + expect(provider.getUserInfo()).toEqual('Mock' as any); + }); + + it(`Should properly call 'logout'`, () => { + const provider = new FacebookProvider(MOCK_EXTERNAL_AUTH_CONFIG, MOCK_ROUTER); + spyOn(FB, 'logout'); + provider.logout(); + expect(FB.logout).toHaveBeenCalled(); + }); + }); + + describe('Google Provider', () => { + + it('Should properly initialize', () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + expect(provider).toBeDefined(); + }); + + it('Should properly call config', () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + spyOn(MOCK_OIDC_SECURITY, 'setupModule').and.callThrough(); + provider.config(); + expect(MOCK_OIDC_SECURITY.setupModule).toHaveBeenCalled(); + }); + + it('Should properly call login', () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockSub = { + subscribe: (fn: () => {}) => { + fn.apply(MOCK_OIDC_SECURITY); + } + }; + spyOn(mockSub, 'subscribe').and.callThrough(); + spyOn(MOCK_OIDC_SECURITY, 'authorize'); + spyOn(MOCK_OIDC_CONFIG.onConfigurationLoaded, 'pipe').and.returnValue(mockSub); + spyOn(MOCK_OIDC_CONFIG, 'load_using_stsServer'); + const mockSpy = spyOn(provider, 'config'); + provider.login(); + expect(mockSub.subscribe).toHaveBeenCalled(); + expect(mockSpy).toHaveBeenCalled(); + expect(MOCK_OIDC_SECURITY.authorize).toHaveBeenCalled(); + expect(MOCK_OIDC_CONFIG.load_using_stsServer).toHaveBeenCalled(); + }); + + it(`Should properly call 'formatUserData'`, () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockObj = { + sub: 'test-id', + name: 'test-name', + email: 'test-email', + given_name: 'test-given_name', + family_name: 'test-family_name', + picture: 'test-picture' + }; + spyOn(MOCK_OIDC_SECURITY, 'getToken').and.returnValue('FAKE'); + expect((provider as any).formatUserData(mockObj)).toEqual({ + id: mockObj.sub, + name: mockObj.name, + email: mockObj.email, + given_name: mockObj.given_name, + family_name: mockObj.family_name, + picture: mockObj.picture, + externalToken: 'FAKE' + }); + }); + + it('Should properly call getUserInfo', () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockSub = { + subscribe: (fn: () => {}) => { + fn.apply(this); + } + }; + spyOn(mockSub, 'subscribe').and.callThrough(); + spyOn(MOCK_OIDC_CONFIG.onConfigurationLoaded, 'pipe').and.returnValue(mockSub); + spyOn(provider, 'config'); + spyOn(MOCK_OIDC_CONFIG, 'load_using_stsServer'); + MOCK_OIDC_SECURITY.onAuthorizationResult = mockSub; + spyOn(MOCK_OIDC_SECURITY, 'getUserData').and.returnValue(mockSub); + spyOn(MOCK_OIDC_SECURITY, 'authorizedImplicitFlowCallback'); + const formatDataSpy = spyOn(provider, 'formatUserData'); + provider.getUserInfo(); + expect(mockSub.subscribe).toHaveBeenCalled(); + expect(mockSub.subscribe).toHaveBeenCalledTimes(3); + expect(formatDataSpy).toHaveBeenCalled(); + expect(provider.config).toHaveBeenCalled(); + expect(MOCK_OIDC_SECURITY.authorizedImplicitFlowCallback).toHaveBeenCalled(); + expect(MOCK_OIDC_CONFIG.load_using_stsServer).toHaveBeenCalled(); + }); + + it('Should properly call logout', () => { + const provider = new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + spyOn(MOCK_OIDC_SECURITY, 'logoff').and.callThrough(); + provider.logout(); + expect(MOCK_OIDC_SECURITY.logoff).toHaveBeenCalled(); + }); + }); + + describe('Microsoft Provider', () => { + + it('Should properly initialize', () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + expect(provider).toBeDefined(); + }); + + it('Should properly call config', () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + spyOn(MOCK_OIDC_SECURITY, 'setupModule').and.callThrough(); + provider.config(); + expect(MOCK_OIDC_SECURITY.setupModule).toHaveBeenCalled(); + }); + + it('Should properly call config if tenant !== consumer', () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + provider.tenant = 'test'; + provider.tenantID = 'test_id'; + const replaceSpy = spyOn(String.prototype, 'replace'); + spyOn(MOCK_OIDC_SECURITY, 'setupModule').and.callThrough(); + provider.config(); + expect(replaceSpy).toHaveBeenCalledWith('{tenantid}', 'test_id'); + expect(MOCK_OIDC_SECURITY.setupModule).toHaveBeenCalled(); + }); + + it('Should properly call login', () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockSub = { + subscribe: (fn: () => {}) => { + fn.apply(MOCK_OIDC_SECURITY); + } + }; + spyOn(mockSub, 'subscribe').and.callThrough(); + spyOn(MOCK_OIDC_SECURITY, 'authorize'); + spyOn(MOCK_OIDC_CONFIG.onConfigurationLoaded, 'pipe').and.returnValue(mockSub); + spyOn(MOCK_OIDC_CONFIG, 'load_using_stsServer'); + const mockSpy = spyOn(provider, 'config'); + provider.login(); + expect(mockSub.subscribe).toHaveBeenCalled(); + expect(mockSpy).toHaveBeenCalled(); + expect(MOCK_OIDC_SECURITY.authorize).toHaveBeenCalled(); + expect(MOCK_OIDC_CONFIG.load_using_stsServer).toHaveBeenCalled(); + }); + + it('Should properly call getUserInfo', () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockSub = { + subscribe: (fn: () => {}) => { + fn.apply(MOCK_OIDC_SECURITY); + } + }; + spyOn(mockSub, 'subscribe').and.callThrough(); + spyOn(MOCK_OIDC_CONFIG.onConfigurationLoaded, 'pipe').and.returnValue(mockSub); + spyOn(MOCK_OIDC_CONFIG, 'load_using_stsServer'); + spyOn(provider, 'config'); + spyOn(MOCK_OIDC_SECURITY, 'authorizedImplicitFlowCallback'); + MOCK_OIDC_SECURITY.onAuthorizationResult = mockSub; + spyOn(MOCK_OIDC_SECURITY, 'getUserData').and.returnValue(mockSub); + const formatDataSpy = spyOn(provider, 'formatUserData'); + provider.getUserInfo(); + expect(mockSub.subscribe).toHaveBeenCalled(); + expect(mockSub.subscribe).toHaveBeenCalledTimes(3); + expect(formatDataSpy).toHaveBeenCalled(); + expect(provider.config).toHaveBeenCalled(); + expect(MOCK_OIDC_SECURITY.authorizedImplicitFlowCallback).toHaveBeenCalled(); + expect(MOCK_OIDC_CONFIG.load_using_stsServer).toHaveBeenCalled(); + }); + + it(`Should properly call 'formatUserData'`, () => { + const provider = new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, MOCK_EXTERNAL_AUTH_CONFIG); + const mockObj = { + oid: 'test-id', + name: 'test-name', + email: 'test-email', + }; + spyOn(MOCK_OIDC_SECURITY, 'getToken').and.returnValue('FAKE'); + expect((provider as any).formatUserData(mockObj)).toEqual({ + id: mockObj.oid, + name: mockObj.name, + email: mockObj.email, + externalToken: 'FAKE' + }); + }); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts new file mode 100644 index 000000000..c6ea6f593 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts @@ -0,0 +1,60 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AuthenticationService } from '../services/authentication.service'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; +import { RedirectComponent } from './redirect.component'; + +describe('RedirectComponent', () => { + let fixture: ComponentFixture; + const activeRouteSpy: any = { snapshot: { data: { value: { provider: {} } } } }; + const extAuthSpy = jasmine.createSpyObj('ExternalAuthService', ['getUserInfo']); + const authSpy = jasmine.createSpyObj('AuthenticationService', ['loginWith']); + const userServSpy = jasmine.createSpyObj('UserService', ['setCurrentUser']); + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + declarations: [RedirectComponent], + providers: [ + { provide: ActivatedRoute, useValue: activeRouteSpy }, + { provide: ExternalAuthService, useValue: extAuthSpy }, + { provide: AuthenticationService, useValue: authSpy }, + { provide: UserService, useValue: userServSpy } + ] + }) + .compileComponents(); + })); + + it('should try external login on init', async () => { + const router: Router = TestBed.inject(Router); + spyOn(router, 'navigate'); + extAuthSpy.getUserInfo.and.returnValue(Promise.resolve({ test: '1' })); + authSpy.loginWith.and.returnValue(Promise.resolve({ + error: null, + user: { name: 'TEST' } + })); + fixture = TestBed.createComponent(RedirectComponent); + fixture.detectChanges(); + await fixture.whenStable(); + expect(extAuthSpy.getUserInfo).toHaveBeenCalled(); + expect(authSpy.loginWith).toHaveBeenCalledWith({ test: '1' }); + expect(userServSpy.setCurrentUser).toHaveBeenCalledWith({ name: 'TEST' }); + expect(router.navigate).toHaveBeenCalledWith(['/profile']); + }); + + it('should show err on external login', async () => { + const router: Router = TestBed.inject(Router); + spyOn(router, 'navigate'); + extAuthSpy.getUserInfo.and.returnValue(Promise.resolve({ test: '1' })); + authSpy.loginWith.and.returnValue(Promise.resolve({ + error: 'Err' + })); + spyOn(window, 'alert'); + fixture = TestBed.createComponent(RedirectComponent); + fixture.detectChanges(); + await fixture.whenStable(); + expect(window.alert).toHaveBeenCalledWith('Err'); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts new file mode 100644 index 000000000..9d99269db --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExternalLogin } from '../models/login'; +import { AuthenticationService } from '../services/authentication.service'; +import { ExternalAuthProvider } from '../services/external-auth-configs'; +import { ExternalAuthService } from '../services/external-auth.service'; +import { UserService } from '../services/user.service'; + +const routeData = 'value'; + +@Component({ + template: '

Signing in...

' +}) +export class RedirectComponent implements OnInit { + private provider: ExternalAuthProvider; + + constructor( + route: ActivatedRoute, + private router: Router, + private user: UserService, + private authService: AuthenticationService, + private externalAuthService: ExternalAuthService) { + this.provider = route.snapshot.data[routeData].provider as ExternalAuthProvider; + } + + async ngOnInit() { + const userInfo: ExternalLogin = await this.externalAuthService.getUserInfo(this.provider); + const result = await this.authService.loginWith(userInfo); + if (!result.error) { + this.user.setCurrentUser(result.user!); + this.router.navigate(['/profile']); + } else { + alert(result.error); + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.html new file mode 100644 index 000000000..d6f18be64 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.html @@ -0,0 +1,34 @@ +
+ + + assignment_ind + + + + + + + assignment_ind + + + + + + + alternate_email + + + + + + + lock + + + + +
+ + Have an account? +
+
diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.scss new file mode 100644 index 000000000..858338a78 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.scss @@ -0,0 +1,18 @@ +form { + display: flex; + flex-flow: column; + align-items: center; + padding: 10px; + > * { + width: 100%; + } +} + +button { + width: 100%; + margin-top: 10px; +} + +a { + cursor: pointer; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts new file mode 100644 index 000000000..f4b64bddb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts @@ -0,0 +1,92 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { IgxButtonModule, IgxIconModule, IgxInputGroupModule, IgxRippleModule } from 'igniteui-angular'; +import { AuthenticationService } from '../services/authentication.service'; +import { UserService } from '../services/user.service'; +import { RegisterComponent } from './register.component'; + +const MAIL_GROUP_NAME = 'email'; +const PASSWORD_GROUP_NAME = 'password'; +const USERNAME_GROUP_NAME = 'given_name'; +const FAMILY_NAME_GROUP_NAME = 'family_name'; + +describe('RegisterComponent', () => { + let component: RegisterComponent; + let fixture: ComponentFixture; + const authSpy = jasmine.createSpyObj('AuthenticationService', ['register']); + const userServSpy = jasmine.createSpyObj('UserService', ['setCurrentUser']); + const routerSpy = jasmine.createSpyObj('Router', ['navigate']); + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + ReactiveFormsModule, + RouterTestingModule, + IgxButtonModule, + IgxIconModule, + IgxInputGroupModule, + IgxRippleModule + ], + declarations: [RegisterComponent], + providers: [ + { provide: AuthenticationService, useValue: authSpy }, + { provide: UserService, useValue: userServSpy }, + { provide: Router, useValue: routerSpy } + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RegisterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should submit login data', async () => { + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[USERNAME_GROUP_NAME].setValue('John'); + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[MAIL_GROUP_NAME].setValue('test@example.com'); + expect(component.registrationForm.valid).toBeFalsy(); + component.registrationForm.controls[PASSWORD_GROUP_NAME].setValue('123456'); + expect(component.registrationForm.valid).toBeTruthy(); + component.registrationForm.controls[FAMILY_NAME_GROUP_NAME].setValue('Doe'); + spyOn(component.registered, 'emit'); + authSpy.register.and.returnValue(Promise.resolve({ + error: null, + user: { name: 'John Doe' } + })); + await component.tryRegister(); + expect(authSpy.register).toHaveBeenCalledTimes(1); + expect(authSpy.register).toHaveBeenCalledWith({ + given_name: 'John', + family_name: 'Doe', + email: 'test@example.com', + password: '123456' + }); + expect(userServSpy.setCurrentUser).toHaveBeenCalledWith({ name: 'John Doe' }); + expect(component.registered.emit).toHaveBeenCalled(); + expect(routerSpy.navigate).toHaveBeenCalledWith(['/profile']); + authSpy.register.and.returnValue(Promise.resolve({ + error: 'Reg error' + })); + spyOn(window, 'alert'); + await component.tryRegister(); + expect(window.alert).toHaveBeenCalledWith('Reg error'); + }); + + it(`should properly emit when 'showLoginForm' is called`, () => { + spyOn(component.viewChange, 'emit'); + component.showLoginForm(); + expect(component.viewChange.emit).toHaveBeenCalled(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts new file mode 100644 index 000000000..4aa7b2507 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts @@ -0,0 +1,48 @@ +import { Component, EventEmitter, Output } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { Register } from '../models/register'; +import { AuthenticationService } from '../services/authentication.service'; +import { UserService } from '../services/user.service'; + +@Component({ + selector: 'app-register', + templateUrl: './register.component.html', + styleUrls: ['./register.component.scss'] +}) +export class RegisterComponent { + + public registrationForm: FormGroup; + + @Output() + viewChange: EventEmitter = new EventEmitter(); + @Output() + registered: EventEmitter = new EventEmitter(); + + constructor(private authentication: AuthenticationService, + private fb: FormBuilder, + private userService: UserService, + private router: Router) { + this.registrationForm = this.fb.group({ + given_name: ['', Validators.required], + family_name: ['', Validators.nullValidator], + email: ['', Validators.required], + password: ['', Validators.required] + }); + } + + async tryRegister() { + const response = await this.authentication.register(this.registrationForm.value as Register); + if (!response.error) { + this.userService.setCurrentUser(response.user!); + this.router.navigate(['/profile']); + this.registered.emit(); + } else { + alert(response.error); + } + } + + showLoginForm() { + this.viewChange.emit(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/authentication.service.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/authentication.service.ts new file mode 100644 index 000000000..8544d553b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/authentication.service.ts @@ -0,0 +1,42 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ExternalLogin, Login } from '../models/login'; +import { Register } from '../models/register'; +import { LoginResult, User } from '../models/user'; +import { parseUser } from './jwt-util'; + +/** Authentication API Service */ +@Injectable({ + providedIn: 'root' +}) +export class AuthenticationService { + + constructor(private http: HttpClient) { } + + /** Send basic credentials to login endpoint. */ + public async login(userData: Login): Promise { + return this.loginPost('/login', userData); + } + + /** Send user info from 3rd party provider to external login endpoint. */ + public async loginWith(userInfo: ExternalLogin): Promise { + return this.loginPost('/extlogin', userInfo); + } + + /** Send user info to register endpoint. */ + public async register(userData: Register): Promise { + return this.loginPost('/register', userData); + } + + protected async loginPost(endpoint: string, userData: any): Promise { + let user: User; + try { + const data = await this.http.post(endpoint, userData).toPromise() as string; + user = parseUser(data); + } catch (e: any) { + return { error: e.message }; + } + + return { user }; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth-configs.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth-configs.ts new file mode 100644 index 000000000..7b72f0278 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth-configs.ts @@ -0,0 +1,18 @@ +export enum ExternalAuthProvider { + Facebook = 'Facebook', + Google = 'Google', + Microsoft = 'Microsoft' +} + +export interface ExternalAuthConfig { + stsServer: string; + client_id: string; + scope: string; + provider: ExternalAuthProvider; + redirect_url: string; + response_type: string; + post_logout_redirect_uri: string; + post_login_route: string; + auto_userinfo: boolean; + max_id_token_iat_offset_allowed_in_seconds: number; +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth.service.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth.service.ts new file mode 100644 index 000000000..25708d811 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/external-auth.service.ts @@ -0,0 +1,128 @@ +import { Location } from '@angular/common'; +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { OidcConfigService, OidcSecurityService } from 'angular-auth-oidc-client'; +import { ExternalLogin } from '../models/login'; +import { AuthProvider } from '../providers/auth-provider'; +import { FacebookProvider } from '../providers/facebook-provider'; +import { GoogleProvider } from '../providers/google-provider'; +import { MicrosoftProvider } from '../providers/microsoft-provider'; +import { ExternalAuthConfig, ExternalAuthProvider } from './external-auth-configs'; +import { LocalStorageService } from './local-storage'; + +export enum ExternalAuthRedirectUrl { + Facebook = 'redirect-facebook', + Google = 'redirect-google', + Microsoft = 'redirect-microsoft' +} + +@Injectable({ + providedIn: 'root' +}) +export class ExternalAuthService { + protected providers: Map = new Map(); + public get activeProvider(): ExternalAuthProvider { + return this.localStorage.getItem('extActiveProvider') as ExternalAuthProvider; + } + public set activeProvider(provider: ExternalAuthProvider) { + this.localStorage.setItem('extActiveProvider', provider); + } + + constructor( + private router: Router, + private oidcSecurityService: OidcSecurityService, + private oidcConfigService: OidcConfigService, + private location: Location, + private localStorage: LocalStorageService) { + } + + public hasProvider(provider?: ExternalAuthProvider) { + if (provider) { + return this.providers.has(provider); + } + return this.providers.size > 0; + } + + public addGoogle(clientID: string) { + const googleConfig: ExternalAuthConfig = { + provider: ExternalAuthProvider.Google, + stsServer: 'https://accounts.google.com', + client_id: clientID, + scope: 'openid email profile', + redirect_url: this.getAbsoluteUrl(ExternalAuthRedirectUrl.Google), + response_type: 'id_token token', + post_logout_redirect_uri: '/', + post_login_route: 'redirect', + auto_userinfo: false, + max_id_token_iat_offset_allowed_in_seconds: 30 + }; + this.providers.set( + ExternalAuthProvider.Google, + new GoogleProvider(this.oidcConfigService, this.oidcSecurityService, googleConfig) + ); + } + + public addFacebook(clientID: string) { + const fbConfig: ExternalAuthConfig = { + client_id: clientID, + redirect_url: ExternalAuthRedirectUrl.Facebook + } as ExternalAuthConfig; + + this.providers.set( + ExternalAuthProvider.Facebook, + new FacebookProvider(fbConfig, this.router) + ); + } + + public addMicrosoft(clientID: string) { + const msConfig: ExternalAuthConfig = { + provider: ExternalAuthProvider.Microsoft, + stsServer: 'https://login.microsoftonline.com/consumers/v2.0/', + client_id: clientID, + scope: 'openid email profile', + redirect_url: this.getAbsoluteUrl(ExternalAuthRedirectUrl.Microsoft), + response_type: 'id_token token', + post_logout_redirect_uri: '/', + post_login_route: '', + auto_userinfo: false, + max_id_token_iat_offset_allowed_in_seconds: 1000 + }; + this.providers.set( + ExternalAuthProvider.Microsoft, + new MicrosoftProvider(this.oidcConfigService, this.oidcSecurityService, msConfig) + ); + } + + public login(provider: ExternalAuthProvider) { + const extProvider = this.providers.get(provider); + if (extProvider) { + this.activeProvider = provider; + extProvider.login(); + } + } + + /** TODO, use setActiveProvider only? */ + public async getUserInfo(provider: ExternalAuthProvider): Promise { + const extProvider = this.providers.get(provider); + if (extProvider) { + const userInfo = await extProvider.getUserInfo(); + userInfo.externalProvider = provider; + return userInfo; + } + return Promise.reject(null); // TODO ? + } + + /** + * logout + */ + public logout() { + if (this.activeProvider) { + this.providers.get(this.activeProvider)!.logout(); + } + } + + /** Returns an absolute URL like /path */ + protected getAbsoluteUrl(path: string) { + return window.location.origin + this.location.prepareExternalUrl(path); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/fake-backend.service.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/fake-backend.service.ts new file mode 100644 index 000000000..a1cea0f25 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/fake-backend.service.ts @@ -0,0 +1,154 @@ +import { + HttpEvent, + HttpHandler, + HttpInterceptor, + HttpRequest, + HttpResponse, + HTTP_INTERCEPTORS +} from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable, of, throwError } from 'rxjs'; +import { dematerialize, materialize, mergeMap } from 'rxjs/operators'; +import { ExternalLogin } from '../models/login'; +import { Register } from '../models/register'; +import { UserJWT } from '../models/user'; +import { encodeBase64Url } from './jwt-util'; +import { LocalStorageService } from './local-storage'; +import msKeys from './microsoft-keys'; + +@Injectable({ + providedIn: 'root' +}) +export class BackendInterceptor implements HttpInterceptor { + users: StorageUser[] = []; + + constructor(private localStorage: LocalStorageService) { } + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + const storedUsers = this.localStorage.getItem('users'); + this.users = storedUsers ? JSON.parse(storedUsers) : []; + return of(null).pipe(mergeMap(() => { + // login user + if (request.url.endsWith('/login') && request.method === 'POST') { + return this.loginHandle(request); + } + + // register user + if (request.url.endsWith('/register') && request.method === 'POST') { + const user = this.getStorageUser(request); + return this.registerHandle(user); + } + + // login user with external provider + if (request.url.endsWith('/extlogin') && request.method === 'POST') { + const user = this.getStorageExtUser(request); + return this.registerHandle(user, true); + } + + // Microsoft-specific OIDC discovery URI + if (request.url.endsWith('ms-discovery/keys') && request.method === 'GET') { + return of(new HttpResponse({ status: 200, body: msKeys })); + } + + return next.handle(request); + })) + .pipe(materialize()) + .pipe(dematerialize()); + } + + registerHandle(newUser: StorageUser, update = false) { + const duplicateUser = this.users.find(user => user.email === newUser.email); + if (duplicateUser && !update) { + return throwError({ error: { message: 'Account with email "' + newUser.email + '" already exists' } }); + } + if (update && duplicateUser) { + Object.assign(duplicateUser, newUser); + } else { + this.users.push(newUser); + } + this.localStorage.setItem('users', JSON.stringify(this.users)); + + const body = this.getUserJWT(newUser); + + return of(new HttpResponse({ status: 200, body: this.generateToken(body) })); + } + + loginHandle(request: HttpRequest) { + const foundUser = this.users.find(user => { + return user.email === request.body.email; + }); + // authenticate + if (foundUser) { + const body = this.getUserJWT(foundUser); + + return of(new HttpResponse({ status: 200, body: this.generateToken(body) })); + } else { + return throwError({ status: 401, error: { message: 'User does not exist!' } }); + } + } + + private getStorageUser(request: HttpRequest): StorageUser { + const user = request.body as Register; + let fullName = user.given_name; + fullName += user.family_name ? ` ${user.family_name}` : ''; + return { + id: String(this.users.length + 1), + name: fullName, + email: user.email, + given_name: user.given_name, + family_name: user.family_name, + picture: '' + }; + } + + private getStorageExtUser(request: HttpRequest): StorageUser { + const user = request.body as ExternalLogin; + return { + id: user.id, + name: user.name, + email: user.email, + given_name: user.given_name || user.name.split(' ').shift()!, + family_name: user.family_name || user.name.split(' ').pop()!, + picture: user.picture, + externalToken: user.externalToken, + externalProvider: user.externalProvider + }; + } + + private getUserJWT(user: StorageUser): UserJWT { + return { + exp: Math.floor(new Date().getTime() / 1000) + (7 * 24 * 60 * 60), + name: user.name, + given_name: user.given_name, + family_name: user.family_name, + email: user.email, + picture: user.picture + }; + } + + /** Note: This is used for example purposes only and does NOT generate a valid JWT w/ base64Url encoding */ + private generateToken(payload: any): string { + const header = { + alg: 'Mock', + typ: 'JWT' + }; + return encodeBase64Url(header) + '.' + encodeBase64Url(payload) + '.mockSignature'; + } +} + +interface StorageUser { + id: string; + name: string; + email: string; + given_name: string; + family_name: string; + picture?: string; + externalToken?: string; + externalProvider?: string; +} + +export const BackendProvider = { + provide: HTTP_INTERCEPTORS, + useClass: BackendInterceptor, + multi: true +}; diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt-util.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt-util.ts new file mode 100644 index 000000000..095432f46 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt-util.ts @@ -0,0 +1,56 @@ +import { User } from '../models/user'; + +export function parseUser(jwt: string): User { + const token = decodeJWT(jwt); + if (token === null) { + throw new Error(`The JWT token provided was not valid:\n${jwt}`); + } + const user = JSON.parse(token.payload) as User; + // store token: + user.token = jwt; + return user; +} + +export function decodeJWT(str: string) { + const parts = str.split('.'); + if (parts.length < 2) { + return null; + } + return { + header: decodeBase64Url(parts[0]), + payload: decodeBase64Url(parts[1]), + signature: parts[2] + }; +} + +export function decodeBase64Url(base64Url: string) { + // convert Base64Url to Base64: https://tools.ietf.org/html/rfc4648#section-5 + let output = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + const padding = (4 - output.length % 4) % 4; + if (padding === 3) { + throw Error('Invalid base64 input'); + } + output += new Array(1 + padding).join('='); + const decoded = atob(output); + try { + return decodeURIComponent(decoded.split('') + .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)) + .join('')); + } catch (er) { + return decoded; + } +} + +export function encodeBase64Url(input: {}) { + const encodedToURI: string = encodeURI(JSON.stringify(input)); + let result = ''; + for (let i = 0; i < encodedToURI.length; i++) { + const c = encodedToURI[i]; + if (c === '%') { + result += String.fromCharCode(parseInt((encodedToURI[++i] + encodedToURI[++i]), 16)); + } else { + result += c; + } + } + return btoa(result); +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.interceptor.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.interceptor.ts new file mode 100644 index 000000000..d1b8a064f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.interceptor.ts @@ -0,0 +1,23 @@ +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { UserService } from '../services/user.service'; + +@Injectable({ + providedIn: 'root' +}) +export class JwtInterceptor implements HttpInterceptor { + constructor(private userService: UserService) { } + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + const currentUser = this.userService.currentUser; + if (currentUser && currentUser.token) { + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${currentUser.token}` + } + }); + } + return next.handle(request); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.spec.ts new file mode 100644 index 000000000..9e807e2f7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/jwt.spec.ts @@ -0,0 +1,74 @@ +import { Observable } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { decodeBase64Url, decodeJWT, parseUser } from './jwt-util'; +import { JwtInterceptor } from './jwt.interceptor'; + +describe('JWT Tests', () => { + describe(`JWT Interceptor`, () => { + const mockService = {} as any; + const jwtInterceptor = new JwtInterceptor(mockService); + + it(`Should properly initialize`, () => { + expect(jwtInterceptor).toBeTruthy(); + }); + + it(`Should properly handle 'intercept'`, () => { + const mockRequest = { + clone: () => { } + } as any; + const mockNext = { + handle: () => new Observable() + } as any; + spyOn(mockNext, 'handle').and.callThrough(); + mockService.currentUser = false; + // call w/o current user + jwtInterceptor.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(mockNext.handle).toHaveBeenCalledTimes(1); + expect(mockNext.handle).toHaveBeenCalledWith(mockRequest); + mockService.currentUser = { + token: '' + }; + jwtInterceptor.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(mockNext.handle).toHaveBeenCalledTimes(2); + expect(mockNext.handle).toHaveBeenCalledWith(mockRequest); + mockService.currentUser = { + token: 'test_token' + }; + spyOn(mockRequest, 'clone').and.callThrough(); + jwtInterceptor.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(mockRequest.clone).toHaveBeenCalledWith({ + setHeaders: { + Authorization: `Bearer test_token` + } + }); + }); + }); + + describe(`JWT Util`, () => { + it(`Should properly handle 'decodeBase64Url'`, () => { + expect(() => { decodeBase64Url('1'); }).toThrowError('Invalid base64 input'); + expect(decodeBase64Url('')).toEqual(''); + expect(decodeBase64Url(`98-1o1-0+31_`)).toEqual(atob(`98+1o1+0+31/`)); + expect(decodeBase64Url(`/----___+-+-+_`)).toEqual(atob(`/++++///+++++/`)); + }); + + it(`Should properly handle 'decodeJWT'`, () => { + expect(decodeJWT('')).toBeNull(); + expect(decodeJWT('893sdh9a8df')).toBeNull(); + let result = decodeJWT('132.321'); + expect(result?.header).toEqual(decodeBase64Url('132')); + expect(result?.payload).toEqual(decodeBase64Url('321')); + expect(result?.signature).toBeUndefined(); + result = decodeJWT('aSD.d112.13213'); + expect(result?.header).toEqual(decodeBase64Url('aSD')); + expect(result?.payload).toEqual(decodeBase64Url('d112')); + expect(result?.signature).toEqual('13213'); + }); + + it(`Should properly handle 'parseUser'`, () => { + expect(() => parseUser('not valid user name')).toThrow(); + spyOn(JSON, 'parse').and.returnValue({ payload: 'Mock payload' }); + expect(parseUser('123.123')).toEqual({ payload: 'Mock payload', token: '123.123' } as any); + }); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/local-storage.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/local-storage.ts new file mode 100644 index 000000000..f9bae1273 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/local-storage.ts @@ -0,0 +1,53 @@ +import { isPlatformBrowser } from '@angular/common'; +import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; + +class LocalStorageFallback implements Storage { + [name: string]: any; + readonly length: number = 0; + clear(): void { } + getItem(key: string): string | null { return null; } + key(index: number): string | null { return null; } + removeItem(key: string): void { } + setItem(key: string, value: string): void { } +} + +@Injectable({ + providedIn: 'root' +}) +export class LocalStorageService implements Storage { + + private storage: Storage; + + [name: string]: any; + get length(): number { + return this.storage.length; + } + + constructor(@Inject(PLATFORM_ID) platformId: object) { + if (isPlatformBrowser(platformId)) { + this.storage = localStorage; + } else { + this.storage = new LocalStorageFallback(); + } + } + + clear(): void { + this.storage.clear(); + } + + getItem(key: string): string | null { + return this.storage.getItem(key); + } + + key(index: number): string | null { + return this.storage.key(index); + } + + removeItem(key: string): void { + return this.storage.removeItem(key); + } + + setItem(key: string, value: string): void { + return this.storage.setItem(key, value); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/microsoft-keys.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/microsoft-keys.ts new file mode 100644 index 000000000..848d5932f --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/microsoft-keys.ts @@ -0,0 +1,5 @@ +// tslint:disable + +// Replace with backend discovery from https://login.microsoftonline.com/consumers/discovery/v2.0/keys +// See https://blogs.msdn.microsoft.com/mihansen/2018/07/12/net-core-angular-app-with-openid-connection-implicit-flow-authentication-angular-auth-oidc-client/ +export default { "keys": [{ "kty": "RSA", "use": "sig", "kid": "1LTMzakihiRla_8z2BEJVXeWMqo", "x5t": "1LTMzakihiRla_8z2BEJVXeWMqo", "n": "3sKcJSD4cHwTY5jYm5lNEzqk3wON1CaARO5EoWIQt5u-X-ZnW61CiRZpWpfhKwRYU153td5R8p-AJDWT-NcEJ0MHU3KiuIEPmbgJpS7qkyURuHRucDM2lO4L4XfIlvizQrlyJnJcd09uLErZEO9PcvKiDHoois2B4fGj7CsAe5UZgExJvACDlsQSku2JUyDmZUZP2_u_gCuqNJM5o0hW7FKRI3MFoYCsqSEmHnnumuJ2jF0RHDRWQpodhlAR6uKLoiWHqHO3aG7scxYMj5cMzkpe1Kq_Dm5yyHkMCSJ_JaRhwymFfV_SWkqd3n-WVZT0ADLEq0RNi9tqZ43noUnO_w", "e": "AQAB", "x5c": ["MIIDYDCCAkigAwIBAgIJAIB4jVVJ3BeuMA0GCSqGSIb3DQEBCwUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNjA0MDUxNDQzMzVaFw0yMTA0MDQxNDQzMzVaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN7CnCUg+HB8E2OY2JuZTRM6pN8DjdQmgETuRKFiELebvl/mZ1utQokWaVqX4SsEWFNed7XeUfKfgCQ1k/jXBCdDB1NyoriBD5m4CaUu6pMlEbh0bnAzNpTuC+F3yJb4s0K5ciZyXHdPbixK2RDvT3Lyogx6KIrNgeHxo+wrAHuVGYBMSbwAg5bEEpLtiVMg5mVGT9v7v4ArqjSTOaNIVuxSkSNzBaGArKkhJh557pridoxdERw0VkKaHYZQEerii6Ilh6hzt2hu7HMWDI+XDM5KXtSqvw5ucsh5DAkifyWkYcMphX1f0lpKnd5/llWU9AAyxKtETYvbameN56FJzv8CAwEAAaOBijCBhzAdBgNVHQ4EFgQU9IdLLpbC2S8Wn1MCXsdtFac9SRYwWQYDVR0jBFIwUIAU9IdLLpbC2S8Wn1MCXsdtFac9SRahLaQrMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAIB4jVVJ3BeuMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQsFAAOCAQEAXk0sQAib0PGqvwELTlflQEKS++vqpWYPW/2gCVCn5shbyP1J7z1nT8kE/ZDVdl3LvGgTMfdDHaRF5ie5NjkTHmVOKbbHaWpTwUFbYAFBJGnx+s/9XSdmNmW9GlUjdpd6lCZxsI6888r0ptBgKINRRrkwMlq3jD1U0kv4JlsIhafUIOqGi4+hIDXBlY0F/HJPfUU75N885/r4CCxKhmfh3PBM35XOch/NGC67fLjqLN+TIWLoxnvil9m3jRjqOA9u50JUeDGZABIYIMcAdLpI2lcfru4wXcYXuQul22nAR7yOyGKNOKULoOTE4t4AeGRqCogXSxZgaTgKSBhvhE+MGg=="], "issuer": "https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0" }, { "kty": "RSA", "use": "sig", "kid": "xP_zn6I1YkXcUUmlBoPuXTGsaxk", "x5t": "xP_zn6I1YkXcUUmlBoPuXTGsaxk", "n": "2pWatafeb3mB0A73-Z-URwrubwDldWvivRu19GNC61MBOb3fZ4I4lyhUhNuS7aJRPJIFB6zl-HFx1nHpGg74BHe0z9skODHYZEACd2iKBIet55DdduIe1CXsZ9keyEmNaGv3XS4OW_7IDM0j5wR9OHugUifkH3PQIcFvTYanHmXojTmgjIOWoz7y0okpyN9-FbZRzdfx-ej-njaj5gR8r69muwO5wlTbIG20V40R6zYh-QODMUpayy7jDGFGw5vjFH9Ca0tLZcNQq__JKE_mp-0fODOAQobOrBUoASFkyCd95BVW7KJrndvW7ofRWaCTuZZOy5SnU4asbjMrgxFZFw", "e": "AQAB", "x5c": ["MIIDYDCCAkigAwIBAgIJAJzCyTLC+DjJMA0GCSqGSIb3DQEBCwUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0xNjA3MTMyMDMyMTFaFw0yMTA3MTIyMDMyMTFaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANqVmrWn3m95gdAO9/mflEcK7m8A5XVr4r0btfRjQutTATm932eCOJcoVITbku2iUTySBQes5fhxcdZx6RoO+AR3tM/bJDgx2GRAAndoigSHreeQ3XbiHtQl7GfZHshJjWhr910uDlv+yAzNI+cEfTh7oFIn5B9z0CHBb02Gpx5l6I05oIyDlqM+8tKJKcjffhW2Uc3X8fno/p42o+YEfK+vZrsDucJU2yBttFeNEes2IfkDgzFKWssu4wxhRsOb4xR/QmtLS2XDUKv/yShP5qftHzgzgEKGzqwVKAEhZMgnfeQVVuyia53b1u6H0Vmgk7mWTsuUp1OGrG4zK4MRWRcCAwEAAaOBijCBhzAdBgNVHQ4EFgQU11z579/IePwuc4WBdN4L0ljG4CUwWQYDVR0jBFIwUIAU11z579/IePwuc4WBdN4L0ljG4CWhLaQrMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleYIJAJzCyTLC+DjJMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQsFAAOCAQEAiASLEpQseGNahE+9f9PQgmX3VgjJerNjXr1zXWXDJfFE31DxgsxddjcIgoBL9lwegOHHvwpzK1ecgH45xcJ0Z/40OgY8NITqXbQRfdgLrEGJCoyOQEbjb5PW5k2aOdn7LBxvDsH6Y8ax26v+EFMPh3G+xheh6bfoIRSK1b+44PfoDZoJ9NfJibOZ4Cq+wt/yOvpMYQDB/9CNo18wmA3RCLYjf2nAc7RO0PDYHSIq5QDWV+1awmXDKgIdRpYPpRtn9KFXQkpCeEc/lDTG+o6n7nC40wyjioyR6QmHGvNkMR4VfSoTKCTnFATyDpI1bqU2K7KNjUEsCYfwybFB8d6mjQ=="], "issuer": "https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0" }] }; diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/services.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/services.spec.ts new file mode 100644 index 000000000..286551e93 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/services.spec.ts @@ -0,0 +1,548 @@ +import { HttpHandler, HttpResponse } from '@angular/common/http'; +import { PLATFORM_ID } from '@angular/core'; +import { Observable } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { FacebookProvider } from '../providers/facebook-provider'; +import { GoogleProvider } from '../providers/google-provider'; +import { MicrosoftProvider } from '../providers/microsoft-provider'; +import { AuthenticationService } from './authentication.service'; +import { ExternalAuthProvider } from './external-auth-configs'; +import { ExternalAuthRedirectUrl, ExternalAuthService } from './external-auth.service'; +import { BackendInterceptor } from './fake-backend.service'; +import * as JWTUtil from './jwt-util'; +import { LocalStorageService } from './local-storage'; +import msKeys from './microsoft-keys'; +import { UserService } from './user.service'; + +describe('Services', () => { + + describe('Authentication Service', () => { + const MOCK_HTTP_CLIENT = { + post: () => { } + } as any; + + const authServ = new AuthenticationService(MOCK_HTTP_CLIENT); + it('Should properly initialize', async () => { + expect(authServ).toBeDefined(); + }); + it(`Should properly call 'login'`, async () => { + const loginPostSpy = spyOn(authServ, 'loginPost').and.returnValue(Promise.resolve()); + const dummyData = { email: 'Dummy', password: 'Data' }; + await authServ.login(dummyData); + expect(loginPostSpy).toHaveBeenCalled(); + expect(loginPostSpy).toHaveBeenCalledWith('/login', dummyData); + }); + it(`Should properly call 'register'`, async () => { + const loginPostSpy = spyOn(authServ, 'loginPost').and.returnValue(Promise.resolve()); + const dummyData = { given_name: 'Testy', family_name: 'Testington', email: 'Dummy', password: 'Data' }; + await authServ.register(dummyData); + expect(loginPostSpy).toHaveBeenCalled(); + expect(loginPostSpy).toHaveBeenCalledWith('/register', dummyData); + }); + it(`Should properly call 'loginWith'`, async () => { + const loginPostSpy = spyOn(authServ, 'loginPost').and.returnValue(Promise.resolve()); + const dummyData = { id: 'Test', name: 'Testy', email: 'Dummy', externalToken: 'Data' }; + await authServ.loginWith(dummyData); + expect(loginPostSpy).toHaveBeenCalled(); + expect(loginPostSpy).toHaveBeenCalledWith('/extlogin', dummyData); + }); + it(`Should properly call 'loginPost'`, async () => { + const loginPostSpy = spyOn(authServ, 'loginPost').and.callThrough(); + const dummyData = { email: 'Dummy', password: 'Data' }; + const mockObs = { toPromise: () => { } }; + spyOn(mockObs, 'toPromise').and.returnValue('TEST DATA' as any); + spyOn(MOCK_HTTP_CLIENT, 'post').and.returnValue(mockObs); + const parseSpy = spyOn(JWTUtil, 'parseUser').and.returnValue({ user: 'Test' } as any); + await authServ.login(dummyData); + expect(loginPostSpy).toHaveBeenCalledWith('/login', dummyData); + expect(MOCK_HTTP_CLIENT.post).toHaveBeenCalledWith('/login', dummyData); + expect(parseSpy).toHaveBeenCalledWith('TEST DATA'); + }); + it(`Should properly call 'loginPost' and throw error`, async () => { + const dummyData = { email: 'Dummy', password: 'Data' }; + const mockObs = { toPromise: () => { } }; + spyOn(mockObs, 'toPromise').and.callFake(() => { + throw new Error('Test Error'); + }); + spyOn(MOCK_HTTP_CLIENT, 'post').and.returnValue(mockObs); + expect(await (authServ as any).loginPost(dummyData)).toEqual({ error: 'Test Error' }); + expect(MOCK_HTTP_CLIENT.post).toHaveBeenCalled(); + }); + }); + + describe('External Authentication Service', () => { + const MOCK_OIDC_SECURITY = {} as any; + const MOCK_OIDC_CONFIG = {} as any; + const MOCK_ROUTER = {} as any; + const MOCK_LOCATION = { + prepareExternalUrl: () => { } + } as any; + + const localStorage = new LocalStorageService(PLATFORM_ID); + const extAuthServ = new ExternalAuthService(MOCK_ROUTER, MOCK_OIDC_SECURITY, MOCK_OIDC_CONFIG, MOCK_LOCATION, localStorage); + it(`Should properly initialize`, () => { + expect(extAuthServ).toBeDefined(); + }); + it(`Should properly get/set 'activeProvider'`, () => { + spyOn(localStorage, 'getItem').and.returnValue('test'); + const testProvider = extAuthServ.activeProvider; + expect(localStorage.getItem).toHaveBeenCalled(); + expect(localStorage.getItem).toHaveBeenCalledWith('extActiveProvider'); + expect(testProvider).toEqual('test'); + spyOn(localStorage, 'setItem'); + extAuthServ.activeProvider = 'ccc' as any; + expect(localStorage.setItem).toHaveBeenCalled(); + expect(localStorage.setItem).toHaveBeenCalledWith('extActiveProvider', 'ccc'); + }); + + it(`Should properly call 'hasProvider'`, () => { + const providersMap = new Map(); + (extAuthServ as any).providers = providersMap; + expect(extAuthServ.hasProvider()).toEqual(false); + providersMap.set('0', '0'); + expect(extAuthServ.hasProvider()).toEqual(true); + expect(extAuthServ.hasProvider('0' as any)).toEqual(true); + expect(extAuthServ.hasProvider('1' as any)).toEqual(false); + }); + + it(`Should properly call 'addGoogle'`, () => { + const providersSpy = spyOn((extAuthServ as any).providers, 'set'); + spyOn(extAuthServ, 'getAbsoluteUrl').and.returnValue('testUrl'); + const configParams = { + provider: ExternalAuthProvider.Google, + stsServer: 'https://accounts.google.com', + client_id: 'test', + scope: 'openid email profile', + redirect_url: 'testUrl', + response_type: 'id_token token', + post_logout_redirect_uri: '/', + post_login_route: 'redirect', + auto_userinfo: false, + max_id_token_iat_offset_allowed_in_seconds: 30 + }; + extAuthServ.addGoogle('test'); + expect(providersSpy).toHaveBeenCalled(); + expect(providersSpy).toHaveBeenCalledWith('Google', + new GoogleProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, configParams)); + }); + + it(`Should properly call 'addFacebook'`, () => { + const providersSpy = spyOn((extAuthServ as any).providers, 'set'); + const configParams = { + client_id: 'test', + redirect_url: ExternalAuthRedirectUrl.Facebook + } as any; + extAuthServ.addFacebook('test'); + expect(providersSpy).toHaveBeenCalled(); + expect(providersSpy).toHaveBeenCalledWith('Facebook', + new FacebookProvider(configParams, MOCK_ROUTER)); + }); + + it(`Should properly call 'addMicrosoft'`, () => { + const providersSpy = spyOn((extAuthServ as any).providers, 'set'); + spyOn(extAuthServ, 'getAbsoluteUrl').and.returnValue('testUrl'); + const configParams = { + provider: ExternalAuthProvider.Microsoft, + stsServer: 'https://login.microsoftonline.com/consumers/v2.0/', + client_id: 'test', + scope: 'openid email profile', + redirect_url: 'testUrl', + response_type: 'id_token token', + post_logout_redirect_uri: '/', + post_login_route: '', + auto_userinfo: false, + max_id_token_iat_offset_allowed_in_seconds: 1000 + } as any; + extAuthServ.addMicrosoft('test'); + expect(providersSpy).toHaveBeenCalled(); + expect(providersSpy).toHaveBeenCalledWith('Microsoft', + new MicrosoftProvider(MOCK_OIDC_CONFIG, MOCK_OIDC_SECURITY, configParams)); + }); + + it(`Should properly call 'getUserInfo'`, async () => { + const providersMap = new Map(); + const mockObj = { + getUserInfo: () => { + return { name: 'test' }; + } + }; + spyOn(mockObj, 'getUserInfo').and.callThrough(); + const providersGetSpy = spyOn(providersMap, 'get').and.returnValue(false); + providersMap.set(ExternalAuthProvider.Facebook, mockObj); + (extAuthServ as any).providers = providersMap; + spyOn(Promise, 'reject').and.returnValue(Promise.resolve(null)); + expect(await extAuthServ.getUserInfo(ExternalAuthProvider.Facebook)).toBeNull(); + expect(providersGetSpy).toHaveBeenCalledTimes(1); + providersGetSpy.and.returnValue(mockObj); + expect(await extAuthServ.getUserInfo(ExternalAuthProvider.Facebook)).toEqual({ + name: 'test', + externalProvider: ExternalAuthProvider.Facebook + } as any); + expect(providersGetSpy).toHaveBeenCalledTimes(2); + }); + + it(`Should properly call 'login'`, () => { + const providersMap = new Map(); + const mockObj = { + login: () => { } + } as any; + spyOn(mockObj, 'login'); + const providersGetSpy = spyOn(providersMap, 'get').and.returnValue(false); + providersMap.set(ExternalAuthProvider.Facebook, mockObj); + (extAuthServ as any).providers = providersMap; + const setActiveProvider = spyOnProperty(extAuthServ, 'activeProvider', 'set'); + extAuthServ.login(ExternalAuthProvider.Facebook); + expect(mockObj.login).not.toHaveBeenCalled(); + expect(setActiveProvider).not.toHaveBeenCalled(); + providersGetSpy.and.returnValue(mockObj); + extAuthServ.login(ExternalAuthProvider.Facebook); + expect(mockObj.login).toHaveBeenCalled(); + expect(setActiveProvider).toHaveBeenCalledWith(ExternalAuthProvider.Facebook); + }); + + it(`Should properly call 'logout'`, () => { + const providersMap = new Map(); + const mockObj = { + logout: () => { } + } as any; + spyOn(mockObj, 'logout'); + providersMap.set(ExternalAuthProvider.Facebook, mockObj); + spyOn(providersMap, 'get').and.returnValue(mockObj); + (extAuthServ as any).providers = providersMap; + const setActiveProviderSpy = spyOnProperty(extAuthServ, 'activeProvider', 'get').and.returnValue(false); + extAuthServ.logout(); + expect(mockObj.logout).not.toHaveBeenCalled(); + expect(providersMap.get).not.toHaveBeenCalled(); + expect(setActiveProviderSpy).toHaveBeenCalledTimes(1); + setActiveProviderSpy.and.returnValue('MOCK TOKEN'); + extAuthServ.logout(); + expect(mockObj.logout).toHaveBeenCalled(); + expect(providersMap.get).toHaveBeenCalled(); + expect(providersMap.get).toHaveBeenCalledWith('MOCK TOKEN'); + expect(setActiveProviderSpy).toHaveBeenCalledTimes(3); + }); + + it(`Should properly call 'getAbsoluteUrl'`, () => { + const currentOrigin = window.location.origin; + spyOn(MOCK_LOCATION, 'prepareExternalUrl').and.returnValue('test_href_2'); + expect((extAuthServ as any).getAbsoluteUrl('mock_path')).toEqual(`${currentOrigin}test_href_2`); + expect(MOCK_LOCATION.prepareExternalUrl).toHaveBeenCalledWith('mock_path'); + }); + }); + + describe(`MOCK Backend Service`, () => { + describe(`public`, () => { + it(`Should properly call 'intercept'`, () => { + const mockLocalStorage: LocalStorageService = new LocalStorageService({}); + const provider = new BackendInterceptor(mockLocalStorage); + const mockRequest = { + method: 'POST', + url: '/login', + version: 'test' + } as any; + const mockUsers: any[] = []; + const mockNext = { + handle: () => new Observable() + } as HttpHandler; + // endpoint /login + + // mocked method in intercept still need to return observable, otherwise rxjs pipe throws + spyOn(provider, 'loginHandle').and.returnValue(new Observable()); + spyOn(JSON, 'parse').and.returnValue(mockUsers); + spyOn(mockLocalStorage, 'getItem').and.returnValue('[]'); + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(JSON.parse).toHaveBeenCalledWith('[]'); + expect(JSON.parse).toHaveBeenCalledTimes(1); + expect(provider.loginHandle).toHaveBeenCalledWith(mockRequest); + expect(provider.loginHandle).toHaveBeenCalledTimes(1); + // endpoint /register + mockRequest.url = '/register'; + const getStorageUserSpy = spyOn(provider, 'getStorageUser').and.returnValue({ name: 'Mock user' }); + spyOn(provider, 'registerHandle').and.returnValue(new Observable()); + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(JSON.parse).toHaveBeenCalledTimes(2); + expect(getStorageUserSpy).toHaveBeenCalledWith(mockRequest); + expect(getStorageUserSpy).toHaveBeenCalledTimes(1); + expect(provider.registerHandle).toHaveBeenCalledWith({ name: 'Mock user' } as any); + expect(provider.registerHandle).toHaveBeenCalledTimes(1); + // endpoint /register + mockRequest.url = '/extlogin'; + const getStorageExtUserSpy = spyOn(provider, 'getStorageExtUser').and.returnValue({ name: 'Mock user' }); + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(JSON.parse).toHaveBeenCalledTimes(3); + expect(getStorageExtUserSpy).toHaveBeenCalledWith(mockRequest); + expect(getStorageExtUserSpy).toHaveBeenCalledTimes(1); + expect(provider.registerHandle).toHaveBeenCalledWith({ name: 'Mock user' } as any, true); + expect(provider.registerHandle).toHaveBeenCalledTimes(2); + // microsoft keys + mockRequest.method = 'GET'; + mockRequest.url = '/ms-discovery/keys'; + const expectedOutput = new HttpResponse({ status: 200, body: msKeys }); + let output: any; + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe((e) => { output = e; }); + expect(output).toEqual(expectedOutput); + expect(JSON.parse).toHaveBeenCalledTimes(4); + // no change in number of calls + expect(getStorageUserSpy).toHaveBeenCalledTimes(1); + expect(getStorageExtUserSpy).toHaveBeenCalledTimes(1); + expect(provider.registerHandle).toHaveBeenCalledTimes(2); + // no intercept scenario + mockRequest.method = 'POST'; + mockRequest.url = '/test'; + spyOn(mockNext, 'handle').and.callThrough(); + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(mockNext.handle).toHaveBeenCalledWith(mockRequest); + expect(mockNext.handle).toHaveBeenCalledTimes(1); + // test invalid case combiantions + mockRequest.method = 'GET'; + mockRequest.url = '/register'; + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + mockRequest.url = '/login'; + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + mockRequest.url = '/extlogin'; + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + mockRequest.method = 'POST'; + mockRequest.url = '/ms-discovery/keys'; + provider.intercept(mockRequest, mockNext).pipe(take(1)).subscribe(() => { }); + expect(mockNext.handle).toHaveBeenCalledTimes(5); + // no change in number of calls + expect(getStorageUserSpy).toHaveBeenCalledTimes(1); + expect(getStorageExtUserSpy).toHaveBeenCalledTimes(1); + expect(provider.registerHandle).toHaveBeenCalledTimes(2); + }); + + it(`Should properly call 'registerHandle'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const localStorage = (provider as any).localStorage; + const mockUser = { + email: 'test_user' + } as any; + provider.users = [mockUser]; + let output; + let expectedOutput = { error: { message: 'Account with email "test_user" already exists' } } as any; + provider.registerHandle(mockUser, false).pipe(take(1)).subscribe(() => { }, (e) => { output = e; }); + expect(output).toEqual(expectedOutput); + + spyOn(localStorage, 'setItem'); + spyOn(JSON, 'stringify').and.returnValue('MOCK OBJ'); + const generateBodySpy = spyOn(provider, 'getUserJWT').and.returnValue('MOCK BODY'); + const tokenSpy = spyOn(provider, 'generateToken').and.returnValue('MOCK TOKEN'); + expectedOutput = new HttpResponse({ status: 200, body: 'MOCK TOKEN' }); + provider.registerHandle({ email: 'test_user', customProp: 'very_custom ' } as any, true) + .pipe(take(1)).subscribe((e) => { output = e; }); + expect(output).toEqual(expectedOutput); + expect(generateBodySpy).toHaveBeenCalledWith(mockUser); + expect(generateBodySpy).toHaveBeenCalledTimes(1); + expect(tokenSpy).toHaveBeenCalledWith('MOCK BODY'); + expect(tokenSpy).toHaveBeenCalledTimes(1); + expect(localStorage.setItem).toHaveBeenCalledTimes(1); + expect(localStorage.setItem).toHaveBeenCalledWith('users', 'MOCK OBJ'); + expect(JSON.stringify).toHaveBeenCalledTimes(1); + expect(JSON.stringify).toHaveBeenCalledWith([{ email: 'test_user', customProp: 'very_custom ' }]); + expect(provider.users).toEqual([{ email: 'test_user', customProp: 'very_custom ' }] as any); + + output = ''; + provider.registerHandle({ email: 'new_user', customProp: 'test' } as any) + .pipe(take(1)).subscribe((e) => { output = e; }); + expect(output).toEqual(expectedOutput); + expect(generateBodySpy).toHaveBeenCalledWith({ email: 'new_user', customProp: 'test' }); + expect(generateBodySpy).toHaveBeenCalledTimes(2); + expect(tokenSpy).toHaveBeenCalledWith('MOCK BODY'); + expect(tokenSpy).toHaveBeenCalledTimes(2); + expect(localStorage.setItem).toHaveBeenCalledTimes(2); + expect(localStorage.setItem).toHaveBeenCalledWith('users', 'MOCK OBJ'); + expect(JSON.stringify).toHaveBeenCalledTimes(2); + expect(JSON.stringify) + .toHaveBeenCalledWith([{ email: 'test_user', customProp: 'very_custom ' }, { email: 'new_user', customProp: 'test' }]); + expect(provider.users) + .toEqual([{ email: 'test_user', customProp: 'very_custom ' }, { email: 'new_user', customProp: 'test' }] as any); + }); + + it(`Should properly call 'loginHandle'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const mockUser = { + email: 'test_email' + } as any; + provider.users = [mockUser]; + const mockRequest = { + body: { + email: 'test_email' + } + } as any; + spyOn(Array.prototype, 'find').and.callThrough(); + const jwtSpy = spyOn(provider, 'getUserJWT').and.returnValue('MOCK BODY'); + const tokenSpy = spyOn(provider, 'generateToken').and.returnValue('MOCK TOKEN'); + const expectedOutput = new HttpResponse({ status: 200, body: 'MOCK TOKEN' }); + provider.loginHandle(mockRequest).pipe(take(1)).subscribe((e) => { + expect(e).toEqual(expectedOutput); + }); + expect(jwtSpy).toHaveBeenCalledWith(mockUser); + expect(tokenSpy).toHaveBeenCalledWith('MOCK BODY'); + + const expectedError = { status: 401, error: { message: 'User does not exist!' } }; + (provider.loginHandle({ body: { email: 'missing user' } } as any) as any).pipe(take(1)) + .subscribe(() => { }, (e: any) => { + expect(e).toEqual(expectedError); + }, () => { }); + }); + }); + + describe(`private`, () => { + it(`Should properly call 'getStorageUser'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const mockInput = { + body: { + name: 'test_name', + email: 'test_email', + given_name: 'test_giver_name', + family_name: 'test_family_name', + } + }; + provider.users = []; + expect((provider as any).getStorageUser(mockInput)).toEqual({ + id: `1`, + name: mockInput.body.given_name + ' ' + mockInput.body.family_name, + email: mockInput.body.email, + given_name: mockInput.body.given_name, + family_name: mockInput.body.family_name, + picture: '', + }); + }); + + it(`Should properly call 'getStorageExtUser'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const mockInput = { + body: { + id: 'test_id', + name: 'test_name', + email: 'test_email', + given_name: 'test_giver_name', + family_name: 'test_family_name', + picture: 'test_picture', + externalToken: 'test_externalToken', + externalProvider: 'test_externalProvider' + } + }; + expect((provider as any).getStorageExtUser(mockInput)).toEqual({ + id: mockInput.body.id, + name: mockInput.body.name, + email: mockInput.body.email, + given_name: mockInput.body.given_name, + family_name: mockInput.body.family_name, + picture: mockInput.body.picture, + externalToken: mockInput.body.externalToken, + externalProvider: mockInput.body.externalProvider + }); + }); + + it(`Should properly call 'getUserJWT'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const mockInput = { + name: 'test_name', + given_name: 'test_given_name', + family_name: 'test_family_name', + email: 'test_email', + picture: 'test_picture' + }; + spyOn(Math, 'floor').and.returnValue(1000); + spyOn(Date.prototype, 'getTime').and.returnValue(1000); + const expectedExp = 1000 + (7 * 24 * 60 * 60); + expect((provider as any).getUserJWT(mockInput)).toEqual({ + exp: expectedExp, + name: mockInput.name, + given_name: mockInput.given_name, + family_name: mockInput.family_name, + email: mockInput.email, + picture: mockInput.picture + }); + expect(Date.prototype.getTime).toHaveBeenCalled(); + expect(Math.floor).toHaveBeenCalledWith(1); + }); + + it(`Should properly call 'generateToken'`, () => { + const provider = new BackendInterceptor(new LocalStorageService({})); + const inputString = 'testString1'; + const expectedOutput = 'g.g.mockSignature'; + spyOn(JWTUtil, 'encodeBase64Url').and.returnValue('g'); + expect((provider as any).generateToken(inputString)).toEqual(expectedOutput); + }); + }); + }); + + describe(`User Service`, () => { + const mockUser = { + exp: 111, + name: 'Testy Testington', + given_name: 'Testy', + family_name: 'Testington', + email: 't-testing@test.test', + picture: `testy-boy.png`, + token: `mock token`, + externalToken: `mock token` + }; + const localStorage = new LocalStorageService(PLATFORM_ID); + + beforeEach(() => { + spyOn(JSON, 'parse').and.returnValue(mockUser); + spyOn(localStorage, 'getItem').and.returnValue('MOCK JSON'); + }); + + it(`Should properly initialize`, () => { + const userServ = new UserService(localStorage); + expect(userServ).toBeDefined(); + expect(localStorage.getItem).toHaveBeenCalledWith('currentUser'); + expect(JSON.parse).toHaveBeenCalledWith('MOCK JSON'); + // get current user + expect(userServ.currentUser).toEqual(mockUser); + }); + + it(`Should properly get 'initials'`, () => { + const userServ = new UserService(localStorage); + const currentUserSpy = spyOnProperty(userServ, 'currentUser', 'get').and.returnValue(null); + expect(userServ.initials).toEqual(null); + currentUserSpy.and.returnValue({ given_name: '' }); + expect(userServ.initials).toEqual(''); + currentUserSpy.and.returnValue({ given_name: '', family_name: '' }); + expect(userServ.initials).toEqual(''); + currentUserSpy.and.returnValue({ given_name: '', family_name: 'g' }); + expect(userServ.initials).toEqual('g'); + currentUserSpy.and.returnValue({ given_name: 'h3ll0' }); + expect(userServ.initials).toEqual('h'); + currentUserSpy.and.returnValue({ given_name: 'h3ll0', family_name: 'g' }); + expect(userServ.initials).toEqual('hg'); + currentUserSpy.and.returnValue({ given_name: 'h3ll0', family_name: '' }); + expect(userServ.initials).toEqual('h'); + }); + + it(`Should properly 'setCurrentUser'`, () => { + const userServ = new UserService(localStorage); + const mockUser2 = { + exp: 111, + name: 'Qually T', + given_name: 'Qually', + family_name: 'Testington', + email: 'q-t@test.test', + picture: `qt-pie.png`, + token: `mock token`, + externalToken: `mock token 2` + }; + spyOn(JSON, 'stringify').and.returnValue('MOCK STRING'); + spyOn(localStorage, 'setItem'); + userServ.setCurrentUser(mockUser2); + expect(userServ.currentUser).toEqual(mockUser2); + expect(JSON.stringify).toHaveBeenCalledWith(mockUser2); + expect(localStorage.setItem).toHaveBeenCalledWith('currentUser', 'MOCK STRING'); + userServ.setCurrentUser(mockUser); + expect(userServ.currentUser).toEqual(mockUser); + }); + + it(`Should properly call 'clearCurrentUser'`, () => { + const userServ = new UserService(localStorage); + spyOn(localStorage, 'removeItem'); + expect(userServ.currentUser).toBeTruthy(); + userServ.clearCurrentUser(); + expect(localStorage.removeItem).toHaveBeenCalledWith('currentUser'); + expect(userServ.currentUser).toEqual(null); + }); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/user.service.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/user.service.ts new file mode 100644 index 000000000..25daa591d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/app/authentication/services/user.service.ts @@ -0,0 +1,54 @@ +import { Injectable, isDevMode } from '@angular/core'; +import { User } from '../models/user'; +import { LocalStorageService } from './local-storage'; + +const USER_TOKEN = 'currentUser'; + +/** + * Service used to store and provide the current logged in user in the app. + * + * **NOTE**: Keep in mind using local storage can be susceptible to XSS attacks. + * Consider not storing the User o the client storage if the app requirements allow, + * adding a fingerprint to the JWT claims that is sent with a secure cookie, + * or other security measures. + */ +@Injectable({ + providedIn: 'root' +}) +export class UserService { + // tslint:disable-next-line:variable-name + private _currentUser: User | null; + /** Current logged in user, if any */ + public get currentUser() { return this._currentUser; } + + /** Initials of the current user, if any */ + public get initials(): string | null { + if (!this.currentUser) { + return null; + } + let initials = this.currentUser.given_name.substr(0, 1); + if (this.currentUser.family_name) { + initials += this.currentUser.family_name.substr(0, 1); + } + return initials; + } + + constructor(private localStorage: LocalStorageService) { + const storedUser = this.localStorage.getItem(USER_TOKEN); + this._currentUser = storedUser ? JSON.parse(storedUser) : null; + } + + /** Save new login as current user */ + public setCurrentUser(user: User) { + if (isDevMode()) { + this.localStorage.setItem(USER_TOKEN, JSON.stringify(user)); + } + this._currentUser = user; + } + + /** Clear current user */ + public clearCurrentUser() { + this._currentUser = null; + this.localStorage.removeItem(USER_TOKEN); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/index.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/index.html new file mode 100644 index 000000000..db41bee76 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/src/index.html @@ -0,0 +1,22 @@ + + + + + + Ignite UI for Angular + + + + + + + + + + + + + + + + diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.app.json b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.app.json new file mode 100644 index 000000000..d64c58cf6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.app.json @@ -0,0 +1,21 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": [ + "es2019", + "dom" + ], + "outDir": "./out-tsc/app", + "types": [ + "facebook-js-sdk" + ] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.spec.json b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.spec.json new file mode 100644 index 000000000..b058083bc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/files/tsconfig.spec.json @@ -0,0 +1,21 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node", + "facebook-js-sdk" + ], + "module": "commonjs" + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/index.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/index.ts new file mode 100644 index 000000000..eb9fe1135 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav-auth/index.ts @@ -0,0 +1,18 @@ +import { ProjectTemplate } from "@igniteui/cli-core"; +import * as path from "path"; +import { SideNavProject } from "../side-nav"; + +export class AuthSideProject extends SideNavProject implements ProjectTemplate { + public id: string = "side-nav-auth"; + public name = "Side navigation + login"; + public description = "Side navigation extended with user authentication module"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + + public get templatePaths() { + return [...super.templatePaths, path.join(__dirname, "files")]; + } +} +export default new AuthSideProject(); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.html b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.html new file mode 100644 index 000000000..ec9cf68c1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.html @@ -0,0 +1,14 @@ +
+ + + Views + {{route.name}} + + +
+ +
+ +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.scss b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.scss new file mode 100644 index 000000000..6f341092a --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.scss @@ -0,0 +1,30 @@ +.outer-wrapper { + height: 100%; +} + +.content { + width: 100%; + display: flex; + flex-flow: row nowrap; + justify-content: center; + align-items: stretch; + overflow: auto; + + > *:not(router-outlet) { + padding: 0 24px; + } + + p { + margin: 15px; + } +} + +@media only screen and (max-width: 1024px) { + .content { + justify-content: flex-start; + + > *:not(router-outlet) { + padding: 0 15px; + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.spec.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.spec.ts new file mode 100644 index 000000000..a4255fa22 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.spec.ts @@ -0,0 +1,25 @@ +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { IgxLayoutModule, IgxNavbarModule, IgxNavigationDrawerModule, IgxRippleModule } from 'igniteui-angular'; +import { AppComponent } from './app.component'; +describe('AppComponent', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + IgxLayoutModule, + IgxNavbarModule, + IgxNavigationDrawerModule, + IgxRippleModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + it('should create the app', waitForAsync(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + })); +}); diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.ts new file mode 100644 index 000000000..e3410fca9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { NavigationStart, Router } from '@angular/router'; +import { IgxNavigationDrawerComponent } from 'igniteui-angular'; +import { filter } from 'rxjs/operators'; +import { routes } from './app-routing.module'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class AppComponent implements OnInit { + public topNavLinks: { + path: string, + name: string + }[] = []; + + @ViewChild(IgxNavigationDrawerComponent, { static: true }) + public navdrawer!: IgxNavigationDrawerComponent; + + constructor(private router: Router) { + for (const route of routes) { + if (route.path && route.data && route.path.indexOf('*') === -1) { + this.topNavLinks.push({ + name: route.data.text, + path: '/' + route.path + }); + } + } + } + + public ngOnInit(): void { + this.router.events.pipe( + filter((x): x is NavigationStart => x instanceof NavigationStart) + ) + .subscribe((event: NavigationStart) => { + if (event.url !== '/' && !this.navdrawer.pin) { + // Close drawer when selecting a view on mobile (unpinned) + this.navdrawer.close(); + } + }); + } +} diff --git a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.module.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.module.ts similarity index 100% rename from packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.module.ts rename to packages/igx-templates/igx-ts-legacy/projects/side-nav/files/src/app/app.module.ts diff --git a/packages/igx-templates/igx-ts-legacy/projects/side-nav/index.ts b/packages/igx-templates/igx-ts-legacy/projects/side-nav/index.ts new file mode 100644 index 000000000..ab2f2177c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/projects/side-nav/index.ts @@ -0,0 +1,19 @@ +import { ProjectTemplate } from "@igniteui/cli-core"; +import * as path from "path"; +import { BaseWithHomeProject } from "../_base_with_home"; + +export class SideNavProject extends BaseWithHomeProject implements ProjectTemplate { + public id: string = "side-nav"; + public name = "Default side navigation"; + public description = "Project structure with side navigation drawer"; + public dependencies: string[] = []; + public framework: string = "angular"; + public projectType: string = "igx-ts"; + public hasExtraConfiguration: boolean = false; + + public get templatePaths() { + return [...super.templatePaths, path.join(__dirname, "files")]; + } +} + +export default new SideNavProject(); diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..6a5861029 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,65 @@ +
+

You can read more about configuring the radial gauge component in the + + official documentation page + . +

+
+
+ + + + +
+ +
+ + + +
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..9de4fb2fd --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,26 @@ +.sample-container { + display: flex; + flex-direction: column; +} + +.buttons-container { + display: flex; + margin-bottom: 5px; +} + +.sample-button { + margin: 3px; + flex-grow: 1; + height: 30px; + font: 12px Titillium Web, sans-serif; + min-width: 5.5rem; + height: 2.25rem; + font-size: 0.875rem; + font-weight: 600; + line-height: 1; + text-align: center; + border: none; + border-radius: 2px; + text-transform: uppercase; + cursor: pointer; +} diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..294d1f62e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,29 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxRadialGaugeModule } from 'igniteui-angular-gauges'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxRadialGaugeModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + // disable animation + component.radialGauge.transitionDuration = 0; + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..ea4ca4e06 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,289 @@ +import { AfterViewInit, Component, ViewChild, ViewEncapsulation } from '@angular/core'; +// radial gauge imports +import { SweepDirection } from 'igniteui-angular-core'; +import { + IgxRadialGaugeComponent, + IgxRadialGaugeRangeComponent, + RadialGaugeBackingShape, + RadialGaugeNeedleShape, + RadialGaugePivotShape, + RadialGaugeScaleOversweepShape +} from 'igniteui-angular-gauges'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component implements AfterViewInit { + + public needleShape = RadialGaugeNeedleShape; + public pivotShape = RadialGaugePivotShape; + + @ViewChild('radialGauge', { static: true }) + public radialGauge!: IgxRadialGaugeComponent; + + public ngAfterViewInit(): void { + + // enabling animation duration (in milliseconds) + this.radialGauge.transitionDuration = 500; + this.AnimateToGauge3(); + } + + public AnimateToGauge4(): void { + + this.radialGauge.height = '330px'; + this.radialGauge.width = '100%'; + this.radialGauge.minimumValue = 0; + this.radialGauge.maximumValue = 80; + this.radialGauge.value = 10; + this.radialGauge.interval = 10; + + // Label Settings + this.radialGauge.labelExtent = 0.6; + this.radialGauge.labelInterval = 10; + this.radialGauge.font = '10px Verdana,Arial'; + + // Scale Settings + this.radialGauge.scaleStartAngle = 150; + this.radialGauge.scaleEndAngle = 30; + this.radialGauge.scaleBrush = '#0b8fed'; + this.radialGauge.scaleOversweepShape = RadialGaugeScaleOversweepShape.Auto; + this.radialGauge.scaleSweepDirection = SweepDirection.Clockwise; + this.radialGauge.scaleEndExtent = 0.825; + this.radialGauge.scaleStartExtent = 0.775; + + this.radialGauge.minorTickStartExtent = 0.7; + this.radialGauge.minorTickEndExtent = 0.75; + this.radialGauge.tickStartExtent = 0.675; + this.radialGauge.tickEndExtent = 0.75; + + // Backing Settings + this.radialGauge.backingShape = RadialGaugeBackingShape.Fitted; + this.radialGauge.backingBrush = '#fcfcfc'; + this.radialGauge.backingOutline = '#d6d6d6'; + this.radialGauge.backingOversweep = 5; + this.radialGauge.backingCornerRadius = 10; + this.radialGauge.backingOuterExtent = 0.9; + + // Needle Settings + this.radialGauge.needleShape = RadialGaugeNeedleShape.NeedleWithBulb; + this.radialGauge.needlePivotShape = RadialGaugePivotShape.CircleOverlay; + this.radialGauge.needleEndExtent = 0.5; + this.radialGauge.needlePointFeatureExtent = 0.3; + this.radialGauge.needlePivotWidthRatio = 0.2; + this.radialGauge.needleBrush = '#9f9fa0'; + this.radialGauge.needleOutline = '#9f9fa0'; + this.radialGauge.needlePivotBrush = '#9f9fa0'; + this.radialGauge.needlePivotOutline = '#9f9fa0'; + + // TickMark Settings + this.radialGauge.tickBrush = 'rgba(51, 51, 51, 1)'; + this.radialGauge.minorTickBrush = 'rgba(73, 73, 73, 1)'; + this.radialGauge.minorTickCount = 6; + + this.radialGauge.ranges.clear(); + } + + public AnimateToGauge3(): void { + + this.radialGauge.height = '330px'; + this.radialGauge.width = '100%'; + + this.radialGauge.minimumValue = 0; + this.radialGauge.maximumValue = 50; + this.radialGauge.value = 25; + this.radialGauge.interval = 5; + + // setting appearance of labels + this.radialGauge.labelInterval = 5; + this.radialGauge.labelExtent = 0.71; + this.radialGauge.font = '10px Verdana,Arial'; + + // setting custom needle + this.radialGauge.isNeedleDraggingEnabled = true; + this.radialGauge.needleEndExtent = 0.5; + this.radialGauge.needleShape = RadialGaugeNeedleShape.Triangle; + this.radialGauge.needleEndWidthRatio = 0.03; + this.radialGauge.needleStartWidthRatio = 0.05; + this.radialGauge.needlePivotShape = RadialGaugePivotShape.CircleOverlay; + this.radialGauge.needlePivotWidthRatio = 0.15; + this.radialGauge.needleBaseFeatureWidthRatio = 0.15; + this.radialGauge.needleBrush = '#79797a'; + this.radialGauge.needleOutline = '#79797a'; + this.radialGauge.needlePivotBrush = '#79797a'; + this.radialGauge.needlePivotOutline = '#79797a'; + + // setting appearance of major/minor ticks + this.radialGauge.minorTickCount = 4; + this.radialGauge.minorTickEndExtent = 0.625; + this.radialGauge.minorTickStartExtent = 0.6; + this.radialGauge.minorTickStrokeThickness = 1; + this.radialGauge.minorTickBrush = '#79797a'; + this.radialGauge.tickStartExtent = 0.6; + this.radialGauge.tickEndExtent = 0.65; + this.radialGauge.tickStrokeThickness = 2; + this.radialGauge.tickBrush = '#79797a'; + + // setting extent of gauge scale + this.radialGauge.scaleStartAngle = 120; + this.radialGauge.scaleEndAngle = 60; + this.radialGauge.scaleBrush = '#d6d6d6'; + this.radialGauge.scaleOversweepShape = RadialGaugeScaleOversweepShape.Fitted; + this.radialGauge.scaleSweepDirection = SweepDirection.Clockwise; + this.radialGauge.scaleEndExtent = 0.57; + this.radialGauge.scaleStartExtent = 0.5; + + // setting appearance of backing dial + this.radialGauge.backingBrush = '#fcfcfc'; + this.radialGauge.backingOutline = '#d6d6d6'; + this.radialGauge.backingStrokeThickness = 5; + this.radialGauge.backingShape = RadialGaugeBackingShape.Circular; + + // setting custom gauge ranges + const range1 = new IgxRadialGaugeRangeComponent(); + range1.startValue = 5; + range1.endValue = 15; + const range2 = new IgxRadialGaugeRangeComponent(); + range2.startValue = 15; + range2.endValue = 35; + const range3 = new IgxRadialGaugeRangeComponent(); + range3.startValue = 35; + range3.endValue = 45; + this.radialGauge.rangeBrushes = ['#F86232', '#DC3F76', '#7446B9']; + this.radialGauge.rangeOutlines = ['#F86232', '#DC3F76', '#7446B9']; + this.radialGauge.ranges.clear(); + this.radialGauge.ranges.add(range1); + this.radialGauge.ranges.add(range2); + this.radialGauge.ranges.add(range3); + // setting extent of all gauge ranges + for (let i = 0; i < this.radialGauge.ranges.count; i++) { + const range = this.radialGauge.ranges.item(i); + range.innerStartExtent = 0.5; + range.innerEndExtent = 0.5; + range.outerStartExtent = 0.57; + range.outerEndExtent = 0.57; + } + } + + public AnimateToGauge2(): void { + + this.radialGauge.height = '330px'; + this.radialGauge.width = '100%'; + + this.radialGauge.minimumValue = 100; + this.radialGauge.maximumValue = 200; + this.radialGauge.value = 125; + + // Scale Settings + this.radialGauge.scaleStartAngle = 135; + this.radialGauge.scaleEndAngle = 45; + this.radialGauge.scaleBrush = 'transparent'; + this.radialGauge.scaleSweepDirection = SweepDirection.Clockwise; + + // Backing Settings + this.radialGauge.backingOutline = 'white'; + this.radialGauge.backingBrush = 'white'; + + // Needle Settings + this.radialGauge.needleEndExtent = 0.8; + this.radialGauge.needleShape = RadialGaugeNeedleShape.Triangle; + this.radialGauge.needlePivotShape = RadialGaugePivotShape.Circle; + this.radialGauge.needlePivotWidthRatio = 0.1; + this.radialGauge.needleBrush = '#79797a'; + this.radialGauge.needleOutline = '#79797a'; + + // TickMark Settings + this.radialGauge.tickBrush = 'transparent'; + this.radialGauge.minorTickBrush = 'transparent'; + + // Label Settings + this.radialGauge.labelInterval = 100; + this.radialGauge.labelExtent = 1; + this.radialGauge.font = '15px Verdana,Arial'; + + // setting custom gauge ranges + const range1 = new IgxRadialGaugeRangeComponent(); + range1.startValue = 100; + range1.endValue = 150; + const range2 = new IgxRadialGaugeRangeComponent(); + range2.startValue = 150; + range2.endValue = 200; + + this.radialGauge.rangeBrushes = ['#32f845', '#bf32f8']; + this.radialGauge.rangeOutlines = ['#32f845', '#bf32f8']; + this.radialGauge.ranges.clear(); + this.radialGauge.ranges.add(range1); + this.radialGauge.ranges.add(range2); + + // setting extent of all gauge ranges + for (let i = 0; i < this.radialGauge.ranges.count; i++) { + const range = this.radialGauge.ranges.item(i); + range.innerStartExtent = 0.3; + range.innerEndExtent = 0.3; + range.outerStartExtent = 0.9; + range.outerEndExtent = 0.9; + } + } + + public AnimateToGauge1(): void { + + this.radialGauge.height = '330px'; + this.radialGauge.width = '100%'; + + this.radialGauge.minimumValue = 0; + this.radialGauge.maximumValue = 10; + this.radialGauge.value = 7.5; + + // Scale Settings + this.radialGauge.scaleStartAngle = 200; + this.radialGauge.scaleEndAngle = -20; + this.radialGauge.scaleBrush = 'transparent'; + this.radialGauge.scaleSweepDirection = SweepDirection.Clockwise; + + // Backing Settings + this.radialGauge.backingOutline = 'white'; + this.radialGauge.backingBrush = 'white'; + + // Needle Settings + this.radialGauge.needleEndExtent = 0.8; + this.radialGauge.needleShape = RadialGaugeNeedleShape.Triangle; + this.radialGauge.needlePivotShape = RadialGaugePivotShape.Circle; + this.radialGauge.needlePivotWidthRatio = 0.1; + this.radialGauge.needleBrush = '#79797a'; + this.radialGauge.needleOutline = '#79797a'; + + // TickMark Settings + this.radialGauge.tickBrush = 'transparent'; + this.radialGauge.minorTickBrush = 'transparent'; + + // Label Settings + this.radialGauge.labelInterval = 10; + this.radialGauge.labelExtent = 1; + this.radialGauge.font = '15px Verdana,Arial'; + + // setting custom gauge ranges + const range1 = new IgxRadialGaugeRangeComponent(); + range1.startValue = 0; + range1.endValue = 5; + const range2 = new IgxRadialGaugeRangeComponent(); + range2.startValue = 5; + range2.endValue = 10; + + this.radialGauge.rangeBrushes = ['#a4bd29', '#F86232']; + this.radialGauge.rangeOutlines = ['#a4bd29', '#F86232']; + this.radialGauge.ranges.clear(); + this.radialGauge.ranges.add(range1); + this.radialGauge.ranges.add(range2); + + // setting extent of all gauge ranges + for (let i = 0; i < this.radialGauge.ranges.count; i++) { + const range = this.radialGauge.ranges.item(i); + range.innerStartExtent = 0.3; + range.innerEndExtent = 0.3; + range.outerStartExtent = 0.9; + range.outerEndExtent = 0.9; + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/default/index.ts b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/index.ts new file mode 100644 index 000000000..b85cfce07 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/default/index.ts @@ -0,0 +1,22 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxRadialGaugeTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Radial Gauge"]; + this.controlGroup = "Gauges"; + this.listInComponentTemplates = true; + this.id = "radial-gauge"; + this.projectType = "igx-ts"; + this.name = "Radial Gauge"; + this.description = "IgxRadialGauge with different animations"; + this.dependencies = [ + { + import: ["IgxRadialGaugeModule"], + from: "igniteui-angular-gauges" + } + ]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0"]; + } +} +module.exports = new IgxRadialGaugeTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/radial-gauge/index.ts b/packages/igx-templates/igx-ts-legacy/radial-gauge/index.ts new file mode 100644 index 000000000..b4984127e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/radial-gauge/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxRadialGaugeComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Radial Gauge"; + this.group = "Gauges"; + this.description = `provides a number of visual elements, like a needle, tick marks, ranges + and labels, in order to create a predefined shape and scale.`; + } +} +module.exports = new IgxRadialGaugeComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..9d8d64dd5 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,16 @@ +

The igx-select allows you to select a single item from a drop-down list.

+

You can read more about how to configure igx-select in the + README or the + official + documentation. +

+ +
+ + + + {{item}} + + +
diff --git a/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..7fbed747c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,3 @@ +.select-wrapper { + max-width: 200px; +} diff --git a/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..9291014c8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxSelectModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxSelectModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..14bd8b0f7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public items: string[] = ['Orange', 'Apple', 'Banana', 'Mango', 'Pineapple']; +} diff --git a/packages/igx-templates/igx-ts-legacy/select/default/index.ts b/packages/igx-templates/igx-ts-legacy/select/default/index.ts new file mode 100644 index 000000000..10d0350e4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/default/index.ts @@ -0,0 +1,23 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxSelectTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Select"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "select"; + this.projectType = "igx-ts"; + this.name = "Select"; + this.description = "basic IgxSelect"; + this.dependencies = [{ + import: [ + "IgxSelectModule", + "IgxButtonModule", + "IgxToggleModule" + ], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/select/index.ts b/packages/igx-templates/igx-ts-legacy/select/index.ts new file mode 100644 index 000000000..29789f976 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/index.ts @@ -0,0 +1,11 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxSelectComponent extends BaseComponent { + constructor() { + super(__dirname); + this.name = "Select"; + this.group = "Data Entry & Display"; + this.description = "provides an input with dropdown list allowing selection of a single item"; + } +} +module.exports = new IgxSelectComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts new file mode 100644 index 000000000..449fa070b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxSelectModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxSelectModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..3e857a903 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,22 @@ +

The igx-select allows you to select a single item from a drop-down list.
+ The following sample demonstrates the component defined with groups.

+

You can read more about how to configure igx-select in the + README or the + official + documentation. +

+ +
+ + + + + {{fruit}} + + + {{vegetable}} + + + +
diff --git a/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..a9213a423 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,4 @@ +.select-wrapper { + padding-left: 50px; + max-width: 240px; +} diff --git a/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..2b57a7e5d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +@Component({ + selector: 'app-<%=filePrefix%>', + styleUrls: ['<%=filePrefix%>.component.scss'], + templateUrl: '<%=filePrefix%>.component.html' +}) +export class <%=ClassName%>Component { + public items: any[] = [ + { type: 'Fruits', fruits: ['Apple', 'Orange', 'Banana'] }, + { type: 'Vegetables', vegetables: ['Cucumber', 'Potato', 'Pepper'] } + ]; +} diff --git a/packages/igx-templates/igx-ts-legacy/select/select-groups/index.ts b/packages/igx-templates/igx-ts-legacy/select/select-groups/index.ts new file mode 100644 index 000000000..c2af65917 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-groups/index.ts @@ -0,0 +1,23 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxSelectTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Select With Groups"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "select-groups"; + this.projectType = "igx-ts"; + this.name = "Select With Groups"; + this.description = "IgxSelect that has groups"; + this.dependencies = [{ + import: [ + "IgxSelectModule", + "IgxButtonModule", + "IgxToggleModule" + ], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..ea483cd3d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,28 @@ +
+

The igx-select allows you to select a single item from a drop-down list.
+ The following sample demonstrates the component inside a form.

+

You can read more about how to configure igx-select in the + README or the + official + documentation. +

+ +
+
+ + + Fruit + None + + {{fruit}} + + +
+
+ +
+ Selected {{selected ? selected : "None"}} +
+
diff --git a/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..fc8d7853c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,17 @@ +.select-wrapper { + padding-top: 50px; + display: flex; + flex-flow: row; +} + +.actions { + display: flex; + flex-flow: column; + padding-top: 5%; +} + +.content { + display: flex; + flex-flow: column; + align-items: center; +} diff --git a/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..09cd98ac9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,40 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { + IgxButtonModule, + IgxSelectModule, + IgxToastModule, + IgxToggleModule +} from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ + FormsModule, + IgxSelectModule, + IgxToggleModule, + IgxButtonModule, + IgxToastModule, + NoopAnimationsModule, + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..f4cc39ef6 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,26 @@ +import { Component, ViewChild } from '@angular/core'; +import { HorizontalAlignment, IgxSelectComponent, IgxToastComponent, PositionSettings, VerticalAlignment } from '<%=igxPackage%>'; + +@Component({ + selector: 'app-<%=filePrefix%>', + styleUrls: ['<%=filePrefix%>.component.scss'], + templateUrl: '<%=filePrefix%>.component.html' +}) +export class <%=ClassName%>Component { + @ViewChild(IgxSelectComponent, { static: true }) + public igxSelect!: IgxSelectComponent; + + @ViewChild(IgxToastComponent, { static: true }) + public output!: IgxToastComponent; + + public selected!: string; + public fruits: string[] = ['Orange', 'Apple', 'Banana', 'Mango']; + private messagePositionSettings: PositionSettings = { + horizontalDirection: HorizontalAlignment.Center, + verticalDirection: VerticalAlignment.Middle + }; + + public onSubmit() { + this.output.open(undefined, this.messagePositionSettings); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/select/select-in-form/index.ts b/packages/igx-templates/igx-ts-legacy/select/select-in-form/index.ts new file mode 100644 index 000000000..f50cbcb91 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/select/select-in-form/index.ts @@ -0,0 +1,27 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxSelectTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Select In Form"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "select-in-form"; + this.projectType = "igx-ts"; + this.name = "Select In Form"; + this.description = "IgxSelect in a form"; + this.dependencies = [{ + import: [ + "IgxSelectModule", + "IgxButtonModule", + "IgxToggleModule", + "IgxToastModule" + ], + from: "<%=igxPackage%>" + }, { + import: ["FormsModule"], + from: "@angular/forms" + }]; + } +} +module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..bf01ced2c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,39 @@ +

igx-stepper component sample.

+

You can read more about configuring the igx-stepper component in the + README or the + official + documentation. +

+
+ + +
+ + + Order +
+
+ +
+
+
+ + Payment +
+
+ + +
+
+
+ + Confirmation +
+
+ + +
+
+
+
diff --git a/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..d0237941e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,21 @@ +$sample-gap: 20px; + +:host { + display: block; + padding: $sample-gap; +} + +.sample-split, +.sample-step-actions { + display: flex; + gap: $sample-gap; +} + +.sample-split { + > * { + max-width: 380px; + flex: 1; + } + + margin-bottom: $sample-gap; +} diff --git a/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..d3734fcc1 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; +import { IgxStepperModule, IgxButtonModule, IgxButtonGroupModule } from '<%=igxPackage%>'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [ NoopAnimationsModule, IgxStepperModule, IgxButtonModule, IgxButtonGroupModule ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..b7716012e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; +import { IButtonGroupEventArgs, IgxStepperOrientation } from '<%=igxPackage%>'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { + public orientation: IgxStepperOrientation = 'horizontal'; + public stepperOrientations: any[] = [ + { + label: 'Horizontal', orientation: 'horizontal', + selected: this.orientation === 'horizontal', toggleable: true + }, + { + label: 'Vertical', orientation: 'vertical', + selected: this.orientation === 'vertical', toggleable: true + } + ]; + + public toggleOrientation(event: IButtonGroupEventArgs): void { + this.orientation = this.stepperOrientations[event.index].orientation; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/stepper/default/index.ts b/packages/igx-templates/igx-ts-legacy/stepper/default/index.ts new file mode 100644 index 000000000..1862769ba --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxStepperTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Stepper"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "stepper"; + this.projectType = "igx-ts"; + this.name = "Stepper"; + this.description = "Basic IgxStepper sample"; + this.dependencies = [{ + import: ["IgxStepperModule", "IgxButtonModule", "IgxButtonGroupModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxStepperTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/stepper/index.ts b/packages/igx-templates/igx-ts-legacy/stepper/index.ts new file mode 100644 index 000000000..9eeff5cfe --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/stepper/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxStepperComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Stepper"; + this.group = "Layouts"; + this.description = `visualizes content as a process and shows its progress by dividing the content into successive steps`; + } +} +module.exports = new IgxStepperComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..8fa5a6885 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,29 @@ +
+

igx-bottom-nav component.

+

You can read more about configuring the igx-bottom-nav component in the + README or the + official + documentation. +

+ + + + library_music + + This is Item 1 content. + + + + video_library + + This is Item 2 content. + + + + library_books + + This is Item 3 content. + + +
diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..b49c66c63 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,6 @@ +igx-bottom-nav-content { + padding: 10px; + text-align: center; + font-weight: bold; + color: #731963; +} diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..2d3173b05 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxBottomNavModule, IgxIconModule, IgxRippleModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxBottomNavModule, IgxIconModule, IgxRippleModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..4897b9efb --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,10 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component { +} diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/1.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/1.jpg new file mode 100644 index 000000000..28d3021c9 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/1.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/12.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/12.jpg new file mode 100644 index 000000000..1c89b4e9b Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/12.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/13.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/13.jpg new file mode 100644 index 000000000..5ec2f4fbd Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/13.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/14.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/14.jpg new file mode 100644 index 000000000..773eade87 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/14.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/15.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/15.jpg new file mode 100644 index 000000000..cacf38480 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/15.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/16.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/16.jpg new file mode 100644 index 000000000..75f77fc1c Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/16.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/17.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/17.jpg new file mode 100644 index 000000000..4fda8c396 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/17.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/2.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/2.jpg new file mode 100644 index 000000000..dd992e876 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/2.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/3.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/3.jpg new file mode 100644 index 000000000..46fba71dd Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/3.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/4.jpg b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/4.jpg new file mode 100644 index 000000000..096ca437e Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tabbar/default/files/src/assets/4.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/default/index.ts b/packages/igx-templates/igx-ts-legacy/tabbar/default/index.ts new file mode 100644 index 000000000..15e754f6c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/default/index.ts @@ -0,0 +1,22 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxBottomNavTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Bottom Navigation"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "bottom-nav"; + this.projectType = "igx-ts"; + this.name = "Bottom Navigation"; + this.description = "three item bottom navigation template"; + this.dependencies = [{ + import: ["IgxBottomNavModule", "IgxAvatarModule", "IgxIconModule", "IgxRippleModule"], + from: "<%=igxPackage%>" + }, { + import: "CommonModule", + from: "@angular/common" + }]; + } +} +module.exports = new IgxBottomNavTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/tabbar/index.ts b/packages/igx-templates/igx-ts-legacy/tabbar/index.ts new file mode 100644 index 000000000..962ea2542 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabbar/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxBottomNavComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Bottom Navigation"; + this.group = "Layouts"; + this.description = "enables the user to navigate among a number of content panels displayed in a single view."; + } +} +module.exports = new IgxBottomNavComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..11679e872 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,36 @@ +

igx-tabs component sample.

+

You can read more about configuring the igx-tabs component in the + README or the + official + documentation. +

+ + + + library_music + Albums + + + Albums + + + + + favorite + Favorite + + + Favorite + + + + + info + Details + + + Details + + + diff --git a/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..356852ee2 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,9 @@ +:host { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +igx-tab-content { + padding: 8px; +} diff --git a/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..a087b7c79 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxIconModule, IgxRippleModule, IgxTabsModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, IgxIconModule, IgxTabsModule, IgxRippleModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..2f947b944 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component { +} diff --git a/packages/igx-templates/igx-ts-legacy/tabs/default/index.ts b/packages/igx-templates/igx-ts-legacy/tabs/default/index.ts new file mode 100644 index 000000000..31cb1096b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxTabsTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Tabs"]; + this.controlGroup = "Layouts"; + this.listInComponentTemplates = true; + this.id = "tabs"; + this.projectType = "igx-ts"; + this.name = "Tabs"; + this.description = "Basic IgxTabs sample"; + this.dependencies = [{ + import: ["IgxTabsModule", "IgxCardModule", "IgxAvatarModule", "IgxButtonModule", "IgxRippleModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxTabsTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/tabs/index.ts b/packages/igx-templates/igx-ts-legacy/tabs/index.ts new file mode 100644 index 000000000..2cdf68d81 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tabs/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxTabsComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Tabs"; + this.group = "Layouts"; + } +} +module.exports = new IgxTabsComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..f49d0029c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,10 @@ +
+

igx-time-picker component with initial value set. One-way data bind is used.

+

You can read more about configuring the igx-time-picker component in the + README or the + official documentation. +

+ +
diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..418b2c20d --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,31 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxTimePickerModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + const date: Date = new Date(); + const hours: number = date.getHours(); + const minutes: number = date.getMinutes(); + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxTimePickerModule, NoopAnimationsModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('time is correct', () => { + expect(component.date.getHours()).toBe(hours); + expect(component.date.getMinutes()).toBe(minutes); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..a2ac2aa19 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,11 @@ +import { Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class <%=ClassName%>Component { + public date: Date = new Date(Date.now()); +} diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/default/index.ts b/packages/igx-templates/igx-ts-legacy/time-picker/default/index.ts new file mode 100644 index 000000000..fea63dade --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/time-picker/default/index.ts @@ -0,0 +1,18 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxTimePickerTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Time Picker"]; + this.controlGroup = "Scheduling"; + this.listInComponentTemplates = true; + this.id = "time-picker"; + this.projectType = "igx-ts"; + this.name = "Time Picker"; + this.description = "IgxTimePicker with initial value"; + this.dependencies = [ + { import: "IgxTimePickerModule", from: "<%=igxPackage%>" } + ]; + } +} +module.exports = new IgxTimePickerTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/time-picker/index.ts b/packages/igx-templates/igx-ts-legacy/time-picker/index.ts new file mode 100644 index 000000000..2a3616afc --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/time-picker/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxTimePickerComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Time Picker"; + this.group = "Scheduling"; + this.description = "select time from a dialog with spinners which is then mirrored in the input field."; + } +} +module.exports = new IgxTimePickerComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..19370c3e4 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,30 @@ +

An igxTooltip template

+

You can read more about configuring the igxTooltip component in the + README or the + official + documentation. +

+ +
+
+ + + +
+
+ +
+
Name: June Osborne
+
Address: 2 Commerce Dr, Cranbury, NJ 08512, USA
+
+
+
+
+
+
+
+ Disable tooltip +
+
diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..1b084c056 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,23 @@ +.wrapper { + text-align: center; + margin: 20px; +} + +.avatar { + display: inline-block; +} + +.bottomMargin { + margin-bottom: 50px; +} + +.locationTooltipContent { + display: flex; + justify-content: center; + align-items: center; +} + +.locationIcon { + width: 45px; + height: 45px; +} diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..590e17f39 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxAvatarModule, IgxSwitchModule, IgxTooltipModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [NoopAnimationsModule, FormsModule, IgxTooltipModule, IgxAvatarModule, IgxSwitchModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..f0d734b13 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-<%=filePrefix%>', + styleUrls: ['./<%=filePrefix%>.component.scss'], + templateUrl: './<%=filePrefix%>.component.html' +}) + +export class <%=ClassName%>Component { +} diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/1.jpg b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/1.jpg new file mode 100644 index 000000000..99ca93d34 Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/1.jpg differ diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/2.png b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/2.png new file mode 100644 index 000000000..a3fa145cc Binary files /dev/null and b/packages/igx-templates/igx-ts-legacy/tooltip/default/files/src/assets/2.png differ diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/default/index.ts b/packages/igx-templates/igx-ts-legacy/tooltip/default/index.ts new file mode 100644 index 000000000..7eb7ed3ae --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/default/index.ts @@ -0,0 +1,22 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxTooltipTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Tooltip"]; + this.controlGroup = "Interactions"; + this.listInComponentTemplates = true; + this.id = "tooltip"; + this.projectType = "igx-ts"; + this.name = "Tooltip"; + this.description = "A fully customizable tooltip"; + this.dependencies = [ + { + import: ["IgxAvatarModule", "IgxTooltipModule", "IgxSwitchModule"], + from: "<%=igxPackage%>" + }, + { import: "FormsModule", from: "@angular/forms" } + ]; + } +} +module.exports = new IgxTooltipTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/tooltip/index.ts b/packages/igx-templates/igx-ts-legacy/tooltip/index.ts new file mode 100644 index 000000000..6b8560602 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tooltip/index.ts @@ -0,0 +1,13 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxTooltipComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Tooltip"; + this.group = "Interactions"; + } +} +module.exports = new IgxTooltipComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/index.ts b/packages/igx-templates/igx-ts-legacy/tree-grid/index.ts new file mode 100644 index 000000000..5356d2b5c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/index.ts @@ -0,0 +1,15 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxGridComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Tree Grid"; + this.group = "Grids & Lists"; + this.description = "pick from tree grid templates"; + this.groupPriority = 9; + } +} +module.exports = new IgxGridComponent(); diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..4084664b0 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,17 @@ +

+ <%=description%>
+ You can read more about configuring the igx-grid component in the + README or the + official documentation. +

+<%=selectedFeatures%> + +> + <%=columnPinning%>> + > + > + ><%=additionalMarkup%> + diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..d048026f8 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxCheckboxModule, IgxDatePickerModule, IgxTreeGridModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [BrowserAnimationsModule, IgxTreeGridModule, IgxDatePickerModule, IgxCheckboxModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..a895797b9 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; +import { Employee, EMPLOYEE_DATA } from './localData'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'] +}) +export class <%=ClassName%>Component implements OnInit { + public localData: Employee[] = []; + title = '<%=name%>'; + + ngOnInit() { + this.localData = EMPLOYEE_DATA; + } +} diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/localData.ts b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/localData.ts new file mode 100644 index 000000000..08a0d106e --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/files/src/app/__path__/localData.ts @@ -0,0 +1,155 @@ +export interface Employee { + Age: number; + Employees?: Employee[]; + HireDate: Date; + ID: number; + Name: string; + Location: string; +} + +export const EMPLOYEE_DATA: Employee[] = [ + { + Age: 55, + Employees: [ + { + Age: 43, + Employees: [], + HireDate: new Date(2011, 6, 3), + ID: 3, + Name: 'Michael Burke', + Location: 'London' + }, + { + Age: 29, + Employees: [], + HireDate: new Date(2009, 6, 19), + ID: 2, + Name: 'Thomas Anderson', + Location: 'London' + }, + { + Age: 31, + Employees: [ + { + Age: 35, + HireDate: new Date(2015, 9, 17), + ID: 6, + Name: 'Roland Mendel', + Location: 'Tokyo' + }, + { + Age: 44, + HireDate: new Date(2009, 10, 11), + ID: 12, + Name: 'Sven Cooper', + Location: 'Tokyo' + } + ], + HireDate: new Date(2014, 8, 18), + ID: 11, + Name: 'Monica Reyes', + Location: 'London' + } + ], + HireDate: new Date(2008, 3, 20), + ID: 1, + Name: 'Johnathan Winchester', + Location: 'London' + }, + { + Age: 42, + Employees: [ + { + Age: 44, + HireDate: new Date(2014, 4, 4), + ID: 14, + Name: 'Laurence Johnson', + Location: 'New Jersey' + }, + { + Age: 25, + Employees: [ + { + Age: 39, + HireDate: new Date(2010, 3, 22), + ID: 13, + Name: 'Trevor Ashworth', + Location: 'New Jersey' + } + ], + HireDate: new Date(2017, 11, 9), + ID: 5, + Name: 'Elizabeth Richards', + Location: 'New Jersey' + } + ], + HireDate: new Date(2014, 1, 22), + ID: 4, + Name: 'Ana Sanders', + Location: 'New Jersey' + }, + { + Age: 49, + Employees: [ + { + Age: 44, + Employees: [], + HireDate: new Date(2014, 4, 4), + ID: 17, + Name: 'Antonio Moreno', + Location: 'New Jersey' + } + ], + HireDate: new Date(2014, 1, 22), + ID: 18, + Name: 'Victoria Lincoln', + Location: 'New Jersey' + }, + { + Age: 61, + Employees: [ + { + Age: 50, + Employees: [ + { + Age: 25, + Employees: [], + HireDate: new Date(2017, 11, 9), + ID: 15, + Name: 'Patricia Simpson', + Location: 'New Jersey' + }, + { + Age: 39, + HireDate: new Date(2010, 3, 22), + ID: 9, + Name: 'Francisco Chang', + Location: 'Tokyo' + }, + { + Age: 25, + HireDate: new Date(2018, 3, 18), + ID: 16, + Name: 'Peter Lewis', + Location: 'New Jersey' + } + ], + HireDate: new Date(2007, 11, 18), + ID: 7, + Name: 'Pedro Rodriguez', + Location: 'New Jersey' + }, + { + Age: 27, + HireDate: new Date(2016, 2, 19), + ID: 8, + Name: 'Casey Harper', + Location: 'Tokyo' + } + ], + HireDate: new Date(2010, 1, 1), + ID: 10, + Name: 'Yuki Onna', + Location: 'Tokyo' + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/index.ts b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/index.ts new file mode 100644 index 000000000..d7b3e0b17 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree-grid/tree-grid-custom/index.ts @@ -0,0 +1,167 @@ +import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { + private userExtraConfiguration: {} = {}; + + constructor() { + super(__dirname); + this.components = ["Tree Grid"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "custom-tree-grid"; + this.projectType = "igx-ts"; + this.name = "Custom Tree Grid"; + this.description = "IgxTreeGrid with optional features like sorting, filtering, row editing, etc."; + this.dependencies = [ + { import: "IgxTreeGridModule", from: "<%=igxPackage%>" } + ]; + + this.hasExtraConfiguration = true; + } + + public setExtraConfiguration(extraConfigKeys: {}) { + this.userExtraConfiguration = extraConfigKeys; + } + + public getExtraConfiguration(): ControlExtraConfiguration[] { + return [{ + choices: ["Sorting", "Filtering", "Cell Editing", "Row Editing", "Resizing", + "Row Selection", "Paging", "Column Pinning", "Column Moving", "Column Hiding"], + default: "", + key: "columnFeatures", + message: "Choose features for the igx-tree-grid", + type: ControlExtraConfigType.MultiChoice + }]; + } + + public generateConfig(name: string, ...options: any[]): { [key: string]: any } { + let additionalMarkup = ""; + /** starts with empty string to create a new line on join when something else is added */ + const additionalElements = [""]; + const toolbarActions = []; + const columnFeatures = []; + const columnBoolFeatures = []; + const treeGridFeatures = []; + const featureUrl = "https://www.infragistics.com/products/ignite-ui-angular/angular/components/treegrid/"; + const anchorWrapper = { + start: ``, + text: ``, + end: `` + }; + let selectedFeatures = ""; + let columnPinning = ""; + + if (this.userExtraConfiguration["columnFeatures"]) { + const features = this.userExtraConfiguration["columnFeatures"] as string[]; + const featuresUrls = []; + for (const feature of this.userExtraConfiguration["columnFeatures"] as string[]) { + switch (feature) { + case "Sorting": + this.formatTreeGridFeatures(feature, columnFeatures, columnBoolFeatures); + break; + case "Filtering": + this.formatTreeGridFeatures(feature, columnFeatures, columnBoolFeatures); + treeGridFeatures.push('[allowFiltering]="true"'); + break; + case "Resizing": + this.formatTreeGridFeatures(feature, columnFeatures, columnBoolFeatures); + break; + case "Column Moving": + treeGridFeatures.push('[moving]="true"'); + break; + case "Column Hiding": + toolbarActions.push(" "); + break; + case "Cell Editing": + columnFeatures.push(`[editable]="true"`); + break; + case "Row Editing": + treeGridFeatures.push(`[rowEditable]="true"`); + break; + case "Row Selection": + const gridFeatureText = `rowSelection="multiple"`; + treeGridFeatures.push(gridFeatureText); + break; + case "Paging": + additionalElements.push(` `); + break; + case "Column Pinning": + columnPinning = '[pinned]="true"'; + toolbarActions.push(" "); + break; + } + switch (feature) { + case "Sorting": + case "Filtering": + case "Editing": + case "Paging": + featuresUrls.push(`${featureUrl}${feature.toLocaleLowerCase()}`); + break; + case "Resizing": + featuresUrls.push(`${featureUrl}column-resizing`); + break; + case "Column Pinning": + featuresUrls.push(`${featureUrl}column-pinning`); + break; + case "Cell Editing": + featuresUrls.push(`${featureUrl}editing`); + break; + case "Row Editing": + featuresUrls.push(`${featureUrl}row-editing`); + break; + case "Column Moving": + featuresUrls.push(`${featureUrl}column-moving`); + break; + case "Column Hiding": + featuresUrls.push(`${featureUrl}column-hiding`); + break; + case "Row Selection": + featuresUrls.push(`${featureUrl}selection`); + break; + } + } + selectedFeatures = features.map((e, i) => { + anchorWrapper.href = featuresUrls[i]; + anchorWrapper.text = e; + return ` ${anchorWrapper.start}${anchorWrapper.href}${anchorWrapper.middle}` + + `${anchorWrapper.text}${anchorWrapper.end}`; + }).toString(); + if (selectedFeatures.length > 0) { + selectedFeatures = `

Active Features:
${selectedFeatures}

`; + } + if (toolbarActions.length) { + const parts = [ + " ", + " Employees", + " ", + ...toolbarActions, + " ", + " " + ]; + additionalElements.splice(1, 0, parts.join("\n")); + } + additionalMarkup = additionalElements.join("\n"); + } + + const extraConfig = { + additionalMarkup, + columnPinning, + selectedFeatures, + columnBoolFeatures: columnBoolFeatures.join(" "), + columnFeatures: columnFeatures.join(" "), + treeGridFeatures: treeGridFeatures.join(" ") + }; + return super.generateConfig(name, { extraConfig }); + } + + private formatTreeGridFeatures(feature: string, columnFeatures: any[], columnBoolFeatures: any[]) { + const text = `[${feature.toLowerCase().replace("ing", "able")}]="true"`; + columnFeatures.push(text); + columnBoolFeatures.push(text); + } +} +module.exports = new IgxCustomTreeGridTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.html b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.html new file mode 100644 index 000000000..3a39e7c54 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.html @@ -0,0 +1,43 @@ +

igx-tree component with selection and load on demand.

+

You can read more about configuring the igx-tree component in the + README or the + official documentation. +

+ +
+ + + + + + + + + + + +
+ {{ remoteRoot.Icon }} + {{ remoteRoot.Name }} + refresh +
+ + + + + +
+
+ +
+ {{ data.Icon }} + {{ data.Name }} +
+
+
+
+ Reload Remote Data +
diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.scss b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.scss new file mode 100644 index 000000000..f48dd8931 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.scss @@ -0,0 +1,31 @@ +.tree-node-icon { + display: flex; + align-items: center; + vertical-align: middle; +} + +igx-tree { + max-height: 560px; + overflow-y: auto; +} + +.node-refresh { + cursor: pointer; + padding: 0px 4px; + color: hsla(var(--igx-success-500)); +} + +.node { + display: flex; + align-items: center; +} + +.node-title { + margin-left: 10px; + vertical-align: middle; +} + +.sample-wrapper { + margin: 0 auto; + padding: 10px; +} diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts new file mode 100644 index 000000000..858ed7213 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { IgxComboModule, IgxTooltipModule } from '<%=igxPackage%>'; +import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; + +describe('<%=ClassName%>Component', () => { + let component: <%=ClassName%>Component; + let fixture: ComponentFixture<<%=ClassName%>Component>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [<%=ClassName%>Component], + imports: [IgxComboModule, NoopAnimationsModule, IgxTooltipModule] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(<%=ClassName%>Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.ts new file mode 100644 index 000000000..800f58a10 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/__filePrefix__.component.ts @@ -0,0 +1,65 @@ +import { Component, OnDestroy } from '@angular/core'; +import { IgxTreeNodeComponent } from '<%=igxPackage%>'; +import { Subject } from 'rxjs'; +import { take, takeUntil } from 'rxjs/operators'; +import { DATA, NodeData, REMOTE_ROOT, SelectableNodeData } from './local-data'; +import { DataService } from './services/data.service'; + +@Component({ + selector: 'app-<%=filePrefix%>', + templateUrl: './<%=filePrefix%>.component.html', + styleUrls: ['./<%=filePrefix%>.component.scss'], + providers: [DataService] +}) + +export class <%=ClassName%>Component implements OnDestroy { + public data = DATA; + public loading = false; + public showRefresh = false; + public remoteRoot = REMOTE_ROOT; + public remoteData: SelectableNodeData[] = []; + private destroy$ = new Subject(); + + constructor(private dataService: DataService) { + this.dataService.data.pipe(takeUntil(this.destroy$)).subscribe((data) => { + this.loading = false; + this.remoteData = data; + }); + } + + public refreshData(node: IgxTreeNodeComponent): void { + this.dataService.clearData(); + this.remoteData = []; + this.getNodeData(node, true); + this.dataService.getData(); + } + + public getNodeData(node: IgxTreeNodeComponent, evt: boolean): void { + if (this.remoteData?.length) { + return; + } + if (evt) { + this.showRefresh = true; + this.loading = true; + this.dataService.getData(); + this.dataService.data.pipe(take(1)).subscribe((data) => { + if (node.selected) { + data.forEach(e => { + if (e.Selected === undefined) { + e.Selected = true; + } + }); + } + }); + } + } + + public handleSelection(node: NodeData, selected: boolean): void { + this.dataService.toggleSelected(node, selected); + } + + public ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); + } +} diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/local-data.ts b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/local-data.ts new file mode 100644 index 000000000..2cfaa4c2c --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/local-data.ts @@ -0,0 +1,75 @@ +export interface NodeData { + Name: string; + Icon: string; + Files?: NodeData[]; +} + +export interface SelectableNodeData extends NodeData { + Selected?: boolean; +} + +export const REMOTE_ROOT: NodeData = { + Name: 'Network', + Icon: 'devices', + Files: [] +}; + +export const REMOTE_DATA: NodeData[] = [ + { Name: 'DESKTOP-XYZ', Icon: 'computer' }, + { Name: 'TABLET-ABC', Icon: 'tablet' }, + { Name: 'PHONE-123', Icon: 'smartphone' } +]; + +export const DATA: NodeData[] = [ + { + Name: 'Computer', Icon: 'computer', Files: [ + { + Name: 'Documents', + Icon: 'library_books', + Files: + [ + { Name: 'Report 2016', Icon: 'article' }, + { Name: 'Report 2017', Icon: 'article' }, + { Name: 'Report 2018', Icon: 'article' }, + { Name: 'Report 2019', Icon: 'article' }, + { Name: 'Report 2020', Icon: 'article' } + ] + }, + { + Name: 'Music', + Icon: 'library_music', + Files: + [ + { Name: 'Track 1', Icon: 'audiotrack' }, + { Name: 'Track 2', Icon: 'audiotrack' }, + { Name: 'Track 3', Icon: 'audiotrack' }, + { Name: 'Track 4', Icon: 'audiotrack' }, + { Name: 'Track 5', Icon: 'audiotrack' } + ] + }, + { + Name: 'Pictures', + Icon: 'photo_library', + Files: + [ + { Name: 'Image 101', Icon: 'image' }, + { Name: 'Image 102', Icon: 'image' }, + { Name: 'Image 103', Icon: 'image' }, + { Name: 'Image 104', Icon: 'image' }, + { Name: 'Image 105', Icon: 'image' } + ] + }, + { + Name: 'Recycle Bin', + Icon: 'delete', + Files: + [ + { Name: 'Track 6', Icon: 'audiotrack' }, + { Name: 'Track 7', Icon: 'audiotrack' }, + { Name: 'Image 106', Icon: 'image' }, + { Name: 'Image 107', Icon: 'image' } + ] + } + ] + } +]; diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/services/data.service.ts b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/services/data.service.ts new file mode 100644 index 000000000..89d70b27b --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/files/src/app/__path__/services/data.service.ts @@ -0,0 +1,51 @@ +import { Injectable } from '@angular/core'; +import { Observable, ReplaySubject } from 'rxjs'; +import { NodeData, REMOTE_DATA, SelectableNodeData } from '../local-data'; + +@Injectable() +export class DataService { + private nodeData: SelectableNodeData[] = []; + private selectedNode: Set = new Set(); + private deselectedNode: Set = new Set(); + private data$: ReplaySubject = new ReplaySubject(); + public get data(): Observable { + return this.data$; + } + + public getData(): void { + setTimeout(() => { + this.nodeData = REMOTE_DATA; + const passed = this.nodeData.map(e => { + const selectionState: Partial = {}; + if (this.selectedNode.has(e.Name)) { + selectionState.Selected = true; + } + if (this.deselectedNode.has(e.Name)) { + selectionState.Selected = false; + } + return Object.assign({}, e, selectionState); + }); + this.data$.next(passed); + }, 2000); + } + + public clearData(): void { + this.nodeData = []; + this.data$.next(this.nodeData); + } + + public clearSelect(): void { + this.selectedNode = new Set(); + this.deselectedNode = new Set(); + } + + public toggleSelected(node: NodeData, state: boolean): void { + if (state) { + this.selectedNode.add(node.Name); + this.deselectedNode.delete(node.Name); + } else { + this.deselectedNode.add(node.Name); + this.selectedNode.delete(node.Name); + } + } +} diff --git a/packages/igx-templates/igx-ts-legacy/tree/default/index.ts b/packages/igx-templates/igx-ts-legacy/tree/default/index.ts new file mode 100644 index 000000000..7ea0bf830 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/default/index.ts @@ -0,0 +1,19 @@ +import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; + +class IgxComboTemplate extends IgniteUIForAngularTemplate { + constructor() { + super(__dirname); + this.components = ["Tree"]; + this.controlGroup = "Grids & Lists"; + this.listInComponentTemplates = true; + this.id = "tree"; + this.projectType = "igx-ts"; + this.name = "Tree"; + this.description = "IgxTree sample with selection and load-on-demand node"; + this.dependencies = [{ + import: ["IgxTreeModule", "IgxIconModule", "IgxTooltipModule"], + from: "<%=igxPackage%>" + }]; + } +} +module.exports = new IgxComboTemplate(); diff --git a/packages/igx-templates/igx-ts-legacy/tree/index.ts b/packages/igx-templates/igx-ts-legacy/tree/index.ts new file mode 100644 index 000000000..10759f1c7 --- /dev/null +++ b/packages/igx-templates/igx-ts-legacy/tree/index.ts @@ -0,0 +1,14 @@ +import { BaseComponent } from "@igniteui/cli-core"; + +class IgxComboComponent extends BaseComponent { + /** + * + */ + constructor() { + super(__dirname); + this.name = "Tree"; + this.group = "Grids & Lists"; + this.description = `visualize hierarchical data in beautiful and easy-to-navigate tree-view.`; + } +} +module.exports = new IgxComboComponent(); diff --git a/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 625a0f81c..91d206182 100644 --- a/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ NoopAnimationsModule, IgxAccordionModule, IgxSwitchModule ] + imports: [NoopAnimationsModule, IgxAccordionModule, IgxSwitchModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.ts index e3436b13a..a04710827 100644 --- a/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/accordion/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,9 +1,29 @@ import { Component } from '@angular/core'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { + IgxSwitchComponent, + IgxAccordionComponent, + IgxExpansionPanelComponent, + IgxExpansionPanelHeaderComponent, + IgxExpansionPanelTitleDirective, + IgxExpansionPanelBodyComponent, + } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxSwitchComponent, + ReactiveFormsModule, + FormsModule, + IgxAccordionComponent, + IgxExpansionPanelComponent, + IgxExpansionPanelHeaderComponent, + IgxExpansionPanelTitleDirective, + IgxExpansionPanelBodyComponent, + ], }) export class <%=ClassName%>Component { public singleBranchExpand = false; diff --git a/packages/igx-templates/igx-ts/accordion/default/index.ts b/packages/igx-templates/igx-ts/accordion/default/index.ts index be4e6afc5..65d4a5d48 100644 --- a/packages/igx-templates/igx-ts/accordion/default/index.ts +++ b/packages/igx-templates/igx-ts/accordion/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxAccordionTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxAccordionTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Accordion"; this.description = "Basic IgxAccordion sample"; - this.dependencies = [{ - import: ["IgxAccordionModule", "IgxSwitchModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxAccordionTemplate(); diff --git a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts index 9857e63cb..17811aa40 100644 --- a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -10,8 +10,8 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component, <%=ClassName%>PipeStartsWith], - imports: [FormsModule, IgxDropDownModule, IgxAutocompleteModule, NoopAnimationsModule, IgxInputGroupModule] + imports: [FormsModule, IgxDropDownModule, IgxAutocompleteModule, NoopAnimationsModule, + IgxInputGroupModule, <%=ClassName%>Component, <%=ClassName%>PipeStartsWith] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts index bbca5266b..2455aac62 100644 --- a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,33 @@ -import { Component, Pipe, PipeTransform } from '@angular/core'; +import { Component, Pipe, PipeTransform, forwardRef } from '@angular/core'; import { Towns } from './towns-data'; +import { NgFor } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { + IgxInputGroupComponent, + IgxLabelDirective, + IgxInputDirective, + IgxAutocompleteDirective, + IgxDropDownComponent, + IgxDropDownItemComponent, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + ReactiveFormsModule, + FormsModule, + IgxInputGroupComponent, + IgxLabelDirective, + IgxInputDirective, + IgxAutocompleteDirective, + IgxDropDownComponent, + NgFor, + IgxDropDownItemComponent, + forwardRef(() => <%=ClassName%>PipeStartsWith), + ], }) export class <%=ClassName%>Component { public towns: string[]; @@ -15,7 +38,7 @@ export class <%=ClassName%>Component { } } -@Pipe({ name: '<%=camelCaseName%>StartsWith' }) +@Pipe({ standalone: true, name: '<%=camelCaseName%>StartsWith' }) export class <%=ClassName%>PipeStartsWith implements PipeTransform { public transform(collection: string[], term = '') { return collection.filter(item => item.toLowerCase().startsWith(term.trim().toLowerCase())); diff --git a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/index.ts b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/index.ts index a8d5756e0..c1dd54166 100644 --- a/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/index.ts +++ b/packages/igx-templates/igx-ts/autocomplete/autocomplete-custom/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { @@ -10,16 +11,7 @@ class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Simple Autocomplete"; this.description = "Simple IgxAutocomplete"; - this.dependencies = [{ - import: ["IgxAutocompleteModule", "IgxDropDownModule", "IgxInputGroupModule"], - from: "<%=igxPackage%>" - }, { - import: ["FormsModule"], - from: "@angular/forms" - }, { - declare: ["<%=ClassName%>PipeStartsWith"], - from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxAutocompleteTemplate(); diff --git a/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts index ec23b5d31..c7b023aaa 100644 --- a/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/files/src/app/__path__/__filePrefix__.component.ts @@ -1,11 +1,42 @@ -import { Component, Pipe, PipeTransform, ViewChild } from '@angular/core'; -import { IgxToastComponent, ISelectionEventArgs, PositionSettings, HorizontalAlignment, VerticalAlignment } from '<%=igxPackage%>'; +import { Component, Pipe, PipeTransform, ViewChild, forwardRef } from '@angular/core'; +import { + IgxToastComponent, + ISelectionEventArgs, + PositionSettings, + HorizontalAlignment, + VerticalAlignment, + IgxAutocompleteDirective, + IgxDropDownComponent, + IgxDropDownGroupComponent, + IgxDropDownItemComponent, + IgxInputDirective, + IgxInputGroupComponent, + IgxLabelDirective, +} from '<%=igxPackage%>'; import { Region, Town, townsExtended } from './towns-data-extended'; +import { NgFor } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxInputGroupComponent, + IgxLabelDirective, + ReactiveFormsModule, + IgxInputDirective, + IgxAutocompleteDirective, + FormsModule, + IgxDropDownComponent, + NgFor, + IgxDropDownGroupComponent, + IgxDropDownItemComponent, + IgxToastComponent, + forwardRef(() => <%=ClassName%>PipeStartsWith), + forwardRef(() => <%=ClassName%>RegionContains) + ] }) export class <%=ClassName%>Component { public regions!: Region[]; @@ -35,14 +66,14 @@ export class <%=ClassName%>Component { } } -@Pipe({ name: '<%=camelCaseName%>StartsWith' }) +@Pipe({ standalone: true, name: '<%=camelCaseName%>StartsWith' }) export class <%=ClassName%>PipeStartsWith implements PipeTransform { public transform(collection: Town[], term = '') { return collection.filter(item => item.name.toLowerCase().startsWith(term.trim().toLowerCase())); } } -@Pipe({ name: '<%=camelCaseName%>RegionContains' }) +@Pipe({ standalone: true, name: '<%=camelCaseName%>RegionContains' }) export class <%=ClassName%>RegionContains implements PipeTransform { transform(regions: Region[], term = '') { return this.filterRegions(regions, term); diff --git a/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/index.ts b/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/index.ts index e42bbb87d..9608387f9 100644 --- a/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/index.ts +++ b/packages/igx-templates/igx-ts/autocomplete/autocomplete-extended/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { @@ -10,19 +11,7 @@ class IgxAutocompleteTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Enhanced Autocomplete"; this.description = "IgxAutocomplete with enhanced groups"; - this.dependencies = [{ - import: ["IgxAutocompleteModule", "IgxDropDownModule", "IgxInputGroupModule", "IgxToastModule"], - from: "<%=igxPackage%>" - }, { - import: ["FormsModule"], - from: "@angular/forms" - }, { - declare: ["<%=ClassName%>PipeStartsWith"], - from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" - }, { - declare: ["<%=ClassName%>RegionContains"], - from: "./src/app/<%=path%>/<%=filePrefix%>.component.ts" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxAutocompleteTemplate(); diff --git a/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts index c024b58a6..54e498899 100644 --- a/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxBulletGraphModule, NoopAnimationsModule] + imports: [IgxBulletGraphModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts index 11bfab0c4..f1c6fee38 100644 --- a/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/bullet-graph/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,12 +1,23 @@ - -import { AfterViewInit, Component, ViewEncapsulation, ViewChild } from '@angular/core'; -import { IgxBulletGraphComponent, IgxLinearGraphRangeComponent } from 'igniteui-angular-gauges'; +import { + AfterViewInit, + Component, + ViewEncapsulation, + ViewChild, + } from '@angular/core'; + import { IgxButtonDirective, IgxLayoutDirective } from '<%=igxPackage%>'; + import { + IgxBulletGraphComponent, + IgxLinearGraphRangeComponent, + IgxBulletGraphCoreModule, + } from 'igniteui-angular-gauges'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [IgxLayoutDirective, IgxButtonDirective, IgxBulletGraphCoreModule] }) export class <%=ClassName%>Component implements AfterViewInit { @ViewChild('bulletGraph', { static: true }) diff --git a/packages/igx-templates/igx-ts/bullet-graph/default/index.ts b/packages/igx-templates/igx-ts/bullet-graph/default/index.ts index 20da84643..89def5b41 100644 --- a/packages/igx-templates/igx-ts/bullet-graph/default/index.ts +++ b/packages/igx-templates/igx-ts/bullet-graph/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxBulletGraphTemplate extends IgniteUIForAngularTemplate { @@ -10,11 +11,7 @@ class IgxBulletGraphTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Bullet Graph"; this.description = "IgxBulletGraph with different animations."; - this.dependencies = [{ - import: ["IgxBulletGraphModule"], - from: "igniteui-angular-gauges" - }]; - this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0"]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0", IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxBulletGraphTemplate(); diff --git a/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts index bec8b5392..e57589047 100644 --- a/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxCalendarModule, NoopAnimationsModule] + imports: [IgxCalendarModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.ts index 7b07c7f2b..76ee8eca4 100644 --- a/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/calendar/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,9 +1,12 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { IgxLayoutDirective, IgxCalendarComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [IgxLayoutDirective, IgxCalendarComponent] }) export class <%=ClassName%>Component { } diff --git a/packages/igx-templates/igx-ts/calendar/default/index.ts b/packages/igx-templates/igx-ts/calendar/default/index.ts index 6e826d6f6..324d43ad7 100644 --- a/packages/igx-templates/igx-ts/calendar/default/index.ts +++ b/packages/igx-templates/igx-ts/calendar/default/index.ts @@ -1,5 +1,6 @@ import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; class IgxCalendarTemplate extends IgniteUIForAngularTemplate { private userExtraConfiguration: {} = {}; @@ -12,10 +13,7 @@ class IgxCalendarTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Calendar"; this.description = "IgxCalendar with single selection"; - this.dependencies = [ - { import: "IgxCalendarModule", from: "<%=igxPackage%>" } - ]; - + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; this.hasExtraConfiguration = true; } diff --git a/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts index e3cfd8396..34d38cd59 100644 --- a/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxCarouselModule] + imports: [NoopAnimationsModule, IgxCarouselModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.ts index 1094ac4b0..6600e47fe 100644 --- a/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/carousel/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,12 +1,15 @@ import { Component, OnInit } from '@angular/core'; +import { NgFor } from '@angular/common'; +import { IgxCarouselComponent, IgxSlideComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxCarouselComponent, NgFor, IgxSlideComponent] }) export class <%=ClassName%>Component implements OnInit { - public slides: Slide[] = []; public interval = 3000; public pause = true; diff --git a/packages/igx-templates/igx-ts/carousel/default/index.ts b/packages/igx-templates/igx-ts/carousel/default/index.ts index 6a65482e9..acc432363 100644 --- a/packages/igx-templates/igx-ts/carousel/default/index.ts +++ b/packages/igx-templates/igx-ts/carousel/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxCarouselTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxCarouselTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Carousel"; this.description = "basic IgxCarousel"; - this.dependencies = [ - { import: "IgxCarouselModule", from: "<%=igxPackage%>" }, - { import: "CommonModule", from: "@angular/common"} - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxCarouselTemplate(); diff --git a/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 286b7463c..0925f3a73 100644 --- a/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [FormsModule, IgxCategoryChartModule] + imports: [FormsModule, IgxCategoryChartModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts index 10a6895aa..410c6ff52 100644 --- a/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/category-chart/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,15 +1,18 @@ import { Component } from '@angular/core'; -import { CategoryChartType } from 'igniteui-angular-charts'; +import { CategoryChartType, IgxCategoryChartModule } from 'igniteui-angular-charts'; +import { FormsModule } from '@angular/forms'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [FormsModule, IgxCategoryChartModule] }) export class <%=ClassName%>Component { public chartType = CategoryChartType.Auto; - data = [ + public data = [ { CountryName: 'China', Pop1995: 1216, Pop2005: 1297, }, { CountryName: 'India', Pop1995: 920, Pop2005: 1090, }, { CountryName: 'United States', Pop1995: 266, Pop2005: 295, }, diff --git a/packages/igx-templates/igx-ts/category-chart/default/index.ts b/packages/igx-templates/igx-ts/category-chart/default/index.ts index 08d525404..3661f7df4 100644 --- a/packages/igx-templates/igx-ts/category-chart/default/index.ts +++ b/packages/igx-templates/igx-ts/category-chart/default/index.ts @@ -10,10 +10,6 @@ class IgxCategoryChartTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Category Chart"; this.description = "basic category chart with chart type selector."; - this.dependencies = [ - { import: "IgxCategoryChartModule", from: "igniteui-angular-charts" }, - { import: "FormsModule", from: "@angular/forms" } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 131fff423..650759d7e 100644 --- a/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxChipsModule] + imports: [NoopAnimationsModule, IgxChipsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.ts index e54ac07dd..1b80dc971 100644 --- a/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/chip/default/files/src/app/__path__/__filePrefix__.component.ts @@ -8,8 +8,14 @@ import { IgxDropDownComponent, ISelectionEventArgs, OverlaySettings, - VerticalAlignment + VerticalAlignment, + IgxLayoutDirective, + IgxChipComponent, + IgxButtonDirective, + IgxDropDownItemNavigationDirective, + IgxDropDownItemComponent, } from '<%=igxPackage%>'; +import { NgFor } from '@angular/common'; interface NamedEntry { id: string; @@ -19,11 +25,20 @@ interface NamedEntry { @Component({ selector: 'app-<%=filePrefix%>', styleUrls: ['./<%=filePrefix%>.component.scss'], - templateUrl: './<%=filePrefix%>.component.html' + templateUrl: './<%=filePrefix%>.component.html', + standalone: true, + imports: [ + IgxLayoutDirective, + IgxChipsAreaComponent, + NgFor, + IgxChipComponent, + IgxButtonDirective, + IgxDropDownItemNavigationDirective, + IgxDropDownComponent, + IgxDropDownItemComponent, + ] }) - export class <%=ClassName%>Component { - public dropDownList: NamedEntry[] = [ { id: '1', diff --git a/packages/igx-templates/igx-ts/chip/default/index.ts b/packages/igx-templates/igx-ts/chip/default/index.ts index 6f39ba554..ee9760591 100644 --- a/packages/igx-templates/igx-ts/chip/default/index.ts +++ b/packages/igx-templates/igx-ts/chip/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxChipTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxChipTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Chip"; this.description = "basic IgxChip"; - this.dependencies = [{ - import: ["IgxButtonModule", "IgxChipsModule", "IgxDropDownModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxChipTemplate(); diff --git a/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 02a3a899b..9a43321dc 100644 --- a/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxComboModule, NoopAnimationsModule] + imports: [IgxComboModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.ts index 5e244c162..16110ac22 100644 --- a/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/combo/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,12 +1,24 @@ import { Component } from '@angular/core'; import { localData, State } from './local-data'; +import { + IgxComboComponent, + IgxComboItemDirective, + IgxComboHeaderDirective, + IgxComboFooterDirective, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxComboComponent, + IgxComboItemDirective, + IgxComboHeaderDirective, + IgxComboFooterDirective, + ] }) - export class <%=ClassName%>Component { public localData: State[] = localData; } diff --git a/packages/igx-templates/igx-ts/combo/default/index.ts b/packages/igx-templates/igx-ts/combo/default/index.ts index 636b680ce..a093a9be5 100644 --- a/packages/igx-templates/igx-ts/combo/default/index.ts +++ b/packages/igx-templates/igx-ts/combo/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxComboTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxComboTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Combo"; this.description = "basic IgxCombo with templating"; - this.dependencies = [{ - import: ["IgxComboModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxComboTemplate(); diff --git a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts index 28ab5bb47..b12e87aa7 100644 --- a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -19,7 +19,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], + declarations: [], imports: [ FormsModule, BrowserAnimationsModule, @@ -31,7 +31,8 @@ describe('<%=ClassName%>Component', () => { IgxSwitchModule, IgxInputGroupModule, IgxSparklineModule, - IgxSparklineCoreModule + IgxSparklineCoreModule, + <%=ClassName%>Component ] }) .compileComponents(); diff --git a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts index e773535b8..cbad7b657 100644 --- a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -6,8 +6,8 @@ import { Inject, OnDestroy, OnInit, - ViewChild - } from '@angular/core'; + ViewChild, +} from '@angular/core'; import { AbsolutePosition, CellType, @@ -18,15 +18,48 @@ import { IgxStringFilteringOperand, IgxSummaryResult, OverlayClosingEventArgs, - OverlaySettings - } from '<%=igxPackage%>'; -import { SparklineDisplayType } from 'igniteui-angular-charts'; + OverlaySettings, + IgxSwitchComponent, + IgxInputGroupComponent, + IgxInputDirective, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxAvatarComponent, + IgxBadgeComponent, + IgxCircularProgressBarComponent, +} from '<%=igxPackage%>'; +import { + SparklineDisplayType, + IgxSparklineCoreModule, +} from 'igniteui-angular-charts'; import { Athlete, AthletesData, SpeedEntry } from './services/data'; +import { NgIf, NgClass, NgFor, DecimalPipe } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxSwitchComponent, + ReactiveFormsModule, + FormsModule, + IgxInputGroupComponent, + IgxInputDirective, + IgxGridComponent, + IgxPaginatorComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + NgIf, + IgxAvatarComponent, + IgxBadgeComponent, + IgxSparklineCoreModule, + IgxCircularProgressBarComponent, + NgClass, + NgFor, + DecimalPipe, + ], }) export class <%=ClassName%>Component implements OnInit, OnDestroy, AfterViewInit { @ViewChild('grid1', { read: IgxGridComponent, static: true }) diff --git a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/index.ts b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/index.ts index 78b698654..21a3add96 100644 --- a/packages/igx-templates/igx-ts/custom-templates/awesome-grid/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/awesome-grid/index.ts @@ -9,29 +9,6 @@ class IgxGridAwesomeTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "Awesome Grid"; this.description = "Awesome IgxGrid"; - this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" }, - { - import: [ - "IgxProgressBarModule", - "IgxIconModule", - "IgxAvatarModule", - "IgxBadgeModule", - "IgxSwitchModule", - "IgxInputGroupModule", - "IgxButtonModule" - ], - from: "<%=igxPackage%>" - }, - { - import: [ - "IgxSparklineModule", - "IgxSparklineCoreModule" - ], - from: "igniteui-angular-charts" - }, - { import: "FormsModule", from: "@angular/forms" } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts index b06c097a2..55f3ed9c2 100644 --- a/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -25,7 +25,6 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component ], imports: [ FormsModule, BrowserAnimationsModule, @@ -41,7 +40,8 @@ describe('<%=ClassName%>Component', () => { IgxToggleModule, IgxCheckboxModule, IgxSparklineModule, - IgxSparklineCoreModule + IgxSparklineCoreModule, + <%=ClassName%>Component ], providers: [IgxExcelExporterService, IgxCsvExporterService] }) diff --git a/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts index 67be3deb9..abffcb7c4 100644 --- a/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/crm-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -4,7 +4,7 @@ import { AfterViewInit, QueryList, ViewChild, - ElementRef + ElementRef, } from '@angular/core'; import { @@ -23,14 +23,59 @@ import { IgxToggleDirective, OverlaySettings, PositionSettings, - VerticalAlignment} from '<%=igxPackage%>'; -import { SparklineDisplayType } from 'igniteui-angular-charts'; + VerticalAlignment, + IgxGridToolbarComponent, + IgxGridToolbarTitleComponent, + IgxInputGroupComponent, + IgxPrefixDirective, + IgxIconComponent, + IgxInputDirective, + IgxSuffixDirective, + IgxButtonDirective, + IgxRippleDirective, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarPinningComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxAvatarComponent, + IgxLinearProgressBarComponent, +} from '<%=igxPackage%>'; +import { SparklineDisplayType, IgxSparklineCoreModule } from 'igniteui-angular-charts'; import { DATA, DealsDescriptor, Employee } from './data'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { NgIf } from '@angular/common'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxGridComponent, + IgxGridToolbarComponent, + IgxGridToolbarTitleComponent, + IgxInputGroupComponent, + IgxPrefixDirective, + NgIf, + IgxIconComponent, + ReactiveFormsModule, + IgxInputDirective, + FormsModule, + IgxSuffixDirective, + IgxButtonDirective, + IgxRippleDirective, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarPinningComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxAvatarComponent, + IgxLinearProgressBarComponent, + IgxSparklineCoreModule, + ] }) export class <%=ClassName%>Component implements OnInit, AfterViewInit { diff --git a/packages/igx-templates/igx-ts/custom-templates/crm-grid/index.ts b/packages/igx-templates/igx-ts/custom-templates/crm-grid/index.ts index a0aa32130..779bcc55c 100644 --- a/packages/igx-templates/igx-ts/custom-templates/crm-grid/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/crm-grid/index.ts @@ -9,38 +9,6 @@ class IgxGridCRMTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "CRM Grid"; this.description = "CRM IgxGrid"; - this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" }, - { - provide: [ - "IgxCsvExporterService", - "IgxExcelExporterService" - ], - from: "<%=igxPackage%>" }, - { - import: [ - "IgxAvatarModule", - "IgxBadgeModule", - "IgxButtonModule", - "IgxIconModule", - "IgxInputGroupModule", - "IgxProgressBarModule", - "IgxRippleModule", - "IgxSwitchModule", - "IgxToggleModule", - "IgxCheckboxModule" - ], - from: "<%=igxPackage%>" - }, - { - import: [ - "IgxSparklineModule", - "IgxSparklineCoreModule" - ], - from: "igniteui-angular-charts" - }, - { import: "FormsModule", from: "@angular/forms" } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts index c0c310799..462cdd01e 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -11,10 +11,18 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component ], - imports: [ FormsModule, BrowserAnimationsModule, - IgxGridModule, IgxDialogModule, IgxCategoryChartModule, - IgxButtonModule, IgxSwitchModule, IgxSliderModule, IgxCheckboxModule ] + imports: [ + FormsModule, + BrowserAnimationsModule, + IgxGridModule, + IgxDialogModule, + IgxCategoryChartModule, + IgxButtonModule, + IgxSwitchModule, + IgxSliderModule, + IgxCheckboxModule, + <%=ClassName%>Component, + ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts index 885c64e1d..e5411089c 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -1,4 +1,12 @@ -import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { + AfterViewInit, + ChangeDetectorRef, + Component, + ElementRef, + OnDestroy, + OnInit, + ViewChild, +} from '@angular/core'; import { CellType, DefaultSortingStrategy, @@ -11,19 +19,70 @@ import { IgxGridComponent, IgxSliderComponent, IRowSelectionEventArgs, - SortingDirection + SortingDirection, + IgxSwitchComponent, + IgxGridToolbarComponent, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarPinningComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellEditorTemplateDirective, + IgxSelectComponent, + IgxFocusDirective, + IgxSelectItemComponent, + IgxCellTemplateDirective, + IgxIconComponent, + IgxButtonDirective, + IgxDialogTitleDirective, + IgxDialogActionsDirective, } from '<%=igxPackage%>'; -import { CategoryChartType, IgxCategoryChartComponent } from 'igniteui-angular-charts'; +import { + CategoryChartType, + IgxCategoryChartComponent, + IgxCategoryChartCoreModule, +} from 'igniteui-angular-charts'; import { timer } from 'rxjs'; import { debounce } from 'rxjs/operators'; import { LocalDataService } from './localData.service'; import { Contract, REGIONS } from './localData/financialData'; +import { NgIf, NgFor, CurrencyPipe } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ providers: [LocalDataService], selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxSwitchComponent, + ReactiveFormsModule, + FormsModule, + IgxSliderComponent, + IgxButtonGroupComponent, + NgIf, + IgxGridComponent, + IgxGridToolbarComponent, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarPinningComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellEditorTemplateDirective, + IgxSelectComponent, + IgxFocusDirective, + NgFor, + IgxSelectItemComponent, + IgxCellTemplateDirective, + IgxIconComponent, + IgxButtonDirective, + IgxDialogComponent, + IgxDialogTitleDirective, + IgxCategoryChartCoreModule, + IgxDialogActionsDirective, + CurrencyPipe, + ] }) export class <%=ClassName%>Component implements OnInit, AfterViewInit, OnDestroy { @ViewChild('grid1', { static: true }) public grid1!: IgxGridComponent; diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/index.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/index.ts index 4557c1c11..4bd912ea8 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-grid/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-grid/index.ts @@ -9,26 +9,6 @@ class IgxFinTechGridTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "FinTech Grid"; this.description = "Grid with simulated high-frequency data feed"; - this.dependencies = [ - { import: "IgxCategoryChartModule", from: "igniteui-angular-charts" }, - { provide: "IgxExcelExporterService", from: "<%=igxPackage%>" }, - { - import: [ - "IgxButtonGroupModule", - "IgxDialogModule", - "IgxFocusModule", - "IgxGridModule", - "IgxIconModule", - "IgxRippleModule", - "IgxSelectModule", - "IgxSliderModule", - "IgxSwitchModule", - "IgxToggleModule" - ], - from: "<%=igxPackage%>" - }, - { import: "FormsModule", from: "@angular/forms" } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts index add80e6fc..caf913ecc 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -11,7 +11,6 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component, <%=ClassName%>TreeGridGroupingPipe ], imports: [ FormsModule, BrowserAnimationsModule, @@ -19,7 +18,10 @@ describe('<%=ClassName%>Component', () => { IgxCheckboxModule, IgxButtonModule, IgxSliderModule, - IgxSwitchModule] + IgxSwitchModule, + <%=ClassName%>Component, + <%=ClassName%>TreeGridGroupingPipe + ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts index 42ba02d9c..ead426ff6 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/__filePrefix__.component.ts @@ -1,6 +1,11 @@ import { Component, - AfterViewInit, ElementRef, OnDestroy, OnInit, ViewChild, NgZone + AfterViewInit, + ElementRef, + OnDestroy, + OnInit, + ViewChild, + NgZone, } from '@angular/core'; import { AbsoluteScrollStrategy, @@ -15,18 +20,49 @@ import { OverlaySettings, PositionSettings, SortingDirection, - VerticalAlignment + VerticalAlignment, + IgxSwitchComponent, + IgxGridToolbarComponent, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxIconComponent, + IgxTreeGridGroupingPipe, } from '<%=igxPackage%>'; import { timer } from 'rxjs'; import { debounce } from 'rxjs/operators'; import { LocalDataService } from './localData.service'; -import { ITreeGridAggregation } from './tree-grid-grouping.pipe'; +import { ITreeGridAggregation, <%=ClassName%>TreeGridGroupingPipe } from './tree-grid-grouping.pipe'; +import { NgIf, CurrencyPipe } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ providers: [LocalDataService], selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxSwitchComponent, + ReactiveFormsModule, + FormsModule, + IgxSliderComponent, + IgxButtonGroupComponent, + NgIf, + IgxTreeGridComponent, + IgxGridToolbarComponent, + IgxGridToolbarActionsComponent, + IgxGridToolbarHidingComponent, + IgxGridToolbarExporterComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxIconComponent, + CurrencyPipe, + IgxTreeGridGroupingPipe, + <%=ClassName%>TreeGridGroupingPipe + ] }) export class <%=ClassName%>Component implements OnInit, AfterViewInit, OnDestroy { @ViewChild('grid1', { static: true }) public grid1!: IgxTreeGridComponent; diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts index 052aa4866..fbca8f4d6 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/files/src/app/__path__/tree-grid-grouping.pipe.ts @@ -13,7 +13,8 @@ export class ITreeGridAggregation { @Pipe({ name: 'treeGridGrouping', - pure: true + pure: true, + standalone: true }) export class <%=ClassName%>TreeGridGroupingPipe implements PipeTransform { diff --git a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/index.ts b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/index.ts index 4d4b286cb..a1831524a 100644 --- a/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/fintech-tree-grid/index.ts @@ -9,22 +9,6 @@ class IgxTreeGridFinTechTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "FinTech Tree Grid"; this.description = "This sample demonstrates the TreeGrid handling thousands of updates per second."; - this.dependencies = [ - { import: "IgxTreeGridModule", from: "<%=igxPackage%>" }, - { provide: "IgxExcelExporterService", from: "<%=igxPackage%>" }, - { - import: [ - "IgxButtonGroupModule", - "IgxCheckboxModule", - "IgxIconModule", - "IgxSwitchModule", - "IgxSliderModule" - ], - from: "<%=igxPackage%>" - }, - { import: "FormsModule", from: "@angular/forms" }, - { declare: "<%=ClassName%>TreeGridGroupingPipe", from: "./src/app/<%=path%>/tree-grid-grouping.pipe.ts" } - ]; } } module.exports = new IgxTreeGridFinTechTemplate(); diff --git a/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts index 573811259..976c67ef1 100644 --- a/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -1,5 +1,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; +import { RouterTestingModule } from '@angular/router/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { <%=ClassName%>Component } from './<%=filePrefix%>.component'; import { IgxInputGroupModule, IgxIconModule, IgxButtonModule, IgxRippleModule } from '<%=igxPackage%>'; @@ -17,8 +18,21 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ ReactiveFormsModule, NoopAnimationsModule, IgxInputGroupModule, IgxIconModule, IgxButtonModule, IgxRippleModule ] + imports: [ + ReactiveFormsModule, + RouterTestingModule, + NoopAnimationsModule, + IgxInputGroupModule, + IgxButtonModule, + IgxIconModule, + IgxRippleModule, + <%=ClassName%>Component, + ], + providers: [ + { provide: ExternalAuthService, useValue: extAuthSpy }, + { provide: AuthenticationService, useValue: authSpy }, + { provide: UserService, useValue: userServSpy }, + ], }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts index 15d96a428..2aafcb9af 100644 --- a/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/login/files/src/app/__path__/__filePrefix__.component.ts @@ -1,13 +1,39 @@ -import {Component} from '@angular/core'; -import { FormBuilder, Validators, FormGroup } from '@angular/forms'; +import { Component, EventEmitter, Output } from '@angular/core'; +import { + FormBuilder, + FormGroup, + Validators, + ReactiveFormsModule, +} from '@angular/forms'; +import { NgIf } from '@angular/common'; +import { + IgxInputGroupComponent, + IgxPrefixDirective, + IgxIconComponent, + IgxLabelDirective, + IgxInputDirective, + IgxButtonDirective, + IgxRippleDirective, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + ReactiveFormsModule, + IgxInputGroupComponent, + IgxPrefixDirective, + IgxIconComponent, + IgxLabelDirective, + IgxInputDirective, + IgxButtonDirective, + IgxRippleDirective, + NgIf + ] }) - - export class <%=ClassName%>Component { +export class <%=ClassName%>Component { public loginForm: FormGroup; public registrationForm: FormGroup; public showLogin = true; diff --git a/packages/igx-templates/igx-ts/custom-templates/login/index.ts b/packages/igx-templates/igx-ts/custom-templates/login/index.ts index caa1144d1..4823ab791 100644 --- a/packages/igx-templates/igx-ts/custom-templates/login/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/login/index.ts @@ -9,13 +9,6 @@ class IgxLoginTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "Login view"; this.description = "Login view"; - this.dependencies = [{ - import: ["IgxInputGroupModule", "IgxIconModule", "IgxButtonModule", "IgxRippleModule"], - from: "<%=igxPackage%>" - }, { - import: ["ReactiveFormsModule"], - from: "@angular/forms" - }]; } } module.exports = new IgxLoginTemplate(); diff --git a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts index 794e887cb..6c1d2cbee 100644 --- a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -13,13 +13,13 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], imports: [ BrowserAnimationsModule, IgxButtonModule, IgxCardModule, IgxExpansionPanelModule, - IgxIconModule + IgxIconModule, + <%=ClassName%>Component ] }) .compileComponents(); diff --git a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts index 40a88cacc..26a7da5f5 100644 --- a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/files/src/app/__path__/__filePrefix__.component.ts @@ -1,14 +1,37 @@ import { Component, ViewChild } from '@angular/core'; -import { IgxExpansionPanelComponent } from '<%=igxPackage%>'; +import { + IgxExpansionPanelComponent, + IgxCardComponent, + IgxCardHeaderComponent, + IgxCardContentDirective, + IgxIconComponent, + IgxButtonDirective, + IgxRippleDirective, + IgxExpansionPanelBodyComponent, +} from '<%=igxPackage%>'; import { data as weatherData } from './weather-data'; +import { NgIf, NgFor, NgClass } from '@angular/common'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxCardComponent, + IgxCardHeaderComponent, + IgxCardContentDirective, + NgIf, + IgxIconComponent, + IgxButtonDirective, + IgxRippleDirective, + IgxExpansionPanelComponent, + IgxExpansionPanelBodyComponent, + NgFor, + NgClass + ] }) export class <%=ClassName%>Component { - @ViewChild(IgxExpansionPanelComponent, { static: true }) public panel!: IgxExpansionPanelComponent; public data = weatherData; diff --git a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/index.ts b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/index.ts index 858aa1906..21c81d3a4 100644 --- a/packages/igx-templates/igx-ts/custom-templates/weather-forecast/index.ts +++ b/packages/igx-templates/igx-ts/custom-templates/weather-forecast/index.ts @@ -9,17 +9,6 @@ class IgxWeatherForecastTemplate extends IgniteUIForAngularTemplate { this.listInCustomTemplates = true; this.name = "Weather Forecast"; this.description = "Weather Forecast"; - this.dependencies = [ - { - import: [ - "IgxButtonModule", - "IgxCardModule", - "IgxExpansionPanelModule", - "IgxIconModule" - ], - from: "<%=igxPackage%>" - } - ]; } } module.exports = new IgxWeatherForecastTemplate(); diff --git a/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 5bb78a1f4..7ddb38e4a 100644 --- a/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxDatePickerModule, NoopAnimationsModule] + imports: [IgxDatePickerModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts index 34eb87be7..808769b59 100644 --- a/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/date-picker/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,13 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { IgxLayoutDirective, IgxDatePickerComponent } from '<%=igxPackage%>';; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], encapsulation: ViewEncapsulation.Emulated, + standalone: true, + imports: [IgxLayoutDirective, IgxDatePickerComponent], }) export class <%=ClassName%>Component { public today: Date = new Date(Date.now()); diff --git a/packages/igx-templates/igx-ts/date-picker/default/index.ts b/packages/igx-templates/igx-ts/date-picker/default/index.ts index ffd5a458c..46009df06 100644 --- a/packages/igx-templates/igx-ts/date-picker/default/index.ts +++ b/packages/igx-templates/igx-ts/date-picker/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxDatePickerTemplate extends IgniteUIForAngularTemplate { @@ -10,9 +11,7 @@ class IgxDatePickerTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Date Picker"; this.description = "basic IgxDatePicker"; - this.dependencies = [ - { import: "IgxDatePickerModule", from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxDatePickerTemplate(); diff --git a/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts index a211d81af..eae194593 100644 --- a/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ IgxDialogModule, NoopAnimationsModule] + imports: [IgxDialogModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.ts index c589c6b80..d59543b7b 100644 --- a/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/dialog/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,12 +1,13 @@ import { Component } from '@angular/core'; -import { IDialogEventArgs } from '<%=igxPackage%>'; +import { IDialogEventArgs, IgxButtonDirective, IgxDialogComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxButtonDirective, IgxDialogComponent] }) - export class <%=ClassName%>Component { dialogOKSelected(args: IDialogEventArgs) { args.dialog.close(); diff --git a/packages/igx-templates/igx-ts/dialog/default/index.ts b/packages/igx-templates/igx-ts/dialog/default/index.ts index c34b6a970..dd5e2ec25 100644 --- a/packages/igx-templates/igx-ts/dialog/default/index.ts +++ b/packages/igx-templates/igx-ts/dialog/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxDialogTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxDialogTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Dialog"; this.description = "Standart dialog template"; - this.dependencies = [{ - import: ["IgxDialogModule", "IgxButtonModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxDialogTemplate(); diff --git a/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 8746a1f72..a087f07c2 100644 --- a/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -12,9 +12,8 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [CommonModule, <%=ClassName%>Component], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts index cb7ada9dc..cdcdbba3d 100644 --- a/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/dock-manager/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,17 +1,21 @@ -import { Component } from '@angular/core'; +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { IgcDockManagerLayout, IgcDockManagerPaneType, IgcSplitPaneOrientation } from '<%=dockManagerPackage%>'; +import { defineCustomElements } from '<%=dockManagerPackage%>/loader'; + +defineCustomElements(); @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) export class <%=ClassName%>Component { - public layout: IgcDockManagerLayout = { rootPane: { type: IgcDockManagerPaneType.splitPane, diff --git a/packages/igx-templates/igx-ts/dock-manager/default/index.ts b/packages/igx-templates/igx-ts/dock-manager/default/index.ts index 9a65564e4..f50daf84b 100644 --- a/packages/igx-templates/igx-ts/dock-manager/default/index.ts +++ b/packages/igx-templates/igx-ts/dock-manager/default/index.ts @@ -12,9 +12,6 @@ class IgcDockManagerTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Dock Manager"; this.description = "basic IgcDockManager"; - this.dependencies = [ - { import: "<%=ClassName%>Module", from: "./src/app/<%=path%>/<%=filePrefix%>.module.ts" } - ]; // "igniteui-dockmanager@~1.0.0": this.packages = [ `${resolveIgxPackage(NPM_DOCK_MANAGER)}@~1.8.0` ]; } diff --git a/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 8b32a9e16..6ec06b1bc 100644 --- a/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ IgxDropDownModule, NoopAnimationsModule, IgxToggleModule] + imports: [IgxDropDownModule, NoopAnimationsModule, IgxToggleModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts index 971fcafeb..1f7569664 100644 --- a/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/dropdown/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,29 @@ import { Component } from '@angular/core'; import { Country, data } from './local-data'; +import { + IgxButtonDirective, + IgxRippleDirective, + IgxToggleActionDirective, + IgxDropDownItemNavigationDirective, + IgxDropDownComponent, + IgxDropDownItemComponent, +} from '<%=igxPackage%>'; +import { NgFor } from '@angular/common'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxButtonDirective, + IgxRippleDirective, + IgxToggleActionDirective, + IgxDropDownItemNavigationDirective, + IgxDropDownComponent, + NgFor, + IgxDropDownItemComponent, + ] }) export class <%=ClassName%>Component { diff --git a/packages/igx-templates/igx-ts/dropdown/default/index.ts b/packages/igx-templates/igx-ts/dropdown/default/index.ts index 32b406a78..4420c25c1 100644 --- a/packages/igx-templates/igx-ts/dropdown/default/index.ts +++ b/packages/igx-templates/igx-ts/dropdown/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxDropDownTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxDropDownTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Drop Down"; this.description = "Basic IgxDropDown sample"; - this.dependencies = [{ - import: ["IgxDropDownModule", "IgxButtonModule", "IgxToggleModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxDropDownTemplate(); diff --git a/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 3335976b7..edc0ea4fe 100644 --- a/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -8,8 +8,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxFinancialChartModule] + imports: [IgxFinancialChartModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts index a25543ed0..a2b565beb 100644 --- a/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/financial-chart/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,13 @@ import { Component } from '@angular/core'; import { AMZNData, Stock } from './data'; +import { IgxFinancialChartModule } from 'igniteui-angular-charts'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxFinancialChartModule] }) export class <%=ClassName%>Component { public data: Stock[] = AMZNData; diff --git a/packages/igx-templates/igx-ts/financial-chart/default/index.ts b/packages/igx-templates/igx-ts/financial-chart/default/index.ts index 88793ed42..eb49f8faf 100644 --- a/packages/igx-templates/igx-ts/financial-chart/default/index.ts +++ b/packages/igx-templates/igx-ts/financial-chart/default/index.ts @@ -9,9 +9,6 @@ class IgxFinancialChartTemplate extends IgniteUIForAngularTemplate { this.id = "financial-chart"; this.projectType = "igx-ts"; this.name = "Financial Chart"; - this.dependencies = [ - { import: "IgxFinancialChartModule", from: "igniteui-angular-charts" } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.spec.ts index 633df6792..1931e64d1 100644 --- a/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -7,8 +7,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxCarouselModule] + imports: [IgxCarouselModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.ts index e4f51fd68..f5337963e 100644 --- a/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/generate/files/src/app/__path__/__filePrefix__.component.ts @@ -4,6 +4,7 @@ import { Component } from '@angular/core'; selector: "<%=filePrefix%>", templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true }) export class <%=ClassName%>Component { title = '<%=name%>'; diff --git a/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts index b1c519d87..cb9e0e7e4 100644 --- a/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxGridModule] + imports: [NoopAnimationsModule, IgxGridModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.ts index e3548e985..99b674da6 100644 --- a/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,11 +1,13 @@ import { Component, OnInit } from '@angular/core'; -import { ColumnType } from '<%=igxPackage%>'; +import { ColumnType, IgxGridComponent, IgxPaginatorComponent } from '<%=igxPackage%>'; import { Employee, employeesData } from './localData'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxGridComponent, IgxPaginatorComponent] }) export class <%=ClassName%>Component implements OnInit { public localData: Employee[] = []; diff --git a/packages/igx-templates/igx-ts/grid/default/index.ts b/packages/igx-templates/igx-ts/grid/default/index.ts index 8e30ef60d..288cfa021 100644 --- a/packages/igx-templates/igx-ts/grid/default/index.ts +++ b/packages/igx-templates/igx-ts/grid/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxGridTemplate extends IgniteUIForAngularTemplate { @@ -10,9 +11,7 @@ class IgxGridTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Grid"; this.description = "basic IgxGrid"; - this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxGridTemplate(); diff --git a/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts index d14653f18..398ee4a37 100644 --- a/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -16,8 +16,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ FormsModule, NoopAnimationsModule, IgxDialogModule, IgxGridModule, IgxFocusModule, IgxButtonModule, IgxRippleModule ] + imports: [FormsModule, NoopAnimationsModule, IgxDialogModule, IgxGridModule, IgxFocusModule, IgxButtonModule, IgxRippleModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts index 53d44cd55..857774513 100644 --- a/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/grid/grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts @@ -1,11 +1,37 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { IgxDialogComponent, IgxGridComponent, State, Transaction, TransactionService } from '<%=igxPackage%>'; +import { + IgxDialogComponent, + IgxGridComponent, + State, + Transaction, + TransactionService, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxButtonDirective, + IgxCellEditorTemplateDirective, + IgxFocusDirective, + IgxRippleDirective, +} from '<%=igxPackage%>'; import { data, Product } from './data'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ selector: 'app-<%=filePrefix%>', styleUrls: ['./<%=filePrefix%>.component.scss'], - templateUrl: './<%=filePrefix%>.component.html' + templateUrl: './<%=filePrefix%>.component.html', + standalone: true, + imports: [ + IgxGridComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxButtonDirective, + IgxCellEditorTemplateDirective, + ReactiveFormsModule, + FormsModule, + IgxFocusDirective, + IgxRippleDirective, + IgxDialogComponent + ] }) export class <%=ClassName%>Component implements OnInit { @ViewChild('gridRowEditTransaction', { static: true, read: IgxGridComponent }) public grid!: IgxGridComponent; diff --git a/packages/igx-templates/igx-ts/grid/grid-batch-editing/index.ts b/packages/igx-templates/igx-ts/grid/grid-batch-editing/index.ts index 438c52269..e6285ff6c 100644 --- a/packages/igx-templates/igx-ts/grid/grid-batch-editing/index.ts +++ b/packages/igx-templates/igx-ts/grid/grid-batch-editing/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxGridBatchEditingTemplate extends IgniteUIForAngularTemplate { @@ -10,19 +11,7 @@ class IgxGridBatchEditingTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Grid Batch Editing"; this.description = "Sample IgxGrid with batch editing"; - this.dependencies = [ - { - import: [ - "IgxGridModule", - "IgxFocusModule", - "IgxButtonModule", - "IgxDialogModule", - "IgxRippleModule" - ], - from: "<%=igxPackage%>" - }, - { import: "FormsModule", from: "@angular/forms" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxGridBatchEditingTemplate(); diff --git a/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts index 29bec9fa9..51cd7e0d4 100644 --- a/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -10,8 +10,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule] + imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts index 5f3da949f..b7ead1864 100644 --- a/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/grid/grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -4,7 +4,8 @@ import { Employee, employeesData } from './localData'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true }) export class <%=ClassName%>Component implements OnInit { public localData: Employee[] = []; diff --git a/packages/igx-templates/igx-ts/grid/grid-custom/index.ts b/packages/igx-templates/igx-ts/grid/grid-custom/index.ts index 4fee15412..d3840c794 100644 --- a/packages/igx-templates/igx-ts/grid/grid-custom/index.ts +++ b/packages/igx-templates/igx-ts/grid/grid-custom/index.ts @@ -14,8 +14,26 @@ class IgxCustomGridTemplate extends IgniteUIForAngularTemplate { this.name = "Custom Grid"; this.description = "IgxGrid with optional features like sorting, filtering, editing, etc."; this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" }, - { import: "IgxCheckboxModule", from: "<%=igxPackage%>" } + { + import: "IgxGridComponent", + from: "<%=igxPackage%>", + standalone: true + }, + { + import: "IgxCheckboxComponent", + from: "<%=igxPackage%>", + standalone: true + }, + { + import: "IgxColumnComponent", + from: "<%=igxPackage%>", + standalone: true + }, + { + import: "DatePipe", + from: "@angular/common", + standalone: true + } ]; this.hasExtraConfiguration = true; @@ -95,7 +113,7 @@ class IgxCustomGridTemplate extends IgniteUIForAngularTemplate { break; case "Row Editing": gridFeatures.push(`[rowEditable]="true"`); - this.dependencies.push({ import: "IgxDatePickerModule", from: "<%=igxPackage%>" }); + this.dependencies.push({ import: "IgxDatePickerComponent", from: "<%=igxPackage%>" }); break; case "Row Selection": const gridFeatureText = `rowSelection="multiple"`; @@ -103,6 +121,11 @@ class IgxCustomGridTemplate extends IgniteUIForAngularTemplate { break; case "Paging": additionalElements.push(` `); + this.dependencies.push({ + standalone: true, + import: "IgxPaginatorComponent", + from: "<%=igxPackage%>" + }); break; case "Column Pinning": columnPinning = '[pinned]="true"'; @@ -154,6 +177,37 @@ class IgxCustomGridTemplate extends IgniteUIForAngularTemplate { selectedFeatures = `

Active Features: ${selectedFeatures}

`; } if (toolbarActions.length) { + this.dependencies = [ + ...this.dependencies, + ...[ + { + standalone: true, + import: "IgxGridToolbarComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarTitleComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarActionsComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarPinningComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarHidingComponent", + from: "<%=igxPackage%>" + } + ] + ]; + const parts = [ " ", " Employees", diff --git a/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts index 182602bbf..1fb490019 100644 --- a/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxGridModule] + imports: [NoopAnimationsModule, IgxGridModule, <%=ClassName%>Component] }).compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts index 6cef43d3f..8356a0cad 100644 --- a/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/grid/grid-summaries/files/src/app/__path__/__filePrefix__.component.ts @@ -1,12 +1,28 @@ import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { IgxDateSummaryOperand, IgxGridComponent, IgxSummaryResult } from '<%=igxPackage%>'; +import { + IgxDateSummaryOperand, + IgxGridComponent, + IgxSummaryResult, + IgxColumnComponent, + IgxCellHeaderTemplateDirective, + IgxIconComponent, + IgxPaginatorComponent, +} from '<%=igxPackage%>'; import { Employee, employeesData } from './localData'; @Component({ encapsulation: ViewEncapsulation.None, selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxGridComponent, + IgxColumnComponent, + IgxCellHeaderTemplateDirective, + IgxIconComponent, + IgxPaginatorComponent, + ] }) export class <%=ClassName%>Component implements OnInit { @ViewChild('sampleGrid', { static: true, read: IgxGridComponent }) diff --git a/packages/igx-templates/igx-ts/grid/grid-summaries/index.ts b/packages/igx-templates/igx-ts/grid/grid-summaries/index.ts index e61a236fd..8a80ed1e2 100644 --- a/packages/igx-templates/igx-ts/grid/grid-summaries/index.ts +++ b/packages/igx-templates/igx-ts/grid/grid-summaries/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxGridTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxGridTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Grid Summaries"; this.description = "Sample IgxGrid with summaries feature"; - this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" }, - { import: "IgxIconModule", from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxGridTemplate(); diff --git a/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts index 29bec9fa9..f951e21bf 100644 --- a/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -10,8 +10,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule] + imports: [FormsModule, BrowserAnimationsModule, IgxGridModule, IgxDatePickerModule, IgxCheckboxModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts index 21b594b48..4c5e476a7 100644 --- a/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/grid/multi-column-headers/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,13 @@ import { Component, OnInit } from '@angular/core'; import { Company, localData } from './localData'; +import { IgxGridComponent, IgxColumnComponent, IgxColumnGroupComponent, IgxPaginatorComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxGridComponent, IgxColumnComponent, IgxColumnGroupComponent, IgxPaginatorComponent] }) export class <%=ClassName%>Component implements OnInit { public localData: Company[] = []; diff --git a/packages/igx-templates/igx-ts/grid/multi-column-headers/index.ts b/packages/igx-templates/igx-ts/grid/multi-column-headers/index.ts index 2cf79b0d1..07a82df2b 100644 --- a/packages/igx-templates/igx-ts/grid/multi-column-headers/index.ts +++ b/packages/igx-templates/igx-ts/grid/multi-column-headers/index.ts @@ -1,5 +1,6 @@ import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; class IgxMultiColumnHeadersTemplate extends IgniteUIForAngularTemplate { private userExtraConfiguration: {} = {}; @@ -13,12 +14,7 @@ class IgxMultiColumnHeadersTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Multi Column Headers"; this.description = "IgxGrid with multiple header columns."; - this.dependencies = [ - { import: "IgxGridModule", from: "<%=igxPackage%>" }, - { import: "IgxCheckboxModule", from: "<%=igxPackage%>" }, - { import: "FormsModule", from: "@angular/forms" } - ]; - + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; this.hasExtraConfiguration = true; } diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 0c1f3c3e7..ffafd2f00 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component ], - imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + imports: [NoopAnimationsModule, IgxHierarchicalGridModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts index 4e326d0cd..7ccf09b6b 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,13 @@ import { Component } from '@angular/core'; import { ARTISTS, Artist } from './data'; +import { IgxHierarchicalGridComponent, IgxColumnComponent, IgxRowIslandComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxHierarchicalGridComponent, IgxColumnComponent, IgxRowIslandComponent] }) export class <%=ClassName%>Component { public localData: Artist[] = ARTISTS; diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/default/index.ts b/packages/igx-templates/igx-ts/hierarchical-grid/default/index.ts index d4fd4b0f7..6e821f0e2 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/default/index.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { @@ -10,9 +11,7 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Hierarchical Grid"; this.description = "basic IgxHierarchicalGrid"; - this.dependencies = [ - { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts index dfc43e3b0..34234a8fd 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -12,16 +12,16 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ - FormsModule, - NoopAnimationsModule, - IgxGridModule, - IgxHierarchicalGridModule, - IgxDatePickerModule, - IgxCheckboxModule, - IgxDialogModule - ] + imports: [ + FormsModule, + NoopAnimationsModule, + IgxGridModule, + IgxHierarchicalGridModule, + IgxDatePickerModule, + IgxCheckboxModule, + IgxDialogModule, + <%=ClassName%>Component + ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts index 003595985..1c28e794c 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/files/src/app/__path__/__filePrefix__.component.ts @@ -1,14 +1,47 @@ import { Component, ViewChild } from '@angular/core'; -import { IgxDialogComponent, IgxGridComponent, IgxHierarchicalGridComponent, - IgxRowIslandComponent, Transaction } from '<%=igxPackage%>'; +import { + IgxDialogComponent, + IgxGridComponent, + IgxHierarchicalGridComponent, + IgxRowIslandComponent, + Transaction, + IgxButtonDirective, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxGridToolbarDirective, + IgxGridToolbarComponent, + IgxInputGroupComponent, + IgxLabelDirective, + IgxInputDirective, + IgxCheckboxComponent, +} from '<%=igxPackage%>'; import { GridType } from '<%=igxPackage%>/lib/grids/common/grid.interface'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { SINGERS } from './data'; import { Singer } from './singer'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxButtonDirective, + IgxHierarchicalGridComponent, + IgxColumnComponent, + IgxCellTemplateDirective, + IgxRowIslandComponent, + IgxGridToolbarDirective, + IgxGridToolbarComponent, + IgxDialogComponent, + IgxInputGroupComponent, + IgxLabelDirective, + ReactiveFormsModule, + IgxInputDirective, + FormsModule, + IgxCheckboxComponent, + IgxGridComponent + ] }) export class <%=ClassName%>Component { public get undoEnabledParent(): boolean { diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/index.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/index.ts index 99df5d749..55858f7d3 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/index.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-batch-editing/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { @@ -10,12 +11,7 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Hierarchical Grid With Batch Editing"; this.description = "IgxHierarchicalGrid with batch editing"; - this.dependencies = [ - { - import: ["IgxGridModule", "IgxHierarchicalGridModule", "IgxDialogModule"], - from: "<%=igxPackage%>" - } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts index 0c1f3c3e7..227ac3405 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component ], - imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + imports: [ NoopAnimationsModule, IgxHierarchicalGridModule, <%=ClassName%>Component ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts index 078037a12..fefd05467 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -5,7 +5,8 @@ import { ARTISTS, Artist } from './data'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true }) export class <%=ClassName%>Component { public localData: Artist[] = ARTISTS; diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/index.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/index.ts index a8e417d2a..239a4e39b 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/index.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-custom/index.ts @@ -1,5 +1,6 @@ import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { private userExtraConfiguration = {}; @@ -16,9 +17,18 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { this.name = "Custom Hierarchical Grid"; this.description = "a customizable IgxHierarchicalGrid"; this.dependencies = [ - { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } + { + import: [ + "IgxHierarchicalGridComponent", + "IgxRowIslandComponent", + "IgxColumnComponent", + "IgxIconComponent" + ], + from: "<%=igxPackage%>", + standalone: true + } ]; - + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; this.hasExtraConfiguration = true; } @@ -119,6 +129,11 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { break; case "Paging": this.additionalElements.push(` `); + this.dependencies.push({ + standalone: true, + import: 'IgxPaginatorComponent', + from: "<%=igxPackage%>" + }); break; case "Column Pinning": this.usePinning = true; @@ -136,6 +151,37 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { selectedFeatures = `

Active Features: ${selectedFeatures}

`; } if (toolbarActions.length) { + this.dependencies = [ + ...this.dependencies, + ...[ + { + standalone: true, + import: "IgxGridToolbarComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarTitleComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarActionsComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarPinningComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarHidingComponent", + from: "<%=igxPackage%>" + }, + ], + ]; + const parts = [ " ", " Singers", diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts index 0c1f3c3e7..ffafd2f00 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ <%=ClassName%>Component ], - imports: [ NoopAnimationsModule, IgxHierarchicalGridModule ] + imports: [NoopAnimationsModule, IgxHierarchicalGridModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts index 21422857c..3efb2f71d 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/__filePrefix__.component.ts @@ -1,11 +1,14 @@ import { Component } from '@angular/core'; import { ARTISTS, Artist } from './data'; import { CustomSummary } from './custom-summary'; +import { IgxHierarchicalGridComponent, IgxColumnComponent, IgxRowIslandComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxHierarchicalGridComponent, IgxColumnComponent, IgxRowIslandComponent] }) export class <%=ClassName%>Component { public localData: Artist[] = ARTISTS; diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts index c2022cb27..a270d88d2 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/files/src/app/__path__/custom-summary.ts @@ -5,7 +5,7 @@ export class CustomSummary extends IgxNumberSummaryOperand { super(); } - public operate(data?: number[]): IgxSummaryResult[] { + public override operate(data?: number[]): IgxSummaryResult[] { const result: IgxSummaryResult[] = []; if (!data) { return result; diff --git a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/index.ts b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/index.ts index f9cd03809..4d89160a3 100644 --- a/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/index.ts +++ b/packages/igx-templates/igx-ts/hierarchical-grid/hierarchical-grid-summaries/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { @@ -10,9 +11,7 @@ class IgxHierarchicalGridTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Hierarchical Grid With Summaries"; this.description = "IgxHierarchicalGrid with summaries"; - this.dependencies = [ - { import: ["IgxGridModule", "IgxHierarchicalGridModule"], from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxHierarchicalGridTemplate(); diff --git a/packages/igx-templates/igx-ts/index.ts b/packages/igx-templates/igx-ts/index.ts index 73685beda..dc69e86b5 100644 --- a/packages/igx-templates/igx-ts/index.ts +++ b/packages/igx-templates/igx-ts/index.ts @@ -1,9 +1,6 @@ import { BaseProjectLibrary } from "@igniteui/cli-core"; class IgxProjectLibrary extends BaseProjectLibrary { - /** - * - */ constructor() { super(__dirname); this.name = "Ignite UI for Angular"; diff --git a/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 6452cd2a2..a7eb57c65 100644 --- a/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -19,20 +19,20 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ - FormsModule, - ReactiveFormsModule, - NoopAnimationsModule, - IgxInputGroupModule, - IgxButtonModule, - IgxRippleModule, - IgxIconModule, - IgxComboModule, - IgxDatePickerModule, - IgxTimePickerModule, - IgxSelectModule - ] + imports: [ + FormsModule, + ReactiveFormsModule, + NoopAnimationsModule, + IgxInputGroupModule, + IgxButtonModule, + IgxRippleModule, + IgxIconModule, + IgxComboModule, + IgxDatePickerModule, + IgxTimePickerModule, + IgxSelectModule, + <%=ClassName%>Component + ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.ts index ca079bf56..25468155a 100644 --- a/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/input-group/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,5 +1,25 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; +import { + IgxSelectComponent, + IgxSelectGroupComponent, + IgxSelectItemComponent, + IgxLabelDirective, + IgxSelectToggleIconDirective, + IgxIconComponent, + IgxInputGroupComponent, + IgxInputDirective, + IgxSuffixDirective, + IgxPrefixDirective, + IgxHintDirective, + IgxComboComponent, + IgxDatePickerComponent, + IgxPickerToggleComponent, + IgxTimePickerComponent, + IgxButtonDirective, + IgxRippleDirective, +} from '<%=igxPackage%>'; +import { NgFor } from '@angular/common'; interface Genre { type: string; @@ -9,7 +29,29 @@ interface Genre { @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + ReactiveFormsModule, + IgxSelectComponent, + NgFor, + IgxSelectGroupComponent, + IgxSelectItemComponent, + IgxLabelDirective, + IgxSelectToggleIconDirective, + IgxIconComponent, + IgxInputGroupComponent, + IgxInputDirective, + IgxSuffixDirective, + IgxPrefixDirective, + IgxHintDirective, + IgxComboComponent, + IgxDatePickerComponent, + IgxPickerToggleComponent, + IgxTimePickerComponent, + IgxButtonDirective, + IgxRippleDirective + ] }) export class <%=ClassName%>Component implements OnInit { public genres!: Genre[]; diff --git a/packages/igx-templates/igx-ts/input-group/default/index.ts b/packages/igx-templates/igx-ts/input-group/default/index.ts index 39c47e1bb..9189a2d47 100644 --- a/packages/igx-templates/igx-ts/input-group/default/index.ts +++ b/packages/igx-templates/igx-ts/input-group/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxInputGroupTemplate extends IgniteUIForAngularTemplate { @@ -10,21 +11,7 @@ class IgxInputGroupTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Input Group"; this.description = "IgxInputGroup form view template"; - this.dependencies = [{ - import: [ - "IgxButtonModule", - "IgxComboModule", - "IgxDatePickerModule", - "IgxIconModule", - "IgxInputGroupModule", - "IgxRippleModule", - "IgxTimePickerModule", - "IgxSelectModule" - ], - from: "<%=igxPackage%>" - }, - { import: "FormsModule, ReactiveFormsModule", from: "@angular/forms" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxInputGroupTemplate(); diff --git a/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 9623b5665..a35a19dd1 100644 --- a/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxLinearGaugeModule, NoopAnimationsModule] + imports: [IgxLinearGaugeModule, NoopAnimationsModule, <%=ClassName%>Componen] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts index 49159c378..d8ffdb16d 100644 --- a/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/linear-gauge/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,15 +1,19 @@ import { AfterViewInit, Component, ViewChild, ViewEncapsulation } from '@angular/core'; +import { IgxLayoutDirective, IgxButtonDirective } from '<%=igxPackage%>'; import { IgxLinearGaugeComponent, IgxLinearGraphRangeComponent, - LinearGraphNeedleShape + LinearGraphNeedleShape, + IgxLinearGaugeCoreModule, } from 'igniteui-angular-gauges'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [IgxLayoutDirective, IgxButtonDirective, IgxLinearGaugeCoreModule] }) export class <%=ClassName%>Component implements AfterViewInit { public needleShape = LinearGraphNeedleShape diff --git a/packages/igx-templates/igx-ts/linear-gauge/default/index.ts b/packages/igx-templates/igx-ts/linear-gauge/default/index.ts index 8ec6777ed..5c6969ea4 100644 --- a/packages/igx-templates/igx-ts/linear-gauge/default/index.ts +++ b/packages/igx-templates/igx-ts/linear-gauge/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxLinearGaugeTemplate extends IgniteUIForAngularTemplate { @@ -10,13 +11,7 @@ class IgxLinearGaugeTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Linear Gauge"; this.description = "IgxLinearGauge with different animations."; - this.dependencies = [ - { - import: ["IgxLinearGaugeModule"], - from: "igniteui-angular-gauges" - } - ]; - this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0"]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0", IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxLinearGaugeTemplate(); diff --git a/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts index c14aefd5d..5253d8288 100644 --- a/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [FormsModule, IgxAvatarModule, IgxFilterModule, IgxIconModule, IgxInputGroupModule, IgxListModule] + imports: [FormsModule, IgxAvatarModule, IgxFilterModule, IgxIconModule, IgxInputGroupModule, IgxListModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.ts index 3ccb6a966..f24137b7e 100644 --- a/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/list/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,5 +1,18 @@ import { Component } from '@angular/core'; -import { IgxFilterOptions, IgxListItemComponent } from '<%=igxPackage%>'; +import { + IgxFilterOptions, + IgxListItemComponent, + IgxInputGroupComponent, + IgxPrefixDirective, + IgxIconComponent, + IgxInputDirective, + IgxSuffixDirective, + IgxListComponent, + IgxAvatarComponent, + IgxFilterPipe, +} from '<%=igxPackage%>'; +import { NgIf, NgFor, NgClass } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; interface Contact { isFavorite: boolean; @@ -11,7 +24,24 @@ interface Contact { @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxFilterPipe, + IgxListItemComponent, + IgxInputGroupComponent, + IgxPrefixDirective, + IgxIconComponent, + IgxInputDirective, + IgxSuffixDirective, + IgxListComponent, + IgxAvatarComponent, + NgIf, + NgFor, + NgClass, + ReactiveFormsModule, + FormsModule + ] }) export class <%=ClassName%>Component { public title = '<%=name%>'; diff --git a/packages/igx-templates/igx-ts/list/default/index.ts b/packages/igx-templates/igx-ts/list/default/index.ts index 943aa6c7e..b59c919be 100644 --- a/packages/igx-templates/igx-ts/list/default/index.ts +++ b/packages/igx-templates/igx-ts/list/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxListTemplate extends IgniteUIForAngularTemplate { @@ -10,16 +11,7 @@ class IgxListTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "List"; this.description = "basic IgxList"; - this.dependencies = [{ - import: ["IgxListModule", "IgxAvatarModule", "IgxIconModule", "IgxInputGroupModule", "IgxFilterModule"], - from: "<%=igxPackage%>" - }, { - import: ["CommonModule"], - from: "@angular/common" - }, { - import: ["FormsModule"], - from: "@angular/forms" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxListTemplate(); diff --git a/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 2d82b4e1d..20b889344 100644 --- a/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxGeographicMapModule, NoopAnimationsModule] + imports: [IgxGeographicMapModule, NoopAnimationsModule, GeographicMapComponent] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.ts index 061226ec8..6b0025a1b 100644 --- a/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/map/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,12 @@ import { AfterViewInit, Component, ViewChild } from '@angular/core'; -import { IgxGeographicMapComponent } from 'igniteui-angular-maps'; +import { IgxGeographicMapComponent, IgxGeographicMapCoreModule } from 'igniteui-angular-maps'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxGeographicMapCoreModule] }) export class <%=ClassName%>Component implements AfterViewInit { diff --git a/packages/igx-templates/igx-ts/map/default/index.ts b/packages/igx-templates/igx-ts/map/default/index.ts index 8130b3f9d..a894cef87 100644 --- a/packages/igx-templates/igx-ts/map/default/index.ts +++ b/packages/igx-templates/igx-ts/map/default/index.ts @@ -10,16 +10,6 @@ class IgxGeographicMapTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Geographic Map"; this.description = "Basic IgxGeographicMap."; - this.dependencies = [ - { - import: ["IgxGeographicMapModule"], - from: "igniteui-angular-maps" - }, - { - import: ["IgxDataChartInteractivityModule"], - from: "igniteui-angular-charts" - } - ]; this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-charts@~17.0.0", "igniteui-angular-maps@~17.0.0"]; } } diff --git a/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts index c967c1f06..a2fad12a0 100644 --- a/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,9 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxPivotGridModule, - NoopAnimationsModule] + imports: [IgxPivotGridModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts index baaca60ff..80fa24511 100644 --- a/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/pivot-grid/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { DATA } from './data'; -import { IPivotConfiguration, IgxPivotNumericAggregate } from '<%=igxPackage%>'; +import { IPivotConfiguration, IgxPivotNumericAggregate, IgxPivotGridComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxPivotGridComponent] }) export class <%=ClassName%>Component { public data = DATA; diff --git a/packages/igx-templates/igx-ts/pivot-grid/default/index.ts b/packages/igx-templates/igx-ts/pivot-grid/default/index.ts index eb7aa479d..12f47f56e 100644 --- a/packages/igx-templates/igx-ts/pivot-grid/default/index.ts +++ b/packages/igx-templates/igx-ts/pivot-grid/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxPivotGridTemplate extends IgniteUIForAngularTemplate { @@ -9,9 +10,7 @@ class IgxPivotGridTemplate extends IgniteUIForAngularTemplate { this.id = "pivot-grid"; this.projectType = "igx-ts"; this.name = "Pivot Grid"; - this.dependencies = [ - { import: "IgxPivotGridModule", from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxPivotGridTemplate(); diff --git a/packages/igx-templates/igx-ts/projects/_base/files/__dot__eslintrc.json b/packages/igx-templates/igx-ts/projects/_base/files/__dot__eslintrc.json index 14d59748b..cafca8965 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/__dot__eslintrc.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/__dot__eslintrc.json @@ -4,39 +4,39 @@ "projects/**/*" ], "overrides": [ - { - "files": [ - "*.ts" - ], - "parserOptions": { - "project": [ - "tsconfig.json" - ], - "createDefaultProgram": true - }, - "extends": [ - "plugin:@angular-eslint/recommended", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, { "files": [ "*.html" diff --git a/packages/igx-templates/igx-ts/projects/_base/files/angular.json b/packages/igx-templates/igx-ts/projects/_base/files/angular.json index 9b81571d1..118f92360 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/angular.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/angular.json @@ -1,132 +1,107 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "<%=dashName%>": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - }, - "@schematics/angular:application": { - "strict": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/<%=dashName%>", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "src/styles.scss"<%=DefaultTheme%> - ], - "scripts": [ - "./node_modules/hammerjs/hammer.min.js" - ], - "stylePreprocessorOptions": { - "includePaths": ["node_modules"] - } - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "5mb", - "maximumError": "10mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "6kb", - "maximumError": "2mb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "<%=dashName%>:build:production" - }, - "development": { - "buildTarget": "<%=dashName%>:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "<%=dashName%>:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "inlineStyleLanguage": "scss", - "styles": [ - "src/styles.scss" - ], - "scripts": [ - "./node_modules/hammerjs/hammer.min.js" - ], - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "stylePreprocessorOptions": { - "includePaths": ["node_modules"] - } - } - }, - "lint": { - "builder": "@angular-eslint/builder:lint", - "options": { - "lintFilePatterns": [ - "src/**/*.ts", - "src/**/*.html" - ] - } - } - } - } - }, - "cli": { - "schematicCollections": ["@angular-eslint/schematics"] + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "NgStandaloneApp": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/ng-standalone-app", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss"<%=DefaultTheme%> + ], + "scripts": [ + "./node_modules/hammerjs/hammer.min.js" + ], + "stylePreprocessorOptions": { + "includePaths": ["node_modules"] + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "NgStandaloneApp:build:production" + }, + "development": { + "buildTarget": "NgStandaloneApp:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "NgStandaloneApp:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + } } -} + \ No newline at end of file diff --git a/packages/igx-templates/igx-ts/projects/_base/files/package.json b/packages/igx-templates/igx-ts/projects/_base/files/package.json index 26b3e4010..f1c3cc81d 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/package.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/package.json @@ -4,27 +4,26 @@ "scripts": { "ng": "ng", "start": "ng serve -o", - "build": "ng build --configuration production", + "build": "ng build", "watch": "ng build --watch --configuration development", - "test": "ng test", - "lint": "ng lint" + "test": "ng test" }, "private": true, "dependencies": { - "@angular/animations": "~17.0.0", - "@angular/common": "~17.0.0", - "@angular/compiler": "~17.0.0", - "@angular/core": "~17.0.0", - "@angular/forms": "~17.0.0", - "@angular/platform-browser": "~17.0.0", - "@angular/platform-browser-dynamic": "~17.0.0", - "@angular/router": "~17.0.0", - "hammerjs": "^2.0.8", + "@angular/animations": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "hammerjs": "^2.0.8", "igniteui-angular": "~17.0.0", "minireset.css": "~0.0.7", "rxjs": "~7.8.0", "tslib": "^2.3.0", - "zone.js": "~0.14.0" + "zone.js": "~0.14.2" }, "devDependencies": { "@angular-devkit/build-angular": "~17.0.0", diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.component.ts b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.component.ts index 834e5aebe..23437c8ae 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.component.ts +++ b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.component.ts @@ -1,7 +1,11 @@ import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', + standalone: true, + imports: [CommonModule, RouterOutlet], templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.config.ts b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.config.ts new file mode 100644 index 000000000..ab9812036 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.config.ts @@ -0,0 +1,17 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { BrowserModule, HammerModule } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + importProvidersFrom(BrowserModule, HammerModule), + provideAnimations(), + // provide the HAMMER_GESTURE_CONFIG token + // to override the default settings of the HammerModule + // { provide: HAMMER_GESTURE_CONFIG, useClass: MyHammerConfig } + ] +}; diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.routes.ts b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.routes.ts new file mode 100644 index 000000000..f7cff0ea9 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/_base/files/src/app/app.routes.ts @@ -0,0 +1,9 @@ +import { Routes } from '@angular/router'; + +import { PageNotFoundComponent } from './error-routing/not-found/not-found.component'; +import { UncaughtErrorComponent } from './error-routing/error/uncaught-error.component'; + +export const routes: Routes = [ + { path: 'error', component: UncaughtErrorComponent }, + { path: '**', component: PageNotFoundComponent } // must always be last +]; diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts b/packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts index 4f027a808..36f0bd418 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts +++ b/packages/igx-templates/igx-ts/projects/_base/files/src/app/error-routing/not-found/not-found.component.ts @@ -1,6 +1,7 @@ import { Component } from '@angular/core'; @Component({ - template: '

Error 404: Page not found

' + template: '

Error 404: Page not found

', + standalone: true }) export class PageNotFoundComponent { } diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/favicon.ico b/packages/igx-templates/igx-ts/projects/_base/files/src/favicon.ico index 997406ad2..57614f9c9 100644 Binary files a/packages/igx-templates/igx-ts/projects/_base/files/src/favicon.ico and b/packages/igx-templates/igx-ts/projects/_base/files/src/favicon.ico differ diff --git a/packages/igx-templates/igx-ts/projects/_base/files/src/main.ts b/packages/igx-templates/igx-ts/projects/_base/files/src/main.ts index c7b673cf4..88b06b346 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/src/main.ts +++ b/packages/igx-templates/igx-ts/projects/_base/files/src/main.ts @@ -1,12 +1,13 @@ import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { bootstrapApplication } from '@angular/platform-browser'; -import { AppModule } from './app/app.module'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.app.json b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.app.json index 82d91dc4a..374cc9d29 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.app.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.app.json @@ -6,8 +6,7 @@ "types": [] }, "files": [ - "src/main.ts", - "src/polyfills.ts" + "src/main.ts" ], "include": [ "src/**/*.d.ts" diff --git a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.json b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.json index c264a70d7..678336b9e 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.json @@ -2,13 +2,16 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "forceConsistentCasingInFileNames": true, "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, "sourceMap": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, diff --git a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.spec.json b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.spec.json index 092345b02..be7e9da76 100644 --- a/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.spec.json +++ b/packages/igx-templates/igx-ts/projects/_base/files/tsconfig.spec.json @@ -7,10 +7,6 @@ "jasmine" ] }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], "include": [ "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/packages/igx-templates/igx-ts/projects/_base/index.ts b/packages/igx-templates/igx-ts/projects/_base/index.ts index b532eeef4..8148da1ff 100644 --- a/packages/igx-templates/igx-ts/projects/_base/index.ts +++ b/packages/igx-templates/igx-ts/projects/_base/index.ts @@ -1,6 +1,6 @@ import { ControlExtraConfiguration, ProjectTemplate, Util } from "@igniteui/cli-core"; import * as path from "path"; -import { updateWorkspace } from "../../../Update"; +import { updateWorkspace } from ".././../../Update"; export class BaseIgxProject implements ProjectTemplate { public id: string = "base"; diff --git a/packages/igx-templates/igx-ts/projects/_base_with_home/files/__dot__github/workflows/node.js.yml b/packages/igx-templates/igx-ts/projects/_base_with_home/files/__dot__github/workflows/node.js.yml index f06ae642b..c90fa1b13 100644 --- a/packages/igx-templates/igx-ts/projects/_base_with_home/files/__dot__github/workflows/node.js.yml +++ b/packages/igx-templates/igx-ts/projects/_base_with_home/files/__dot__github/workflows/node.js.yml @@ -8,9 +8,9 @@ name: Node.js CI on: push: - branches: [ main ] + branches: [ <%=yamlDefaultBranch%> ] pull_request: - branches: [ main ] + branches: [ <%=yamlDefaultBranch%> ] jobs: build: diff --git a/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.config.ts b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.config.ts new file mode 100644 index 000000000..6c6ef6035 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.config.ts @@ -0,0 +1,8 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes)] +}; diff --git a/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.routes.ts b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.routes.ts new file mode 100644 index 000000000..a1ed3d390 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/app.routes.ts @@ -0,0 +1,12 @@ +import { Routes } from '@angular/router'; + +import { HomeComponent } from './home/home.component'; +import { PageNotFoundComponent } from './error-routing/not-found/not-found.component'; +import { UncaughtErrorComponent } from './error-routing/error/uncaught-error.component'; + +export const routes: Routes = [ + { path: '', redirectTo: '/home', pathMatch: 'full'}, + { path: 'home', component: HomeComponent, data: { text: 'Home' }}, + { path: 'error', component: UncaughtErrorComponent }, + { path: '**', component: PageNotFoundComponent } // must always be last +]; diff --git a/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/home/home.component.ts b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/home/home.component.ts index 778c2190f..96bef05e2 100644 --- a/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/home/home.component.ts +++ b/packages/igx-templates/igx-ts/projects/_base_with_home/files/src/app/home/home.component.ts @@ -2,6 +2,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-home', + standalone: true, templateUrl: './home.component.html', styleUrls: ['./home.component.scss'] }) diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.component.ts b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.component.ts index 834e5aebe..fff7934cc 100644 --- a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.component.ts +++ b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.component.ts @@ -1,9 +1,12 @@ import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'] + styleUrls: ['./app.component.scss'], + standalone: true, + imports: [RouterOutlet] }) export class AppComponent { title = 'Home - IgniteUI for Angular'; diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.config.ts b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.config.ts new file mode 100644 index 000000000..6c6ef6035 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.config.ts @@ -0,0 +1,8 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes)] +}; diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.routes.ts b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.routes.ts new file mode 100644 index 000000000..dc6a0e413 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/empty/files/src/app/app.routes.ts @@ -0,0 +1,8 @@ +import { Routes } from '@angular/router'; + +import { HomeComponent } from './home/home.component'; + +export const routes: Routes = [ + { path: '', redirectTo: '/home', pathMatch: 'full'}, + { path: 'home', component: HomeComponent, data: { text: 'Home' }} +]; diff --git a/packages/igx-templates/igx-ts/projects/empty/files/src/app/home/home.component.ts b/packages/igx-templates/igx-ts/projects/empty/files/src/app/home/home.component.ts index d9cc86e08..5e0ada951 100644 --- a/packages/igx-templates/igx-ts/projects/empty/files/src/app/home/home.component.ts +++ b/packages/igx-templates/igx-ts/projects/empty/files/src/app/home/home.component.ts @@ -2,6 +2,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-home', + standalone: true, templateUrl: './home.component.html', styleUrls: ['./home.component.scss'] }) diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.spec.ts index 31f35af32..1b0b74e8a 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.spec.ts @@ -14,11 +14,9 @@ describe('AppComponent', () => { AuthenticationModule, IgxNavbarModule, IgxLayoutModule, - IgxRippleModule - ], - declarations: [ + IgxRippleModule, AppComponent - ], + ] }).compileComponents(); })); it('should create the app', waitForAsync(() => { diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.ts new file mode 100644 index 000000000..b23924ed3 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.component.ts @@ -0,0 +1,69 @@ +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { NavigationStart, Router, RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router'; +import { + IgxNavigationDrawerComponent, + IgxLayoutDirective, + IgxNavDrawerTemplateDirective, + IgxNavDrawerItemDirective, + IgxRippleDirective, + IgxFlexDirective, + IgxNavbarComponent +} from 'igniteui-angular'; +import { filter } from 'rxjs/operators'; +import { NgFor } from '@angular/common'; + +import { routes } from './app.routes'; +import { LoginBarComponent } from './authentication/login-bar/login-bar.component'; + +@Component({ + selector: 'app-root', + standalone: true, + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'], + encapsulation: ViewEncapsulation.None, + imports: [ + LoginBarComponent, + IgxLayoutDirective, + IgxNavigationDrawerComponent, + IgxNavDrawerTemplateDirective, + IgxNavDrawerItemDirective, + NgFor, + IgxRippleDirective, + RouterLinkActive, + RouterLink, + IgxFlexDirective, + IgxNavbarComponent, + RouterOutlet] +}) +export class AppComponent implements OnInit { + public topNavLinks: { + path: string, + name: string + }[] = []; + + @ViewChild(IgxNavigationDrawerComponent, { static: true }) + public navdrawer!: IgxNavigationDrawerComponent; + + constructor(private router: Router) { + for (const route of routes) { + if (route.path && route.data && route.path.indexOf('*') === -1) { + this.topNavLinks.push({ + name: route.data.text, + path: '/' + route.path + }); + } + } + } + + public ngOnInit(): void { + this.router.events.pipe( + filter((x): x is NavigationStart => x instanceof NavigationStart) + ) + .subscribe((event: NavigationStart) => { + if (event.url !== '/' && !this.navdrawer.pin) { + // Close drawer when selecting a view on mobile (unpinned) + this.navdrawer.close(); + } + }); + } +} diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.config.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.config.ts new file mode 100644 index 000000000..405b50387 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.config.ts @@ -0,0 +1,27 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { BrowserModule, HammerModule } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { IgxNavigationDrawerModule, IgxNavbarModule, IgxLayoutModule, IgxRippleModule } from 'igniteui-angular'; + +import { AuthenticationModule, ExternalAuthService } from './authentication'; +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + importProvidersFrom( + BrowserModule, + HammerModule, + IgxLayoutModule, + IgxNavbarModule, + IgxNavigationDrawerModule, + IgxRippleModule, + AuthenticationModule), + provideAnimations(), + ExternalAuthService + // provide the HAMMER_GESTURE_CONFIG token + // to override the default settings of the HammerModule + // { provide: HAMMER_GESTURE_CONFIG, useClass: MyHammerConfig } + ] +}; diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.routes.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.routes.ts new file mode 100644 index 000000000..dc39edb5f --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/app.routes.ts @@ -0,0 +1,3 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = []; diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts index 5f6de9dd5..8525eae25 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.spec.ts @@ -22,7 +22,16 @@ import { LoginBarComponent } from './login-bar.component'; @Component({ selector: 'app-login-dialog', - template: '' + template: '', + standalone: true, + imports: [RouterTestingModule, + IgxAvatarModule, + IgxButtonModule, + IgxDialogModule, + IgxDropDownModule, + IgxIconModule, + IgxRippleModule, + IgxToggleModule] }) class TestLoginDialogComponent extends LoginDialogComponent { open() { } @@ -46,16 +55,17 @@ describe('LoginBarComponent', () => { imports: [ RouterTestingModule, NoopAnimationsModule, - AuthModule.forRoot(), + AuthModule, IgxAvatarModule, IgxButtonModule, IgxDialogModule, IgxDropDownModule, IgxIconModule, IgxRippleModule, - IgxToggleModule + IgxToggleModule, + LoginBarComponent, + TestLoginDialogComponent ], - declarations: [LoginBarComponent, TestLoginDialogComponent], providers: [ { provide: UserService, useClass: TestUserServSpy }, { provide: ExternalAuthService, useClass: TestAuthService } diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts index b4df2e10b..bc2c854c8 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-bar/login-bar.component.ts @@ -1,6 +1,8 @@ import { Component, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; -import { IgxDropDownComponent, ISelectionEventArgs } from 'igniteui-angular'; +import { NgIf } from '@angular/common'; +import { IgxDropDownComponent, ISelectionEventArgs, IgxRippleDirective, IgxButtonDirective, IgxToggleActionDirective, + IgxAvatarComponent, IgxIconComponent, IgxDropDownItemComponent } from 'igniteui-angular'; import { LoginDialogComponent } from '../login-dialog/login-dialog.component'; import { ExternalAuthService } from '../services/external-auth.service'; import { UserService } from '../services/user.service'; @@ -8,7 +10,10 @@ import { UserService } from '../services/user.service'; @Component({ selector: 'app-login-bar', templateUrl: './login-bar.component.html', - styleUrls: ['./login-bar.component.scss'] + styleUrls: ['./login-bar.component.scss'], + standalone: true, + imports: [NgIf, IgxRippleDirective, IgxButtonDirective, IgxToggleActionDirective, IgxAvatarComponent, IgxIconComponent, + IgxDropDownComponent, IgxDropDownItemComponent, LoginDialogComponent] }) export class LoginBarComponent { diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts index d6c072b3b..ab662c873 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.spec.ts @@ -7,7 +7,9 @@ import { LoginDialogComponent } from './login-dialog.component'; @Component({ selector: 'app-login, app-register', - template: '' + template: '', + standalone: true, + imports: [IgxDialogModule] }) class TestSignViewComponent { @Output() public viewChange = new EventEmitter(); @@ -27,8 +29,7 @@ describe('LoginDialogComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [LoginDialogComponent, TestSignViewComponent], - imports: [NoopAnimationsModule, IgxDialogModule] + imports: [NoopAnimationsModule, IgxDialogModule, LoginDialogComponent, TestSignViewComponent] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts index 0680c082c..d685bb867 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login-dialog/login-dialog.component.ts @@ -1,10 +1,16 @@ import { Component, ViewChild } from '@angular/core'; import { IgxDialogComponent } from 'igniteui-angular'; +import { NgIf } from '@angular/common'; + +import { RegisterComponent } from '../register/register.component'; +import { LoginComponent } from '../login/login.component'; @Component({ selector: 'app-login-dialog', templateUrl: './login-dialog.component.html', - styleUrls: ['./login-dialog.component.scss'] + styleUrls: ['./login-dialog.component.scss'], + standalone: true, + imports: [IgxDialogComponent, NgIf, LoginComponent, RegisterComponent] }) export class LoginDialogComponent { public showLogin = true; diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts index 153f07c25..75d3864c5 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.spec.ts @@ -24,9 +24,8 @@ describe('LoginComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [ReactiveFormsModule, RouterTestingModule, NoopAnimationsModule, + imports: [LoginComponent, ReactiveFormsModule, RouterTestingModule, NoopAnimationsModule, IgxInputGroupModule, IgxButtonModule, IgxIconModule, IgxRippleModule], - declarations: [LoginComponent], providers: [ { provide: ExternalAuthService, useValue: extAuthSpy }, { provide: AuthenticationService, useValue: authSpy }, diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts index f3ef2701f..2bba95799 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/login/login.component.ts @@ -1,6 +1,10 @@ import { Component, EventEmitter, Output } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; +import { NgIf } from '@angular/common'; import { Router } from '@angular/router'; +import { IgxInputGroupComponent, IgxPrefixDirective, IgxIconComponent, IgxLabelDirective, + IgxInputDirective, IgxButtonDirective, IgxRippleDirective } from 'igniteui-angular'; + import { AuthenticationService } from '../services/authentication.service'; import { ExternalAuthProvider } from '../services/external-auth-configs'; import { ExternalAuthService } from '../services/external-auth.service'; @@ -9,7 +13,10 @@ import { UserService } from '../services/user.service'; @Component({ selector: 'app-login', templateUrl: './login.component.html', - styleUrls: ['./login.component.scss'] + styleUrls: ['./login.component.scss'], + standalone: true, + imports: [ReactiveFormsModule, IgxInputGroupComponent, IgxPrefixDirective, IgxIconComponent, IgxLabelDirective, + IgxInputDirective, IgxButtonDirective, IgxRippleDirective, NgIf] }) export class LoginComponent { public loginForm: FormGroup; diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts index 1b81147cb..ec624df90 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.spec.ts @@ -8,7 +8,7 @@ describe('ProfileComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ProfileComponent], + imports: [ProfileComponent], providers: [ { provide: UserService, useValue: { currentUser: { name: 'test' } } } ] diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts index 0e3d452d4..b747f420a 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/profile/profile.component.ts @@ -4,7 +4,8 @@ import { UserService } from '../services/user.service'; @Component({ selector: 'app-profile', templateUrl: './profile.component.html', - styleUrls: ['./profile.component.scss'] + styleUrls: ['./profile.component.scss'], + standalone: true }) export class ProfileComponent { constructor(public userService: UserService) { } diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts index c6ea6f593..7a64ac107 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.spec.ts @@ -15,8 +15,7 @@ describe('RedirectComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [RouterTestingModule], - declarations: [RedirectComponent], + imports: [RouterTestingModule, RedirectComponent], providers: [ { provide: ActivatedRoute, useValue: activeRouteSpy }, { provide: ExternalAuthService, useValue: extAuthSpy }, diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts index 9d99269db..daa058c98 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/redirect/redirect.component.ts @@ -9,7 +9,8 @@ import { UserService } from '../services/user.service'; const routeData = 'value'; @Component({ - template: '

Signing in...

' + template: '

Signing in...

', + standalone: true }) export class RedirectComponent implements OnInit { private provider: ExternalAuthProvider; diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts index f4b64bddb..d4dcda327 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.spec.ts @@ -29,9 +29,9 @@ describe('RegisterComponent', () => { IgxButtonModule, IgxIconModule, IgxInputGroupModule, - IgxRippleModule + IgxRippleModule, + RegisterComponent ], - declarations: [RegisterComponent], providers: [ { provide: AuthenticationService, useValue: authSpy }, { provide: UserService, useValue: userServSpy }, diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts index 4aa7b2507..f5b8f921d 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/files/src/app/authentication/register/register.component.ts @@ -1,6 +1,8 @@ import { Component, EventEmitter, Output } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; import { Router } from '@angular/router'; +import { IgxInputGroupComponent, IgxPrefixDirective, IgxIconComponent, IgxLabelDirective, IgxInputDirective, IgxButtonDirective, + IgxRippleDirective } from 'igniteui-angular'; import { Register } from '../models/register'; import { AuthenticationService } from '../services/authentication.service'; import { UserService } from '../services/user.service'; @@ -8,7 +10,10 @@ import { UserService } from '../services/user.service'; @Component({ selector: 'app-register', templateUrl: './register.component.html', - styleUrls: ['./register.component.scss'] + styleUrls: ['./register.component.scss'], + standalone: true, + imports: [ReactiveFormsModule, IgxInputGroupComponent, IgxPrefixDirective, IgxIconComponent, IgxLabelDirective, + IgxInputDirective, IgxButtonDirective, IgxRippleDirective] }) export class RegisterComponent { diff --git a/packages/igx-templates/igx-ts/projects/side-nav-auth/index.ts b/packages/igx-templates/igx-ts/projects/side-nav-auth/index.ts index eb9fe1135..aa2f84288 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav-auth/index.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav-auth/index.ts @@ -15,4 +15,5 @@ export class AuthSideProject extends SideNavProject implements ProjectTemplate { return [...super.templatePaths, path.join(__dirname, "files")]; } } + export default new AuthSideProject(); diff --git a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.spec.ts b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.spec.ts index a4255fa22..1f10a4a25 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.spec.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.spec.ts @@ -10,11 +10,9 @@ describe('AppComponent', () => { IgxLayoutModule, IgxNavbarModule, IgxNavigationDrawerModule, - IgxRippleModule - ], - declarations: [ + IgxRippleModule, AppComponent - ], + ] }).compileComponents(); })); it('should create the app', waitForAsync(() => { diff --git a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.ts b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.ts index e3410fca9..d053c95f0 100644 --- a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.ts +++ b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.component.ts @@ -1,14 +1,37 @@ import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; -import { NavigationStart, Router } from '@angular/router'; -import { IgxNavigationDrawerComponent } from 'igniteui-angular'; +import { NavigationStart, Router, RouterLinkActive, RouterLink, RouterOutlet } from '@angular/router'; +import { + IgxNavigationDrawerComponent, + IgxLayoutDirective, + IgxNavDrawerTemplateDirective, + IgxNavDrawerItemDirective, + IgxRippleDirective, + IgxFlexDirective, + IgxNavbarComponent, +} from 'igniteui-angular'; import { filter } from 'rxjs/operators'; -import { routes } from './app-routing.module'; +import { NgFor } from '@angular/common'; +import { routes } from './app.routes'; @Component({ selector: 'app-root', + standalone: true, templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + imports: [ + IgxLayoutDirective, + IgxNavigationDrawerComponent, + IgxNavDrawerTemplateDirective, + IgxNavDrawerItemDirective, + NgFor, + IgxRippleDirective, + RouterLinkActive, + RouterLink, + IgxFlexDirective, + IgxNavbarComponent, + RouterOutlet + ] }) export class AppComponent implements OnInit { public topNavLinks: { @@ -23,7 +46,7 @@ export class AppComponent implements OnInit { for (const route of routes) { if (route.path && route.data && route.path.indexOf('*') === -1) { this.topNavLinks.push({ - name: route.data.text, + name: route.data['text'], path: '/' + route.path }); } diff --git a/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.config.ts b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.config.ts new file mode 100644 index 000000000..5ad75d272 --- /dev/null +++ b/packages/igx-templates/igx-ts/projects/side-nav/files/src/app/app.config.ts @@ -0,0 +1,24 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { BrowserModule, HammerModule } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { IgxNavigationDrawerModule, IgxNavbarModule, IgxLayoutModule, IgxRippleModule } from 'igniteui-angular'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + importProvidersFrom( + BrowserModule, + HammerModule, + IgxLayoutModule, + IgxNavbarModule, + IgxNavigationDrawerModule, + IgxRippleModule), + provideAnimations(), + // provide the HAMMER_GESTURE_CONFIG token + // to override the default settings of the HammerModule + // { provide: HAMMER_GESTURE_CONFIG, useClass: MyHammerConfig } + ] +}; diff --git a/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 294d1f62e..bb3156b6f 100644 --- a/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxRadialGaugeModule, NoopAnimationsModule] + imports: [IgxRadialGaugeModule, NoopAnimationsModule, <%=ClassName%>Component ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts index ea4ca4e06..3ada97253 100644 --- a/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/radial-gauge/default/files/src/app/__path__/__filePrefix__.component.ts @@ -7,14 +7,18 @@ import { RadialGaugeBackingShape, RadialGaugeNeedleShape, RadialGaugePivotShape, - RadialGaugeScaleOversweepShape + RadialGaugeScaleOversweepShape, + IgxRadialGaugeCoreModule, } from 'igniteui-angular-gauges'; +import { IgxLayoutDirective, IgxButtonDirective } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [IgxLayoutDirective, IgxButtonDirective, IgxRadialGaugeCoreModule] }) export class <%=ClassName%>Component implements AfterViewInit { diff --git a/packages/igx-templates/igx-ts/radial-gauge/default/index.ts b/packages/igx-templates/igx-ts/radial-gauge/default/index.ts index b85cfce07..91b57c93a 100644 --- a/packages/igx-templates/igx-ts/radial-gauge/default/index.ts +++ b/packages/igx-templates/igx-ts/radial-gauge/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxRadialGaugeTemplate extends IgniteUIForAngularTemplate { @@ -10,13 +11,7 @@ class IgxRadialGaugeTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Radial Gauge"; this.description = "IgxRadialGauge with different animations"; - this.dependencies = [ - { - import: ["IgxRadialGaugeModule"], - from: "igniteui-angular-gauges" - } - ]; - this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0"]; + this.packages = ["igniteui-angular-core@~17.0.0", "igniteui-angular-gauges@~17.0.0", IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxRadialGaugeTemplate(); diff --git a/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 9291014c8..fe28bdee6 100644 --- a/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxSelectModule, NoopAnimationsModule] + imports: [IgxSelectModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.ts index 14bd8b0f7..cc76a428c 100644 --- a/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/select/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,9 +1,13 @@ import { Component } from '@angular/core'; +import { NgFor } from '@angular/common'; +import { IgxSelectComponent, IgxLabelDirective, IgxSelectItemComponent } from '<%=igxPackage%>';; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [IgxSelectComponent, IgxLabelDirective, NgFor, IgxSelectItemComponent] }) export class <%=ClassName%>Component { public items: string[] = ['Orange', 'Apple', 'Banana', 'Mango', 'Pineapple']; diff --git a/packages/igx-templates/igx-ts/select/default/index.ts b/packages/igx-templates/igx-ts/select/default/index.ts index 10d0350e4..c9bc45bd7 100644 --- a/packages/igx-templates/igx-ts/select/default/index.ts +++ b/packages/igx-templates/igx-ts/select/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxSelectTemplate extends IgniteUIForAngularTemplate { @@ -10,14 +11,7 @@ class IgxSelectTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Select"; this.description = "basic IgxSelect"; - this.dependencies = [{ - import: [ - "IgxSelectModule", - "IgxButtonModule", - "IgxToggleModule" - ], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts b/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts index 449fa070b..2f9df8770 100644 --- a/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts +++ b/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.comonent.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxSelectModule, NoopAnimationsModule] + imports: [IgxSelectModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts index 2b57a7e5d..469461d79 100644 --- a/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/select/select-groups/files/src/app/__path__/__filePrefix__.component.ts @@ -1,8 +1,13 @@ import { Component } from '@angular/core'; +import { NgFor } from '@angular/common'; +import { IgxSelectComponent, IgxLabelDirective, IgxSelectGroupComponent, IgxSelectItemComponent } from '<%=igxPackage%>'; + @Component({ selector: 'app-<%=filePrefix%>', styleUrls: ['<%=filePrefix%>.component.scss'], - templateUrl: '<%=filePrefix%>.component.html' + templateUrl: '<%=filePrefix%>.component.html', + standalone: true, + imports: [IgxSelectComponent, IgxLabelDirective, NgFor, IgxSelectGroupComponent, IgxSelectItemComponent] }) export class <%=ClassName%>Component { public items: any[] = [ diff --git a/packages/igx-templates/igx-ts/select/select-groups/index.ts b/packages/igx-templates/igx-ts/select/select-groups/index.ts index c2af65917..9a2b9db8a 100644 --- a/packages/igx-templates/igx-ts/select/select-groups/index.ts +++ b/packages/igx-templates/igx-ts/select/select-groups/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxSelectTemplate extends IgniteUIForAngularTemplate { @@ -10,14 +11,7 @@ class IgxSelectTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Select With Groups"; this.description = "IgxSelect that has groups"; - this.dependencies = [{ - import: [ - "IgxSelectModule", - "IgxButtonModule", - "IgxToggleModule" - ], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts index 09cd98ac9..c13e3fb21 100644 --- a/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -15,15 +15,15 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ - FormsModule, - IgxSelectModule, - IgxToggleModule, - IgxButtonModule, - IgxToastModule, - NoopAnimationsModule, - ] + imports: [ + FormsModule, + IgxSelectModule, + IgxToggleModule, + IgxButtonModule, + IgxToastModule, + NoopAnimationsModule, + <%=ClassName%>Component, + ] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts index f4cc39ef6..b99542f65 100644 --- a/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/select/select-in-form/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,34 @@ import { Component, ViewChild } from '@angular/core'; -import { HorizontalAlignment, IgxSelectComponent, IgxToastComponent, PositionSettings, VerticalAlignment } from '<%=igxPackage%>'; +import { + HorizontalAlignment, + IgxSelectComponent, + IgxToastComponent, + PositionSettings, + VerticalAlignment, + IgxLabelDirective, + IgxPrefixDirective, + IgxSelectItemComponent, + IgxButtonDirective, +} from '<%=igxPackage%>'; +import { NgFor } from '@angular/common'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @Component({ selector: 'app-<%=filePrefix%>', styleUrls: ['<%=filePrefix%>.component.scss'], - templateUrl: '<%=filePrefix%>.component.html' + templateUrl: '<%=filePrefix%>.component.html', + standalone: true, + imports: [ + ReactiveFormsModule, + FormsModule, + IgxSelectComponent, + IgxLabelDirective, + IgxPrefixDirective, + IgxSelectItemComponent, + NgFor, + IgxButtonDirective, + IgxToastComponent + ] }) export class <%=ClassName%>Component { @ViewChild(IgxSelectComponent, { static: true }) diff --git a/packages/igx-templates/igx-ts/select/select-in-form/index.ts b/packages/igx-templates/igx-ts/select/select-in-form/index.ts index f50cbcb91..7de5e8c9d 100644 --- a/packages/igx-templates/igx-ts/select/select-in-form/index.ts +++ b/packages/igx-templates/igx-ts/select/select-in-form/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxSelectTemplate extends IgniteUIForAngularTemplate { @@ -10,18 +11,7 @@ class IgxSelectTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Select In Form"; this.description = "IgxSelect in a form"; - this.dependencies = [{ - import: [ - "IgxSelectModule", - "IgxButtonModule", - "IgxToggleModule", - "IgxToastModule" - ], - from: "<%=igxPackage%>" - }, { - import: ["FormsModule"], - from: "@angular/forms" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxSelectTemplate(); diff --git a/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts index d3734fcc1..8ef81efc9 100644 --- a/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [ NoopAnimationsModule, IgxStepperModule, IgxButtonModule, IgxButtonGroupModule ] + imports: [NoopAnimationsModule, IgxStepperModule, IgxButtonModule, IgxButtonGroupModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.ts index b7716012e..152f74f29 100644 --- a/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/stepper/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,28 @@ import { Component } from '@angular/core'; -import { IButtonGroupEventArgs, IgxStepperOrientation } from '<%=igxPackage%>'; +import { + IButtonGroupEventArgs, + IgxStepperOrientation, + IgxButtonGroupComponent, + IgxStepperComponent, + IgxStepComponent, + IgxStepTitleDirective, + IgxStepContentDirective, + IgxButtonDirective, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxButtonGroupComponent, + IgxStepperComponent, + IgxStepComponent, + IgxStepTitleDirective, + IgxStepContentDirective, + IgxButtonDirective + ] }) export class <%=ClassName%>Component { public orientation: IgxStepperOrientation = 'horizontal'; diff --git a/packages/igx-templates/igx-ts/stepper/default/index.ts b/packages/igx-templates/igx-ts/stepper/default/index.ts index 1862769ba..7fda74191 100644 --- a/packages/igx-templates/igx-ts/stepper/default/index.ts +++ b/packages/igx-templates/igx-ts/stepper/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxStepperTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxStepperTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Stepper"; this.description = "Basic IgxStepper sample"; - this.dependencies = [{ - import: ["IgxStepperModule", "IgxButtonModule", "IgxButtonGroupModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxStepperTemplate(); diff --git a/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 2d3173b05..3606a8715 100644 --- a/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxBottomNavModule, IgxIconModule, IgxRippleModule] + imports: [NoopAnimationsModule, IgxBottomNavModule, IgxIconModule, IgxRippleModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts index 4897b9efb..ec4e867f3 100644 --- a/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/tabbar/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,25 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { + IgxBottomNavComponent, + IgxBottomNavItemComponent, + IgxBottomNavHeaderComponent, + IgxIconComponent, + IgxBottomNavContentComponent, + } from 'igniteui-angular'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [ + IgxBottomNavComponent, + IgxBottomNavItemComponent, + IgxBottomNavHeaderComponent, + IgxIconComponent, + IgxBottomNavContentComponent, + ], }) export class <%=ClassName%>Component { } diff --git a/packages/igx-templates/igx-ts/tabbar/default/index.ts b/packages/igx-templates/igx-ts/tabbar/default/index.ts index 15e754f6c..3ca7358e1 100644 --- a/packages/igx-templates/igx-ts/tabbar/default/index.ts +++ b/packages/igx-templates/igx-ts/tabbar/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxBottomNavTemplate extends IgniteUIForAngularTemplate { @@ -10,13 +11,7 @@ class IgxBottomNavTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Bottom Navigation"; this.description = "three item bottom navigation template"; - this.dependencies = [{ - import: ["IgxBottomNavModule", "IgxAvatarModule", "IgxIconModule", "IgxRippleModule"], - from: "<%=igxPackage%>" - }, { - import: "CommonModule", - from: "@angular/common" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxBottomNavTemplate(); diff --git a/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts index a087b7c79..4f045e913 100644 --- a/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, IgxIconModule, IgxTabsModule, IgxRippleModule] + imports: [NoopAnimationsModule, IgxIconModule, IgxTabsModule, IgxRippleModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.ts index 2f947b944..58e96e138 100644 --- a/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/tabs/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,9 +1,28 @@ import { Component } from '@angular/core'; +import { + IgxTabsComponent, + IgxTabItemComponent, + IgxTabHeaderComponent, + IgxIconComponent, + IgxTabHeaderIconDirective, + IgxTabHeaderLabelDirective, + IgxTabContentComponent, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true, + imports: [ + IgxTabsComponent, + IgxTabItemComponent, + IgxTabHeaderComponent, + IgxIconComponent, + IgxTabHeaderIconDirective, + IgxTabHeaderLabelDirective, + IgxTabContentComponent + ] }) export class <%=ClassName%>Component { } diff --git a/packages/igx-templates/igx-ts/tabs/default/index.ts b/packages/igx-templates/igx-ts/tabs/default/index.ts index 31cb1096b..bb7847a98 100644 --- a/packages/igx-templates/igx-ts/tabs/default/index.ts +++ b/packages/igx-templates/igx-ts/tabs/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxTabsTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxTabsTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Tabs"; this.description = "Basic IgxTabs sample"; - this.dependencies = [{ - import: ["IgxTabsModule", "IgxCardModule", "IgxAvatarModule", "IgxButtonModule", "IgxRippleModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxTabsTemplate(); diff --git a/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 418b2c20d..788153ecd 100644 --- a/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -12,8 +12,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxTimePickerModule, NoopAnimationsModule] + imports: [IgxTimePickerModule, NoopAnimationsModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts index a2ac2aa19..79d0ba548 100644 --- a/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/time-picker/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,10 +1,13 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { IgxLayoutDirective, IgxTimePickerComponent } from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None, + standalone: true, + imports: [IgxLayoutDirective, IgxTimePickerComponent] }) export class <%=ClassName%>Component { public date: Date = new Date(Date.now()); diff --git a/packages/igx-templates/igx-ts/time-picker/default/index.ts b/packages/igx-templates/igx-ts/time-picker/default/index.ts index fea63dade..64338ca6a 100644 --- a/packages/igx-templates/igx-ts/time-picker/default/index.ts +++ b/packages/igx-templates/igx-ts/time-picker/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxTimePickerTemplate extends IgniteUIForAngularTemplate { @@ -10,9 +11,7 @@ class IgxTimePickerTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Time Picker"; this.description = "IgxTimePicker with initial value"; - this.dependencies = [ - { import: "IgxTimePickerModule", from: "<%=igxPackage%>" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxTimePickerTemplate(); diff --git a/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 590e17f39..042fd02a5 100644 --- a/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -10,8 +10,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [NoopAnimationsModule, FormsModule, IgxTooltipModule, IgxAvatarModule, IgxSwitchModule] + imports: [NoopAnimationsModule, FormsModule, IgxTooltipModule, IgxAvatarModule, IgxSwitchModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts index f0d734b13..5b3bf2662 100644 --- a/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/tooltip/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,9 +1,25 @@ import { Component } from '@angular/core'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; +import { + IgxAvatarComponent, + IgxTooltipTargetDirective, + IgxTooltipDirective, + IgxSwitchComponent, +} from '<%=igxPackage%>'; @Component({ selector: 'app-<%=filePrefix%>', styleUrls: ['./<%=filePrefix%>.component.scss'], - templateUrl: './<%=filePrefix%>.component.html' + templateUrl: './<%=filePrefix%>.component.html', + standalone: true, + imports: [ + IgxAvatarComponent, + IgxTooltipTargetDirective, + IgxTooltipDirective, + IgxSwitchComponent, + ReactiveFormsModule, + FormsModule + ] }) export class <%=ClassName%>Component { diff --git a/packages/igx-templates/igx-ts/tooltip/default/index.ts b/packages/igx-templates/igx-ts/tooltip/default/index.ts index 7eb7ed3ae..83ed89aeb 100644 --- a/packages/igx-templates/igx-ts/tooltip/default/index.ts +++ b/packages/igx-templates/igx-ts/tooltip/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxTooltipTemplate extends IgniteUIForAngularTemplate { @@ -10,13 +11,7 @@ class IgxTooltipTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Tooltip"; this.description = "A fully customizable tooltip"; - this.dependencies = [ - { - import: ["IgxAvatarModule", "IgxTooltipModule", "IgxSwitchModule"], - from: "<%=igxPackage%>" - }, - { import: "FormsModule", from: "@angular/forms" } - ]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxTooltipTemplate(); diff --git a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts index d048026f8..569996824 100644 --- a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [BrowserAnimationsModule, IgxTreeGridModule, IgxDatePickerModule, IgxCheckboxModule] + imports: [BrowserAnimationsModule, IgxTreeGridModule, IgxDatePickerModule, IgxCheckboxModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts index a895797b9..68be9154e 100644 --- a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/files/src/app/__path__/__filePrefix__.component.ts @@ -4,7 +4,8 @@ import { Employee, EMPLOYEE_DATA } from './localData'; @Component({ selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', - styleUrls: ['./<%=filePrefix%>.component.scss'] + styleUrls: ['./<%=filePrefix%>.component.scss'], + standalone: true }) export class <%=ClassName%>Component implements OnInit { public localData: Employee[] = []; diff --git a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/index.ts b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/index.ts index d7b3e0b17..506b723d2 100644 --- a/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/index.ts +++ b/packages/igx-templates/igx-ts/tree-grid/tree-grid-custom/index.ts @@ -1,4 +1,4 @@ -import { ControlExtraConfigType, ControlExtraConfiguration } from "@igniteui/cli-core"; +import { ControlExtraConfigType, ControlExtraConfiguration, TemplateDependency } from "@igniteui/cli-core"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { @@ -14,9 +14,17 @@ class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { this.name = "Custom Tree Grid"; this.description = "IgxTreeGrid with optional features like sorting, filtering, row editing, etc."; this.dependencies = [ - { import: "IgxTreeGridModule", from: "<%=igxPackage%>" } + { + standalone: true, + import: "IgxTreeGridComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxColumnComponent", + from: "<%=igxPackage%>" + } ]; - this.hasExtraConfiguration = true; } @@ -44,6 +52,7 @@ class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { const columnBoolFeatures = []; const treeGridFeatures = []; const featureUrl = "https://www.infragistics.com/products/ignite-ui-angular/angular/components/treegrid/"; + const anchorWrapper = { start: ``); + this.dependencies.push({ + standalone: true, + import: "IgxPaginatorComponent", + from: "<%=igxPackage%>" + }); break; case "Column Pinning": columnPinning = '[pinned]="true"'; @@ -124,6 +137,7 @@ class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { break; } } + selectedFeatures = features.map((e, i) => { anchorWrapper.href = featuresUrls[i]; anchorWrapper.text = e; @@ -134,6 +148,37 @@ class IgxCustomTreeGridTemplate extends IgniteUIForAngularTemplate { selectedFeatures = `

Active Features:
${selectedFeatures}

`; } if (toolbarActions.length) { + this.dependencies = [ + ...this.dependencies, + ...[ + { + standalone: true, + import: "IgxGridToolbarComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarTitleComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarActionsComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarPinningComponent", + from: "<%=igxPackage%>" + }, + { + standalone: true, + import: "IgxGridToolbarHidingComponent", + from: "<%=igxPackage%>" + } + ] + ]; + const parts = [ " ", " Employees", diff --git a/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts b/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts index 858ed7213..80cfef2f9 100644 --- a/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts +++ b/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.spec.ts @@ -9,8 +9,7 @@ describe('<%=ClassName%>Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [<%=ClassName%>Component], - imports: [IgxComboModule, NoopAnimationsModule, IgxTooltipModule] + imports: [IgxComboModule, NoopAnimationsModule, IgxTooltipModule, <%=ClassName%>Component] }) .compileComponents(); })); diff --git a/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.ts b/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.ts index 800f58a10..d11a86bed 100644 --- a/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.ts +++ b/packages/igx-templates/igx-ts/tree/default/files/src/app/__path__/__filePrefix__.component.ts @@ -1,5 +1,12 @@ import { Component, OnDestroy } from '@angular/core'; -import { IgxTreeNodeComponent } from '<%=igxPackage%>'; +import { NgFor, NgTemplateOutlet, NgIf } from '@angular/common'; +import { + IgxTreeNodeComponent, + IgxTreeComponent, + IgxIconComponent, + IgxTooltipTargetDirective, + IgxTooltipDirective, +} from '<%=igxPackage%>'; import { Subject } from 'rxjs'; import { take, takeUntil } from 'rxjs/operators'; import { DATA, NodeData, REMOTE_ROOT, SelectableNodeData } from './local-data'; @@ -9,7 +16,18 @@ import { DataService } from './services/data.service'; selector: 'app-<%=filePrefix%>', templateUrl: './<%=filePrefix%>.component.html', styleUrls: ['./<%=filePrefix%>.component.scss'], - providers: [DataService] + providers: [DataService], + standalone: true, + imports: [ + IgxTreeComponent, + NgFor, + IgxTreeNodeComponent, + NgTemplateOutlet, + IgxIconComponent, + NgIf, + IgxTooltipTargetDirective, + IgxTooltipDirective + ] }) export class <%=ClassName%>Component implements OnDestroy { diff --git a/packages/igx-templates/igx-ts/tree/default/index.ts b/packages/igx-templates/igx-ts/tree/default/index.ts index 7ea0bf830..9a7cf60eb 100644 --- a/packages/igx-templates/igx-ts/tree/default/index.ts +++ b/packages/igx-templates/igx-ts/tree/default/index.ts @@ -1,3 +1,4 @@ +import { IGNITEUI_ANGULAR_PACKAGE } from "../../../constants"; import { IgniteUIForAngularTemplate } from "../../../IgniteUIForAngularTemplate"; class IgxComboTemplate extends IgniteUIForAngularTemplate { @@ -10,10 +11,7 @@ class IgxComboTemplate extends IgniteUIForAngularTemplate { this.projectType = "igx-ts"; this.name = "Tree"; this.description = "IgxTree sample with selection and load-on-demand node"; - this.dependencies = [{ - import: ["IgxTreeModule", "IgxIconModule", "IgxTooltipModule"], - from: "<%=igxPackage%>" - }]; + this.packages = [IGNITEUI_ANGULAR_PACKAGE]; } } module.exports = new IgxComboTemplate(); diff --git a/packages/igx-templates/index.ts b/packages/igx-templates/index.ts index 489171e4e..8755b0cba 100644 --- a/packages/igx-templates/index.ts +++ b/packages/igx-templates/index.ts @@ -1,6 +1,7 @@ -import * as projLib from "./igx-ts"; +import * as standalone from "./igx-ts"; +import * as legacy from "./igx-ts-legacy"; export * from "./package-resolve"; export * from "./IgniteUIForAngularTemplate"; export * from "./Update"; -export default projLib; +export default [standalone, legacy]; diff --git a/packages/ng-schematics/src/SchematicsTemplateManager.ts b/packages/ng-schematics/src/SchematicsTemplateManager.ts index bfc0ef482..8b77d9516 100644 --- a/packages/ng-schematics/src/SchematicsTemplateManager.ts +++ b/packages/ng-schematics/src/SchematicsTemplateManager.ts @@ -8,9 +8,7 @@ export class SchematicsTemplateManager extends BaseTemplateManager { this.frameworks.push({ id: "angular", name: "angular", - projectLibraries: [ - require("@igniteui/angular-templates").default as ProjectLibrary - ] + projectLibraries: require("@igniteui/angular-templates").default as ProjectLibrary[] }); } diff --git a/spec/acceptance/add-spec.ts b/spec/acceptance/add-spec.ts index 6a537e7d3..821b956d1 100644 --- a/spec/acceptance/add-spec.ts +++ b/spec/acceptance/add-spec.ts @@ -253,7 +253,7 @@ describe("Add command", () => { dependencies: { [igxPackage]: "9.0.0" } })); fs.writeFileSync(ProjectConfig.configFile, JSON.stringify({ - project: { framework: "angular", projectType: "igx-ts", components: [] } + project: { framework: "angular", projectType: "igx-ts-legacy", components: [] } })); fs.writeFileSync("tslint.json", JSON.stringify({ rules: { @@ -328,7 +328,7 @@ export class AppModule { spyOn(ProjectConfig, "globalConfig").and.returnValue({}); fs.writeFileSync(ProjectConfig.configFile, JSON.stringify({ - project: { framework: "angular", projectType: "igx-ts", components: [] } + project: { framework: "angular", projectType: "igx-ts-legacy", components: [] } })); fs.writeFileSync("tslint.json", JSON.stringify({ rules: { diff --git a/spec/unit/add-spec.ts b/spec/unit/add-spec.ts index e72a645be..5b7b0a7c0 100644 --- a/spec/unit/add-spec.ts +++ b/spec/unit/add-spec.ts @@ -1,5 +1,8 @@ import { IgniteUIForAngularTemplate } from "@igniteui/angular-templates"; -import { App, GoogleAnalytics, PackageManager, ProjectConfig, TypeScriptFileUpdate, TypeScriptUtils, Util } from "@igniteui/cli-core"; +import { + App, FS_TOKEN, GoogleAnalytics, IFileSystem, PackageManager, ProjectConfig, + TypeScriptFileUpdate, TypeScriptUtils, Util +} from "@igniteui/cli-core"; import * as path from "path"; import * as ts from "typescript"; import { default as addCmd } from "../../packages/cli/lib/commands/add"; @@ -138,6 +141,7 @@ describe("Unit - Add command", () => { const mockTemplate = new IgniteUIForAngularTemplate("test"); mockTemplate.packages = []; mockTemplate.dependencies = []; + spyOn(mockTemplate, "fileExists").and.returnValue(true); const directoryPath = path.join("My/Example/Path"); spyOn(process, "cwd").and.returnValue(directoryPath); diff --git a/spec/unit/base-templates/IgniteUIForAngularTemplate-spec.ts b/spec/unit/base-templates/IgniteUIForAngularTemplate-spec.ts index 5432f552b..3017724dd 100644 --- a/spec/unit/base-templates/IgniteUIForAngularTemplate-spec.ts +++ b/spec/unit/base-templates/IgniteUIForAngularTemplate-spec.ts @@ -47,6 +47,7 @@ describe("Unit - IgniteUIForAngularTemplate Base", () => { const mockFS = { fileExists: () => {} }; + spyOn(templ, "fileExists").and.returnValue(true); spyOn(App.container, "get").and.returnValue(mockFS); spyOn(mockFS, "fileExists").and.callFake(file => { if (file === "src/app/app-routing.module.ts") { @@ -76,6 +77,7 @@ describe("Unit - IgniteUIForAngularTemplate Base", () => { }); it("updates NgModule metadata", async done => { const templ = new TestTemplate(); + spyOn(templ, "fileExists").and.returnValue(true); templ.dependencies.push({ import: "test", from: "test" }); templ.registerInProject("", ""); expect(helpers.tsUpdateMock.addNgModuleMeta).toHaveBeenCalledWith( @@ -102,6 +104,7 @@ describe("Unit - IgniteUIForAngularTemplate Base", () => { const filePath = path.join("target", "./test.ts"); const templ = new TestTemplate(); + spyOn(templ, "fileExists").and.returnValue(true); templ.dependencies = [{ from: "./test.ts" }]; templ.registerInProject("target", "name"); @@ -113,6 +116,7 @@ describe("Unit - IgniteUIForAngularTemplate Base", () => { it("should skip route if skipRoute is passed", async done => { const templ = new TestTemplate(); + spyOn(templ, "fileExists").and.returnValue(true); templ.registerInProject("target/path", "view name", { skipRoute: true }); expect(helpers.tsUpdateMock.addRoute).toHaveBeenCalledTimes(0); diff --git a/tslint.json b/tslint.json index 0327e8024..1dc7abaa9 100644 --- a/tslint.json +++ b/tslint.json @@ -21,12 +21,6 @@ "ignore-pattern": "TODO|\\w\\.\\w" } ], - "member-ordering": [ - true, - { - "order": "fields-first" - } - ], "variable-name": [ true, "allow-leading-underscore" @@ -45,15 +39,13 @@ true, "@angular-devkit/schematics" ], + "array-type": false, + "member-ordering": false, + "ordered-imports": false, "interface-name": false, "max-classes-per-file": false, "prefer-object-spread": false, "prefer-conditional-expression": false, - "object-literal-sort-keys": [ - true, - "ignore-case", - "match-declaration-order", - "shorthand-first" - ] + "object-literal-sort-keys": false } } \ No newline at end of file