From a3382300f97d207ed6fef2cf3ef0e699695a81e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20S=C3=A1nchez?= Date: Wed, 2 Sep 2020 14:08:56 +0200 Subject: [PATCH 1/6] 2402 - Added create entry section --- modules/entry/back/models/entry.json | 2 +- modules/entry/front/create/index.html | 54 ++++++++++++++++++++++++ modules/entry/front/create/index.js | 42 ++++++++++++++++++ modules/entry/front/create/locale/es.yml | 1 + modules/entry/front/index.js | 1 + modules/entry/front/index/index.html | 14 +++++- modules/entry/front/routes.json | 6 +++ modules/item/back/models/supplier.json | 4 +- modules/route/front/index/index.html | 3 +- modules/ticket/front/index/index.html | 3 +- 10 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 modules/entry/front/create/index.html create mode 100644 modules/entry/front/create/index.js create mode 100644 modules/entry/front/create/locale/es.yml diff --git a/modules/entry/back/models/entry.json b/modules/entry/back/models/entry.json index d3f149680f..2739156ea5 100644 --- a/modules/entry/back/models/entry.json +++ b/modules/entry/back/models/entry.json @@ -1,6 +1,6 @@ { "name": "Entry", - "base": "VnModel", + "base": "Loggable", "log": { "model":"EntryLog" }, diff --git a/modules/entry/front/create/index.html b/modules/entry/front/create/index.html new file mode 100644 index 0000000000..3bc086f4e9 --- /dev/null +++ b/modules/entry/front/create/index.html @@ -0,0 +1,54 @@ + + + +
+ + + + + {{::id}} - {{::nickname}} + + + + + + + {{::agencyModeName}} - {{::warehouseInName}} ({{::shipped | date: 'dd/MM/yyyy'}}) → + {{::warehouseOutName}} ({{::landed | date: 'dd/MM/yyyy'}}) + + + + + + + + + + + + +
diff --git a/modules/entry/front/create/index.js b/modules/entry/front/create/index.js new file mode 100644 index 0000000000..b94cbe2ca9 --- /dev/null +++ b/modules/entry/front/create/index.js @@ -0,0 +1,42 @@ +import ngModule from '../module'; +import Section from 'salix/components/section'; + +export default class Controller extends Section { + constructor($element, $) { + super($element, $); + + this.entry = { + companyFk: this.vnConfig.companyFk + }; + + if (this.$params && this.$params.supplierFk) + this.entry.supplierFk = parseInt(this.$params.supplierFk); + if (this.$params && this.$params.travelFk) + this.entry.travelFk = parseInt(this.$params.travelFk); + if (this.$params && this.$params.companyFk) + this.entry.companyFk = parseInt(this.$params.companyFk); + } + + onSubmit() { + this.$.watcher.submit().then( + res => this.$state.go('entry.card.basicData', {id: res.data.id}) + ); + } + + searchFunction($search) { + return {or: [ + {'am.name': {like: `%${$search}%`}}, + {'win.name': {like: `%${$search}%`}}, + {'wout.name': {like: `%${$search}%`}}, + {'t.shipped': new Date($search)}, + {'t.landed': new Date($search)} + ]}; + } +} + +Controller.$inject = ['$element', '$scope']; + +ngModule.vnComponent('vnEntryCreate', { + template: require('./index.html'), + controller: Controller +}); diff --git a/modules/entry/front/create/locale/es.yml b/modules/entry/front/create/locale/es.yml new file mode 100644 index 0000000000..bb20b313c7 --- /dev/null +++ b/modules/entry/front/create/locale/es.yml @@ -0,0 +1 @@ +New entry: Nueva entrada \ No newline at end of file diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js index f0c845b149..9352da6933 100644 --- a/modules/entry/front/index.js +++ b/modules/entry/front/index.js @@ -2,6 +2,7 @@ export * from './module'; import './main'; import './index/'; +import './create'; import './search-panel'; import './descriptor'; import './card'; diff --git a/modules/entry/front/index/index.html b/modules/entry/front/index/index.html index e3d174cbfe..8a28888b09 100644 --- a/modules/entry/front/index/index.html +++ b/modules/entry/front/index/index.html @@ -69,4 +69,16 @@ - \ No newline at end of file + + +
+ + + + + + +
\ No newline at end of file diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json index 084ff7bb22..e4f3b6a3f3 100644 --- a/modules/entry/front/routes.json +++ b/modules/entry/front/routes.json @@ -25,6 +25,12 @@ "state": "entry.index", "component": "vn-entry-index", "description": "Entries" + }, { + "url": "/create?supplierFk&travelFk&companyFk", + "state": "entry.create", + "component": "vn-entry-create", + "description": "New entry", + "acl": ["buyer"] }, { "url": "/:id", "state": "entry.card", diff --git a/modules/item/back/models/supplier.json b/modules/item/back/models/supplier.json index bc13e79b95..41fc9c45cc 100644 --- a/modules/item/back/models/supplier.json +++ b/modules/item/back/models/supplier.json @@ -33,13 +33,13 @@ "retAccount": { "type": "Number" }, - "commision": { + "commission": { "type": "Boolean" }, "created": { "type": "Date" }, - "poscodeFk": { + "postcodeFk": { "type": "Number" }, "isActive": { diff --git a/modules/route/front/index/index.html b/modules/route/front/index/index.html index 7258018f10..76938d9cf9 100644 --- a/modules/route/front/index/index.html +++ b/modules/route/front/index/index.html @@ -79,10 +79,9 @@ tooltip-position="left"> - + diff --git a/modules/ticket/front/index/index.html b/modules/ticket/front/index/index.html index b0aff5b911..2c598ca031 100644 --- a/modules/ticket/front/index/index.html +++ b/modules/ticket/front/index/index.html @@ -143,10 +143,9 @@ vn-tooltip="Payment on account..." tooltip-position="left"> - + From 5fa9489f9a00d1edfb936cbc3f562f0abeddd198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20S=C3=A1nchez?= Date: Thu, 3 Sep 2020 08:09:37 +0200 Subject: [PATCH 2/6] Added fields as required, added info icon --- modules/entry/back/models/entry.json | 12 ++++++++++++ modules/entry/front/create/index.html | 15 +++++++++++---- modules/entry/front/create/index.js | 1 + modules/entry/front/create/locale/es.yml | 3 ++- modules/entry/front/create/style.scss | 10 ++++++++++ 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 modules/entry/front/create/style.scss diff --git a/modules/entry/back/models/entry.json b/modules/entry/back/models/entry.json index 2739156ea5..a67641b0c5 100644 --- a/modules/entry/back/models/entry.json +++ b/modules/entry/back/models/entry.json @@ -62,6 +62,18 @@ }, "loadPriority": { "type": "number" + }, + "supplierFk": { + "type": "number", + "required": true + }, + "travelFk": { + "type": "number", + "required": true + }, + "companyFk": { + "type": "number", + "required": true } }, "relations": { diff --git a/modules/entry/front/create/index.html b/modules/entry/front/create/index.html index 3bc086f4e9..262e904d79 100644 --- a/modules/entry/front/create/index.html +++ b/modules/entry/front/create/index.html @@ -7,6 +7,10 @@
+ + + label="Supplier" + required="true"> {{::id}} - {{::nickname}} - + label="Travel" + required="true"> {{::agencyModeName}} - {{::warehouseInName}} ({{::shipped | date: 'dd/MM/yyyy'}}) → {{::warehouseOutName}} ({{::landed | date: 'dd/MM/yyyy'}}) @@ -43,7 +49,8 @@ label="Company" show-field="code" value-field="id" - ng-model="$ctrl.entry.companyFk"> + ng-model="$ctrl.entry.companyFk" + required="true"> diff --git a/modules/entry/front/create/index.js b/modules/entry/front/create/index.js index b94cbe2ca9..ec022afeda 100644 --- a/modules/entry/front/create/index.js +++ b/modules/entry/front/create/index.js @@ -1,5 +1,6 @@ import ngModule from '../module'; import Section from 'salix/components/section'; +import './style.scss'; export default class Controller extends Section { constructor($element, $) { diff --git a/modules/entry/front/create/locale/es.yml b/modules/entry/front/create/locale/es.yml index bb20b313c7..aa269ed151 100644 --- a/modules/entry/front/create/locale/es.yml +++ b/modules/entry/front/create/locale/es.yml @@ -1 +1,2 @@ -New entry: Nueva entrada \ No newline at end of file +New entry: Nueva entrada +Required fields (*): Campos requeridos (*) \ No newline at end of file diff --git a/modules/entry/front/create/style.scss b/modules/entry/front/create/style.scss new file mode 100644 index 0000000000..2dc52b1ff3 --- /dev/null +++ b/modules/entry/front/create/style.scss @@ -0,0 +1,10 @@ +vn-entry-create { + vn-card { + position: relative + } + vn-icon[icon="info"] { + position: absolute; + top: 16px; + right: 16px + } +} \ No newline at end of file From 5b4a3cd3709f8ee9920f926b347e973d95139b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20S=C3=A1nchez?= Date: Thu, 3 Sep 2020 16:52:35 +0200 Subject: [PATCH 3/6] Travel autocomplete fix --- modules/entry/front/create/index.html | 4 ++-- modules/entry/front/create/index.js | 10 +++++----- modules/travel/back/methods/travel/filter.js | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/entry/front/create/index.html b/modules/entry/front/create/index.html index 262e904d79..77fd92d55b 100644 --- a/modules/entry/front/create/index.html +++ b/modules/entry/front/create/index.html @@ -33,8 +33,8 @@ ng-model="$ctrl.entry.travelFk" url="Travels/filter" search-function="$ctrl.searchFunction($search)" - value-field="t.id" - order="t.id" + value-field="id" + order="id" label="Travel" required="true"> diff --git a/modules/entry/front/create/index.js b/modules/entry/front/create/index.js index ec022afeda..5c61730f97 100644 --- a/modules/entry/front/create/index.js +++ b/modules/entry/front/create/index.js @@ -26,11 +26,11 @@ export default class Controller extends Section { searchFunction($search) { return {or: [ - {'am.name': {like: `%${$search}%`}}, - {'win.name': {like: `%${$search}%`}}, - {'wout.name': {like: `%${$search}%`}}, - {'t.shipped': new Date($search)}, - {'t.landed': new Date($search)} + {'agencyModeName': {like: `%${$search}%`}}, + {'warehouseInName': {like: `%${$search}%`}}, + {'warehouseOutName': {like: `%${$search}%`}}, + {'shipped': new Date($search)}, + {'landed': new Date($search)} ]}; } } diff --git a/modules/travel/back/methods/travel/filter.js b/modules/travel/back/methods/travel/filter.js index 0cfafd7bac..024448bfe4 100644 --- a/modules/travel/back/methods/travel/filter.js +++ b/modules/travel/back/methods/travel/filter.js @@ -112,7 +112,8 @@ module.exports = Self => { let stmts = []; let stmt; stmt = new ParameterizedSQL( - `SELECT + `SELECT * FROM + (SELECT t.id, t.shipped, t.landed, @@ -132,7 +133,7 @@ module.exports = Self => { FROM vn.travel t JOIN vn.agencyMode am ON am.id = t.agencyFk JOIN vn.warehouse win ON win.id = t.warehouseInFk - JOIN vn.warehouse wout ON wout.id = t.warehouseOutFk` + JOIN vn.warehouse wout ON wout.id = t.warehouseOutFk) AS t` ); stmt.merge(conn.makeSuffix(filter)); From d1e8bd894fbc221836620c45915755e71cc8f6d2 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Thu, 3 Sep 2020 17:30:24 +0200 Subject: [PATCH 4/6] e2e path as far as it can go atm --- e2e/helpers/selectors.js | 7 ++++++ e2e/paths/12-entry/04_create.spec.js | 37 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 e2e/paths/12-entry/04_create.spec.js diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index fe93e8b411..c1e13d8891 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -909,5 +909,12 @@ export default { newValueInput: 'vn-textfield[ng-model="$ctrl.editedColumn.newValue"]', latestBuysSectionButton: 'a[ui-sref="entry.latestBuys"]', acceptEditBuysDialog: 'button[response="accept"]' + }, + entryIndex: { + createEntryButton: 'vn-entry-index vn-button[icon="add"]', + newEntrySupplier: 'vn-entry-create vn-autocomplete[ng-model="$ctrl.entry.supplierFk"]', + 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"]' } }; diff --git a/e2e/paths/12-entry/04_create.spec.js b/e2e/paths/12-entry/04_create.spec.js new file mode 100644 index 0000000000..d58326ecf8 --- /dev/null +++ b/e2e/paths/12-entry/04_create.spec.js @@ -0,0 +1,37 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +// #2434 [E2E] entry.create +// esto explota por ahora al guardar con el error: +// Possibly unhandled rejection: +// {"$id":0,"type":4,"message":"This transition is invalid","detail":"Could not resolve 'entry.card.basicData' from state 'entry.create'"} +xdescribe('Entry create path', () => { + let browser; + let page; + + beforeAll(async() => { + browser = await getBrowser(); + page = browser.page; + await page.loginAndModule('buyer', 'entry'); + }); + + afterAll(async() => { + await browser.close(); + }); + + it('should click the create entry button to open the form', async() => { + await page.waitToClick(selectors.entryIndex.createEntryButton); + await page.waitForState('entry.create'); + }); + + it('should fill the form to create a valid entry', async() => { + await page.autocompleteSearch(selectors.entryIndex.newEntrySupplier, '2'); + await page.autocompleteSearch(selectors.entryIndex.newEntryTravel, 'Warehouse Three'); + await page.autocompleteSearch(selectors.entryIndex.newEntryCompany, 'ORN'); + await page.waitToClick(selectors.entryIndex.saveNewEntry); + }); + + it('should check the new state is a summary or a basicData for a created entry', async() => { + expect(true).toBe(false); // to flag this isn't quite finished yet. + }); +}); From f8bb4d86fbfc4fa3f65b4df99f8458ea87623429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20S=C3=A1nchez?= Date: Mon, 7 Sep 2020 08:15:43 +0200 Subject: [PATCH 5/6] State fix & supplier search fix --- modules/entry/front/basic-data/index.html | 0 modules/entry/front/basic-data/index.js | 10 ++++++++++ modules/entry/front/create/index.html | 2 +- modules/entry/front/routes.json | 9 +++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 modules/entry/front/basic-data/index.html create mode 100644 modules/entry/front/basic-data/index.js diff --git a/modules/entry/front/basic-data/index.html b/modules/entry/front/basic-data/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/entry/front/basic-data/index.js b/modules/entry/front/basic-data/index.js new file mode 100644 index 0000000000..141a365fa3 --- /dev/null +++ b/modules/entry/front/basic-data/index.js @@ -0,0 +1,10 @@ +import ngModule from '../module'; +import Section from 'salix/components/section'; + +ngModule.vnComponent('vnEntryBasicData', { + template: require('./index.html'), + controller: Section, + bindings: { + entry: '<' + } +}); diff --git a/modules/entry/front/create/index.html b/modules/entry/front/create/index.html index 77fd92d55b..7b5dfc928d 100644 --- a/modules/entry/front/create/index.html +++ b/modules/entry/front/create/index.html @@ -17,7 +17,7 @@ ng-model="$ctrl.entry.supplierFk" url="Suppliers" show-field="nickname" - search-function="{or: [{id: $search}, {name: {like: '%'+ $search +'%'}}]}" + search-function="{or: [{id: $search}, {nickname: {like: '%'+ $search +'%'}}]}" value-field="id" order="nickname" label="Supplier" diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json index 09a29db761..a430a95fa7 100644 --- a/modules/entry/front/routes.json +++ b/modules/entry/front/routes.json @@ -10,6 +10,7 @@ {"state": "entry.latestBuys", "icon": "icon-latestBuys"} ], "card": [ + {"state": "entry.card.basicData", "icon": "settings"}, {"state": "entry.card.buy", "icon": "icon-lines"}, {"state": "entry.card.log", "icon": "history"} ] @@ -52,6 +53,14 @@ "params": { "entry": "$ctrl.entry" } + }, { + "url": "/basic-data", + "state": "entry.card.basicData", + "component": "vn-entry-basic-data", + "description": "Basic data", + "params": { + "entry": "$ctrl.entry" + } }, { "url" : "/log", "state": "entry.card.log", From 014a537169ac3fd62156c8c9c38f8551e40ad3a3 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez Ruiz Date: Mon, 7 Sep 2020 10:30:36 +0200 Subject: [PATCH 6/6] e2e path completed --- e2e/paths/12-entry/04_create.spec.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/e2e/paths/12-entry/04_create.spec.js b/e2e/paths/12-entry/04_create.spec.js index d58326ecf8..90dac618ae 100644 --- a/e2e/paths/12-entry/04_create.spec.js +++ b/e2e/paths/12-entry/04_create.spec.js @@ -1,11 +1,7 @@ import selectors from '../../helpers/selectors.js'; import getBrowser from '../../helpers/puppeteer'; -// #2434 [E2E] entry.create -// esto explota por ahora al guardar con el error: -// Possibly unhandled rejection: -// {"$id":0,"type":4,"message":"This transition is invalid","detail":"Could not resolve 'entry.card.basicData' from state 'entry.create'"} -xdescribe('Entry create path', () => { +describe('Entry create path', () => { let browser; let page; @@ -31,7 +27,7 @@ xdescribe('Entry create path', () => { await page.waitToClick(selectors.entryIndex.saveNewEntry); }); - it('should check the new state is a summary or a basicData for a created entry', async() => { - expect(true).toBe(false); // to flag this isn't quite finished yet. + it('should be redirected to entry basic data', async() => { + await page.waitForState('entry.card.basicData'); }); });