diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js index 92d1925995..6ea412a7d6 100644 --- a/modules/ticket/back/methods/ticket/closeAll.js +++ b/modules/ticket/back/methods/ticket/closeAll.js @@ -37,35 +37,52 @@ module.exports = Self => { const toDate = Date.vnNew(); toDate.setHours(0, 0, 0, 0); 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(` + DROP TEMPORARY TABLE IF EXISTS tmp.ticket_close; CREATE TEMPORARY TABLE tmp.ticket_close ENGINE = MEMORY - SELECT - DISTINCT t.id ticketFk, - t.clientFk, - c.name clientName, - c.email recipient, - eu.email salesPersonEmail, - t.addressFk, - c.hasDailyInvoice, - c.hasToInvoiceByAddress, - t.totalWithVat, - t.companyFk + WITH wTickets AS( + SELECT t.id ticketFk FROM ticket t - 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 - 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')) - AND t.shipped BETWEEN ? - INTERVAL tc.closureDaysAgo DAY AND util.dayEnd(?) - AND t.refFk IS NULL; - CALL ticket_close(); - `, [toDate, toDate], myOptions); + 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, + c.name clientName, + c.email recipient, + eu.email salesPersonEmail, + t.addressFk, + c.hasDailyInvoice, + c.hasToInvoiceByAddress, + t.totalWithVat, + t.companyFk + 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 client c ON c.id = t.clientFk + LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk + WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered')); + CALL ticket_close(); + `, [dateFrom, dateTo], myOptions); await Self.rawSql(` UPDATE ticket t @@ -76,11 +93,11 @@ module.exports = Self => { JOIN ticketConfig tc ON TRUE LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id 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 NOT t.packages AND tob.id IS NULL - AND t.routeFk`, [toDate, toDate], myOptions); + AND t.routeFk`, [dateFrom, dateTo], myOptions); const [clients] = await Self.rawSql(` SELECT clientFk clientId,