salix/modules/ticket/back/methods/ticket/saveCmr.js

84 lines
2.8 KiB
JavaScript
Raw Normal View History

2024-01-17 13:18:31 +00:00
const {Readable} = require('stream');
2024-01-26 11:40:42 +00:00
const UserError = require('vn-loopback/util/user-error');
2024-01-17 13:18:31 +00:00
2023-10-11 09:43:21 +00:00
module.exports = Self => {
Self.remoteMethodCtx('saveCmr', {
2023-10-11 10:20:30 +00:00
description: 'Save cmr',
2023-10-11 09:43:21 +00:00
accessType: 'WRITE',
2024-01-25 12:56:47 +00:00
accepts: [
2023-10-11 09:43:21 +00:00
{
arg: 'tickets',
type: ['number'],
required: true,
description: 'The tickets'
}
],
http: {
path: `/saveCmr`,
verb: 'POST'
}
});
Self.saveCmr = async(ctx, tickets, options) => {
const models = Self.app.models;
const myOptions = {userId: ctx.req.accessToken.userId};
2023-10-11 12:20:35 +00:00
let tx;
2023-10-11 09:43:21 +00:00
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
2024-01-29 07:25:00 +00:00
const dmsTypeCmr = await models.DmsType.findOne({
where: {code: 'cmr'},
fields: ['id']
}, myOptions);
2023-10-11 09:43:21 +00:00
for (const ticketId of tickets) {
2023-10-11 12:20:35 +00:00
const ticket = await models.Ticket.findById(ticketId, myOptions);
2023-10-11 09:43:21 +00:00
2023-10-11 12:20:35 +00:00
if (ticket.cmrFk) {
2024-02-26 13:09:53 +00:00
const hasDmsCmr = await Self.rawSql(`
SELECT d.id
FROM ticketDms td
JOIN dms d ON d.id = td.dmsFk
WHERE td.ticketFk = ?
AND d.dmsTypeFk = ?
`, [ticketId, dmsTypeCmr.id]);
if (hasDmsCmr.length)
2024-01-26 11:40:42 +00:00
throw new UserError('This ticket already has a cmr saved');
ctx.args.id = ticket.cmrFk;
const response = await models.Route.cmr(ctx, myOptions);
const pdfStream = Readable.from(Buffer.from(response[0]));
const data = {
workerFk: ctx.req.accessToken.userId,
dmsTypeFk: dmsTypeCmr.id,
companyFk: ticket.companyFk,
warehouseFk: ticket.warehouseFk,
reference: ticket.id,
contentType: 'application/pdf',
hasFile: false
2024-01-26 11:40:42 +00:00
};
2024-01-17 12:07:26 +00:00
2024-01-26 11:40:42 +00:00
const dms = await models.Dms.createFromStream(data, 'pdf', pdfStream, myOptions);
await models.TicketDms.create({
ticketFk: ticketId,
dmsFk: dms.id
}, myOptions);
2023-10-11 09:43:21 +00:00
}
}
if (tx) await tx.commit();
return;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};