diff --git a/modules/ticket/back/methods/sale-tracking/delete.js b/modules/ticket/back/methods/sale-tracking/delete.js index 50f7ff396..e2869c89a 100644 --- a/modules/ticket/back/methods/sale-tracking/delete.js +++ b/modules/ticket/back/methods/sale-tracking/delete.js @@ -31,23 +31,25 @@ module.exports = Self => { if (typeof options == 'object') Object.assign(myOptions, options); - // const [itemShelvingSale] = await models.ItemShelvingSale.find({saleFk: saleFk}, myOptions); - // if (itemShelvingSale) await itemShelvingSale.destroy(myOptions); + const itemShelvingSales = await models.ItemShelvingSale.find({saleFk: saleFk}, myOptions); + for (let itemShelvingSale of itemShelvingSales) + await itemShelvingSale.destroy(myOptions); - // const filter = { - // where: { - // saleFk: saleFk, - // code: stateCode - // } - // }; - // const [saleTracking] = await models.SaleTracking.find(filter, myOptions); - // return saleTracking.destroy(myOptions); + const filter = { + where: { + saleFk: saleFk, + code: stateCode + } + }; + const saleTrackings = await models.SaleTracking.find(filter, myOptions); + for (let saleTracking of saleTrackings) + await saleTracking.destroy(myOptions); - query = `CALL vn.saleTracking_del(?, ?)`; - return Self.rawSql(query, - [ - saleFk, - stateCode, - ], myOptions); + // query = `CALL vn.saleTracking_del(?, ?)`; + // return Self.rawSql(query, + // [ + // saleFk, + // stateCode, + // ], myOptions); }; }; diff --git a/modules/ticket/back/methods/sale-tracking/replace.js b/modules/ticket/back/methods/sale-tracking/replace.js index 886ca4bfa..a2f9d6c08 100644 --- a/modules/ticket/back/methods/sale-tracking/replace.js +++ b/modules/ticket/back/methods/sale-tracking/replace.js @@ -40,30 +40,31 @@ module.exports = Self => { if (typeof options == 'object') Object.assign(myOptions, options); - // const state = await models.State.findOne({ - // where: {code: stateCode} - // }, myOptions); + const state = await models.State.findOne({ + where: {code: stateCode} + }, myOptions); - // if (!state) return; + if (!state) return; - // const data = { - // saleFk: saleFk, - // isChecked: isChecked, - // originalQuantity: quantity, - // workerFk: userId, - // stateFk: state.id - // }; - // return models.SaleTracking.replaceOrCreate(data, myOptions); + const data = { + saleFk: saleFk, + isChecked: isChecked, + originalQuantity: quantity, + workerFk: userId, + stateFk: state.id + }; + return models.SaleTracking.replaceOrCreate(data, myOptions); - query = `CALL vn.saleTracking_new(?, ?, ?, ?, ?, ?)`; - return Self.rawSql(query, - [ - saleFk, - isChecked, - quantity, - userId, - stateCode, - null - ], myOptions); + // query = `CALL vn.saleTracking_new(?, ?, ?, ?, ?, ?, ?)`; + // return Self.rawSql(query, + // [ + // saleFk, + // isChecked, + // quantity, + // userId, + // stateCode, + // 'parameterToDelete', + // null + // ], myOptions); }; }; diff --git a/modules/ticket/back/methods/sale-tracking/salePreparingList.js b/modules/ticket/back/methods/sale-tracking/salePreparingList.js new file mode 100644 index 000000000..063730fde --- /dev/null +++ b/modules/ticket/back/methods/sale-tracking/salePreparingList.js @@ -0,0 +1,99 @@ + +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; + +module.exports = Self => { + Self.remoteMethod('salePreparingList', { + description: 'Returns a list with the lines of a ticket and its different states of preparation', + accessType: 'READ', + accepts: [ + { + arg: 'id', + type: 'number', + required: true, + description: 'The ticket id', + http: {source: 'path'} + }, + { + arg: 'filter', + type: 'object', + description: 'Filter defining where and paginated data' + } + ], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/:id/salePreparingList`, + verb: 'GET' + } + }); + + Self.salePreparingList = async(id, filter, options) => { + const conn = Self.dataSource.connector; + const myOptions = {}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + + const stmts = []; + let stmt; + + stmts.push('CALL cache.last_buy_refresh(FALSE)'); + + stmt = new ParameterizedSQL( + `SELECT t.clientFk, + t.shipped, + a.nickname, + s.ticketFk, + s.itemFk, + s.quantity, + s.concept, + s.reserved, + s.id saleFk, + i.size, + i.inkFk, + i.stems, + i.image, + i.subName, + b.grouping, + IF(stPrevious.saleFk,TRUE,FALSE) as isPreviousSelected, + stPrevious.isChecked as isPrevious, + stPrepared.isChecked as isPrepared, + stControled.isChecked as isControled, + ib.code as barcode, + (MAX(sgd.id) IS NOT NULL) AS hasSaleGroupDetail, + p.code AS parkingCode, + i.value5, + i.value6, + i.value7, + i.value8, + i.value9, + i.value10 + FROM vn.ticket t + JOIN vn.address a ON a.id = t.addressFk + JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.item i ON i.id = s.itemFk + LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = t.warehouseFk + LEFT JOIN vn.buy b ON b.id = lb.buy_id + LEFT JOIN vn.saleTracking stPrevious ON stPrevious.saleFk = s.id AND stPrevious.stateFk = 26 + LEFT JOIN vn.saleTracking stPrepared ON stPrepared.saleFk = s.id AND stPrepared.stateFk = 14 + LEFT JOIN vn.saleTracking stControled ON stControled.saleFk = s.id AND stControled.stateFk = 8 + LEFT JOIN vn.itemBarcode ib ON ib.itemFk = i.id + LEFT JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id + LEFT JOIN vn.saleGroup sg ON sg.id = sgd.saleGroupFk + LEFT JOIN vn.parking p ON p.id = sg.parkingFk + WHERE t.id = ? + GROUP BY s.id`, [id]); + + stmts.push(stmt); + + stmt.merge(Self.makeSuffix(filter)); + + const index = stmts.push(stmt) - 1; + const sql = ParameterizedSQL.join(stmts, ';'); + const result = await conn.executeStmt(sql, myOptions); + + return result[index]; + }; +}; diff --git a/modules/ticket/back/methods/sale/salePreparingList.js b/modules/ticket/back/methods/sale/salePreparingList.js deleted file mode 100644 index e6e7d5164..000000000 --- a/modules/ticket/back/methods/sale/salePreparingList.js +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = Self => { - Self.remoteMethodCtx('salePreparingList', { - description: 'Returns a list with the lines of a ticket and its different states of preparation', - accessType: 'READ', - accepts: [{ - arg: 'id', - type: 'number', - required: true, - description: 'The ticket id', - http: {source: 'path'} - }], - returns: { - type: ['object'], - root: true - }, - http: { - path: `/:id/salePreparingList`, - verb: 'GET' - } - }); - - Self.salePreparingList = async(ctx, id, options) => { - const myOptions = {}; - - if (typeof options == 'object') - Object.assign(myOptions, options); - - query = `CALL vn.salePreparingList(?)`; - const [sales] = await Self.rawSql(query, [id], myOptions); - - return sales; - }; -}; diff --git a/modules/ticket/back/models/sale-tracking.js b/modules/ticket/back/models/sale-tracking.js index 446bdf37b..76efff4c7 100644 --- a/modules/ticket/back/models/sale-tracking.js +++ b/modules/ticket/back/models/sale-tracking.js @@ -1,4 +1,5 @@ module.exports = Self => { + require('../methods/sale-tracking/salePreparingList')(Self); require('../methods/sale-tracking/listSaleTracking')(Self); require('../methods/sale-tracking/replace')(Self); require('../methods/sale-tracking/delete')(Self); diff --git a/modules/ticket/back/models/sale.js b/modules/ticket/back/models/sale.js index bab201fdd..ae247fc24 100644 --- a/modules/ticket/back/models/sale.js +++ b/modules/ticket/back/models/sale.js @@ -1,6 +1,5 @@ module.exports = Self => { require('../methods/sale/getClaimableFromTicket')(Self); - require('../methods/sale/salePreparingList')(Self); require('../methods/sale/reserve')(Self); require('../methods/sale/deleteSales')(Self); require('../methods/sale/updatePrice')(Self); diff --git a/modules/ticket/front/sale-tracking/index.html b/modules/ticket/front/sale-tracking/index.html index 8d3fa65af..193f87622 100644 --- a/modules/ticket/front/sale-tracking/index.html +++ b/modules/ticket/front/sale-tracking/index.html @@ -1,8 +1,6 @@ @@ -69,26 +67,26 @@ - {{::sale.item.id}} + {{::sale.itemFk}}
- {{::sale.item.name}} - -

{{::sale.item.subName}}

+ {{::sale.concept}} + +

{{::sale.subName}}

{{::sale.quantity}} - {{::sale.saleGroupDetail.saleGroup.parking.code | dashIfEmpty}} + {{::sale.parkingCode | dashIfEmpty}} { - res.data.forEach(salePreparing => { - const sale = this.sales.find(sale => salePreparing.saleFk === sale.id); - if (sale) sale.preparingList = salePreparing; - }); - }); - } - } - showItemDescriptor(event, sale) { this.quicklinks = { btnThree: { @@ -72,29 +54,29 @@ class Controller extends Section { } showSaleTracking(sale) { - this.saleId = sale.id; + this.saleId = sale.saleFk; this.$.saleTracking.show(); } showItemShelvingSale(sale) { - this.saleId = sale.id; + this.saleId = sale.saleFk; this.$.itemShelvingSale.show(); } clickPreviousSelected(index) { const sale = this.sales[index]; - if (!sale.preparingList.isPreviousSelected) { + if (!sale.isPreviousSelected) { this.saleTrackingNew(sale, 'PREVIOUS_PREPARATION', false); - sale.preparingList.isPreviousSelected = true; + sale.isPreviousSelected = true; } else { this.saleTrackingDel(sale, 'PREVIOUS_PREPARATION'); - sale.preparingList.isPreviousSelected = false; + sale.isPreviousSelected = false; } } saleTrackingNew(sale, stateCode, isChecked) { const params = { - saleFk: sale.id, + saleFk: sale.saleFk, isChecked: isChecked, quantity: sale.quantity, stateCode: stateCode @@ -106,7 +88,7 @@ class Controller extends Section { saleTrackingDel(sale, stateCode) { const params = { - saleFk: sale.id, + saleFk: sale.saleFk, stateCode: stateCode }; this.$http.post(`SaleTrackings/delete`, params).then(() => {