refactor: refs #7950 Created cmr model #3180

Merged
guillermo merged 6 commits from 7950-cmrModelUnify into dev 2024-11-15 06:07:17 +00:00
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 (758,'Route','canViewAllRoute','READ','ALLOW','ROLE','deliveryAssistant',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 (762,'Route','filter','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 => {
Self.printReport = async function(ctx, id, reportName) {
const args = Object.assign({}, ctx.args);
const args = Object.assign({id}, ctx.args);
guillermo marked this conversation as resolved
Review

bajar el id a params.

bajar el id a params.
Review

He revisado el código, y habiamos visto printEmail, en printReport no se hace.
Por lo que el cambio es correcto.

Además, he probado a poner params.id = id; y da error, ya que no es lo mismo.

He revisado el código, y habiamos visto printEmail, en printReport no se hace. Por lo que el cambio es correcto. Además, he probado a poner `params.id = id;` y da error, ya que no es lo mismo.
const params = {lang: ctx.req.getLocale()};
delete args.ctx;

View File

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

View File

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

View File

@ -1,6 +1,6 @@
module.exports = Self => {
Self.remoteMethodCtx('cmr', {
description: 'Returns the cmr',
Self.remoteMethodCtx('print', {
description: 'Returns the cmr pdf',
accessType: 'READ',
accepts: [
{
@ -27,11 +27,11 @@ module.exports = Self => {
}
],
http: {
path: '/:id/cmr',
path: '/:id/print',
verb: 'GET'
},
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;
describe('route downloadCmrsZip()', () => {
describe('route downloadZip()', () => {
it('should create a zip file with the given cmr ids', async() => {
const tx = await models.Route.beginTransaction({});
const ctx = {
@ -13,7 +13,7 @@ describe('route downloadCmrsZip()', () => {
};
let cmrs = '1,2';
try {
const stream = await models.Route.downloadCmrsZip(ctx, cmrs);
const stream = await models.Cmr.downloadZip(ctx, cmrs);
expect(stream[0]).toBeDefined();
await tx.rollback();

View File

@ -5,6 +5,9 @@
"AgencyTermConfig": {
"dataSource": "vn"
},
"Cmr": {
"dataSource": "vn"
},
"DeliveryPoint": {
"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/sendSms')(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/getByWorker')(Self);
};

View File

@ -41,7 +41,7 @@ module.exports = Self => {
for (const ticketId of tickets) {
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
if (ticket.cmrFk) {
if (ticket.$cmrFk) {
const hasDmsCmr = await Self.rawSql(`
SELECT d.id
FROM ticketDms td
@ -53,8 +53,7 @@ module.exports = Self => {
if (hasDmsCmr.length)
throw new UserError('This ticket already has a cmr saved');
ctx.args.id = ticket.cmrFk;
const response = await models.Route.cmr(ctx, myOptions);
const response = await models.Cmr.print(ctx, ticket.$cmrFk, myOptions);
jgallego marked this conversation as resolved Outdated

el $ no el solem gastar, si no te un objectiu clar jo meu pensaria be antes de gastarlo, @alexm com ho veus ?

el $ no el solem gastar, si no te un objectiu clar jo meu pensaria be antes de gastarlo, @alexm com ho veus ?

El problema es que ara com es un model, te que accedir de una altra forma, ticket.cmrFk ja no val.

Es pot gastar ticket.cmrFk().id, pero ticket.$cmrFk es mes curt

El problema es que ara com es un model, te que accedir de una altra forma, ticket.cmrFk ja no val. Es pot gastar ticket.cmrFk().id, pero ticket.$cmrFk es mes curt
Outdated
Review

Mai havia vist ticket.$cmrFk si funciona i es natiu de loopback supose que abant

Mai havia vist ticket.$cmrFk si funciona i es natiu de loopback supose que abant
const pdfStream = Readable.from(Buffer.from(response[0]));
guillermo marked this conversation as resolved Outdated

ho he comentat en Juan i m'ha dit lo mateix, que si es natiu de loopback avant.
Pero que l'objecte ctx no hi ha que alterarlo.

ho he comentat en Juan i m'ha dit lo mateix, que si es natiu de loopback avant. **Pero** que l'objecte ctx no hi ha que alterarlo.

Entonces com li pase el id? Es que es un param que va per URL, crec que en el seu moment no vaig trovar altra forma...

Entonces com li pase el id? Es que es un param que va per URL, crec que en el seu moment no vaig trovar altra forma...
Outdated
Review

En este cas seria await models.Cmr.print(ctx, ticket.$cmrFk);
Son els parametres que te el back 90e7ab1ec1/modules/route/back/methods/cmr/print.js (L36)

En este cas seria `await models.Cmr.print(ctx, ticket.$cmrFk); ` Son els parametres que te el back https://gitea.verdnatura.es/verdnatura/salix/src/commit/90e7ab1ec1d18366c7b1a394ddfaa03e90c01d52/modules/route/back/methods/cmr/print.js#L36

Ya lo comprobé en su momento y no pude, lo he vuelto a comprobar por si acaso y lo mismo:

const response = await models.Cmr.print(ctx, ticket.$cmrFk, myOptions);

1) ticket saveCmr() should save cmr
  - Error: Required properties not found [id]
Ya lo comprobé en su momento y no pude, lo he vuelto a comprobar por si acaso y lo mismo: const response = await models.Cmr.print(ctx, ticket.$cmrFk, myOptions); ``` 1) ticket saveCmr() should save cmr - Error: Required properties not found [id] ```
Outdated
Review

Se pot posar en 6ab431f8ef/loopback/common/methods/vn-model/printService.js (L5)

const args = Object.assign({id}, ctx.args);

Se pot posar en https://gitea.verdnatura.es/verdnatura/salix/src/commit/6ab431f8efec6e80495451332064c6eeb8b6684f/loopback/common/methods/vn-model/printService.js#L5 `const args = Object.assign({id}, ctx.args);`

Cuidao @guillermo el assign tal com l'has posat actualiza l'objecte ctx, que es el que no volem.
Amb la proposata d'Alex es crea uno nou, gasta ixa opcio.

Cuidao @guillermo el assign tal com l'has posat actualiza l'objecte ctx, que es el que no volem. Amb la proposata d'Alex es crea uno nou, gasta ixa opcio.
const data = {
workerFk: ctx.req.accessToken.userId,

View File

@ -151,7 +151,7 @@ module.exports = Self => {
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);
externalTickets.push(ticketId);
}
@ -161,6 +161,6 @@ module.exports = Self => {
if (tx) await tx.rollback();
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');
module.exports = Self => {
Self.remoteMethodCtx('cmrEmail', {
Self.remoteMethodCtx('sendCmrEmail', {
description: 'Sends the email with an cmr attached PDF',
accessType: 'WRITE',
accepts: [
@ -14,12 +14,12 @@ module.exports = Self => {
}
],
http: {
path: '/cmrEmail',
path: '/sendCmrEmail',
verb: 'POST'
}
});
Self.cmrEmail = async function(ctx, tickets, options) {
Self.sendCmrEmail = async function(ctx, tickets, options) {
const models = Self.app.models;
const myOptions = {};
let tx;
@ -70,7 +70,7 @@ module.exports = Self => {
await email.send({
overrideAttachments: true,
attachments: [{
filename: `${ticket.cmrFk}.pdf`,
filename: `${ticket.$cmrFk}.pdf`,
content: response[0]
}]
});

View File

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