From fe32a2af050dd43bacb57db4029281b1f9479114 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 5 Jun 2023 08:35:07 +0200 Subject: [PATCH 1/4] refs #5667 RoleInherit & Sms: Translations added --- modules/account/back/locale/role-inherit/en.yml | 1 + modules/account/back/locale/role-inherit/es.yml | 1 + modules/client/back/locale/sms/en.yml | 10 ++++++++++ modules/client/back/locale/sms/es.yml | 10 ++++++++++ 4 files changed, 22 insertions(+) create mode 100644 modules/client/back/locale/sms/en.yml create mode 100644 modules/client/back/locale/sms/es.yml diff --git a/modules/account/back/locale/role-inherit/en.yml b/modules/account/back/locale/role-inherit/en.yml index 760881325..8422ecdce 100644 --- a/modules/account/back/locale/role-inherit/en.yml +++ b/modules/account/back/locale/role-inherit/en.yml @@ -1,4 +1,5 @@ name: subrole columns: + id: id role: rol inheritsFrom: inherits diff --git a/modules/account/back/locale/role-inherit/es.yml b/modules/account/back/locale/role-inherit/es.yml index c352c6ff2..10381628c 100644 --- a/modules/account/back/locale/role-inherit/es.yml +++ b/modules/account/back/locale/role-inherit/es.yml @@ -1,4 +1,5 @@ name: subrol columns: + id: id role: rol inheritsFrom: hereda diff --git a/modules/client/back/locale/sms/en.yml b/modules/client/back/locale/sms/en.yml new file mode 100644 index 000000000..cb52f80ec --- /dev/null +++ b/modules/client/back/locale/sms/en.yml @@ -0,0 +1,10 @@ +name: SMS +columns: + id: id + senderFk: sender + sender: sender number + destination: destination + message: message + statusCode: status code + status: status + created: created diff --git a/modules/client/back/locale/sms/es.yml b/modules/client/back/locale/sms/es.yml new file mode 100644 index 000000000..f314921c1 --- /dev/null +++ b/modules/client/back/locale/sms/es.yml @@ -0,0 +1,10 @@ +name: SMS +columns: + id: id + senderFk: remitente + sender: número remitente + destination: destinatario + message: mensaje + statusCode: código estado + status: estado + created: creado -- 2.40.1 From 6ef7055bc97658a499744a1cc62f0497b1234633 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Tue, 6 Jun 2023 11:05:04 +0200 Subject: [PATCH 2/4] refs #5563 Display show values in logs --- front/salix/components/log/index.html | 6 ++-- front/salix/components/log/index.js | 41 +++++++++++++++++++++------ front/salix/components/log/style.scss | 4 +++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/front/salix/components/log/index.html b/front/salix/components/log/index.html index d5675975b..a50bafe5d 100644 --- a/front/salix/components/log/index.html +++ b/front/salix/components/log/index.html @@ -75,16 +75,16 @@ {{::prop.nameI18n}}: - , + ,
{{::prop.nameI18n}}: - + - ← + ←
diff --git a/front/salix/components/log/index.js b/front/salix/components/log/index.js index ef1b370b5..362eb8089 100644 --- a/front/salix/components/log/index.js +++ b/front/salix/components/log/index.js @@ -64,29 +64,47 @@ export default class Controller extends Section { set logs(value) { this._logs = value; if (!value) return; + const empty = {}; const validations = window.validations; + const castJsonValue = this.castJsonValue; + for (const log of value) { - const oldValues = log.oldInstance || empty; - const newValues = log.newInstance || empty; + const notDelete = log.action != 'delete'; + const olds = (notDelete ? log.oldInstance : null) || empty; + const vals = (notDelete ? log.newInstance : log.oldInstance) || empty; const locale = validations[log.changedModel]?.locale || empty; log.changedModelI18n = firstUpper(locale.name) || log.changedModel; - let props = Object.keys(oldValues).concat(Object.keys(newValues)); + let props = Object.keys(olds).concat(Object.keys(vals)); props = [...new Set(props)]; log.props = []; for (const prop of props) { + if (prop.endsWith('$')) continue; log.props.push({ name: prop, nameI18n: firstUpper(locale.columns?.[prop]) || prop, - old: this.castJsonValue(oldValues[prop]), - new: this.castJsonValue(newValues[prop]) + old: getVal(olds, prop), + val: getVal(vals, prop) }); } log.props.sort( (a, b) => a.nameI18n.localeCompare(b.nameI18n)); } + + function getVal(vals, prop) { + let val, id; + const showProp = `${prop}$`; + + if (vals[showProp] != null) { + val = vals[showProp]; + id = vals[prop]; + } else + val = vals[prop]; + + return {val: castJsonValue(val), id}; + } } get models() { @@ -113,10 +131,6 @@ export default class Controller extends Section { : value; } - mainVal(prop, action) { - return action == 'delete' ? prop.old : prop.new; - } - relativeDate(dateVal) { if (dateVal == null) return ''; const date = new Date(dateVal); @@ -238,3 +252,12 @@ ngModule.vnComponent('vnLog', { url: '@' } }); + +ngModule.component('vnLogValue', { + template: + '' + + ' #{{::$ctrl.val.id}}', + bindings: { + val: ' .id-value { + font-size: .9rem; + color: $color-font-secondary; +} -- 2.40.1 From 6f3704c365f4fb4ab90d959a3836743806e3cae0 Mon Sep 17 00:00:00 2001 From: carlossa Date: Tue, 6 Jun 2023 11:42:35 +0200 Subject: [PATCH 3/4] hotfix colors ticket advance ticket future --- db/changes/232202/00-procedurecanAdvance.sql | 127 ++++++++++++++++++ .../232202/00-procedurecanbePostponed.sql | 74 ++++++++++ modules/ticket/front/advance/index.html | 2 +- modules/ticket/front/advance/index.js | 7 - modules/ticket/front/future/index.html | 2 +- 5 files changed, 203 insertions(+), 9 deletions(-) create mode 100644 db/changes/232202/00-procedurecanAdvance.sql create mode 100644 db/changes/232202/00-procedurecanbePostponed.sql diff --git a/db/changes/232202/00-procedurecanAdvance.sql b/db/changes/232202/00-procedurecanAdvance.sql new file mode 100644 index 000000000..d82294b3c --- /dev/null +++ b/db/changes/232202/00-procedurecanAdvance.sql @@ -0,0 +1,127 @@ +DELIMITER $$ +$$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT) +BEGIN +/** + * Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar. + * + * @param vDateFuture Fecha de los tickets que se quieren adelantar. + * @param vDateToAdvance Fecha a cuando se quiere adelantar. + * @param vWarehouseFk Almacén + */ + + DECLARE vDateInventory DATE; + + SELECT inventoried INTO vDateInventory FROM config; + + DROP TEMPORARY TABLE IF EXISTS tmp.stock; + CREATE TEMPORARY TABLE tmp.stock + (itemFk INT PRIMARY KEY, + amount INT) + ENGINE = MEMORY; + + INSERT INTO tmp.stock(itemFk, amount) + SELECT itemFk, SUM(quantity) amount FROM + ( + SELECT itemFk, quantity + FROM itemTicketOut + WHERE shipped >= vDateInventory + AND shipped < vDateFuture + AND warehouseFk = vWarehouseFk + UNION ALL + SELECT itemFk, quantity + FROM itemEntryIn + WHERE landed >= vDateInventory + AND landed < vDateFuture + AND isVirtualStock = FALSE + AND warehouseInFk = vWarehouseFk + UNION ALL + SELECT itemFk, quantity + FROM itemEntryOut + WHERE shipped >= vDateInventory + AND shipped < vDateFuture + AND warehouseOutFk = vWarehouseFk + ) t + GROUP BY itemFk HAVING amount != 0; + + DROP TEMPORARY TABLE IF EXISTS tmp.filter; + CREATE TEMPORARY TABLE tmp.filter + (INDEX (id)) +SELECT + origin.ticketFk futureId, + dest.ticketFk id, + dest.state, + origin.futureState, + origin.futureIpt, + dest.ipt, + origin.workerFk, + origin.futureLiters, + origin.futureLines, + dest.shipped, + origin.shipped futureShipped, + dest.totalWithVat, + origin.totalWithVat futureTotalWithVat, + dest.agency, + origin.futureAgency, + dest.lines, + dest.liters, + origin.futureLines - origin.hasStock AS notMovableLines, + (origin.futureLines = origin.hasStock) AS isFullMovable, + origin.classColor futureClassColor, + dest.classColor + FROM ( + SELECT + s.ticketFk, + t.workerFk, + t.shipped, + t.totalWithVat, + st.name futureState, + t.addressFk, + am.name futureAgency, + count(s.id) futureLines, + GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt, + CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters, + SUM((s.quantity <= IFNULL(st.amount,0))) hasStock, + st.classColor + FROM ticket t + JOIN sale s ON s.ticketFk = t.id + JOIN saleVolume sv ON sv.saleFk = s.id + JOIN item i ON i.id = s.itemFk + JOIN ticketState ts ON ts.ticketFk = t.id + JOIN state st ON st.id = ts.stateFk + JOIN agencyMode am ON t.agencyModeFk = am.id + LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk + LEFT JOIN tmp.stock st ON st.itemFk = i.id + WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture) + AND t.warehouseFk = vWarehouseFk + GROUP BY t.id + ) origin + JOIN ( + SELECT + t.id ticketFk, + t.addressFk, + st.name state, + GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt, + t.shipped, + t.totalWithVat, + am.name agency, + CAST(SUM(litros) AS DECIMAL(10,0)) liters, + CAST(COUNT(*) AS DECIMAL(10,0)) `lines`, + st.classColor + FROM ticket t + JOIN sale s ON s.ticketFk = t.id + JOIN saleVolume sv ON sv.saleFk = s.id + JOIN item i ON i.id = s.itemFk + JOIN ticketState ts ON ts.ticketFk = t.id + JOIN state st ON st.id = ts.stateFk + JOIN agencyMode am ON t.agencyModeFk = am.id + LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk + WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance) + AND t.warehouseFk = vWarehouseFk + AND st.order <= 5 + GROUP BY t.id + ) dest ON dest.addressFk = origin.addressFk + WHERE origin.hasStock != 0; + DROP TEMPORARY TABLE tmp.stock; +END$$ +DELIMITER ; diff --git a/db/changes/232202/00-procedurecanbePostponed.sql b/db/changes/232202/00-procedurecanbePostponed.sql new file mode 100644 index 000000000..9d42dcc4b --- /dev/null +++ b/db/changes/232202/00-procedurecanbePostponed.sql @@ -0,0 +1,74 @@ +DELIMITER $$ +$$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canbePostponed`(vOriginDated DATE, vFutureDated DATE, vWarehouseFk INT) +BEGIN +/** + * Devuelve un listado de tickets susceptibles de fusionarse con otros tickets en el futuro + * + * @param vOriginDated Fecha en cuestión + * @param vFutureDated Fecha en el futuro a sondear + * @param vWarehouseFk Identificador de vn.warehouse + */ + DROP TEMPORARY TABLE IF EXISTS tmp.filter; + CREATE TEMPORARY TABLE tmp.filter + (INDEX (id)) + SELECT sv.ticketFk id, + sub2.id futureId, + GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt, + CAST(sum(litros) AS DECIMAL(10,0)) liters, + CAST(count(*) AS DECIMAL(10,0)) `lines`, + st.name state, + sub2.iptd futureIpt, + sub2.state futureState, + t.clientFk, + t.warehouseFk, + ts.alertLevel, + t.shipped, + sub2.shipped futureShipped, + t.workerFk, + st.code stateCode, + sub2.code futureStateCode, + st.classColor, + sub2.classColor futureClassColor + FROM vn.saleVolume sv + JOIN vn.sale s ON s.id = sv.saleFk + JOIN vn.item i ON i.id = s.itemFk + JOIN vn.ticket t ON t.id = sv.ticketFk + JOIN vn.address a ON a.id = t.addressFk + JOIN vn.province p ON p.id = a.provinceFk + JOIN vn.country c ON c.id = p.countryFk + JOIN vn.ticketState ts ON ts.ticketFk = t.id + JOIN vn.state st ON st.id = ts.stateFk + JOIN vn.alertLevel al ON al.id = ts.alertLevel + LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id + LEFT JOIN ( + SELECT * + FROM ( + SELECT + t.addressFk, + t.id, + t.shipped, + st.name state, + st.code, + st.classColor, + GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) iptd + FROM vn.ticket t + JOIN vn.ticketState ts ON ts.ticketFk = t.id + JOIN vn.state st ON st.id = ts.stateFk + JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.item i ON i.id = s.itemFk + WHERE t.shipped BETWEEN vFutureDated + AND util.dayend(vFutureDated) + AND t.warehouseFk = vWarehouseFk + GROUP BY t.id + ) sub + GROUP BY sub.addressFk + ) sub2 ON sub2.addressFk = t.addressFk AND t.id != sub2.id + WHERE t.shipped BETWEEN vOriginDated AND util.dayend(vOriginDated) + AND t.warehouseFk = vWarehouseFk + AND al.code = 'FREE' + AND tp.ticketFk IS NULL + GROUP BY sv.ticketFk + HAVING futureId; +END$$ +DELIMITER ; diff --git a/modules/ticket/front/advance/index.html b/modules/ticket/front/advance/index.html index c937fe2ac..e6f16c965 100644 --- a/modules/ticket/front/advance/index.html +++ b/modules/ticket/front/advance/index.html @@ -150,7 +150,7 @@ {{::ticket.futureIpt | dashIfEmpty}} + class="chip {{ticket.futureClassColor}}"> {{::ticket.futureState | dashIfEmpty}} diff --git a/modules/ticket/front/advance/index.js b/modules/ticket/front/advance/index.js index 7b8008426..0cec41227 100644 --- a/modules/ticket/front/advance/index.js +++ b/modules/ticket/front/advance/index.js @@ -102,13 +102,6 @@ export default class Controller extends Section { return checkedLines; } - stateColor(state) { - if (state === 'OK') - return 'success'; - else if (state === 'Libre') - return 'notice'; - } - dateRange(value) { const minHour = new Date(value); minHour.setHours(0, 0, 0, 0); diff --git a/modules/ticket/front/future/index.html b/modules/ticket/front/future/index.html index 2f0290c27..78b0f9864 100644 --- a/modules/ticket/front/future/index.html +++ b/modules/ticket/front/future/index.html @@ -158,7 +158,7 @@ {{::ticket.futureIpt | dashIfEmpty}} + class="chip {{ticket.futureClassColor}}"> {{::ticket.futureState}} -- 2.40.1 From 05111c9268a6cdf05b2c095c3a0a3ef33bf55cec Mon Sep 17 00:00:00 2001 From: carlossa Date: Tue, 6 Jun 2023 11:43:14 +0200 Subject: [PATCH 4/4] hotfix test front --- modules/ticket/front/advance/index.spec.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/modules/ticket/front/advance/index.spec.js b/modules/ticket/front/advance/index.spec.js index 6874f914b..da8614ca5 100644 --- a/modules/ticket/front/advance/index.spec.js +++ b/modules/ticket/front/advance/index.spec.js @@ -61,24 +61,6 @@ describe('Component vnTicketAdvance', () => { }); }); - describe('stateColor()', () => { - it('should return success to the OK tickets', () => { - const ok = controller.stateColor(controller.$.model.data[0].state); - const notOk = controller.stateColor(controller.$.model.data[1].state); - - expect(ok).toEqual('success'); - expect(notOk).not.toEqual('success'); - }); - - it('should return success to the FREE tickets', () => { - const notFree = controller.stateColor(controller.$.model.data[0].state); - const free = controller.stateColor(controller.$.model.data[1].state); - - expect(free).toEqual('notice'); - expect(notFree).not.toEqual('notice'); - }); - }); - describe('dateRange()', () => { it('should return two dates with the hours at the start and end of the given date', () => { const now = Date.vnNew(); -- 2.40.1