feat: refs #8083 add prop #3115
|
@ -6,8 +6,8 @@ BLOCK1: BEGIN
|
||||||
DECLARE vShipped DATE;
|
DECLARE vShipped DATE;
|
||||||
DECLARE vPreviousShipped DATE;
|
DECLARE vPreviousShipped DATE;
|
||||||
DECLARE vDone boolean;
|
DECLARE vDone boolean;
|
||||||
DECLARE cur cursor for
|
|
||||||
|
|
||||||
|
DECLARE cur CURSOR FOR
|
||||||
SELECT clientFk, firstShipped
|
SELECT clientFk, firstShipped
|
||||||
FROM bs.clientNewBorn;
|
FROM bs.clientNewBorn;
|
||||||
|
|
||||||
|
@ -17,14 +17,16 @@ BLOCK1: BEGIN
|
||||||
DELETE FROM bs.clientNewBorn WHERE isModified = FALSE;
|
DELETE FROM bs.clientNewBorn WHERE isModified = FALSE;
|
||||||
|
|
||||||
INSERT INTO clientNewBorn(clientFk, firstShipped, lastShipped)
|
INSERT INTO clientNewBorn(clientFk, firstShipped, lastShipped)
|
||||||
SELECT c.id, MAX(t.shipped), MAX(t.shipped)
|
SELECT c.id, DATE(MAX(t.shipped)), DATE(MAX(t.shipped))
|
||||||
FROM vn.client c
|
FROM vn.client c
|
||||||
JOIN vn.ticket t on t.clientFk = c.id
|
JOIN vn.ticket t ON t.clientFk = c.id
|
||||||
LEFT JOIN clientNewBorn cb on cb.clientFk = c.id
|
LEFT JOIN clientNewBorn cb ON cb.clientFk = c.id
|
||||||
WHERE t.shipped BETWEEN TIMESTAMPADD(YEAR, -1, util.VN_CURDATE()) AND util.VN_CURDATE() AND cb.isModified is null
|
WHERE t.shipped BETWEEN util.VN_CURDATE() - INTERVAL 1 YEAR
|
||||||
|
AND util.VN_CURDATE()
|
||||||
|
AND cb.isModified IS NULL
|
||||||
GROUP BY c.id;
|
GROUP BY c.id;
|
||||||
OPEN cur;
|
|
||||||
|
|
||||||
|
OPEN cur;
|
||||||
LOOP1: LOOP
|
LOOP1: LOOP
|
||||||
SET vDone := FALSE;
|
SET vDone := FALSE;
|
||||||
FETCH cur INTO vClientFk, vShipped;
|
FETCH cur INTO vClientFk, vShipped;
|
||||||
|
|
|
@ -85,17 +85,12 @@ module.exports = Self => {
|
||||||
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
||||||
|
|
||||||
const salesPerson = claim.client().salesPersonUser();
|
const salesPerson = claim.client().salesPersonUser();
|
||||||
if (salesPerson) {
|
if (salesPerson && args.claimStateFk) {
|
||||||
if (changedPickup && updatedClaim.pickup)
|
|
||||||
await notifyPickUp(ctx, salesPerson.id, claim);
|
|
||||||
|
|
||||||
if (args.claimStateFk) {
|
|
||||||
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
||||||
await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
|
await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
|
||||||
if (newState.code == 'canceled')
|
if (newState.code == 'canceled')
|
||||||
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
|
|
||||||
|
@ -119,18 +114,4 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
await models.Chat.sendCheckingPresence(ctx, workerId, message);
|
await models.Chat.sendCheckingPresence(ctx, workerId, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function notifyPickUp(ctx, workerId, claim) {
|
|
||||||
const models = Self.app.models;
|
|
||||||
const url = await models.Url.getUrl();
|
|
||||||
const $t = ctx.req.__; // $translate
|
|
||||||
|
|
||||||
const message = $t('Claim will be picked', {
|
|
||||||
claimId: claim.id,
|
|
||||||
clientName: claim.client().name,
|
|
||||||
claimUrl: `${url}claim/${claim.id}/summary`,
|
|
||||||
claimPickup: $t(claim.pickup)
|
|
||||||
});
|
|
||||||
await models.Chat.sendCheckingPresence(ctx, workerId, message);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,8 @@ module.exports = Self => {
|
||||||
pm.name payMethod,
|
pm.name payMethod,
|
||||||
r.finished IS NULL hasRecovery,
|
r.finished IS NULL hasRecovery,
|
||||||
dp.id departmentFk,
|
dp.id departmentFk,
|
||||||
dp.name departmentName
|
dp.name departmentName,
|
||||||
|
dp.notificationEmail departmentEmail
|
||||||
FROM defaulter d
|
FROM defaulter d
|
||||||
JOIN client c ON c.id = d.clientFk
|
JOIN client c ON c.id = d.clientFk
|
||||||
JOIN country cn ON cn.id = c.countryFk
|
JOIN country cn ON cn.id = c.countryFk
|
||||||
|
|
|
@ -47,7 +47,7 @@ module.exports = Self => {
|
||||||
await models.Mail.create({
|
await models.Mail.create({
|
||||||
subject: $t('Comment added to client', {clientFk: defaulter.clientFk}),
|
subject: $t('Comment added to client', {clientFk: defaulter.clientFk}),
|
||||||
body: body,
|
body: body,
|
||||||
receiver: `${defaulter.salesPersonName}@verdnatura.es`,
|
receiver: `${defaulter.departmentEmail}`,
|
||||||
replyTo: `${user.name}@verdnatura.es`
|
replyTo: `${user.name}@verdnatura.es`
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,9 +49,12 @@ module.exports = Self => {
|
||||||
where: {originalTicketFk: id}
|
where: {originalTicketFk: id}
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
|
const hasRefund = !!ticketRefunds?.length;
|
||||||
|
|
||||||
const allDeleted = ticketRefunds.every(refund => refund.refundTicket().isDeleted);
|
const allDeleted = ticketRefunds.every(refund => refund.refundTicket().isDeleted);
|
||||||
|
|
||||||
if (ticketRefunds?.length && !allDeleted) {
|
if (!hasRefund) await models.TicketRefund.destroyAll({refundTicketFk: id}, myOptions);
|
||||||
|
if (hasRefund && !allDeleted) {
|
||||||
const notDeleted = [];
|
const notDeleted = [];
|
||||||
for (const refund of ticketRefunds)
|
for (const refund of ticketRefunds)
|
||||||
if (!refund.refundTicket().isDeleted) notDeleted.push(refund.refundTicket().id);
|
if (!refund.refundTicket().isDeleted) notDeleted.push(refund.refundTicket().id);
|
||||||
|
|
|
@ -113,5 +113,27 @@ describe('ticket setDeleted()', () => {
|
||||||
|
|
||||||
expect(error.message).not.toContain('Tickets with associated refunds');
|
expect(error.message).not.toContain('Tickets with associated refunds');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should delete the refund - original ticket relation', async() => {
|
||||||
|
const tx = await models.Ticket.beginTransaction({});
|
||||||
|
try {
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
const ticketId = 24;
|
||||||
|
const refundTicket = await models.TicketRefund.findOne({where: {refundTicketFk: ticketId}}, options);
|
||||||
|
|
||||||
|
expect(refundTicket).toBeTruthy();
|
||||||
|
|
||||||
|
await models.Ticket.setDeleted(ctx, ticketId, options);
|
||||||
|
const removedRefundTicket = await models.TicketRefund.findOne({
|
||||||
|
where: {refundTicketFk: ticketId}},
|
||||||
|
options);
|
||||||
|
|
||||||
|
expect(removedRefundTicket).toBeNull();
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue