diff --git a/README.md b/README.md index 176f0761e..9911d47b4 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,26 @@ Salix is also the scientific name of a beautifull tree! :) Required applications. +* Visual Studio Code * Node.js = 8.9.4 * NGINX * Docker +In Visual Studio Code we use the ESLint extension. Open Visual Studio Code, press Ctrl+P and paste the following command +``` +ext install dbaeumer.vscode-eslint +``` + You will need to install globally the following items. ``` $ npm install -g karma-cli gulp webpack nodemon ``` +## Linux Only Prerequisites + +Your user must be on the docker group to use it so you will need to run this command: +``` +$ sudo usermod -G docker yourusername +``` ## Getting Started // Installing diff --git a/client/auth/src/login/logo.svg b/client/auth/src/login/logo.svg index a6eae7841..1fae1108f 100644 --- a/client/auth/src/login/logo.svg +++ b/client/auth/src/login/logo.svg @@ -1,119 +1,70 @@ - - - -image/svg+xml \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/client/src/address-create/address-create.html b/client/client/src/address-create/address-create.html index 514457fb6..712a771de 100644 --- a/client/client/src/address-create/address-create.html +++ b/client/client/src/address-create/address-create.html @@ -6,7 +6,7 @@ save="post" form="form"> -
+ Address diff --git a/client/client/src/address-edit/address-edit.html b/client/client/src/address-edit/address-edit.html index cc50c1060..74e273c97 100644 --- a/client/client/src/address-edit/address-edit.html +++ b/client/client/src/address-edit/address-edit.html @@ -10,7 +10,7 @@ data="$ctrl.address" form="form"> - + Address diff --git a/client/client/src/addresses/addresses.html b/client/client/src/addresses/addresses.html index 2e5bb98c5..052b2ab11 100644 --- a/client/client/src/addresses/addresses.html +++ b/client/client/src/addresses/addresses.html @@ -1,5 +1,5 @@ - + Addresses diff --git a/client/client/src/basic-data/basic-data.html b/client/client/src/basic-data/basic-data.html index 77865c4f6..349130e9c 100644 --- a/client/client/src/basic-data/basic-data.html +++ b/client/client/src/basic-data/basic-data.html @@ -5,7 +5,7 @@ form="form" save="patch"> - + Basic data @@ -30,6 +30,7 @@ value-field="id" select-fields="name" label="Salesperson" + vn-acl="salesAssistant" where="{or: [{firstName: {regexp: 'search'}}, {name: {regexp: 'search'}}]}"> - + Pay method diff --git a/client/client/src/card/card.html b/client/client/src/card/card.html index 9894bcbb5..c40a20169 100644 --- a/client/client/src/card/card.html +++ b/client/client/src/card/card.html @@ -10,7 +10,7 @@ - + diff --git a/client/client/src/create/create.html b/client/client/src/create/create.html index adb4f08d2..943533ba0 100644 --- a/client/client/src/create/create.html +++ b/client/client/src/create/create.html @@ -10,15 +10,19 @@ Create client - + + + + - + - - - + + + + + + + + + + + diff --git a/client/client/src/credit-classification-create/credit-classification-create.html b/client/client/src/credit-classification-create/credit-classification-create.html index a8aa58ada..feba2f242 100644 --- a/client/client/src/credit-classification-create/credit-classification-create.html +++ b/client/client/src/credit-classification-create/credit-classification-create.html @@ -5,7 +5,7 @@ form="form" save="post"> - + New contract diff --git a/client/client/src/credit-classification-list/credit-classification-list.html b/client/client/src/credit-classification-list/credit-classification-list.html index 827e73453..363b1a727 100644 --- a/client/client/src/credit-classification-list/credit-classification-list.html +++ b/client/client/src/credit-classification-list/credit-classification-list.html @@ -1,4 +1,4 @@ - + Contract credit insurance diff --git a/client/client/src/credit-create/credit-create.html b/client/client/src/credit-create/credit-create.html index 04fd7ab13..4d706aa02 100644 --- a/client/client/src/credit-create/credit-create.html +++ b/client/client/src/credit-create/credit-create.html @@ -5,7 +5,7 @@ form="form" save="patch"> - + Add credit diff --git a/client/client/src/credit-insurance-create/credit-insurance-create.html b/client/client/src/credit-insurance-create/credit-insurance-create.html index 8d8005187..0712f486a 100644 --- a/client/client/src/credit-insurance-create/credit-insurance-create.html +++ b/client/client/src/credit-insurance-create/credit-insurance-create.html @@ -6,8 +6,7 @@ save="post"> + ng-submit="watcher.submitGo('clientCard.creditInsurance.list', {classificationId: post.params.classificationId})"> New credit diff --git a/client/client/src/credit-insurance-list/credit-insurance-list.html b/client/client/src/credit-insurance-list/credit-insurance-list.html index ba3931013..0577e4d80 100644 --- a/client/client/src/credit-insurance-list/credit-insurance-list.html +++ b/client/client/src/credit-insurance-list/credit-insurance-list.html @@ -1,5 +1,5 @@ - + Requested credits diff --git a/client/client/src/credit-list/credit-list.html b/client/client/src/credit-list/credit-list.html index f3a0f5e11..020d9b115 100644 --- a/client/client/src/credit-list/credit-list.html +++ b/client/client/src/credit-list/credit-list.html @@ -1,5 +1,5 @@ - + Credit diff --git a/client/client/src/fiscal-data/fiscal-data.html b/client/client/src/fiscal-data/fiscal-data.html index b0493cd25..445939624 100644 --- a/client/client/src/fiscal-data/fiscal-data.html +++ b/client/client/src/fiscal-data/fiscal-data.html @@ -5,7 +5,7 @@ form="form" save="patch"> - + Fiscal data diff --git a/client/client/src/greuge-create/greuge-create.html b/client/client/src/greuge-create/greuge-create.html index 0be11eb26..e502dcd10 100644 --- a/client/client/src/greuge-create/greuge-create.html +++ b/client/client/src/greuge-create/greuge-create.html @@ -5,7 +5,7 @@ form="form" save="post"> - + Add Greuge diff --git a/client/client/src/greuge-list/greuge-list.html b/client/client/src/greuge-list/greuge-list.html index f6d5b8344..2e8d5060f 100644 --- a/client/client/src/greuge-list/greuge-list.html +++ b/client/client/src/greuge-list/greuge-list.html @@ -1,6 +1,6 @@ - + Greuge diff --git a/client/client/src/invoices/invoices.html b/client/client/src/invoices/invoices.html index fcbb36b97..5234c9e0b 100644 --- a/client/client/src/invoices/invoices.html +++ b/client/client/src/invoices/invoices.html @@ -1,6 +1,6 @@ - + Invoices diff --git a/client/client/src/mandate/mandate.html b/client/client/src/mandate/mandate.html index ef706ece6..61dde6655 100644 --- a/client/client/src/mandate/mandate.html +++ b/client/client/src/mandate/mandate.html @@ -1,5 +1,5 @@ - + Mandate diff --git a/client/client/src/note-create/note-create.html b/client/client/src/note-create/note-create.html index 6ad907794..f55718eb9 100644 --- a/client/client/src/note-create/note-create.html +++ b/client/client/src/note-create/note-create.html @@ -6,7 +6,7 @@ save="post" form="form"> - + New note diff --git a/client/client/src/notes/notes.html b/client/client/src/notes/notes.html index 213a4fecb..040c4d180 100644 --- a/client/client/src/notes/notes.html +++ b/client/client/src/notes/notes.html @@ -1,4 +1,4 @@ - + Notes - + Add recovery diff --git a/client/client/src/recovery-list/recovery-list.html b/client/client/src/recovery-list/recovery-list.html index b8d083e99..433f934cf 100644 --- a/client/client/src/recovery-list/recovery-list.html +++ b/client/client/src/recovery-list/recovery-list.html @@ -1,5 +1,5 @@ - + Recovery diff --git a/client/client/src/summary/client-summary.html b/client/client/src/summary/client-summary.html index a720f9c41..8788464f3 100644 --- a/client/client/src/summary/client-summary.html +++ b/client/client/src/summary/client-summary.html @@ -1,4 +1,4 @@ - + diff --git a/client/client/src/web-access/locale/es.yml b/client/client/src/web-access/locale/es.yml index 9d95dcc24..2d1905c16 100644 --- a/client/client/src/web-access/locale/es.yml +++ b/client/client/src/web-access/locale/es.yml @@ -2,5 +2,4 @@ User: Usuario Enable web access: Habilitar acceso web New password: Nueva contraseña Repeat password: Repetir contraseña -Change password: Cambiar contraseña -Client must be checked to activate: No se puede activar un cliente si no esta verificado (036) \ No newline at end of file +Change password: Cambiar contraseña \ No newline at end of file diff --git a/client/client/src/web-access/web-access.html b/client/client/src/web-access/web-access.html index 7c9b87df9..1c9070235 100644 --- a/client/client/src/web-access/web-access.html +++ b/client/client/src/web-access/web-access.html @@ -5,7 +5,7 @@ data="$ctrl.account" form="form"> - + Web access @@ -13,8 +13,7 @@ vn-one label="Enable web access" field="$ctrl.account.active" - vn-acl="employee" - acl-conditional-to-employee="{{$ctrl.canEnableCheckBox}}"> + vn-acl="employee"> @@ -23,7 +22,6 @@ vn-one margin-medium-top label="User" - info="Client must be checked to activate" field="$ctrl.account.name"> diff --git a/client/core/src/components/grid/grid.js b/client/core/src/components/grid/grid.js new file mode 100644 index 000000000..423b033ce --- /dev/null +++ b/client/core/src/components/grid/grid.js @@ -0,0 +1 @@ +import './style.scss'; diff --git a/client/core/src/components/grid/style.scss b/client/core/src/components/grid/style.scss new file mode 100644 index 000000000..b46e94865 --- /dev/null +++ b/client/core/src/components/grid/style.scss @@ -0,0 +1,16 @@ +.vn-grid { + border-collapse: collapse; + td, th{ + text-align: left; + padding: 10px; + } + & > thead, & > tbody { + border-bottom: 3px solid #9D9D9D; + } + & > tbody > tr{ + border-bottom: 1px solid #9D9D9D; + } + td[number], th[number]{ + text-align: right; + } +} \ No newline at end of file diff --git a/client/core/src/components/icon-menu/icon-menu.html b/client/core/src/components/icon-menu/icon-menu.html index c2d5ffeff..b3df12dd1 100644 --- a/client/core/src/components/icon-menu/icon-menu.html +++ b/client/core/src/components/icon-menu/icon-menu.html @@ -9,8 +9,8 @@ show="$ctrl.showDropDown" selected="$ctrl.selected" filter="true" - parent="$ctrl.element" - > + parent="$ctrl.element"> +
+ parent="$ctrl.element"> +
\ No newline at end of file diff --git a/client/core/src/components/index.js b/client/core/src/components/index.js index 774971572..dbebc74e5 100644 --- a/client/core/src/components/index.js +++ b/client/core/src/components/index.js @@ -16,6 +16,7 @@ import './drop-down/drop-down'; import './menu/menu'; import './column-header/column-header'; import './grid-header/grid-header'; +import './grid/grid'; import './multi-check/multi-check'; import './date-picker/date-picker'; import './button/button'; diff --git a/client/core/src/components/popover/popover.js b/client/core/src/components/popover/popover.js index 4df7cc115..afc1f7c4e 100644 --- a/client/core/src/components/popover/popover.js +++ b/client/core/src/components/popover/popover.js @@ -32,14 +32,21 @@ export default class Popover extends Component { this.content = this.element.querySelector('.content'); } - set child(value) { - this.content.appendChild(value); - } - + /** + * @type {HTMLElement} The popover child. + */ get child() { return this.content.firstChild; } + set child(value) { + this.content.innerHTML = ''; + this.content.appendChild(value); + } + + /** + * @type {Boolean} Wether to show or hide the popover. + */ get shown() { return this._shown; } diff --git a/client/item/src/barcode/item-barcode.html b/client/item/src/barcode/item-barcode.html index 3bd4c875b..37c17298b 100644 --- a/client/item/src/barcode/item-barcode.html +++ b/client/item/src/barcode/item-barcode.html @@ -1,10 +1,10 @@ - Item Barcodes + Item barcode diff --git a/client/item/src/create/item-create.html b/client/item/src/create/item-create.html index d537fe7f6..0194275d9 100644 --- a/client/item/src/create/item-create.html +++ b/client/item/src/create/item-create.html @@ -16,16 +16,20 @@ + field="$ctrl.item.typeFk" + where="{or: [{code: {regexp: 'search'}}, {name: {regexp: 'search'}}]}"> + {{code}} : {{name}} + value-field="id" + field="$ctrl.item.intrastatFk" + where="{or: [{id: {regexp: 'search'}}, {description: {regexp: 'search'}}]}"> + {{id}} : {{description}} @@ -36,12 +40,6 @@ value-field="id" field="$ctrl.item.originFk">
- -
diff --git a/client/item/src/locale/es.yml b/client/item/src/locale/es.yml index ac2411e96..2fc0077d7 100644 --- a/client/item/src/locale/es.yml +++ b/client/item/src/locale/es.yml @@ -26,4 +26,12 @@ Do you want to clone this item?: ¿Desea clonar este artículo? All it's properties will be copied: Todas sus propiedades serán copiadas Yes, clone: Si, clonar Value: Valor -Priority: Prioridad \ No newline at end of file +Priority: Prioridad +Item tax: Tasas del artículo +Country: País +Class: Clase +Item niches: Nichos del artículo +Warehouse: Almacén +Code: Código +Botanical: Botánico +Species: Especie \ No newline at end of file diff --git a/client/item/src/niche/item-niche.html b/client/item/src/niche/item-niche.html index 068eedb41..f8948e128 100644 --- a/client/item/src/niche/item-niche.html +++ b/client/item/src/niche/item-niche.html @@ -5,7 +5,7 @@ - Item Niches + Item niches diff --git a/client/ticket/routes.json b/client/ticket/routes.json index e0c476028..c602f8768 100644 --- a/client/ticket/routes.json +++ b/client/ticket/routes.json @@ -2,7 +2,7 @@ "module": "ticket", "name": "Tickets", "icon": "icon-ticket", - "validations": false, + "validations": true, "routes": [ { "url": "/ticket", @@ -47,9 +47,9 @@ } }, { - "url": "/observations", - "state": "ticket.card.observations", - "component": "vn-ticket-observations", + "url": "/observation", + "state": "ticket.card.observation", + "component": "vn-ticket-observation", "params": { "ticket": "$ctrl.ticket" }, @@ -59,15 +59,45 @@ } }, { - "url" : "/package", - "abstract": true, - "state": "ticket.card.package", - "component": "ui-view" + "url": "/volume", + "state": "ticket.card.volume", + "component": "vn-ticket-volume", + "params": { + "ticket": "$ctrl.ticket" + }, + "menu": { + "description": "Volume", + "icon": "icon-volume" + } }, { - "url": "/list", - "state": "ticket.card.package.list", - "component": "vn-ticket-package-list", + "url": "/expedition", + "state": "ticket.card.expedition", + "component": "vn-ticket-expedition", + "params": { + "ticket": "$ctrl.ticket" + }, + "menu": { + "description": "Expedition", + "icon": "icon-volum" + } + }, + { + "url": "/mana", + "state": "ticket.card.mana", + "component": "vn-ticket-mana", + "params": { + "ticket": "$ctrl.ticket" + }, + "menu": { + "description": "Mana", + "icon": "icon-sms" + } + }, + { + "url" : "/package", + "state": "ticket.card.package", + "component": "vn-ticket-package", "params": { "ticket": "$ctrl.ticket" }, @@ -77,16 +107,36 @@ } }, { - "url" : "/review", - "state": "ticket.card.review", - "component": "vn-ticket-review", + "url" : "/tracking", + "state": "ticket.card.tracking", + "component": "vn-ticket-tracking", "params": { "ticket": "$ctrl.ticket" }, "menu": { - "description": "Review", + "description": "Tracking", "icon": "remove_red_eye" } + }, + { + "url": "/create", + "state": "ticket.card.tracking.create", + "component": "vn-ticket-tracking-create", + "params": { + "client": "$ctrl.client" + } + }, + { + "url" : "/sale", + "state": "ticket.card.sale", + "component": "vn-ticket-sale", + "params": { + "ticket": "$ctrl.ticket" + }, + "menu": { + "description": "Sale", + "icon": "icon-lines" + } } ] } \ No newline at end of file diff --git a/client/ticket/src/expedition/ticket-expedition.html b/client/ticket/src/expedition/ticket-expedition.html new file mode 100644 index 000000000..c7be8da69 --- /dev/null +++ b/client/ticket/src/expedition/ticket-expedition.html @@ -0,0 +1,42 @@ + + + + + Expedition + + + + + + + + + + + + + + delete + + {{expedition.itemFk}} + {{expedition.item.name}} + {{expedition.package.name}} + {{expedition.counter}} + {{expedition.checked}} + {{expedition.worker.firstName}} {{expedition.worker.name}} + {{expedition.created | date:'dd/MM/yyyy'}} + + + No results + + + + + diff --git a/client/ticket/src/expedition/ticket-expedition.js b/client/ticket/src/expedition/ticket-expedition.js new file mode 100644 index 000000000..244c3cb04 --- /dev/null +++ b/client/ticket/src/expedition/ticket-expedition.js @@ -0,0 +1,22 @@ +import ngModule from '../module'; +import FilterTicketList from '../filter-ticket-list'; + +class Controller extends FilterTicketList { + constructor($scope, $timeout, $stateParams, $http) { + super($scope, $timeout, $stateParams); + this.params = $stateParams; + this.$http = $http; + } + deleteExpedition(expedition) { + this.$http.delete(`/ticket/api/Expeditions/${expedition.id}`, this.params).then( + () => this.$.index.accept() + ); + } +} + +Controller.$inject = ['$scope', '$timeout', '$state', '$http']; + +ngModule.component('vnTicketExpedition', { + template: require('./ticket-expedition.html'), + controller: Controller +}); diff --git a/client/ticket/src/fetched-tags/fetched-tags.html b/client/ticket/src/fetched-tags/fetched-tags.html new file mode 100644 index 000000000..334f89c09 --- /dev/null +++ b/client/ticket/src/fetched-tags/fetched-tags.html @@ -0,0 +1,8 @@ + + {{::$ctrl.sale.concept}} + + + {{::fetchedTag.tag.name}} {{::fetchedTag.value}} + + + \ No newline at end of file diff --git a/client/ticket/src/fetched-tags/fetched-tags.js b/client/ticket/src/fetched-tags/fetched-tags.js new file mode 100644 index 000000000..81031d764 --- /dev/null +++ b/client/ticket/src/fetched-tags/fetched-tags.js @@ -0,0 +1,12 @@ +import ngModule from '../module'; + +class Controller {} +Controller.$inject = []; + +ngModule.component('vnFetchedTags', { + template: require('./fetched-tags.html'), + controller: Controller, + bindings: { + sale: '<' + } +}); diff --git a/client/ticket/src/filter-ticket-list.js b/client/ticket/src/filter-ticket-list.js new file mode 100644 index 000000000..f3a8c801b --- /dev/null +++ b/client/ticket/src/filter-ticket-list.js @@ -0,0 +1,9 @@ +import FilterList from 'core/src/lib/filter-list'; + +export default class FilterTicketList extends FilterList { + constructor($scope, $timeout, $state) { + super($scope, $timeout, $state); + this.modelName = 'ticketFk'; + } +} +FilterTicketList.$inject = ['$scope', '$timeout', '$state']; diff --git a/client/ticket/src/locale/es.yml b/client/ticket/src/locale/es.yml index e65b6ab54..5f4025588 100644 --- a/client/ticket/src/locale/es.yml +++ b/client/ticket/src/locale/es.yml @@ -1,6 +1,21 @@ -Tickets: Tickets +Amount: Importe +Basic data: Datos básicos +Description: Descripción +Discount: Descuento +Item: Articulo +Delete: Borrar +delete expedition: borrar expedición +Expedition: Expedición +Name: Nombre +Package type: Tipo de porte +Counter: Contador +Checked: Comprobado +Worker: Trabajador Notes: Notas Observation type: Tipo de observación -Description: Descripción +Price: Precio +Quantity: Cantidad +Sale: Lineas del pedido +Some fields are invalid: Algunos campos no son válidos The observation type must be unique: El tipo de observación debe ser único -Some fields are invalid: Algunos campos no son válidos \ No newline at end of file +Tickets: Tickets diff --git a/client/ticket/src/notes/ticket-observations.html b/client/ticket/src/note/ticket-observation.html similarity index 93% rename from client/ticket/src/notes/ticket-observations.html rename to client/ticket/src/note/ticket-observation.html index b48ec5a72..dc3b1c12c 100644 --- a/client/ticket/src/notes/ticket-observations.html +++ b/client/ticket/src/note/ticket-observation.html @@ -1,6 +1,6 @@ @@ -31,7 +31,8 @@ vn-two margin-large-right label="Description" - model="ticketObservation.description"> + model="ticketObservation.description" + rule="ticketObservation.description"> 0 || observationsObj.create.length > 0 || observationsObj.delete.length > 0; if (canSubmit) { - return this.$http.post(`/ticket/api/TicketObservations/crudTicketObservations`, observationsObj).then(() => { + return this.$http.post(`/ticket/api/TicketObservations/crudTicketObservation`, observationsObj).then(() => { this.getObservations(); this._unsetDirtyForm(); }); @@ -129,11 +129,11 @@ class TicketObservations { } } -TicketObservations.$inject = ['$stateParams', '$scope', '$http', '$translate', 'vnApp']; +Controller.$inject = ['$stateParams', '$scope', '$http', '$translate', 'vnApp']; -ngModule.component('vnTicketObservations', { - template: require('./ticket-observations.html'), - controller: TicketObservations, +ngModule.component('vnTicketObservation', { + template: require('./ticket-observation.html'), + controller: Controller, bindings: { ticket: '<' } diff --git a/client/ticket/src/notes/ticket-observations.spec.js b/client/ticket/src/note/ticket-observation.spec.js similarity index 84% rename from client/ticket/src/notes/ticket-observations.spec.js rename to client/ticket/src/note/ticket-observation.spec.js index 982cfb61b..ceed1d232 100644 --- a/client/ticket/src/notes/ticket-observations.spec.js +++ b/client/ticket/src/note/ticket-observation.spec.js @@ -1,7 +1,7 @@ -import './ticket-observations.js'; +import './ticket-observation.js'; describe('ticket', () => { - describe('Component vnTicketObservations', () => { + describe('Component vnTicketObservation', () => { let $componentController; let $state; let controller; @@ -15,7 +15,7 @@ describe('ticket', () => { $componentController = _$componentController_; $state = _$state_; $httpBackend = _$httpBackend_; - controller = $componentController('vnTicketObservations', {$state: $state}); + controller = $componentController('vnTicketObservation', {$state: $state}); })); describe('add / remove observation', () => { @@ -24,10 +24,10 @@ describe('ticket', () => { spyOn(controller, '_setIconAdd').and.callThrough(); controller.addObservation(); - expect(controller._setIconAdd).toHaveBeenCalledWith(); expect(controller.ticketObservations.length).toEqual(1); expect(controller.ticketObservations[0].id).toBe(undefined); expect(controller.ticketObservations[0].showAddIcon).toBeTruthy(); + expect(controller._setIconAdd).toHaveBeenCalledWith(); }); it('should remove an observation that occupies the position in the index given and call _setIconAdd()', () => { @@ -42,11 +42,11 @@ describe('ticket', () => { controller.removeObservation(index); - expect(controller._setIconAdd).toHaveBeenCalledWith(); expect(controller.ticketObservations.length).toEqual(2); expect(controller.ticketObservations[0].showAddIcon).toBeFalsy(); expect(controller.ticketObservations[1].showAddIcon).toBeTruthy(); expect(controller.ticketObservations[index]).toBe(undefined); + expect(controller._setIconAdd).toHaveBeenCalledWith(); }); }); @@ -70,16 +70,33 @@ describe('ticket', () => { describe('get Observations()', () => { it('should perform a GET query to receive the ticket observations', () => { - let res = [{id: 1, observationTypeFk: 1, description: 'one'}]; + let response = [{id: 1, observationTypeFk: 1, description: 'one'}]; + spyOn(controller, 'setOldObservations'); - $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond(res); + $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond(response); $httpBackend.expectGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`); controller.getObservations(); $httpBackend.flush(); + + expect(controller.setOldObservations).toHaveBeenCalledWith(jasmine.any(Object)); }); }); describe('submit()', () => { + it("should return an error message 'Some fields are invalid'", () => { + controller.$scope.form = {}; + controller.$scope.form.$invalid = true; + spyOn(controller.vnApp, 'showMessage').and.callThrough(); + controller.ticketObservations = [ + {id: 1, observationTypeFk: 1, description: 'one', itemFk: 1}, + {observationTypeFk: 1, description: 'one', itemFk: 1} + ]; + controller.oldObservations = {1: {id: 1, observationTypeFk: 1, description: 'one', itemFk: 1}}; + controller.submit(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('Some fields are invalid'); + }); + it("should return an error message 'The observation type must be unique'", () => { controller.$scope.form = {}; spyOn(controller.vnApp, 'showMessage').and.callThrough(); @@ -100,7 +117,7 @@ describe('ticket', () => { controller.removedObservations = [1]; $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); - $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); + $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservation`).respond('ok!'); controller.submit(); $httpBackend.flush(); }); @@ -111,7 +128,7 @@ describe('ticket', () => { controller.oldObservations = {1: {id: 1, observationTypeFk: 1, description: 'one'}}; $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); - $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); + $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservation`).respond('ok!'); controller.submit(); $httpBackend.flush(); }); @@ -121,7 +138,7 @@ describe('ticket', () => { controller.ticketObservations = [{observationTypeFk: 2, description: 'two'}]; $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); - $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); + $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservation`).respond('ok!'); controller.submit(); $httpBackend.flush(); }); diff --git a/client/ticket/src/package/list/package-list.html b/client/ticket/src/package/list/package-list.html deleted file mode 100644 index 6a895361e..000000000 --- a/client/ticket/src/package/list/package-list.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - Packages - - - - {{id}} : {{name}} - - - - - - - - - - - - - - - - diff --git a/client/ticket/src/package/list/package-list.js b/client/ticket/src/package/list/package-list.js deleted file mode 100644 index f77a77418..000000000 --- a/client/ticket/src/package/list/package-list.js +++ /dev/null @@ -1,19 +0,0 @@ -import ngModule from '../../module'; - -class Controller { - - construct($http, $scope) { - this.$http = $http; - this.$ = $scope; - } -} - -Controller.$inject = ['$http', '$scope']; - -ngModule.component('vnTicketPackageList', { - template: require('./package-list.html'), - controller: Controller, - bindings: { - ticket: '<' - } -}); diff --git a/client/ticket/src/package/package.html b/client/ticket/src/package/package.html new file mode 100644 index 000000000..4a4430eeb --- /dev/null +++ b/client/ticket/src/package/package.html @@ -0,0 +1,68 @@ + + + + + + + + + Packages + + + + {{id}} : {{name}} + + + + + + + + + +
+ + + + + +
+ + + + \ No newline at end of file diff --git a/client/ticket/src/package/package.js b/client/ticket/src/package/package.js new file mode 100644 index 000000000..6cb749517 --- /dev/null +++ b/client/ticket/src/package/package.js @@ -0,0 +1,73 @@ +import ngModule from '../module'; + +class Controller { + + constructor($http, $scope, $translate, vnApp) { + this.$http = $http; + this.$ = $scope; + this.$translate = $translate; + this.vnApp = vnApp; + this.removedPackages = []; + this.updatedPackages = []; + } + + submit() { + let query = `/ticket/api/TicketPackagings/crudTicketPackaging`; + let packagesObj = { + delete: this.removedPackages, + create: [], + update: [] + }; + + this.packages.forEach(item => { + if (typeof item.id === 'undefined') + packagesObj.create.push(item); + + if (typeof item.id !== 'undefined' && angular.equals(item, this.oldPackages[item.id])) + packagesObj.update.push(item); + }); + + this.$http.post(query, packagesObj).then(res => { + this.$.index.accept(); + }); + } + + removePackage(index) { + if (this.packages[index] && this.packages[index].id) + this.removedPackages.push(this.packages[index].id); + + this.packages.splice(index, 1); + } + + addPackage() { + let data = { + packagingFk: null, + quantity: null, + created: Date.now(), + ticketFk: this.ticket.id + }; + this.packages.push(data); + } + + getPackages() { + this.packages = this.$.index.model; + this.setOldPackages(); + } + + setOldPackages() { + this.oldPackages = []; + this.packages.forEach(item => { + this.oldPackages[item.id] = item; + }); + } +} + +Controller.$inject = ['$http', '$scope']; + +ngModule.component('vnTicketPackage', { + template: require('./package.html'), + controller: Controller, + bindings: { + ticket: '<' + } +}); diff --git a/client/ticket/src/package/package.spec.js b/client/ticket/src/package/package.spec.js new file mode 100644 index 000000000..b9b7c310a --- /dev/null +++ b/client/ticket/src/package/package.spec.js @@ -0,0 +1,59 @@ +import './package.js'; + +describe('Ticket', () => { + describe('Component vnTicketPackage', () => { + let $componentController; + let controller; + let $httpBackend; + let $scope; + + beforeEach(() => { + angular.mock.module('ticket'); + }); + + beforeEach(angular.mock.inject((_$componentController_, _$httpBackend_, $rootScope) => { + $componentController = _$componentController_; + $httpBackend = _$httpBackend_; + $scope = { + index: { + accept: function() {} + } + }; + controller = $componentController('vnTicketPackage', {$scope: $scope}); + })); + + describe('removePackage()', () => { + it('should push a package to removedPackages in the controller', () => { + controller.packages = [{id: 1}, {id: 2}]; + controller.removePackage(0); + + expect(controller.removedPackages).toEqual([1]); + }); + }); + + describe('submit()', () => { + it('should perform a post', () => { + spyOn(angular, 'equals').and.returnValue(true); + let query = '/ticket/api/TicketPackagings/crudTicketPackaging'; + controller.removedPackages = []; + controller.oldPackages = [ + {id: 1, quantity: 5, ticketFk: 1} + ]; + controller.packages = [ + {quantity: 5, ticketFk: 1}, + {id: 1, quantity: 25, ticketFk: 1} + ]; + let packagesObj = { + delete: controller.removedPackages, + create: [], + update: [] + }; + + $httpBackend.whenPOST(query, packagesObj).respond('omg YEAH'); + $httpBackend.expectPOST(query, packagesObj); + controller.submit(); + $httpBackend.flush(); + }); + }); + }); +}); diff --git a/client/ticket/src/review/locale/es.yml b/client/ticket/src/review/locale/es.yml deleted file mode 100644 index ae3a7e678..000000000 --- a/client/ticket/src/review/locale/es.yml +++ /dev/null @@ -1,4 +0,0 @@ -date : Fecha -Employee : Empleado -State: Estado -Review: Revision \ No newline at end of file diff --git a/client/ticket/src/review/review.html b/client/ticket/src/review/review.html deleted file mode 100644 index d38b231e5..000000000 --- a/client/ticket/src/review/review.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Review - - - - - - - -
- - No results - - - -
- - - - \ No newline at end of file diff --git a/client/ticket/src/review/review.js b/client/ticket/src/review/review.js deleted file mode 100644 index 7b4cc5678..000000000 --- a/client/ticket/src/review/review.js +++ /dev/null @@ -1,18 +0,0 @@ -import ngModule from '../module'; - -class ticketReview { - construct($http, $scope) { - this.$http = $http; - this.$ = $scope; - } -} - -ticketReview.$inject = ['$http', '$scope']; - -ngModule.component('vnTicketReview', { - template: require('./review.html'), - controller: ticketReview, - bindings: { - ticket: '<' - } -}); diff --git a/client/ticket/src/sale/sale.html b/client/ticket/src/sale/sale.html new file mode 100644 index 000000000..5b9374686 --- /dev/null +++ b/client/ticket/src/sale/sale.html @@ -0,0 +1,30 @@ + + + + + Sale + + + + + + + + + + + + + + + + + + + + + +
ItemDescriptionQuantityPriceDiscountAmount
{{::sale.itemFk}}{{::sale.quantity}}{{::sale.price | currency:'€':2}}{{::sale.discount}} %{{::sale.quantity * sale.price | currency:'€':2}}
+
+
+
diff --git a/client/ticket/src/sale/sale.js b/client/ticket/src/sale/sale.js new file mode 100644 index 000000000..feaafefbe --- /dev/null +++ b/client/ticket/src/sale/sale.js @@ -0,0 +1,7 @@ +import ngModule from '../module'; +import FilterTicketList from '../filter-ticket-list'; + +ngModule.component('vnTicketSale', { + template: require('./sale.html'), + controller: FilterTicketList +}); diff --git a/client/ticket/src/ticket.js b/client/ticket/src/ticket.js index 4a7af6e58..132502666 100644 --- a/client/ticket/src/ticket.js +++ b/client/ticket/src/ticket.js @@ -5,6 +5,10 @@ import './create/ticket-create'; import './card/ticket-card'; import './summary/ticket-summary'; import './data/ticket-data'; -import './notes/ticket-observations'; -import './package/list/package-list'; -import './review/review'; +import './note/ticket-observation'; +import './expedition/ticket-expedition'; +import './volume/ticket-volume'; +import './package/package'; +import './sale/sale'; +import './tracking/tracking'; +import './fetched-tags/fetched-tags'; diff --git a/client/ticket/src/tracking/locale/es.yml b/client/ticket/src/tracking/locale/es.yml new file mode 100644 index 000000000..e61e1dd24 --- /dev/null +++ b/client/ticket/src/tracking/locale/es.yml @@ -0,0 +1,5 @@ +Date : Fecha +Employee : Empleado +State: Estado +Tracking: Revisión +Created : Añadido \ No newline at end of file diff --git a/client/ticket/src/tracking/tracking.html b/client/ticket/src/tracking/tracking.html new file mode 100644 index 000000000..ec827fac3 --- /dev/null +++ b/client/ticket/src/tracking/tracking.html @@ -0,0 +1,31 @@ + + + + + Tracking + + + + + + + + + {{::ticket.state.name}} + {{::ticket.worker.firstName}} {{::ticket.worker.name}} + {{::ticket.created | date:'dd/MM/yyyy HH:mm' }} + + + + No results + + + + + + + + \ No newline at end of file diff --git a/client/ticket/src/tracking/tracking.js b/client/ticket/src/tracking/tracking.js new file mode 100644 index 000000000..be147ed91 --- /dev/null +++ b/client/ticket/src/tracking/tracking.js @@ -0,0 +1,7 @@ +import ngModule from '../module'; +import FilterTicketList from '../filter-ticket-list'; + +ngModule.component('vnTicketTracking', { + template: require('./tracking.html'), + controller: FilterTicketList +}); diff --git a/client/ticket/src/volume/ticket-volume.html b/client/ticket/src/volume/ticket-volume.html new file mode 100644 index 000000000..17ee5c9ed --- /dev/null +++ b/client/ticket/src/volume/ticket-volume.html @@ -0,0 +1,10 @@ +
+ + + Volumes + + + + + +
\ No newline at end of file diff --git a/client/ticket/src/volume/ticket-volume.js b/client/ticket/src/volume/ticket-volume.js new file mode 100644 index 000000000..2c41ef28e --- /dev/null +++ b/client/ticket/src/volume/ticket-volume.js @@ -0,0 +1,32 @@ +import ngModule from '../module'; + +class Controller { + constructor($stateParams, $scope, $http, $translate, vnApp) { + this.params = $stateParams; + this.$scope = $scope; + this.$http = $http; + this.$translate = $translate; + this.vnApp = vnApp; + + this.ticketVolumes = []; + this.oldVolumes = {}; + this.removedVolumes = []; + } + + _getTicketVolumes(ticketFk) { + this.$http.get(`/tcket/api/Volumes/${ticketFk}/getVolumes`) + .then(response => { + this.ticketVolumes = response.data; + }); + } +} + +Controller.$inject = ['$stateParams', '$scope', '$http', '$translate', 'vnApp']; + +ngModule.component('vnTicketVolume', { + template: require('./ticket-volume.html'), + controller: Controller, + bindings: { + ticket: '<' + } +}); diff --git a/client/ticket/src/volume/ticket-volume.spec.js b/client/ticket/src/volume/ticket-volume.spec.js new file mode 100644 index 000000000..66bff3566 --- /dev/null +++ b/client/ticket/src/volume/ticket-volume.spec.js @@ -0,0 +1,143 @@ +// import './ticket-observations.js'; + +// describe('ticket', () => { +// describe('Component vnTicketObservations', () => { +// let $componentController; +// let $state; +// let controller; +// let $httpBackend; + +// beforeEach(() => { +// angular.mock.module('ticket'); +// }); + +// beforeEach(angular.mock.inject((_$componentController_, _$state_, _$httpBackend_) => { +// $componentController = _$componentController_; +// $state = _$state_; +// $httpBackend = _$httpBackend_; +// controller = $componentController('vnTicketObservations', {$state: $state}); +// })); + +// describe('add / remove observation', () => { +// it('should add one empty observation into controller observations collection and call _setIconAdd()', () => { +// controller.ticketObservations = []; +// spyOn(controller, '_setIconAdd').and.callThrough(); +// controller.addObservation(); + +// expect(controller._setIconAdd).toHaveBeenCalledWith(); +// expect(controller.ticketObservations.length).toEqual(1); +// expect(controller.ticketObservations[0].id).toBe(undefined); +// expect(controller.ticketObservations[0].showAddIcon).toBeTruthy(); +// }); + +// it('should remove an observation that occupies the position in the index given and call _setIconAdd()', () => { +// let index = 2; +// controller.ticketObservations = [ +// {id: 1, observationTypeFk: 1, description: 'one', showAddIcon: false}, +// {id: 2, observationTypeFk: 2, description: 'two', showAddIcon: false}, +// {id: 3, observationTypeFk: 3, description: 'three', showAddIcon: true} +// ]; + +// spyOn(controller, '_setIconAdd').and.callThrough(); + +// controller.removeObservation(index); + +// expect(controller._setIconAdd).toHaveBeenCalledWith(); +// expect(controller.ticketObservations.length).toEqual(2); +// expect(controller.ticketObservations[0].showAddIcon).toBeFalsy(); +// expect(controller.ticketObservations[1].showAddIcon).toBeTruthy(); +// expect(controller.ticketObservations[index]).toBe(undefined); +// }); +// }); + +// describe('_equalObservations()', () => { +// it('should return true if two observations are equals independent of control attributes', () => { +// let observationOne = {id: 1, observationTypeFk: 1, description: 'one', showAddIcon: true}; +// let observationTwo = {id: 1, observationTypeFk: 1, description: 'one', showAddIcon: false}; +// let equals = controller._equalObservations(observationOne, observationTwo); + +// expect(equals).toBeTruthy(); +// }); + +// it('should return false if two observations aint equals independent of control attributes', () => { +// let observationOne = {id: 1, observationTypeFk: 1, description: 'one', showAddIcon: true}; +// let observationTwo = {id: 1, observationTypeFk: 1, description: 'two', showAddIcon: true}; +// let equals = controller._equalObservations(observationOne, observationTwo); + +// expect(equals).toBeFalsy(); +// }); +// }); + +// describe('get Observations()', () => { +// it('should perform a GET query to receive the ticket observations', () => { +// let res = [{id: 1, observationTypeFk: 1, description: 'one'}]; + +// $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond(res); +// $httpBackend.expectGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`); +// controller.getObservations(); +// $httpBackend.flush(); +// }); +// }); + +// describe('submit()', () => { +// it("should return an error message 'The observation type must be unique'", () => { +// controller.$scope.form = {}; +// spyOn(controller.vnApp, 'showMessage').and.callThrough(); +// controller.ticketObservations = [ +// {id: 1, observationTypeFk: 1, description: 'one', itemFk: 1}, +// {observationTypeFk: 1, description: 'one', itemFk: 1} +// ]; +// controller.oldObservations = {1: {id: 1, observationTypeFk: 1, description: 'one', itemFk: 1}}; +// controller.submit(); + +// expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The observation type must be unique'); +// }); + +// it("should perfom a query to delete observations", () => { +// controller.$scope.form = {$setPristine: () => {}}; +// controller.oldObservations = {1: {id: 1, observationTypeFk: 1, description: 'one'}}; +// controller.ticketObservations = []; +// controller.removedObservations = [1]; + +// $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); +// $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); +// controller.submit(); +// $httpBackend.flush(); +// }); + +// it("should perfom a query to update observations", () => { +// controller.$scope.form = {$setPristine: () => {}}; +// controller.ticketObservations = [{id: 1, observationTypeFk: 1, description: 'number one!'}]; +// controller.oldObservations = {1: {id: 1, observationTypeFk: 1, description: 'one'}}; + +// $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); +// $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); +// controller.submit(); +// $httpBackend.flush(); +// }); + +// it("should perfom a query to create new observation", () => { +// controller.$scope.form = {$setPristine: () => {}}; +// controller.ticketObservations = [{observationTypeFk: 2, description: 'two'}]; + +// $httpBackend.whenGET(`/ticket/api/TicketObservations?filter={"where":{},"include":["observationType"]}`).respond([]); +// $httpBackend.expectPOST(`/ticket/api/TicketObservations/crudTicketObservations`).respond('ok!'); +// controller.submit(); +// $httpBackend.flush(); +// }); + +// it("should return a message 'No changes to save' when there are no changes to apply", () => { +// controller.$scope.form = {$setPristine: () => {}}; +// spyOn(controller.vnApp, 'showMessage').and.callThrough(); +// controller.oldObservations = [ +// {id: 1, observationTypeFk: 1, description: 'one', showAddIcon: false}, +// {id: 2, observationTypeFk: 2, description: 'two', showAddIcon: true} +// ]; +// controller.ticketObservations = []; +// controller.submit(); + +// expect(controller.vnApp.showMessage).toHaveBeenCalledWith('No changes to save'); +// }); +// }); +// }); +// }); diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 0158b6e27..217309f4c 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -57,9 +57,10 @@ export default { provinceFifthOption: `${components.vnAutocomplete}[field="$ctrl.client.provinceFk"] vn-drop-down ul > li:nth-child(5)`, countryInput: `${components.vnAutocomplete}[field="$ctrl.client.countryFk"] input`, countryThirdOption: `${components.vnAutocomplete}[field="$ctrl.client.countryFk"] vn-drop-down ul > li:nth-child(3)`, - activeCheckboxLabel: `${components.vnCheck}[label='Active'] > label`, + activeCheckboxLabel: `${components.vnCheck}[label="Active"] > label`, + frozenCheckboxLabel: `${components.vnCheck}[label="Frozen"] > label`, invoiceByAddressCheckboxInput: `${components.vnCheck}[label='Invoice by address'] > label > input`, - verifiedDataCheckboxInput: `${components.vnCheck}[label='Verified data'] > label > input`, + verifiedDataCheckboxInput: `${components.vnCheck}[label="Verified data"] > label > input`, hasToInvoiceCheckboxLabel: `${components.vnCheck}[label='Has to invoice'] > label`, invoiceByMailCheckboxLabel: `${components.vnCheck}[label='Invoice by mail'] > label`, viesCheckboxInput: `${components.vnCheck}[label='Vies'] > label > input`, @@ -166,8 +167,6 @@ export default { intrastatSelectOptionOne: `${components.vnAutocomplete}[field="$ctrl.item.intrastatFk"] vn-drop-down ul > li:nth-child(2)`, originSelect: `${components.vnAutocomplete}[field="$ctrl.item.originFk"] input`, originSelectOptionOne: `${components.vnAutocomplete}[field="$ctrl.item.originFk"] vn-drop-down ul > li:nth-child(2)`, - expenceSelect: `${components.vnAutocomplete}[field="$ctrl.item.expenceFk"] input`, - expenceSelectOptionOne: `${components.vnAutocomplete}[field="$ctrl.item.expenceFk"] vn-drop-down ul > li:nth-child(2)`, createButton: `${components.vnSubmit}` }, @@ -241,15 +240,15 @@ export default { firstWarehouseSelect: `${components.vnAutocomplete}[field="itemNiche.warehouseFk"] input`, firstWarehouseDisabled: `vn-horizontal:nth-child(2) > vn-textfield[label="Warehouse"] > div > input`, firstWarehouseSelectSecondOption: `${components.vnAutocomplete}[field="itemNiche.warehouseFk"] vn-drop-down ul > li:nth-child(2)`, - firstCodeInput: `vn-horizontal:nth-child(2) > vn-textfield[label="code"] > div > input`, + firstCodeInput: `vn-horizontal:nth-child(2) > vn-textfield[label="Code"] > div > input`, secondWarehouseSelect: `vn-horizontal:nth-child(3) > ${components.vnAutocomplete}[field="itemNiche.warehouseFk"] input`, secondWarehouseDisabled: `vn-horizontal:nth-child(3) > vn-textfield[label="Warehouse"] > div > input`, - secondCodeInput: `vn-horizontal:nth-child(3) > vn-textfield[label="code"] > div > input`, + secondCodeInput: `vn-horizontal:nth-child(3) > vn-textfield[label="Code"] > div > input`, secondNicheRemoveButton: `vn-horizontal:nth-child(3) > vn-one > ${components.vnIcon}[icon="remove_circle_outline"]`, thirdWarehouseSelect: `vn-horizontal:nth-child(4) > ${components.vnAutocomplete}[field="itemNiche.warehouseFk"] input`, thirdWarehouseDisabled: `vn-horizontal:nth-child(4) > vn-textfield[label="Warehouse"] > div > input`, thirdWarehouseSelectFourthOption: `vn-horizontal:nth-child(4) > ${components.vnAutocomplete}[field="itemNiche.warehouseFk"] vn-drop-down ul > li:nth-child(4)`, - thirdCodeInput: `vn-horizontal:nth-child(4) > vn-textfield[label="code"] > div > input`, + thirdCodeInput: `vn-horizontal:nth-child(4) > vn-textfield[label="Code"] > div > input`, submitNichesButton: `${components.vnSubmit}` }, itemBotanical: { @@ -278,7 +277,7 @@ export default { searchButton: `${components.vnSearchBar} > vn-icon-button > button` }, ticketNotes: { - notesButton: `${components.vnMenuItem}[ui-sref="ticket.card.observations"]`, + notesButton: `${components.vnMenuItem}[ui-sref="ticket.card.observation"]`, firstNoteRemoveButton: `${components.vnIcon}[icon="remove_circle_outline"]`, addNoteButton: `${components.vnIcon}[icon="add_circle"]`, firstNoteSelect: `${components.vnAutocomplete}[field="ticketObservation.observationTypeFk"] input`, @@ -287,8 +286,13 @@ export default { firstDescriptionInput: `vn-textfield[label="Description"] > div > input`, submitNotesButton: `${components.vnSubmit}` }, + ticketExpedition: { + expeditionButton: `${components.vnMenuItem}[ui-sref="ticket.card.expedition"]`, + secondExpeditionRemoveButton: `body > vn-app > vn-vertical > vn-vertical > ui-view > vn-ticket-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-ticket-expedition > vn-vertical > vn-card > div > vn-vertical > vn-one > vn-horizontal:nth-child(2) > vn-none > i`, + secondExpeditionText: `body > vn-app > vn-vertical > vn-vertical > ui-view > vn-ticket-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-ticket-expedition > vn-vertical > vn-card > div > vn-vertical > vn-one > vn-horizontal:nth-child(2)` + }, ticketPackages: { - packagesButton: `${components.vnMenuItem}[ui-sref="ticket.card.package.list"]`, + packagesButton: `${components.vnMenuItem}[ui-sref="ticket.card.package"]`, firstPackageSelect: `${components.vnAutocomplete}[label="Package"] input` } }; diff --git a/e2e/paths/client-module/03_edit_fiscal_data.spec.js b/e2e/paths/client-module/03_edit_fiscal_data.spec.js index 099c422ab..5564bc51d 100644 --- a/e2e/paths/client-module/03_edit_fiscal_data.spec.js +++ b/e2e/paths/client-module/03_edit_fiscal_data.spec.js @@ -99,6 +99,7 @@ describe('Edit fiscalData path', () => { .waitToClick(selectors.clientFiscalData.provinceInput) .waitToClick(selectors.clientFiscalData.provinceFifthOption) .waitToClick(selectors.clientFiscalData.activeCheckboxLabel) + .waitToClick(selectors.clientFiscalData.frozenCheckboxLabel) .waitToClick(selectors.clientFiscalData.invoiceByAddressCheckboxInput) .waitToClick(selectors.clientFiscalData.verifiedDataCheckboxInput) .waitToClick(selectors.clientFiscalData.hasToInvoiceCheckboxLabel) @@ -227,6 +228,16 @@ describe('Edit fiscalData path', () => { }); }); + it('should confirm frozen checkbox is unchecked', () => { + return nightmare + .evaluate(selector => { + return document.querySelector(selector).checked; + }, selectors.clientFiscalData.frozenCheckboxLabel) + .then(value => { + expect(value).toBeFalsy(); + }); + }); + it('should confirm invoice by address checkbox is unchecked', () => { return nightmare .evaluate(selector => { diff --git a/e2e/paths/item-module/02_edit_item_basic_data.spec.js b/e2e/paths/item-module/02_edit_item_basic_data.spec.js index 36b7fb81e..6deee3bff 100644 --- a/e2e/paths/item-module/02_edit_item_basic_data.spec.js +++ b/e2e/paths/item-module/02_edit_item_basic_data.spec.js @@ -112,7 +112,7 @@ describe('edit item basic data path', () => { return nightmare .getInputValue(selectors.itemBasicData.expenceSelect) .then(result => { - expect(result).toEqual('loan'); + expect(result).toEqual('Adquisición mercancia Extracomunitaria'); }); }); }); diff --git a/e2e/paths/item-module/08_item_create_and_clone.spec.js b/e2e/paths/item-module/08_item_create_and_clone.spec.js index a4a54263a..788d07ecf 100644 --- a/e2e/paths/item-module/08_item_create_and_clone.spec.js +++ b/e2e/paths/item-module/08_item_create_and_clone.spec.js @@ -51,8 +51,6 @@ describe('Item', () => { .waitToClick(selectors.itemCreateView.intrastatSelectOptionOne) .waitToClick(selectors.itemCreateView.originSelect) .waitToClick(selectors.itemCreateView.originSelectOptionOne) - .waitToClick(selectors.itemCreateView.expenceSelect) - .waitToClick(selectors.itemCreateView.expenceSelectOptionOne) .click(selectors.itemCreateView.createButton) .waitForSnackbar() .then(result => { @@ -81,11 +79,6 @@ describe('Item', () => { }) .then(result => { expect(result).toBe('Spain'); - return nightmare - .getInputValue(selectors.itemBasicData.expenceSelect); - }) - .then(result => { - expect(result).toBe('loan'); }); }); }); diff --git a/e2e/paths/ticket-module/01_create_ticket_observations.spec.js b/e2e/paths/ticket-module/01_create_ticket_observations.spec.js index dfc7053b2..237f3e9a5 100644 --- a/e2e/paths/ticket-module/01_create_ticket_observations.spec.js +++ b/e2e/paths/ticket-module/01_create_ticket_observations.spec.js @@ -1,7 +1,7 @@ import selectors from '../../helpers/selectors.js'; import createNightmare from '../../helpers/helpers'; -describe('create item niche path', () => { +describe('create ticket notes path', () => { const nightmare = createNightmare(); beforeAll(() => { @@ -36,10 +36,10 @@ describe('create item niche path', () => { .waitForTextInElement(selectors.ticketsIndex.searchResult, '1') .waitToClick(selectors.ticketsIndex.searchResult) .waitToClick(selectors.ticketNotes.notesButton) - .waitForURL('observations') + .waitForURL('observation') .url() .then(url => { - expect(url).toContain('observations'); + expect(url).toContain('observation'); }); }); diff --git a/e2e/paths/ticket-module/02_delete_ticket_expeditions.spec.js b/e2e/paths/ticket-module/02_delete_ticket_expeditions.spec.js new file mode 100644 index 000000000..21e8be652 --- /dev/null +++ b/e2e/paths/ticket-module/02_delete_ticket_expeditions.spec.js @@ -0,0 +1,59 @@ +import selectors from '../../helpers/selectors.js'; +import createNightmare from '../../helpers/helpers'; + +describe('delete ticket expeditions path', () => { + const nightmare = createNightmare(); + + beforeAll(() => { + return nightmare + .waitForLogin('developer'); + }); + + it('should access to the tickets index by clicking the tickets button', () => { + return nightmare + .click(selectors.moduleAccessView.ticketsSectionButton) + .wait(selectors.ticketsIndex.createTicketButton) + .parsedUrl() + .then(url => { + expect(url.hash).toEqual('#!/ticket/list'); + }); + }); + + it('should search for the ticket with id 1', () => { + return nightmare + .wait(selectors.ticketsIndex.searchTicketInput) + .type(selectors.ticketsIndex.searchTicketInput, '1') + .click(selectors.ticketsIndex.searchButton) + .waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1) + .countSearchResults(selectors.ticketsIndex.searchResult) + .then(result => { + expect(result).toEqual(1); + }); + }); + + it(`should click on the search result to access to the ticket expeditions`, () => { + return nightmare + .waitForTextInElement(selectors.ticketsIndex.searchResult, '1') + .waitToClick(selectors.ticketsIndex.searchResult) + .waitToClick(selectors.ticketExpedition.expeditionButton) + .waitForURL('expedition') + .url() + .then(url => { + expect(url).toContain('expedition'); + }); + }); + + it(`should delete a former expedition and confirm the remaining expedition is the expected one`, () => { + return nightmare + .waitToClick(selectors.ticketExpedition.secondExpeditionRemoveButton) + .click(selectors.ticketPackages.packagesButton) + .wait(selectors.ticketPackages.firstPackageSelect) + .click(selectors.ticketExpedition.expeditionButton) + .wait(selectors.ticketExpedition.secondExpeditionText) + .getInnerText(selectors.ticketExpedition.secondExpeditionText) + .then(value => { + expect(value).toContain('Iron Patriot'); + expect(value).toContain('root'); + }); + }); +}); diff --git a/package-lock.json b/package-lock.json index 352d1587b..7f4aa7ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6474,8 +6474,7 @@ "jsbn": { "version": "0.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "json-schema": { "version": "0.2.3", @@ -12518,6 +12517,3937 @@ "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", "dev": true }, + "npm": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-5.7.1.tgz", + "integrity": "sha512-r1grvv6mcEt+nlMzMWPc5n/z5q8NNuBWj0TGFp1PBSFCl6ubnAoUGBsucYsnZYT7MOJn0ha1ptEjmdBoAdJ+SA==", + "requires": { + "JSONStream": "1.3.2", + "abbrev": "1.1.1", + "ansi-regex": "3.0.0", + "ansicolors": "0.3.2", + "ansistyles": "0.1.3", + "aproba": "1.2.0", + "archy": "1.0.0", + "bin-links": "1.1.0", + "bluebird": "3.5.1", + "cacache": "10.0.4", + "call-limit": "1.1.0", + "chownr": "1.0.1", + "cli-table2": "0.2.0", + "cmd-shim": "2.0.2", + "columnify": "1.5.4", + "config-chain": "1.1.11", + "debuglog": "1.0.1", + "detect-indent": "5.0.0", + "dezalgo": "1.0.3", + "editor": "1.0.0", + "find-npm-prefix": "1.0.2", + "fs-vacuum": "1.2.10", + "fs-write-stream-atomic": "1.0.10", + "gentle-fs": "2.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "has-unicode": "2.0.1", + "hosted-git-info": "2.5.0", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "inflight": "1.0.6", + "inherits": "2.0.3", + "ini": "1.3.5", + "init-package-json": "1.10.1", + "is-cidr": "1.0.0", + "lazy-property": "1.0.0", + "libcipm": "1.3.3", + "libnpx": "9.7.1", + "lockfile": "1.0.3", + "lodash._baseindexof": "3.1.0", + "lodash._baseuniq": "4.6.0", + "lodash._bindcallback": "3.0.1", + "lodash._cacheindexof": "3.0.2", + "lodash._createcache": "3.1.2", + "lodash._getnative": "3.9.1", + "lodash.clonedeep": "4.5.0", + "lodash.restparam": "3.6.1", + "lodash.union": "4.6.0", + "lodash.uniq": "4.5.0", + "lodash.without": "4.4.0", + "lru-cache": "4.1.1", + "meant": "1.0.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "nopt": "4.0.1", + "normalize-package-data": "2.4.0", + "npm-cache-filename": "1.0.2", + "npm-install-checks": "3.0.0", + "npm-lifecycle": "2.0.0", + "npm-package-arg": "6.0.0", + "npm-packlist": "1.1.10", + "npm-profile": "3.0.1", + "npm-registry-client": "8.5.0", + "npm-user-validate": "1.0.0", + "npmlog": "4.1.2", + "once": "1.4.0", + "opener": "1.4.3", + "osenv": "0.1.5", + "pacote": "7.3.3", + "path-is-inside": "1.0.2", + "promise-inflight": "1.0.1", + "qrcode-terminal": "0.11.0", + "query-string": "5.1.0", + "qw": "1.0.1", + "read": "1.0.7", + "read-cmd-shim": "1.0.1", + "read-installed": "4.0.3", + "read-package-json": "2.0.12", + "read-package-tree": "5.1.6", + "readable-stream": "2.3.4", + "readdir-scoped-modules": "1.0.2", + "request": "2.83.0", + "retry": "0.10.1", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "semver": "5.5.0", + "sha": "2.0.1", + "slide": "1.1.6", + "sorted-object": "2.0.1", + "sorted-union-stream": "2.1.3", + "ssri": "5.2.4", + "strip-ansi": "4.0.0", + "tar": "4.3.3", + "text-table": "0.2.0", + "uid-number": "0.0.6", + "umask": "1.1.0", + "unique-filename": "1.1.0", + "unpipe": "1.0.0", + "update-notifier": "2.3.0", + "uuid": "3.2.1", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "3.0.0", + "which": "1.3.0", + "worker-farm": "1.5.2", + "wrappy": "1.0.2", + "write-file-atomic": "2.1.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.2", + "bundled": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + }, + "dependencies": { + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + } + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "bin-links": { + "version": "1.1.0", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "cmd-shim": "2.0.2", + "fs-write-stream-atomic": "1.0.10", + "gentle-fs": "2.0.1", + "graceful-fs": "4.1.11", + "slide": "1.1.6" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "cacache": { + "version": "10.0.4", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.2.4", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "bundled": true + } + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "cli-table2": { + "version": "0.2.0", + "bundled": true, + "requires": { + "colors": "1.1.2", + "lodash": "3.10.1", + "string-width": "1.0.2" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "bundled": true, + "optional": true + }, + "lodash": { + "version": "3.10.1", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1" + } + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "3.0.1", + "wcwidth": "1.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "bundled": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "2.0.5", + "wrappy": "1.0.2" + }, + "dependencies": { + "asap": { + "version": "2.0.5", + "bundled": true + } + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "path-is-inside": "1.0.2", + "rimraf": "2.6.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.4" + } + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "fs-vacuum": "1.2.10", + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "path-is-inside": "1.0.2", + "read-cmd-shim": "1.0.1", + "slide": "1.1.6" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.1", + "bundled": true, + "requires": { + "glob": "7.1.2", + "npm-package-arg": "5.1.2", + "promzard": "0.3.0", + "read": "1.0.7", + "read-package-json": "2.0.12", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "3.0.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1.0.7" + } + } + } + }, + "is-cidr": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cidr-regex": "1.0.6" + }, + "dependencies": { + "cidr-regex": { + "version": "1.0.6", + "bundled": true + } + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "libcipm": { + "version": "1.3.3", + "bundled": true, + "requires": { + "bin-links": "1.1.0", + "bluebird": "3.5.1", + "find-npm-prefix": "1.0.2", + "graceful-fs": "4.1.11", + "lock-verify": "2.0.0", + "npm-lifecycle": "2.0.0", + "npm-logical-tree": "1.2.1", + "npm-package-arg": "6.0.0", + "pacote": "7.3.3", + "protoduck": "5.0.0", + "read-package-json": "2.0.12", + "rimraf": "2.6.2", + "worker-farm": "1.5.2" + }, + "dependencies": { + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "lock-verify": { + "version": "2.0.0", + "bundled": true, + "requires": { + "npm-package-arg": "5.1.2", + "semver": "5.5.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + } + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "libnpx": { + "version": "9.7.1", + "bundled": true, + "requires": { + "dotenv": "4.0.0", + "npm-package-arg": "5.1.2", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "update-notifier": "2.3.0", + "which": "1.3.0", + "y18n": "3.2.1", + "yargs": "8.0.2" + }, + "dependencies": { + "dotenv": { + "version": "4.0.0", + "bundled": true + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true + }, + "yargs": { + "version": "8.0.2", + "bundled": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cliui": { + "version": "3.2.0", + "bundled": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + } + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "2.0.1" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "1.0.0" + }, + "dependencies": { + "invert-kv": { + "version": "1.0.0", + "bundled": true + } + } + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "1.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.1.0", + "bundled": true + } + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "bundled": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "2.0.0" + }, + "dependencies": { + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "1.1.0", + "bundled": true + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + } + } + } + } + }, + "read-pkg": { + "version": "2.0.0", + "bundled": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "bundled": true, + "requires": { + "error-ex": "1.3.1" + }, + "dependencies": { + "error-ex": { + "version": "1.3.1", + "bundled": true, + "requires": { + "is-arrayish": "0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "bundled": true + } + } + } + } + }, + "pify": { + "version": "2.3.0", + "bundled": true + }, + "strip-bom": { + "version": "3.0.0", + "bundled": true + } + } + }, + "path-type": { + "version": "2.0.0", + "bundled": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + } + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "yargs-parser": { + "version": "7.0.0", + "bundled": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + } + } + }, + "lockfile": { + "version": "1.0.3", + "bundled": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "4.0.3", + "lodash._root": "3.0.1" + }, + "dependencies": { + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + } + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "3.9.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + }, + "dependencies": { + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "1.2.0" + } + } + } + }, + "node-gyp": { + "version": "3.6.2", + "bundled": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.83.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, + "dependencies": { + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + } + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "1.1.1" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "bundled": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "5.5.0" + } + }, + "npm-lifecycle": { + "version": "2.0.0", + "bundled": true, + "requires": { + "byline": "5.0.0", + "graceful-fs": "4.1.11", + "node-gyp": "3.6.2", + "resolve-from": "4.0.0", + "slide": "1.1.6", + "uid-number": "0.0.6", + "umask": "1.1.0", + "which": "1.3.0" + }, + "dependencies": { + "byline": { + "version": "5.0.0", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "6.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + }, + "dependencies": { + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + } + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true + } + } + }, + "npm-profile": { + "version": "3.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "make-fetch-happen": "2.6.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "3.3.0", + "cacache": "10.0.4", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.0.0", + "https-proxy-agent": "2.1.1", + "lru-cache": "4.1.1", + "mississippi": "1.3.1", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "3.0.1", + "ssri": "5.2.4" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "2.6.9" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "1.1.2", + "retry": "0.10.1" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "socks": "1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + } + } + }, + "npm-registry-client": { + "version": "8.5.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "graceful-fs": "4.1.11", + "normalize-package-data": "2.4.0", + "npm-package-arg": "5.1.2", + "npmlog": "4.1.2", + "once": "1.4.0", + "request": "2.83.0", + "retry": "0.10.1", + "semver": "5.5.0", + "slide": "1.1.6", + "ssri": "4.1.6" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "ssri": { + "version": "4.1.6", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.4" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "opener": { + "version": "1.4.3", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + } + } + }, + "pacote": { + "version": "7.3.3", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "cacache": "10.0.4", + "get-stream": "3.0.0", + "glob": "7.1.2", + "lru-cache": "4.1.1", + "make-fetch-happen": "2.6.0", + "minimatch": "3.0.4", + "mississippi": "2.0.0", + "normalize-package-data": "2.4.0", + "npm-package-arg": "6.0.0", + "npm-packlist": "1.1.10", + "npm-pick-manifest": "2.1.0", + "osenv": "0.1.5", + "promise-inflight": "1.0.1", + "promise-retry": "1.1.1", + "protoduck": "5.0.0", + "safe-buffer": "5.1.1", + "semver": "5.5.0", + "ssri": "5.2.4", + "tar": "4.3.3", + "unique-filename": "1.1.0", + "which": "1.3.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "3.3.0", + "cacache": "10.0.4", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.0.0", + "https-proxy-agent": "2.1.1", + "lru-cache": "4.1.1", + "mississippi": "1.3.1", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "3.0.1", + "ssri": "5.2.4" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "2.6.9" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "socks": "1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "6.0.0", + "semver": "5.5.0" + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "1.1.2", + "retry": "0.10.1" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "semver": { + "version": "5.5.0", + "bundled": true + } + } + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.11.0", + "bundled": true + }, + "query-string": { + "version": "5.1.0", + "bundled": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + }, + "dependencies": { + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "bundled": true + } + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "0.0.7" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.7", + "bundled": true + } + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "graceful-fs": "4.1.11", + "read-package-json": "2.0.12", + "readdir-scoped-modules": "1.0.2", + "semver": "5.5.0", + "slide": "1.1.6", + "util-extend": "1.0.3" + }, + "dependencies": { + "util-extend": { + "version": "1.0.3", + "bundled": true + } + } + }, + "read-package-json": { + "version": "2.0.12", + "bundled": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "json-parse-better-errors": "1.0.1", + "normalize-package-data": "2.4.0", + "slash": "1.0.0" + }, + "dependencies": { + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + } + } + }, + "read-package-tree": { + "version": "5.1.6", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "dezalgo": "1.0.3", + "once": "1.4.0", + "read-package-json": "2.0.12", + "readdir-scoped-modules": "1.0.2" + } + }, + "readable-stream": { + "version": "2.3.4", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "string_decoder": { + "version": "1.0.3", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "dezalgo": "1.0.3", + "graceful-fs": "4.1.11", + "once": "1.4.0" + } + }, + "request": { + "version": "2.83.0", + "bundled": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.1", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.1", + "bundled": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true + } + } + }, + "har-validator": { + "version": "5.0.3", + "bundled": true, + "requires": { + "ajv": "5.2.3", + "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.2.3", + "bundled": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "co": { + "version": "4.6.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "0.0.0" + }, + "dependencies": { + "jsonify": { + "version": "0.0.0", + "bundled": true + } + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + } + } + }, + "hawk": { + "version": "6.0.2", + "bundled": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.0.2" + }, + "dependencies": { + "boom": { + "version": "4.3.1", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "bundled": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "hoek": { + "version": "4.2.0", + "bundled": true + }, + "sntp": { + "version": "2.0.2", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "sshpk": { + "version": "1.13.1", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.17", + "bundled": true, + "requires": { + "mime-db": "1.30.0" + }, + "dependencies": { + "mime-db": { + "version": "1.30.0", + "bundled": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "qs": { + "version": "6.5.1", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.3", + "bundled": true, + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "bundled": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "retry": { + "version": "0.10.1", + "bundled": true + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "readable-stream": "2.3.4" + } + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "1.3.0", + "stream-iterate": "1.2.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "1.1.14" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + } + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "ssri": { + "version": "5.2.4", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + } + } + }, + "tar": { + "version": "4.3.3", + "bundled": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.1", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "yallist": "3.0.2" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "2.2.1" + } + }, + "minipass": { + "version": "2.2.1", + "bundled": true, + "requires": { + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "2.2.1" + } + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "2.0.0" + }, + "dependencies": { + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "0.1.4" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "update-notifier": { + "version": "2.3.0", + "bundled": true, + "requires": { + "boxen": "1.2.1", + "chalk": "2.1.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "boxen": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.1.0", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "1.0.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "2.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "0.7.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "2.0.1" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "widest-line": { + "version": "1.0.0", + "bundled": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "chalk": { + "version": "2.1.0", + "bundled": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "bundled": true, + "requires": { + "color-convert": "1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.0", + "bundled": true, + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "bundled": true + } + } + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "supports-color": { + "version": "4.4.0", + "bundled": true, + "requires": { + "has-flag": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "configstore": { + "version": "3.1.1", + "bundled": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.0.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "1.0.1" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "bundled": true + } + } + }, + "make-dir": { + "version": "1.0.0", + "bundled": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "1.0.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "0.1.0", + "is-path-inside": "1.0.0" + }, + "dependencies": { + "global-dirs": { + "version": "0.1.0", + "bundled": true, + "requires": { + "ini": "1.3.5" + } + }, + "is-path-inside": { + "version": "1.0.0", + "bundled": true, + "requires": { + "path-is-inside": "1.0.2" + } + } + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "4.0.1" + }, + "dependencies": { + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.5.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + }, + "dependencies": { + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "1.0.0" + }, + "dependencies": { + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.0", + "bundled": true + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "1.0.4" + }, + "dependencies": { + "prepend-http": { + "version": "1.0.4", + "bundled": true + } + } + } + } + }, + "registry-auth-token": { + "version": "3.3.1", + "bundled": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "1.2.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "5.5.0" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + } + } + }, + "uuid": { + "version": "3.2.1", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-license-ids": "1.2.2" + }, + "dependencies": { + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true + } + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true + } + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "1.0.3" + }, + "dependencies": { + "builtins": { + "version": "1.0.3", + "bundled": true + } + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "requires": { + "isexe": "2.0.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.1.0", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", diff --git a/package.json b/package.json index 7b4c19023..a622cc66e 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "fs-extra": "^5.0.0", "material-design-lite": "^1.3.0", "mg-crud": "^1.1.2", + "npm": "^5.7.1", "oclazyload": "^0.6.3", "require-yaml": "0.0.1", "validator": "^6.2.1" diff --git a/services/db/02-dumpedFixtures.sql b/services/db/02-dumpedFixtures.sql index fceffb3e4..d1dcfec03 100644 --- a/services/db/02-dumpedFixtures.sql +++ b/services/db/02-dumpedFixtures.sql @@ -55,7 +55,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-03-07 9:44:56 +-- Dump completed on 2018-03-23 13:10:41 USE `salix`; -- MySQL dump 10.13 Distrib 5.7.17, for Win64 (x86_64) -- @@ -93,7 +93,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-03-07 9:44:57 +-- Dump completed on 2018-03-23 13:10:41 USE `vn`; -- MySQL dump 10.13 Distrib 5.7.17, for Win64 (x86_64) -- @@ -151,4 +151,52 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-03-07 9:44:57 +-- Dump completed on 2018-03-23 13:10:42 +USE `vn2008`; +-- MySQL dump 10.13 Distrib 5.7.17, for Win64 (x86_64) +-- +-- Host: db.verdnatura.es Database: vn2008 +-- ------------------------------------------------------ +-- Server version 5.6.25-4-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Dumping data for table `accion_dits` +-- + +LOCK TABLES `accion_dits` WRITE; +/*!40000 ALTER TABLE `accion_dits` DISABLE KEYS */; +INSERT INTO `accion_dits` VALUES (0,'Abono del ticket'),(104,'Abre a pesar del aviso'),(81,'Abre Entrada'),(116,'Abre Margenes'),(31,'Abre ticket'),(149,'Abre traslado'),(148,'Abre travel'),(12,'Acepta envio'),(64,'Acepta envio a pesar del aviso'),(23,'Aglutinació'),(92,'Añade credito'),(112,'Añade linea'),(132,'Añade manualmente Preparacion'),(33,'Añade promoción'),(144,'Añade ticket'),(129,'Bioniza Linea'),(130,'Bioniza Lineas Ok'),(128,'Bioniza Ticket'),(133,'Borra expedition'),(63,'Borrar promoción'),(80,'Cambia'),(106,'Cambia Activo'),(119,'Cambia Agencia'),(60,'Cambia almacen'),(56,'Cambia Article'),(53,'Cambia cantidad'),(78,'Cambia Categoria'),(34,'Cambia Cliente'),(74,'Cambia Color'),(110,'Cambia Comercial'),(137,'Cambia Conductor'),(82,'Cambia Consignatario'),(105,'Cambia Contabilizada'),(142,'Cambia Coste'),(114,'Cambia Costefijo'),(108,'Cambia crédito'),(97,'Cambia CyC'),(126,'Cambia de agencia sin eliminar la ruta'),(89,'Cambia delivered'),(98,'Cambia Descuento'),(163,'Cambia el turno'),(3,'Cambia Empresa'),(147,'Cambia etiquetas'),(107,'Cambia Factura mail'),(6,'Cambia Fecha'),(37,'Cambia forma de pago'),(122,'Cambia gestdoc_id'),(135,'Cambia grouping y lo falca'),(1,'Cambia hora'),(143,'Cambia hora fin'),(118,'Cambia Id_Agencia'),(140,'Cambia km_end'),(139,'Cambia km_start'),(90,'Cambia landing'),(79,'Cambia Medida'),(77,'Cambia Nicho'),(120,'Cambia No Vincular'),(14,'Cambia obs de:'),(141,'Cambia Ok'),(73,'Cambia Origen'),(150,'Cambia packing'),(117,'Cambia Precio'),(85,'Cambia Received'),(131,'Cambia Recibido Core VNH'),(72,'Cambia Recibido Sepa'),(161,'Cambia salario'),(86,'Cambia Shipment'),(11,'Cambia solucion'),(76,'Cambia Tallos'),(109,'Cambia Tarifa '),(13,'Cambia Tipo'),(121,'Cambia Todos a No Vincular'),(138,'Cambia Vehiculo'),(94,'Cambia Vencimiento'),(88,'Cambia Warehouse de entrada'),(87,'Cambia Warehouse de salida'),(115,'Cambiazo'),(61,'Cambio de fecha'),(93,'Cobro Web'),(32,'Crea Cliente'),(145,'Crea clon'),(83,'Crea Entrada'),(19,'Crea Promoción'),(136,'Crea Ruta'),(84,'Crea Ticket'),(51,'Crea Utilidades->Abono desde el Ticket'),(52,'CREDITO SUPERADO'),(30,'DESBLOQUEA A PESAR DEL AVISO'),(8,'Desbloquea en preparación'),(5,'Desbloquea servido'),(9,'Desmarca seguro'),(54,'Elimina'),(127,'Elimina desde traslado'),(156,'Elimina horario'),(125,'Elimina la ruta por cambio de agencia'),(160,'Elimina precio'),(165,'Elimina ticket turno'),(153,'Elimina zona'),(22,'Eliminación ticket'),(57,'Envia por AZKAR 13 a pesar del aviso'),(68,'Envio a'),(28,'FACTURA MULTIPLE'),(29,'FACTURA RAPIDA'),(111,'Factura Serie'),(58,'FALCA PREU'),(113,'Fusion'),(36,'Genera un abono santos al ticket'),(66,'Genera una reserva santos al ticket'),(69,'Hace click en Pedido'),(20,'Hace click en Ver'),(18,'Imprime CTRL_F5'),(134,'Imprime Ctrl_F5 con credito superado'),(26,'Imprimir Albarán'),(96,'Inserta cantidad en negativo'),(155,'Inserta horario'),(158,'Inserta precio'),(164,'Inserta ticket turno'),(95,'Inserta travel'),(151,'Inserta zona'),(124,'Intenta recalcular tarifas'),(59,'LLIBERA PREU'),(4,'Marca como Servido'),(7,'Marca en preparación'),(10,'Marca seguro de verano'),(157,'Modifica horario'),(159,'Modifica precio'),(154,'Modifica zona'),(99,'No desbloquea los precios'),(103,'No especificado'),(71,'No respeta disponible'),(101,'No respeta grouping'),(100,'No respeta packing'),(123,'Recalcula tarifas'),(2,'Recalculació'),(16,'Reimprime F5'),(67,'Reimprime F5 a pesar del aviso'),(65,'Reserva santos del ticket'),(146,'Revisa Ticket desde Web'),(70,'Revisado PDA'),(50,'S\'ha utilitzat la funció Imprimir_Etiquetas del TPV'),(27,'Se envia a revision'),(91,'Se imprime split'),(15,'SMS'),(102,'Split a MERCAFLOR'),(21,'Ticket Split(Automático)'),(25,'TOUR desde ticket'),(24,'TOUR hacia ticket'),(162,'Validado'),(17,'Visualiza CTRL_F5'); +/*!40000 ALTER TABLE `accion_dits` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `Gastos` +-- + +LOCK TABLES `Gastos` WRITE; +/*!40000 ALTER TABLE `Gastos` DISABLE KEYS */; +INSERT INTO `Gastos` VALUES ('2000000000',1,'Inmovilizado pendiente',1,0,0),('2000000000',3,'Compra de bienes de inmovilizado',1,0,0),('2600000000',1,'Fianzas',0,0,0),('4600000000',1,'Anticipos de remuneraciones',1,0,0),('4600000001',1,'Anticpos de remuneración',1,0,0),('4751000000',1,'Retenciones',0,1,0),('5200000006',1,'Deudas a c/p CRA',1,0,0),('5200000008',0,'Prestamo CP Transolver IVECO 269',1,0,0),('5200000008',1,'Prestamo Transolver 201600269',1,0,0),('5200000009',0,'Prestamo CP Transolver IVECO 270',1,0,0),('5200000009',1,'Prestamo Transolver 201600270',1,0,0),('5200000010',0,'Prestamo CP Transolver IVECO 271',1,0,0),('5200000010',1,'Prestamo Transolver 201600271',1,0,0),('5200000011',1,'Prestamo Transolver 339',0,0,0),('5200000012',1,'Prestamo Transolver 340',1,0,0),('5200000013',1,'Prestamo Transolver 341',1,0,0),('5200000014',1,'Prestamo a c/p BBVA 600.000€',1,0,0),('5200000022',1,'Linea comercio exterior',1,0,0),('5240000001',1,'Leasing BBVA',1,0,0),('5240002032',1,'Leasing Iveco',1,0,0),('5240002066',1,'Leasing c/p Man',1,0,0),('5240002104',1,'Leasing c/p La caixa 3 vehículos',1,0,0),('5325000003',6,'Prestamo a partes vinculadas',0,0,0),('5660000001',1,'Suplidos',0,0,0),('5660000001',20,'Suplidos',1,0,0),('5660000002',0,'Suplidos',0,0,0),('5660000002',1,'Suplidos Transitarios nacionales',1,0,0),('5660000003',1,'Deposito c/p Ebury',1,0,0),('5660000003',4,'Deposito Ebury',0,0,0),('5660000004',4,'Deposito Global Reach',0,0,0),('6001000000',1,'Compras a terceros nacional',1,0,0),('6001000000',18,'Compras a terceros nacional',1,0,0),('6001000000',19,'Compras a terceros nacional',1,0,0),('6001000001',1,'Adquisiones en Europa',0,0,0),('6001000001',3,'Adquisición en Europa',1,0,0),('6002000000',1,'Transportes de compras',1,0,0),('6002000001',1,'Tranportes de compra Europa',1,0,0),('6002000001',4,'Transportes de compras Europa',1,0,0),('6002000567',0,'Transporte de compras VNH',1,0,0),('6003000000',1,'Adquisición mercancia Extracomunitaria',1,0,0),('6003000000',5,'Adquisición mercancia Extracomunitaria',1,0,0),('6003000000',6,'Adquisición mercancia Extracomunitaria',1,0,0),('6003000567',0,'Compra de mercancia extracomunitaria VNH',1,0,0),('6004000000',1,'Transporte compras Sudamérica',1,0,0),('6004000000',4,'Transporte compras Sudamérica',1,0,0),('6004000000',6,'Transporte compras Sudamérica',1,0,0),('6010000000',1,'Materias primas',1,0,0),('6020000000',1,'Otros aprovisionamientos',1,0,0),('6020000001',1,'Embalajes',1,0,0),('6020000002',1,'Otros aprov. Taller artíficial',1,0,0),('6090000000',6,'Rappels por compras',1,0,0),('6100000000',0,'Variacion existencias',1,0,0),('6210000000',1,'Arrendamientos',1,0,0),('6210000001',1,'Arrendamiento vehículo',1,0,0),('6210000001',4,'Gastos de arrendamiento vehículos',1,0,0),('6210000002',1,'Arrendamiento nave',1,0,0),('6210000003',1,'Arrendamiento espacio virtual-informatic',1,0,0),('6210000004',1,'Arrendamiento elementos para el proceso de informa',1,0,0),('6210000005',1,'Arrendamiento CC y banddejas',1,0,0),('6210000567',0,'Alquiler VNH',1,0,0),('6220000000',1,'Reparaciones y conservacion',1,0,0),('6220000001',1,'Reparación-Informatica',1,0,0),('6220000001',4,'Reparacion y mantenimiento informatica',1,0,0),('6220000003',1,'Reparación-Vehiculos',1,0,0),('6220000004',1,'Reparación-Instalaciones',1,0,0),('6220000005',1,'Reparación y mantenimineto CCs',1,0,0),('6220000006',1,'Repracion y conser maquinaria',1,0,0),('6230000000',1,'Servicios de profesionales independientes',1,0,0),('6230000001',1,'Servicios por gestión de ventas',1,0,0),('6230000001',4,'Servicios por gestión de ventas',1,0,0),('6240000000',1,'Transportes',1,0,0),('6240000000',4,'Transportes de ventas',1,0,0),('6240000567',0,'Transporte ventas VNH',1,0,0),('6250000000',1,'Primas de seguros',1,0,0),('6250000000',4,'Prima de Seguros',1,0,0),('6250000001',1,'Primas de seguros-Personales',1,0,0),('6250000002',1,'Primas de seguros-Colectivos',1,0,0),('6250000003',1,'Primas de seguros-Vehiculos',1,0,0),('6250000004',1,'Primas de seguros-Inmuebles',1,0,0),('6250000567',0,'Seguros VNH',1,0,0),('6260000000',1,'Gastos bancarios',1,0,0),('6260000001',1,'Gastos bancarios datafono',1,0,0),('6260000002',1,'Gastos bancarios transferencia nacional',1,0,0),('6260000003',1,'Gastos bancarios transferencia Europa',1,0,0),('6260000004',1,'Gastos bancarios transferencia divisas',1,0,0),('6260000567',0,'Gastos bancarios VNH',1,0,0),('6270000000',1,'Publicidad y RRPP',1,0,0),('6270000000',3,'Publicidad, propaganda y RR PP',1,0,0),('6270000000',6,'Publicidad',1,0,0),('6270000000',14,'Publicidad, propaganda RRPP',1,0,0),('6270000001',1,'Patrocinio',0,0,0),('6280000000',1,'Suministros',1,0,0),('6280000001',1,'Telefonos',1,0,0),('6280000002',1,'Gasoil',1,0,0),('6280000003',1,'Suministros-Electricidad',1,0,0),('6280000004',1,'Internet',1,0,0),('6280000567',0,'Suministros VNH',1,0,0),('6280001567',0,'Suministros telefono VNH',1,0,0),('6280003567',0,'Suministro luz VNH',1,0,0),('6290000000',1,'Otros servicios',1,0,0),('6290000001',1,'Material de oficina',1,0,0),('6290000002',1,'Gastos en formacion',1,0,0),('6290000003',1,'Asesoria juridica',1,0,0),('6290000004',4,'Otros servicios UE',1,0,0),('6290000005',1,'Gastos varios-Correos',1,0,0),('6290000006',6,'Otros servicios extranjero',1,0,0),('6290000007',1,'Gastos pequeño material',1,0,0),('6290000007',3,'Compras pequeño material',1,0,0),('6290000007',6,'Pequeño material',1,0,0),('6290000008',1,'Gastos varios-uniformes personal',1,0,0),('6290000008',3,'Compra uniformes',1,0,0),('6290000009',1,'Gastos-CC Container',1,0,0),('6290000010',1,'Gastos formación clientes',1,0,0),('6290000012',1,'Gastos gestión contra-reembolsos',1,0,0),('6290000013',1,'Arrendamiento Vilassar',1,0,0),('6290000014',1,'Gasto laboral espresas ETT',1,0,0),('6290000015',1,'Gasto compra terminales moviles y similares',1,0,0),('6290000015',3,'Gasto compra terminales moviles y similares',1,0,0),('6290000015',6,'Gasto compra terminales moviles y similares',1,0,0),('6290000016',1,'Gasto gestión cobro ventas',1,0,0),('6290000553',1,'Gastos viaje administrador',1,0,0),('6290000553',4,'Gastos viaje administrador-gerente',1,0,0),('6290000553',6,'Gastos viaje administrador',1,0,0),('6290001000',1,'Gastos de viaje',1,0,0),('6290001000',4,'Gastos viajes otros departamentos',1,0,0),('6290001000',6,'Gastos viaje personal otros departamentos',1,0,0),('6290001001',1,'Gastos R.R.P.P. Gerente',1,0,0),('6290001002',1,'Gastos R.R.P.P. Comerciales',1,0,0),('6290001567',0,'Gastos material oficina',1,0,0),('6300000000',1,'Impuesto de sociedades',1,0,0),('6310000000',1,'Otros tributos',1,0,0),('6380000000',1,'Ajustes positivos s/b Bº',1,0,0),('6400000000',0,'Sueldos y salarios',1,0,0),('6400000000',1,'Salarios',0,0,0),('6400000001',0,'Productividad',1,0,0),('6400000567',0,'Salarios VNH',1,0,0),('6410000001',1,'Indemnizaciones',1,0,0),('6420000000',0,'Seguridad Social a cargo de la empresa',1,0,0),('6420000000',1,'Seguridad Social',0,0,0),('6490000000',1,'Otros gastos sociales',1,0,0),('6500000000',1,'Impagados definitivos',1,0,0),('6620000000',0,'Intereses Bancarios',1,0,0),('6620000001',1,'Intereses Leasing BBVA Dic 2017',1,0,0),('6620000006',1,'Intereses deuda prestamo CRA',1,0,0),('6620000007',1,'Intereses La Caixa linea comercio exterior',1,0,0),('6620000007',16,'Intereses La Caixa Linea Comercio Exterior',0,0,0),('6620000008',1,'Intereses Prestamos Transolver 2016',1,0,0),('6620000011',1,'Intereses BBVA linea comercio exterior',1,0,0),('6620000014',1,'Intereses Prestamo BBVA',1,0,0),('6620000015',16,'Interés Póliza Deutsche Bank',0,0,0),('6620002032',1,'Intereses Leaing Iveco',1,0,0),('6620002066',1,'Leasing Intereses Man',1,0,0),('6620002104',1,'Intereses Leasing La caixa 3 vehículos',1,0,0),('6681000000',1,'Diferencia negativa tipo de cambio',1,0,0),('6681000000',4,'Diferencia negativa tipo de cambio',0,0,0),('6681000000',6,'Diferencia negativa tipo de cambio',1,0,0),('6681000567',0,'Diferencias de cambio VNH',1,0,0),('6690000000',1,'Otros gastos financieros',1,0,0),('6690000000',6,'Gastos financieros',1,0,0),('6720000000',16,'Perdidas procedentes de inversiones',0,0,0),('6780000000',1,'Gastos extraordinarios',1,0,0),('6780000001',1,'Gastos no deducibles',1,0,0),('6780000001',16,'Gasto no deducible',0,0,0),('6800000000',1,'Amortización inmovilizado intangible',1,0,0),('6800000001',0,'Amortizacion inmovilizado material',1,0,0),('6810000000',0,'Amortizaciones inmovilizado',1,0,0),('6810000000',1,'Amortizacion inmovilizado material',1,0,0),('7000000000',0,'Ventas',1,0,0),('7000000001',1,'Venta entre empresas',1,0,0),('7000010000',0,'Terceros Flor',1,0,0),('7000020000',0,'Terceros Planta',1,0,0),('7000030000',0,'Terceros Complementos',1,0,0),('7000040000',0,'Terceros Artificial',1,0,0),('7000050000',0,'Terceros Verdes',1,0,0),('7000060000',0,'Terceros Otros',1,0,0),('7000070000',0,'Terceros Confección',1,0,0),('7000080000',1,'Terceros Logística',1,0,0),('7001000000',1,'Mercaderia',1,0,1),('7001010000',0,'Grupo Flor',1,0,0),('7001020000',0,'Grupo Planta',1,0,0),('7001030000',0,'Grupo Complementos',1,0,0),('7001040000',0,'Grupo Artificial',1,0,0),('7001050000',0,'Grupo Verdes',1,0,0),('7001060000',0,'Grupo Otros',1,0,0),('7001070000',0,'Grupo Confección',1,0,0),('7001080000',1,'Grupo Logística',1,0,0),('7002010000',0,'Asociados Flor',1,0,0),('7002020000',0,'Asociados Planta',1,0,0),('7002030000',0,'Asociados Complementos',1,0,0),('7002040000',0,'Asociados Artificial',1,0,0),('7002050000',0,'Asociados Verdes',1,0,0),('7002060000',0,'Asociados Otros',1,0,0),('7002070000',0,'Asociados Confección',1,0,0),('7002080000',1,'Asociados Logística',1,0,0),('7040000000',1,'Embalajes',1,0,1),('7050000000',1,'Prestacion de servicios',1,0,1),('7400000000',1,'Subvenciones, donaciones a la explotacion',1,0,0),('7550000000',0,'Ingresos por serivicios al personal',1,0,0),('7680000000',0,'Diferencias positivas de cambio',1,0,0),('7680000000',1,'Diferenica positiva tipo de cambio',1,0,0),('7690000000',1,'Otros ingresos financieros',1,0,0),('7780000000',1,'Ingresos excepcionales',1,0,0),('7780000000',16,'Ingreso extraordinario',0,0,0),('7780000001',1,'Indemnizaciones transporte',1,0,0),('7780000001',4,'Indemnizaciones agencias transporte',1,0,0),('7780000001',5,'Indemnizaciones agencias transporte',1,0,0),('7780000001',6,'Indemnizaciones transporte',1,0,0),('7940000000',16,'Reversión impagos',0,0,0); +/*!40000 ALTER TABLE `Gastos` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2018-03-23 13:10:42 diff --git a/services/db/04-fixtures.sql b/services/db/04-fixtures.sql index 6ce558cc5..768f0715d 100644 --- a/services/db/04-fixtures.sql +++ b/services/db/04-fixtures.sql @@ -384,24 +384,22 @@ INSERT INTO `vn`.`intrastat`(`id`, `description`, `taxClassFk`, `taxCodeFk`) (05080000, 'Coral y materiales similares' , 2, 2), (06021010, 'Plantas vivas: Esqueje/injerto, Vid', 1, 1); -INSERT INTO `vn`.`expence`(`id`, `taxTypeFk`, `name`, `isWithheld`) - VALUES - (1, 1, 'bail', 0), - (2, 1, 'loan', 1); - INSERT INTO `vn`.`item`(`id`, `name`,`typeFk`,`size`,`inkFk`,`category`,`stems`,`originFk`,`description`,`producerFk`,`intrastatFk`,`isOnOffer`,`expenceFk`,`isBargain`,`comment`,`relevancy`,`image`,`taxClassFk`) VALUES - (1, 'Gem of Time', 2, 70, 'AMA', 'EXT', 1, 1, 'One of the infinity gems', 1, 06021010, 0, 1, 0, NULL, 0, 66540, 1), - (2, 'Gem of Mind', 2, 70, 'AZL', 'EXT', 1, 2, 'One of the infinity gems', 1, 06021010, 0, 1, 0, NULL, 0, 65540, 1), - (3, 'Iron Patriot', 1, 60, 'AMR', 'EXT', 1, 3, 'Rhodeys armor', 1, 05080000, 0, 1, 0, NULL, 0, 61692, 1), - (4, 'Mark I', 1, 60, 'AMR', 'EXT', 1, 1, 'Iron Mans first armor', 1, 05080000, 1, 2, 0, NULL, 0, 66090, 2), - (5, 'Mjolnir', 3, 30, 'AZR', 'EXT', 1, 2, 'Thors hammer!', 2, 06021010, 1, 2, 0, NULL, 0, 67350, 2); + (1, 'Gem of Time', 2, 70, 'AMA', 'EXT', 1, 1, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 66540, 1), + (2, 'Gem of Mind', 2, 70, 'AZL', 'EXT', 1, 2, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 65540, 1), + (3, 'Iron Patriot', 1, 60, 'AMR', 'EXT', 1, 3, 'Rhodeys armor', 1, 05080000, 0, 4751000000, 0, NULL, 0, 61692, 1), + (4, 'Mark I', 1, 60, 'AMR', 'EXT', 1, 1, 'Iron Mans first armor', 1, 05080000, 1, 4751000000, 0, NULL, 0, 66090, 2), + (5, 'Mjolnir', 3, 30, 'AZR', 'EXT', 1, 2, 'Thors hammer!', 2, 06021010, 1, 4751000000, 0, NULL, 0, 67350, 2); INSERT INTO `vn`.`expedition`(`id`, `agencyModeFk`, `ticketFk`, `isBox`, `created`, `itemFk`, `counter`, `checked`, `workerFk`) VALUES ( 1, 1, 1, 0, CURDATE(), 1, 0, 2, 1), ( 2, 1, 1, 1, CURDATE(), 2, 1, 0, 2), - ( 3, 2, 2, 2, CURDATE(), 3, 2, 0, NULL); + ( 3, 2, 1, 2, CURDATE(), 3, 2, 0, NULL), + ( 4, 1, 1, 0, CURDATE(), 1, 0, 2, 1), + ( 5, 1, 1, 1, CURDATE(), 2, 1, 0, 2), + ( 6, 2, 1, 2, CURDATE(), 3, 2, 0, NULL); INSERT INTO `vn`.`packaging`(`id`, `volume`, `width`, `height`, `depth`, `isPackageReturnable`, `created`, `itemFk`, `price`) VALUES @@ -509,4 +507,19 @@ INSERT INTO `vn`.`recovery`(`id`, `clientFk`, `started`, `finished`, `amount`, ` ( 1, 101, CURDATE(), date_add(CURDATE(),INTERVAL 1 MONTH), 50, 7), ( 2, 102, CURDATE(), date_add(CURDATE(),INTERVAL 3 MONTH), 100, 1), ( 3, 102, CURDATE(), date_add(CURDATE(),INTERVAL 1 MONTH), 50, 7), - ( 4, 103, CURDATE(), NULL, 50, 7); \ No newline at end of file + ( 4, 103, CURDATE(), NULL, 50, 7); + +INSERT INTO `bi`.`rotacion`(`Id_Article`, `warehouse_id`, `total`, `rotacion`, `cm3`, `almacenaje`, `manipulacion`, `auxiliar`, `mermas`) + VALUES + ( 1, 1, 0, 0.0000, 1500, 0.0015, 0.0250, 0.0085, 0.0000), + ( 1, 2, 0, 0.0000, 100, 0.0060, 0.0200, 0.0080, 0.0000), + ( 2, 1, 10, 3.5000, 0, 0.0000, 0.0000, 0.0080, 0.0000), + ( 3, 1, 50, 5.5000, 100, 0.0000, 0.0000, 0.0080, 0.0000); + +INSERT INTO `vn`.`annualAverageInvoiced`(`clientFk`, `invoiced`) + VALUES + ( 101, 0), + ( 102, 100), + ( 103, 1000), + ( 104, 500), + ( 105, 5000); \ No newline at end of file diff --git a/services/db/changes/1.0.2/01-ACLinserts.sql b/services/db/changes/1.0.2/01-ACLinserts.sql index 2136703fc..cdbf8883f 100644 --- a/services/db/changes/1.0.2/01-ACLinserts.sql +++ b/services/db/changes/1.0.2/01-ACLinserts.sql @@ -12,3 +12,4 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `pri INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Expedition', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Expedition', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Expedition', '*', 'WRITE', 'ALLOW', 'ROLE', 'production'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('AnnualAverageInvoiced', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); diff --git a/services/db/changes/1.0.2/06-annualAverageInvoiced.sql b/services/db/changes/1.0.2/06-annualAverageInvoiced.sql new file mode 100644 index 000000000..df0cd4dc8 --- /dev/null +++ b/services/db/changes/1.0.2/06-annualAverageInvoiced.sql @@ -0,0 +1,10 @@ +USE `vn`; +CREATE + OR REPLACE ALGORITHM = UNDEFINED + DEFINER = `root`@`%` + SQL SECURITY DEFINER +VIEW `vn`.`annualAverageInvoiced` AS + SELECT + `e`.`Id_Cliente` AS `clientFk`, `e`.`Consumo` AS `invoiced` + FROM + `bi`.`facturacion_media_anual` `e`; diff --git a/services/db/export-data.cmd b/services/db/export-data.cmd index e0fdf56d5..16b63139e 100755 --- a/services/db/export-data.cmd +++ b/services/db/export-data.cmd @@ -5,6 +5,8 @@ echo USE `salix`; >> 02-dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> 02-dumpedFixtures.sql echo USE `vn`; >> 02-dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak >> 02-dumpedFixtures.sql +echo USE `vn2008`; >> 02-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info vn2008 accion_dits Gastos >> 02-dumpedFixtures.sql diff --git a/services/loopback/common/locale/en.json b/services/loopback/common/locale/en.json index ce4eb95f2..35acd8506 100644 --- a/services/loopback/common/locale/en.json +++ b/services/loopback/common/locale/en.json @@ -5,5 +5,6 @@ "The default consignee can not be unchecked": "The default consignee can not be unchecked", "Unable to default a disabled consignee": "Unable to default a disabled consignee", "El método de pago seleccionado requiere que se especifique el IBAN": "El método de pago seleccionado requiere que se especifique el IBAN", - "Ya existe un usuario con ese nombre": "Ya existe un usuario con ese nombre" + "Ya existe un usuario con ese nombre": "Ya existe un usuario con ese nombre", + "Quantity cannot be zero": "Quantity cannot be zero" } \ No newline at end of file diff --git a/services/loopback/common/locale/es.json b/services/loopback/common/locale/es.json index edf12882c..791d0bc53 100644 --- a/services/loopback/common/locale/es.json +++ b/services/loopback/common/locale/es.json @@ -8,7 +8,6 @@ "can't be blank": "can't be blank", "DNI Incorrecto": "DNI Incorrecto", "Ya existe un usuario con ese nombre": "Ya existe un usuario con ese nombre", - "ValidationError: The `Item` instance is not valid. Details: `originFk` Cannot be blank (value: undefined).": "ValidationError: The `Item` instance is not valid. Details: `originFk` Cannot be blank (value: undefined).", - "Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`vn2008`.`Articles`, CONSTRAINT `Articles_ibfk_5` FOREIGN KEY (`tipo_id`) REFERENCES `Tipos` (`tipo_id`) ON UPDATE CASCADE)": "Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`vn2008`.`Articles`, CONSTRAINT `Articles_ibfk_5` FOREIGN KEY (`tipo_id`) REFERENCES `Tipos` (`tipo_id`) ON UPDATE CASCADE)", - "Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`vn2008`.`Articles`, CONSTRAINT `expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `Gastos` (`Id_Gasto`) ON UPDATE CASCADE)": "Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`vn2008`.`Articles`, CONSTRAINT `expenceFk` FOREIGN KEY (`expenceFk`) REFERENCES `Gastos` (`Id_Gasto`) ON UPDATE CASCADE)" + "is invalid": "is invalid", + "Quantity cannot be zero": "La cantidad no puede ser cero" } \ No newline at end of file diff --git a/services/loopback/common/methods/client/createWithUser.js b/services/loopback/common/methods/client/createWithUser.js index f5220a839..54ec90579 100644 --- a/services/loopback/common/methods/client/createWithUser.js +++ b/services/loopback/common/methods/client/createWithUser.js @@ -35,7 +35,12 @@ module.exports = function(Self) { fi: data.fi, socialName: data.socialName, email: data.email, - salesPersonFk: data.salesPersonFk + salesPersonFk: data.salesPersonFk, + postcode: data.postcode, + street: data.street, + city: data.city, + provinceFk: data.provinceFk, + isEqualizated: data.isEqualizated }; newClient = await Self.create(client, {transaction}); await transaction.commit(); diff --git a/services/loopback/common/methods/client/specs/createWithUser.spec.js b/services/loopback/common/methods/client/specs/createWithUser.spec.js index 25f6789fb..e6a2589ef 100644 --- a/services/loopback/common/methods/client/specs/createWithUser.spec.js +++ b/services/loopback/common/methods/client/specs/createWithUser.spec.js @@ -1,12 +1,11 @@ const app = require('../../../../../client/server/server'); -const catchErrors = require('../../../../../../services/utils/jasmineHelpers').catchErrors; const restoreFixtures = require('../../../../../../services/db/testing_fixtures'); describe('Client Create', () => { let sqlStatements = {deletes: ` - DELETE FROM vn.address WHERE nickname = "Wade"; - DELETE FROM vn.client WHERE name = "Wade"; - DELETE FROM account.user WHERE name = "Deadpool"; + DELETE FROM vn.address WHERE nickname = 'Wade'; + DELETE FROM vn.client WHERE name = 'Wade'; + DELETE FROM account.user WHERE name = 'Deadpool'; `, inserts: ``, updates: ``}; beforeAll(() => { @@ -17,70 +16,50 @@ describe('Client Create', () => { restoreFixtures(sqlStatements); }); - let newAccountData = { - active: true, - name: 'Wade', + let newAccount = { userName: 'Deadpool', email: 'Deadpool@marvel.com', fi: '16195279J', - socialName: 'Deadpool Marvel', - salesPersonFk: 1 + name: 'Wade', + socialName: 'Deadpool Marvel' }; - it('should find Charles Xavier', done => { - app.models.Account.findOne({where: {name: 'CharlesXavier'}}) - .then(account => { - expect(account.name).toEqual('CharlesXavier'); - done(); - }); + it(`should not find Deadpool as he's not created yet`, async() => { + let account = await app.models.Account.findOne({where: {name: newAccount.userName}}); + let client = await app.models.Client.findOne({where: {name: newAccount.name}}); + + expect(account).toEqual(null); + expect(client).toEqual(null); }); - it(`should not find Deadpool as he's not created yet`, done => { - app.models.Account.findOne({where: {name: newAccountData.userName}}) - .then(account => { - expect(account).toEqual(null); - app.models.Client.findOne({where: {name: newAccountData.name}}) - .then(client => { - expect(client).toEqual(null); - done(); - }); - }) - .catch(catchErrors(done)); + it('should create a new account', async() => { + let client = await app.models.Client.createWithUser(newAccount); + let account = await app.models.Account.findOne({where: {name: newAccount.userName}}); + + expect(account.name).toEqual(newAccount.userName); + + client = await app.models.Client.findOne({where: {name: newAccount.name}}); + + expect(client.id).toEqual(account.id); + expect(client.name).toEqual(newAccount.name); + expect(client.email).toEqual(newAccount.email); + expect(client.fi).toEqual(newAccount.fi); + expect(client.socialName).toEqual(newAccount.socialName); + }); + + it('should find an existing account', async() => { + let account = await app.models.Account.findOne({where: {name: newAccount.userName}}); + + expect(account.name).toEqual(newAccount.userName); }); it('should not be able to create a user if exists', async() => { - let client = await app.models.Client.findOne({where: {name: 'Charles Xavier'}}); - let account = await app.models.Account.findOne({where: {id: client.id}}); - - let formerAccountData = { - name: client.name, - userName: account.name, - email: client.email, - fi: client.fi, - socialName: client.socialName - }; - try { - let client = await app.models.Client.createWithUser(formerAccountData); + let client = await app.models.Client.createWithUser(newAccount); expect(client).toBeNull(); } catch (err) { expect(err.details.codes.name[0]).toEqual('uniqueness'); } }); - - it('should create a new account', async() => { - let client = await app.models.Client.createWithUser(newAccountData); - let account = await app.models.Account.findOne({where: {name: newAccountData.userName}}); - - expect(account.name).toEqual(newAccountData.userName); - - client = await app.models.Client.findOne({where: {name: newAccountData.name}}); - - expect(client.id).toEqual(account.id); - expect(client.name).toEqual(newAccountData.name); - expect(client.email).toEqual(newAccountData.email); - expect(client.fi).toEqual(newAccountData.fi); - expect(client.socialName).toEqual(newAccountData.socialName); - }); }); diff --git a/services/loopback/common/methods/ticket/get-volume.js b/services/loopback/common/methods/ticket/get-volume.js new file mode 100644 index 000000000..9eb5d3943 --- /dev/null +++ b/services/loopback/common/methods/ticket/get-volume.js @@ -0,0 +1,26 @@ +module.exports = Self => { + Self.remoteMethod('getVolumes', { + description: 'Returns the volumes of a ticket', + accessType: 'READ', + accepts: [{ + arg: 'id', + type: 'number', + required: true, + description: 'ticket id', + http: {source: 'path'} + }], + returns: { + type: 'object' + }, + http: { + path: `/:id/getVolumes`, + verb: 'GET' + } + }); + + Self.getVolumes = async ticketFk => { + let query = `SELECT vn.ticketVolume(?) AS ticketVolumes`; + let response = await Self.rawSql(query, [ticketFk]); + return response[0]; + }; +}; diff --git a/services/loopback/common/methods/ticket/specs/get-volume.spec.js b/services/loopback/common/methods/ticket/specs/get-volume.spec.js new file mode 100644 index 000000000..9998414e9 --- /dev/null +++ b/services/loopback/common/methods/ticket/specs/get-volume.spec.js @@ -0,0 +1,16 @@ +// const getDebt = require('../getDebt'); + +// describe('client getDebt()', () => { +// it('should call the getDebt method', done => { +// let clientFk = 109; +// let self = jasmine.createSpyObj('self', ['remoteMethod', 'rawSql']); +// self.rawSql.and.returnValue(Promise.resolve([{debt: 100}])); +// getDebt(self); +// self.getDebt(clientFk) +// .then(result => { +// expect(result.debt).toEqual(100); +// done(); +// }); +// }); +// }); + diff --git a/services/loopback/common/models/client.js b/services/loopback/common/models/client.js index 928fe43d5..eee710035 100644 --- a/services/loopback/common/models/client.js +++ b/services/loopback/common/models/client.js @@ -44,11 +44,11 @@ module.exports = function(Self) { allowBlank: true }); - Self.validateAsync('fi', fiIsValid, { + Self.validateAsync('fi', tinIsValid, { message: 'DNI Incorrecto' }); - let validateDni = require('../validations/validateDni'); - async function fiIsValid(err, done) { + let validateTin = require('../validations/validateTin'); + async function tinIsValid(err, done) { let filter = { fields: ['code'], where: {id: this.countryFk} @@ -56,7 +56,7 @@ module.exports = function(Self) { let country = await Self.app.models.Country.findOne(filter); let code = country ? country.code.toLowerCase() : null; - if (!validateDni(this.fi, code)) + if (!validateTin(this.fi, code)) err(); done(); } diff --git a/services/loopback/common/models/item-type.json b/services/loopback/common/models/item-type.json index eec3af490..107bccc02 100644 --- a/services/loopback/common/models/item-type.json +++ b/services/loopback/common/models/item-type.json @@ -12,6 +12,9 @@ "id": true, "description": "Identifier" }, + "code": { + "type": "String" + }, "name": { "type": "String" }, diff --git a/services/loopback/common/models/ticket.js b/services/loopback/common/models/ticket.js index 108ebc872..a9d930903 100644 --- a/services/loopback/common/models/ticket.js +++ b/services/loopback/common/models/ticket.js @@ -3,4 +3,5 @@ module.exports = function(Self) { require('../methods/ticket/change-time.js')(Self); require('../methods/ticket/change-worker.js')(Self); require('../methods/ticket/filter.js')(Self); + require('../methods/ticket/get-volume.js')(Self); }; diff --git a/services/loopback/common/validations/specs/validateDni.spec.js b/services/loopback/common/validations/specs/validateTin.spec.js similarity index 66% rename from services/loopback/common/validations/specs/validateDni.spec.js rename to services/loopback/common/validations/specs/validateTin.spec.js index e61ab23c8..8a6ad04b4 100644 --- a/services/loopback/common/validations/specs/validateDni.spec.js +++ b/services/loopback/common/validations/specs/validateTin.spec.js @@ -1,26 +1,26 @@ -const validateDni = require('../validateDni'); +const validateDni = require('../validateTin'); -describe('DNI validation', () => { - it('should return true for any DNI when no country is passed', () => { +describe('TIN validation', () => { + it('should return true for any TIN when no country is passed', () => { let isValid = validateDni('Pepinillos'); expect(isValid).toBeTruthy(); }); describe('Spanish', () => { - it('should return true for valid spanish DNI', () => { + it('should return true for valid spanish TIN', () => { let isValid = validateDni('20849756A', 'es'); expect(isValid).toBeTruthy(); }); - it('should return false for spanish DNI with exceeded digits', () => { + it('should return false for spanish TIN with exceeded digits', () => { let isValid = validateDni('208497563239A', 'es'); expect(isValid).toBeFalsy(); }); - it('should return false for spanish DNI with invalid letter', () => { + it('should return false for spanish TIN with invalid letter', () => { let isValid = validateDni('20243746E', 'es'); expect(isValid).toBeFalsy(); @@ -40,19 +40,19 @@ describe('DNI validation', () => { }); describe('French', () => { - it('should return true for valid french DNI', () => { - let isValid = validateDni('1B123456789', 'fr'); + it('should return true for valid french TIN', () => { + let isValid = validateDni('012345678', 'fr'); expect(isValid).toBeTruthy(); }); - it('should return false for french DNI with exceeded digits', () => { - let isValid = validateDni('1B12345678910', 'fr'); + it('should return false for french TIN with exceeded digits', () => { + let isValid = validateDni('1B123456789101234', 'fr'); expect(isValid).toBeFalsy(); }); - it('should return false for french DNI with bad syntax', () => { + it('should return false for french TIN with bad syntax', () => { let isValid = validateDni('1B12345678A', 'fr'); expect(isValid).toBeFalsy(); @@ -60,19 +60,19 @@ describe('DNI validation', () => { }); describe('Italian', () => { - it('should return true for valid italian DNI', () => { + it('should return true for valid italian TIN', () => { let isValid = validateDni('12345678911', 'it'); expect(isValid).toBeTruthy(); }); - it('should return false for italian DNI with exceeded digits', () => { + it('should return false for italian TIN with exceeded digits', () => { let isValid = validateDni('123456789112', 'it'); expect(isValid).toBeFalsy(); }); - it('should return false for italian DNI with bad syntax', () => { + it('should return false for italian TIN with bad syntax', () => { let isValid = validateDni('1234567891A', 'it'); expect(isValid).toBeFalsy(); @@ -80,19 +80,19 @@ describe('DNI validation', () => { }); describe('Portuguese', () => { - it('should return true for valid portuguese DNI', () => { + it('should return true for valid portuguese TIN', () => { let isValid = validateDni('123456789', 'pt'); expect(isValid).toBeTruthy(); }); - it('should return false for portuguese DNI with exceeded digits', () => { + it('should return false for portuguese TIN with exceeded digits', () => { let isValid = validateDni('12345678910', 'pt'); expect(isValid).toBeFalsy(); }); - it('should return false for portuguese DNI with bad syntax', () => { + it('should return false for portuguese TIN with bad syntax', () => { let isValid = validateDni('12345678A', 'pt'); expect(isValid).toBeFalsy(); diff --git a/services/loopback/common/validations/validateDni.js b/services/loopback/common/validations/validateTin.js similarity index 72% rename from services/loopback/common/validations/validateDni.js rename to services/loopback/common/validations/validateTin.js index b169b6100..ae1c38cee 100644 --- a/services/loopback/common/validations/validateDni.js +++ b/services/loopback/common/validations/validateTin.js @@ -1,24 +1,24 @@ -module.exports = function(fi, country) { - if (fi == null || country == null) +module.exports = function(tin, country) { + if (tin == null || country == null) return true; - if (typeof fi != 'string' || typeof country != 'string') + if (typeof tin != 'string' || typeof country != 'string') return false; - fi = fi.toUpperCase(); + tin = tin.toUpperCase(); country = country.toLowerCase(); - let len = fi.length; + let len = tin.length; let validators = { es: { regExp: /^[A-Z0-9]\d{7}[A-Z0-9]$/, validate: () => { - let isCif = /[A-W]/.test(fi.charAt(0)); - let lastDigit = fi.charAt(len - 1); + let isCif = /[A-W]/.test(tin.charAt(0)); + let lastDigit = tin.charAt(len - 1); let computedDigit; if (isCif) { - let numbers = fi.substring(1, 8) + let numbers = tin.substring(1, 8) .split('') .map(x => parseInt(x)); @@ -41,8 +41,8 @@ module.exports = function(fi, country) { computedDigit = index == -1 ? control.toString() : index; } else { // Foreign NIF - let index = 'XYZ'.indexOf(fi.charAt(0)); - let nif = index == -1 ? fi : index.toString() + fi.substring(1); + let index = 'XYZ'.indexOf(tin.charAt(0)); + let nif = index == -1 ? tin : index.toString() + tin.substring(1); let rest = parseInt(nif.substring(0, 8)) % 23; computedDigit = 'TRWAGMYFPDXBNJZSQVHLCKE'.charAt(rest); @@ -52,10 +52,10 @@ module.exports = function(fi, country) { } }, fr: { - regExp: /^[A-Z0-9]{2}\d{9}$/ + regExp: /^\d{1,13}$/ }, it: { - regExp: /^\d{11}$/ + regExp: /^(\d{11}|[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z])$/ }, pt: { regExp: /^\d{9}$/ @@ -67,6 +67,6 @@ module.exports = function(fi, country) { if (!validator) return true; - return validator.regExp.test(fi) + return validator.regExp.test(tin) && (!validator.validate || validator.validate()); }; diff --git a/services/ticket/common/methods/expedition/filter.js b/services/ticket/common/methods/expedition/filter.js new file mode 100644 index 000000000..c728c8703 --- /dev/null +++ b/services/ticket/common/methods/expedition/filter.js @@ -0,0 +1,22 @@ +module.exports = Self => { + Self.installMethod('filter', filterParams); + + function filterParams(params) { + return { + where: { + ticketFk: params.ticketFk + }, + skip: (params.page - 1) * params.size, + limit: params.size, + order: params.order || 'created DESC', + include: [{ + relation: 'item', + scope: {fields: ['name']} + }, + { + relation: 'worker', + scope: {fields: ['firstName', 'name']} + }] + }; + } +}; diff --git a/services/ticket/common/methods/notes/crudTicketObservation.js b/services/ticket/common/methods/notes/crudTicketObservation.js new file mode 100644 index 000000000..04365eb12 --- /dev/null +++ b/services/ticket/common/methods/notes/crudTicketObservation.js @@ -0,0 +1,3 @@ +module.exports = Self => { + Self.installCrudModel('crudTicketObservation'); +}; diff --git a/services/ticket/common/methods/packaging/crudTicketPackaging.js b/services/ticket/common/methods/packaging/crudTicketPackaging.js new file mode 100644 index 000000000..b5c4bc875 --- /dev/null +++ b/services/ticket/common/methods/packaging/crudTicketPackaging.js @@ -0,0 +1,3 @@ +module.exports = Self => { + Self.installCrudModel('crudTicketPackaging'); +}; diff --git a/services/ticket/common/methods/sale/filter.js b/services/ticket/common/methods/sale/filter.js new file mode 100644 index 000000000..b33d5f1b6 --- /dev/null +++ b/services/ticket/common/methods/sale/filter.js @@ -0,0 +1,26 @@ +module.exports = Self => { + Self.installMethod('filter', filterParams); + + function filterParams(params) { + return { + where: { + ticketFk: params.ticketFk + }, + skip: (params.page - 1) * params.size, + limit: params.size, + order: params.order || 'concept ASC', + include: [{ + relation: "itemTag", + scope: { + fields: ["id", "value", "priority", "tagFk"], + include: { + relation: "tag", + scope: { + fields: ["name"] + } + } + } + }] + }; + } +}; diff --git a/services/ticket/common/methods/ticket/crudTicketObservations.js b/services/ticket/common/methods/ticket/crudTicketObservations.js deleted file mode 100644 index 33949e1f4..000000000 --- a/services/ticket/common/methods/ticket/crudTicketObservations.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = Self => { - Self.installCrudModel('crudTicketObservations'); -}; diff --git a/services/ticket/common/methods/ticketTracking/filter.js b/services/ticket/common/methods/ticketTracking/filter.js new file mode 100644 index 000000000..90e8ca607 --- /dev/null +++ b/services/ticket/common/methods/ticketTracking/filter.js @@ -0,0 +1,28 @@ +module.exports = Self => { + Self.installMethod('filter', filterParams); + + function filterParams(params) { + return { + where: { + ticketFk: params.ticketFk + }, + skip: (params.page - 1) * params.size, + limit: params.size, + order: params.order || 'created DESC', + include: [ + { + relation: "worker", + scope: { + fields: ["firstName", "name"] + } + }, + { + relation: "state", + scope: { + fields: ["name"] + } + } + ] + }; + } +}; diff --git a/services/ticket/common/models/annualAverageInvoiced.json b/services/ticket/common/models/annualAverageInvoiced.json new file mode 100644 index 000000000..d1f582011 --- /dev/null +++ b/services/ticket/common/models/annualAverageInvoiced.json @@ -0,0 +1,24 @@ +{ + "name": "AnnualAverageInvoiced", + "base": "VnModel", + "options": { + "mysql": { + "table": "annualAverageInvoiced" + } + }, + "properties": { + "invoiced": { + "type": "Number" + }, + "clientFk": { + "id": true + } + }, + "relations": { + "client": { + "type": "belongsTo", + "model": "client", + "foreignKey": "clientFk" + } + } +} \ No newline at end of file diff --git a/services/ticket/common/models/expedition.js b/services/ticket/common/models/expedition.js new file mode 100644 index 000000000..391359a3a --- /dev/null +++ b/services/ticket/common/models/expedition.js @@ -0,0 +1,3 @@ +module.exports = function(Self) { + require('../methods/expedition/filter.js')(Self); +}; diff --git a/services/ticket/common/models/sale.js b/services/ticket/common/models/sale.js new file mode 100644 index 000000000..0769447ad --- /dev/null +++ b/services/ticket/common/models/sale.js @@ -0,0 +1,3 @@ +module.exports = function(Self) { + require('../methods/sale/filter.js')(Self); +}; diff --git a/services/ticket/common/models/sale.json b/services/ticket/common/models/sale.json index 0ed01a347..a7d75cf1e 100644 --- a/services/ticket/common/models/sale.json +++ b/services/ticket/common/models/sale.json @@ -41,6 +41,11 @@ "foreignKey": "itemFk", "required": true }, + "itemTag": { + "type": "hasMany", + "model": "ItemTag", + "foreignKey": "itemFk" + }, "ticket": { "type": "belongsTo", "model": "Ticket", diff --git a/services/ticket/common/models/ticketObservation.js b/services/ticket/common/models/ticketObservation.js index bed837bd3..87e6f8748 100644 --- a/services/ticket/common/models/ticketObservation.js +++ b/services/ticket/common/models/ticketObservation.js @@ -1,3 +1,3 @@ module.exports = function(Self) { - require('../methods/ticket/crudTicketObservations.js')(Self); + require('../methods/notes/crudTicketObservation.js')(Self); }; diff --git a/services/ticket/common/models/ticketPackaging.js b/services/ticket/common/models/ticketPackaging.js new file mode 100644 index 000000000..610dca7ad --- /dev/null +++ b/services/ticket/common/models/ticketPackaging.js @@ -0,0 +1,15 @@ +module.exports = function(Self) { + require('../methods/packaging/crudTicketPackaging')(Self); + + Self.validateBinded('quantity', validateQuantity, { + message: 'Quantity cannot be zero', + allowNull: false, + allowBlank: false + }); + + function validateQuantity(quantity) { + return !isNaN(quantity) && quantity != 0; + } + + Self.validatesPresenceOf('packagingFk', {message: 'Package cannot be blank'}); +}; diff --git a/services/ticket/common/models/ticketTracking.js b/services/ticket/common/models/ticketTracking.js new file mode 100644 index 000000000..ab8a13f1e --- /dev/null +++ b/services/ticket/common/models/ticketTracking.js @@ -0,0 +1,3 @@ +module.exports = function(Self) { + require('../methods/ticketTracking/filter')(Self); +}; diff --git a/services/ticket/server/model-config.json b/services/ticket/server/model-config.json index 2bcc701ef..7d2bf6776 100644 --- a/services/ticket/server/model-config.json +++ b/services/ticket/server/model-config.json @@ -28,6 +28,9 @@ }, "Expedition": { "dataSource": "vn" + }, + "AnnualAverageInvoiced": { + "dataSource": "vn" } }