Merge branch 'test' into 8227-roadmapChanges
gitea/salix/pipeline/pr-test This commit looks good
Details
gitea/salix/pipeline/pr-test This commit looks good
Details
This commit is contained in:
commit
aca49505bd
|
@ -33,25 +33,52 @@ module.exports = Self => {
|
||||||
const emailUser =
|
const emailUser =
|
||||||
await Self.app.models.EmailUser.findById(userId, {fields: ['email']});
|
await Self.app.models.EmailUser.findById(userId, {fields: ['email']});
|
||||||
|
|
||||||
let html = `<h2>Motivo: ${reason}</h2>`;
|
const tableStyle = 'width:100%; border-collapse: collapse; text-align: left;';
|
||||||
html += `<h3>Usuario: ${userId} ${emailUser.email}</h3>`;
|
const thStyle = 'padding: 8px; border: 1px solid #ddd; background-color: #f4f4f4;';
|
||||||
html += `<h3>Additional Data:</h3>`;
|
const tdStyle = 'padding: 8px; border: 1px solid #ddd;';
|
||||||
html += '<ul>';
|
const tdBoldStyle = 'padding: 8px; border: 1px solid #ddd; font-weight: bold;';
|
||||||
|
const subTdStyle = 'padding: 6px; border: 1px solid #ddd;';
|
||||||
|
const subTdBoldStyle = 'padding: 6px; border: 1px solid #ddd; font-weight: bold;';
|
||||||
|
|
||||||
|
let html = `
|
||||||
|
<h2>Motivo: ${reason}</h2>
|
||||||
|
<h3>Usuario: ${userId} ${emailUser.email}</h3>
|
||||||
|
<h3>Additional Data:</h3>
|
||||||
|
<table style="${tableStyle}">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="${thStyle}">Clave</th><th style="${thStyle}">Valor</th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>`;
|
||||||
for (const [key, val] of Object.entries(additionalData)) {
|
for (const [key, val] of Object.entries(additionalData)) {
|
||||||
if (key !== 'config') html += `<li>${key}: ${parse(val)}</li>`;
|
if (key !== 'config') {
|
||||||
else {
|
html += `<tr>
|
||||||
html += `<li>${key}:</li><ul style="list-style-type: square;">`;
|
<td style="${tdBoldStyle}">${key}</td>
|
||||||
for (const [confKey, confVal] of Object.entries(val))
|
<td style="${tdStyle}">${parse(val)}</td>
|
||||||
html += `<li>${confKey}: ${parse(confVal)}</li>`;
|
</tr>`;
|
||||||
html += '</ul>';
|
} else {
|
||||||
|
html += `<tr>
|
||||||
|
<td style="${tdBoldStyle}">${key}</td>
|
||||||
|
<td style="${tdStyle}">
|
||||||
|
<table style="${tableStyle}">
|
||||||
|
<tbody>`;
|
||||||
|
for (const [confKey, confVal] of Object.entries(val)) {
|
||||||
|
html += `<tr>
|
||||||
|
<td style="${subTdBoldStyle}">${confKey}</td>
|
||||||
|
<td style="${subTdStyle}">${parse(confVal)}</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
html += `</tbody></table></td></tr>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
html += '</ul>';
|
html += `</tbody></table>`;
|
||||||
|
|
||||||
const {message, path, name} = additionalData;
|
const {message, path, name} = additionalData;
|
||||||
|
const err = name && message ? `${name}: ${message}` : name || message || '';
|
||||||
|
|
||||||
await smtp.send({
|
await smtp.send({
|
||||||
to: `${config.app.reportEmail}, ${emailUser.email}`,
|
to: `${config.app.reportEmail}, ${emailUser.email}`,
|
||||||
subject: `[Support-Salix] ${path} ${name}: ${message}`,
|
subject: `[Support-Salix] ${path.split('?')[0]} ${err}`,
|
||||||
html
|
html
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,15 +9,11 @@ BEGIN
|
||||||
*/
|
*/
|
||||||
DECLARE vDone BOOL;
|
DECLARE vDone BOOL;
|
||||||
DECLARE vClientFk INT;
|
DECLARE vClientFk INT;
|
||||||
DECLARE vCurTicketFk INT;
|
DECLARE vCurTicketFk INT;
|
||||||
DECLARE vIsTaxDataChecked BOOL;
|
|
||||||
DECLARE vCompanyFk INT;
|
|
||||||
DECLARE vShipped DATE;
|
|
||||||
DECLARE vNewInvoiceId INT;
|
DECLARE vNewInvoiceId INT;
|
||||||
DECLARE vHasDailyInvoice BOOL;
|
DECLARE vHasDailyInvoice BOOL;
|
||||||
DECLARE vWithPackage BOOL;
|
DECLARE vWithPackage BOOL;
|
||||||
DECLARE vHasToInvoice BOOL;
|
DECLARE vHasToInvoice BOOL;
|
||||||
DECLARE vSerial VARCHAR(2);
|
|
||||||
DECLARE vStateCode VARCHAR(45);
|
DECLARE vStateCode VARCHAR(45);
|
||||||
|
|
||||||
DECLARE cur CURSOR FOR
|
DECLARE cur CURSOR FOR
|
||||||
|
@ -39,18 +35,11 @@ BEGIN
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT
|
SELECT c.id,
|
||||||
c.id,
|
|
||||||
c.isTaxDataChecked,
|
|
||||||
t.companyFk,
|
|
||||||
t.shipped,
|
|
||||||
c.hasDailyInvoice,
|
c.hasDailyInvoice,
|
||||||
w.isManaged,
|
w.isManaged,
|
||||||
c.hasToInvoice
|
c.hasToInvoice
|
||||||
INTO vClientFk,
|
INTO vClientFk,
|
||||||
vIsTaxDataChecked,
|
|
||||||
vCompanyFk,
|
|
||||||
vShipped,
|
|
||||||
vHasDailyInvoice,
|
vHasDailyInvoice,
|
||||||
vWithPackage,
|
vWithPackage,
|
||||||
vHasToInvoice
|
vHasToInvoice
|
||||||
|
@ -60,7 +49,7 @@ BEGIN
|
||||||
WHERE t.id = vCurTicketFk;
|
WHERE t.id = vCurTicketFk;
|
||||||
|
|
||||||
INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
|
INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
|
||||||
(SELECT vCurTicketFk, p.id, COUNT(*)
|
SELECT vCurTicketFk, p.id, COUNT(*)
|
||||||
FROM expedition e
|
FROM expedition e
|
||||||
JOIN packaging p ON p.id = e.packagingFk
|
JOIN packaging p ON p.id = e.packagingFk
|
||||||
JOIN ticket t ON t.id = e.ticketFk
|
JOIN ticket t ON t.id = e.ticketFk
|
||||||
|
@ -69,26 +58,35 @@ BEGIN
|
||||||
WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
|
WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
|
||||||
AND vWithPackage
|
AND vWithPackage
|
||||||
AND NOT dm.`code`= 'PICKUP'
|
AND NOT dm.`code`= 'PICKUP'
|
||||||
GROUP BY p.itemFk);
|
GROUP BY p.itemFk;
|
||||||
|
|
||||||
-- No retornables o no catalogados
|
-- No retornables o no catalogados
|
||||||
INSERT INTO sale (itemFk, ticketFk, concept, quantity, price, isPriceFixed)
|
INSERT INTO sale (
|
||||||
(SELECT e.freightItemFk, vCurTicketFk, i.name, COUNT(*) AS amount, getSpecialPrice(e.freightItemFk, vClientFk), 1
|
itemFk,
|
||||||
|
ticketFk,
|
||||||
|
concept,
|
||||||
|
quantity,
|
||||||
|
price, isPriceFixed
|
||||||
|
)SELECT e.freightItemFk,
|
||||||
|
vCurTicketFk,
|
||||||
|
i.name,
|
||||||
|
COUNT(*) amount,
|
||||||
|
getSpecialPrice(e.freightItemFk, vClientFk),
|
||||||
|
TRUE
|
||||||
FROM expedition e
|
FROM expedition e
|
||||||
JOIN item i ON i.id = e.freightItemFk
|
JOIN item i ON i.id = e.freightItemFk
|
||||||
LEFT JOIN packaging p ON p.itemFk = i.id
|
LEFT JOIN packaging p ON p.itemFk = i.id
|
||||||
WHERE e.ticketFk = vCurTicketFk AND IFNULL(p.isPackageReturnable, 0) = 0
|
WHERE e.ticketFk = vCurTicketFk
|
||||||
|
AND (p.isPackageReturnable = 0 OR p.isPackageReturnable IS NULL)
|
||||||
AND getSpecialPrice(e.freightItemFk, vClientFk) > 0
|
AND getSpecialPrice(e.freightItemFk, vClientFk) > 0
|
||||||
GROUP BY e.freightItemFk);
|
GROUP BY e.freightItemFk;
|
||||||
|
|
||||||
|
|
||||||
IF vHasDailyInvoice AND vHasToInvoice THEN
|
IF vHasDailyInvoice AND vHasToInvoice THEN
|
||||||
SET vStateCode = 'DELIVERED';
|
SET vStateCode = 'DELIVERED';
|
||||||
ELSE
|
ELSE
|
||||||
SELECT vn.getAlert3State(vCurTicketFk) INTO vStateCode;
|
SELECT getAlert3State(vCurTicketFk) INTO vStateCode;
|
||||||
END IF;
|
END IF;
|
||||||
CALL ticket_setState(vCurTicketFk, vStateCode);
|
CALL ticket_setState(vCurTicketFk, vStateCode);
|
||||||
|
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
CLOSE cur;
|
CLOSE cur;
|
||||||
|
|
|
@ -37,35 +37,51 @@ 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
|
||||||
t.clientFk,
|
|
||||||
c.name clientName,
|
|
||||||
c.email recipient,
|
|
||||||
eu.email salesPersonEmail,
|
|
||||||
t.addressFk,
|
|
||||||
c.hasDailyInvoice,
|
|
||||||
c.hasToInvoiceByAddress,
|
|
||||||
t.totalWithVat,
|
|
||||||
t.companyFk
|
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN agencyMode am ON am.id = t.agencyModeFk
|
|
||||||
JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission
|
JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission
|
||||||
JOIN ticketState ts ON ts.ticketFk = t.id
|
WHERE t.shipped BETWEEN ? AND ?
|
||||||
JOIN alertLevel al ON al.id = ts.alertLevel
|
AND t.refFk IS NULL
|
||||||
JOIN client c ON c.id = t.clientFk
|
), wTicketsTracking AS(
|
||||||
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
|
SELECT wt.ticketFk, MAX(tt.id) maxTracking
|
||||||
JOIN ticketConfig tc ON TRUE
|
FROM wTickets wt
|
||||||
WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'))
|
JOIN ticketTracking tt ON tt.ticketFk = wt.ticketFk
|
||||||
AND t.shipped BETWEEN ? - INTERVAL tc.closureDaysAgo DAY AND util.dayEnd(?)
|
GROUP BY tt.ticketFk
|
||||||
AND t.refFk IS NULL;
|
), wTicketsLastState AS(
|
||||||
CALL ticket_close();
|
SELECT wt.ticketFk, tt.stateFk
|
||||||
`, [toDate, toDate], myOptions);
|
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(`
|
await Self.rawSql(`
|
||||||
UPDATE ticket t
|
UPDATE ticket t
|
||||||
|
@ -76,11 +92,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,
|
||||||
|
@ -93,8 +109,8 @@ module.exports = Self => {
|
||||||
'quick' serialType
|
'quick' serialType
|
||||||
FROM tmp.ticket_close
|
FROM tmp.ticket_close
|
||||||
WHERE hasDailyInvoice
|
WHERE hasDailyInvoice
|
||||||
GROUP BY IF (hasToInvoiceByAddress, addressFk, clientFk), companyFk
|
GROUP BY IF (hasToInvoiceByAddress, addressFk, clientFk), companyFk
|
||||||
HAVING total > 0;
|
HAVING total > 0;
|
||||||
DROP TEMPORARY TABLE tmp.ticket_close;
|
DROP TEMPORARY TABLE tmp.ticket_close;
|
||||||
`, [], myOptions);
|
`, [], myOptions);
|
||||||
|
|
||||||
|
@ -102,7 +118,6 @@ module.exports = Self => {
|
||||||
await tx.commit();
|
await tx.commit();
|
||||||
|
|
||||||
const failedClients = [];
|
const failedClients = [];
|
||||||
// Only for testing
|
|
||||||
const nestedTransaction = options?.transaction ? myOptions : {};
|
const nestedTransaction = options?.transaction ? myOptions : {};
|
||||||
for (const client of clients) {
|
for (const client of clients) {
|
||||||
ctx.args = {
|
ctx.args = {
|
||||||
|
|
|
@ -279,39 +279,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"relation": "business",
|
|
||||||
"scope": {
|
|
||||||
"fields": [
|
|
||||||
"id",
|
|
||||||
"started",
|
|
||||||
"ended",
|
|
||||||
"reasonEndFk",
|
|
||||||
"departmentFk",
|
|
||||||
"workerBusinessProfessionalCategoryFk"
|
|
||||||
],
|
|
||||||
"include":[
|
|
||||||
{
|
|
||||||
"relation": "department",
|
|
||||||
"scope": {
|
|
||||||
"fields": ["id", "name"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"relation": "reasonEnd",
|
|
||||||
"scope": {
|
|
||||||
"fields": ["id", "reason"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"relation": "workerBusinessProfessionalCategory",
|
|
||||||
"scope": {
|
|
||||||
"fields": ["id", "description"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"relation": "boss",
|
"relation": "boss",
|
||||||
"scope": {
|
"scope": {
|
||||||
|
|
Loading…
Reference in New Issue