fix: update closeAll method to improve date handling and ticket selection logic
gitea/salix/pipeline/head This commit looks good Details
gitea/salix/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Carlos Andrés 2025-02-13 13:28:14 +01:00
parent cd258eb44e
commit b2071994da
1 changed files with 41 additions and 24 deletions

View File

@ -37,13 +37,33 @@ module.exports = Self => {
const toDate = Date.vnNew(); const toDate = Date.vnNew();
toDate.setHours(0, 0, 0, 0); toDate.setHours(0, 0, 0, 0);
toDate.setDate(toDate.getDate() - 1); toDate.setDate(toDate.getDate() - 1);
const [{dateFrom, dateTo}] = await Self.rawSql(`
SELECT ? - INTERVAL closureDaysAgo DAY dateFrom,
util.dayEnd(?) dateTo
FROM ticketConfig
LIMIT 1`, [toDate, toDate], myOptions);
await Self.rawSql(` await Self.rawSql(`
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_close; DROP TEMPORARY TABLE IF EXISTS tmp.ticket_close;
CREATE TEMPORARY TABLE tmp.ticket_close CREATE TEMPORARY TABLE tmp.ticket_close
ENGINE = MEMORY ENGINE = MEMORY
SELECT WITH wTickets AS(
DISTINCT t.id ticketFk, SELECT t.id ticketFk
FROM ticket t
JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission
WHERE t.shipped BETWEEN ? AND ?
AND t.refFk IS NULL
), wTicketsTracking AS(
SELECT wt.ticketFk, MAX(tt.id) maxTracking
FROM wTickets wt
JOIN ticketTracking tt ON tt.ticketFk = wt.ticketFk
GROUP BY tt.ticketFk
), wTicketsLastState AS(
SELECT wt.ticketFk, tt.stateFk
FROM wTicketsTracking wt
JOIN ticketTracking tt ON tt.id = wt.maxTracking
) SELECT tls.ticketFk,
t.clientFk, t.clientFk,
c.name clientName, c.name clientName,
c.email recipient, c.email recipient,
@ -53,19 +73,16 @@ module.exports = Self => {
c.hasToInvoiceByAddress, c.hasToInvoiceByAddress,
t.totalWithVat, t.totalWithVat,
t.companyFk t.companyFk
FROM ticket t FROM wTicketsLastState tls
JOIN ticket t ON t.id = tls.ticketFk
JOIN state s ON s.id =tls.stateFk
JOIN alertLevel al ON al.id = s.alertLevel
JOIN agencyMode am ON am.id = t.agencyModeFk JOIN agencyMode am ON am.id = t.agencyModeFk
JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission
JOIN ticketState ts ON ts.ticketFk = t.id
JOIN alertLevel al ON al.id = ts.alertLevel
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
JOIN ticketConfig tc ON TRUE WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'));
WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'))
AND t.shipped BETWEEN ? - INTERVAL tc.closureDaysAgo DAY AND util.dayEnd(?)
AND t.refFk IS NULL;
CALL ticket_close(); CALL ticket_close();
`, [toDate, toDate], myOptions); `, [dateFrom, dateTo], myOptions);
await Self.rawSql(` await Self.rawSql(`
UPDATE ticket t UPDATE ticket t
@ -76,11 +93,11 @@ module.exports = Self => {
JOIN ticketConfig tc ON TRUE JOIN ticketConfig tc ON TRUE
LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id
SET t.routeFk = NULL SET t.routeFk = NULL
WHERE t.shipped BETWEEN ? - INTERVAL tc.closureDaysAgo DAY AND util.dayEnd(?) WHERE t.shipped BETWEEN ? AND ?
AND al.code NOT IN ('DELIVERED', 'PACKED') AND al.code NOT IN ('DELIVERED', 'PACKED')
AND NOT t.packages AND NOT t.packages
AND tob.id IS NULL AND tob.id IS NULL
AND t.routeFk`, [toDate, toDate], myOptions); AND t.routeFk`, [dateFrom, dateTo], myOptions);
const [clients] = await Self.rawSql(` const [clients] = await Self.rawSql(`
SELECT clientFk clientId, SELECT clientFk clientId,