diff --git a/db/changes/231401/00-hotfixDelivery.sql b/db/changes/231401/00-hotfixDelivery.sql new file mode 100644 index 000000000..4628cc1db --- /dev/null +++ b/db/changes/231401/00-hotfixDelivery.sql @@ -0,0 +1,70 @@ +DROP TABLE IF EXISTS `vn`.`dmsRecover`; + +ALTER TABLE `vn`.`delivery` DROP COLUMN addressFk; +ALTER TABLE `vn`.`delivery` DROP CONSTRAINT delivery_ticketFk_FK; +ALTER TABLE `vn`.`delivery` DROP COLUMN ticketFk; +ALTER TABLE `vn`.`delivery` ADD ticketFk INT DEFAULT NULL; +ALTER TABLE `vn`.`delivery` ADD CONSTRAINT delivery_ticketFk_FK FOREIGN KEY (`ticketFk`) REFERENCES `vn`.`ticket`(`id`); + +DROP PROCEDURE IF EXISTS vn.route_getTickets; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`route_getTickets`(vRouteFk INT) +BEGIN +/** + * Pasado un RouteFk devuelve la informaciĆ³n + * de sus tickets. + * + * @param vRouteFk + * + * @select InformaciĆ³n de los tickets + */ + + SELECT + t.id Id, + t.clientFk Client, + a.id Address, + t.packages Packages, + a.street AddressName, + a.postalCode PostalCode, + a.city City, + sub2.itemPackingTypeFk PackingType, + c.phone ClientPhone, + c.mobile ClientMobile, + a.phone AddressPhone, + a.mobile AddressMobile, + d.longitude Longitude, + d.latitude Latitude, + wm.mediaValue SalePersonPhone, + tob.Note Note, + t.isSigned Signed + FROM ticket t + JOIN client c ON t.clientFk = c.id + JOIN address a ON t.addressFk = a.id + LEFT JOIN delivery d ON t.id = d.ticketFk + LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk + LEFT JOIN + (SELECT tob.description Note, t.id + FROM ticketObservation tob + JOIN ticket t ON tob.ticketFk = t.id + JOIN observationType ot ON ot.id = tob.observationTypeFk + WHERE t.routeFk = vRouteFk + AND ot.code = 'delivery' + )tob ON tob.id = t.id + LEFT JOIN + (SELECT sub.ticketFk, + CONCAT('(', GROUP_CONCAT(DISTINCT sub.itemPackingTypeFk ORDER BY sub.items DESC SEPARATOR ','), ') ') itemPackingTypeFk + FROM (SELECT s.ticketFk , i.itemPackingTypeFk, COUNT(*) items + FROM ticket t + JOIN sale s ON s.ticketFk = t.id + JOIN item i ON i.id = s.itemFk + WHERE t.routeFk = vRouteFk + GROUP BY t.id,i.itemPackingTypeFk)sub + GROUP BY sub.ticketFk + ) sub2 ON sub2.ticketFk = t.id + WHERE t.routeFk = vRouteFk + GROUP BY t.id + ORDER BY t.priority; +END$$ +DELIMITER ; diff --git a/modules/ticket/back/methods/ticket/saveSign.js b/modules/ticket/back/methods/ticket/saveSign.js index ab1c32d1b..39347f418 100644 --- a/modules/ticket/back/methods/ticket/saveSign.js +++ b/modules/ticket/back/methods/ticket/saveSign.js @@ -34,6 +34,8 @@ module.exports = Self => { const models = Self.app.models; const myOptions = {}; let tx; + let dms; + let gestDocCreated = false; if (typeof options == 'object') Object.assign(myOptions, options); @@ -96,11 +98,12 @@ module.exports = Self => { warehouseId: ticket.warehouseFk, companyId: ticket.companyFk, dmsTypeId: dmsType.id, - reference: id, - description: `Ticket ${id} Cliente ${ticket.client().name} Ruta ${ticket.route().id}`, + reference: '', + description: `Firma del cliente - Ruta ${ticket.route().id}`, hasFile: true }; - await models.Ticket.uploadFile(ctxUploadFile, id, myOptions); + dms = await models.Dms.uploadFile(ctxUploadFile, myOptions); + gestDocCreated = true; } try { @@ -118,12 +121,16 @@ module.exports = Self => { throw new UserError('This ticket cannot be signed because it has not been boxed'); else if (!await gestDocExists(args.tickets[i])) { if (args.location) setLocation(args.tickets[i]); - await createGestDoc(args.tickets[i]); + if (!gestDocCreated) await createGestDoc(args.tickets[i]); + await models.TicketDms.create({ticketFk: args.tickets[i], dmsFk: dms[0].id}, myOptions); + const ticket = await models.Ticket.findById(args.tickets[i], null, myOptions); + await ticket.updateAttribute('isSigned', true, myOptions); await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [args.tickets[i], 'DELIVERED'], myOptions); } } if (tx) await tx.commit(); + return; } catch (e) { if (tx) await tx.rollback(); throw e;