refs #7019 fix(createManualInvoice): add throw error
gitea/salix/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Alex Moreno 2024-03-18 14:20:05 +01:00
parent 3aa81d27e7
commit 517aeebe8b
2 changed files with 28 additions and 30 deletions

View File

@ -348,5 +348,6 @@
"You are not allowed to modify the alias": "No estás autorizado a modificar el alias",
"The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas",
"This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
"They're not your subordinate": "No es tu subordinado/a."
"They're not your subordinate": "No es tu subordinado/a.",
"Select ticket or client": "Elija un ticket o un client"
}

View File

@ -46,12 +46,11 @@ module.exports = Self => {
}
});
Self.createManualInvoice = async(ctx, options) => {
Self.createManualInvoice = async(ctx, clientFk, ticketFk, maxShipped, serial, taxArea, reference, options) => {
if (!clientFk && !ticketFk) throw new UserError(`Select ticket or client`);
const models = Self.app.models;
const args = ctx.args;
let tx;
const myOptions = {userId: ctx.req.accessToken.userId};
let tx;
if (typeof options == 'object')
Object.assign(myOptions, options);
@ -61,18 +60,15 @@ module.exports = Self => {
myOptions.transaction = tx;
}
const ticketId = args.ticketFk;
let clientId = args.clientFk;
let maxShipped = args.maxShipped;
let companyId;
let newInvoice;
let query;
try {
if (ticketId) {
const ticket = await models.Ticket.findById(ticketId, null, myOptions);
if (ticketFk) {
const ticket = await models.Ticket.findById(ticketFk, null, myOptions);
const company = await models.Company.findById(ticket.companyFk, null, myOptions);
clientId = ticket.clientFk;
clientFk = ticket.clientFk;
maxShipped = ticket.shipped;
companyId = ticket.companyFk;
@ -85,7 +81,7 @@ module.exports = Self => {
throw new UserError(`A ticket with an amount of zero can't be invoiced`);
// Validates ticket nagative base
const hasNegativeBase = await getNegativeBase(maxShipped, clientId, companyId, myOptions);
const hasNegativeBase = await getNegativeBase(maxShipped, clientFk, companyId, myOptions);
if (hasNegativeBase && company.code == 'VNL')
throw new UserError(`A ticket with a negative base can't be invoiced`);
} else {
@ -95,7 +91,7 @@ module.exports = Self => {
const company = await models.Ticket.findOne({
fields: ['companyFk'],
where: {
clientFk: clientId,
clientFk: clientFk,
shipped: {lte: maxShipped}
}
}, myOptions);
@ -103,7 +99,7 @@ module.exports = Self => {
}
// Validate invoiceable client
const isClientInvoiceable = await isInvoiceable(clientId, myOptions);
const isClientInvoiceable = await isInvoiceable(clientFk, myOptions);
if (!isClientInvoiceable)
throw new UserError(`This client is not invoiceable`);
@ -114,27 +110,27 @@ module.exports = Self => {
if (maxShipped >= tomorrow)
throw new UserError(`Can't invoice to future`);
const maxInvoiceDate = await getMaxIssued(args.serial, companyId, myOptions);
const maxInvoiceDate = await getMaxIssued(serial, companyId, myOptions);
if (Date.vnNew() < maxInvoiceDate)
throw new UserError(`Can't invoice to past`);
if (ticketId) {
if (ticketFk) {
query = `CALL invoiceOut_newFromTicket(?, ?, ?, ?, @newInvoiceId)`;
await Self.rawSql(query, [
ticketId,
args.serial,
args.taxArea,
args.reference
ticketFk,
serial,
taxArea,
reference
], myOptions);
} else {
query = `CALL invoiceOut_newFromClient(?, ?, ?, ?, ?, ?, @newInvoiceId)`;
await Self.rawSql(query, [
clientId,
args.serial,
clientFk,
serial,
maxShipped,
companyId,
args.taxArea,
args.reference
taxArea,
reference
], myOptions);
}
@ -146,26 +142,27 @@ module.exports = Self => {
throw e;
}
if (newInvoice.id)
await Self.createPdf(ctx, newInvoice.id);
if (!newInvoice.id) throw new UserError(`...`);
await Self.createPdf(ctx, newInvoice.id);
return newInvoice;
};
async function isInvoiceable(clientId, options) {
async function isInvoiceable(clientFk, options) {
const models = Self.app.models;
const query = `SELECT (hasToInvoice AND isTaxDataChecked) AS invoiceable
FROM client
WHERE id = ?`;
const [result] = await models.InvoiceOut.rawSql(query, [clientId], options);
const [result] = await models.InvoiceOut.rawSql(query, [clientFk], options);
return result.invoiceable;
}
async function getNegativeBase(maxShipped, clientId, companyId, options) {
async function getNegativeBase(maxShipped, clientFk, companyId, options) {
const models = Self.app.models;
await models.InvoiceOut.rawSql('CALL invoiceOut_exportationFromClient(?,?,?)',
[maxShipped, clientId, companyId], options
[maxShipped, clientFk, companyId], options
);
const query = 'SELECT vn.hasAnyNegativeBase() AS base';
const [result] = await models.InvoiceOut.rawSql(query, [], options);