salix/modules/ticket/back/methods/sale/moveToNewTicket.js

77 lines
2.4 KiB
JavaScript
Raw Normal View History

2018-12-27 11:54:16 +00:00
let UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethodCtx('moveToNewTicket', {
description: 'Change the state of a ticket',
accessType: '',
accepts: [{
arg: 'ticketParams',
type: 'object',
required: true,
description: '[sales IDs], newTicketFk, actualTicketFk',
http: {source: 'body'}
}, {
arg: 'sales',
type: 'object',
required: true,
description: '[sales IDs]',
http: {source: 'body'}
}],
returns: {
type: 'string',
root: true
},
http: {
path: `/moveToNewTicket`,
verb: 'post'
}
});
2018-12-27 11:54:16 +00:00
Self.moveToNewTicket = async(ctx, params) => {
let userId = ctx.req.accessToken.userId;
let model = Self.app.models;
let thisTicketIsEditable = await model.Ticket.isEditable(params.ticket.oldTicketFk);
if (!thisTicketIsEditable)
throw new UserError(`The sales of this ticket can't be modified`);
let travelDates = await model.Agency.getFirstShipped(params.ticket);
let shipped = new Date(travelDates.vShipped);
shipped.setMinutes(shipped.getMinutes() + shipped.getTimezoneOffset());
let landed = new Date(travelDates.vLanded);
landed.setMinutes(landed.getMinutes() + landed.getTimezoneOffset());
2018-06-28 13:56:45 +00:00
let newTicketParams = {
clientFk: params.ticket.clientFk,
addressFk: params.ticket.addressFk,
agencyModeFk: params.ticket.agencyModeFk,
warehouseFk: params.ticket.warehouseFk,
shipped: shipped,
landed: landed,
userId: userId
};
2018-10-10 07:59:42 +00:00
let transaction = await Self.beginTransaction({});
try {
2018-11-27 12:28:15 +00:00
let newTicket = await model.Ticket.new(ctx, newTicketParams, {transaction: transaction});
let selectedSalesId = [];
params.sales.forEach(sale => {
selectedSalesId.push(sale.id);
});
2018-10-10 07:59:42 +00:00
await model.Sale.updateAll(
{id: {inq: selectedSalesId}},
2018-10-10 07:59:42 +00:00
{ticketFk: newTicket.id},
2018-10-22 12:35:46 +00:00
{transaction});
2018-10-10 07:59:42 +00:00
await transaction.commit();
2018-10-10 07:59:42 +00:00
return newTicket;
} catch (e) {
await transaction.rollback();
throw e;
}
};
};