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..90dac618ae --- /dev/null +++ b/e2e/paths/12-entry/04_create.spec.js @@ -0,0 +1,33 @@ +import selectors from '../../helpers/selectors.js'; +import getBrowser from '../../helpers/puppeteer'; + +describe('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 be redirected to entry basic data', async() => { + await page.waitForState('entry.card.basicData'); + }); +}); diff --git a/modules/entry/back/models/entry.json b/modules/entry/back/models/entry.json index d3f149680f..a67641b0c5 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" }, @@ -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/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 new file mode 100644 index 0000000000..7b5dfc928d --- /dev/null +++ b/modules/entry/front/create/index.html @@ -0,0 +1,61 @@ + + + +
+ + + + + + + {{::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..5c61730f97 --- /dev/null +++ b/modules/entry/front/create/index.js @@ -0,0 +1,43 @@ +import ngModule from '../module'; +import Section from 'salix/components/section'; +import './style.scss'; + +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: [ + {'agencyModeName': {like: `%${$search}%`}}, + {'warehouseInName': {like: `%${$search}%`}}, + {'warehouseOutName': {like: `%${$search}%`}}, + {'shipped': new Date($search)}, + {'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..aa269ed151 --- /dev/null +++ b/modules/entry/front/create/locale/es.yml @@ -0,0 +1,2 @@ +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 diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js index fc24e3efb7..484d8f718f 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 './latest-buys'; import './search-panel'; import './latest-buys-search-panel'; 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 cdaaebc7db..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"} ] @@ -33,6 +34,12 @@ "component": "vn-entry-latest-buys", "description": "Latest buys", "acl": ["buyer"] + }, { + "url": "/create?supplierFk&travelFk&companyFk", + "state": "entry.create", + "component": "vn-entry-create", + "description": "New entry", + "acl": ["buyer"] }, { "url": "/:id", "state": "entry.card", @@ -46,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", 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"> - + 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));