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.*
FROM tmp.ticketToInvoice ti
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 item i ON i.id = s.itemFk
JOIN supplier su ON su.id = t.companyFk
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)
OR c.isTaxDataChecked = FALSE
OR t.isDeleted
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
INTO vIsAnySaleToInvoice

View File

@ -28,7 +28,7 @@ BEGIN
SELECT c.id clientFk,
c.name,
c.phone,
c.mobile,
bt.description,
c.salesPersonFk,
u.name username,
aai.invoiced,
@ -44,10 +44,11 @@ BEGIN
LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
JOIN vn.clientType ct ON ct.code = c.typeFk
JOIN vn.businessType bt ON bt.code = c.businessTypeFk
WHERE a.isActive
AND c.isActive
AND ct.code = 'normal'
AND c.businessTypeFk <> 'worker'
AND bt.code <> 'worker'
GROUP BY c.id;
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 country co ON co.id = p.countryFk
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
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(?)
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
GROUP BY t.id
`, [toDate, toDate]);
@ -64,6 +64,72 @@ module.exports = Self => {
VALUES ('nightInvoicing', ?)
`, [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 Self.rawSql(`
@ -74,8 +140,7 @@ module.exports = Self => {
JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
JOIN zone z ON z.id = t.zoneFk
SET t.routeFk = NULL
WHERE DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY)
AND util.dayEnd(?)
WHERE DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
AND al.code NOT IN('DELIVERED','PACKED')
AND t.routeFk
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