Merge pull request 'refactor: refs #7950 Created cmr model' (!3180) from 7950-cmrModelUnify into dev
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #3180
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
This commit is contained in:
Guillermo Bonet 2024-11-15 06:07:16 +00:00
commit 96b85701d8
14 changed files with 40 additions and 28 deletions

View File

@ -2084,7 +2084,7 @@ INSERT INTO `ACL` VALUES (756,'Route','findOne','READ','ALLOW','ROLE','employee'
INSERT INTO `ACL` VALUES (757,'Route','getRoutesByWorker','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (757,'Route','getRoutesByWorker','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (758,'Route','canViewAllRoute','READ','ALLOW','ROLE','deliveryAssistant',NULL); INSERT INTO `ACL` VALUES (758,'Route','canViewAllRoute','READ','ALLOW','ROLE','deliveryAssistant',NULL);
INSERT INTO `ACL` VALUES (759,'Route','cmr','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (759,'Route','cmr','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (760,'Route','downloadCmrsZip','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (760,'Cmr','downloadZip','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (761,'Route','downloadZip','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (761,'Route','downloadZip','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (762,'Route','filter','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (762,'Route','filter','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (763,'Route','getByWorker','READ','ALLOW','ROLE','employee',NULL); INSERT INTO `ACL` VALUES (763,'Route','getByWorker','READ','ALLOW','ROLE','employee',NULL);

View File

@ -0,0 +1,8 @@
DELETE FROM salix.ACL
WHERE property IN ('cmrs', 'cmr', 'downloadCmrsZip')
AND model = 'Route';
INSERT INTO salix.ACL (model,property,principalId)
VALUES ('Cmr','filter','production'),
('Cmr','downloadZip','production'),
('Cmr','print','production')

View File

@ -2,7 +2,7 @@ const {Report, Email} = require('vn-print');
module.exports = Self => { module.exports = Self => {
Self.printReport = async function(ctx, id, reportName) { Self.printReport = async function(ctx, id, reportName) {
const args = Object.assign({}, ctx.args); const args = Object.assign({id}, ctx.args);
const params = {lang: ctx.req.getLocale()}; const params = {lang: ctx.req.getLocale()};
delete args.ctx; delete args.ctx;

View File

@ -1,7 +1,7 @@
const JSZip = require('jszip'); const JSZip = require('jszip');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('downloadCmrsZip', { Self.remoteMethodCtx('downloadZip', {
description: 'Download a zip file with multiple cmrs pdfs', description: 'Download a zip file with multiple cmrs pdfs',
accessType: 'READ', accessType: 'READ',
accepts: [ accepts: [
@ -27,13 +27,13 @@ module.exports = Self => {
} }
], ],
http: { http: {
path: '/downloadCmrsZip', path: '/downloadZip',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['DEFAULT', 'read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.downloadCmrsZip = async function(ctx, ids, options) { Self.downloadZip = async function(ctx, ids, options) {
const models = Self.app.models; const models = Self.app.models;
const myOptions = {}; const myOptions = {};
const zip = new JSZip(); const zip = new JSZip();
@ -44,7 +44,7 @@ module.exports = Self => {
const downloadAddZip = async id => { const downloadAddZip = async id => {
ctx.args = ctx.args || {}; ctx.args = ctx.args || {};
ctx.args.id = Number(id); ctx.args.id = Number(id);
const [data] = await models.Route.cmr(ctx, myOptions); const [data] = await models.Cmr.print(ctx, myOptions);
zip.file(`${id}.pdf`, data, {binary: true}); zip.file(`${id}.pdf`, data, {binary: true});
}; };

View File

@ -3,7 +3,7 @@ const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters; const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => { module.exports = Self => {
Self.remoteMethod('cmrs', { Self.remoteMethod('filter', {
description: 'Returns an array of cmrs', description: 'Returns an array of cmrs',
accessType: 'READ', accessType: 'READ',
accepts: [ accepts: [
@ -57,12 +57,12 @@ module.exports = Self => {
root: true root: true
}, },
http: { http: {
path: `/cmrs`, path: `/filter`,
verb: 'GET' verb: 'GET'
} }
}); });
Self.cmrs = async( Self.filter = async(
filter, cmrFk, ticketFk, routeFk, country, clientFk, hasCmrDms, shipped, warehouseFk, options filter, cmrFk, ticketFk, routeFk, country, clientFk, hasCmrDms, shipped, warehouseFk, options
) => { ) => {
const params = {cmrFk, ticketFk, routeFk, country, clientFk, hasCmrDms, warehouseFk, shipped}; const params = {cmrFk, ticketFk, routeFk, country, clientFk, hasCmrDms, warehouseFk, shipped};

View File

@ -1,6 +1,6 @@
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('cmr', { Self.remoteMethodCtx('print', {
description: 'Returns the cmr', description: 'Returns the cmr pdf',
accessType: 'READ', accessType: 'READ',
accepts: [ accepts: [
{ {
@ -27,11 +27,11 @@ module.exports = Self => {
} }
], ],
http: { http: {
path: '/:id/cmr', path: '/:id/print',
verb: 'GET' verb: 'GET'
}, },
accessScopes: ['DEFAULT', 'read:multimedia'] accessScopes: ['DEFAULT', 'read:multimedia']
}); });
Self.cmr = (ctx, id) => Self.printReport(ctx, id, 'cmr'); Self.print = (ctx, id) => Self.printReport(ctx, id, 'cmr');
}; };

View File

@ -1,6 +1,6 @@
const models = require('vn-loopback/server/server').models; const models = require('vn-loopback/server/server').models;
describe('route downloadCmrsZip()', () => { describe('route downloadZip()', () => {
it('should create a zip file with the given cmr ids', async() => { it('should create a zip file with the given cmr ids', async() => {
const tx = await models.Route.beginTransaction({}); const tx = await models.Route.beginTransaction({});
const ctx = { const ctx = {
@ -13,7 +13,7 @@ describe('route downloadCmrsZip()', () => {
}; };
let cmrs = '1,2'; let cmrs = '1,2';
try { try {
const stream = await models.Route.downloadCmrsZip(ctx, cmrs); const stream = await models.Cmr.downloadZip(ctx, cmrs);
expect(stream[0]).toBeDefined(); expect(stream[0]).toBeDefined();
await tx.rollback(); await tx.rollback();

View File

@ -5,6 +5,9 @@
"AgencyTermConfig": { "AgencyTermConfig": {
"dataSource": "vn" "dataSource": "vn"
}, },
"Cmr": {
"dataSource": "vn"
},
"DeliveryPoint": { "DeliveryPoint": {
"dataSource": "vn" "dataSource": "vn"
}, },

View File

@ -0,0 +1,5 @@
module.exports = Self => {
require('../methods/cmr/print')(Self);
require('../methods/cmr/filter')(Self);
require('../methods/cmr/downloadZip')(Self);
};

View File

@ -14,10 +14,6 @@ module.exports = Self => {
require('../methods/route/driverRouteEmail')(Self); require('../methods/route/driverRouteEmail')(Self);
require('../methods/route/sendSms')(Self); require('../methods/route/sendSms')(Self);
require('../methods/route/downloadZip')(Self); require('../methods/route/downloadZip')(Self);
require('../methods/route/cmr')(Self);
require('../methods/route/cmrs')(Self);
require('../methods/route/downloadCmrsZip')(Self);
require('../methods/route/cmrEmail')(Self);
require('../methods/route/getExpeditionSummary')(Self); require('../methods/route/getExpeditionSummary')(Self);
require('../methods/route/getByWorker')(Self); require('../methods/route/getByWorker')(Self);
}; };

View File

@ -41,7 +41,7 @@ module.exports = Self => {
for (const ticketId of tickets) { for (const ticketId of tickets) {
const ticket = await models.Ticket.findById(ticketId, null, myOptions); const ticket = await models.Ticket.findById(ticketId, null, myOptions);
if (ticket.cmrFk) { if (ticket.$cmrFk) {
const hasDmsCmr = await Self.rawSql(` const hasDmsCmr = await Self.rawSql(`
SELECT d.id SELECT d.id
FROM ticketDms td FROM ticketDms td
@ -53,8 +53,7 @@ module.exports = Self => {
if (hasDmsCmr.length) if (hasDmsCmr.length)
throw new UserError('This ticket already has a cmr saved'); throw new UserError('This ticket already has a cmr saved');
ctx.args.id = ticket.cmrFk; const response = await models.Cmr.print(ctx, ticket.$cmrFk, myOptions);
const response = await models.Route.cmr(ctx, myOptions);
const pdfStream = Readable.from(Buffer.from(response[0])); const pdfStream = Readable.from(Buffer.from(response[0]));
const data = { const data = {
workerFk: ctx.req.accessToken.userId, workerFk: ctx.req.accessToken.userId,

View File

@ -151,7 +151,7 @@ module.exports = Self => {
await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, stateCode], myOptions); await Self.rawSql(`CALL vn.ticket_setState(?, ?)`, [ticketId, stateCode], myOptions);
if (ticket?.address()?.province()?.country()?.code != 'ES' && ticket.cmrFk) { if (ticket?.address()?.province()?.country()?.code != 'ES' && ticket.$cmrFk) {
await models.Ticket.saveCmr(ctx, [ticketId], myOptions); await models.Ticket.saveCmr(ctx, [ticketId], myOptions);
externalTickets.push(ticketId); externalTickets.push(ticketId);
} }
@ -161,6 +161,6 @@ module.exports = Self => {
if (tx) await tx.rollback(); if (tx) await tx.rollback();
throw e; throw e;
} }
await models.Route.cmrEmail(ctx, externalTickets); await models.Ticket.sendCmrEmail(ctx, externalTickets);
}; };
}; };

View File

@ -2,7 +2,7 @@ const {Email} = require('vn-print');
const UserError = require('vn-loopback/util/user-error'); const UserError = require('vn-loopback/util/user-error');
module.exports = Self => { module.exports = Self => {
Self.remoteMethodCtx('cmrEmail', { Self.remoteMethodCtx('sendCmrEmail', {
description: 'Sends the email with an cmr attached PDF', description: 'Sends the email with an cmr attached PDF',
accessType: 'WRITE', accessType: 'WRITE',
accepts: [ accepts: [
@ -14,12 +14,12 @@ module.exports = Self => {
} }
], ],
http: { http: {
path: '/cmrEmail', path: '/sendCmrEmail',
verb: 'POST' verb: 'POST'
} }
}); });
Self.cmrEmail = async function(ctx, tickets, options) { Self.sendCmrEmail = async function(ctx, tickets, options) {
const models = Self.app.models; const models = Self.app.models;
const myOptions = {}; const myOptions = {};
let tx; let tx;
@ -70,7 +70,7 @@ module.exports = Self => {
await email.send({ await email.send({
overrideAttachments: true, overrideAttachments: true,
attachments: [{ attachments: [{
filename: `${ticket.cmrFk}.pdf`, filename: `${ticket.$cmrFk}.pdf`,
content: response[0] content: response[0]
}] }]
}); });

View File

@ -40,6 +40,7 @@ module.exports = function(Self) {
require('../methods/ticket/expeditionPalletLabel')(Self); require('../methods/ticket/expeditionPalletLabel')(Self);
require('../methods/ticket/saveSign')(Self); require('../methods/ticket/saveSign')(Self);
require('../methods/ticket/saveCmr')(Self); require('../methods/ticket/saveCmr')(Self);
require('../methods/ticket/sendCmrEmail')(Self);
require('../methods/ticket/invoiceTickets')(Self); require('../methods/ticket/invoiceTickets')(Self);
require('../methods/ticket/invoiceTicketsAndPdf')(Self); require('../methods/ticket/invoiceTicketsAndPdf')(Self);
require('../methods/ticket/docuwareDownload')(Self); require('../methods/ticket/docuwareDownload')(Self);