diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 2a822f525..fd09e8b1f 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -103,5 +103,6 @@ "Weekday cannot be blank": "El día de la semana no puede quedar en blanco", "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", "Can't create stowaway for this ticket": "No se puede crear un polizon para este ticket", - "Value has an invalid format": "El valor tiene un formato incorrecto" + "Value has an invalid format": "El valor tiene un formato incorrecto", + "Invalid quantity": "Cantidad invalida" } \ No newline at end of file diff --git a/modules/ticket/back/methods/ticket/transferSales.js b/modules/ticket/back/methods/ticket/transferSales.js index eeea8e745..575dc09c6 100644 --- a/modules/ticket/back/methods/ticket/transferSales.js +++ b/modules/ticket/back/methods/ticket/transferSales.js @@ -61,33 +61,61 @@ module.exports = Self => { for (const sale of originalSales) map.set(sale.id, sale); - const promises = []; + for (const sale of sales) { const originalSale = map.get(sale.id); + let originalSaleQuantity = originalSale.quantity; + if (sale.quantity == originalSale.quantity) { - const updatedSale = models.Sale.updateAll({ + await models.Sale.updateAll({ id: sale.id }, {ticketFk: ticketId}, options); - - promises.push(updatedSale); } else if (sale.quantity < originalSale.quantity) { - const transferedSale = await transferPartialSale( + await transferPartialSale( ticketId, originalSale, sale, options); - - promises.push(transferedSale); } + + let logTicketOrigin = { + originFk: id, + userFk: 9, + action: 'update', + changedModel: 'Ticket', + changedModelId: ticketId, + oldInstance: {item: sale.itemFk, + quantity: 0, + concept: sale.concept, + ticket: ticketId}, + newInstance: {item: sale.itemFk, + quantity: sale.quantity, + concept: sale.concept, + ticket: ticketId} + }; + await models.TicketLog.create(logTicketOrigin, options); + + let logTicketDestination = { + originFk: ticketId, + userFk: 9, + action: 'update', + changedModel: 'Ticket', + changedModelId: ticketId, + oldInstance: {item: sale.itemFk, + quantity: originalSaleQuantity, + concept: sale.concept, + ticket: id}, + newInstance: {item: sale.itemFk, + quantity: originalSaleQuantity - sale.quantity, + concept: sale.concept, + ticket: id} + }; + await models.TicketLog.create(logTicketDestination, options); } const isTicketEmpty = await models.Ticket.isEmpty(id, options); - if (isTicketEmpty) { - originalTicket.updateAttributes({ - isDeleted: true - }, options); - } + if (isTicketEmpty) + await originalTicket.updateAttributes({isDeleted: true}, options); - await Promise.all(promises); - await tx.commit(); + if (tx.id) await tx.commit(); return {id: ticketId}; } catch (error) { @@ -127,19 +155,21 @@ module.exports = Self => { async function transferPartialSale(ticketId, originalSale, sale, options) { const models = Self.app.models; + + if (sale.quantity > originalSale.quantity) + throw new UserError('Invalid quantity'); // Update original sale const rest = originalSale.quantity - sale.quantity; - const updatedSale = models.Sale.updateAll({ + const updatedSale = await models.Sale.updateAll({ id: sale.id }, {quantity: rest}, options); - // Clone sale with new quantity const newSale = originalSale; newSale.id = undefined; newSale.ticketFk = ticketId; newSale.quantity = sale.quantity; - const createdSale = await models.Sale.create(newSale, options); + await models.Sale.create(newSale, options); // Clone sale components const saleComponents = await models.SaleComponent.find({ @@ -150,9 +180,9 @@ module.exports = Self => { return component; }); - const createdComponents = models.SaleComponent - .create(newComponents, options); - return [updatedSale, createdComponents]; + await models.SaleComponent.create(newComponents, options); + + return [updatedSale, createdSale]; } };