#7663 setWeight #2817

Merged
jorgep merged 24 commits from 7663-setWeight into dev 2024-09-11 07:40:32 +00:00
5 changed files with 89 additions and 2 deletions
Showing only changes of commit 57f6c6d9a1 - Show all commits

View File

@ -0,0 +1,9 @@
-- Place your SQL code here
INSERT INTO salix.ACL
SET model = 'Ticket',
property = 'setWeight',
accessType = 'WRITE',
permission = 'ALLOW',
principalType = 'ROLE',
principalId = 'salesPerson';

View File

@ -368,5 +368,6 @@
"Payment method is required": "El método de pago es obligatorio",
"Cannot send mail": "Não é possível enviar o email",
"CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos",
"The sale not exists in the item shelving": "La venta no existe en la estantería del artículo"
"The sale not exists in the item shelving": "La venta no existe en la estantería del artículo",
"Weight already set": "El peso ya está establecido"
}

View File

@ -0,0 +1,75 @@
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethodCtx('setWeight', {
description: 'Sets weight of a ticket',
accessType: 'WRITE',
accepts: [{
arg: 'id',
type: 'number',
required: true,
description: 'The ticket id',
http: {source: 'path'}
}, {
arg: 'weight',
type: 'number',
required: true,
description: 'The weight value',
}],
http: {
path: `/:id/setWeight`,
verb: 'POST'
}
});
Self.setWeight = async(ctx, ticketId, weight, invoiceable, options) => {
const models = Self.app.models;
const userId = ctx.req.accessToken.userId;
const myOptions = {userId};
let tx;
if (typeof options == 'object') Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
if (ticket.weight) throw new UserError('Weight already set');
const canEdit = await models.ACL.checkAccessAcl(ctx, 'Ticket', 'updateAttributes');
const ticket = await Self.findById(ticketId, null, myOptions);
const client = await models.Client.findById(ticket.clientFk, {
include: {relation: 'salesPersonUser'}},
alexm marked this conversation as resolved
Review

Esta comprobación la han pedido?

Esta comprobación la han pedido?
Review

Sí, me dijo que solo se debe de poder establecer el peso del ticket si no tiene.

Sí, me dijo que solo se debe de poder establecer el peso del ticket si no tiene.
myOptions);
if (!canEdit) {
const salesPersonUser = client.salesPersonUser();
const workerDepartments = await models.WorkerDepartment.find({
include: {relation: 'department'},
where: {workerFk: {inq: [userId, salesPersonUser.id]}}
}, myOptions);
if (workerDepartments[0].departmentFk != workerDepartments[1].departmentFk)
throw new UserError('You don\'t have enough privileges');
}
await ticket.updateAttribute('weight', weight, myOptions);
const packedState = await models.State.findOne({where: {code: 'PACKED'}}, myOptions);
const ticketState = await models.TicketState.findOne({where: {ticketFk: ticketId}}, myOptions);
jorgep marked this conversation as resolved Outdated
Outdated
Review

Yo daria un error mas especifico diciendo que no pueden pq no son del mismo equipo

Yo daria un error mas especifico diciendo que no pueden pq no son del mismo equipo
const [{taxArea}] = await Self.rawSql('SELECT clientTaxArea(?,?) taxArea',
[ticket.clientFk, ticket.warehouseFk], myOptions);
if (ticketState.alertLevel >= packedState.alertLevel && taxArea == 'WORLD' && client.hasDailyInvoice)
await Self.invoiceTicketsAndPdf(ctx, [ticketId], null, myOptions);
if (tx) await tx.commit();
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};

View File

@ -47,4 +47,5 @@ module.exports = function(Self) {
require('../methods/ticket/docuwareDownload')(Self);
require('../methods/ticket/myLastModified')(Self);
require('../methods/ticket/clone')(Self);
require('../methods/ticket/setWeight')(Self);
};

View File

@ -3,4 +3,5 @@ Address mobile: Móv. consignatario
Client phone: Tel. cliente
Client mobile: Móv. cliente
Go to the ticket: Ir al ticket
Change state: Cambiar estado
Change state: Cambiar estado
Weight: Peso