63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
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'
|
|
}
|
|
});
|
|
|
|
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 Error(`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());
|
|
|
|
let newTicketParams = {
|
|
clientFk: params.ticket.clientFk,
|
|
addressFk: params.ticket.addressFk,
|
|
agencyModeFk: params.ticket.agencyModeFk,
|
|
warehouseFk: params.ticket.warehouseFk,
|
|
shipped: shipped,
|
|
landed: landed,
|
|
userId: userId
|
|
};
|
|
|
|
let newTicket = await model.Ticket.new(newTicketParams);
|
|
|
|
let promises = [];
|
|
for (let i = 0; i < params.sales.length; i++) {
|
|
promises.push(model.Sale.update({id: params.sales[i].id}, {ticketFk: newTicket}));
|
|
}
|
|
await Promise.all(promises);
|
|
|
|
return newTicket;
|
|
};
|
|
};
|