Merge branch 'master' into ticket216260-buy_recalcPrices
gitea/salix/pipeline/pr-master This commit looks good Details

This commit is contained in:
Robert Ferrús 2024-09-05 05:22:02 +00:00
commit 777eba8c53
8 changed files with 82 additions and 113 deletions

View File

@ -1,18 +1,23 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceSerial`(vClientFk INT, vCompanyFk INT, vType CHAR(15)) CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceSerial`(
vClientFk INT,
vCompanyFk INT,
vType CHAR(15)
)
RETURNS char(2) CHARSET utf8mb3 COLLATE utf8mb3_general_ci RETURNS char(2) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
DETERMINISTIC DETERMINISTIC
BEGIN BEGIN
/** /**
* Obtiene la serie de una factura * Obtiene la serie de una factura
* dependiendo del area del cliente. * dependiendo del area del cliente.
* *
* @param vClientFk Id del cliente * @param vClientFk Id del cliente
* @param vCompanyFk Id de la empresa * @param vCompanyFk Id de la empresa
* @param vType Tipo de factura ['global','multiple','quick'] * @param vType Tipo de factura (vn.invoiceOutSerial.type[ENUM])
* @return vSerie de la factura * @return vSerie de la factura
*/ */
DECLARE vTaxArea VARCHAR(25) COLLATE utf8mb3_general_ci; DECLARE vTaxArea VARCHAR(25) COLLATE utf8mb3_general_ci;
DECLARE vTransactionCode INT(2);
DECLARE vSerie CHAR(2); DECLARE vSerie CHAR(2);
IF (SELECT hasInvoiceSimplified FROM client WHERE id = vClientFk) THEN IF (SELECT hasInvoiceSimplified FROM client WHERE id = vClientFk) THEN
@ -23,9 +28,15 @@ BEGIN
FROM client FROM client
WHERE id = vClientFk; WHERE id = vClientFk;
SELECT code INTO vSerie SELECT CodigoTransaccion INTO vTransactionCode
FROM invoiceOutSerial FROM taxArea
WHERE `type` = vType AND taxAreaFk = vTaxArea; WHERE code = vTaxArea;
SELECT ios.code INTO vSerie
FROM invoiceOutSerial ios
JOIN taxArea ta ON ta.code = ios.taxAreaFk
WHERE ios.`type` = vType
AND ta.CodigoTransaccion = vTransactionCode;
RETURN vSerie; RETURN vSerie;
END$$ END$$

View File

@ -23,43 +23,36 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DELETE tt.* CREATE OR REPLACE TEMPORARY TABLE tmp.sale_problems (
FROM tmp.sale_getProblems tt ticketFk INT(11),
JOIN ticketObservation tto ON tto.ticketFk = tt.ticketFk saleFk INT(11),
JOIN observationType ot ON ot.id = tto.observationTypeFk isFreezed INTEGER(1) DEFAULT 0,
WHERE ot.code = 'administrative' risk DECIMAL(10,1) DEFAULT 0,
AND tto.description = 'Miriam'; hasRisk TINYINT(1) DEFAULT 0,
hasHighRisk TINYINT(1) DEFAULT 0,
hasTicketRequest INTEGER(1) DEFAULT 0,
itemShortage VARCHAR(255),
isTaxDataChecked INTEGER(1) DEFAULT 1,
itemDelay VARCHAR(255),
itemLost VARCHAR(255),
hasComponentLack INTEGER(1),
hasRounding VARCHAR(255),
isTooLittle BOOL DEFAULT FALSE,
isVip BOOL DEFAULT FALSE,
PRIMARY KEY (ticketFk, saleFk)
) ENGINE = MEMORY;
CREATE OR REPLACE TEMPORARY TABLE tmp.sale_problems ( INSERT INTO tmp.sale_problems(ticketFk,
ticketFk INT(11), saleFk,
saleFk INT(11), isFreezed,
isFreezed INTEGER(1) DEFAULT 0, risk,
risk DECIMAL(10,1) DEFAULT 0, hasRisk,
hasRisk TINYINT(1) DEFAULT 0, hasHighRisk,
hasHighRisk TINYINT(1) DEFAULT 0, hasTicketRequest,
hasTicketRequest INTEGER(1) DEFAULT 0, isTaxDataChecked,
itemShortage VARCHAR(255), hasComponentLack,
isTaxDataChecked INTEGER(1) DEFAULT 1, hasRounding,
itemDelay VARCHAR(255), isTooLittle)
itemLost VARCHAR(255),
hasComponentLack INTEGER(1),
hasRounding VARCHAR(255),
isTooLittle BOOL DEFAULT FALSE,
isVip BOOL DEFAULT FALSE,
PRIMARY KEY (ticketFk, saleFk)
) ENGINE = MEMORY;
INSERT INTO tmp.sale_problems(ticketFk,
saleFk,
isFreezed,
risk,
hasRisk,
hasHighRisk,
hasTicketRequest,
isTaxDataChecked,
hasComponentLack,
hasRounding,
isTooLittle)
SELECT sgp.ticketFk, SELECT sgp.ticketFk,
s.id, s.id,
IF(FIND_IN_SET('isFreezed', t.problem), TRUE, FALSE) isFreezed, IF(FIND_IN_SET('isFreezed', t.problem), TRUE, FALSE) isFreezed,

View File

@ -0,0 +1,2 @@
-- Place your SQL code here
ALTER TABLE dipole.expedition_PrintOut MODIFY COLUMN isPrinted int(11) DEFAULT 0 NOT NULL COMMENT '0.- Not Printed ; 1.- Printed; 2.- Selected ; 3.- Error ; 4.- Waiting to be printed';

View File

@ -138,9 +138,9 @@ module.exports = Self => {
? {'ii.id': value} ? {'ii.id': value}
: {'s.name': {like: `%${value}%`}}; : {'s.name': {like: `%${value}%`}};
case 'from': case 'from':
return {'ii.created': {gte: value}}; return {'ii.issued': {gte: value}};
case 'to': case 'to':
return {'ii.created': {lte: value}}; return {'ii.issued': {lte: value}};
case 'fi': case 'fi':
return {'s.nif': value}; return {'s.nif': value};
case 'account': case 'account':
@ -173,7 +173,6 @@ module.exports = Self => {
const stmt = new ParameterizedSQL( const stmt = new ParameterizedSQL(
`SELECT `SELECT
ii.id, ii.id,
ii.serialNumber,
ii.serial, ii.serial,
ii.issued, ii.issued,
ii.isBooked, ii.isBooked,

View File

@ -27,10 +27,12 @@ module.exports = Self => {
const [result] = await Self.rawSql(` const [result] = await Self.rawSql(`
SELECT iit.*, SELECT iit.*,
SUM(iidd.amount) totalDueDay SUM(iidd.amount) totalDueDay,
SUM(iidd.foreignValue) totalDueDayForeignValue
FROM vn.invoiceIn ii FROM vn.invoiceIn ii
LEFT JOIN ( LEFT JOIN (
SELECT SUM(iit.taxableBase) totalTaxableBase, SELECT SUM(iit.taxableBase) totalTaxableBase,
SUM(iit.foreignValue) totalTaxableBaseForeignValue,
CAST( CAST(
SUM(IFNULL(iit.taxableBase * (1 + (ti.PorcentajeIva / 100)), iit.taxableBase)) SUM(IFNULL(iit.taxableBase * (1 + (ti.PorcentajeIva / 100)), iit.taxableBase))
AS DECIMAL(10, 2) AS DECIMAL(10, 2)

View File

@ -47,29 +47,6 @@ describe('InvoiceIn filter()', () => {
} }
}); });
it('should return the invoice in matching the serial number', async() => {
const tx = await models.InvoiceIn.beginTransaction({});
const options = {transaction: tx};
try {
const ctx = {
args: {
serialNumber: '1002',
}
};
const result = await models.InvoiceIn.filter(ctx, {}, options);
expect(result.length).toEqual(1);
expect(result[0].serialNumber).toEqual(1002);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it('should return the invoice in matching the account', async() => { it('should return the invoice in matching the account', async() => {
const tx = await models.InvoiceIn.beginTransaction({}); const tx = await models.InvoiceIn.beginTransaction({});
const options = {transaction: tx}; const options = {transaction: tx};
@ -158,7 +135,7 @@ describe('InvoiceIn filter()', () => {
const result = await models.InvoiceIn.filter(ctx, {}, options); const result = await models.InvoiceIn.filter(ctx, {}, options);
expect(result.length).toEqual(5); expect(result.length).toEqual(6);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {

View File

@ -13,23 +13,20 @@ module.exports = async function(ctx, Self, tickets, reqArgs = {}) {
const failedtickets = []; const failedtickets = [];
for (const ticket of tickets) { for (const ticket of tickets) {
try { try {
await Self.app.models.InvoiceOut.getSerial(ticket.clientFk, ticket.companyFk, ticket.addressFk, 'M'); await Self.app.models.InvoiceOut.getSerial(ticket.clientFk, ticket.companyFk, ticket.addressFk, 'multiple');
await Self.rawSql( await Self.rawSql(
`CALL vn.ticket_closeByTicket(?)`, `CALL vn.ticket_closeByTicket(?)`,
[ticket.id], [ticket.id],
{userId} {userId}
); );
const [invoiceOut] = await Self.rawSql( const [invoiceOut] = await Self.rawSql(`
`
SELECT io.id, io.ref, io.serial, cny.code companyCode, io.issued SELECT io.id, io.ref, io.serial, cny.code companyCode, io.issued
FROM ticket t FROM ticket t
JOIN invoiceOut io ON io.ref = t.refFk JOIN invoiceOut io ON io.ref = t.refFk
JOIN company cny ON cny.id = io.companyFk JOIN company cny ON cny.id = io.companyFk
WHERE t.id = ? WHERE t.id = ?
`, `, [ticket.id]);
[ticket.id],
);
const mailOptions = { const mailOptions = {
overrideAttachments: true, overrideAttachments: true,
@ -104,17 +101,14 @@ module.exports = async function(ctx, Self, tickets, reqArgs = {}) {
} }
// Incoterms authorization // Incoterms authorization
const [{firstOrder}] = await Self.rawSql( const [{firstOrder}] = await Self.rawSql(`
` SELECT COUNT(*) as firstOrder
SELECT COUNT(*) as firstOrder FROM ticket t
FROM ticket t JOIN client c ON c.id = t.clientFk
JOIN client c ON c.id = t.clientFk WHERE t.clientFk = ?
WHERE t.clientFk = ? AND NOT t.isDeleted
AND NOT t.isDeleted AND c.isVies
AND c.isVies `, [ticket.clientFk]);
`,
[ticket.clientFk],
);
if (firstOrder == 1) { if (firstOrder == 1) {
const args = { const args = {
@ -129,26 +123,17 @@ module.exports = async function(ctx, Self, tickets, reqArgs = {}) {
const email = new Email('incoterms-authorization', args); const email = new Email('incoterms-authorization', args);
await email.send(); await email.send();
const [sample] = await Self.rawSql( const [sample] = await Self.rawSql(`
`SELECT id SELECT id
FROM sample FROM sample
WHERE code = 'incoterms-authorization' WHERE code = 'incoterms-authorization'
`, `);
);
await Self.rawSql( await Self.rawSql(`
`
INSERT INTO clientSample (clientFk, typeFk, companyFk) VALUES(?, ?, ?) INSERT INTO clientSample (clientFk, typeFk, companyFk) VALUES(?, ?, ?)
`, `, [ticket.clientFk, sample.id, ticket.companyFk], {userId});
[ticket.clientFk, sample.id, ticket.companyFk],
{userId},
);
} }
} catch (error) { } catch (error) {
await Self.rawSql(`
INSERT INTO util.debug (variable, value)
VALUES ('invoicingTicketError', ?)
`, [ticket.id + ' - ' + error]);
// Domain not found // Domain not found
if (error.responseCode == 450) { if (error.responseCode == 450) {
await invalidEmail(ticket); await invalidEmail(ticket);

View File

@ -18,7 +18,7 @@ SELECT m.code mandateCode,
WHERE m.companyFk = ? WHERE m.companyFk = ?
AND m.finished IS NULL AND m.finished IS NULL
AND c.id = ? AND c.id = ?
AND mt.name = 'CORE' AND mt.code = 'CORE'
AND adt.description = 'Referencia Remesas' AND adt.description = 'Referencia Remesas'
GROUP BY m.id, ad.value GROUP BY m.id, ad.value
ORDER BY m.created DESC ORDER BY m.created DESC