From 256206ace43bfe46805b01e6b0184fd1017e0618 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Tue, 20 Oct 2020 09:44:44 +0200 Subject: [PATCH 01/10] supplier summary dscriptor and card --- .../claim/back/methods/claim/getSummary.js | 4 +- modules/client/back/models/pay-method.json | 52 ++++++------- .../back/methods/supplier/getSummary.js | 74 +++++++++++++++++++ modules/supplier/back/model-config.json | 3 + modules/supplier/back/models/pay-dem.json | 19 +++++ modules/supplier/back/models/supplier.js | 1 + modules/supplier/back/models/supplier.json | 31 ++++++++ modules/supplier/front/card/index.html | 5 ++ modules/supplier/front/card/index.js | 42 +++++++++++ modules/supplier/front/descriptor/index.html | 14 ++++ modules/supplier/front/descriptor/index.js | 33 +++++++++ .../supplier/front/descriptor/index.spec.js | 43 +++++++++++ .../supplier/front/descriptor/locale/es.yml | 1 + modules/supplier/front/index.js | 3 + modules/supplier/front/routes.json | 14 ++++ modules/supplier/front/summary/index.html | 74 +++++++++++++++++++ modules/supplier/front/summary/index.js | 44 +++++++++++ modules/supplier/front/summary/index.spec.js | 52 +++++++++++++ modules/supplier/front/summary/locale/es.yml | 0 modules/supplier/front/summary/style.scss | 7 ++ 20 files changed, 488 insertions(+), 28 deletions(-) create mode 100644 modules/supplier/back/methods/supplier/getSummary.js create mode 100644 modules/supplier/back/models/pay-dem.json create mode 100644 modules/supplier/front/card/index.html create mode 100644 modules/supplier/front/card/index.js create mode 100644 modules/supplier/front/descriptor/index.html create mode 100644 modules/supplier/front/descriptor/index.js create mode 100644 modules/supplier/front/descriptor/index.spec.js create mode 100644 modules/supplier/front/descriptor/locale/es.yml create mode 100644 modules/supplier/front/summary/index.html create mode 100644 modules/supplier/front/summary/index.js create mode 100644 modules/supplier/front/summary/index.spec.js create mode 100644 modules/supplier/front/summary/locale/es.yml create mode 100644 modules/supplier/front/summary/style.scss diff --git a/modules/claim/back/methods/claim/getSummary.js b/modules/claim/back/methods/claim/getSummary.js index fce4caecf..9b04d29a9 100644 --- a/modules/claim/back/methods/claim/getSummary.js +++ b/modules/claim/back/methods/claim/getSummary.js @@ -1,12 +1,12 @@ module.exports = Self => { Self.remoteMethod('getSummary', { - description: 'Updates the item taxes', + description: 'Return the claim summary', accessType: 'READ', accepts: [{ arg: 'id', type: 'number', required: true, - description: 'The item id', + description: 'The claim id', http: {source: 'path'} }], returns: { diff --git a/modules/client/back/models/pay-method.json b/modules/client/back/models/pay-method.json index ceb08bfbe..152544c01 100644 --- a/modules/client/back/models/pay-method.json +++ b/modules/client/back/models/pay-method.json @@ -1,29 +1,29 @@ { - "name": "PayMethod", - "base": "VnModel", - "options": { - "mysql": { - "table": "payMethod" + "name": "PayMethod", + "base": "VnModel", + "options": { + "mysql": { + "table": "payMethod" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "name": { + "type": "string", + "required": true + }, + "graceDays": { + "type": "string" + }, + "outstandingDebt": { + "type": "Number" + }, + "ibanRequired": { + "type": "boolean" + } } - }, - "properties": { - "id": { - "type": "Number", - "id": true, - "description": "Identifier" - }, - "name": { - "type": "string", - "required": true - }, - "graceDays": { - "type": "string" - }, - "outstandingDebt": { - "type": "Number" - }, - "ibanRequired": { - "type": "boolean" - } - } } diff --git a/modules/supplier/back/methods/supplier/getSummary.js b/modules/supplier/back/methods/supplier/getSummary.js new file mode 100644 index 000000000..fb1fa9f01 --- /dev/null +++ b/modules/supplier/back/methods/supplier/getSummary.js @@ -0,0 +1,74 @@ +module.exports = Self => { + Self.remoteMethod('getSummary', { + description: 'Returns the supplier summary', + accessType: 'READ', + accepts: { + arg: 'id', + type: 'number', + required: true, + description: 'The supplier id', + http: {source: 'path'} + }, + returns: { + type: 'object', + root: true + }, + http: { + path: `/:id/getSummary`, + verb: 'GET' + } + }); + Self.getSummary = async id => { + let filter = { + where: {id: id}, + fields: [ + 'id', + 'name', + 'nickname', + 'isOfficial', + 'isActive', + 'note', + 'nif', + 'street', + 'city', + 'postCode', + 'provinceFk', + 'countryFk', + 'payMethodFk', + 'payDemFk', + 'payDay', + 'account', + 'isFarmer', + ], + include: [ + { + relation: 'province', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'country', + scope: { + fields: ['id', 'name', 'code'] + } + }, + { + relation: 'payMethod', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'payDem', + scope: { + fields: ['id', 'payDem'] + } + } + ] + }; + + let supplier = await Self.app.models.Supplier.findOne(filter); + return supplier; + }; +}; diff --git a/modules/supplier/back/model-config.json b/modules/supplier/back/model-config.json index 899e3c38a..9c2f8f391 100644 --- a/modules/supplier/back/model-config.json +++ b/modules/supplier/back/model-config.json @@ -1,5 +1,8 @@ { "Supplier": { "dataSource": "vn" + }, + "PayDem": { + "dataSource": "vn" } } diff --git a/modules/supplier/back/models/pay-dem.json b/modules/supplier/back/models/pay-dem.json new file mode 100644 index 000000000..f214f3e3a --- /dev/null +++ b/modules/supplier/back/models/pay-dem.json @@ -0,0 +1,19 @@ +{ + "name": "PayDem", + "base": "VnModel", + "options": { + "mysql": { + "table": "payDem" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "payDem": { + "type": "Number" + } + } +} diff --git a/modules/supplier/back/models/supplier.js b/modules/supplier/back/models/supplier.js index 953df5106..d3c32b814 100644 --- a/modules/supplier/back/models/supplier.js +++ b/modules/supplier/back/models/supplier.js @@ -1,3 +1,4 @@ module.exports = Self => { require('../methods/supplier/filter')(Self); + require('../methods/supplier/getSummary')(Self); }; diff --git a/modules/supplier/back/models/supplier.json b/modules/supplier/back/models/supplier.json index 41fc9c45c..3c87e4381 100644 --- a/modules/supplier/back/models/supplier.json +++ b/modules/supplier/back/models/supplier.json @@ -45,6 +45,12 @@ "isActive": { "type": "Boolean" }, + "isOfficial": { + "type": "Boolean" + }, + "note": { + "type": "String" + }, "street": { "type": "String" }, @@ -63,10 +69,35 @@ "payDemFk": { "type": "Number" }, + "payDay": { + "type": "Number" + }, "nickname": { "type": "String" } }, + "relations": { + "payMethod": { + "type": "belongsTo", + "model": "PayMethod", + "foreignKey": "payMethodFk" + }, + "payDem": { + "type": "belongsTo", + "model": "PayDem", + "foreignKey": "payDemFk" + }, + "province": { + "type": "belongsTo", + "model": "Province", + "foreignKey": "provinceFk" + }, + "country": { + "type": "belongsTo", + "model": "Country", + "foreignKey": "countryFk" + } + }, "acls": [ { "accessType": "READ", diff --git a/modules/supplier/front/card/index.html b/modules/supplier/front/card/index.html new file mode 100644 index 000000000..11908bce0 --- /dev/null +++ b/modules/supplier/front/card/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/supplier/front/card/index.js b/modules/supplier/front/card/index.js new file mode 100644 index 000000000..77fd091a5 --- /dev/null +++ b/modules/supplier/front/card/index.js @@ -0,0 +1,42 @@ +import ngModule from '../module'; +import ModuleCard from 'salix/components/module-card'; + +class Controller extends ModuleCard { + reload() { + let filter = { + include: [ + { + relation: 'province', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'country', + scope: { + fields: ['id', 'name', 'code'] + } + }, + { + relation: 'payMethod', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'payDem', + scope: { + fields: ['id', 'payDem'] + } + } + ] + }; + this.$http.get(`Suppliers/${this.$params.id}`, {filter}) + .then(response => this.supplier = response.data); + } +} + +ngModule.vnComponent('vnSupplierCard', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html new file mode 100644 index 000000000..1ab95b529 --- /dev/null +++ b/modules/supplier/front/descriptor/index.html @@ -0,0 +1,14 @@ + + +
+ + + + +
+
+
diff --git a/modules/supplier/front/descriptor/index.js b/modules/supplier/front/descriptor/index.js new file mode 100644 index 000000000..676a15418 --- /dev/null +++ b/modules/supplier/front/descriptor/index.js @@ -0,0 +1,33 @@ +import ngModule from '../module'; +import Descriptor from 'salix/components/descriptor'; + +class Controller extends Descriptor { + get supplier() { + return this.entity; + } + + set supplier(value) { + this.entity = value; + } + loadData() { + const filter = { + fields: [ + 'id', + 'name', + 'nickname', + 'nif' + ] + }; + + return this.getData(`Suppliers/${this.id}`, {filter}) + .then(res => this.entity = res.data); + } +} + +ngModule.vnComponent('vnSupplierDescriptor', { + template: require('./index.html'), + controller: Controller, + bindings: { + supplier: '<' + } +}); diff --git a/modules/supplier/front/descriptor/index.spec.js b/modules/supplier/front/descriptor/index.spec.js new file mode 100644 index 000000000..84defea3b --- /dev/null +++ b/modules/supplier/front/descriptor/index.spec.js @@ -0,0 +1,43 @@ +import './index.js'; + +describe('Entry Component vnEntryDescriptor', () => { + let $httpBackend; + let controller; + const entry = {id: 2}; + + beforeEach(ngModule('entry')); + + beforeEach(inject(($componentController, _$httpBackend_) => { + $httpBackend = _$httpBackend_; + controller = $componentController('vnEntryDescriptor', {$element: null}, {entry}); + })); + + describe('showEntryReport()', () => { + it('should open a new window showing a delivery note PDF document', () => { + jest.spyOn(controller.vnReport, 'show'); + + window.open = jasmine.createSpy('open'); + const params = { + clientId: controller.vnConfig.storage.currentUserWorkerId, + entryId: entry.id + }; + controller.showEntryReport(); + + expect(controller.vnReport.show).toHaveBeenCalledWith('entry-order', params); + }); + }); + + describe('loadData()', () => { + it('should perform ask for the entry', () => { + let query = `Entries/${entry.id}`; + jest.spyOn(controller, 'getData'); + + $httpBackend.expectGET(query).respond(); + controller.loadData(); + $httpBackend.flush(); + + expect(controller.getData).toHaveBeenCalledTimes(1); + expect(controller.getData).toHaveBeenCalledWith(query, jasmine.any(Object)); + }); + }); +}); diff --git a/modules/supplier/front/descriptor/locale/es.yml b/modules/supplier/front/descriptor/locale/es.yml new file mode 100644 index 000000000..ac3c202a0 --- /dev/null +++ b/modules/supplier/front/descriptor/locale/es.yml @@ -0,0 +1 @@ +Tax number: NIF / CIF \ No newline at end of file diff --git a/modules/supplier/front/index.js b/modules/supplier/front/index.js index cb25b3b8c..daf19e606 100644 --- a/modules/supplier/front/index.js +++ b/modules/supplier/front/index.js @@ -3,3 +3,6 @@ export * from './module'; import './main'; import './index/'; import './search-panel'; +import './summary'; +import './card'; +import './descriptor'; diff --git a/modules/supplier/front/routes.json b/modules/supplier/front/routes.json index 21f1ceb26..78ae46985 100644 --- a/modules/supplier/front/routes.json +++ b/modules/supplier/front/routes.json @@ -2,6 +2,7 @@ "module": "supplier", "name": "Suppliers", "icon" : "icon-supplier", + "dependencies": ["client", "item"], "validations" : true, "menus": { "main": [ @@ -22,6 +23,19 @@ "state": "supplier.index", "component": "vn-supplier-index", "description": "Suppliers" + }, { + "url": "/:id", + "state": "supplier.card", + "abstract": true, + "component": "vn-supplier-card" + }, { + "url": "/summary", + "state": "supplier.card.summary", + "component": "vn-supplier-summary", + "description": "Summary", + "params": { + "supplier": "$ctrl.supplier" + } } ] } \ No newline at end of file diff --git a/modules/supplier/front/summary/index.html b/modules/supplier/front/summary/index.html new file mode 100644 index 000000000..a05470cea --- /dev/null +++ b/modules/supplier/front/summary/index.html @@ -0,0 +1,74 @@ + +
{{$ctrl.summary.name}} - {{$ctrl.summary.id}}
+ + +

Basic data

+ + + + + + + + + + +
+ +

Fiscal address

+ + + + + + + + + + + + + + +
+ +

Billing data

+ + + + + + + + + + +
+
+
+ + \ No newline at end of file diff --git a/modules/supplier/front/summary/index.js b/modules/supplier/front/summary/index.js new file mode 100644 index 000000000..f201127da --- /dev/null +++ b/modules/supplier/front/summary/index.js @@ -0,0 +1,44 @@ +import ngModule from '../module'; +import Section from 'salix/components/section'; +import './style.scss'; + +class Controller extends Section { + $onChanges() { + if (!this.supplier) + return; + + this.getSummary(); + } + + getSummary() { + this.$http.get(`Suppliers/${this.supplier.id}/getSummary`).then(response => { + this.summary = response.data; + }); + } + + // sumRisk() { + // let total = 0; + // this.summary.clientRisks.forEach(risk => { + // total += risk.amount; + // }); + // return total; + // } + + // claimRate(priceIncreasing) { + // if (priceIncreasing) + // return priceIncreasing * 100; + // } + + // claimingRate(rate) { + // if (rate) + // return rate * 100; + // } +} + +ngModule.vnComponent('vnSupplierSummary', { + template: require('./index.html'), + controller: Controller, + bindings: { + supplier: '<' + } +}); diff --git a/modules/supplier/front/summary/index.spec.js b/modules/supplier/front/summary/index.spec.js new file mode 100644 index 000000000..05491267c --- /dev/null +++ b/modules/supplier/front/summary/index.spec.js @@ -0,0 +1,52 @@ +import './index'; + +describe('Client', () => { + describe('Component vnClientSummary', () => { + let controller; + let $httpBackend; + let $scope; + + beforeEach(ngModule('client')); + + beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => { + $httpBackend = _$httpBackend_; + $scope = $rootScope.$new(); + const $element = angular.element(''); + controller = $componentController('vnClientSummary', {$element, $scope}); + controller.client = {id: 101}; + })); + + describe('$onChanges()', () => { + it('should perform a GET query and then define the summary property', () => { + let res = {name: 'Superman', classifications: []}; + + jest.spyOn(controller, 'sumRisk').mockReturnThis(); + $httpBackend.expect('GET', `Clients/101/summary`).respond(200, res); + + controller.$onChanges(); + $httpBackend.flush(); + + expect(controller.summary).toBeDefined(); + expect(controller.summary.name).toEqual('Superman'); + }); + }); + + describe('sumRisk()', () => { + it('should sum property amount of an array', () => { + controller.summary = { + clientRisks: [{ + companyFk: 442, + amount: 100 + }, + { + companyFk: 567, + amount: 200 + }]}; + + let result = controller.sumRisk(); + + expect(result).toEqual(300); + }); + }); + }); +}); diff --git a/modules/supplier/front/summary/locale/es.yml b/modules/supplier/front/summary/locale/es.yml new file mode 100644 index 000000000..e69de29bb diff --git a/modules/supplier/front/summary/style.scss b/modules/supplier/front/summary/style.scss new file mode 100644 index 000000000..1520659d2 --- /dev/null +++ b/modules/supplier/front/summary/style.scss @@ -0,0 +1,7 @@ +@import "variables"; + +vn-client-summary { + .alert span { + color: $color-alert !important + } +} \ No newline at end of file From fe2f12cd8f13c61b68cd3eab234f498dcfc4cf6c Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Thu, 22 Oct 2020 09:35:11 +0200 Subject: [PATCH 02/10] first test step --- db/changes/10250-octoberFest/00-supplier.sql | 2 + db/dump/fixtures.sql | 8 +-- modules/client/front/fiscal-data/index.js | 2 +- .../supplier/back/methods/supplier/filter.js | 7 ++- .../back/methods/supplier/getSummary.js | 2 +- .../back/methods/supplier/isAClient.js | 26 ++++++++ .../methods/supplier/specs/getSummary.spec.js | 28 +++++++++ modules/supplier/back/models/supplier.js | 1 + modules/supplier/front/descriptor/index.html | 45 +++++++++++++- modules/supplier/front/descriptor/index.js | 59 ++++++++++++++++++- modules/supplier/front/main/index.html | 2 +- .../supplier/front/search-panel/index.html | 2 +- modules/supplier/front/summary/index.html | 2 +- modules/supplier/front/summary/index.js | 18 ------ modules/supplier/front/summary/locale/es.yml | 0 15 files changed, 174 insertions(+), 30 deletions(-) create mode 100644 db/changes/10250-octoberFest/00-supplier.sql create mode 100644 modules/supplier/back/methods/supplier/isAClient.js create mode 100644 modules/supplier/back/methods/supplier/specs/getSummary.spec.js delete mode 100644 modules/supplier/front/summary/locale/es.yml diff --git a/db/changes/10250-octoberFest/00-supplier.sql b/db/changes/10250-octoberFest/00-supplier.sql new file mode 100644 index 000000000..7a5daa92f --- /dev/null +++ b/db/changes/10250-octoberFest/00-supplier.sql @@ -0,0 +1,2 @@ +ALTER TABLE `vn`.`supplier` +ADD COLUMN `email` VARCHAR(45) NULL AFTER `isTrucker`; diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 0bee9cf65..e1881a12f 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -1208,11 +1208,11 @@ INSERT INTO `vn`.`annualAverageInvoiced`(`clientFk`, `invoiced`) (104, 500), (105, 5000); -INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`retAccount`,`commission`, `created`, `postcodeFk`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `phone`, `payDay`) +INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`retAccount`,`commission`, `created`, `postcodeFk`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `phone`, `payDay`, `email`) VALUES - (1, 'Plants SL', 'Plants nick', 4000000001, 1, 'A11111111', 0, NULL, 0, CURDATE(), 1111, 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 123456789, 15), - (2, 'Flower King', 'The king', 4000000002, 1, 'B22222222', 0, NULL, 0, CURDATE(), 2222, 1, 'supplier address 2', 'LONDON', 2, 45671, 1, 2, 987654321, 10), - (442, 'Verdnatura Levante SL', 'Verdnatura', 4000000442, 1, 'C33333333', 0, NULL, 0, CURDATE(), 3333, 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 987123654, 15); + (1, 'Plants SL', 'Plants nick', 4000000001, 1, '06089160W', 0, NULL, 0, CURDATE(), 1111, 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 123456789, 15, 'supplier_one@gmail.es'), + (2, 'Flower King', 'The king', 4000000002, 1, 'B22222222', 0, NULL, 0, CURDATE(), 2222, 1, 'supplier address 2', 'LONDON', 2, 45671, 1, 2, 987654321, 10, 'supplier_two@gmail.es'), + (442, 'Verdnatura Levante SL', 'Verdnatura', 4000000442, 1, 'C33333333', 0, NULL, 0, CURDATE(), 3333, 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 987123654, 15, 'supplier_three@gmail.es'); INSERT INTO `cache`.`cache_calc`(`id`, `cache_id`, `cacheName`, `params`, `last_refresh`, `expires`, `created`, `connection_id`) VALUES diff --git a/modules/client/front/fiscal-data/index.js b/modules/client/front/fiscal-data/index.js index 58b22537c..6fb88140c 100644 --- a/modules/client/front/fiscal-data/index.js +++ b/modules/client/front/fiscal-data/index.js @@ -35,7 +35,7 @@ export default class Controller extends Section { const $t = this.$translate.instant; const filter = encodeURIComponent(JSON.stringify(filterObj)); - const query = `Clients/findOne?filter=${filter}`; + const query = `Clients/find?filter=${filter}`; this.$http.get(query).then(res => { const params = {clientId: res.data.id}; const question = $t('Found a client with this phone or email', params, null, null, 'sanitizeParameters'); diff --git a/modules/supplier/back/methods/supplier/filter.js b/modules/supplier/back/methods/supplier/filter.js index 3eddda294..b1e7d3884 100644 --- a/modules/supplier/back/methods/supplier/filter.js +++ b/modules/supplier/back/methods/supplier/filter.js @@ -60,7 +60,12 @@ module.exports = Self => { let where = buildFilter(ctx.args, (param, value) => { switch (param) { case 'search': - return {'s.id': value}; + return {or: [ + {'s.id': value}, + {'s.name': {like: `%${value}%`}}, + {'s.nickname': {like: `%${value}%`}} + ]}; + // return {'s.id': value}; case 'nickname': param = `s.${param}`; return {[param]: {like: `%${value}%`}}; diff --git a/modules/supplier/back/methods/supplier/getSummary.js b/modules/supplier/back/methods/supplier/getSummary.js index fb1fa9f01..24a592acf 100644 --- a/modules/supplier/back/methods/supplier/getSummary.js +++ b/modules/supplier/back/methods/supplier/getSummary.js @@ -50,7 +50,7 @@ module.exports = Self => { { relation: 'country', scope: { - fields: ['id', 'name', 'code'] + fields: ['id', 'country', 'code'] } }, { diff --git a/modules/supplier/back/methods/supplier/isAClient.js b/modules/supplier/back/methods/supplier/isAClient.js new file mode 100644 index 000000000..ec3bfe3dc --- /dev/null +++ b/modules/supplier/back/methods/supplier/isAClient.js @@ -0,0 +1,26 @@ +module.exports = Self => { + Self.remoteMethod('isAClient', { + description: 'Returns the supplier summary', + accessType: 'READ', + accepts: { + arg: 'nif', + type: 'string', + required: true, + description: 'The supplier nif', + http: {source: 'path'} + }, + returns: { + type: 'object', + root: true + }, + http: { + path: `/:nif/isAClient`, + verb: 'GET' + } + }); + Self.isAClient = async nif => { + const client = await Self.app.models.Client.findOne({where: {fi: nif}}); + console.log('client', client); + return client; + }; +}; diff --git a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js new file mode 100644 index 000000000..58a1e0854 --- /dev/null +++ b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js @@ -0,0 +1,28 @@ +const app = require('vn-loopback/server/server'); + +describe('Supplier getSummary()', () => { + // it('should return the supplier matching "search"', async() => { + // let ctx = { + // args: { + // search: 1 + // } + // }; + + // let result = await app.models.Supplier.filter(ctx); + + // expect(result.length).toEqual(1); + // expect(result[0].id).toEqual(1); + // }); + + // it('should return the supplier matching the province', async() => { + // let ctx = { + // args: { + // provinceFk: 1 + // } + // }; + + // let result = await app.models.Supplier.filter(ctx); + + // expect(result.length).toEqual(2); + // }); +}); diff --git a/modules/supplier/back/models/supplier.js b/modules/supplier/back/models/supplier.js index d3c32b814..8d77d612b 100644 --- a/modules/supplier/back/models/supplier.js +++ b/modules/supplier/back/models/supplier.js @@ -1,4 +1,5 @@ module.exports = Self => { require('../methods/supplier/filter')(Self); require('../methods/supplier/getSummary')(Self); + require('../methods/supplier/isAClient')(Self); }; diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html index 1ab95b529..53d27ed91 100644 --- a/modules/supplier/front/descriptor/index.html +++ b/modules/supplier/front/descriptor/index.html @@ -8,7 +8,50 @@ - + + + + + + + + + + +
+ + + + +
+ diff --git a/modules/supplier/front/descriptor/index.js b/modules/supplier/front/descriptor/index.js index 676a15418..7d4ee750e 100644 --- a/modules/supplier/front/descriptor/index.js +++ b/modules/supplier/front/descriptor/index.js @@ -8,14 +8,71 @@ class Controller extends Descriptor { set supplier(value) { this.entity = value; + this.iSupplierAClient(); } + + get entryFilter() { + if (!this.supplier) return null; + + const date = new Date(); + date.setHours(0, 0, 0, 0); + + const from = new Date(date.getTime()); + from.setDate(from.getDate() - 10); + + const to = new Date(date.getTime()); + to.setDate(to.getDate() + 10); + + return JSON.stringify({ + supplierFk: this.supplier.id, + from, + to + }); + } + iSupplierAClient() { + if (!this.supplier) return; + + const filter = { + where: {fi: this.supplier.nif} + }; + this.$http.get('Clients/findOne', {filter}).then(res => { + if (res.data) + this.isAClient = res.data; + }).catch(error => { + return this.isAClient = false; + }); + // this.$http.get(`Suppliers/${this.supplier.nif}/isAClient`).then(res => { + // this.isAClient = res.data; + // }); + } + loadData() { const filter = { fields: [ 'id', 'name', 'nickname', - 'nif' + 'nif', + 'payMethodFk', + 'payDemFk', + 'payDay', + 'isActive', + 'isOfficial', + 'account' + ], + include: [ + { + relation: 'payMethod', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'payDem', + scope: { + fields: ['id', 'payDem'] + } + } ] }; diff --git a/modules/supplier/front/main/index.html b/modules/supplier/front/main/index.html index 2278087c2..5df346690 100644 --- a/modules/supplier/front/main/index.html +++ b/modules/supplier/front/main/index.html @@ -8,7 +8,7 @@ diff --git a/modules/supplier/front/search-panel/index.html b/modules/supplier/front/search-panel/index.html index 5ad5e6e3a..f5b3962e0 100644 --- a/modules/supplier/front/search-panel/index.html +++ b/modules/supplier/front/search-panel/index.html @@ -5,7 +5,7 @@ vn-one label="General search" ng-model="filter.search" - info="Search suppliers by id" + info="Search suppliers by id name or alias" vn-focus> diff --git a/modules/supplier/front/summary/index.html b/modules/supplier/front/summary/index.html index a05470cea..0df489bfb 100644 --- a/modules/supplier/front/summary/index.html +++ b/modules/supplier/front/summary/index.html @@ -38,7 +38,7 @@ value="{{$ctrl.summary.city}}"> + value="{{$ctrl.summary.postCode}}"> diff --git a/modules/supplier/front/summary/index.js b/modules/supplier/front/summary/index.js index f201127da..0cbe70785 100644 --- a/modules/supplier/front/summary/index.js +++ b/modules/supplier/front/summary/index.js @@ -15,24 +15,6 @@ class Controller extends Section { this.summary = response.data; }); } - - // sumRisk() { - // let total = 0; - // this.summary.clientRisks.forEach(risk => { - // total += risk.amount; - // }); - // return total; - // } - - // claimRate(priceIncreasing) { - // if (priceIncreasing) - // return priceIncreasing * 100; - // } - - // claimingRate(rate) { - // if (rate) - // return rate * 100; - // } } ngModule.vnComponent('vnSupplierSummary', { diff --git a/modules/supplier/front/summary/locale/es.yml b/modules/supplier/front/summary/locale/es.yml deleted file mode 100644 index e69de29bb..000000000 From e3757e9191dcd2fdbd46074bf9af0789bf96f93e Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Thu, 22 Oct 2020 13:00:11 +0200 Subject: [PATCH 03/10] changes supplier models --- modules/client/back/models/client.json | 6 +++ .../back/methods/supplier/isAClient.js | 1 - modules/supplier/back/models/supplier.json | 8 +++- modules/supplier/front/card/index.js | 6 +++ modules/supplier/front/descriptor/index.js | 39 +++++++++++-------- 5 files changed, 42 insertions(+), 18 deletions(-) diff --git a/modules/client/back/models/client.json b/modules/client/back/models/client.json index 631fce3aa..d39470359 100644 --- a/modules/client/back/models/client.json +++ b/modules/client/back/models/client.json @@ -186,6 +186,12 @@ "model": "BankEntity", "foreignKey": "bankEntityFk" }, + "supplier": { + "type": "belongsTo", + "model": "Supplier", + "foreignKey": "fi", + "primaryKey": "nif" + }, "defaulters": { "type": "hasMany", "model": "Defaulter", diff --git a/modules/supplier/back/methods/supplier/isAClient.js b/modules/supplier/back/methods/supplier/isAClient.js index ec3bfe3dc..d200d0c84 100644 --- a/modules/supplier/back/methods/supplier/isAClient.js +++ b/modules/supplier/back/methods/supplier/isAClient.js @@ -20,7 +20,6 @@ module.exports = Self => { }); Self.isAClient = async nif => { const client = await Self.app.models.Client.findOne({where: {fi: nif}}); - console.log('client', client); return client; }; }; diff --git a/modules/supplier/back/models/supplier.json b/modules/supplier/back/models/supplier.json index 3c87e4381..8c8952f8f 100644 --- a/modules/supplier/back/models/supplier.json +++ b/modules/supplier/back/models/supplier.json @@ -96,7 +96,13 @@ "type": "belongsTo", "model": "Country", "foreignKey": "countryFk" - } + }, + "client": { + "type": "belongsTo", + "model": "Client", + "foreignKey": "fi", + "primaryKey": "nif" + } }, "acls": [ { diff --git a/modules/supplier/front/card/index.js b/modules/supplier/front/card/index.js index 77fd091a5..613b99cc9 100644 --- a/modules/supplier/front/card/index.js +++ b/modules/supplier/front/card/index.js @@ -28,6 +28,12 @@ class Controller extends ModuleCard { scope: { fields: ['id', 'payDem'] } + }, + { + relation: 'client', + scope: { + fields: ['id', 'fi'] + } } ] }; diff --git a/modules/supplier/front/descriptor/index.js b/modules/supplier/front/descriptor/index.js index 7d4ee750e..90e94b1a3 100644 --- a/modules/supplier/front/descriptor/index.js +++ b/modules/supplier/front/descriptor/index.js @@ -8,7 +8,8 @@ class Controller extends Descriptor { set supplier(value) { this.entity = value; - this.iSupplierAClient(); + console.log('this.entity', this.entity); + // this.iSupplierAClient(); } get entryFilter() { @@ -29,22 +30,22 @@ class Controller extends Descriptor { to }); } - iSupplierAClient() { - if (!this.supplier) return; + // iSupplierAClient() { + // if (!this.supplier) return; - const filter = { - where: {fi: this.supplier.nif} - }; - this.$http.get('Clients/findOne', {filter}).then(res => { - if (res.data) - this.isAClient = res.data; - }).catch(error => { - return this.isAClient = false; - }); - // this.$http.get(`Suppliers/${this.supplier.nif}/isAClient`).then(res => { - // this.isAClient = res.data; - // }); - } + // const filter = { + // where: {fi: this.supplier.nif} + // }; + // this.$http.get('Clients/findOne', {filter}).then(res => { + // if (res.data) + // this.isAClient = res.data; + // }).catch(error => { + // return this.isAClient = false; + // }); + // // this.$http.get(`Suppliers/${this.supplier.nif}/isAClient`).then(res => { + // // this.isAClient = res.data; + // // }); + // } loadData() { const filter = { @@ -72,6 +73,12 @@ class Controller extends Descriptor { scope: { fields: ['id', 'payDem'] } + }, + { + relation: 'client', + scope: { + fields: ['id', 'fi'] + } } ] }; From 58168e78ab343c39e14cbf2ea6f34fe95a7c94f7 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Mon, 26 Oct 2020 08:38:43 +0100 Subject: [PATCH 04/10] test, translate and supplier searpanel, summary --- db/changes/10250-octoberFest/00-supplier.sql | 2 - db/dump/fixtures.sql | 8 +-- .../methods/claim/specs/updateClaim.spec.js | 2 +- modules/client/back/models/client.json | 6 -- .../client/front/balance/create/index.spec.js | 4 +- modules/order/front/index/index.spec.js | 2 +- .../back/methods/supplier/isAClient.js | 25 ------- .../methods/supplier/specs/getSummary.spec.js | 38 +++++----- modules/supplier/back/models/supplier.js | 1 - modules/supplier/back/models/supplier.json | 4 +- modules/supplier/front/descriptor/index.html | 4 +- modules/supplier/front/descriptor/index.js | 22 +----- .../supplier/front/descriptor/index.spec.js | 69 ++++++++++++------- .../supplier/front/descriptor/locale/es.yml | 4 +- modules/supplier/front/main/index.html | 2 +- .../supplier/front/search-panel/index.html | 2 +- .../supplier/front/search-panel/locale/es.yml | 3 +- modules/supplier/front/summary/index.html | 4 +- modules/supplier/front/summary/index.js | 2 +- modules/supplier/front/summary/index.spec.js | 44 ++++-------- modules/supplier/front/summary/locale/es.yml | 5 ++ 21 files changed, 105 insertions(+), 148 deletions(-) delete mode 100644 db/changes/10250-octoberFest/00-supplier.sql delete mode 100644 modules/supplier/back/methods/supplier/isAClient.js create mode 100644 modules/supplier/front/summary/locale/es.yml diff --git a/db/changes/10250-octoberFest/00-supplier.sql b/db/changes/10250-octoberFest/00-supplier.sql deleted file mode 100644 index 7a5daa92f..000000000 --- a/db/changes/10250-octoberFest/00-supplier.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `vn`.`supplier` -ADD COLUMN `email` VARCHAR(45) NULL AFTER `isTrucker`; diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index e1881a12f..c36e8d8cf 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -1208,11 +1208,11 @@ INSERT INTO `vn`.`annualAverageInvoiced`(`clientFk`, `invoiced`) (104, 500), (105, 5000); -INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`retAccount`,`commission`, `created`, `postcodeFk`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `phone`, `payDay`, `email`) +INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`retAccount`,`commission`, `created`, `postcodeFk`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`) VALUES - (1, 'Plants SL', 'Plants nick', 4000000001, 1, '06089160W', 0, NULL, 0, CURDATE(), 1111, 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 123456789, 15, 'supplier_one@gmail.es'), - (2, 'Flower King', 'The king', 4000000002, 1, 'B22222222', 0, NULL, 0, CURDATE(), 2222, 1, 'supplier address 2', 'LONDON', 2, 45671, 1, 2, 987654321, 10, 'supplier_two@gmail.es'), - (442, 'Verdnatura Levante SL', 'Verdnatura', 4000000442, 1, 'C33333333', 0, NULL, 0, CURDATE(), 3333, 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 987123654, 15, 'supplier_three@gmail.es'); + (1, 'Plants SL', 'Plants nick', 4000000001, 1, '06089160W', 0, NULL, 0, CURDATE(), 1111, 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15), + (2, 'Flower King', 'The king', 4000000002, 1, 'B22222222', 0, NULL, 0, CURDATE(), 2222, 1, 'supplier address 2', 'LONDON', 2, 45671, 1, 2, 10), + (442, 'Verdnatura Levante SL', 'Verdnatura', 4000000442, 1, 'C33333333', 0, NULL, 0, CURDATE(), 3333, 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15); INSERT INTO `cache`.`cache_calc`(`id`, `cache_id`, `cacheName`, `params`, `last_refresh`, `expires`, `created`, `connection_id`) VALUES diff --git a/modules/claim/back/methods/claim/specs/updateClaim.spec.js b/modules/claim/back/methods/claim/specs/updateClaim.spec.js index f1ee99eac..2a36bab9b 100644 --- a/modules/claim/back/methods/claim/specs/updateClaim.spec.js +++ b/modules/claim/back/methods/claim/specs/updateClaim.spec.js @@ -56,7 +56,7 @@ describe('Update Claim', () => { hasToPickUp: false } }; - await app.models.Claim.updateClaim(ctx, newClaim.id,); + await app.models.Claim.updateClaim(ctx, newClaim.id); let updatedClaim = await app.models.Claim.findById(newClaim.id); diff --git a/modules/client/back/models/client.json b/modules/client/back/models/client.json index d39470359..631fce3aa 100644 --- a/modules/client/back/models/client.json +++ b/modules/client/back/models/client.json @@ -186,12 +186,6 @@ "model": "BankEntity", "foreignKey": "bankEntityFk" }, - "supplier": { - "type": "belongsTo", - "model": "Supplier", - "foreignKey": "fi", - "primaryKey": "nif" - }, "defaulters": { "type": "hasMany", "model": "Defaulter", diff --git a/modules/client/front/balance/create/index.spec.js b/modules/client/front/balance/create/index.spec.js index 11fdb1040..9f85387c8 100644 --- a/modules/client/front/balance/create/index.spec.js +++ b/modules/client/front/balance/create/index.spec.js @@ -51,7 +51,7 @@ describe('Client', () => { } }; const serializedParams = $httpParamSerializer({filter}); - $httpBackend.expect('GET', `ClientRisks?${serializedParams}`,).respond([{amount: 20}]); + $httpBackend.expect('GET', `ClientRisks?${serializedParams}`).respond([{amount: 20}]); controller.getAmountPaid(); $httpBackend.flush(); @@ -65,7 +65,7 @@ describe('Client', () => { controller.$params = {id: 101}; - $httpBackend.expect('POST', `Receipts`,).respond({id: 1}); + $httpBackend.expect('POST', `Receipts`).respond({id: 1}); controller.responseHandler('accept'); $httpBackend.flush(); diff --git a/modules/order/front/index/index.spec.js b/modules/order/front/index/index.spec.js index 2e538f3c7..5b85b3333 100644 --- a/modules/order/front/index/index.spec.js +++ b/modules/order/front/index/index.spec.js @@ -18,7 +18,7 @@ describe('Component vnOrderIndex', () => { beforeEach(ngModule('order')); - beforeEach(inject(($componentController, _$window_,) => { + beforeEach(inject(($componentController, _$window_) => { $window = _$window_; const $element = angular.element(''); controller = $componentController('vnOrderIndex', {$element}); diff --git a/modules/supplier/back/methods/supplier/isAClient.js b/modules/supplier/back/methods/supplier/isAClient.js deleted file mode 100644 index d200d0c84..000000000 --- a/modules/supplier/back/methods/supplier/isAClient.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = Self => { - Self.remoteMethod('isAClient', { - description: 'Returns the supplier summary', - accessType: 'READ', - accepts: { - arg: 'nif', - type: 'string', - required: true, - description: 'The supplier nif', - http: {source: 'path'} - }, - returns: { - type: 'object', - root: true - }, - http: { - path: `/:nif/isAClient`, - verb: 'GET' - } - }); - Self.isAClient = async nif => { - const client = await Self.app.models.Client.findOne({where: {fi: nif}}); - return client; - }; -}; diff --git a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js index 58a1e0854..73feba9ad 100644 --- a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js +++ b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js @@ -1,28 +1,28 @@ const app = require('vn-loopback/server/server'); describe('Supplier getSummary()', () => { - // it('should return the supplier matching "search"', async() => { - // let ctx = { - // args: { - // search: 1 - // } - // }; + it('should return a summary object containing data from one supplier', async() => { + const supplier = await app.models.Supplier.getSummary(1); - // let result = await app.models.Supplier.filter(ctx); + expect(supplier.id).toEqual(1); + expect(supplier.name).toEqual('Plants SL'); + expect(supplier.nif).toEqual('06089160W'); + }); - // expect(result.length).toEqual(1); - // expect(result[0].id).toEqual(1); - // }); + it(`should return a summary object containing it's supplier country`, async() => { + const supplier = await app.models.Supplier.getSummary(1); + const country = supplier.country(); - // it('should return the supplier matching the province', async() => { - // let ctx = { - // args: { - // provinceFk: 1 - // } - // }; + expect(country.id).toEqual(1); + expect(country.code).toEqual('ES'); + }); - // let result = await app.models.Supplier.filter(ctx); + it(`should return a summary object containing it's billing data`, async() => { + const supplier = await app.models.Supplier.getSummary(1); + const payMethod = supplier.payMethod(); - // expect(result.length).toEqual(2); - // }); + expect(supplier.account).toEqual(4000000001); + expect(supplier.payDay).toEqual(15); + expect(payMethod.name).toEqual('PayMethod one'); + }); }); diff --git a/modules/supplier/back/models/supplier.js b/modules/supplier/back/models/supplier.js index 8d77d612b..d3c32b814 100644 --- a/modules/supplier/back/models/supplier.js +++ b/modules/supplier/back/models/supplier.js @@ -1,5 +1,4 @@ module.exports = Self => { require('../methods/supplier/filter')(Self); require('../methods/supplier/getSummary')(Self); - require('../methods/supplier/isAClient')(Self); }; diff --git a/modules/supplier/back/models/supplier.json b/modules/supplier/back/models/supplier.json index 8c8952f8f..b4f5b5318 100644 --- a/modules/supplier/back/models/supplier.json +++ b/modules/supplier/back/models/supplier.json @@ -100,8 +100,8 @@ "client": { "type": "belongsTo", "model": "Client", - "foreignKey": "fi", - "primaryKey": "nif" + "foreignKey": "nif", + "primaryKey": "fi" } }, "acls": [ diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html index 53d27ed91..470d984f2 100644 --- a/modules/supplier/front/descriptor/index.html +++ b/modules/supplier/front/descriptor/index.html @@ -44,9 +44,9 @@
diff --git a/modules/supplier/front/descriptor/index.js b/modules/supplier/front/descriptor/index.js index 90e94b1a3..42513a56a 100644 --- a/modules/supplier/front/descriptor/index.js +++ b/modules/supplier/front/descriptor/index.js @@ -8,8 +8,6 @@ class Controller extends Descriptor { set supplier(value) { this.entity = value; - console.log('this.entity', this.entity); - // this.iSupplierAClient(); } get entryFilter() { @@ -30,22 +28,6 @@ class Controller extends Descriptor { to }); } - // iSupplierAClient() { - // if (!this.supplier) return; - - // const filter = { - // where: {fi: this.supplier.nif} - // }; - // this.$http.get('Clients/findOne', {filter}).then(res => { - // if (res.data) - // this.isAClient = res.data; - // }).catch(error => { - // return this.isAClient = false; - // }); - // // this.$http.get(`Suppliers/${this.supplier.nif}/isAClient`).then(res => { - // // this.isAClient = res.data; - // // }); - // } loadData() { const filter = { @@ -83,8 +65,8 @@ class Controller extends Descriptor { ] }; - return this.getData(`Suppliers/${this.id}`, {filter}) - .then(res => this.entity = res.data); + return this.getData(`Suppliers/${this.supplier.id}`, {filter}) + .then(res => this.supplier = res.data); } } diff --git a/modules/supplier/front/descriptor/index.spec.js b/modules/supplier/front/descriptor/index.spec.js index 84defea3b..58f0fac86 100644 --- a/modules/supplier/front/descriptor/index.spec.js +++ b/modules/supplier/front/descriptor/index.spec.js @@ -1,43 +1,64 @@ import './index.js'; -describe('Entry Component vnEntryDescriptor', () => { +describe('Supplier Component vnSupplierDescriptor', () => { let $httpBackend; let controller; - const entry = {id: 2}; + let $httpParamSerializer; + const supplier = {id: 1}; - beforeEach(ngModule('entry')); + beforeEach(ngModule('supplier')); - beforeEach(inject(($componentController, _$httpBackend_) => { + beforeEach(inject(($componentController, _$httpBackend_, _$httpParamSerializer_) => { $httpBackend = _$httpBackend_; - controller = $componentController('vnEntryDescriptor', {$element: null}, {entry}); + $httpParamSerializer = _$httpParamSerializer_; + controller = $componentController('vnSupplierDescriptor', {$element: null}, {supplier}); })); - describe('showEntryReport()', () => { - it('should open a new window showing a delivery note PDF document', () => { - jest.spyOn(controller.vnReport, 'show'); - - window.open = jasmine.createSpy('open'); - const params = { - clientId: controller.vnConfig.storage.currentUserWorkerId, - entryId: entry.id - }; - controller.showEntryReport(); - - expect(controller.vnReport.show).toHaveBeenCalledWith('entry-order', params); - }); - }); - describe('loadData()', () => { - it('should perform ask for the entry', () => { - let query = `Entries/${entry.id}`; + it('should perform ask for the supplier', () => { + const filter = { + fields: [ + 'id', + 'name', + 'nickname', + 'nif', + 'payMethodFk', + 'payDemFk', + 'payDay', + 'isActive', + 'isOfficial', + 'account' + ], + include: [ + { + relation: 'payMethod', + scope: { + fields: ['id', 'name'] + } + }, + { + relation: 'payDem', + scope: { + fields: ['id', 'payDem'] + } + }, + { + relation: 'client', + scope: { + fields: ['id', 'fi'] + } + } + ] + }; + const serializedParams = $httpParamSerializer({filter}); + let query = `Suppliers/${controller.supplier.id}?${serializedParams}`; jest.spyOn(controller, 'getData'); - $httpBackend.expectGET(query).respond(); + $httpBackend.expect('GET', query).respond({id: 1}); controller.loadData(); $httpBackend.flush(); expect(controller.getData).toHaveBeenCalledTimes(1); - expect(controller.getData).toHaveBeenCalledWith(query, jasmine.any(Object)); }); }); }); diff --git a/modules/supplier/front/descriptor/locale/es.yml b/modules/supplier/front/descriptor/locale/es.yml index ac3c202a0..f803a21e1 100644 --- a/modules/supplier/front/descriptor/locale/es.yml +++ b/modules/supplier/front/descriptor/locale/es.yml @@ -1 +1,3 @@ -Tax number: NIF / CIF \ No newline at end of file +Tax number: NIF / CIF +All entries with current supplier: Todas las entradas con el proveedor actual +Go to client: Ir al cliente \ No newline at end of file diff --git a/modules/supplier/front/main/index.html b/modules/supplier/front/main/index.html index 5df346690..7d7f92cf0 100644 --- a/modules/supplier/front/main/index.html +++ b/modules/supplier/front/main/index.html @@ -8,7 +8,7 @@ diff --git a/modules/supplier/front/search-panel/index.html b/modules/supplier/front/search-panel/index.html index f5b3962e0..161c8a98c 100644 --- a/modules/supplier/front/search-panel/index.html +++ b/modules/supplier/front/search-panel/index.html @@ -5,7 +5,7 @@ vn-one label="General search" ng-model="filter.search" - info="Search suppliers by id name or alias" + info="Search suppliers by id, name or alias" vn-focus> diff --git a/modules/supplier/front/search-panel/locale/es.yml b/modules/supplier/front/search-panel/locale/es.yml index 4d2cb82f3..964e7a8d9 100644 --- a/modules/supplier/front/search-panel/locale/es.yml +++ b/modules/supplier/front/search-panel/locale/es.yml @@ -1,3 +1,4 @@ Province: Provincia Country: País -Tax number: Nif \ No newline at end of file +Tax number: Nif +Search suppliers by id, name or alias: Busca proveedores por el id, el nombre o el alias \ No newline at end of file diff --git a/modules/supplier/front/summary/index.html b/modules/supplier/front/summary/index.html index 0df489bfb..c22a32f91 100644 --- a/modules/supplier/front/summary/index.html +++ b/modules/supplier/front/summary/index.html @@ -6,7 +6,7 @@ -
- { + return this.$http.get(`Suppliers/${this.supplier.id}/getSummary`).then(response => { this.summary = response.data; }); } diff --git a/modules/supplier/front/summary/index.spec.js b/modules/supplier/front/summary/index.spec.js index 05491267c..aa44cd14f 100644 --- a/modules/supplier/front/summary/index.spec.js +++ b/modules/supplier/front/summary/index.spec.js @@ -1,51 +1,31 @@ import './index'; -describe('Client', () => { - describe('Component vnClientSummary', () => { +describe('Supplier', () => { + describe('Component vnSupplierSummary', () => { let controller; let $httpBackend; let $scope; - beforeEach(ngModule('client')); + beforeEach(ngModule('supplier')); beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => { $httpBackend = _$httpBackend_; $scope = $rootScope.$new(); - const $element = angular.element(''); - controller = $componentController('vnClientSummary', {$element, $scope}); - controller.client = {id: 101}; + const $element = angular.element(''); + controller = $componentController('vnSupplierSummary', {$element, $scope}); })); - describe('$onChanges()', () => { - it('should perform a GET query and then define the summary property', () => { - let res = {name: 'Superman', classifications: []}; + describe('getSummary()', () => { + it('should perform a get asking for the supplier data', () => { + controller.supplier = {id: 1}; - jest.spyOn(controller, 'sumRisk').mockReturnThis(); - $httpBackend.expect('GET', `Clients/101/summary`).respond(200, res); + const query = `Suppliers/${controller.supplier.id}/getSummary`; - controller.$onChanges(); + $httpBackend.expectGET(query).respond({id: 1}); + controller.getSummary(); $httpBackend.flush(); - expect(controller.summary).toBeDefined(); - expect(controller.summary.name).toEqual('Superman'); - }); - }); - - describe('sumRisk()', () => { - it('should sum property amount of an array', () => { - controller.summary = { - clientRisks: [{ - companyFk: 442, - amount: 100 - }, - { - companyFk: 567, - amount: 200 - }]}; - - let result = controller.sumRisk(); - - expect(result).toEqual(300); + expect(controller.summary).toEqual({id: 1}); }); }); }); diff --git a/modules/supplier/front/summary/locale/es.yml b/modules/supplier/front/summary/locale/es.yml new file mode 100644 index 000000000..b367ebb35 --- /dev/null +++ b/modules/supplier/front/summary/locale/es.yml @@ -0,0 +1,5 @@ +Is official: Es oficial +Country: País +Tax number: Nif +Search suppliers by id, name or alias: Busca proveedores por el id, el nombre o el alias +Is Farmer: Es agrícola \ No newline at end of file From d06d935c70239d6ef40d1be270f2d6b5a2f650d0 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Mon, 26 Oct 2020 08:43:08 +0100 Subject: [PATCH 05/10] fix client fiscal data --- modules/client/front/fiscal-data/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/client/front/fiscal-data/index.js b/modules/client/front/fiscal-data/index.js index 6fb88140c..58b22537c 100644 --- a/modules/client/front/fiscal-data/index.js +++ b/modules/client/front/fiscal-data/index.js @@ -35,7 +35,7 @@ export default class Controller extends Section { const $t = this.$translate.instant; const filter = encodeURIComponent(JSON.stringify(filterObj)); - const query = `Clients/find?filter=${filter}`; + const query = `Clients/findOne?filter=${filter}`; this.$http.get(query).then(res => { const params = {clientId: res.data.id}; const question = $t('Found a client with this phone or email', params, null, null, 'sanitizeParameters'); From 665d46dec313c62df841bf6e3a888387f3b78888 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Tue, 27 Oct 2020 12:44:46 +0100 Subject: [PATCH 06/10] fix translate --- modules/supplier/front/descriptor/index.html | 2 +- modules/supplier/front/descriptor/locale/es.yml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html index 470d984f2..405f2da21 100644 --- a/modules/supplier/front/descriptor/index.html +++ b/modules/supplier/front/descriptor/index.html @@ -29,7 +29,7 @@ ng-class="{bright: $ctrl.supplier.isActive == false}"> diff --git a/modules/supplier/front/descriptor/locale/es.yml b/modules/supplier/front/descriptor/locale/es.yml index f803a21e1..be1f4e9fe 100644 --- a/modules/supplier/front/descriptor/locale/es.yml +++ b/modules/supplier/front/descriptor/locale/es.yml @@ -1,3 +1,5 @@ Tax number: NIF / CIF All entries with current supplier: Todas las entradas con el proveedor actual -Go to client: Ir al cliente \ No newline at end of file +Go to client: Ir al cliente +Supplier official: Proveedor oficial +Supplier inactive: Proveedor inactivo \ No newline at end of file From 109fcb3ca4fe68af87af466e14c20153e071659d Mon Sep 17 00:00:00 2001 From: joan Date: Wed, 28 Oct 2020 09:57:39 +0100 Subject: [PATCH 07/10] 2532 - Added icon taxDataChecked on ticket index --- modules/ticket/front/index/index.html | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/ticket/front/index/index.html b/modules/ticket/front/index/index.html index 902d1f5a4..6d63ccc81 100644 --- a/modules/ticket/front/index/index.html +++ b/modules/ticket/front/index/index.html @@ -14,6 +14,7 @@ + Id Salesperson Date @@ -40,27 +41,36 @@ + + + + From a4c57d7618292dfce2dbc665c18b1e7113ba89b6 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Wed, 28 Oct 2020 12:29:50 +0100 Subject: [PATCH 08/10] e2e path for supplier summary and descriptor --- e2e/helpers/selectors.js | 11 +++ .../01_summary_and_descriptor.spec.js | 84 +++++++++++++++++++ gulpfile.js | 3 + modules/supplier/front/summary/index.html | 2 +- 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 e2e/paths/13-supplier/01_summary_and_descriptor.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 8cea46964..06235cbfd 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -901,5 +901,16 @@ export default { newEntryTravel: 'vn-entry-create vn-autocomplete[ng-model="$ctrl.entry.travelFk"]', newEntryCompany: 'vn-entry-create vn-autocomplete[ng-model="$ctrl.entry.companyFk"]', saveNewEntry: 'vn-entry-create button[type="submit"]' + }, + supplierSummary: { + header: 'vn-supplier-summary > vn-card > h5', + basicDataId: 'vn-supplier-summary vn-label-value[label="Id"]', + fiscalAddressTaxNumber: 'vn-supplier-summary vn-label-value[label="Tax number"]', + billingDataPayMethod: 'vn-supplier-summary vn-label-value[label="Pay method"]' + }, + supplierDescriptor: { + alias: 'vn-supplier-descriptor vn-label-value[label="Alias"]', + clientButton: 'vn-supplier-descriptor vn-icon[icon="person"]', + entriesButton: 'vn-supplier-descriptor vn-icon[icon="icon-entry"]', } }; diff --git a/e2e/paths/13-supplier/01_summary_and_descriptor.spec.js b/e2e/paths/13-supplier/01_summary_and_descriptor.spec.js new file mode 100644 index 000000000..953a9ee28 --- /dev/null +++ b/e2e/paths/13-supplier/01_summary_and_descriptor.spec.js @@ -0,0 +1,84 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('Supplier descriptor path', () => { + let browser; + let page; + + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('administrative', 'supplier'); + await page.accessToSearchResult('1'); + }); + + afterAll(async() => { + await browser.close(); + }); + + // summary + it('should reach the second entry summary section', async() => { + await page.waitForState('supplier.card.summary'); + }); + + it(`should confirm there's data on the summary header`, async() => { + const result = await page.waitToGetProperty(selectors.supplierSummary.header, 'innerText'); + + expect(result).toContain('Plants SL - 1'); + }); + + it(`should confirm there's data on the summary basic data`, async() => { + const result = await page.waitToGetProperty(selectors.supplierSummary.basicDataId, 'innerText'); + + expect(result).toContain('Id 1'); + }); + + it(`should confirm there's data on the summary fiscal address`, async() => { + const result = await page.waitToGetProperty(selectors.supplierSummary.fiscalAddressTaxNumber, 'innerText'); + + expect(result).toContain('Tax number 06089160W'); + }); + + it(`should confirm there's data on the summary fiscal pay method`, async() => { + const result = await page.waitToGetProperty(selectors.supplierSummary.billingDataPayMethod, 'innerText'); + + expect(result).toContain('Pay method PayMethod one'); + }); + + // descriptor + it(`should confirm there's data on the descriptor`, async() => { + const result = await page.waitToGetProperty(selectors.supplierDescriptor.alias, 'innerText'); + + expect(result).toContain('Plants nick'); + }); + + it(`should navigate to the supplier's client summary using the icon client button`, async() => { + await page.waitToClick(selectors.supplierDescriptor.clientButton); + await page.waitForState('client.card.summary'); + }); + + it(`should navigate back to the supplier`, async() => { + await page.waitToClick(selectors.globalItems.homeButton); + await page.waitForState('home'); + await page.selectModule('supplier'); + await page.accessToSearchResult('1'); + await page.waitForState('supplier.card.summary'); + }); + + it(`should navigate to the supplier's entries`, async() => { + await page.waitToClick(selectors.supplierDescriptor.entriesButton); + await page.waitForState('entry.index'); + }); + + it(`should navigate back to suppliers but a different one this time`, async() => { + await page.waitToClick(selectors.globalItems.homeButton); + await page.waitForState('home'); + await page.selectModule('supplier'); + await page.accessToSearchResult('2'); + await page.waitForState('supplier.card.summary'); + }); + + it(`should check the client button isn't present since this supplier should not be a client`, async() => { + await page.waitForSelector(selectors.supplierDescriptor.clientButton, {hidden: true}); + }); +}); diff --git a/gulpfile.js b/gulpfile.js index 6bd2b3542..61459c3fd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -162,6 +162,9 @@ function e2eSingleRun() { `${__dirname}/e2e/paths/08*/*[sS]pec.js`, `${__dirname}/e2e/paths/09*/*[sS]pec.js`, `${__dirname}/e2e/paths/10*/*[sS]pec.js`, + `${__dirname}/e2e/paths/11*/*[sS]pec.js`, + `${__dirname}/e2e/paths/12*/*[sS]pec.js`, + `${__dirname}/e2e/paths/13*/*[sS]pec.js`, `${__dirname}/e2e/paths/**/*[sS]pec.js` ]; diff --git a/modules/supplier/front/summary/index.html b/modules/supplier/front/summary/index.html index c22a32f91..be6a027a6 100644 --- a/modules/supplier/front/summary/index.html +++ b/modules/supplier/front/summary/index.html @@ -28,7 +28,7 @@ - Date: Thu, 29 Oct 2020 07:44:04 +0100 Subject: [PATCH 09/10] cr changes --- modules/supplier/back/methods/supplier/filter.js | 1 - .../supplier/back/methods/supplier/specs/getSummary.spec.js | 6 +++--- modules/supplier/front/descriptor/index.html | 4 ++-- modules/supplier/front/descriptor/locale/es.yml | 4 ++-- modules/supplier/front/search-panel/locale/es.yml | 4 ++-- modules/supplier/front/summary/locale/es.yml | 4 ++-- modules/supplier/front/summary/style.scss | 2 +- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/supplier/back/methods/supplier/filter.js b/modules/supplier/back/methods/supplier/filter.js index b1e7d3884..3500afacd 100644 --- a/modules/supplier/back/methods/supplier/filter.js +++ b/modules/supplier/back/methods/supplier/filter.js @@ -65,7 +65,6 @@ module.exports = Self => { {'s.name': {like: `%${value}%`}}, {'s.nickname': {like: `%${value}%`}} ]}; - // return {'s.id': value}; case 'nickname': param = `s.${param}`; return {[param]: {like: `%${value}%`}}; diff --git a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js index 73feba9ad..7179e2d77 100644 --- a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js +++ b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js @@ -7,9 +7,11 @@ describe('Supplier getSummary()', () => { expect(supplier.id).toEqual(1); expect(supplier.name).toEqual('Plants SL'); expect(supplier.nif).toEqual('06089160W'); + expect(supplier.account).toEqual(4000000001); + expect(supplier.payDay).toEqual(15); }); - it(`should return a summary object containing it's supplier country`, async() => { + it(`should return a summary object containing it's supplier country relation`, async() => { const supplier = await app.models.Supplier.getSummary(1); const country = supplier.country(); @@ -21,8 +23,6 @@ describe('Supplier getSummary()', () => { const supplier = await app.models.Supplier.getSummary(1); const payMethod = supplier.payMethod(); - expect(supplier.account).toEqual(4000000001); - expect(supplier.payDay).toEqual(15); expect(payMethod.name).toEqual('PayMethod one'); }); }); diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html index 405f2da21..5e7225e1c 100644 --- a/modules/supplier/front/descriptor/index.html +++ b/modules/supplier/front/descriptor/index.html @@ -24,12 +24,12 @@
diff --git a/modules/supplier/front/descriptor/locale/es.yml b/modules/supplier/front/descriptor/locale/es.yml index be1f4e9fe..c92a917c7 100644 --- a/modules/supplier/front/descriptor/locale/es.yml +++ b/modules/supplier/front/descriptor/locale/es.yml @@ -1,5 +1,5 @@ Tax number: NIF / CIF All entries with current supplier: Todas las entradas con el proveedor actual Go to client: Ir al cliente -Supplier official: Proveedor oficial -Supplier inactive: Proveedor inactivo \ No newline at end of file +Official supplier: Proveedor oficial +Inactive supplier: Proveedor inactivo \ No newline at end of file diff --git a/modules/supplier/front/search-panel/locale/es.yml b/modules/supplier/front/search-panel/locale/es.yml index 964e7a8d9..77253a4ef 100644 --- a/modules/supplier/front/search-panel/locale/es.yml +++ b/modules/supplier/front/search-panel/locale/es.yml @@ -1,4 +1,4 @@ Province: Provincia Country: País -Tax number: Nif -Search suppliers by id, name or alias: Busca proveedores por el id, el nombre o el alias \ No newline at end of file +Tax number: NIF / CIF +Search suppliers by id, name or alias: Busca proveedores por id, nombre o alias \ No newline at end of file diff --git a/modules/supplier/front/summary/locale/es.yml b/modules/supplier/front/summary/locale/es.yml index b367ebb35..abdb4d1c7 100644 --- a/modules/supplier/front/summary/locale/es.yml +++ b/modules/supplier/front/summary/locale/es.yml @@ -1,5 +1,5 @@ Is official: Es oficial Country: País -Tax number: Nif -Search suppliers by id, name or alias: Busca proveedores por el id, el nombre o el alias +Tax number: NIF / CIF +Search suppliers by id, name or alias: Busca proveedores por id, nombre o alias Is Farmer: Es agrícola \ No newline at end of file diff --git a/modules/supplier/front/summary/style.scss b/modules/supplier/front/summary/style.scss index 1520659d2..1eb6b2323 100644 --- a/modules/supplier/front/summary/style.scss +++ b/modules/supplier/front/summary/style.scss @@ -2,6 +2,6 @@ vn-client-summary { .alert span { - color: $color-alert !important + color: $color-alert } } \ No newline at end of file From 403d4b9118bb3f23eae84510cb6ed33448e6a388 Mon Sep 17 00:00:00 2001 From: Bernat Exposito Domenech Date: Thu, 29 Oct 2020 08:17:06 +0100 Subject: [PATCH 10/10] cr changes --- modules/supplier/back/methods/supplier/specs/getSummary.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js index 7179e2d77..42e89afd4 100644 --- a/modules/supplier/back/methods/supplier/specs/getSummary.spec.js +++ b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js @@ -19,7 +19,7 @@ describe('Supplier getSummary()', () => { expect(country.code).toEqual('ES'); }); - it(`should return a summary object containing it's billing data`, async() => { + it(`should return a summary object containing it's billing data relation`, async() => { const supplier = await app.models.Supplier.getSummary(1); const payMethod = supplier.payMethod();