Compare commits

...

13 Commits

Author SHA1 Message Date
Juanjo Breso eab1bfe6ab Merge branch 'dev' into 6493-refactorizar-procedimientos-vn2008-parte_2
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 10:43:39 +00:00
Carlos Andrés 5558e92b1e Merge pull request 'fix: closeTicket idem salix refs #6549' (!2163) from 6549-ticket_close into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2163
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-04-08 10:36:21 +00:00
Guillermo Bonet d442ed64c4 Merge pull request 'feat: refs #6714 Added businessType zone_getAddresses' (!2263) from 6714-zone_getAddresses into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2263
Reviewed-by: Robert Ferrús <robert@verdnatura.es>
2024-04-08 08:42:15 +00:00
Guillermo Bonet 0b96471c7d feat: refs #6714 Added businessType zone_getAddresses
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 09:27:07 +02:00
Alex Moreno 93000aaecf Merge branch 'dev' into 6549-ticket_close
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 12:20:09 +00:00
Carlos Andrés cedfdbb421 fix: closeTicket idem salix Refs: #6549
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 13:22:54 +02:00
Carlos Andrés fe0afe30bf fix: closeTicket idem salix Refs: #6549
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-04 17:50:39 +02:00
Carlos Andrés 9fcad457a7 fix: closeTicket idem salix Refs: #6549
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-04 14:46:51 +02:00
Carlos Andrés 75a4d6947f fix: closeTicket idem salix Refs: #6549
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-04 14:20:55 +02:00
Carlos Andrés 1315a854a9 fix: closeTicket idem salix Refs: #6549
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-18 18:15:05 +01:00
Carlos Andrés 913b261f86 Merge branch 'dev' into 6549-ticket_close
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-18 17:55:54 +01:00
Carlos Andrés 77d1a38a87 fix: closeTicket idem salix refs #6549
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-13 18:51:11 +01:00
Carlos Andrés ff459ea3be fix: closeTicket idem salix refs #6549
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-13 12:18:43 +01:00
9 changed files with 147 additions and 14 deletions

View File

@ -68,16 +68,21 @@ BEGIN
DELETE ti.* DELETE ti.*
FROM tmp.ticketToInvoice ti FROM tmp.ticketToInvoice ti
JOIN ticket t ON t.id = ti.id JOIN ticket t ON t.id = ti.id
LEFT JOIN address a ON a.id = t.addressFk
JOIN sale s ON s.ticketFk = t.id JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk JOIN item i ON i.id = s.itemFk
JOIN supplier su ON su.id = t.companyFk JOIN supplier su ON su.id = t.companyFk
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id AND itc.countryFk = su.countryFk LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id
AND itc.countryFk = su.countryFk
WHERE (YEAR(t.shipped) < 2001 AND t.isDeleted) WHERE (YEAR(t.shipped) < 2001 AND t.isDeleted)
OR c.isTaxDataChecked = FALSE OR c.isTaxDataChecked = FALSE
OR t.isDeleted OR t.isDeleted
OR c.hasToInvoice = FALSE OR c.hasToInvoice = FALSE
OR itc.id IS NULL; OR itc.id IS NULL
OR a.id IS NULL
OR (vTaxArea = 'WORLD'
AND (a.customsAgentFk IS NULL OR a.incotermsFk IS NULL));
SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0 SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0
INTO vIsAnySaleToInvoice INTO vIsAnySaleToInvoice

View File

@ -28,7 +28,7 @@ BEGIN
SELECT c.id clientFk, SELECT c.id clientFk,
c.name, c.name,
c.phone, c.phone,
c.mobile, bt.description,
c.salesPersonFk, c.salesPersonFk,
u.name username, u.name username,
aai.invoiced, aai.invoiced,
@ -44,10 +44,11 @@ BEGIN
LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
JOIN vn.clientType ct ON ct.code = c.typeFk JOIN vn.clientType ct ON ct.code = c.typeFk
JOIN vn.businessType bt ON bt.code = c.businessTypeFk
WHERE a.isActive WHERE a.isActive
AND c.isActive AND c.isActive
AND ct.code = 'normal' AND ct.code = 'normal'
AND c.businessTypeFk <> 'worker' AND bt.code <> 'worker'
GROUP BY c.id; GROUP BY c.id;
DROP TEMPORARY TABLE tmp.zoneNodes; DROP TEMPORARY TABLE tmp.zoneNodes;

View File

@ -0,0 +1,15 @@
INSERT INTO util.notification ( name, description)
SELECT 'invoice-ticket-closure',
'Tickets not invoiced during the nightly closure ticket process';
SET @notificationFk =LAST_INSERT_ID();
INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk)
SELECT @notificationFk,id
FROM account.role
WHERE name ='administrative';
INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk)
SELECT @notificationFk, id
FROM account.`user`
WHERE `name` = 'admon';

View File

@ -53,8 +53,8 @@ module.exports = Self => {
JOIN province p ON p.id = c.provinceFk JOIN province p ON p.id = c.provinceFk
JOIN country co ON co.id = p.countryFk JOIN country co ON co.id = p.countryFk
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
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 DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
AND t.refFk IS NULL AND t.refFk IS NULL
GROUP BY t.id GROUP BY t.id
`, [toDate, toDate]); `, [toDate, toDate]);
@ -64,18 +64,83 @@ module.exports = Self => {
VALUES ('nightInvoicing', ?) VALUES ('nightInvoicing', ?)
`, [ticketIds.join(',')]); `, [ticketIds.join(',')]);
await Self.rawSql(`
WITH ticketNotInvoiceable AS(
SELECT JSON_OBJECT(
'tickets',
JSON_ARRAYAGG(
JSON_OBJECT(
'ticketId', ticketFk,
'reason', reason
)
)
)errors
FROM (
SELECT ticketFk,
CONCAT_WS(', ',
IF(hasErrorToInvoice, 'Facturar', NULL),
IF(hasErrorTaxDataChecked, 'Datos comprobados', NULL),
IF(hasErrorDeleted, 'Eliminado', NULL),
IF(hasErrorItemTaxCountry, 'Impuesto no informado', NULL),
IF(hasErrorAddress, 'Sin dirección', NULL),
IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones', NULL)) reason
FROM (
SELECT t.id ticketFk,
SUM(NOT c.hasToInvoice) hasErrorToInvoice,
SUM(NOT c.isTaxDataChecked) hasErrorTaxDataChecked,
SUM(t.isDeleted) hasErrorDeleted,
SUM(itc.id IS NULL) hasErrorItemTaxCountry,
SUM(a.id IS NULL) hasErrorAddress,
SUM(ios.code IS NOT NULL
AND(ad.customsAgentFk IS NULL
OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld
FROM ticket t
LEFT JOIN address ad ON ad.id = t.addressFk
JOIN sale s ON s.ticketFk = t.id
JOIN item i ON i.id = s.itemFk
JOIN supplier su ON su.id = t.companyFk
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 province p ON p.id = c.provinceFk
LEFT JOIN autonomy a ON a.id = p.autonomyFk
JOIN country co ON co.id = p.countryFk
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id
AND itc.countryFk = su.countryFk
LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD'
AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'M')
WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'))
AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
AND t.refFk IS NULL
AND IFNULL(a.hasDailyInvoice, co.hasDailyInvoice)
GROUP BY ticketFk
HAVING hasErrorToInvoice
OR hasErrorTaxDataChecked
OR hasErrorDeleted
OR hasErrorItemTaxCountry
OR hasErrorAddress
OR hasErrorInfoTaxAreaWorld
)sub
)sub2
) SELECT IF(errors = '{"tickets": null}',
'No errors',
util.notification_send('invoice-ticket-closure', errors, NULL))
FROM ticketNotInvoiceable`, [toDate, toDate]);
await closure(ctx, Self, tickets); await closure(ctx, Self, tickets);
await Self.rawSql(` await Self.rawSql(`
UPDATE ticket t UPDATE ticket t
JOIN ticketState ts ON t.id = ts.ticketFk JOIN ticketState ts ON t.id = ts.ticketFk
JOIN alertLevel al ON al.id = ts.alertLevel JOIN alertLevel al ON al.id = ts.alertLevel
JOIN agencyMode am ON am.id = t.agencyModeFk JOIN agencyMode am ON am.id = t.agencyModeFk
JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
JOIN zone z ON z.id = t.zoneFk JOIN zone z ON z.id = t.zoneFk
SET t.routeFk = NULL SET t.routeFk = NULL
WHERE DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) WHERE DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
AND util.dayEnd(?)
AND al.code NOT IN('DELIVERED','PACKED') AND al.code NOT IN('DELIVERED','PACKED')
AND t.routeFk AND t.routeFk
AND z.name LIKE '%MADRID%'`, [toDate, toDate], {userId: ctx.req.accessToken.userId}); AND z.name LIKE '%MADRID%'`, [toDate, toDate], {userId: ctx.req.accessToken.userId});

View File

@ -0,0 +1,11 @@
const Stylesheet = require(`vn-print/core/stylesheet`);
const path = require('path');
const vnPrintPath = path.resolve('print');
module.exports = new Stylesheet([
`${vnPrintPath}/common/css/spacing.css`,
`${vnPrintPath}/common/css/misc.css`,
`${vnPrintPath}/common/css/layout.css`,
`${vnPrintPath}/common/css/email.css`])
.mergeStyles();

View File

@ -0,0 +1,13 @@
<email-body v-bind="$props">
<div class="grid-row">
<div class="grid-block vn-px-ml centered">
<h1>{{ $t('title') }}</h1>
<hr>
</div>
<div v-for="ticket in tickets" class="grid-block vn-px-ml">
<p v-if="ticket.ticketId"><b>{{ $t('ticketId') }}:</b> {{ticket.ticketId}}</p>
<p v-if="ticket.reason"><b>{{ $t('reason') }}:</b> {{ticket.reason}}</p>
<hr>
</div>
</div>
</email-body>

View File

@ -0,0 +1,15 @@
const Component = require(`vn-print/core/component`);
const emailBody = new Component('email-body');
module.exports = {
name: 'invoice-ticket-closure',
components: {
'email-body': emailBody.build(),
},
props: {
tickets: {
type: Array,
required: true
},
}
};

View File

@ -0,0 +1,4 @@
subject: Nightly ticket closing process report
title: Nightly ticket closing process report
reason: Reason
ticketId: Ticket

View File

@ -0,0 +1,4 @@
subject: Informe proceso de cierre de tickets nocturno
title: Informe proceso de cierre de tickets nocturno
reason: Motivo
ticketId: Ticket