diff --git a/modules/agency/back/methods/zone-geo/getLeaves.js b/modules/agency/back/methods/zone-geo/getLeaves.js deleted file mode 100644 index bfcef08ae..000000000 --- a/modules/agency/back/methods/zone-geo/getLeaves.js +++ /dev/null @@ -1,155 +0,0 @@ - -const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; - -module.exports = Self => { - Self.remoteMethod('getLeaves', { - description: 'Returns the first shipped and landed possible for params', - accepts: [{ - arg: 'zoneFk', - type: 'Number', - required: true, - }, - { - arg: 'parentFk', - type: 'Number', - default: 1, - required: false, - }, - { - arg: 'filter', - type: 'Object', - description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', - http: {source: 'query'} - }], - returns: { - type: ['object'], - root: true - }, - http: { - path: `/getLeaves`, - verb: 'GET' - } - }); - - Self.getLeaves = async(zoneFk, parentFk = null, filter) => { - let conn = Self.dataSource.connector; - let stmts = []; - - stmts.push(`DROP TEMPORARY TABLE IF EXISTS tmp.checkedChilds`); - stmts.push(new ParameterizedSQL( - `CREATE TEMPORARY TABLE tmp.checkedChilds ( - id INT, - name VARCHAR(100), - lft INT, - rgt INT, - depth BIGINT(22), - sons DECIMAL(10, 0), - isIncluded TINYINT - ) ENGINE = MEMORY`)); - - if (!parentFk) { - stmts.push(new ParameterizedSQL( - `INSERT INTO tmp.checkedChilds - SELECT - zg.id, - zg.name, - zg.lft, - zg.rgt, - zg.depth, - zg.sons, - zi.isIncluded - FROM zoneGeo zg - JOIN zoneIncluded zi ON zi.geoFk = zg.id - AND zoneFk = ?`, [zoneFk])); - } - - let stmt = new ParameterizedSQL( - `SELECT * FROM ( - SELECT - zg.id, - zg.name, - zg.lft, - zg.rgt, - zg.depth, - zg.sons, - IF(ch.id = zg.id, isIncluded, null) selected - FROM zoneGeo zg - JOIN tmp.checkedChilds ch - ON zg.lft <= ch.lft AND zg.rgt >= ch.rgt - UNION ALL - SELECT - zg.id, - zg.name, - zg.lft, - zg.rgt, - zg.depth, - zg.sons, - zi.isIncluded AS selected - FROM zoneGeo zg - LEFT JOIN zoneIncluded zi ON zi.geoFk = zg.id - AND zi.zoneFk = ? - WHERE (? IS NULL AND zg.parentFk IS NULL) - OR (? IS NOT NULL AND zg.parentFk = ?)) AS nst`, - [zoneFk, parentFk, parentFk, parentFk]); - - // Get nodes from depth greather than Origin - stmt.merge(conn.makeSuffix(filter)); - stmt.merge('GROUP BY nst.id'); - - const resultIndex = stmts.push(stmt) - 1; - - const sql = ParameterizedSQL.join(stmts, ';'); - const result = await Self.rawStmt(sql); - const nodes = result[resultIndex]; - - if (nodes.length == 0) - return nodes; - - // Get parent nodes - const minorDepth = nodes.reduce((a, b) => { - return b < a ? b : a; - }).depth; - - const parentNodes = nodes.filter(element => { - return element.depth === minorDepth; - }); - const leaves = Object.assign([], sortNodes(parentNodes)); - - nestLeaves(leaves); - - function nestLeaves(elements) { - elements.forEach(element => { - let childs = Object.assign([], getLeaves(element)); - if (childs.length > 0) { - element.childs = childs; - nestLeaves(element.childs); - } - }); - } - - function getLeaves(parent) { - let elements = nodes.filter(element => { - return element.lft > parent.lft && element.rgt < parent.rgt - && element.depth === parent.depth + 1; - }); - - return sortNodes(elements); - } - - return leaves; - }; - - function sortNodes(nodes) { - return nodes.sort((a, b) => { - if (b.selected !== a.selected) { - if (a.selected == null) - return 1; - if (b.selected == null) - return -1; - return b.selected - a.selected; - } - - return a.name.localeCompare(b.name); - }); - } -}; diff --git a/modules/agency/back/methods/zone/getLeaves.js b/modules/agency/back/methods/zone/getLeaves.js new file mode 100644 index 000000000..50ee54345 --- /dev/null +++ b/modules/agency/back/methods/zone/getLeaves.js @@ -0,0 +1,57 @@ + +module.exports = Self => { + Self.remoteMethod('getLeaves', { + description: 'Returns the nodes for a zone', + accepts: [ + { + arg: 'id', + type: 'Number', + http: {source: 'path'}, + required: true + }, { + arg: 'parentFk', + type: 'Number', + description: 'Get the children of the specified father', + }, { + arg: 'search', + type: 'String', + description: 'Filter nodes whose name starts with', + } + ], + returns: { + type: ['Object'], + root: true + }, + http: { + path: `/:id/getLeaves`, + verb: 'GET' + } + }); + + Self.getLeaves = async(id, parentFk = null, search) => { + let [res] = await Self.rawSql( + `CALL zone_getLeaves(?, ?, ?)`, + [id, parentFk, search] + ); + + let map = new Map(); + for (let node of res) { + if (!map.has(node.parentFk)) + map.set(node.parentFk, []); + map.get(node.parentFk).push(node); + } + + function setLeaves(nodes) { + if (!nodes) return; + for (let node of nodes) { + node.childs = map.get(node.id); + setLeaves(node.childs); + } + } + + let leaves = map.get(parentFk); + setLeaves(leaves); + + return leaves || []; + }; +}; diff --git a/modules/agency/back/models/zone-geo.js b/modules/agency/back/models/zone-geo.js deleted file mode 100644 index 987e2de71..000000000 --- a/modules/agency/back/models/zone-geo.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = Self => { - require('../methods/zone-geo/getLeaves')(Self); -}; diff --git a/modules/agency/back/models/zone.js b/modules/agency/back/models/zone.js index c7ba642f3..2c540603d 100644 --- a/modules/agency/back/models/zone.js +++ b/modules/agency/back/models/zone.js @@ -1,6 +1,7 @@ module.exports = Self => { require('../methods/zone/clone')(Self); require('../methods/zone/editPrices')(Self); + require('../methods/zone/getLeaves')(Self); Self.validatesPresenceOf('warehouseFk', { message: `Warehouse cannot be blank` diff --git a/modules/agency/front/location/index.html b/modules/agency/front/location/index.html index fb9bf863c..c45fd5cd6 100644 --- a/modules/agency/front/location/index.html +++ b/modules/agency/front/location/index.html @@ -1,23 +1,25 @@ + auto-load="false">
- - + +
\ No newline at end of file diff --git a/modules/agency/front/location/index.js b/modules/agency/front/location/index.js index 9a28fd3d1..3e3decf23 100644 --- a/modules/agency/front/location/index.js +++ b/modules/agency/front/location/index.js @@ -1,18 +1,15 @@ import ngModule from '../module'; class Controller { - constructor($scope, $http, $stateParams) { - this.$stateParams = $stateParams; - this.$scope = $scope; + constructor($, $http, $stateParams) { + this.$ = $; this.$http = $http; - this.searchValue = ''; - this.filter = {}; + this.$stateParams = $stateParams; } - onSearch() { - this.$scope.$applyAsync(() => { - this.$scope.treeview.refresh(); - }); + onSearch(params) { + this.$.model.applyFilter(null, params); + this.$.$applyAsync(() => this.$.treeview.refresh()); } exprBuilder(param, value) { diff --git a/modules/ticket/front/sale/index.js b/modules/ticket/front/sale/index.js index 4c4ba6d92..31e2ee155 100644 --- a/modules/ticket/front/sale/index.js +++ b/modules/ticket/front/sale/index.js @@ -246,12 +246,11 @@ class Controller { sales: this.transfer.sales }; + this.$scope.watcher.updateOriginalData(); + const query = `/api/tickets/${this.ticket.id}/transferSales`; this.$http.post(query, params).then(res => { - this.$scope.watcher.updateOriginalData(); this.goToTicket(res.data.id); - }).finally(() => { - this.$scope.watcher.updateOriginalData(); }); } @@ -262,6 +261,10 @@ class Controller { ticketCreated: this.ticket.shipped }; const sales = this.checkedLines(); + + if (this.newInstances().length === 0) + this.$scope.watcher.updateOriginalData(); + this.$http.post(`/api/Claims/createFromSales`, {claim: claim, sales: sales}).then(res => { this.$state.go('claim.card.basicData', {id: res.data.id}); }); @@ -401,7 +404,9 @@ class Controller { newOrderFromTicket() { this.$http.post(`/api/Orders/newFromTicket`, {ticketFk: this.ticket.id}).then(res => { - this.$state.go('order.card.catalog', {id: res.data}); + const path = this.$state.href('order.card.catalog', {id: res.data}); + window.open(path, '_blank'); + this.vnApp.showSuccess(this.$translate.instant('Order created')); }); }