diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index b995863ba..cc3f2f689 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`, `payDay`) 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, 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/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/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/claim/back/methods/claim/specs/updateClaim.spec.js b/modules/claim/back/methods/claim/specs/updateClaim.spec.js index 7588595bc..7ce6a4d3c 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/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/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/filter.js b/modules/supplier/back/methods/supplier/filter.js index 3eddda294..3500afacd 100644 --- a/modules/supplier/back/methods/supplier/filter.js +++ b/modules/supplier/back/methods/supplier/filter.js @@ -60,7 +60,11 @@ 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}%`}} + ]}; 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 new file mode 100644 index 000000000..24a592acf --- /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', 'country', '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/methods/supplier/specs/getSummary.spec.js b/modules/supplier/back/methods/supplier/specs/getSummary.spec.js new file mode 100644 index 000000000..42e89afd4 --- /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 a summary object containing data from one supplier', async() => { + const supplier = await app.models.Supplier.getSummary(1); + + 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 relation`, async() => { + const supplier = await app.models.Supplier.getSummary(1); + const country = supplier.country(); + + expect(country.id).toEqual(1); + expect(country.code).toEqual('ES'); + }); + + 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(); + + expect(payMethod.name).toEqual('PayMethod one'); + }); +}); 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..b4f5b5318 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,41 @@ "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" + }, + "client": { + "type": "belongsTo", + "model": "Client", + "foreignKey": "nif", + "primaryKey": "fi" + } + }, "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..613b99cc9 --- /dev/null +++ b/modules/supplier/front/card/index.js @@ -0,0 +1,48 @@ +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'] + } + }, + { + relation: 'client', + scope: { + fields: ['id', 'fi'] + } + } + ] + }; + 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..5e7225e1c --- /dev/null +++ b/modules/supplier/front/descriptor/index.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/supplier/front/descriptor/index.js b/modules/supplier/front/descriptor/index.js new file mode 100644 index 000000000..42513a56a --- /dev/null +++ b/modules/supplier/front/descriptor/index.js @@ -0,0 +1,79 @@ +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; + } + + 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 + }); + } + + loadData() { + 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'] + } + } + ] + }; + + return this.getData(`Suppliers/${this.supplier.id}`, {filter}) + .then(res => this.supplier = 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..58f0fac86 --- /dev/null +++ b/modules/supplier/front/descriptor/index.spec.js @@ -0,0 +1,64 @@ +import './index.js'; + +describe('Supplier Component vnSupplierDescriptor', () => { + let $httpBackend; + let controller; + let $httpParamSerializer; + const supplier = {id: 1}; + + beforeEach(ngModule('supplier')); + + beforeEach(inject(($componentController, _$httpBackend_, _$httpParamSerializer_) => { + $httpBackend = _$httpBackend_; + $httpParamSerializer = _$httpParamSerializer_; + controller = $componentController('vnSupplierDescriptor', {$element: null}, {supplier}); + })); + + describe('loadData()', () => { + 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.expect('GET', query).respond({id: 1}); + controller.loadData(); + $httpBackend.flush(); + + expect(controller.getData).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/modules/supplier/front/descriptor/locale/es.yml b/modules/supplier/front/descriptor/locale/es.yml new file mode 100644 index 000000000..c92a917c7 --- /dev/null +++ b/modules/supplier/front/descriptor/locale/es.yml @@ -0,0 +1,5 @@ +Tax number: NIF / CIF +All entries with current supplier: Todas las entradas con el proveedor actual +Go to client: Ir al cliente +Official supplier: Proveedor oficial +Inactive supplier: Proveedor inactivo \ 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/main/index.html b/modules/supplier/front/main/index.html index 2278087c2..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/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/search-panel/index.html b/modules/supplier/front/search-panel/index.html index 5ad5e6e3a..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" + 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..77253a4ef 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 / 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/index.html b/modules/supplier/front/summary/index.html new file mode 100644 index 000000000..be6a027a6 --- /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..2fe289c49 --- /dev/null +++ b/modules/supplier/front/summary/index.js @@ -0,0 +1,26 @@ +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() { + return this.$http.get(`Suppliers/${this.supplier.id}/getSummary`).then(response => { + this.summary = response.data; + }); + } +} + +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..aa44cd14f --- /dev/null +++ b/modules/supplier/front/summary/index.spec.js @@ -0,0 +1,32 @@ +import './index'; + +describe('Supplier', () => { + describe('Component vnSupplierSummary', () => { + let controller; + let $httpBackend; + let $scope; + + beforeEach(ngModule('supplier')); + + beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => { + $httpBackend = _$httpBackend_; + $scope = $rootScope.$new(); + const $element = angular.element(''); + controller = $componentController('vnSupplierSummary', {$element, $scope}); + })); + + describe('getSummary()', () => { + it('should perform a get asking for the supplier data', () => { + controller.supplier = {id: 1}; + + const query = `Suppliers/${controller.supplier.id}/getSummary`; + + $httpBackend.expectGET(query).respond({id: 1}); + controller.getSummary(); + $httpBackend.flush(); + + 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..abdb4d1c7 --- /dev/null +++ b/modules/supplier/front/summary/locale/es.yml @@ -0,0 +1,5 @@ +Is official: Es oficial +Country: País +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 new file mode 100644 index 000000000..1eb6b2323 --- /dev/null +++ b/modules/supplier/front/summary/style.scss @@ -0,0 +1,7 @@ +@import "variables"; + +vn-client-summary { + .alert span { + color: $color-alert + } +} \ No newline at end of file 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 @@ + + + +