feat: refs #6802 Clientes-gestionados-por-equipos #2516
|
@ -57,6 +57,22 @@ module.exports = Self => {
|
||||||
|
|
||||||
if (print) await Self.rawSql('CALL vn.collection_printSticker(?,NULL)', [id], myOptions);
|
if (print) await Self.rawSql('CALL vn.collection_printSticker(?,NULL)', [id], myOptions);
|
||||||
|
|
||||||
|
for (let ticket of tickets) {
|
||||||
|
|||||||
|
if (ticket.observaciones) {
|
||||||
|
let observations = ticket.observaciones.split(' ');
|
||||||
|
|
||||||
|
for (let observation of observations) {
|
||||||
|
const departmentFk = ticket.departmentFk;
|
||||||
|
if (observation.startsWith('#') || observation.startsWith('@')) {
|
||||||
|
await models.Chat.send(ctx,
|
||||||
|
observation,
|
||||||
|
$t('ticketCommercial', {ticket: ticket.ticketFk, departmentFk})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return getCollection(id, tickets, sales, placements, myOptions);
|
return getCollection(id, tickets, sales, placements, myOptions);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -127,15 +143,15 @@ module.exports = Self => {
|
||||||
|
|
||||||
async function getBarcodes(ticketId, options) {
|
async function getBarcodes(ticketId, options) {
|
||||||
const query =
|
const query =
|
||||||
`SELECT s.id movementId,
|
`SELECT s.id movementId,
|
||||||
b.code,
|
b.code,
|
||||||
c.id
|
c.id
|
||||||
FROM vn.sale s
|
FROM vn.sale s
|
||||||
LEFT JOIN vn.itemBarcode b ON b.itemFk = s.itemFk
|
LEFT JOIN vn.itemBarcode b ON b.itemFk = s.itemFk
|
||||||
LEFT JOIN vn.buy c ON c.itemFk = s.itemFk
|
LEFT JOIN vn.buy c ON c.itemFk = s.itemFk
|
||||||
LEFT JOIN vn.entry e ON e.id = c.entryFk
|
LEFT JOIN vn.entry e ON e.id = c.entryFk
|
||||||
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
|
LEFT JOIN vn.travel tr ON tr.id = e.travelFk
|
||||||
WHERE s.ticketFk = ?
|
WHERE s.ticketFk = ?
|
||||||
AND tr.landed >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)`;
|
AND tr.landed >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)`;
|
||||||
return Self.rawSql(query, [ticketId], options);
|
return Self.rawSql(query, [ticketId], options);
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,10 +114,10 @@ module.exports = Self => {
|
||||||
st.code stateCode,
|
st.code stateCode,
|
||||||
ac.username
|
ac.username
|
||||||
FROM sectorCollection sc
|
FROM sectorCollection sc
|
||||||
JOIN sectorCollectionSaleGroup ss ON ss.sectorCollectionFk = sc.id
|
JOIN sectorCollectionSaleGroup ss ON ss.sectorCollectionFk = sc.id
|
||||||
JOIN saleGroup sg ON sg.id = ss.saleGroupFk
|
JOIN saleGroup sg ON sg.id = ss.saleGroupFk
|
||||||
LEFT JOIN saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
|
LEFT JOIN saleGroupDetail sgd ON sgd.saleGroupFk = sg.id
|
||||||
JOIN sale s ON s.id = sgd.saleFk
|
JOIN sale s ON s.id = sgd.saleFk
|
||||||
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
|
LEFT JOIN parking p2 ON p2.id = sg.parkingFk
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN itemShelvingSale iss ON iss.saleFk = s.id
|
JOIN itemShelvingSale iss ON iss.saleFk = s.id
|
||||||
|
@ -127,8 +127,8 @@ module.exports = Self => {
|
||||||
LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
|
LEFT JOIN itemColor ic ON ic.itemFk = s.itemFk
|
||||||
LEFT JOIN origin o ON o.id = i.originFk
|
LEFT JOIN origin o ON o.id = i.originFk
|
||||||
LEFT JOIN state st ON st.id = sg.stateFk
|
LEFT JOIN state st ON st.id = sg.stateFk
|
||||||
LEFT JOIN account.user ac ON ac.id = sg.userFk
|
LEFT JOIN account.user ac ON ac.id = iss.userFk
|
||||||
WHERE sc.id = ?
|
WHERE sc.id = ?
|
||||||
AND sgd.saleGroupFk
|
AND sgd.saleGroupFk
|
||||||
GROUP BY s.id, ish.id, p.code, p2.code`, [id, id], myOptions);
|
GROUP BY s.id, ish.id, p.code, p2.code`, [id, id], myOptions);
|
||||||
if (print)
|
if (print)
|
||||||
|
@ -136,22 +136,22 @@ module.exports = Self => {
|
||||||
|
|
||||||
const collection = {collectionFk: id, tickets: []};
|
const collection = {collectionFk: id, tickets: []};
|
||||||
|
|
||||||
if (tickets && tickets.length) {
|
if (tickets?.length) {
|
||||||
for (const ticket of tickets) {
|
for (const ticket of tickets) {
|
||||||
const ticketId = ticket.ticketFk;
|
const ticketId = ticket.ticketFk;
|
||||||
if (ticket.observation) {
|
if (ticket.observation) {
|
||||||
for (observation of ticket.observation?.split(' ')) {
|
for (let observation of ticket.observation?.split(' ')) {
|
||||||
if (['#', '@'].includes(observation.charAt(0))) {
|
if (['#', '@'].includes(observation.charAt(0))) {
|
||||||
promises.push(Self.app.models.Chat.send(ctx, observation,
|
promises.push(Self.app.models.Chat.send(ctx, observation,
|
||||||
$t('The ticket is in preparation', {
|
$t('The ticket is in preparation', {
|
||||||
ticketId: ticketId,
|
ticketId: ticketId,
|
||||||
ticketUrl: `${url}ticket/${ticketId}/summary`,
|
ticketUrl: `${url}ticket/${ticketId}/summary`,
|
||||||
salesPersonId: ticket.salesPersonFk
|
departmentId: ticket.departmentFk
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sales && sales.length) {
|
if (sales?.length) {
|
||||||
const barcodes = await Self.rawSql(`
|
const barcodes = await Self.rawSql(`
|
||||||
SELECT s.id saleFk, b.code, c.id
|
SELECT s.id saleFk, b.code, c.id
|
||||||
FROM sale s
|
FROM sale s
|
||||||
|
@ -166,7 +166,7 @@ module.exports = Self => {
|
||||||
for (const sale of sales) {
|
for (const sale of sales) {
|
||||||
if (sale.ticketFk === ticketId) {
|
if (sale.ticketFk === ticketId) {
|
||||||
sale.Barcodes = [];
|
sale.Barcodes = [];
|
||||||
if (barcodes && barcodes.length) {
|
if (barcodes?.length) {
|
||||||
for (const barcode of barcodes) {
|
for (const barcode of barcodes) {
|
||||||
if (barcode.saleFk === sale.saleFk) {
|
if (barcode.saleFk === sale.saleFk) {
|
||||||
for (const prop in barcode) {
|
for (const prop in barcode) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USE `util`;
|
USE `util`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -1165,7 +1165,7 @@ INSERT INTO `versionLog` VALUES ('vn-database','11423','00-firstScript.sql','jen
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `account`;
|
USE `account`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -1550,7 +1550,7 @@ INSERT INTO `mailConfig` VALUES (1,'verdnatura.es');
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `salix`;
|
USE `salix`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -1605,7 +1605,6 @@ INSERT INTO `ACL` VALUES (73,'Expedition','*','READ','ALLOW','ROLE','employee',N
|
||||||
INSERT INTO `ACL` VALUES (74,'Expedition','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
|
INSERT INTO `ACL` VALUES (74,'Expedition','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
|
||||||
INSERT INTO `ACL` VALUES (75,'Expedition','*','WRITE','ALLOW','ROLE','production',NULL);
|
INSERT INTO `ACL` VALUES (75,'Expedition','*','WRITE','ALLOW','ROLE','production',NULL);
|
||||||
INSERT INTO `ACL` VALUES (76,'AnnualAverageInvoiced','*','READ','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (76,'AnnualAverageInvoiced','*','READ','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (77,'WorkerMana','*','READ','ALLOW','ROLE','employee',NULL);
|
|
||||||
INSERT INTO `ACL` VALUES (78,'TicketTracking','*','WRITE','ALLOW','ROLE','production',NULL);
|
INSERT INTO `ACL` VALUES (78,'TicketTracking','*','WRITE','ALLOW','ROLE','production',NULL);
|
||||||
INSERT INTO `ACL` VALUES (79,'Ticket','state','*','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (79,'Ticket','state','*','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (80,'Sale','deleteSales','*','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (80,'Sale','deleteSales','*','ALLOW','ROLE','employee',NULL);
|
||||||
|
@ -2053,7 +2052,7 @@ INSERT INTO `ACL` VALUES (595,'Ticket','isEditable','READ','ALLOW','ROLE','emplo
|
||||||
INSERT INTO `ACL` VALUES (596,'Ticket','setDeleted','WRITE','ALLOW','ROLE','salesPerson',NULL);
|
INSERT INTO `ACL` VALUES (596,'Ticket','setDeleted','WRITE','ALLOW','ROLE','salesPerson',NULL);
|
||||||
INSERT INTO `ACL` VALUES (597,'Ticket','restore','WRITE','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (597,'Ticket','restore','WRITE','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (598,'Ticket','getSales','READ','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (598,'Ticket','getSales','READ','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (599,'Ticket','getSalesPersonMana','READ','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (599,'Ticket','getDepartmentMana','READ','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (600,'Ticket','filter','READ','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (600,'Ticket','filter','READ','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (601,'Ticket','makeInvoice','WRITE','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (601,'Ticket','makeInvoice','WRITE','ALLOW','ROLE','employee',NULL);
|
||||||
INSERT INTO `ACL` VALUES (602,'Ticket','updateEditableTicket','WRITE','ALLOW','ROLE','employee',NULL);
|
INSERT INTO `ACL` VALUES (602,'Ticket','updateEditableTicket','WRITE','ALLOW','ROLE','employee',NULL);
|
||||||
|
@ -2503,7 +2502,7 @@ INSERT INTO `defaultViewMultiConfig` VALUES ('routesList','{\"ID\":true,\"worker
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `vn`;
|
USE `vn`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -2942,7 +2941,7 @@ INSERT INTO `workerTimeControlError` VALUES (9,'UNDEFINED_ERROR','Error sin defi
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `cache`;
|
USE `cache`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -2967,7 +2966,7 @@ INSERT INTO `cache` VALUES (14,'lastBuy','23:59:00');
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `hedera`;
|
USE `hedera`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -3239,7 +3238,7 @@ INSERT INTO `tpvResponse` VALUES (9999,'Operación que ha sido redirigida al emi
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `sage`;
|
USE `sage`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USE `mysql`;
|
USE `mysql`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
@ -2250,7 +2250,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','buy_getUltimate','
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
USE `mysql`;
|
USE `mysql`;
|
||||||
/*M!999999\- enable the sandbox mode */
|
/*M!999999\- enable the sandbox mode */
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -393,20 +393,20 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`)
|
||||||
(4, 'GCN Channel'),
|
(4, 'GCN Channel'),
|
||||||
(5, 'The Newspaper');
|
(5, 'The Newspaper');
|
||||||
|
|
||||||
INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`businessTypeFk`,`typeFk`)
|
INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`, `hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`businessTypeFk`,`typeFk`, `departmentFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
|
(1101, 'Bruce Wayne', '84612325V', 'BATMAN', 'Alfred', '1007 MOUNTAIN DRIVE, GOTHAM', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal', 155),
|
||||||
(1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
|
(1102, 'Petter Parker', '87945234L', 'SPIDER MAN', 'Aunt May', '20 INGRAM STREET, QUEENS, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal', 155),
|
||||||
(1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
|
(1103, 'Clark Kent', '06815934E', 'SUPER MAN', 'lois lane', '344 CLINTON STREET, APARTAMENT 3-D', 'Gotham', 46460, 1111111111, 222222222, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 0, 19, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal', 155),
|
||||||
(1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal'),
|
(1104, 'Tony Stark', '06089160W', 'IRON MAN', 'Pepper Potts', '10880 MALIBU POINT, 90265', 'Gotham', 46460, 1111111111, 222222222, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 2, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 18, 0, 'florist','normal', 155),
|
||||||
(1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 'florist','normal'),
|
(1105, 'Max Eisenhardt', '251628698', 'MAGNETO', 'Rogue', 'UNKNOWN WHEREABOUTS', 'Gotham', 46460, 1111111111, 222222222, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 3, 1, 300, 8, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 18, 0, 'florist','normal', 155),
|
||||||
(1106, 'DavidCharlesHaller', '53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 'florist','normal'),
|
(1106, 'DavidCharlesHaller','53136686Q', 'LEGION', 'Charles Xavier', 'CITY OF NEW YORK, NEW YORK, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'DavidCharlesHaller@mydomain.com',NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, 19, 0, 'florist','normal', 155),
|
||||||
(1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 'florist','normal'),
|
(1107, 'Hank Pym', '09854837G', 'ANT MAN', 'Hawk', 'ANTHILL, SAN FRANCISCO, CALIFORNIA', 'Gotham', 46460, 1111111111, 222222222, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 19, 0, 'florist','normal', 155),
|
||||||
(1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA', 'Gotham', 46460, 1111111111, 222222222, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 'florist','normal'),
|
(1108, 'Charles Xavier', '22641921P', 'PROFESSOR X', 'Beast', '3800 VICTORY PKWY, CINCINNATI, OH 45207, USA','Gotham',46460,1111111111,222222222,1,'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 5, 1, 300, 13, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 1, NULL, 0, 0, 19, 0, 'florist','normal', 155),
|
||||||
(1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 'florist','normal'),
|
(1109, 'Bruce Banner', '16104829E', 'HULK', 'Black widow', 'SOMEWHERE IN NEW YORK', 'Gotham', 46460, 1111111111, 222222222, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, 9, 0, 'florist','normal', 155),
|
||||||
(1110, 'Jessica Jones', '58282869H', 'JESSICA JONES', 'Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 1, 0, NULL, 0, 0, NULL, 1, 'florist','normal'),
|
(1110, 'Jessica Jones', '58282869H', 'JESSICA JONES','Luke Cage', 'NYCC 2015 POSTER', 'Gotham', 46460, 1111111111, 222222222, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, 0, 0, NULL, 0, 0, NULL,1, 'florist','normal', 155),
|
||||||
(1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 0, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses'),
|
(1111, 'Missing', NULL, 'MISSING MAN', 'Anton', 'THE SPACE, UNIVERSE FAR AWAY', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL,0, 'others','loses', 155),
|
||||||
(1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 0, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL, 0, 'others','loses');
|
(1112, 'Trash', NULL, 'GARBAGE MAN', 'Unknown name', 'NEW YORK CITY, UNDERGROUND', 'Gotham', 46460, 1111111111, 222222222, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 0, 1, 0, NULL, 1, 0, NULL,0, 'others','loses', 155);
|
||||||
|
|
||||||
INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`)
|
INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`)
|
||||||
SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), UPPER(CONCAT(name, 'Social')), CONCAT(name, 'Contact'), UPPER(CONCAT(name, 'Street')), 'GOTHAM', 46460, 0, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1
|
SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), UPPER(CONCAT(name, 'Social')), CONCAT(name, 'Contact'), UPPER(CONCAT(name, 'Street')), 'GOTHAM', 46460, 0, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, 10, 5, util.VN_CURDATE(), 1
|
||||||
|
@ -1876,18 +1876,17 @@ INSERT INTO `vn`.`clientContact`(`id`, `clientFk`, `name`, `phone`)
|
||||||
(3, 1101, 'contact 3', 222333444),
|
(3, 1101, 'contact 3', 222333444),
|
||||||
(4, 1102, 'contact 1', 876543219);
|
(4, 1102, 'contact 1', 876543219);
|
||||||
|
|
||||||
INSERT INTO `vn`.`workerManaExcluded`(`workerFk`)
|
INSERT INTO `vn`.`departmentManaExcluded`(`departmentFk`)
|
||||||
VALUES
|
VALUES (31);
|
||||||
(9);
|
|
||||||
/*
|
/*
|
||||||
el mana de los trabajadores lo podemos poner a mano en la tabla si lo calculamos antes,
|
el mana de los trabajadores lo podemos poner a mano en la tabla si lo calculamos antes,
|
||||||
pero si hazemos alguna modificacion en alguna tabla que utiliza para calcularlo ya no seria correcto
|
pero si hacemos alguna modificacion en alguna tabla que utiliza para calcularlo ya no seria correcto
|
||||||
|
|
||||||
La otra manera es poner el calculo con los 2 trabajadores que utilizamos ahora mismo para los tickets
|
La otra manera es poner el calculo con los 2 trabajadores que utilizamos ahora mismo para los tickets
|
||||||
*/
|
*/
|
||||||
|
|
||||||
call vn.manaSpellersRequery(19);
|
call vn.manaSpellers_requery(155);
|
||||||
call vn.manaSpellersRequery(18);
|
call vn.manaSpellers_requery(31);
|
||||||
|
|
||||||
INSERT INTO `vn`.`clientSample`(`id`, `clientFk`, `typeFk`, `created`, `workerFk`, `userFk`, `companyFk`)
|
INSERT INTO `vn`.`clientSample`(`id`, `clientFk`, `typeFk`, `created`, `workerFk`, `userFk`, `companyFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -2188,15 +2187,6 @@ INSERT INTO `vn`.`smsConfig` (`id`, `uri`, `title`, `apiKey`)
|
||||||
VALUES
|
VALUES
|
||||||
('1', 'https://api.gateway360.com/api/3.0/sms/send', 'Verdnatura', '5715476da95b46d686a5a255e6459523');
|
('1', 'https://api.gateway360.com/api/3.0/sms/send', 'Verdnatura', '5715476da95b46d686a5a255e6459523');
|
||||||
|
|
||||||
INSERT INTO `vn`.`sharingClient`(`id`, `workerFk`, `started`, `ended`, `clientFk`)
|
|
||||||
VALUES
|
|
||||||
(1, 19, DATE_ADD(util.VN_CURDATE(), INTERVAL -5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +15 DAY), 1101),
|
|
||||||
(2, 18, DATE_ADD(util.VN_CURDATE(), INTERVAL -5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +15 DAY), 1106);
|
|
||||||
|
|
||||||
INSERT INTO `vn`.`sharingCart`(`id`, `workerFk`, `started`, `ended`, `workerSubstitute`, `created`)
|
|
||||||
VALUES
|
|
||||||
(1, 18, DATE_ADD(util.VN_CURDATE(), INTERVAL -5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +15 DAY), 19, DATE_ADD(util.VN_CURDATE(), INTERVAL -5 DAY));
|
|
||||||
|
|
||||||
CALL `vn`.zoneGeo_calcTree(); -- this is an auto calculate for table vn.zoneGeo, columns: path,lft,rgt,depth,sons
|
CALL `vn`.zoneGeo_calcTree(); -- this is an auto calculate for table vn.zoneGeo, columns: path,lft,rgt,depth,sons
|
||||||
|
|
||||||
INSERT INTO `vn`.`zoneIncluded` (`zoneFk`, `geoFk`, `isIncluded`)
|
INSERT INTO `vn`.`zoneIncluded` (`zoneFk`, `geoFk`, `isIncluded`)
|
||||||
|
@ -4111,4 +4101,4 @@ INSERT IGNORE INTO vn.vehicleType (id, name)
|
||||||
VALUES (1,'vehículo empresa'),
|
VALUES (1,'vehículo empresa'),
|
||||||
(2, 'furgoneta'),
|
(2, 'furgoneta'),
|
||||||
(3, 'cabeza tractora'),
|
(3, 'cabeza tractora'),
|
||||||
(4, 'remolque');
|
(4, 'remolque');
|
||||||
|
|
|
@ -1,53 +1,52 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_update`()
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vLastMonth DATE;
|
DECLARE vLastMonth DATE;
|
||||||
|
|
||||||
SET vLastMonth = util.firstDayOfMonth(TIMESTAMPADD(MONTH, -1, util.VN_CURDATE()));
|
SET vLastMonth = util.firstDayOfMonth(TIMESTAMPADD(MONTH, -1, util.VN_CURDATE()));
|
||||||
|
|
||||||
DELETE FROM analisis_ventas
|
DELETE FROM analisis_ventas
|
||||||
WHERE Año > YEAR(vLastMonth)
|
WHERE Año > YEAR(vLastMonth)
|
||||||
OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth));
|
OR (Año = YEAR(vLastMonth) AND Mes >= MONTH(vLastMonth));
|
||||||
|
|
||||||
INSERT INTO analisis_ventas (
|
INSERT INTO analisis_ventas (
|
||||||
Familia,
|
Familia,
|
||||||
Reino,
|
Reino,
|
||||||
Comercial,
|
departmentFk,
|
||||||
guillermo
commented
No veo que hayas cambiado el nombre de la columna No veo que hayas cambiado el nombre de la columna
|
|||||||
Comprador,
|
Comprador,
|
||||||
Provincia,
|
Provincia,
|
||||||
almacen,
|
almacen,
|
||||||
Año,
|
Año,
|
||||||
Mes,
|
Mes,
|
||||||
Semana,
|
Semana,
|
||||||
Vista,
|
Vista,
|
||||||
Importe
|
Importe
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
it.name,
|
it.name,
|
||||||
ic.name,
|
ic.name,
|
||||||
w.code,
|
c.departmentFk,
|
||||||
w2.code,
|
w.code,
|
||||||
p.name,
|
p.name,
|
||||||
wa.name,
|
wa.name,
|
||||||
tm.year,
|
tm.year,
|
||||||
tm.month,
|
tm.month,
|
||||||
tm.week,
|
tm.week,
|
||||||
dm.description,
|
dm.description,
|
||||||
bt.importe
|
bt.importe
|
||||||
FROM bs.ventas bt
|
FROM bs.ventas bt
|
||||||
LEFT JOIN vn.itemType it ON it.id = bt.tipo_id
|
LEFT JOIN vn.itemType it ON it.id = bt.tipo_id
|
||||||
LEFT JOIN vn.itemCategory ic ON ic.id = it.categoryFk
|
LEFT JOIN vn.itemCategory ic ON ic.id = it.categoryFk
|
||||||
LEFT JOIN vn.client c on c.id = bt.Id_Cliente
|
LEFT JOIN vn.client c on c.id = bt.Id_Cliente
|
||||||
LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
|
LEFT JOIN vn.worker w ON w.id = it.workerFk
|
||||||
LEFT JOIN vn.worker w2 ON w2.id = it.workerFk
|
JOIN vn.time tm ON tm.dated = bt.fecha
|
||||||
JOIN vn.time tm ON tm.dated = bt.fecha
|
JOIN vn.sale s ON s.id = bt.Id_Movimiento
|
||||||
JOIN vn.sale s ON s.id = bt.Id_Movimiento
|
LEFT JOIN vn.ticket t ON t.id = s.ticketFk
|
||||||
LEFT JOIN vn.ticket t ON t.id = s.ticketFk
|
JOIN vn.agencyMode am ON am.id = t.agencyModeFk
|
||||||
JOIN vn.agencyMode am ON am.id = t.agencyModeFk
|
LEFT JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
||||||
LEFT JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
LEFT JOIN vn.address a ON a.id = t.addressFk
|
||||||
LEFT JOIN vn.address a ON a.id = t.addressFk
|
LEFT JOIN vn.province p ON p.id = a.provinceFk
|
||||||
LEFT JOIN vn.province p ON p.id = a.provinceFk
|
LEFT JOIN vn.warehouse wa ON wa.id = t.warehouseFk
|
||||||
LEFT JOIN vn.warehouse wa ON wa.id = t.warehouseFk
|
WHERE bt.fecha >= vLastMonth AND ic.merchandise;
|
||||||
WHERE bt.fecha >= vLastMonth AND ic.merchandise;
|
END$$
|
||||||
END$$
|
DELIMITER ;
|
||||||
DELIMITER ;
|
|
||||||
|
|
|
@ -1,24 +1,43 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaultersFromDate`(IN vDate DATE)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`defaultersFromDate`(
|
||||||
|
IN vDated DATE
|
||||||
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
/**
|
||||||
SELECT t1.*, c.name Cliente, w.code workerCode, c.payMethodFk pay_met_id, c.dueDay Vencimiento
|
* Retorna la info de clientes morosos a una fecha
|
||||||
FROM (
|
*
|
||||||
-- Filtramos aquellos clientes cuyo saldo se ha incrementado de ayer a hoy
|
* @param vDated Fecha a comprobar
|
||||||
select * from(
|
*/
|
||||||
select today.client, today.amount todayAmount, yesterday.amount yesterdayAmount, round(yesterday.amount - today.amount,2) as difference, defaulterSince
|
WITH todayDefaulters AS(
|
||||||
from
|
SELECT client, amount, defaulterSince
|
||||||
(select client, amount, defaulterSince
|
FROM bi.defaulters
|
||||||
from defaulters
|
WHERE date = vDated
|
||||||
where date = vDate and hasChanged) today
|
AND hasChanged
|
||||||
join
|
), yesterdayDefaulters AS(
|
||||||
(select client, amount
|
SELECT client, amount
|
||||||
from defaulters
|
FROM bi.defaulters
|
||||||
where date = TIMESTAMPADD(DAY,-1,vDate)) yesterday using(client)
|
WHERE date = vDated - INTERVAL 1 DAY
|
||||||
|
), newDefaulters AS(
|
||||||
having today.amount > 0 and difference <> 0
|
SELECT td.client,
|
||||||
) newDefaulters
|
td.amount todayAmount,
|
||||||
)t1 left join vn.client c ON c.id = t1.client
|
yd.amount yesterdayAmount,
|
||||||
left join vn.worker w ON w.id = c.salesPersonFk;
|
ROUND(yd.amount - td.amount, 2) difference,
|
||||||
|
defaulterSince
|
||||||
|
FROM todayDefaulters td
|
||||||
|
JOIN yesterdayDefaulters yd ON yd.client = td.client
|
||||||
|
WHERE td.amount > 0
|
||||||
|
HAVING difference <> 0
|
||||||
|
) SELECT nd.client,
|
||||||
|
nd.todayAmount,
|
||||||
|
nd.yesterdayAmount,
|
||||||
|
nd.difference,
|
||||||
|
nd.defaulterSince,
|
||||||
|
c.name Cliente,
|
||||||
|
d.name departmentName,
|
||||||
|
c.payMethodFk pay_met_id,
|
||||||
|
c.dueDay Vencimiento
|
||||||
|
FROM newDefaulters nd
|
||||||
|
LEFT JOIN vn.client c ON c.id = nd.client
|
||||||
|
LEFT JOIN vn.department d ON d.id = c.departmentFk;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`campaignComparative`(vDateFrom DATE, vDateTo DATE)
|
|
||||||
BEGIN
|
|
||||||
SELECT
|
|
||||||
workerName,
|
|
||||||
id,
|
|
||||||
name,
|
|
||||||
CAST(SUM(previousAmmount) AS DECIMAL(10, 0)) AS previousAmmount,
|
|
||||||
CAST(SUM(currentAmmount) AS DECIMAL(10, 0)) AS currentAmmount
|
|
||||||
FROM (
|
|
||||||
(SELECT
|
|
||||||
CONCAT(w.firstname, ' ', w.lastName) AS workerName,
|
|
||||||
c.id,
|
|
||||||
c.name,
|
|
||||||
SUM(v.importe) AS previousAmmount,
|
|
||||||
0 currentAmmount
|
|
||||||
FROM bs.ventas v
|
|
||||||
INNER JOIN vn.`client` c ON v.Id_Cliente = c.id
|
|
||||||
INNER JOIN vn.worker w ON c.salesPersonFk = w.id
|
|
||||||
WHERE v.fecha BETWEEN DATE_ADD(vDateFrom, INTERVAL - 1 YEAR)
|
|
||||||
AND DATE_ADD(vDateTo, INTERVAL - 1 YEAR)
|
|
||||||
GROUP BY w.id, v.Id_Cliente)
|
|
||||||
UNION ALL
|
|
||||||
(SELECT
|
|
||||||
CONCAT(w.firstname, ' ', w.lastName) AS workerName,
|
|
||||||
c.id,
|
|
||||||
c.name,
|
|
||||||
0 AS previousAmmount,
|
|
||||||
SUM(s.quantity * s.price) AS currentAmmount
|
|
||||||
FROM vn.sale s
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
JOIN vn.client c ON c.id = t.clientFk
|
|
||||||
JOIN vn.worker w ON c.salesPersonFk = w.id
|
|
||||||
WHERE t.shipped BETWEEN vDateFrom
|
|
||||||
AND vDateTo
|
|
||||||
GROUP BY w.id, c.id)
|
|
||||||
) comparative
|
|
||||||
GROUP BY workerName, id
|
|
||||||
HAVING (previousAmmount <> 0 OR currentAmmount <> 0)
|
|
||||||
ORDER BY workerName, id;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,27 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`carteras_add`()
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Inserta en la tabla @bs.carteras las ventas desde el año pasado
|
|
||||||
* agrupadas por trabajador, año y mes
|
|
||||||
*/
|
|
||||||
DECLARE vYear INT DEFAULT YEAR(util.VN_CURDATE()) - 1;
|
|
||||||
|
|
||||||
DELETE FROM bs.carteras WHERE Año >= vYear;
|
|
||||||
|
|
||||||
CALL util.time_generate(
|
|
||||||
MAKEDATE(vYear, 1),
|
|
||||||
(SELECT MAX(fecha) FROM ventas)
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO carteras(Año, Mes , CodigoTrabajador, Peso)
|
|
||||||
SELECT t.`year`, t.`month`, w.code, SUM(v.importe)
|
|
||||||
FROM tmp.time t
|
|
||||||
JOIN ventas v on t.dated = v.fecha
|
|
||||||
JOIN vn.client c on c.id = v.Id_Cliente
|
|
||||||
JOIN vn.worker w ON w.id = c.salesPersonFk
|
|
||||||
GROUP BY w.code, t.`year`, t.`month`;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.time;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -20,10 +20,10 @@ BEGIN
|
||||||
DELETE FROM payMethodClientEvolution
|
DELETE FROM payMethodClientEvolution
|
||||||
WHERE dated < vFourYearsAgo;
|
WHERE dated < vFourYearsAgo;
|
||||||
|
|
||||||
DELETE FROM salesByclientSalesPerson
|
DELETE FROM salesByclientSalesPerson
|
||||||
WHERE dated < vFourYearsAgo;
|
WHERE dated < vFourYearsAgo;
|
||||||
|
|
||||||
DELETE FROM m3
|
DELETE FROM m3
|
||||||
WHERE fecha < vTwoYearAgo;
|
WHERE fecha < vTwoYearAgo;
|
||||||
|
|
||||||
DELETE FROM salesByItemTypeDay
|
DELETE FROM salesByItemTypeDay
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`clientDied_calc`(
|
||||||
|
vDays INT,
|
||||||
|
vCountryCode VARCHAR(2)
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Recalcula los clientes inactivos y hace insert en la tabla clientDied
|
||||||
|
* estableciendo hasta 3 avisos en función del periodo y el código de país.
|
||||||
|
*
|
||||||
|
* @param vDays El número de días a considerar para la inactividad del cliente
|
||||||
|
* @param vCountryCode El código del país para filtrar los clientes
|
||||||
|
*/
|
||||||
|
DECLARE vFirstPeriod , vSecondPeriod, vThridPeriod DATE;
|
||||||
|
SET vFirstPeriod = util.VN_CURDATE() - INTERVAL vDays DAY;
|
||||||
|
SET vSecondPeriod = util.VN_CURDATE() - INTERVAL vDays * 2 DAY;
|
||||||
|
SET vThridPeriod = util.VN_CURDATE() - INTERVAL vDays * 3 DAY;
|
||||||
|
|
||||||
|
DELETE cd.* FROM clientDied cd
|
||||||
|
JOIN (
|
||||||
|
SELECT c.id FROM vn.client c
|
||||||
|
JOIN vn.country co ON co.id = c.countryFk
|
||||||
|
WHERE co.code = vCountryCode
|
||||||
|
) sub ON sub.id = cd.clientFk;
|
||||||
|
|
||||||
|
INSERT INTO clientDied (clientFk, lastInvoiced, warning)
|
||||||
|
SELECT c.id,
|
||||||
|
sub.lastShipped,
|
||||||
|
CASE
|
||||||
|
WHEN lastShipped < vThridPeriod OR lastShipped IS NULL THEN 'third'
|
||||||
|
WHEN lastShipped < vSecondPeriod THEN 'second'
|
||||||
|
WHEN lastShipped < vFirstPeriod THEN 'first'
|
||||||
|
END
|
||||||
|
FROM vn.client c
|
||||||
|
JOIN vn.country co ON co .id = c.countryFk
|
||||||
|
JOIN vn.department w ON w.id = c.departmentFk
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT c.id, DATE(MAX(t.shipped)) lastShipped
|
||||||
|
FROM vn.client c
|
||||||
|
LEFT JOIN vn.ticket t ON t.clientFk = c.id
|
||||||
|
LEFT JOIN vn.country co ON co.id = c.countryFk
|
||||||
|
WHERE co.code = vCountryCode
|
||||||
|
AND (t.shipped <= util.VN_CURDATE() OR t.shipped IS NULL)
|
||||||
|
GROUP BY c.id
|
||||||
|
) sub ON sub.id = c.id
|
||||||
|
LEFT JOIN vn.clientObservation cob ON cob.clientFk = c.id
|
||||||
|
AND cob.created > vThridPeriod
|
||||||
|
WHERE (sub.lastShipped < vFirstPeriod OR sub.lastShipped IS NULL)
|
||||||
|
AND c.created < vThridPeriod
|
||||||
|
AND co.code = vCountryCode
|
||||||
|
AND cob.`text` IS NULL
|
||||||
|
AND c.id NOT IN (
|
||||||
|
SELECT DISTINCT clientFk
|
||||||
|
FROM vn.ticket
|
||||||
|
WHERE refFk IS NULL
|
||||||
|
AND shipped >= vFirstPeriod
|
||||||
|
)
|
||||||
|
GROUP BY c.id;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -33,9 +33,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
FROM vn.client c
|
FROM vn.client c
|
||||||
JOIN vn.country co ON co .id = c.countryFk
|
JOIN vn.country co ON co .id = c.countryFk
|
||||||
JOIN vn.worker w ON w.id = c.salesPersonFk
|
JOIN vn.departmentMana dm ON dm.departmentFk = c.departmentFk
|
||||||
JOIN vn.worker b ON b.id = w.bossFk
|
|
||||||
JOIN vn.workerMana wm ON wm.workerFk = c.salesPersonFk
|
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT c.id, DATE(MAX(t.shipped)) lastShipped
|
SELECT c.id, DATE(MAX(t.shipped)) lastShipped
|
||||||
FROM vn.client c
|
FROM vn.client c
|
||||||
|
|
|
@ -12,40 +12,40 @@ BEGIN
|
||||||
|
|
||||||
-- Ventas totales del ultimo año
|
-- Ventas totales del ultimo año
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET lastYearSales =
|
SET lastYearSales =
|
||||||
(SELECT SUM(importe + recargo)
|
(SELECT SUM(importe + recargo)
|
||||||
FROM ventas v
|
FROM ventas v
|
||||||
JOIN vn.company c ON c.id = v.empresa_id
|
JOIN vn.company c ON c.id = v.empresa_id
|
||||||
JOIN vn.companyGroup cg ON cg.id = c.companyGroupFk
|
JOIN vn.companyGroup cg ON cg.id = c.companyGroupFk
|
||||||
WHERE fecha BETWEEN oneYearBefore AND vDated
|
WHERE fecha BETWEEN oneYearBefore AND vDated
|
||||||
AND cg.code = 'Verdnatura'
|
AND cg.code = 'Verdnatura'
|
||||||
)
|
)
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Greuge total acumulado
|
-- Greuge total acumulado
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET totalGreuge =
|
SET totalGreuge =
|
||||||
(SELECT SUM(amount)
|
(SELECT SUM(amount)
|
||||||
FROM vn.greuge
|
FROM vn.greuge
|
||||||
WHERE shipped <= vDated
|
WHERE shipped <= vDated
|
||||||
)
|
)
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Tasa de morosidad con respecto a las ventas del último mes
|
-- Tasa de morosidad con respecto a las ventas del último mes
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET latePaymentRate =
|
SET latePaymentRate =
|
||||||
(SELECT SUM(amount)
|
(SELECT SUM(amount)
|
||||||
FROM bi.defaulters
|
FROM bi.defaulters
|
||||||
WHERE date = vDated AND amount > 0)
|
WHERE date = vDated AND amount > 0)
|
||||||
/
|
/
|
||||||
(SELECT SUM(importe + recargo)
|
(SELECT SUM(importe + recargo)
|
||||||
FROM ventas
|
FROM ventas
|
||||||
WHERE fecha BETWEEN oneMonthBefore AND vDated)
|
WHERE fecha BETWEEN oneMonthBefore AND vDated)
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Número de trabajadores activos
|
-- Número de trabajadores activos
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET countEmployee =
|
SET countEmployee =
|
||||||
(SELECT CAST(SUM(ct.hoursWeek) / 40 AS DECIMAL (10, 2))
|
(SELECT CAST(SUM(ct.hoursWeek) / 40 AS DECIMAL (10, 2))
|
||||||
FROM vn.business b
|
FROM vn.business b
|
||||||
JOIN vn.calendarType ct ON ct.id = b.calendarTypeFk
|
JOIN vn.calendarType ct ON ct.id = b.calendarTypeFk
|
||||||
|
@ -54,17 +54,17 @@ BEGIN
|
||||||
)
|
)
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Maná medio acumulado por comercial
|
-- Maná medio acumulado
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET averageMana =
|
SET averageMana =
|
||||||
(SELECT AVG(amount)
|
(SELECT AVG(amount)
|
||||||
FROM vn.workerMana
|
FROM vn.departmentMana
|
||||||
)
|
)
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Número de clientes que han comprado en los últimos 30 dias
|
-- Número de clientes que han comprado en los últimos 30 dias
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET lastMonthActiveClients =
|
SET lastMonthActiveClients =
|
||||||
(SELECT COUNT(DISTINCT t.clientFk)
|
(SELECT COUNT(DISTINCT t.clientFk)
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
||||||
|
@ -73,9 +73,9 @@ BEGIN
|
||||||
|
|
||||||
-- Número de clientes que no han comprado en los últimos 30 dias, pero compraron en los 30 anteriores
|
-- Número de clientes que no han comprado en los últimos 30 dias, pero compraron en los 30 anteriores
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET lastMonthLostClients =
|
SET lastMonthLostClients =
|
||||||
(SELECT COUNT(lm.clientFk)
|
(SELECT COUNT(lm.clientFk)
|
||||||
FROM
|
FROM
|
||||||
(SELECT DISTINCT t.clientFk
|
(SELECT DISTINCT t.clientFk
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
||||||
|
@ -92,9 +92,9 @@ BEGIN
|
||||||
|
|
||||||
-- Número de clientes que han comprado en los últimos 30 dias, pero no compraron en los 30 anteriores
|
-- Número de clientes que han comprado en los últimos 30 dias, pero no compraron en los 30 anteriores
|
||||||
UPDATE indicators
|
UPDATE indicators
|
||||||
SET lastMonthNewClients =
|
SET lastMonthNewClients =
|
||||||
(SELECT COUNT(cm.clientFk)
|
(SELECT COUNT(cm.clientFk)
|
||||||
FROM
|
FROM
|
||||||
(SELECT DISTINCT t.clientFk
|
(SELECT DISTINCT t.clientFk
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
WHERE t.shipped BETWEEN oneMonthBefore AND vDated
|
||||||
|
@ -120,7 +120,7 @@ BEGIN
|
||||||
|
|
||||||
-- Cálculo de las ventas agrupado por semanas
|
-- Cálculo de las ventas agrupado por semanas
|
||||||
SELECT week INTO vWeek
|
SELECT week INTO vWeek
|
||||||
FROM vn.time
|
FROM vn.time
|
||||||
WHERE dated = vDated;
|
WHERE dated = vDated;
|
||||||
|
|
||||||
TRUNCATE salesByWeek;
|
TRUNCATE salesByWeek;
|
||||||
|
@ -134,12 +134,12 @@ BEGIN
|
||||||
|
|
||||||
-- Indicador Ventas semana actual
|
-- Indicador Ventas semana actual
|
||||||
UPDATE indicators i
|
UPDATE indicators i
|
||||||
JOIN salesByWeek s ON s.week= vWeek
|
JOIN salesByWeek s ON s.week= vWeek
|
||||||
AND s.year = YEAR(vDated)
|
AND s.year = YEAR(vDated)
|
||||||
SET i.thisWeekSales = s.sales
|
SET i.thisWeekSales = s.sales
|
||||||
WHERE updated = vDated;
|
WHERE updated = vDated;
|
||||||
|
|
||||||
-- Indicador ventas semana actual en el año pasado
|
-- Indicador ventas semana actual en el año pasado
|
||||||
UPDATE indicators i
|
UPDATE indicators i
|
||||||
JOIN salesByWeek s ON s.week = vWeek
|
JOIN salesByWeek s ON s.week = vWeek
|
||||||
AND s.year = YEAR(vDated)-1
|
AND s.year = YEAR(vDated)-1
|
||||||
|
|
|
@ -14,51 +14,51 @@ BEGIN
|
||||||
|
|
||||||
SELECT id INTO vManaId
|
SELECT id INTO vManaId
|
||||||
FROM vn.component WHERE code = 'mana';
|
FROM vn.component WHERE code = 'mana';
|
||||||
|
|
||||||
SELECT id INTO vManaAutoId
|
SELECT id INTO vManaAutoId
|
||||||
FROM vn.component WHERE code = 'autoMana';
|
FROM vn.component WHERE code = 'autoMana';
|
||||||
|
|
||||||
SELECT id INTO vClaimManaId
|
SELECT id INTO vClaimManaId
|
||||||
FROM vn.component WHERE code = 'manaClaim';
|
FROM vn.component WHERE code = 'manaClaim';
|
||||||
|
|
||||||
SELECT id INTO vManaBankId
|
SELECT id INTO vManaBankId
|
||||||
FROM vn.accounting WHERE code = 'mana';
|
FROM vn.accounting WHERE code = 'mana';
|
||||||
|
|
||||||
SELECT id INTO vManaGreugeTypeId
|
SELECT id INTO vManaGreugeTypeId
|
||||||
FROM vn.greugeType WHERE code = 'mana';
|
FROM vn.greugeType WHERE code = 'mana';
|
||||||
|
|
||||||
SELECT manaFromDays, manaToDays
|
SELECT manaFromDays, manaToDays
|
||||||
INTO vManaFromDays, vManaToDays
|
INTO vManaFromDays, vManaToDays
|
||||||
FROM vn.salespersonConfig;
|
FROM vn.manaConfig;
|
||||||
|
|
||||||
SELECT MAX(dated) INTO vFromDated
|
SELECT MAX(dated) INTO vFromDated
|
||||||
FROM vn.clientManaCache;
|
FROM vn.clientManaCache;
|
||||||
|
|
||||||
DELETE FROM vn.clientManaCache
|
DELETE FROM vn.clientManaCache
|
||||||
WHERE dated = vFromDated;
|
WHERE dated = vFromDated;
|
||||||
|
|
||||||
SELECT MAX(dated) INTO vFromDated
|
SELECT MAX(dated) INTO vFromDated
|
||||||
FROM vn.clientManaCache;
|
FROM vn.clientManaCache;
|
||||||
|
|
||||||
IF vFromDated IS NULL THEN
|
IF vFromDated IS NULL THEN
|
||||||
SELECT manaDateFrom
|
SELECT manaDateFrom
|
||||||
INTO vFromDated
|
INTO vFromDated
|
||||||
FROM vn.salespersonConfig;
|
FROM vn.manaConfig;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO
|
WHILE vFromDated + INTERVAL vManaToDays DAY < util.VN_CURDATE() DO
|
||||||
SELECT vFromDated + INTERVAL vManaToDays DAY,
|
SELECT vFromDated + INTERVAL vManaToDays DAY,
|
||||||
vFromDated - INTERVAL vManaFromDays DAY
|
vFromDated - INTERVAL vManaFromDays DAY
|
||||||
INTO vToDated,
|
INTO vToDated,
|
||||||
vForDeleteDated;
|
vForDeleteDated;
|
||||||
|
|
||||||
DELETE FROM vn.clientManaCache
|
DELETE FROM vn.clientManaCache
|
||||||
WHERE dated <= vForDeleteDated;
|
WHERE dated <= vForDeleteDated;
|
||||||
|
|
||||||
INSERT INTO vn.clientManaCache(clientFk, mana, dated)
|
INSERT INTO vn.clientManaCache(clientFk, mana, dated)
|
||||||
SELECT Id_Cliente,
|
SELECT Id_Cliente,
|
||||||
SUM(mana),
|
SUM(mana),
|
||||||
vToDated
|
vToDated
|
||||||
FROM (
|
FROM (
|
||||||
SELECT a.clientFk Id_Cliente, s.quantity * sc.value mana
|
SELECT a.clientFk Id_Cliente, s.quantity * sc.value mana
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
|
@ -66,19 +66,19 @@ BEGIN
|
||||||
JOIN vn.sale s ON s.ticketFk = t.id
|
JOIN vn.sale s ON s.ticketFk = t.id
|
||||||
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
||||||
WHERE sc.componentFk IN (vManaAutoId, vManaId, vClaimManaId)
|
WHERE sc.componentFk IN (vManaAutoId, vManaId, vClaimManaId)
|
||||||
AND t.shipped > vFromDated
|
AND t.shipped > vFromDated
|
||||||
AND DATE(t.shipped) <= vToDated
|
AND DATE(t.shipped) <= vToDated
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT clientFk, - amountPaid
|
SELECT clientFk, - amountPaid
|
||||||
FROM vn.receipt
|
FROM vn.receipt
|
||||||
WHERE bankFk = vManaBankId
|
WHERE bankFk = vManaBankId
|
||||||
AND payed > vFromDated
|
AND payed > vFromDated
|
||||||
AND payed <= vToDated
|
AND payed <= vToDated
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT clientFk, amount
|
SELECT clientFk, amount
|
||||||
FROM vn.greuge
|
FROM vn.greuge
|
||||||
WHERE greugeTypeFk = vManaGreugeTypeId
|
WHERE greugeTypeFk = vManaGreugeTypeId
|
||||||
AND shipped > vFromDated
|
AND shipped > vFromDated
|
||||||
AND shipped <= vToDated
|
AND shipped <= vToDated
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT clientFk, mana
|
SELECT clientFk, mana
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`manaSpellers_actualize`()
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`manaSpellers_actualize`()
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Recalcula el valor del campo con el modificador de precio
|
* Recalcula el valor del campo con el modificador de precio
|
||||||
* para el componente de maná automático.
|
* para el componente de maná automático.
|
||||||
*/
|
*/
|
||||||
UPDATE vn.workerMana wm
|
UPDATE vn.departmentMana dm
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT c.lastSalesPersonFk,
|
SELECT c.departmentFk,
|
||||||
FLOOR(SUM(s.amount) / 12) amount
|
FLOOR(SUM(s.amount) / 12) amount
|
||||||
FROM salesByclientSalesPerson s
|
FROM salesByclientSalesPerson s
|
||||||
JOIN vn.client c ON c.id = s.clientFk
|
JOIN vn.client c ON c.id = s.clientFk
|
||||||
WHERE s.dated BETWEEN util.VN_CURDATE() - INTERVAL 1 YEAR AND util.VN_CURDATE()
|
WHERE s.dated BETWEEN util.VN_CURDATE() - INTERVAL 1 YEAR AND util.VN_CURDATE()
|
||||||
GROUP BY c.lastSalesPersonFk
|
GROUP BY c.departmentFk
|
||||||
)avgPortfolioWeight ON avgPortfolioWeight.lastSalesPersonFk = wm.workerFk
|
)avgPortfolioWeight ON avgPortfolioWeight.departmentFk = dm.departmentFk
|
||||||
JOIN vn.salespersonConfig spc
|
JOIN vn.manaConfig mc
|
||||||
SET wm.pricesModifierRate =
|
SET dm.pricesModifierRate =
|
||||||
IFNULL(
|
IFNULL(
|
||||||
GREATEST(
|
GREATEST(
|
||||||
spc.manaMinRate,
|
mc.manaMinRate,
|
||||||
LEAST(
|
LEAST(
|
||||||
spc.manaMaxRate,
|
mc.manaMaxRate,
|
||||||
ROUND( - wm.amount / avgPortfolioWeight.amount, 3)
|
ROUND( - dm.amount / avgPortfolioWeight.amount, 3)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
,0);
|
,0);
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`porfolio_add`()
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Inserta en la tabla @bs.portfolio las ventas desde el año pasado
|
||||||
|
* agrupadas por equipo, año y mes
|
||||||
|
*/
|
||||||
|
DECLARE vYear INT DEFAULT YEAR(util.VN_CURDATE()) - 1;
|
||||||
|
|
||||||
|
CALL util.time_generate(
|
||||||
|
MAKEDATE(vYear, 1),
|
||||||
|
(SELECT MAX(dated) FROM sale)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO portfolio(yeared, monthed , saleDepartmentFk, Amount)
|
||||||
|
SELECT t.`year`, t.`month`, w.code, SUM(s.amount)
|
||||||
|
FROM tmp.time t
|
||||||
|
JOIN sale s on t.dated = s.dated
|
||||||
|
JOIN vn.client c on c.id = s.clientFk
|
||||||
|
JOIN vn.department d ON d.id = c.departmentFk
|
||||||
|
GROUP BY d.id, t.`year`, t.`month`;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.time;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,20 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salePersonEvolutionAdd`(IN vDateStart DATETIME)
|
|
||||||
BEGIN
|
|
||||||
DELETE FROM bs.salePersonEvolution
|
|
||||||
WHERE dated <= DATE_SUB(util.VN_CURDATE(), INTERVAL 1 YEAR);
|
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO bs.salePersonEvolution (dated, amount, equalizationTax, salesPersonFk)
|
|
||||||
SELECT fecha dated,
|
|
||||||
CAST(SUM(importe) AS DECIMAL(10,2) ) amount,
|
|
||||||
CAST(SUM(recargo) AS DECIMAL(10,2) ) equalizationTax ,
|
|
||||||
IFNULL(salesPersonFk,0) salesPersonFk
|
|
||||||
FROM bs.ventas v
|
|
||||||
JOIN vn.client c ON v.Id_Cliente = c.id
|
|
||||||
JOIN vn.company co ON co.id = v.empresa_id
|
|
||||||
WHERE co.code = "VNL" AND fecha >= vDateStart
|
|
||||||
GROUP BY v.fecha,c.salesPersonFk
|
|
||||||
ORDER BY salesPersonFk,dated ASC;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -2,9 +2,9 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salesByclientSalesPerson_add`(vDatedFrom DATE)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salesByclientSalesPerson_add`(vDatedFrom DATE)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Agrupa las ventas por cliente/comercial/fecha en la tabla bs.salesByclientSalesPerson
|
* Agrupa las ventas por cliente/fecha en la tabla bs.salesByclientSalesPerson
|
||||||
* El asociación cliente/comercial/fecha, se mantiene correcta en el tiempo
|
* El asociación cliente/fecha, se mantiene correcta en el tiempo
|
||||||
*
|
*
|
||||||
* @param vDatedFrom el cálculo se realizará desde la fecha introducida hasta ayer
|
* @param vDatedFrom el cálculo se realizará desde la fecha introducida hasta ayer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -12,27 +12,26 @@ BEGIN
|
||||||
SET vDatedFrom = util.VN_CURDATE() - INTERVAL 1 MONTH;
|
SET vDatedFrom = util.VN_CURDATE() - INTERVAL 1 MONTH;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
UPDATE salesByclientSalesPerson
|
UPDATE salesByclientSalesPerson
|
||||||
SET amount = 0,
|
SET amount = 0,
|
||||||
equalizationTax = 0,
|
equalizationTax = 0,
|
||||||
amountNewBorn = 0
|
amountNewBorn = 0
|
||||||
WHERE dated BETWEEN vDatedFrom AND util.yesterday();
|
WHERE dated BETWEEN vDatedFrom AND util.yesterday();
|
||||||
|
|
||||||
INSERT INTO salesByclientSalesPerson(
|
INSERT INTO salesByclientSalesPerson(
|
||||||
dated,
|
dated,
|
||||||
salesPersonFk,
|
salesPersonFk,
|
||||||
clientFk,
|
clientFk,
|
||||||
amount,
|
amount,
|
||||||
equalizationTax)
|
equalizationTax)
|
||||||
SELECT s.dated,
|
SELECT dated,
|
||||||
c.salesPersonFk,
|
NULL,
|
||||||
s.clientFk,
|
clientFk,
|
||||||
SUM(s.amount),
|
SUM(amount),
|
||||||
SUM(s.surcharge)
|
SUM(surcharge)
|
||||||
FROM sale s
|
FROM sale
|
||||||
JOIN vn.client c on s.clientFk = c.id
|
WHERE dated BETWEEN vDatedFrom AND util.yesterday()
|
||||||
WHERE s.dated BETWEEN vDatedFrom AND util.yesterday()
|
GROUP BY dated, clientFk
|
||||||
GROUP BY s.dated, c.salesPersonFk, s.clientFk
|
|
||||||
ON DUPLICATE KEY UPDATE amount= VALUES(amount),
|
ON DUPLICATE KEY UPDATE amount= VALUES(amount),
|
||||||
equalizationTax= VALUES(equalizationTax);
|
equalizationTax= VALUES(equalizationTax);
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salesDepartmentEvolution_add`()
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Calcula los datos para los gráficos de evolución agrupado por departmentFk y día.
|
||||||
|
* Recalcula automáticamente los 3 últimos meses para comprobar si hay algún cambio.
|
||||||
|
*/
|
||||||
|
DECLARE vDated DATE;
|
||||||
|
|
||||||
|
SELECT MAX(dated) - INTERVAL 3 MONTH INTO vDated
|
||||||
|
FROM salesDepartmentEvolution;
|
||||||
|
|
||||||
|
DELETE FROM salesDepartmentEvolution
|
||||||
|
WHERE dated >= vDated;
|
||||||
|
|
||||||
|
IF ISNULL(vDated) THEN
|
||||||
|
SELECT MIN(dated) INTO vDated
|
||||||
|
FROM salesByClientDepartment;
|
||||||
|
|
||||||
|
INSERT INTO salesByClientDepartment(
|
||||||
|
departmentFk,
|
||||||
|
dated,
|
||||||
|
amount,
|
||||||
|
equalizationTax,
|
||||||
|
amountNewBorn
|
||||||
|
)
|
||||||
|
SELECT departmentFk,
|
||||||
|
dated,
|
||||||
|
amount,
|
||||||
|
equalizationTax,
|
||||||
|
amountNewBorn
|
||||||
|
FROM salesByClientDepartment
|
||||||
|
WHERE dated = vDated
|
||||||
|
GROUP BY departmentFk;
|
||||||
|
|
||||||
|
SET vDated = vDated + INTERVAL 1 DAY;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHILE vDated < util.VN_CURDATE() DO
|
||||||
|
|
||||||
|
REPLACE salesByClientDepartment(departmentFk, dated, amount)
|
||||||
|
SELECT departmentFk, vDated, amount
|
||||||
|
FROM(SELECT departmentFk, SUM(amount) amount
|
||||||
|
FROM(SELECT departmentFk, amount
|
||||||
|
FROM salesByClientDepartment
|
||||||
|
WHERE dated = vDated - INTERVAL 1 DAY
|
||||||
|
UNION ALL
|
||||||
|
SELECT departmentFk, amount
|
||||||
|
FROM salesByClientDepartment
|
||||||
|
WHERE dated = vDated
|
||||||
|
UNION ALL
|
||||||
|
SELECT departmentFk, - amount
|
||||||
|
FROM salesByClientDepartment
|
||||||
|
WHERE dated = vDated - INTERVAL 1 YEAR
|
||||||
|
)sub
|
||||||
|
GROUP BY departmentFk
|
||||||
|
)sub
|
||||||
|
GROUP BY departmentFk;
|
||||||
|
|
||||||
|
SET vDated = vDated + INTERVAL 1 DAY;
|
||||||
|
|
||||||
|
END WHILE;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,65 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`salesPersonEvolution_add`()
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Calcula los datos para los gráficos de evolución agrupado por salesPersonFk y día.
|
|
||||||
* Recalcula automáticamente los 3 últimos meses para comprobar si hay algún cambio.
|
|
||||||
*/
|
|
||||||
DECLARE vDated DATE;
|
|
||||||
DECLARE vCont INT DEFAULT 1;
|
|
||||||
|
|
||||||
SELECT MAX(dated) - INTERVAL 3 MONTH INTO vDated
|
|
||||||
FROM salesPersonEvolution;
|
|
||||||
|
|
||||||
DELETE FROM salesPersonEvolution
|
|
||||||
WHERE dated >= vDated;
|
|
||||||
|
|
||||||
IF ISNULL(vDated) THEN
|
|
||||||
SELECT MIN(dated) INTO vDated
|
|
||||||
FROM salesByclientSalesPerson;
|
|
||||||
|
|
||||||
INSERT INTO salesPersonEvolution(
|
|
||||||
salesPersonFk,
|
|
||||||
dated,
|
|
||||||
amount,
|
|
||||||
equalizationTax,
|
|
||||||
amountNewBorn
|
|
||||||
)
|
|
||||||
SELECT salesPersonFk,
|
|
||||||
dated,
|
|
||||||
amount,
|
|
||||||
equalizationTax,
|
|
||||||
amountNewBorn
|
|
||||||
FROM salesByclientSalesPerson
|
|
||||||
WHERE dated = vDated
|
|
||||||
GROUP BY salesPersonFk;
|
|
||||||
|
|
||||||
SET vDated = vDated + INTERVAL 1 DAY;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
WHILE vDated < util.VN_CURDATE() DO
|
|
||||||
|
|
||||||
SET vCont = vCont + 1;
|
|
||||||
REPLACE salesPersonEvolution(salesPersonFk, dated, amount)
|
|
||||||
SELECT salesPersonFk, vDated, amount
|
|
||||||
FROM(SELECT salesPersonFk, SUM(amount) amount
|
|
||||||
FROM(SELECT salesPersonFk, amount
|
|
||||||
FROM salesPersonEvolution
|
|
||||||
WHERE dated = vDated - INTERVAL 1 DAY
|
|
||||||
UNION ALL
|
|
||||||
SELECT salesPersonFk, amount
|
|
||||||
FROM salesByclientSalesPerson
|
|
||||||
WHERE dated = vDated
|
|
||||||
UNION ALL
|
|
||||||
SELECT salesPersonFk, - amount
|
|
||||||
FROM salesByclientSalesPerson
|
|
||||||
WHERE dated = vDated - INTERVAL 1 YEAR
|
|
||||||
)sub
|
|
||||||
GROUP BY salesPersonFk
|
|
||||||
)sub
|
|
||||||
GROUP BY salesPersonFk;
|
|
||||||
|
|
||||||
SET vDated = vDated + INTERVAL 1 DAY;
|
|
||||||
END WHILE;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -2,7 +2,7 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vendedores_add_launcher`()
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vendedores_add_launcher`()
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
CALL bs.salesByclientSalesPerson_add(util.VN_CURDATE()- INTERVAL 45 DAY);
|
CALL bs.salesByClientSalesPerson_add(util.VN_CURDATE()- INTERVAL 45 DAY);
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -9,16 +9,16 @@ BEGIN
|
||||||
DECLARE vIsEktSender BOOLEAN;
|
DECLARE vIsEktSender BOOLEAN;
|
||||||
|
|
||||||
IF NEW.OrderStatus = vOrderStatusDenied AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN
|
IF NEW.OrderStatus = vOrderStatusDenied AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN
|
||||||
|
|
||||||
SELECT s.id INTO vSaleFk
|
SELECT s.id INTO vSaleFk
|
||||||
FROM vn.sale s
|
FROM vn.sale s
|
||||||
JOIN vn.ticket t ON s.ticketFk = t.id
|
JOIN vn.ticket t ON s.ticketFk = t.id
|
||||||
JOIN vn.item i ON i.id = s.itemFk
|
JOIN vn.item i ON i.id = s.itemFk
|
||||||
JOIN deliveryInformation di ON di.ID = NEW.deliveryInformationID
|
JOIN deliveryInformation di ON di.ID = NEW.deliveryInformationID
|
||||||
WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= util.VN_CURDATE()
|
WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= util.VN_CURDATE()
|
||||||
AND i.supplyResponseFk = NEW.supplyResponseID
|
AND i.supplyResponseFk = NEW.supplyResponseID
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
UPDATE vn.sale s
|
UPDATE vn.sale s
|
||||||
JOIN vn.ticket t ON s.ticketFk = t.id
|
JOIN vn.ticket t ON s.ticketFk = t.id
|
||||||
JOIN vn.item i ON i.id = s.itemFk
|
JOIN vn.item i ON i.id = s.itemFk
|
||||||
|
@ -26,38 +26,20 @@ BEGIN
|
||||||
SET s.quantity = 0
|
SET s.quantity = 0
|
||||||
WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= util.VN_CURDATE()
|
WHERE t.clientFk = NEW.EndUserPartyGLN AND t.shipped >= util.VN_CURDATE()
|
||||||
AND i.supplyResponseFk = NEW.supplyResponseID;
|
AND i.supplyResponseFk = NEW.supplyResponseID;
|
||||||
|
|
||||||
INSERT INTO vn.mail (sender, `subject`, body)
|
|
||||||
SELECT IF(u.id IS NOT NULL AND c.email IS NOT NULL,
|
|
||||||
c.email,
|
|
||||||
CONCAT(account.user_getNameFromId(c.salesPersonFk), '@verdnatura.es')
|
|
||||||
),
|
|
||||||
'Producto no disponible en Floramondo',
|
|
||||||
CONCAT('El artículo ', s.concept, ' del ticket ', t.id , ' ha sido cancelado por Floramondo. ',
|
|
||||||
' Se ha actualizado la cantidad de ', OLD.quantity,' a 0. ',
|
|
||||||
IF (u.id IS NOT NULL AND c.email IS NOT NULL ,
|
|
||||||
CONCAT('https://shop.verdnatura.es/#!form=ecomerce%2Fticket&ticket=', t.id ),
|
|
||||||
CONCAT('https://salix.verdnatura.es/#!/ticket/', t.id ,'/summary')))
|
|
||||||
FROM vn.sale s
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
JOIN vn.`client` c ON c.id = t.clientFk
|
|
||||||
LEFT JOIN account.user u ON u.id= c.salesPersonFk AND u.name IN ('ruben', 'ismaelalcolea')
|
|
||||||
WHERE s.id = vSaleFk;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
IF NEW.OrderStatus = vOrderStatusOK AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN
|
IF NEW.OrderStatus = vOrderStatusOK AND NOT (NEW.OrderStatus <=> OLD.OrderStatus) THEN
|
||||||
|
|
||||||
SELECT v.isEktSender INTO vIsEktSender
|
SELECT v.isEktSender INTO vIsEktSender
|
||||||
FROM edi.VMPSettings v
|
FROM edi.VMPSettings v
|
||||||
JOIN edi.supplyResponse sr ON sr.vmpID = v.VMPID
|
JOIN edi.supplyResponse sr ON sr.vmpID = v.VMPID
|
||||||
WHERE sr.id = NEW.supplyResponseID;
|
WHERE sr.id = NEW.supplyResponseID;
|
||||||
|
|
||||||
IF NOT vIsEktSender THEN
|
IF NOT vIsEktSender THEN
|
||||||
|
|
||||||
CALL edi.ekt_add(NEW.id);
|
CALL edi.ekt_add(NEW.id);
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF NEW.barcode THEN
|
IF NEW.barcode THEN
|
||||||
|
@ -66,7 +48,7 @@ BEGIN
|
||||||
SELECT i.id, NEW.barcode
|
SELECT i.id, NEW.barcode
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
WHERE i.supplyResponseFk = NEW.supplyResponseID;
|
WHERE i.supplyResponseFk = NEW.supplyResponseID;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`client_unassignDepartment`
|
||||||
|
ON SCHEDULE EVERY 1 DAY
|
||||||
|
STARTS '2023-06-01 03:30:00.000'
|
||||||
|
ON COMPLETION PRESERVE
|
||||||
|
ENABLE
|
||||||
|
DO CALL client_unassignDepartment$$
|
||||||
|
DELIMITER ;
|
|
@ -1,8 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `vn`.`client_unassignSalesPerson`
|
|
||||||
ON SCHEDULE EVERY 1 DAY
|
|
||||||
STARTS '2023-06-01 03:30:00.000'
|
|
||||||
ON COMPLETION PRESERVE
|
|
||||||
ENABLE
|
|
||||||
DO CALL client_unassignSalesPerson$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,95 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`catalog_componentReverse`(vWarehouse INT,
|
|
||||||
vCost DECIMAL(10,3),
|
|
||||||
vM3 DECIMAL(10,3),
|
|
||||||
vAddressFk INT,
|
|
||||||
vZoneFk INT)
|
|
||||||
RETURNS decimal(10,3)
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/* Calcula los componentes para un cliente a partir de un coste y volumen
|
|
||||||
* @param vWarehouse
|
|
||||||
* @param vCost Valor de coste del articulo
|
|
||||||
* @param vM3 m3 del articulo
|
|
||||||
* @param vAddressFk
|
|
||||||
* @param vZoneFk
|
|
||||||
* @return vRetailedPrice precio de venta sin iva
|
|
||||||
* @return tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE vBoxVolume BIGINT;
|
|
||||||
DECLARE vCustomer INT;
|
|
||||||
DECLARE vComponentRecovery INT DEFAULT 17;
|
|
||||||
DECLARE vComponentMana INT DEFAULT 39;
|
|
||||||
DECLARE vDeliveryComponent INT DEFAULT 15;
|
|
||||||
DECLARE vComponentMargin INT DEFAULT 29;
|
|
||||||
DECLARE vComponentCost INT DEFAULT 28;
|
|
||||||
DECLARE vRetailedPrice DECIMAL(10,2);
|
|
||||||
DECLARE vItem INT DEFAULT 98;
|
|
||||||
|
|
||||||
SELECT volume INTO vBoxVolume
|
|
||||||
FROM vn.packaging
|
|
||||||
WHERE id = '94';
|
|
||||||
|
|
||||||
SELECT clientFk INTO vCustomer FROM address WHERE id = vAddressFk;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.catalog_component;
|
|
||||||
CREATE TEMPORARY TABLE tmp.catalog_component (
|
|
||||||
`warehouseFk` INT UNSIGNED NOT NULL,
|
|
||||||
`itemFk` INT NOT NULL,
|
|
||||||
`componentFk` INT UNSIGNED NOT NULL,
|
|
||||||
`cost` DECIMAL(10,4) NOT NULL,
|
|
||||||
INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
|
|
||||||
UNIQUE INDEX `itemWarehouseComponent` (`itemFk` ASC, `warehouseFk` ASC, `componentFk` ASC));
|
|
||||||
|
|
||||||
-- Cost
|
|
||||||
INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
SELECT vWarehouse, vItem, vComponentCost, vCost
|
|
||||||
FROM vn.rate
|
|
||||||
WHERE dated <= util.VN_CURDATE()
|
|
||||||
AND warehouseFk = vWarehouse
|
|
||||||
ORDER BY dated DESC
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
-- Margen
|
|
||||||
-- No se aplica margen, cau 12589
|
|
||||||
/* INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
SELECT vWarehouse, vItem, vComponentMargin, (vCost / ((100 - rate2) / 100)) - vCost
|
|
||||||
FROM vn.rate
|
|
||||||
WHERE dated <= util.VN_CURDATE()
|
|
||||||
AND warehouseFk = vWarehouse
|
|
||||||
ORDER BY dated DESC
|
|
||||||
LIMIT 1;
|
|
||||||
*/
|
|
||||||
-- Recobro
|
|
||||||
INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
SELECT vWarehouse, vItem, vComponentRecovery, ROUND(LEAST(recobro,0.25), 3)
|
|
||||||
FROM bi.claims_ratio
|
|
||||||
WHERE Id_Cliente = vCustomer AND recobro > 0.009;
|
|
||||||
|
|
||||||
-- Componente de maná automático, en función del maná acumulado por el comercial.
|
|
||||||
INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
SELECT vWarehouse, vItem, vComponentMana, ROUND(wm.pricesModifierRate, 3)
|
|
||||||
FROM client c
|
|
||||||
JOIN vn.workerMana wm ON c.salesPersonFk = wm.workerFk
|
|
||||||
WHERE wm.isPricesModifierActivated AND c.id = vCustomer LIMIT 1;
|
|
||||||
|
|
||||||
-- Reparto
|
|
||||||
INSERT INTO tmp.catalog_component (warehouseFk, itemFk, componentFk, cost)
|
|
||||||
SELECT vWarehouse, vItem, vDeliveryComponent,
|
|
||||||
ROUND(
|
|
||||||
vM3
|
|
||||||
* (z.price - z.bonus)
|
|
||||||
* z.inflation
|
|
||||||
/ vBoxVolume, 4
|
|
||||||
)
|
|
||||||
FROM zone z
|
|
||||||
WHERE z.id = vZoneFk;
|
|
||||||
|
|
||||||
-- Precio de venta
|
|
||||||
SELECT SUM(cost) INTO vRetailedPrice
|
|
||||||
FROM tmp.catalog_component;
|
|
||||||
|
|
||||||
RETURN vRetailedPrice;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,11 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`clientGetSalesPerson`(vClientFk INT, vDated DATE)
|
|
||||||
RETURNS int(11)
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* DEPRECATED: use client_getSalesPerson
|
|
||||||
**/
|
|
||||||
RETURN client_getSalesPerson(vClientFk, vDated);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -31,7 +31,7 @@ BEGIN
|
||||||
FROM tClient t
|
FROM tClient t
|
||||||
JOIN `client` c ON c.id = t.clientFk
|
JOIN `client` c ON c.id = t.clientFk
|
||||||
WHERE c.isActive
|
WHERE c.isActive
|
||||||
AND c.salesPersonFk
|
AND c.departmentFk
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tClient;
|
DROP TEMPORARY TABLE tClient;
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`client_getSalesPerson`(vClientFk INT, vDated DATE)
|
|
||||||
RETURNS int(11)
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Dado un id cliente y una fecha, devuelve su comercial para ese dia, teniendo
|
|
||||||
* en cuenta la jerarquía de las tablas: 1º la de sharingclient, 2º la de
|
|
||||||
* sharingcart y tercero la de clientes.
|
|
||||||
*
|
|
||||||
* @param vClientFk El id del cliente
|
|
||||||
* @param vDated Fecha a comprobar
|
|
||||||
* @return El id del comercial para la fecha dada
|
|
||||||
**/
|
|
||||||
DECLARE vSalesPersonFk INT DEFAULT NULL;
|
|
||||||
DECLARE vWorkerSubstituteFk INT DEFAULT NULL;
|
|
||||||
DECLARE vLoop BOOLEAN;
|
|
||||||
|
|
||||||
-- Obtiene el comercial original y el de sharingclient
|
|
||||||
|
|
||||||
SELECT c.salesPersonFk, s.workerFk
|
|
||||||
INTO vSalesPersonFk, vWorkerSubstituteFk
|
|
||||||
FROM client c
|
|
||||||
LEFT JOIN sharingClient s
|
|
||||||
ON c.id = s.clientFk
|
|
||||||
AND vDated BETWEEN s.started AND s.ended
|
|
||||||
WHERE c.id = vClientFk
|
|
||||||
ORDER BY s.id
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
-- Si no hay ninguno en sharingclient busca en sharingcart
|
|
||||||
|
|
||||||
IF vWorkerSubstituteFk IS NOT NULL
|
|
||||||
THEN
|
|
||||||
SET vSalesPersonFk = vWorkerSubstituteFk;
|
|
||||||
ELSEIF vSalesPersonFk IS NOT NULL
|
|
||||||
THEN
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.stack;
|
|
||||||
CREATE TEMPORARY TABLE tmp.stack
|
|
||||||
(INDEX (substitute))
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT vSalesPersonFk substitute;
|
|
||||||
|
|
||||||
l: LOOP
|
|
||||||
SELECT workerSubstitute INTO vWorkerSubstituteFk
|
|
||||||
FROM sharingCart
|
|
||||||
WHERE util.VN_CURDATE() BETWEEN started AND ended
|
|
||||||
AND workerFk = vSalesPersonFk
|
|
||||||
ORDER BY id
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
IF vWorkerSubstituteFk IS NULL THEN
|
|
||||||
LEAVE l;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT COUNT(*) > 0 INTO vLoop
|
|
||||||
FROM tmp.stack WHERE substitute = vWorkerSubstituteFk;
|
|
||||||
|
|
||||||
IF vLoop THEN
|
|
||||||
LEAVE l;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
INSERT INTO tmp.stack SET
|
|
||||||
substitute = vWorkerSubstituteFk;
|
|
||||||
|
|
||||||
SET vSalesPersonFk = vWorkerSubstituteFk;
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.stack;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN vSalesPersonFk;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,23 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`client_getSalesPersonByTicket`(vTicketFk INT)
|
|
||||||
RETURNS int(11)
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Dado un id ticket, devuelve su comercial.
|
|
||||||
* Para más información ir a client_getSalesPerson()
|
|
||||||
*
|
|
||||||
* @param vClientFk El id del cliente
|
|
||||||
* @param vDated Fecha a comprobar
|
|
||||||
* @return El id del comercial para la fecha dada
|
|
||||||
**/
|
|
||||||
DECLARE vClientFk INT;
|
|
||||||
DECLARE vDated DATE;
|
|
||||||
|
|
||||||
SELECT clientFk, shipped
|
|
||||||
INTO vClientFk, vDated
|
|
||||||
FROM ticket WHERE id = vTicketFk;
|
|
||||||
|
|
||||||
RETURN client_getSalesPerson(vClientFk, vDated);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,26 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`client_getSalesPersonCode`(vClientFk INT, vDated DATE)
|
|
||||||
RETURNS varchar(3) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Dado un id cliente y una fecha, devuelve su comercial.
|
|
||||||
* Para más información ir a client_getSalesPerson()
|
|
||||||
*
|
|
||||||
* @param vClientFk El id del cliente
|
|
||||||
* @param vDated Fecha a comprobar
|
|
||||||
* @return El código del comercial para la fecha dada
|
|
||||||
**/
|
|
||||||
DECLARE vWorkerCode CHAR(3);
|
|
||||||
DECLARE vSalesPersonFk INT;
|
|
||||||
|
|
||||||
SET vSalesPersonFk = client_getSalesPerson(vClientFk, vDated);
|
|
||||||
|
|
||||||
SELECT code
|
|
||||||
INTO vWorkerCode
|
|
||||||
FROM worker
|
|
||||||
WHERE id = vSalesPersonFk;
|
|
||||||
|
|
||||||
RETURN vWorkerCode;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,23 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`client_getSalesPersonCodeByTicket`(vTicketFk INT)
|
|
||||||
RETURNS varchar(3) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
|
|
||||||
DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Dado un id ticket, devuelve su comercial.
|
|
||||||
* Para más información ir a client_getSalesPerson()
|
|
||||||
*
|
|
||||||
* @param vClientFk El id del cliente
|
|
||||||
* @param vDated Fecha a comprobar
|
|
||||||
* @return El código del comercial para la fecha dada
|
|
||||||
**/
|
|
||||||
DECLARE vClientFk INT;
|
|
||||||
DECLARE vDated DATE;
|
|
||||||
|
|
||||||
SELECT clientFk, shipped
|
|
||||||
INTO vClientFk, vDated
|
|
||||||
FROM ticket WHERE id = vTicketFk;
|
|
||||||
|
|
||||||
RETURN client_getSalesPersonCode(vClientFk, vDated);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -174,12 +174,12 @@ BEGIN
|
||||||
SELECT tcb.warehouseFk,
|
SELECT tcb.warehouseFk,
|
||||||
tcb.itemFk,
|
tcb.itemFk,
|
||||||
c2.id,
|
c2.id,
|
||||||
ROUND(base * wm.pricesModifierRate, 3) manaAuto
|
ROUND(base * dm.pricesModifierRate, 3) manaAuto
|
||||||
FROM tmp.ticketComponentBase tcb
|
FROM tmp.ticketComponentBase tcb
|
||||||
JOIN `client` c on c.id = vClientFk
|
JOIN `client` c on c.id = vClientFk
|
||||||
JOIN workerMana wm ON c.salesPersonFk = wm.workerFk
|
JOIN departmentMana dm ON c.departmentFk = dm.departmentFk
|
||||||
JOIN vn.component c2 ON c2.code = 'autoMana'
|
JOIN vn.component c2 ON c2.code = 'autoMana'
|
||||||
WHERE wm.isPricesModifierActivated
|
WHERE dm.isPricesModifierActivated
|
||||||
HAVING manaAuto <> 0;
|
HAVING manaAuto <> 0;
|
||||||
|
|
||||||
-- Precios especiales
|
-- Precios especiales
|
||||||
|
|
|
@ -45,8 +45,6 @@ BEGIN
|
||||||
JOIN ticket t ON tobs.ticketFk = t.id
|
JOIN ticket t ON tobs.ticketFk = t.id
|
||||||
WHERE t.shipped < v5Years;
|
WHERE t.shipped < v5Years;
|
||||||
DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < v1Years;
|
DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < v1Years;
|
||||||
DELETE FROM sharingCart where ended < v2Months;
|
|
||||||
DELETE FROM sharingClient where ended < v2Months;
|
|
||||||
DELETE tw.* FROM ticketWeekly tw
|
DELETE tw.* FROM ticketWeekly tw
|
||||||
LEFT JOIN sale s ON s.ticketFk = tw.ticketFk
|
LEFT JOIN sale s ON s.ticketFk = tw.ticketFk
|
||||||
LEFT JOIN ticketRequest tr ON tr.ticketFk = tw.ticketFk
|
LEFT JOIN ticketRequest tr ON tr.ticketFk = tw.ticketFk
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`clientDebtSpray`(vClientFk INT)
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
/* Reparte el saldo de un cliente en greuge en la cartera que corresponde, y desasigna el comercial
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE vClientDebt DOUBLE;
|
|
||||||
|
|
||||||
SELECT vn.client_getDebt(vClientFk, util.VN_CURDATE()) INTO vClientDebt;
|
|
||||||
|
|
||||||
INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
|
|
||||||
VALUES (vClientFk, 'Saldo pendiente', vClientDebt, util.VN_CURDATE(), 5);
|
|
||||||
|
|
||||||
CALL vn.clientGreugeSpray(vClientFk, TRUE, '', TRUE);
|
|
||||||
|
|
||||||
INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
|
|
||||||
SELECT vClientFk, 'Liquidación cliente', sum(amount), util.VN_CURDATE(), 5
|
|
||||||
FROM vn.greuge
|
|
||||||
WHERE clientFk = vClientFk;
|
|
||||||
|
|
||||||
UPDATE vn.client
|
|
||||||
SET salesPersonFk = NULL
|
|
||||||
WHERE id = vClientFk;
|
|
||||||
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,7 +1,11 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`clientGreugeSpray`(IN vClientFk INT, IN onlyForHisOwner BOOL, IN vWorkerCode VARCHAR(3), IN vWithMana BOOLEAN)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`clientGreugeSpray`(
|
||||||
|
IN vClientFk INT,
|
||||||
|
IN vIsOnlyForHisOwner BOOL,
|
||||||
|
IN vDepartmentCode VARCHAR(45),
|
||||||
|
IN vWithMana BOOLEAN
|
||||||
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
DECLARE vGreuge DECIMAL(10,2);
|
DECLARE vGreuge DECIMAL(10,2);
|
||||||
DECLARE vOwner INT;
|
DECLARE vOwner INT;
|
||||||
DECLARE vTotalSale INT;
|
DECLARE vTotalSale INT;
|
||||||
|
@ -9,65 +13,62 @@ BEGIN
|
||||||
DECLARE vGreugeTypeMana INT DEFAULT 3;-- Maná
|
DECLARE vGreugeTypeMana INT DEFAULT 3;-- Maná
|
||||||
DECLARE vMana DECIMAL(10,2);
|
DECLARE vMana DECIMAL(10,2);
|
||||||
|
|
||||||
SELECT vn.clientGetMana(vClientFk) INTO vMana;
|
SELECT clientGetMana(vClientFk) INTO vMana;
|
||||||
|
|
||||||
IF vWithMana AND vMana THEN
|
IF vWithMana AND vMana THEN
|
||||||
|
INSERT INTO greuge
|
||||||
INSERT INTO vn.greuge( clientFk,
|
SET clientFk = vClientFk,
|
||||||
description,
|
description = 'Desasignación',
|
||||||
amount,
|
amount = - vMana,
|
||||||
shipped,
|
shipped = util.VN_CURDATE(),
|
||||||
greugeTypeFk)
|
greugeTypeFk = vGreugeTypeMana;
|
||||||
VALUES( vClientFk,
|
|
||||||
'Desasignación',
|
|
||||||
-1 * vMana,
|
|
||||||
util.VN_CURDATE(),
|
|
||||||
vGreugeTypeMana);
|
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT sum(amount) INTO vGreuge
|
SELECT SUM(amount) INTO vGreuge
|
||||||
FROM vn.greuge
|
FROM greuge
|
||||||
WHERE clientFk = vClientFk;
|
WHERE clientFk = vClientFk;
|
||||||
|
|
||||||
IF vGreuge != 0 THEN
|
IF vGreuge THEN
|
||||||
|
IF LENGTH(vDepartmentCode) THEN
|
||||||
IF LENGTH(vWorkerCode) = 0 THEN
|
SELECT departmentFk INTO vOwner
|
||||||
|
FROM client
|
||||||
SELECT salesPersonFk INTO vOwner
|
|
||||||
FROM vn.client
|
|
||||||
WHERE id = vClientFk;
|
WHERE id = vClientFk;
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
SELECT id INTO vOwner
|
SELECT id INTO vOwner
|
||||||
FROM vn.worker
|
FROM department
|
||||||
WHERE code = vWorkerCode COLLATE utf8_general_ci;
|
WHERE code = vDepartmentCode;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.clientList;
|
IF vOwner IS NULL THEN
|
||||||
CREATE TEMPORARY TABLE tmp.clientList
|
CALL util.throw('The department is incorrect');
|
||||||
SELECT DISTINCT t.clientFk, floor(cr.yearSale / 12) monthSale
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO greuge(clientFk, description, amount, shipped, greugeTypeFk)
|
||||||
|
WITH greuges AS(
|
||||||
|
SELECT DISTINCT t.clientFk, FLOOR(cr.yearSale / 12) monthSale
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
JOIN vn.client c ON c.id = t.clientFk
|
JOIN vn.client c ON c.id = t.clientFk
|
||||||
JOIN vn.workerMana wm ON wm.workerFk = c.salesPersonFk
|
JOIN vn.departmentMana dm ON dm.departmentFk = c.departmentFk
|
||||||
guillermo
commented
Llevar vn Llevar vn
jgallego
commented
este esta perque esta dins dun with este esta perque esta dins dun with
|
|||||||
JOIN vn.claimRatio cr ON cr.clientFk = c.id
|
JOIN vn.claimRatio cr ON cr.clientFk = c.id
|
||||||
WHERE wm.workerFk = IF(onlyForHisOwner, vOwner, wm.workerFk)
|
WHERE dm.departmentFk = IF(vIsOnlyForHisOwner, vOwner, dm.departmentFk)
|
||||||
AND t.shipped >= TIMESTAMPADD(MONTH,-1,util.VN_CURDATE())
|
AND t.shipped >= util.VN_CURDATE() - INTERVAL 1 MONTH
|
||||||
AND c.id != vClientFk
|
AND c.id <> vClientFk
|
||||||
HAVING monthSale > 100;
|
HAVING monthSale > 100
|
||||||
|
), totalGreuge AS(
|
||||||
SELECT SUM(monthSale) INTO vTotalSale
|
SELECT SUM(monthSale) totalSale FROM greuges
|
||||||
FROM tmp.clientList;
|
)SELECT g.clientFk,
|
||||||
|
CONCAT('Cliente: ', vClientFk),
|
||||||
INSERT INTO vn.greuge(clientFk, description, amount, shipped, greugeTypeFk)
|
vGreuge * g.monthSale / tgtotalSale,
|
||||||
SELECT clientFk, CONCAT('Cliente: ',vClientFk), vGreuge * monthSale / vTotalSale, util.VN_CURDATE(), vGreugeTypeFk
|
util.VN_CURDATE(),
|
||||||
FROM tmp.clientList
|
vGreugeTypeFk
|
||||||
|
FROM greuges g
|
||||||
|
JOIN totalGreuge tg
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT vClientFk, 'Reparto greuge', -vGreuge, util.VN_CURDATE(), vGreugeTypeFk;
|
SELECT vClientFk,
|
||||||
|
'Reparto greuge',
|
||||||
|
-vGreuge,
|
||||||
|
util.VN_CURDATE(),
|
||||||
|
vGreugeTypeFk;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -8,7 +8,7 @@ BEGIN
|
||||||
FROM tmp.clientGetDebt c
|
FROM tmp.clientGetDebt c
|
||||||
LEFT JOIN clientRisk r ON r.clientFk = c.clientFk
|
LEFT JOIN clientRisk r ON r.clientFk = c.clientFk
|
||||||
GROUP BY c.clientFk
|
GROUP BY c.clientFk
|
||||||
HAVING SUM(IFNULL(r.amount,0)) = 0;
|
HAVING SUM(IFNULL(r.amount, 0)) = 0;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
|
@ -16,22 +16,26 @@ BEGIN
|
||||||
CREATE TEMPORARY TABLE tmp.clientGetDebt
|
CREATE TEMPORARY TABLE tmp.clientGetDebt
|
||||||
SELECT cd.clientFk
|
SELECT cd.clientFk
|
||||||
FROM bs.clientDied cd
|
FROM bs.clientDied cd
|
||||||
LEFT JOIN clientProtected cp ON cp.clientFk = cd.clientFk
|
LEFT JOIN clientProtected cp ON cp.clientFk = cd.clientFk
|
||||||
JOIN client c ON c.id = cd.clientFk
|
JOIN client c ON c.id = cd.clientFk
|
||||||
JOIN province p ON p.id = c.provinceFk
|
JOIN province p ON p.id = c.provinceFk
|
||||||
LEFT JOIN autonomy a ON a.id = p.autonomyFk
|
LEFT JOIN autonomy a ON a.id = p.autonomyFk
|
||||||
JOIN country co ON co.id = p.countryFk
|
JOIN country co ON co.id = p.countryFk
|
||||||
WHERE cd.warning = 'third'
|
WHERE cd.warning = 'third'
|
||||||
AND cp.clientFk IS NULL
|
AND cp.clientFk IS NULL
|
||||||
AND co.code NOT IN ('PT')
|
AND co.code NOT IN ('PT')
|
||||||
AND a.name <> 'Canarias'
|
AND a.name <> 'Canarias'
|
||||||
AND c.salesPersonFk IS NOT NULL;
|
AND c.departmentFk IS NOT NULL;
|
||||||
|
|
||||||
OPEN rs;
|
OPEN rs;
|
||||||
FETCH rs INTO vClientFk;
|
FETCH rs INTO vClientFk;
|
||||||
WHILE NOT vDone DO
|
WHILE NOT vDone DO
|
||||||
CALL vn.clientGreugeSpray(vClientFk, TRUE, '',TRUE);
|
CALL vn.clientGreugeSpray(vClientFk, TRUE, '',TRUE);
|
||||||
UPDATE vn.client SET salesPersonFk = NULL WHERE id = vClientFk;
|
|
||||||
|
UPDATE vn.client
|
||||||
guillermo
commented
Llevar vn Llevar vn
|
|||||||
|
SET departmentFk = NULL
|
||||||
|
WHERE id = vClientFk;
|
||||||
|
|
||||||
FETCH rs INTO vClientFk;
|
FETCH rs INTO vClientFk;
|
||||||
END WHILE;
|
END WHILE;
|
||||||
CLOSE rs;
|
CLOSE rs;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`client_unassignSalesPerson`()
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_unassignDepartment`()
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Elimina la asignación de salesPersonFk de la ficha del clientes
|
* Elimina la asignación de departmentFk de la ficha del clientes
|
||||||
* que no han realizado una compra en los últimos 3 meses y reparte
|
* que no han realizado una compra en los últimos 3 meses y reparte
|
||||||
* su greuge entre el resto de clientes
|
* su greuge entre el resto de clientes
|
||||||
*/
|
*/
|
||||||
|
@ -22,16 +22,15 @@ BEGIN
|
||||||
FROM bs.clientDied cd
|
FROM bs.clientDied cd
|
||||||
JOIN client c ON c.id = cd.clientFk
|
JOIN client c ON c.id = cd.clientFk
|
||||||
LEFT JOIN clientProtected cp ON cp.clientFk = c.id
|
LEFT JOIN clientProtected cp ON cp.clientFk = c.id
|
||||||
LEFT JOIN salesPersonProtected sp ON sp.salesPersonFk = c.salesPersonFk
|
LEFT JOIN departmentNoUnassign sd ON sp.departmentFk = c.departmentFk
|
||||||
JOIN province p ON p.id = c.provinceFk
|
JOIN province p ON p.id = c.provinceFk
|
||||||
LEFT JOIN autonomy a ON a.id = p.autonomyFk
|
LEFT JOIN autonomy a ON a.id = p.autonomyFk
|
||||||
JOIN country co ON co.id = p.countryFk
|
JOIN country co ON co.id = p.countryFk
|
||||||
JOIN bs.clientDiedPeriod cdp ON cdp.countryFk = co.id
|
JOIN bs.clientDiedPeriod cdp ON cdp.countryFk = co.id
|
||||||
WHERE cd.warning = 'third'
|
WHERE cd.warning = 'third'
|
||||||
AND cp.clientFk IS NULL
|
AND cp.clientFk IS NULL
|
||||||
AND sp.salesPersonFk IS NULL
|
|
||||||
AND a.name <> 'Canarias'
|
AND a.name <> 'Canarias'
|
||||||
AND c.salesPersonFk IS NOT NULL;
|
AND c.departmentFk IS NOT NULL;
|
||||||
|
|
||||||
OPEN vCursor;
|
OPEN vCursor;
|
||||||
l: LOOP
|
l: LOOP
|
||||||
|
@ -42,7 +41,7 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
CALL clientGreugeSpray(vClientFk, TRUE, '', TRUE);
|
CALL clientGreugeSpray(vClientFk, TRUE, '', TRUE);
|
||||||
UPDATE client
|
UPDATE client
|
||||||
SET salesPersonFk = NULL
|
SET departmentFk = NULL
|
||||||
WHERE id = vClientFk;
|
WHERE id = vClientFk;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
CLOSE vCursor;
|
CLOSE vCursor;
|
|
@ -20,15 +20,15 @@ BEGIN
|
||||||
WHERE c.typeFk = 'normal'
|
WHERE c.typeFk = 'normal'
|
||||||
AND a.id IS NULL
|
AND a.id IS NULL
|
||||||
AND u.active
|
AND u.active
|
||||||
AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
|
AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
AND NOT u.role = (SELECT id FROM `role` WHERE name = 'supplier')
|
AND NOT u.role = (SELECT id FROM `role` WHERE name = 'supplier')
|
||||||
AND u.id NOT IN (
|
AND u.id NOT IN (
|
||||||
SELECT DISTINCT c.id
|
SELECT DISTINCT c.id
|
||||||
FROM client c
|
FROM client c
|
||||||
LEFT JOIN ticket t ON t.clientFk = c.id
|
LEFT JOIN ticket t ON t.clientFk = c.id
|
||||||
WHERE c.salesPersonFk IS NOT NULL
|
WHERE c.departmentFk IS NOT NULL
|
||||||
OR t.created > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
OR t.created > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
OR shipped > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
OR shipped > util.VN_CURDATE() - INTERVAL vMonths MONTH
|
||||||
);
|
);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -4,31 +4,32 @@ BEGIN
|
||||||
/**
|
/**
|
||||||
* Selecciona los tickets de una colección/ticket/sectorCollection
|
* Selecciona los tickets de una colección/ticket/sectorCollection
|
||||||
* @param vParamFk ticketFk/collectionFk/sectorCollection
|
* @param vParamFk ticketFk/collectionFk/sectorCollection
|
||||||
* @return Retorna ticketFk, level, agencyName, warehouseFk, salesPersonFk, observation
|
* @return Retorna (ticketFk, level, agencyName, warehouseFk, observation,
|
||||||
*/
|
* rgb, departmentFk)
|
||||||
|
*/
|
||||||
DECLARE vItemPackingTypeFk VARCHAR(1);
|
DECLARE vItemPackingTypeFk VARCHAR(1);
|
||||||
DECLARE vYesterday DATE;
|
DECLARE vYesterday DATE;
|
||||||
|
|
||||||
-- Si los sacadores son los de pruebas, pinta los colores
|
-- Si los sacadores son los de pruebas, pinta los colores
|
||||||
SELECT itemPackingTypeFk
|
SELECT itemPackingTypeFk
|
||||||
INTO vItemPackingTypeFk
|
INTO vItemPackingTypeFk
|
||||||
FROM collection
|
FROM collection
|
||||||
WHERE id = vParamFk;
|
WHERE id = vParamFk;
|
||||||
|
|
||||||
SET vYesterday = util.yesterday();
|
SET vYesterday = util.yesterday();
|
||||||
|
|
||||||
WITH observation AS (
|
WITH observation AS (
|
||||||
SELECT tob.ticketFk, tob.description
|
SELECT tob.ticketFk, tob.description
|
||||||
FROM vn.ticketObservation tob
|
FROM vn.ticketObservation tob
|
||||||
JOIN vn.ticketCollection tc ON tc.ticketFk = tob.ticketFk
|
JOIN vn.ticketCollection tc ON tc.ticketFk = tob.ticketFk
|
||||||
JOIN vn.observationType ot ON ot.id = tob.observationTypeFk AND ot.`code` = 'itemPicker'
|
JOIN vn.observationType ot ON ot.id = tob.observationTypeFk AND ot.`code` = 'itemPicker'
|
||||||
WHERE tc.collectionFk = vParamFk OR tc.ticketFk = vParamFk
|
WHERE tc.collectionFk = vParamFk OR tc.ticketFk = vParamFk
|
||||||
)
|
)
|
||||||
SELECT t.id ticketFk,
|
SELECT t.id ticketFk,
|
||||||
IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
|
IF(!(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
|
||||||
am.name agencyName,
|
am.name agencyName,
|
||||||
t.warehouseFk,
|
t.warehouseFk,
|
||||||
w.id salesPersonFk,
|
c.departmentFk,
|
||||||
guillermo
commented
Quien llama a esto soportará que le retorne departmentFk o salesPersonFk? Es decir, se ha cambiado también? Quien llama a esto soportará que le retorne departmentFk o salesPersonFk? Es decir, se ha cambiado también?
jgallego
commented
es salix front, si es salix front, si
|
|||||||
IFNULL(ob.description,'') observaciones,
|
IFNULL(ob.description,'') observaciones,
|
||||||
cc.rgb,
|
cc.rgb,
|
||||||
p.code parkingCode,
|
p.code parkingCode,
|
||||||
|
@ -36,41 +37,39 @@ BEGIN
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
LEFT JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
|
LEFT JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
|
||||||
LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk
|
LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk
|
||||||
LEFT JOIN vn.collectionColors cc
|
LEFT JOIN vn.collectionColors cc
|
||||||
ON cc.wagon = tc.wagon
|
ON cc.wagon = tc.wagon
|
||||||
AND cc.shelve = tc.`level`
|
AND cc.shelve = tc.`level`
|
||||||
AND cc.trainFk = c2.trainFk
|
AND cc.trainFk = c2.trainFk
|
||||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
||||||
LEFT JOIN vn.client c ON c.id = t.clientFk
|
LEFT JOIN vn.client c ON c.id = t.clientFk
|
||||||
LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
|
|
||||||
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
||||||
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
||||||
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
||||||
LEFT JOIN vn.packingSiteAdvanced ps ON ps.ticketFk = t.id
|
LEFT JOIN vn.packingSiteAdvanced ps ON ps.ticketFk = t.id
|
||||||
WHERE t.id = vParamFk
|
WHERE t.id = vParamFk
|
||||||
AND t.shipped >= vYesterday
|
AND t.shipped >= vYesterday
|
||||||
UNION
|
UNION
|
||||||
SELECT t.id ticketFk,
|
SELECT t.id ticketFk,
|
||||||
IF(NOT(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
|
IF(NOT(vItemPackingTypeFk <=> 'V'), cc.code, CONCAT(SUBSTRING('ABCDEFGH', tc.wagon, 1), '-', tc.`level`)) `level`,
|
||||||
am.name agencyName,
|
am.name agencyName,
|
||||||
t.warehouseFk,
|
t.warehouseFk,
|
||||||
w.id salesPersonFk,
|
c.departmentFk,
|
||||||
ob.description,
|
ob.description,
|
||||||
IF(NOT (vItemPackingTypeFk <=> 'V'), cc.rgb, NULL) `rgb`,
|
IF(NOT (vItemPackingTypeFk <=> 'V'), cc.rgb, NULL) `rgb`,
|
||||||
p.code parkingCode,
|
p.code parkingCode,
|
||||||
IF (ps.ticketFk, TRUE, FALSE) isAdvanced
|
IF (ps.ticketFk, TRUE, FALSE) isAdvanced
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
|
JOIN vn.ticketCollection tc ON t.id = tc.ticketFk
|
||||||
LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk
|
LEFT JOIN vn.collection c2 ON c2.id = tc.collectionFk
|
||||||
LEFT JOIN vn.collectionColors cc
|
LEFT JOIN vn.collectionColors cc
|
||||||
ON cc.wagon = tc.wagon
|
ON cc.wagon = tc.wagon
|
||||||
AND cc.shelve = tc.`level`
|
AND cc.shelve = tc.`level`
|
||||||
AND cc.trainFk = c2.trainFk
|
AND cc.trainFk = c2.trainFk
|
||||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
||||||
LEFT JOIN vn.client c ON c.id = t.clientFk
|
LEFT JOIN vn.client c ON c.id = t.clientFk
|
||||||
LEFT JOIN vn.worker w ON w.id = c.salesPersonFk
|
|
||||||
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
||||||
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
||||||
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
||||||
|
@ -81,18 +80,18 @@ BEGIN
|
||||||
NULL `level`,
|
NULL `level`,
|
||||||
am.name agencyName,
|
am.name agencyName,
|
||||||
t.warehouseFk,
|
t.warehouseFk,
|
||||||
c.salesPersonFk,
|
c.departmentFk,
|
||||||
ob.description,
|
ob.description,
|
||||||
NULL `rgb`,
|
NULL `rgb`,
|
||||||
p.code parkingCode,
|
p.code parkingCode,
|
||||||
IF (ps.ticketFk, TRUE, FALSE) isAdvanced
|
IF (ps.ticketFk, TRUE, FALSE) isAdvanced
|
||||||
FROM vn.sectorCollection sc
|
FROM vn.sectorCollection sc
|
||||||
JOIN vn.sectorCollectionSaleGroup ss ON ss.sectorCollectionFk = sc.id
|
JOIN vn.sectorCollectionSaleGroup ss ON ss.sectorCollectionFk = sc.id
|
||||||
JOIN vn.saleGroup sg ON sg.id = ss.saleGroupFk
|
JOIN vn.saleGroup sg ON sg.id = ss.saleGroupFk
|
||||||
JOIN vn.ticket t ON t.id = sg.ticketFk
|
JOIN vn.ticket t ON t.id = sg.ticketFk
|
||||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
LEFT JOIN vn.agencyMode am ON am.id = z.agencyModeFk
|
||||||
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
LEFT JOIN observation ob ON ob.ticketFk = t.id
|
||||||
LEFT JOIN vn.client c ON c.id = t.clientFk
|
LEFT JOIN vn.client c ON c.id = t.clientFk
|
||||||
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
||||||
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
LEFT JOIN vn.parking p ON tp.parkingFk = p.id
|
||||||
|
|
|
@ -1,41 +1,41 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemSale_byWeek`(vWeek INT, IN vYear INT, vItemFk INT, vWarehouseFk INT)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`itemSale_byWeek`(vWeek INT, IN vYear INT, vItemFk INT, vWarehouseFk INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
DECLARE vStarted DATE;
|
DECLARE vStarted DATE;
|
||||||
DECLARE vEnded DATETIME;
|
DECLARE vEnded DATETIME;
|
||||||
|
|
||||||
SELECT MIN(dated), util.dayEnd(MAX(dated)) INTO vStarted, vEnded
|
SELECT MIN(dated), util.dayEnd(MAX(dated)) INTO vStarted, vEnded
|
||||||
FROM `time` t
|
FROM `time` t
|
||||||
WHERE CONCAT(vYear, LPAD(vWeek, 2, 0)) = t.period;
|
WHERE CONCAT(vYear, LPAD(vWeek, 2, 0)) = t.period;
|
||||||
|
|
||||||
SELECT t.shipped,
|
SELECT t.shipped,
|
||||||
w.name warehouse,
|
w.name warehouse,
|
||||||
s.ticketFk,
|
s.ticketFk,
|
||||||
t.nickname client,
|
t.nickname client,
|
||||||
am.name agencyName,
|
am.name agencyName,
|
||||||
wk.code salesPerson,
|
|
||||||
s.itemFk,
|
s.itemFk,
|
||||||
IFNULL(CONCAT(ig.longName,' ',ig.`size`,' ',ig.subName), s.concept) AS concept,
|
IFNULL(CONCAT(ig.longName,' ',ig.`size`,' ',ig.subName), s.concept) AS concept,
|
||||||
s.quantity,
|
s.quantity,
|
||||||
s.price,
|
s.price,
|
||||||
s.priceFixed,
|
s.priceFixed,
|
||||||
s.discount,
|
s.discount,
|
||||||
tls.name stateName,
|
tls.name stateName,
|
||||||
sb.buyFk,
|
sb.buyFk,
|
||||||
s.id saleFk,
|
s.id saleFk,
|
||||||
wk.id salesPersonFk
|
d.id departmentFk,
|
||||||
|
d.name departmentName
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN ticket t ON t.id = s.ticketFk
|
JOIN ticket t ON t.id = s.ticketFk
|
||||||
JOIN warehouse w ON w.id = t.warehouseFk
|
JOIN warehouse w ON w.id = t.warehouseFk
|
||||||
JOIN address a ON a.id = t.addressFk
|
JOIN address a ON a.id = t.addressFk
|
||||||
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
|
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
|
||||||
JOIN `client` c ON c.id = a.clientFk
|
JOIN `client` c ON c.id = a.clientFk
|
||||||
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
|
LEFT JOIN department d ON d.id = c.departmentFk
|
||||||
LEFT JOIN ticketLastState tls ON tls.ticketFk = t.id
|
LEFT JOIN ticketLastState tls ON tls.ticketFk = t.id
|
||||||
LEFT JOIN saleBuy sb ON sb.saleFk = s.id
|
LEFT JOIN saleBuy sb ON sb.saleFk = s.id
|
||||||
LEFT JOIN buy b ON b.id = sb.buyFk
|
LEFT JOIN buy b ON b.id = sb.buyFk
|
||||||
LEFT JOIN item ig ON ig.id = b.itemOriginalFk
|
LEFT JOIN item ig ON ig.id = b.itemOriginalFk
|
||||||
WHERE s.itemFk = vItemFk
|
WHERE s.itemFk = vItemFk
|
||||||
AND t.shipped BETWEEN vStarted AND vEnded
|
AND t.shipped BETWEEN vStarted AND vEnded
|
||||||
AND IF(vWarehouseFk = 0, w.hasComission , t.warehouseFk = vWarehouseFk)
|
AND IF(vWarehouseFk = 0, w.hasComission , t.warehouseFk = vWarehouseFk)
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`manaSpellersRequery`(vWorkerFk INTEGER)
|
|
||||||
`whole_proc`:
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Guarda en workerMana el mana consumido por un trabajador
|
|
||||||
*
|
|
||||||
* @param vWorkerFk Id Trabajador
|
|
||||||
*/
|
|
||||||
DECLARE vWorkerIsExcluded BOOLEAN;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vWorkerIsExcluded
|
|
||||||
FROM workerManaExcluded
|
|
||||||
WHERE workerFk = vWorkerFk;
|
|
||||||
|
|
||||||
IF vWorkerIsExcluded THEN
|
|
||||||
LEAVE whole_proc;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.client
|
|
||||||
SELECT id
|
|
||||||
FROM client
|
|
||||||
WHERE salesPersonFk = vWorkerFk;
|
|
||||||
|
|
||||||
CALL client_getMana();
|
|
||||||
|
|
||||||
INSERT INTO workerMana (workerFk, amount)
|
|
||||||
SELECT vWorkerFk, sum(mana)
|
|
||||||
FROM tmp.clientMana
|
|
||||||
ON DUPLICATE KEY UPDATE amount = VALUES(amount);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
|
||||||
tmp.client,
|
|
||||||
tmp.clientMana;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`manaSpellers_requery`(
|
||||||
|
vDepartmentFk INTEGER
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
jgallego marked this conversation as resolved
guillermo
commented
Quitar, no hace falta Quitar, no hace falta
|
|||||||
|
/**
|
||||||
|
* Guarda en departmentMana el mana consumido por un departamento
|
||||||
|
*
|
||||||
|
* @param vDepartmentFk Id department
|
||||||
|
*/
|
||||||
|
DECLARE vIsDepartmentExcluded BOOLEAN;
|
||||||
|
|
||||||
|
SELECT COUNT(*) INTO vIsDepartmentExcluded
|
||||||
|
FROM departmentManaExcluded
|
||||||
|
WHERE departmentFk = vDepartmentFk;
|
||||||
|
|
||||||
|
IF NOT vIsDepartmentExcluded THEN
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.client
|
||||||
|
SELECT id
|
||||||
|
FROM client
|
||||||
|
WHERE departmentFk = vDepartmentFk;
|
||||||
|
|
||||||
|
CALL client_getMana();
|
||||||
|
|
||||||
|
INSERT INTO departmentMana (departmentFk, amount)
|
||||||
|
SELECT vDepartmentFk, SUM(mana)
|
||||||
|
FROM tmp.clientMana
|
||||||
|
ON DUPLICATE KEY UPDATE amount = VALUES(amount);
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
tmp.client,
|
||||||
|
tmp.clientMana;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -38,7 +38,7 @@ proc: BEGIN
|
||||||
SELECT s.ticketFk,
|
SELECT s.ticketFk,
|
||||||
LEFT(CONCAT('F: ', GROUP_CONCAT(CONCAT(i.id, ' ', i.longName) SEPARATOR ', ')), 250) itemShortage,
|
LEFT(CONCAT('F: ', GROUP_CONCAT(CONCAT(i.id, ' ', i.longName) SEPARATOR ', ')), 250) itemShortage,
|
||||||
LEFT(CONCAT('R: ', GROUP_CONCAT(CONCAT(i2.id, ' ', i2.longName) SEPARATOR ', ')), 250) itemDelay,
|
LEFT(CONCAT('R: ', GROUP_CONCAT(CONCAT(i2.id, ' ', i2.longName) SEPARATOR ', ')), 250) itemDelay,
|
||||||
LEFT(CONCAT('I: ', GROUP_CONCAT(CONCAT(i3.id, ' ', i3.longName) SEPARATOR ', ')), 250) itemLost
|
LEFT(CONCAT('I: ', GROUP_CONCAT(CONCAT(i3.id, ' ', i3.longName) SEPARATOR ', ')), 250) itemLost
|
||||||
FROM tmp.saleProblems sp
|
FROM tmp.saleProblems sp
|
||||||
JOIN vn.sale s ON s.id = sp.saleFk
|
JOIN vn.sale s ON s.id = sp.saleFk
|
||||||
LEFT JOIN vn.item i ON i.id = s.itemFk AND sp.hasItemShortage
|
LEFT JOIN vn.item i ON i.id = s.itemFk AND sp.hasItemShortage
|
||||||
|
@ -74,13 +74,13 @@ proc: BEGIN
|
||||||
IF(tpr.hasTicketRequest, ' COD 100',''),
|
IF(tpr.hasTicketRequest, ' COD 100',''),
|
||||||
IF(tpr.isTaxDataChecked, '',' FICHA INCOMPLETA'),
|
IF(tpr.isTaxDataChecked, '',' FICHA INCOMPLETA'),
|
||||||
IF(tpr.hasComponentLack, ' COMPONENTES', ''),
|
IF(tpr.hasComponentLack, ' COMPONENTES', ''),
|
||||||
IF(HOUR(util.VN_NOW()) < IF(HOUR(t.shipped), HOUR(t.shipped), COALESCE(HOUR(zc.hour),HOUR(z.hour)))
|
IF(HOUR(util.VN_NOW()) < IF(HOUR(t.shipped), HOUR(t.shipped), COALESCE(HOUR(zc.hour),HOUR(z.hour)))
|
||||||
AND tpr.isTooLittle, ' PEQUEÑO', '')
|
AND tpr.isTooLittle, ' PEQUEÑO', '')
|
||||||
) AS char(255))) problem,
|
) AS char(255))) problem,
|
||||||
IFNULL(tls.state,2) state,
|
IFNULL(tls.state,2) state,
|
||||||
w.code workerCode,
|
w.code workerCode,
|
||||||
DATE(t.shipped) shipped,
|
DATE(t.shipped) shipped,
|
||||||
wk.code salesPersonCode,
|
d.code departmentCode,
|
||||||
p.id provinceFk,
|
p.id provinceFk,
|
||||||
tls.productionOrder,
|
tls.productionOrder,
|
||||||
IFNULL(tls.alertLevel, al.id) alertLevel,
|
IFNULL(tls.alertLevel, al.id) alertLevel,
|
||||||
|
@ -96,23 +96,23 @@ proc: BEGIN
|
||||||
ag.isOwn,
|
ag.isOwn,
|
||||||
rm.bufferFk
|
rm.bufferFk
|
||||||
FROM tmp.productionTicket tt
|
FROM tmp.productionTicket tt
|
||||||
JOIN vn.ticket t ON tt.ticketFk = t.id
|
JOIN ticket t ON tt.ticketFk = t.id
|
||||||
JOIN vn.alertLevel al ON al.code = 'FREE'
|
JOIN alertLevel al ON al.code = 'FREE'
|
||||||
LEFT JOIN vn.ticketStateToday tst ON tst.ticketFk = t.id
|
LEFT JOIN ticketStateToday tst ON tst.ticketFk = t.id
|
||||||
LEFT JOIN vn.`state` st ON st.id = tst.state
|
LEFT JOIN `state` st ON st.id = tst.state
|
||||||
LEFT JOIN vn.client c ON c.id = t.clientFk
|
LEFT JOIN client c ON c.id = t.clientFk
|
||||||
LEFT JOIN vn.worker wk ON wk.id = c.salesPersonFk
|
LEFT JOIN department d ON d.id = c.departmentFk
|
||||||
JOIN vn.address a ON a.id = t.addressFk
|
JOIN address a ON a.id = t.addressFk
|
||||||
LEFT JOIN vn.province p ON p.id = a.provinceFk
|
LEFT JOIN province p ON p.id = a.provinceFk
|
||||||
JOIN vn.agencyMode am ON am.id = t.agencyModeFk
|
JOIN agencyMode am ON am.id = t.agencyModeFk
|
||||||
JOIN vn.deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
|
||||||
JOIN vn.agency ag ON ag.id = am.agencyFk
|
JOIN agency ag ON ag.id = am.agencyFk
|
||||||
LEFT JOIN vn.ticketState tls ON tls.ticketFk = tt.ticketFk
|
LEFT JOIN ticketState tls ON tls.ticketFk = tt.ticketFk
|
||||||
LEFT JOIN vn.ticketLastUpdated tlu ON tlu.ticketFk = tt.ticketFk
|
LEFT JOIN ticketLastUpdated tlu ON tlu.ticketFk = tt.ticketFk
|
||||||
LEFT JOIN vn.worker w ON w.id = tls.userFk
|
LEFT JOIN worker w ON w.id = tls.userFk
|
||||||
LEFT JOIN vn.routesMonitor rm ON rm.routeFk = t.routeFk
|
LEFT JOIN routesMonitor rm ON rm.routeFk = t.routeFk
|
||||||
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
|
LEFT JOIN `zone` z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
|
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
|
||||||
AND DATE(t.shipped) = zc.dated
|
AND DATE(t.shipped) = zc.dated
|
||||||
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
LEFT JOIN vn.ticketParking tp ON tp.ticketFk = t.id
|
||||||
LEFT JOIN vn.parking pk ON pk.id = tp.parkingFk
|
LEFT JOIN vn.parking pk ON pk.id = tp.parkingFk
|
||||||
|
@ -120,7 +120,7 @@ proc: BEGIN
|
||||||
LEFT JOIN saleProblemsDescription sp ON sp.ticketFk = tt.ticketFk
|
LEFT JOIN saleProblemsDescription sp ON sp.ticketFk = tt.ticketFk
|
||||||
WHERE t.warehouseFk = vWarehouseFk
|
WHERE t.warehouseFk = vWarehouseFk
|
||||||
AND dm.code IN ('AGENCY', 'DELIVERY', 'PICKUP');
|
AND dm.code IN ('AGENCY', 'DELIVERY', 'PICKUP');
|
||||||
|
|
||||||
UPDATE tmp.productionBuffer pb
|
UPDATE tmp.productionBuffer pb
|
||||||
JOIN (
|
JOIN (
|
||||||
SELECT pb.ticketFk, GROUP_CONCAT(p.code) previaParking
|
SELECT pb.ticketFk, GROUP_CONCAT(p.code) previaParking
|
||||||
|
|
|
@ -8,7 +8,7 @@ BEGIN
|
||||||
* @param vRouteFk
|
* @param vRouteFk
|
||||||
* @select Información de los tickets
|
* @select Información de los tickets
|
||||||
*/
|
*/
|
||||||
SELECT t.id Id,
|
SELECT t.id Id,
|
||||||
t.clientFk Client,
|
t.clientFk Client,
|
||||||
a.id Address,
|
a.id Address,
|
||||||
a.nickname ClientName,
|
a.nickname ClientName,
|
||||||
|
@ -23,20 +23,21 @@ SELECT t.id Id,
|
||||||
a.mobile AddressMobile,
|
a.mobile AddressMobile,
|
||||||
d.longitude Longitude,
|
d.longitude Longitude,
|
||||||
d.latitude Latitude,
|
d.latitude Latitude,
|
||||||
wm.mediaValue SalePersonPhone,
|
de.pbxQueue departmentPhone,
|
||||||
jgallego marked this conversation as resolved
guillermo
commented
Quien se espera esto soportará departmentPhone o dará error? Quien se espera esto soportará departmentPhone o dará error?
|
|||||||
tob.description Note,
|
tob.description Note,
|
||||||
t.isSigned Signed,
|
t.isSigned Signed,
|
||||||
t.priority,
|
t.priority,
|
||||||
t.cmrFk
|
t.cmrFk
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN client c ON t.clientFk = c.id
|
JOIN client c ON t.clientFk = c.id
|
||||||
JOIN address a ON t.addressFk = a.id
|
JOIN address a ON t.addressFk = a.id
|
||||||
LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk
|
LEFT JOIN department de ON de.id = c.departmentFk
|
||||||
|
LEFT JOIN company co ON co.`code` = 'VNL'
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT t.addressFk, MAX(d.ticketFk) lastTicketFk
|
SELECT t.addressFk, MAX(d.ticketFk) lastTicketFk
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN delivery d ON t.id = d.ticketFk
|
JOIN delivery d ON t.id = d.ticketFk
|
||||||
JOIN ticket ti ON ti.routeFk = vRouteFk
|
JOIN ticket ti ON ti.routeFk = vRouteFk
|
||||||
AND ti.id = t.id
|
AND ti.id = t.id
|
||||||
AND ti.clientFk = t.clientFk
|
AND ti.clientFk = t.clientFk
|
||||||
GROUP BY addressFk
|
GROUP BY addressFk
|
||||||
|
|
|
@ -15,7 +15,7 @@ BEGIN
|
||||||
w.code workerCode,
|
w.code workerCode,
|
||||||
sgd.saleFk,
|
sgd.saleFk,
|
||||||
iss.quantity pickedQuantity,
|
iss.quantity pickedQuantity,
|
||||||
c.salesPersonFk
|
c.departmentFk
|
||||||
FROM vn.sale s
|
FROM vn.sale s
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
|
JOIN saleGroupDetail sgd ON sgd.saleFk = s.id
|
||||||
|
|
|
@ -25,7 +25,6 @@ BEGIN
|
||||||
origin.futureState,
|
origin.futureState,
|
||||||
origin.futureIpt,
|
origin.futureIpt,
|
||||||
dest.ipt,
|
dest.ipt,
|
||||||
origin.workerFk,
|
|
||||||
origin.futureLiters,
|
origin.futureLiters,
|
||||||
origin.futureLines,
|
origin.futureLines,
|
||||||
dest.shipped,
|
dest.shipped,
|
||||||
|
@ -56,7 +55,6 @@ BEGIN
|
||||||
origin.saleClonedFk
|
origin.saleClonedFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT s.ticketFk,
|
SELECT s.ticketFk,
|
||||||
c.salesPersonFk workerFk,
|
|
||||||
t.shipped,
|
t.shipped,
|
||||||
t.totalWithVat,
|
t.totalWithVat,
|
||||||
st.name futureState,
|
st.name futureState,
|
||||||
|
@ -74,11 +72,10 @@ BEGIN
|
||||||
t.warehouseFk,
|
t.warehouseFk,
|
||||||
t.companyFk,
|
t.companyFk,
|
||||||
t.agencyModeFk,
|
t.agencyModeFk,
|
||||||
wd.departmentFk,
|
c.departmentFk,
|
||||||
sc.saleClonedFk
|
sc.saleClonedFk
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
JOIN client c ON c.id = t.clientFk
|
JOIN client c ON c.id = t.clientFk
|
||||||
JOIN workerDepartment wd ON wd.workerFk = c.salesPersonFk
|
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
LEFT JOIN saleCloned sc ON sc.saleClonedFk = s.id
|
LEFT JOIN saleCloned sc ON sc.saleClonedFk = s.id
|
||||||
JOIN saleVolume sv ON sv.saleFk = s.id
|
JOIN saleVolume sv ON sv.saleFk = s.id
|
||||||
|
@ -115,7 +112,7 @@ BEGIN
|
||||||
t.landed,
|
t.landed,
|
||||||
t.agencyModeFk,
|
t.agencyModeFk,
|
||||||
SEC_TO_TIME(
|
SEC_TO_TIME(
|
||||||
COALESCE(HOUR(t.shipped), HOUR(zc.hour), HOUR(z.hour)) * 3600 +
|
COALESCE(HOUR(t.shipped), HOUR(zc.hour), HOUR(z.hour)) * 3600 +
|
||||||
COALESCE(MINUTE(t.shipped), MINUTE(zc.hour), MINUTE(z.hour)) * 60
|
COALESCE(MINUTE(t.shipped), MINUTE(zc.hour), MINUTE(z.hour)) * 60
|
||||||
) preparation
|
) preparation
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_cloneWeekly`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_cloneWeekly`(
|
||||||
vDateFrom DATE,
|
vDateFrom DATE,
|
||||||
vDateTo DATE
|
vDateTo DATE
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -32,7 +32,7 @@ BEGIN
|
||||||
t.addressFk,
|
t.addressFk,
|
||||||
tt.agencyModeFk,
|
tt.agencyModeFk,
|
||||||
ti.dated
|
ti.dated
|
||||||
FROM ticketWeekly tt
|
FROM ticketWeekly tt
|
||||||
JOIN ticket t ON tt.ticketFk = t.id
|
JOIN ticket t ON tt.ticketFk = t.id
|
||||||
JOIN tmp.time ti
|
JOIN tmp.time ti
|
||||||
WHERE WEEKDAY(ti.dated) = tt.weekDay;
|
WHERE WEEKDAY(ti.dated) = tt.weekDay;
|
||||||
|
@ -44,12 +44,12 @@ BEGIN
|
||||||
OPEN vTickets;
|
OPEN vTickets;
|
||||||
l: LOOP
|
l: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vTickets INTO
|
FETCH vTickets INTO
|
||||||
vTicketFk,
|
vTicketFk,
|
||||||
vClientFk,
|
vClientFk,
|
||||||
vWarehouseFk,
|
vWarehouseFk,
|
||||||
vCompanyFk,
|
vCompanyFk,
|
||||||
vAddressFk,
|
vAddressFk,
|
||||||
vAgencyModeFk,
|
vAgencyModeFk,
|
||||||
vShipment;
|
vShipment;
|
||||||
|
|
||||||
|
@ -63,17 +63,17 @@ BEGIN
|
||||||
JOIN saleCloned sc ON sc.saleOriginalFk = saleOrig.id
|
JOIN saleCloned sc ON sc.saleOriginalFk = saleOrig.id
|
||||||
JOIN sale saleClon ON saleClon.id = sc.saleClonedFk
|
JOIN sale saleClon ON saleClon.id = sc.saleClonedFk
|
||||||
JOIN ticket tClon ON tClon.id = saleClon.ticketFk
|
JOIN ticket tClon ON tClon.id = saleClon.ticketFk
|
||||||
WHERE tOrig.id = vTicketFk
|
WHERE tOrig.id = vTicketFk
|
||||||
AND tClon.isDeleted = FALSE
|
AND tClon.isDeleted = FALSE
|
||||||
AND DATE(tClon.shipped) = vShipment)
|
AND DATE(tClon.shipped) = vShipment)
|
||||||
THEN
|
THEN
|
||||||
ITERATE l;
|
ITERATE l;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vAgencyModeFk IS NULL THEN
|
IF vAgencyModeFk IS NULL THEN
|
||||||
SELECT agencyModeFk INTO vAgencyModeFk
|
SELECT agencyModeFk INTO vAgencyModeFk
|
||||||
FROM address
|
FROM address
|
||||||
WHERE clientFk = vClientFk
|
WHERE clientFk = vClientFk
|
||||||
AND isDefaultAddress;
|
AND isDefaultAddress;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
@ -94,17 +94,17 @@ BEGIN
|
||||||
FALSE,
|
FALSE,
|
||||||
vNewTicket);
|
vNewTicket);
|
||||||
|
|
||||||
UPDATE ticket
|
UPDATE ticket
|
||||||
SET clonedFrom = vTicketFk
|
SET clonedFrom = vTicketFk
|
||||||
WHERE id = vNewTicket;
|
WHERE id = vNewTicket;
|
||||||
|
|
||||||
INSERT INTO sale (ticketFk,
|
INSERT INTO sale (ticketFk,
|
||||||
itemFk,
|
itemFk,
|
||||||
concept,
|
concept,
|
||||||
quantity,
|
quantity,
|
||||||
price,
|
price,
|
||||||
discount,
|
discount,
|
||||||
priceFixed,
|
priceFixed,
|
||||||
isPriceFixed)
|
isPriceFixed)
|
||||||
SELECT vNewTicket,
|
SELECT vNewTicket,
|
||||||
itemFk,
|
itemFk,
|
||||||
|
@ -120,7 +120,7 @@ BEGIN
|
||||||
INSERT IGNORE INTO saleCloned(saleOriginalFk, saleClonedFk)
|
INSERT IGNORE INTO saleCloned(saleOriginalFk, saleClonedFk)
|
||||||
SELECT saleOriginal.id, saleClon.id
|
SELECT saleOriginal.id, saleClon.id
|
||||||
FROM sale saleOriginal
|
FROM sale saleOriginal
|
||||||
JOIN sale saleClon ON saleOriginal.itemFk = saleClon.itemFk
|
JOIN sale saleClon ON saleOriginal.itemFk = saleClon.itemFk
|
||||||
AND saleOriginal.quantity = saleClon.quantity
|
AND saleOriginal.quantity = saleClon.quantity
|
||||||
WHERE saleOriginal.ticketFk = vTicketFk
|
WHERE saleOriginal.ticketFk = vTicketFk
|
||||||
AND saleClon.ticketFk = vNewTicket;
|
AND saleClon.ticketFk = vNewTicket;
|
||||||
|
@ -150,43 +150,42 @@ BEGIN
|
||||||
buyed,
|
buyed,
|
||||||
requesterFk,
|
requesterFk,
|
||||||
attenderFk,
|
attenderFk,
|
||||||
vNewTicket
|
vNewTicket
|
||||||
FROM ticketRequest
|
FROM ticketRequest
|
||||||
WHERE ticketFk = vTicketFk;
|
WHERE ticketFk = vTicketFk;
|
||||||
|
|
||||||
INSERT INTO ticketObservation(
|
INSERT INTO ticketObservation(
|
||||||
ticketFk,
|
ticketFk,
|
||||||
observationTypeFk,
|
observationTypeFk,
|
||||||
description)
|
description)
|
||||||
VALUES(
|
VALUES(
|
||||||
vNewTicket,
|
vNewTicket,
|
||||||
vObservationSalesPersonFk,
|
vObservationSalesPersonFk,
|
||||||
CONCAT('turno desde ticket: ',vTicketFk))
|
CONCAT('turno desde ticket: ',vTicketFk))
|
||||||
ON DUPLICATE KEY UPDATE description =
|
ON DUPLICATE KEY UPDATE description =
|
||||||
CONCAT(ticketObservation.description,VALUES(description),' ');
|
CONCAT(ticketObservation.description,VALUES(description),' ');
|
||||||
|
|
||||||
INSERT INTO ticketObservation(ticketFk,
|
INSERT INTO ticketObservation(ticketFk,
|
||||||
observationTypeFk,
|
observationTypeFk,
|
||||||
description)
|
description)
|
||||||
VALUES(
|
VALUES(
|
||||||
vNewTicket,
|
vNewTicket,
|
||||||
vObservationItemPickerFk,
|
vObservationItemPickerFk,
|
||||||
'ATENCION: Contiene lineas de TURNO')
|
'ATENCION: Contiene lineas de TURNO')
|
||||||
ON DUPLICATE KEY UPDATE description =
|
ON DUPLICATE KEY UPDATE description =
|
||||||
CONCAT(ticketObservation.description,VALUES(description),' ');
|
CONCAT(ticketObservation.description,VALUES(description),' ');
|
||||||
|
|
||||||
IF vLanding IS NULL THEN
|
IF vLanding IS NULL THEN
|
||||||
SELECT IFNULL(d.notificationEmail, e.email) INTO vEmail
|
|
||||||
|
SELECT d.notificationEmail INTO vEmail
|
||||||
FROM client c
|
FROM client c
|
||||||
JOIN account.emailUser e ON e.userFk = c.salesPersonFk
|
LEFT JOIN department d ON d.id = c.departmentFk
|
||||||
LEFT JOIN workerDepartment wd ON wd.workerFk = c.salesPersonFk
|
|
||||||
LEFT JOIN department d ON d.id = wd.departmentFk
|
|
||||||
WHERE c.id = vClientFk;
|
WHERE c.id = vClientFk;
|
||||||
|
|
||||||
SET vSubject = CONCAT('Turnos - No se ha podido clonar correctamente el ticket ',
|
SET vSubject = CONCAT('Turnos - No se ha podido clonar correctamente el ticket ',
|
||||||
vTicketFk,' para el dia: ', vShipment);
|
vTicketFk,' para el dia: ', vShipment);
|
||||||
SET vMessage = CONCAT('No se ha podido clonar el ticket ', vTicketFk,
|
SET vMessage = CONCAT('No se ha podido clonar el ticket ', vTicketFk,
|
||||||
' para el dia: ', vShipment,
|
' para el dia: ', vShipment,
|
||||||
' porque no hay una zona de envío disponible. Se ha creado el ticket: ',
|
' porque no hay una zona de envío disponible. Se ha creado el ticket: ',
|
||||||
vNewTicket, ' pero ha que revisar las fechas y la agencia');
|
vNewTicket, ' pero ha que revisar las fechas y la agencia');
|
||||||
|
|
||||||
|
|
|
@ -1,36 +1,33 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`workerDisable`(vUserId int)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`workerDisable`(vUserFk INT)
|
||||||
mainLabel:BEGIN
|
l:BEGIN
|
||||||
|
|
||||||
IF (SELECT COUNT(*) FROM workerDisableExcluded WHERE workerFk = vUserId AND (dated > util.VN_CURDATE() OR dated IS NULL)) > 0 THEN
|
IF (SELECT COUNT(*)
|
||||||
LEAVE mainLabel;
|
FROM workerDisableExcluded
|
||||||
|
WHERE workerFk = vUserFk
|
||||||
|
AND (dated > util.VN_CURDATE() OR dated IS NULL)) > 0 THEN
|
||||||
|
LEAVE l;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
DELETE cp FROM clientProtected cp
|
DELETE FROM account.account WHERE id = vUserFk;
|
||||||
JOIN client c ON c.id = cp.clientFk
|
|
||||||
WHERE c.salesPersonFk = vUserId;
|
|
||||||
|
|
||||||
DELETE FROM account.account
|
UPDATE account.user
|
||||||
WHERE id = vUserId;
|
|
||||||
|
|
||||||
UPDATE account.user
|
|
||||||
SET role = 2
|
SET role = 2
|
||||||
WHERE id = vUserId;
|
WHERE id = vUserFk;
|
||||||
|
|
||||||
DELETE FROM pbx.sip
|
DELETE FROM pbx.sip WHERE user_id = vUserFk;
|
||||||
WHERE user_id = vUserId;
|
|
||||||
|
|
||||||
UPDATE `client` c
|
UPDATE `client` c
|
||||||
JOIN payMethod p ON p.name = 'CONTADO'
|
JOIN payMethod p ON p.name = 'CONTADO'
|
||||||
SET c.credit = 0, c.payMethodFk = p.id, hasCoreVnl = FALSE
|
SET c.credit = 0,
|
||||||
WHERE c.id = vUserId;
|
c.payMethodFk = p.id,
|
||||||
|
c.hasCoreVnl = FALSE,
|
||||||
UPDATE `client` c
|
c.isActive = FALSE,
|
||||||
SET c.salesPersonFk = null
|
c.isTaxDataChecked = FALSE
|
||||||
WHERE c.salesPersonFk = vUserId;
|
WHERE c.id = vUserFk;
|
||||||
|
|
||||||
UPDATE locker l
|
UPDATE locker l
|
||||||
SET l.workerFk = NULL
|
SET l.workerFk = NULL
|
||||||
WHERE l.workerFk = vUserId;
|
WHERE l.workerFk = vUserId;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -23,21 +23,18 @@ BEGIN
|
||||||
WHERE landed BETWEEN vLanded AND util.dayEnd(vLanded)
|
WHERE landed BETWEEN vLanded AND util.dayEnd(vLanded)
|
||||||
AND NOT isDeleted
|
AND NOT isDeleted
|
||||||
)
|
)
|
||||||
SELECT c.id,
|
SELECT c.id clientFk,
|
||||||
c.name,
|
c.name,
|
||||||
c.phone,
|
c.phone,
|
||||||
bt.description,
|
bt.description,
|
||||||
c.salesPersonFk,
|
c.departmentFk,
|
||||||
u.name username,
|
d.name departmentName,
|
||||||
jgallego marked this conversation as resolved
guillermo
commented
Aquí habrá que cambiar grafana que es el único servicio que utiliza este proc, apuntar para el día de subida a producción que no se nos pase, ya que es una herramienta que gastan mucho los comerciales Aquí habrá que cambiar grafana que es el único servicio que utiliza este proc, apuntar para el día de subida a producción que no se nos pase, ya que es una herramienta que gastan mucho los comerciales
|
|||||||
aai.invoiced,
|
aai.invoiced,
|
||||||
cnb.lastShipped,
|
cnb.lastShipped,
|
||||||
IF(cwt.clientFk, TRUE, FALSE) hasTicket
|
IF(cwt.clientFk, TRUE, FALSE) hasTicket
|
||||||
FROM vn.client c
|
FROM vn.client c
|
||||||
JOIN vn.worker w ON w.id = c.salesPersonFk
|
|
||||||
JOIN vn.workerDepartment wd ON wd.workerFk = w.id
|
|
||||||
JOIN vn.department d ON d.id = wd.departmentFk
|
|
||||||
LEFT JOIN clientWithTicket cwt ON cwt.clientFk = c.id
|
LEFT JOIN clientWithTicket cwt ON cwt.clientFk = c.id
|
||||||
LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
|
LEFT JOIN vn.department d ON d.id = c.departmentFk
|
||||||
JOIN vn.`address` a ON a.clientFk = c.id
|
JOIN vn.`address` a ON a.clientFk = c.id
|
||||||
JOIN vn.postCode pc ON pc.code = a.postalCode
|
JOIN vn.postCode pc ON pc.code = a.postalCode
|
||||||
JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
|
JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
|
||||||
|
|
|
@ -5,7 +5,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`client_beforeInsert`
|
||||||
BEGIN
|
BEGIN
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
SET NEW.accountingAccount = 4300000000 + NEW.id;
|
SET NEW.accountingAccount = 4300000000 + NEW.id;
|
||||||
SET NEW.lastSalesPersonFk = NEW.salesPersonFk;
|
SET NEW.lastdepartmentFk = NEW.departmentFk;
|
||||||
SET NEW.geoFk = client_getGeo(NEW.id);
|
SET NEW.geoFk = client_getGeo(NEW.id);
|
||||||
|
|
||||||
IF (NEW.phone <> '') THEN
|
IF (NEW.phone <> '') THEN
|
||||||
|
@ -15,5 +15,6 @@ BEGIN
|
||||||
IF (NEW.mobile <> '') THEN
|
IF (NEW.mobile <> '') THEN
|
||||||
CALL pbx.phone_isValid(NEW.mobile);
|
CALL pbx.phone_isValid(NEW.mobile);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -45,18 +45,16 @@ BEGIN
|
||||||
IF vText IS NOT NULL
|
IF vText IS NOT NULL
|
||||||
THEN
|
THEN
|
||||||
INSERT INTO mail(receiver, replyTo, `subject`, body)
|
INSERT INTO mail(receiver, replyTo, `subject`, body)
|
||||||
SELECT
|
SELECT IFNULL(d.notificationEmail, 'jgallego@verdnatura.es'),
|
||||||
CONCAT(IF(ac.id,u.name, 'jgallego'), '@verdnatura.es'),
|
|
||||||
'administracion@verdnatura.es',
|
'administracion@verdnatura.es',
|
||||||
CONCAT('Cliente ', NEW.id),
|
CONCAT('Cliente ', NEW.id),
|
||||||
CONCAT('Recibida la documentación: ', vText)
|
CONCAT('Recibida la documentación: ', vText)
|
||||||
FROM worker w
|
FROM department d
|
||||||
LEFT JOIN account.user u ON w.id = u.id AND u.active
|
WHERE d.id = NEW.departmentFk;
|
||||||
LEFT JOIN account.account ac ON ac.id = u.id
|
|
||||||
WHERE w.id = NEW.salesPersonFk;
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF NEW.salespersonFk IS NULL AND OLD.salespersonFk IS NOT NULL THEN
|
|
||||||
|
IF NEW.departmentFk IS NULL AND OLD.departmentFk IS NOT NULL THEN
|
||||||
IF (SELECT COUNT(clientFk)
|
IF (SELECT COUNT(clientFk)
|
||||||
FROM clientProtected
|
FROM clientProtected
|
||||||
WHERE clientFk = NEW.id
|
WHERE clientFk = NEW.id
|
||||||
|
@ -65,10 +63,6 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF NOT (NEW.salesPersonFk <=> OLD.salesPersonFk) THEN
|
|
||||||
SET NEW.lastSalesPersonFk = IFNULL(NEW.salesPersonFk, OLD.salesPersonFk);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF NOT (NEW.businessTypeFk <=> OLD.businessTypeFk) AND (NEW.businessTypeFk = 'individual' OR OLD.businessTypeFk = 'individual') THEN
|
IF NOT (NEW.businessTypeFk <=> OLD.businessTypeFk) AND (NEW.businessTypeFk = 'individual' OR OLD.businessTypeFk = 'individual') THEN
|
||||||
SET NEW.isTaxDataChecked = 0;
|
SET NEW.isTaxDataChecked = 0;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`departmentMana_beforeInsert`
|
||||||
|
BEFORE INSERT ON `departmentMana`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF (SELECT EXISTS(SELECT TRUE FROM departmentManaExcluded WHERE departmentFk = NEW.departmentFk)) THEN
|
||||||
|
CALL util.throw('Department is excluded from mana');
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,10 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`departmentMana_beforeUpdate`
|
||||||
|
BEFORE UPDATE ON `departmentMana`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF (SELECT EXISTS(SELECT TRUE FROM departmentManaExcluded WHERE departmentFk = NEW.departmentFk)) THEN
|
||||||
|
CALL util.throw('Department is excluded from mana');
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,11 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sharingCart_beforeDelete`
|
|
||||||
BEFORE DELETE ON `sharingCart`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
DELETE sc FROM sharingCartDaily sc
|
|
||||||
WHERE sc.dated BETWEEN OLD.started AND OLD.ended AND
|
|
||||||
sc.ownerFk = OLD.workerFk AND
|
|
||||||
sc.substituteFk = OLD.workerSubstitute;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,15 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sharingCart_beforeInsert`
|
|
||||||
BEFORE INSERT ON `sharingCart`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
IF NEW.workerFk = NEW.workerSubstitute THEN
|
|
||||||
CALL util.throw ('worker and workerSubstitute must be different');
|
|
||||||
ELSE
|
|
||||||
INSERT IGNORE INTO sharingCartDaily (ownerFk, substituteFk, dated)
|
|
||||||
SELECT NEW.workerFk, NEW.workerSubstitute, dated
|
|
||||||
FROM time
|
|
||||||
WHERE dated BETWEEN NEW.started AND NEW.ended;
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,21 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sharingCart_beforeUpdate`
|
|
||||||
BEFORE UPDATE ON `sharingCart`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
IF NEW.workerFk = NEW.workerSubstitute THEN
|
|
||||||
CALL util.throw ('worker and workerSubstitute must be different');
|
|
||||||
ELSE
|
|
||||||
DELETE sc FROM sharingCartDaily sc
|
|
||||||
WHERE sc.dated BETWEEN OLD.started AND OLD.ended AND
|
|
||||||
sc.ownerFk = OLD.workerFk AND
|
|
||||||
sc.substituteFk = OLD.workerSubstitute;
|
|
||||||
|
|
||||||
INSERT IGNORE INTO sharingCartDaily (ownerFk, substituteFk, dated)
|
|
||||||
SELECT NEW.workerFk, NEW.workerSubstitute, dated
|
|
||||||
FROM time
|
|
||||||
WHERE dated BETWEEN NEW.started AND NEW.ended;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,9 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sharingClient_beforeInsert`
|
|
||||||
BEFORE INSERT ON `sharingClient`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
SET NEW.ended = GREATEST(util.VN_CURDATE(),NEW.ended);
|
|
||||||
SET NEW.started = GREATEST(util.VN_CURDATE(),NEW.started);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,9 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`sharingClient_beforeUpdate`
|
|
||||||
BEFORE UPDATE ON `sharingClient`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
SET NEW.ended = GREATEST(util.VN_CURDATE(),NEW.ended);
|
|
||||||
SET NEW.started = GREATEST(util.VN_CURDATE(),NEW.started);
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,9 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`workerManaExcluded_beforeInsert`
|
|
||||||
BEFORE INSERT ON `workerManaExcluded`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
DELETE FROM workerMana
|
|
||||||
WHERE workerFk = NEW.workerFk;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,9 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`workerManaExcluded_beforeUpdate`
|
|
||||||
BEFORE UPDATE ON `workerManaExcluded`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
DELETE FROM workerMana
|
|
||||||
WHERE workerFk = NEW.workerFk;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,10 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`workerMana_beforeInsert`
|
|
||||||
BEFORE INSERT ON `workerMana`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
IF (SELECT EXISTS(SELECT TRUE FROM workerManaExcluded WHERE workerFk = NEW.workerFk)) THEN
|
|
||||||
CALL util.throw('Worker is excluded from mana');
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,10 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`workerMana_beforeUpdate`
|
|
||||||
BEFORE UPDATE ON `workerMana`
|
|
||||||
FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
IF (SELECT EXISTS(SELECT TRUE FROM workerManaExcluded WHERE workerFk = NEW.workerFk)) THEN
|
|
||||||
CALL util.throw('Worker is excluded from mana');
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,26 +1,16 @@
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
||||||
SQL SECURITY DEFINER
|
SQL SECURITY DEFINER
|
||||||
VIEW `vn`.`newBornSales`
|
VIEW `vn`.`newBornSales`
|
||||||
AS SELECT `v`.`importe` AS `amount`,
|
AS SELECT
|
||||||
`v`.`Id_Cliente` AS `clientFk`,
|
`s`.`amount` AS `amount`,
|
||||||
`c`.`salesPersonFk` AS `userFk`,
|
`s`.`clientFk` AS `clientFk`,
|
||||||
`v`.`fecha` AS `dated`,
|
`c`.`departmentFk` AS `departmentFk`,
|
||||||
`cn`.`firstShipped` AS `firstShipped`
|
`s`.`dated` AS `dated`,
|
||||||
FROM (
|
`cn`.`firstShipped` AS `firstShipped`
|
||||||
(
|
FROM
|
||||||
(
|
((`bs`.`clientNewBorn` `cn`
|
||||||
(
|
JOIN `bs`.`sale` `s` ON
|
||||||
`bs`.`clientNewBorn` `cn`
|
(`cn`.`firstShipped` + interval 1 year > `s`.`dated`
|
||||||
JOIN `bs`.`ventas` `v` ON(
|
and `s`.`clientFk` = `cn`.`clientFk`))
|
||||||
`cn`.`firstShipped` + INTERVAL 1 year > `v`.`fecha`
|
JOIN `vn`.`client` `c` ON
|
||||||
AND `v`.`Id_Cliente` = `cn`.`clientFk`
|
(`c`.`id` = `s`.`clientFk`));
|
||||||
)
|
|
||||||
)
|
|
||||||
JOIN `vn`.`client` `c` ON(`c`.`id` = `v`.`Id_Cliente`)
|
|
||||||
)
|
|
||||||
JOIN `account`.`user` `u` ON(`u`.`id` = `c`.`salesPersonFk`)
|
|
||||||
)
|
|
||||||
JOIN `account`.`role` `r` ON(`r`.`id` = `u`.`role`)
|
|
||||||
)
|
|
||||||
WHERE `r`.`name` = 'salesPerson'
|
|
||||||
AND `u`.`name` NOT IN ('ismaelalcolea', 'ruben')
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
|
||||||
SQL SECURITY DEFINER
|
|
||||||
VIEW `vn`.`salesPersonSince`
|
|
||||||
AS SELECT `b`.`workerFk` AS `workerFk`,
|
|
||||||
min(`b`.`started`) AS `started`
|
|
||||||
FROM (
|
|
||||||
(
|
|
||||||
`vn`.`business` `b`
|
|
||||||
JOIN `vn`.`worker` `w` ON(`w`.`id` = `b`.`workerFk`)
|
|
||||||
)
|
|
||||||
LEFT JOIN `vn`.`professionalCategory` `pc` ON(
|
|
||||||
`pc`.`id` = `b`.`workerBusinessProfessionalCategoryFk`
|
|
||||||
)
|
|
||||||
)
|
|
||||||
WHERE `pc`.`description` = 'Aux ventas'
|
|
||||||
GROUP BY `b`.`workerFk`
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
||||||
|
SQL SECURITY DEFINER
|
||||||
|
VIEW `ticketDepartment` AS
|
||||||
|
SELECT
|
||||||
|
`t`.`id` AS `ticketFk`,
|
||||||
|
`c`.`departmentFk` AS `departmentFk`,
|
||||||
|
`d`.`name` AS `departmentName`
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
(
|
||||||
|
`ticket` `t`
|
||||||
|
LEFT JOIN `client` `c` ON
|
||||||
|
(
|
||||||
|
`c`.`id` = `t`.`clientFk`
|
||||||
|
)
|
||||||
|
)
|
||||||
|
LEFT JOIN `department` `d` ON
|
||||||
|
(
|
||||||
|
`d`.`id` = `c`.`departmentFk`
|
||||||
|
)
|
||||||
|
);
|
|
@ -39,7 +39,7 @@ AS SELECT `c`.`id` AS `id_cliente`,
|
||||||
`c`.`creditInsurance` AS `creditInsurance`,
|
`c`.`creditInsurance` AS `creditInsurance`,
|
||||||
`c`.`isCreatedAsServed` AS `isCreatedAsServed`,
|
`c`.`isCreatedAsServed` AS `isCreatedAsServed`,
|
||||||
`c`.`hasInvoiceSimplified` AS `hasInvoiceSimplified`,
|
`c`.`hasInvoiceSimplified` AS `hasInvoiceSimplified`,
|
||||||
`c`.`salesPersonFk` AS `Id_Trabajador`,
|
`c`.`departmentFk` AS `departmentFk`,
|
||||||
`c`.`isVies` AS `vies`,
|
`c`.`isVies` AS `vies`,
|
||||||
`c`.`bankEntityFk` AS `bankEntityFk`,
|
`c`.`bankEntityFk` AS `bankEntityFk`,
|
||||||
`c`.`typeFk` AS `typeFk`
|
`c`.`typeFk` AS `typeFk`
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
ALTER TABLE vn.client
|
||||||
|
ADD IF NOT EXISTS departmentFk INT(11) DEFAULT NULL NULL;
|
||||||
|
|
||||||
|
ALTER TABLE vn.client
|
||||||
|
ADD IF NOT EXISTS lastDepartmentFk INT(11) DEFAULT NULL NULL;
|
||||||
|
|
||||||
|
ALTER TABLE vn.client
|
||||||
|
ADD CONSTRAINT client_department_FK FOREIGN KEY IF NOT EXISTS (departmentFk)
|
||||||
|
REFERENCES vn.department(id) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
ALTER TABLE vn.client
|
||||||
|
ADD CONSTRAINT client_lastDepartment_FK FOREIGN KEY IF NOT EXISTS (lastDepartmentFk)
|
||||||
|
REFERENCES vn.department(id) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
UPDATE vn.client c
|
||||||
|
JOIN vn.worker w ON w.id = c.salesPersonFk
|
||||||
|
JOIN vn.business b ON b.id = w.businessFk
|
||||||
|
SET c.departmentFk = b.departmentFk;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS vn.departmentMana;
|
||||||
|
CREATE OR REPLACE TABLE `vn`.`departmentMana` (
|
||||||
|
`departmentFk` int(10) NOT NULL,
|
||||||
|
`size` int(11) NOT NULL DEFAULT 300,
|
||||||
|
`amount` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`pricesModifierRate` double NOT NULL DEFAULT 0,
|
||||||
|
`isPricesModifierActivated` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`departmentFk`),
|
||||||
|
KEY `departmentMana_idx` (`departmentFk`),
|
||||||
|
CONSTRAINT `departmentMana_Department_FK` FOREIGN KEY (`departmentFk`)
|
||||||
|
REFERENCES `vn`.`department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS bs.salesByClient;
|
||||||
|
CREATE OR REPLACE TABLE `bs`.`salesByClient` (
|
||||||
|
`dated` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
`departmentFk` int(10) DEFAULT NULL,
|
||||||
|
`clientFk` int(11) NOT NULL,
|
||||||
|
`amount` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
`equalizationTax` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
`amountNewBorn` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
PRIMARY KEY (`dated`,`clientFk`),
|
||||||
|
KEY `salesByClient_clientFk` (`clientFk`),
|
||||||
|
KEY `salesByClient_departmentFk` (`departmentFk`),
|
||||||
|
KEY `salesByClient_dated` (`dated`,`clientFk`,`amount`),
|
||||||
|
CONSTRAINT `salesByClient_clientFk_FK`
|
||||||
|
FOREIGN KEY (`clientFk`) REFERENCES `vn`.`client` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `salesByClient_department_FK`
|
||||||
|
FOREIGN KEY (`departmentFk`) REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci COMMENT='Ventas diarias por cliente y departamento';
|
||||||
|
|
||||||
|
INSERT INTO bs.salesByClient(
|
||||||
|
dated,
|
||||||
|
departmentFk,
|
||||||
|
clientFk,
|
||||||
|
amount,
|
||||||
|
equalizationTax,
|
||||||
|
amountNewBorn)
|
||||||
|
SELECT ss.dated, c.departmentFk, ss.clientFk, ss.amount, ss.equalizationTax, ss.amountNewBorn
|
||||||
|
FROM bs.salesByclientSalesPerson ss
|
||||||
|
JOIN vn.client c ON c.id = ss.clientFk;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `vn`.`departmentNoUnassign`;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE `vn`.`departmentNoUnassign` (
|
||||||
|
`departmentFk` int(10) NOT NULL,
|
||||||
|
PRIMARY KEY (`departmentFk`),
|
||||||
|
CONSTRAINT `departmentNoUnassign_FK` FOREIGN KEY (`departmentFk`) REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci
|
||||||
|
COMMENT='Lista de departamentos comerciales que no se desasignarán automáticamente sus clientes';
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `bs`.`portfolio`;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE `bs`.`portfolio` (
|
||||||
|
`departmentFk` int(10) NOT NULL,
|
||||||
|
`yeared` int(4) NOT NULL,
|
||||||
|
`monthed` int(2) NOT NULL,
|
||||||
|
`amount` decimal(10,2) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`departmentFk`,`yeared`,`monthed`),
|
||||||
|
KEY `portfolio_departmentFk` (`departmentFk`),
|
||||||
|
CONSTRAINT `portfolio_salesDepartment_department_FK`
|
||||||
|
FOREIGN KEY (`departmentFk`) REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE `bs`.`salesDepartmentEvolution` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`dated` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
`departmentFk` int(10) DEFAULT NULL,
|
||||||
|
`amount` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
`equalizationTax` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
`amountNewBorn` decimal(10,3) NOT NULL DEFAULT 0.000,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `salesDepartmentEvolution_salesDepartment` (`departmentFk`),
|
||||||
|
CONSTRAINT `salesDepartmentEvolution_salesDepartment_department_FK` FOREIGN KEY (`departmentFk`)
|
||||||
|
REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
RENAME TABLE vn.salespersonConfig TO vn.manaConfig;
|
||||||
|
|
||||||
|
ALTER TABLE vn.company ADD IF NOT EXISTS phone varchar(15) DEFAULT NULL NULL;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE `vn`.`departmentManaExcluded` (
|
||||||
|
`departmentFk` int(10) NOT NULL,
|
||||||
|
PRIMARY KEY (`departmentFk`),
|
||||||
|
CONSTRAINT `departmentManaExcluded_FK` FOREIGN KEY (`departmentFk`)
|
||||||
|
REFERENCES `vn`.`department` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci
|
||||||
|
COMMENT='Departamentos de venta que tienen que estar excluidos del cálculo del maná';
|
||||||
|
|
||||||
|
|
||||||
|
RENAME TABLE vn.workerManaExcluded TO vn.workerManaExcluded__;
|
||||||
|
ALTER TABLE vn.workerManaExcluded__
|
||||||
|
COMMENT='Usuarios que tienen que estar excluidos del cálculo del maná
|
||||||
|
@deprecated 2024-07-16';
|
||||||
|
|
||||||
|
UPDATE `salix`.`ACL` SET property = 'getDepartmentMana' WHERE property = 'getSalesPersonMana';
|
|
@ -0,0 +1,6 @@
|
||||||
|
UPDATE `vn`.`client` c
|
||||||
|
LEFT JOIN `vn`.workerDepartment wd ON
|
||||||
|
c.salesPersonFk = wd.workerFk
|
||||||
|
LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
|
||||||
|
LEFT JOIN `vn`.department d ON d.id = wd.departmentFk
|
||||||
|
SET c.departmentFk = d.id
|
|
@ -0,0 +1,12 @@
|
||||||
|
RENAME TABLE vn.sharingCart TO vn.sharingCart__;
|
||||||
|
ALTER TABLE vn.sharingCart__
|
||||||
|
COMMENT='deprecated 2025-02-18';
|
||||||
|
|
||||||
|
RENAME TABLE vn.sharingCartDaily TO vn.sharingCartDaily__;
|
||||||
|
ALTER TABLE vn.sharingCartDaily__
|
||||||
|
COMMENT='deprecated 2025-02-18';
|
||||||
|
|
||||||
|
RENAME TABLE vn.sharingClient TO vn.sharingClient__;
|
||||||
|
ALTER TABLE vn.sharingClient__
|
||||||
|
COMMENT='deprecated 2025-02-18';
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
DELETE FROM vn.workerMana
|
|
||||||
WHERE workerFk IN (
|
|
||||||
SELECT workerFk
|
|
||||||
FROM vn.workerManaExcluded
|
|
||||||
);
|
|
|
@ -313,7 +313,7 @@ export default {
|
||||||
clientDefaulter: {
|
clientDefaulter: {
|
||||||
anyClient: 'vn-client-defaulter tbody > tr',
|
anyClient: 'vn-client-defaulter tbody > tr',
|
||||||
firstClientName: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(2) > span',
|
firstClientName: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(2) > span',
|
||||||
firstSalesPersonName: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(4) > span',
|
departmentName: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(4)',
|
||||||
firstObservation: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(9) > vn-textarea[ng-model="defaulter.observation"]',
|
firstObservation: 'vn-client-defaulter tbody > tr:nth-child(2) > td:nth-child(9) > vn-textarea[ng-model="defaulter.observation"]',
|
||||||
allDefaulterCheckbox: 'vn-client-defaulter thead vn-multi-check',
|
allDefaulterCheckbox: 'vn-client-defaulter thead vn-multi-check',
|
||||||
addObservationButton: 'vn-client-defaulter vn-button[icon="icon-notes"]',
|
addObservationButton: 'vn-client-defaulter vn-button[icon="icon-notes"]',
|
||||||
|
|
|
@ -17,13 +17,6 @@ describe('Ticket Edit sale path', () => {
|
||||||
await browser.close();
|
await browser.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should click on the first sale claim icon to navigate over there`, async() => {
|
|
||||||
await page.waitToClick(selectors.ticketSales.firstSaleClaimIcon);
|
|
||||||
await page.waitForNavigation();
|
|
||||||
await page.goBack();
|
|
||||||
await page.goBack();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should navigate to the tickets index', async() => {
|
it('should navigate to the tickets index', async() => {
|
||||||
await page.waitToClick(selectors.globalItems.applicationsMenuButton);
|
await page.waitToClick(selectors.globalItems.applicationsMenuButton);
|
||||||
await page.waitForSelector(selectors.globalItems.applicationsMenuVisible);
|
await page.waitForSelector(selectors.globalItems.applicationsMenuVisible);
|
||||||
|
|
|
@ -199,7 +199,7 @@
|
||||||
"This ticket is already invoiced": "This ticket is already invoiced",
|
"This ticket is already invoiced": "This ticket is already invoiced",
|
||||||
"Negative basis of tickets: 23": "Negative basis of tickets: 23",
|
"Negative basis of tickets: 23": "Negative basis of tickets: 23",
|
||||||
"Booking completed": "Booking complete",
|
"Booking completed": "Booking complete",
|
||||||
"The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
|
"The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the department {{departmentId}} is in preparation",
|
||||||
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
||||||
"Bank entity must be specified": "Bank entity must be specified",
|
"Bank entity must be specified": "Bank entity must be specified",
|
||||||
"Try again": "Try again",
|
"Try again": "Try again",
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"That payment method requires a BIC": "El método de pago seleccionado requiere un BIC",
|
"That payment method requires a BIC": "El método de pago seleccionado requiere un BIC",
|
||||||
"State cannot be blank": "El estado no puede estar en blanco",
|
"State cannot be blank": "El estado no puede estar en blanco",
|
||||||
"Worker cannot be blank": "El trabajador no puede estar en blanco",
|
"Worker cannot be blank": "El trabajador no puede estar en blanco",
|
||||||
"Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado",
|
"Cannot change the payment method if no department": "No se puede cambiar la forma de pago si no hay departamento asignado",
|
||||||
"can't be blank": "El campo no puede estar vacío",
|
"can't be blank": "El campo no puede estar vacío",
|
||||||
"Observation type must be unique": "El tipo de observación no puede repetirse",
|
"Observation type must be unique": "El tipo de observación no puede repetirse",
|
||||||
"The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
|
"The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero",
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"That payment method requires a BIC": "Este método de pagamento requer um BIC",
|
"That payment method requires a BIC": "Este método de pagamento requer um BIC",
|
||||||
"State cannot be blank": "O estado não pode ficar em branco",
|
"State cannot be blank": "O estado não pode ficar em branco",
|
||||||
"Worker cannot be blank": "O trabalhador não pode ficar em branco",
|
"Worker cannot be blank": "O trabalhador não pode ficar em branco",
|
||||||
"Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor",
|
"Cannot change the payment method if no department": "Impossible de changer le mode de paiement s'il n'y a pas de service commercial",
|
||||||
"can't be blank": "Não pode ficar em branco",
|
"can't be blank": "Não pode ficar em branco",
|
||||||
"Observation type must be unique": "O tipo de observação deve ser único",
|
"Observation type must be unique": "O tipo de observação deve ser único",
|
||||||
"The credit must be an integer greater than or equal to zero": "O crédito deve ser um inteiro maior ou igual a zero",
|
"The credit must be an integer greater than or equal to zero": "O crédito deve ser um inteiro maior ou igual a zero",
|
||||||
|
@ -326,7 +326,7 @@
|
||||||
"Fill all the fields": "Remplissez tous les champs",
|
"Fill all the fields": "Remplissez tous les champs",
|
||||||
"The response is not a PDF": "La réponse n'est pas un PDF",
|
"The response is not a PDF": "La réponse n'est pas un PDF",
|
||||||
"Booking completed": "Réservation terminée",
|
"Booking completed": "Réservation terminée",
|
||||||
"The ticket is in preparation": "Le ticket [{{ticketId}}]({{{ticketUrl}}}) du commercial {{salesPersonId}} est en préparation",
|
"The ticket is in preparation": "Le ticket [{{ticketId}}]({{{ticketUrl}}}) du département {{departmentId}} est en préparation",
|
||||||
"The notification subscription of this worker cant be modified": "L'abonnement à la notification de ce travailleur ne peut pas être modifié",
|
"The notification subscription of this worker cant be modified": "L'abonnement à la notification de ce travailleur ne peut pas être modifié",
|
||||||
"User disabled": "Utilisateur désactivé",
|
"User disabled": "Utilisateur désactivé",
|
||||||
"The amount cannot be less than the minimum": "La quantité ne peut pas être inférieure à la quantité minimale",
|
"The amount cannot be less than the minimum": "La quantité ne peut pas être inférieure à la quantité minimale",
|
||||||
|
@ -369,4 +369,4 @@
|
||||||
"The web user's email already exists": "L'email de l'internaute existe déjà",
|
"The web user's email already exists": "L'email de l'internaute existe déjà",
|
||||||
"Incorrect delivery order alert on route": "Alerte de bon de livraison incorrect sur l'itinéraire: {{ route }} zone : {{ zone }}",
|
"Incorrect delivery order alert on route": "Alerte de bon de livraison incorrect sur l'itinéraire: {{ route }} zone : {{ zone }}",
|
||||||
"Ticket has been delivered out of order": "Le ticket {{ticket}} de la route {{{fullUrl}}} a été livré hors service."
|
"Ticket has been delivered out of order": "Le ticket {{ticket}} de la route {{{fullUrl}}} a été livré hors service."
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"That payment method requires a BIC": "Esse método de pagamento requer um BIC",
|
"That payment method requires a BIC": "Esse método de pagamento requer um BIC",
|
||||||
"State cannot be blank": "O estado não pode estar em branco",
|
"State cannot be blank": "O estado não pode estar em branco",
|
||||||
"Worker cannot be blank": "O trabalhador não pode estar em branco",
|
"Worker cannot be blank": "O trabalhador não pode estar em branco",
|
||||||
"Cannot change the payment method if no salesperson": "Não é possível alterar o método de pagamento se não houver vendedor",
|
"Cannot change the payment method if no department": "Não é possível alterar o método de pagamento se não houver departamento de vendas",
|
||||||
"can't be blank": "não pode estar em branco",
|
"can't be blank": "não pode estar em branco",
|
||||||
"Observation type must be unique": "O tipo de observação deve ser único",
|
"Observation type must be unique": "O tipo de observação deve ser único",
|
||||||
"The credit must be an integer greater than or equal to zero": "O crédito deve ser um número inteiro maior ou igual a zero",
|
"The credit must be an integer greater than or equal to zero": "O crédito deve ser um número inteiro maior ou igual a zero",
|
||||||
|
@ -326,7 +326,7 @@
|
||||||
"Fill all the fields": "Preencha todos os campos",
|
"Fill all the fields": "Preencha todos os campos",
|
||||||
"The response is not a PDF": "A resposta não é um PDF",
|
"The response is not a PDF": "A resposta não é um PDF",
|
||||||
"Booking completed": "Reserva concluída",
|
"Booking completed": "Reserva concluída",
|
||||||
"The ticket is in preparation": "O ticket está em preparação [{{ticketId}}]({{{ticketUrl}}}) comercial {{salesPersonId}}",
|
"The ticket is in preparation": "O ticket está em preparação [{{ticketId}}]({{{ticketUrl}}}) do departamento {{departmentId}}",
|
||||||
"The notification subscription of this worker cant be modified": "A inscrição de notificação deste trabalhador não pode ser modificada",
|
"The notification subscription of this worker cant be modified": "A inscrição de notificação deste trabalhador não pode ser modificada",
|
||||||
"User disabled": "Usuário desativado",
|
"User disabled": "Usuário desativado",
|
||||||
"The amount cannot be less than the minimum": "O valor não pode ser menor que o mínimo",
|
"The amount cannot be less than the minimum": "O valor não pode ser menor que o mínimo",
|
||||||
|
@ -368,4 +368,4 @@
|
||||||
"The web user's email already exists": "O e-mail do utilizador da web já existe.",
|
"The web user's email already exists": "O e-mail do utilizador da web já existe.",
|
||||||
"Incorrect delivery order alert on route": "Alerta de ordem de entrega incorreta na rota: {{ route }} zona: {{ zone }}",
|
"Incorrect delivery order alert on route": "Alerta de ordem de entrega incorreta na rota: {{ route }} zona: {{ zone }}",
|
||||||
"Ticket has been delivered out of order": "O ticket {{ticket}} da rota {{{fullUrl}}} foi entregue fora de ordem."
|
"Ticket has been delivered out of order": "O ticket {{ticket}} da rota {{{fullUrl}}} foi entregue fora de ordem."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
const app = require('vn-loopback/server/server');
|
const app = require('vn-loopback/server/server');
|
||||||
|
|
||||||
describe('claimstate isEditable()', () => {
|
describe('claimstate isEditable()', () => {
|
||||||
const salesPersonId = 18;
|
|
||||||
const claimManagerId = 72;
|
const claimManagerId = 72;
|
||||||
it('should return false if the given state does not exist', async() => {
|
it('should return false if the given state does not exist', async() => {
|
||||||
const tx = await app.models.Claim.beginTransaction({});
|
const tx = await app.models.Claim.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const ctx = {req: {accessToken: {userId: claimManagerId}}};
|
const ctx = {req: {accessToken: {userId: claimManagerId}}};
|
||||||
const result = await app.models.ClaimState.isEditable(ctx, 9999, options);
|
const result = await app.models.ClaimState.isEditable(ctx, 9999, options);
|
||||||
|
|
||||||
|
@ -26,7 +24,7 @@ describe('claimstate isEditable()', () => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
const salesPersonId = 18;
|
||||||
const ctx = {req: {accessToken: {userId: salesPersonId}}};
|
const ctx = {req: {accessToken: {userId: salesPersonId}}};
|
||||||
const result = await app.models.ClaimState.isEditable(ctx, 3, options);
|
const result = await app.models.ClaimState.isEditable(ctx, 3, options);
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ module.exports = Self => {
|
||||||
Self.claimPickupEmail = async ctx => {
|
Self.claimPickupEmail = async ctx => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const $t = ctx.req.__; // $translate
|
const $t = ctx.req.__; // $translate
|
||||||
const url = await Self.app.models.Url.getUrl();
|
|
||||||
|
|
||||||
const args = Object.assign({}, ctx.args);
|
const args = Object.assign({}, ctx.args);
|
||||||
const params = {
|
const params = {
|
||||||
|
@ -61,20 +60,27 @@ module.exports = Self => {
|
||||||
include: {
|
include: {
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['name', 'salesPersonFk']
|
fields: ['name', 'departmentFk'],
|
||||||
|
include: {
|
||||||
|
relation: 'department',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'chatName']
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const message = $t('Claim pickup order sent', {
|
const department = claim.client().department();
|
||||||
claimId: args.id,
|
if (department) {
|
||||||
clientName: claim.client().name,
|
const url = await Self.app.models.Url.getUrl();
|
||||||
claimUrl: `${url}claim/${args.id}/summary`,
|
const message = $t('Claim pickup order sent', {
|
||||||
});
|
claimId: args.id,
|
||||||
const salesPersonId = claim.client().salesPersonFk;
|
clientName: claim.client().name,
|
||||||
if (salesPersonId)
|
claimUrl: `${url}claim/${args.id}/summary`,
|
||||||
await models.Chat.sendCheckingPresence(ctx, salesPersonId, message);
|
});
|
||||||
|
await models.Chat.send(ctx, `#${department.chatName}`, message);
|
||||||
|
}
|
||||||
const email = new Email('claim-pickup-order', params);
|
const email = new Email('claim-pickup-order', params);
|
||||||
|
|
||||||
return email.send();
|
return email.send();
|
||||||
|
|
|
@ -47,10 +47,11 @@ module.exports = Self => {
|
||||||
include: {
|
include: {
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
scope: {
|
scope: {
|
||||||
|
fields: ['id', 'departmentFk'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'salesPersonUser',
|
relation: 'department',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'name']
|
fields: ['id', 'chatName']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,8 +92,8 @@ module.exports = Self => {
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|
||||||
const salesPerson = ticket.client().salesPersonUser();
|
const department = ticket.client().department();
|
||||||
if (salesPerson) {
|
if (department) {
|
||||||
const url = await Self.app.models.Url.getUrl();
|
const url = await Self.app.models.Url.getUrl();
|
||||||
|
|
||||||
const message = $t('Created claim', {
|
const message = $t('Created claim', {
|
||||||
|
@ -102,7 +103,7 @@ module.exports = Self => {
|
||||||
claimUrl: `${url}claim/${newClaim.id}/summary`,
|
claimUrl: `${url}claim/${newClaim.id}/summary`,
|
||||||
changes: changesMade
|
changes: changesMade
|
||||||
});
|
});
|
||||||
await models.Chat.sendCheckingPresence(ctx, salesPerson.id, message);
|
await models.Chat.send(ctx, `#${department.chatName}`, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
|
|
|
@ -51,9 +51,9 @@ module.exports = Self => {
|
||||||
http: {source: 'query'}
|
http: {source: 'query'}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'salesPersonFk',
|
arg: 'departmentFk',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
description: 'The salesPerson id',
|
description: 'The department id',
|
||||||
http: {source: 'query'}
|
http: {source: 'query'}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -158,8 +158,8 @@ module.exports = Self => {
|
||||||
return {'cl.id': {inq: claimIdsByItemFk}};
|
return {'cl.id': {inq: claimIdsByItemFk}};
|
||||||
case 'claimResponsibleFk':
|
case 'claimResponsibleFk':
|
||||||
return {'cl.id': {inq: claimIdsByClaimResponsibleFk}};
|
return {'cl.id': {inq: claimIdsByClaimResponsibleFk}};
|
||||||
case 'salesPersonFk':
|
case 'departmentFk':
|
||||||
return {'c.salesPersonFk': value};
|
return {'c.departmentFk': value};
|
||||||
case 'attenderFk':
|
case 'attenderFk':
|
||||||
return {'cl.workerFk': value};
|
return {'cl.workerFk': value};
|
||||||
case 'created':
|
case 'created':
|
||||||
|
|
|
@ -53,9 +53,9 @@ module.exports = Self => {
|
||||||
{
|
{
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['salesPersonFk', 'name'],
|
fields: ['departmentFk', 'name'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'salesPersonUser',
|
relation: 'department',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'name']
|
fields: ['id', 'name']
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,21 +41,21 @@ module.exports = Self => {
|
||||||
relation: 'claimDestination',
|
relation: 'claimDestination',
|
||||||
fields: ['addressFk']
|
fields: ['addressFk']
|
||||||
},
|
},
|
||||||
where: {claimFk: claimFk}
|
where: {claimFk}
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
for (let claimEnd of claimEnds) {
|
for (let claimEnd of claimEnds) {
|
||||||
const destination = claimEnd.claimDestination();
|
const destination = claimEnd.claimDestination();
|
||||||
const sale = await getSale(claimEnd.saleFk, myOptions);
|
const sale = await getSale(claimEnd.saleFk, myOptions);
|
||||||
const addressId = destination && destination.addressFk;
|
const addressId = destination?.addressFk;
|
||||||
|
|
||||||
let address;
|
let address;
|
||||||
if (addressId)
|
if (addressId)
|
||||||
address = await models.Address.findById(addressId, null, myOptions);
|
address = await models.Address.findById(addressId, null, myOptions);
|
||||||
|
|
||||||
const salesPerson = sale.ticket().client().salesPersonUser();
|
const department = sale.ticket().client().department();
|
||||||
if (salesPerson) {
|
if (department) {
|
||||||
const nickname = address && address.nickname || destination.description;
|
const nickname = address?.nickname || destination.description;
|
||||||
const url = await Self.app.models.Url.getUrl();
|
const url = await Self.app.models.Url.getUrl();
|
||||||
const message = $t('Sent units from ticket', {
|
const message = $t('Sent units from ticket', {
|
||||||
quantity: sale.quantity,
|
quantity: sale.quantity,
|
||||||
|
@ -66,7 +66,7 @@ module.exports = Self => {
|
||||||
ticketUrl: `${url}ticket/${sale.ticketFk}/sale`,
|
ticketUrl: `${url}ticket/${sale.ticketFk}/sale`,
|
||||||
itemUrl: `${url}item/${sale.itemFk}/summary`
|
itemUrl: `${url}item/${sale.itemFk}/summary`
|
||||||
});
|
});
|
||||||
await models.Chat.sendCheckingPresence(ctx, salesPerson.id, message);
|
await models.Chat.send(ctx, `#${department.chatName}`, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!address) continue;
|
if (!address) continue;
|
||||||
|
@ -120,10 +120,11 @@ module.exports = Self => {
|
||||||
include: {
|
include: {
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
scope: {
|
scope: {
|
||||||
|
fields: ['departmentFk'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'salesPersonUser',
|
relation: 'department',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'name']
|
fields: ['id', 'chatName']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ describe('claim regularizeClaim()', () => {
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ describe('claim regularizeClaim()', () => {
|
||||||
expect(trashTicket.addressFk).toEqual(trashAddress);
|
expect(trashTicket.addressFk).toEqual(trashAddress);
|
||||||
expect(claimBefore.claimStateFk).toEqual(pendentState);
|
expect(claimBefore.claimStateFk).toEqual(pendentState);
|
||||||
expect(claimAfter.claimStateFk).toEqual(resolvedState);
|
expect(claimAfter.claimStateFk).toEqual(resolvedState);
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledWith(ctx, 18, 'Trash');
|
expect(chatModel.send).toHaveBeenCalledWith(ctx, '#es_vip_equipo', 'Trash');
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledTimes(4);
|
expect(chatModel.send).toHaveBeenCalledTimes(4);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -71,17 +71,17 @@ describe('claim regularizeClaim()', () => {
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
||||||
|
|
||||||
for (claimEnd of claimEnds)
|
for (let claimEnd of claimEnds)
|
||||||
await claimEnd.updateAttributes({claimDestinationFk: okDestination}, options);
|
await claimEnd.updateAttributes({claimDestinationFk: okDestination}, options);
|
||||||
|
|
||||||
await models.Claim.regularizeClaim(ctx, claimId, options);
|
await models.Claim.regularizeClaim(ctx, claimId, options);
|
||||||
|
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledWith(ctx, 18, 'Bueno');
|
expect(chatModel.send).toHaveBeenCalledWith(ctx, '#es_vip_equipo', 'Bueno');
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledTimes(4);
|
expect(chatModel.send).toHaveBeenCalledTimes(4);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -90,23 +90,23 @@ describe('claim regularizeClaim()', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send a chat message to the salesPerson when claim isPickUp is enabled', async() => {
|
it('should send a chat message to the department when claim isPickUp is enabled', async() => {
|
||||||
const tx = await models.Claim.beginTransaction({});
|
const tx = await models.Claim.beginTransaction({});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
claimEnds = await importTicket(ticketId, claimId, userId, options);
|
||||||
|
|
||||||
for (claimEnd of claimEnds)
|
for (let claimEnd of claimEnds)
|
||||||
await claimEnd.updateAttributes({claimDestinationFk: okDestination}, options);
|
await claimEnd.updateAttributes({claimDestinationFk: okDestination}, options);
|
||||||
|
|
||||||
await models.Claim.regularizeClaim(ctx, claimId, options);
|
await models.Claim.regularizeClaim(ctx, claimId, options);
|
||||||
|
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledWith(ctx, 18, 'Bueno');
|
expect(chatModel.send).toHaveBeenCalledWith(ctx, '#es_vip_equipo', 'Bueno');
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledTimes(4);
|
expect(chatModel.send).toHaveBeenCalledTimes(4);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -31,11 +31,11 @@ describe('Update Claim', () => {
|
||||||
const newClaim = await app.models.Claim.create(originalData, options);
|
const newClaim = await app.models.Claim.create(originalData, options);
|
||||||
|
|
||||||
const forbiddenState = 3;
|
const forbiddenState = 3;
|
||||||
const salesPersonId = 18;
|
const userId = 18;
|
||||||
const ctx = {
|
const ctx = {
|
||||||
req: {
|
req: {
|
||||||
accessToken: {
|
accessToken: {
|
||||||
userId: salesPersonId
|
userId
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
args: {
|
args: {
|
||||||
|
@ -63,7 +63,7 @@ describe('Update Claim', () => {
|
||||||
const newClaim = await app.models.Claim.create(originalData, options);
|
const newClaim = await app.models.Claim.create(originalData, options);
|
||||||
|
|
||||||
const chatModel = app.models.Chat;
|
const chatModel = app.models.Chat;
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
const pendingState = claimStatesMap.pending;
|
const pendingState = claimStatesMap.pending;
|
||||||
const ctx = {
|
const ctx = {
|
||||||
|
@ -83,7 +83,7 @@ describe('Update Claim', () => {
|
||||||
let updatedClaim = await app.models.Claim.findById(newClaim.id, null, options);
|
let updatedClaim = await app.models.Claim.findById(newClaim.id, null, options);
|
||||||
|
|
||||||
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalled();
|
expect(chatModel.send).toHaveBeenCalled();
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -101,7 +101,7 @@ describe('Update Claim', () => {
|
||||||
const newClaim = await app.models.Claim.create(originalData, options);
|
const newClaim = await app.models.Claim.create(originalData, options);
|
||||||
|
|
||||||
const chatModel = app.models.Chat;
|
const chatModel = app.models.Chat;
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
const canceledState = claimStatesMap.canceled;
|
const canceledState = claimStatesMap.canceled;
|
||||||
const ctx = {
|
const ctx = {
|
||||||
|
@ -121,7 +121,7 @@ describe('Update Claim', () => {
|
||||||
let updatedClaim = await app.models.Claim.findById(newClaim.id, null, options);
|
let updatedClaim = await app.models.Claim.findById(newClaim.id, null, options);
|
||||||
|
|
||||||
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalledTimes(2);
|
expect(chatModel.send).toHaveBeenCalledTimes(2);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -139,7 +139,7 @@ describe('Update Claim', () => {
|
||||||
const newClaim = await app.models.Claim.create(originalData, options);
|
const newClaim = await app.models.Claim.create(originalData, options);
|
||||||
|
|
||||||
const chatModel = app.models.Chat;
|
const chatModel = app.models.Chat;
|
||||||
spyOn(chatModel, 'sendCheckingPresence').and.callThrough();
|
spyOn(chatModel, 'send').and.callThrough();
|
||||||
|
|
||||||
const claimManagerId = 72;
|
const claimManagerId = 72;
|
||||||
const ctx = {
|
const ctx = {
|
||||||
|
@ -162,7 +162,7 @@ describe('Update Claim', () => {
|
||||||
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
expect(updatedClaim.observation).toEqual(ctx.args.observation);
|
||||||
expect(updatedClaim.claimStateFk).toEqual(ctx.args.claimStateFk);
|
expect(updatedClaim.claimStateFk).toEqual(ctx.args.claimStateFk);
|
||||||
expect(updatedClaim.workerFk).toEqual(ctx.args.workerFk);
|
expect(updatedClaim.workerFk).toEqual(ctx.args.workerFk);
|
||||||
expect(chatModel.sendCheckingPresence).toHaveBeenCalled();
|
expect(chatModel.send).toHaveBeenCalled();
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -63,13 +63,19 @@ module.exports = Self => {
|
||||||
include: {
|
include: {
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
scope: {
|
scope: {
|
||||||
|
fields: ['departmentFk'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'salesPersonUser'
|
relation: 'department',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'chatName']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
|
const department = claim.client().department();
|
||||||
|
|
||||||
const changedPickup = args.pickup && args.pickup != claim.pickup;
|
const changedPickup = args.pickup && args.pickup != claim.pickup;
|
||||||
|
|
||||||
if (args.claimStateFk) {
|
if (args.claimStateFk) {
|
||||||
|
@ -84,12 +90,16 @@ module.exports = Self => {
|
||||||
delete args.ctx;
|
delete args.ctx;
|
||||||
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
const updatedClaim = await claim.updateAttributes(args, myOptions);
|
||||||
|
|
||||||
const salesPerson = claim.client().salesPersonUser();
|
if (department) {
|
||||||
if (salesPerson && args.claimStateFk) {
|
if (changedPickup && updatedClaim.pickup)
|
||||||
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
await notifyPickUp(ctx, department, claim);
|
||||||
await notifyStateChange(ctx, salesPerson.id, claim, newState.description);
|
|
||||||
if (newState.code == 'canceled')
|
if (args.claimStateFk) {
|
||||||
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
const newState = await models.ClaimState.findById(args.claimStateFk, null, myOptions);
|
||||||
|
await notifyStateChange(ctx, department, claim, newState.description);
|
||||||
|
if (newState.code == 'canceled')
|
||||||
|
await notifyStateChange(ctx, claim.workerFk, claim, newState.description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
|
@ -101,7 +111,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
async function notifyStateChange(ctx, workerId, claim, newState) {
|
async function notifyStateChange(ctx, department, claim, newState) {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const url = await models.Url.getUrl();
|
const url = await models.Url.getUrl();
|
||||||
const $t = ctx.req.__;
|
const $t = ctx.req.__;
|
||||||
|
@ -112,6 +122,20 @@ module.exports = Self => {
|
||||||
claimUrl: `${url}claim/${claim.id}/summary`,
|
claimUrl: `${url}claim/${claim.id}/summary`,
|
||||||
newState
|
newState
|
||||||
});
|
});
|
||||||
await models.Chat.sendCheckingPresence(ctx, workerId, message);
|
await models.Chat.send(ctx, `#${department.chatName}`, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function notifyPickUp(ctx, department, 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.send(ctx, `#${department.chatName}`, message);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,9 +37,9 @@
|
||||||
<vn-label-value
|
<vn-label-value
|
||||||
label="Salesperson">
|
label="Salesperson">
|
||||||
<span
|
<span
|
||||||
ng-click="workerDescriptor.show($event, $ctrl.claim.client.salesPersonFk)"
|
ng-click="workerDescriptor.show($event, $ctrl.claim.client.departmentFk)"
|
||||||
class="link">
|
class="link">
|
||||||
{{$ctrl.claim.client.salesPersonUser.name}}
|
{{$ctrl.claim.client.department.name}}
|
||||||
</span>
|
</span>
|
||||||
</vn-label-value>
|
</vn-label-value>
|
||||||
<vn-label-value
|
<vn-label-value
|
||||||
|
|
|
@ -35,7 +35,7 @@ columns:
|
||||||
sageTaxTypeFk: sage tax type
|
sageTaxTypeFk: sage tax type
|
||||||
sageTransactionTypeFk: sage transaction type
|
sageTransactionTypeFk: sage transaction type
|
||||||
businessTypeFk: business type
|
businessTypeFk: business type
|
||||||
salesPersonFk: sales person
|
departmentFk: sales department
|
||||||
hasElectronicInvoice: electronic invoice
|
hasElectronicInvoice: electronic invoice
|
||||||
payMethodFk: pay method
|
payMethodFk: pay method
|
||||||
provinceFk: province
|
provinceFk: province
|
||||||
|
@ -50,6 +50,6 @@ columns:
|
||||||
isCreatedAsServed: created as served
|
isCreatedAsServed: created as served
|
||||||
hasInvoiceSimplified: simplified invoice
|
hasInvoiceSimplified: simplified invoice
|
||||||
typeFk: type
|
typeFk: type
|
||||||
lastSalesPersonFk: last salesperson
|
lastdepartmentFk: last sales department
|
||||||
rating: rating
|
rating: rating
|
||||||
recommendedCredit: recommended credit
|
recommendedCredit: recommended credit
|
||||||
|
|
|
@ -35,7 +35,7 @@ columns:
|
||||||
sageTaxTypeFk: tipo impuesto sage
|
sageTaxTypeFk: tipo impuesto sage
|
||||||
sageTransactionTypeFk: tipo transacción Sage
|
sageTransactionTypeFk: tipo transacción Sage
|
||||||
businessTypeFk: tipo negocio
|
businessTypeFk: tipo negocio
|
||||||
salesPersonFk: comercial
|
departmentFk: departamento comercial
|
||||||
hasElectronicInvoice: factura electrónica
|
hasElectronicInvoice: factura electrónica
|
||||||
payMethodFk: método pago
|
payMethodFk: método pago
|
||||||
provinceFk: provincia
|
provinceFk: provincia
|
||||||
|
@ -50,6 +50,6 @@ columns:
|
||||||
isCreatedAsServed: creado como servido
|
isCreatedAsServed: creado como servido
|
||||||
hasInvoiceSimplified: factura simple
|
hasInvoiceSimplified: factura simple
|
||||||
typeFk: tipo
|
typeFk: tipo
|
||||||
lastSalesPersonFk: último comercial
|
lastdepartmentFk: último departmaneto comercial
|
||||||
rating: clasificación
|
rating: clasificación
|
||||||
recommendedCredit: crédito recomendado
|
recommendedCredit: crédito recomendado
|
||||||
|
|
|
@ -29,26 +29,26 @@ module.exports = Self => {
|
||||||
|
|
||||||
const clients = await Self.rawSql(`
|
const clients = await Self.rawSql(`
|
||||||
SELECT
|
SELECT
|
||||||
c.id AS clientFk,
|
c.id clientFk,
|
||||||
c.email AS clientEmail,
|
c.email clientEmail,
|
||||||
eu.email salesPersonEmail
|
d.notificationEmail departmentEmail
|
||||||
FROM client c
|
FROM client c
|
||||||
JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
|
JOIN department d ON d.id = c.departmentFk
|
||||||
JOIN ticket t ON t.clientFk = c.id
|
JOIN ticket t ON t.clientFk = c.id
|
||||||
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 itemType it ON it.id = i.typeFk
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
WHERE c.id IN(?)
|
WHERE c.id IN(?)
|
||||||
AND it.isPackaging = FALSE
|
AND NOT it.isPackaging
|
||||||
AND DATE(t.shipped) BETWEEN ? AND ?
|
AND DATE(t.shipped) BETWEEN ? AND ?
|
||||||
GROUP BY c.id`, [params.clients, params.from, params.to]);
|
GROUP BY c.id`, [params.clients, params.from, params.to]);
|
||||||
|
|
||||||
for (const client of clients) {
|
for (const client of clients) {
|
||||||
try {
|
try {
|
||||||
const args = {
|
const args = {
|
||||||
id: client.clientFk,
|
id: client.clientFk,
|
||||||
recipient: client.clientEmail,
|
recipient: client.clientEmail,
|
||||||
replyTo: client.salesPersonEmail,
|
replyTo: client.departmentEmail,
|
||||||
from: params.from,
|
from: params.from,
|
||||||
to: params.to
|
to: params.to
|
||||||
};
|
};
|
||||||
|
|
|
@ -68,7 +68,7 @@ module.exports = function(Self) {
|
||||||
fi: data.fi,
|
fi: data.fi,
|
||||||
socialName: data.socialName,
|
socialName: data.socialName,
|
||||||
email: data.email,
|
email: data.email,
|
||||||
salesPersonFk: data.salesPersonFk,
|
departmentFk: data.departmentFk,
|
||||||
postcode: data.postcode,
|
postcode: data.postcode,
|
||||||
street: data.street,
|
street: data.street,
|
||||||
city: data.city,
|
city: data.city,
|
||||||
|
|
|
@ -23,7 +23,7 @@ module.exports = Self => {
|
||||||
description: 'The client name',
|
description: 'The client name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'salesPersonFk',
|
arg: 'departmentFk',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ module.exports = Self => {
|
||||||
case 'sageTransactionTypeFk':
|
case 'sageTransactionTypeFk':
|
||||||
return {'stt.CodigoTransaccion': value};
|
return {'stt.CodigoTransaccion': value};
|
||||||
case 'name':
|
case 'name':
|
||||||
case 'salesPersonFk':
|
case 'departmentFk':
|
||||||
case 'fi':
|
case 'fi':
|
||||||
case 'socialName':
|
case 'socialName':
|
||||||
case 'city':
|
case 'city':
|
||||||
|
@ -138,8 +138,8 @@ module.exports = Self => {
|
||||||
ct.name country,
|
ct.name country,
|
||||||
p.id AS provinceFk,
|
p.id AS provinceFk,
|
||||||
p.name AS province,
|
p.name AS province,
|
||||||
u.id AS salesPersonFk,
|
d.id departmentFk,
|
||||||
u.name AS salesPerson,
|
d.name salesDeparment,
|
||||||
bt.code AS businessTypeFk,
|
bt.code AS businessTypeFk,
|
||||||
bt.description AS businessType,
|
bt.description AS businessType,
|
||||||
pm.id AS payMethodFk,
|
pm.id AS payMethodFk,
|
||||||
|
@ -149,7 +149,7 @@ module.exports = Self => {
|
||||||
stt.CodigoTransaccion AS sageTransactionTypeFk,
|
stt.CodigoTransaccion AS sageTransactionTypeFk,
|
||||||
stt.Transaccion AS sageTransactionType
|
stt.Transaccion AS sageTransactionType
|
||||||
FROM client c
|
FROM client c
|
||||||
LEFT JOIN account.user u ON u.id = c.salesPersonFk
|
LEFT JOIN department d ON d.id = c.departmentFk
|
||||||
LEFT JOIN country ct ON ct.id = c.countryFk
|
LEFT JOIN country ct ON ct.id = c.countryFk
|
||||||
LEFT JOIN province p ON p.id = c.provinceFk
|
LEFT JOIN province p ON p.id = c.provinceFk
|
||||||
LEFT JOIN businessType bt ON bt.code = c.businessTypeFk
|
LEFT JOIN businessType bt ON bt.code = c.businessTypeFk
|
||||||
|
|
|
@ -22,7 +22,7 @@ module.exports = Self => {
|
||||||
description: 'The client name',
|
description: 'The client name',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'salesPersonFk',
|
arg: 'salesDeparmentFk',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -126,7 +126,7 @@ module.exports = Self => {
|
||||||
{'a.provinceFk': value}
|
{'a.provinceFk': value}
|
||||||
]};
|
]};
|
||||||
case 'name':
|
case 'name':
|
||||||
case 'salesPersonFk':
|
case 'departmentFk':
|
||||||
case 'fi':
|
case 'fi':
|
||||||
case 'socialName':
|
case 'socialName':
|
||||||
case 'email':
|
case 'email':
|
||||||
|
@ -146,7 +146,6 @@ module.exports = Self => {
|
||||||
c.socialName,
|
c.socialName,
|
||||||
c.phone,
|
c.phone,
|
||||||
a.phone,
|
a.phone,
|
||||||
c.mobile,
|
|
||||||
c.city,
|
c.city,
|
||||||
a.city,
|
a.city,
|
||||||
c.postcode,
|
c.postcode,
|
||||||
|
@ -154,14 +153,14 @@ module.exports = Self => {
|
||||||
c.email,
|
c.email,
|
||||||
c.isActive,
|
c.isActive,
|
||||||
c.isFreezed,
|
c.isFreezed,
|
||||||
p.id AS provinceClientFk,
|
p.id provinceClientFk,
|
||||||
a.provinceFk AS provinceAddressFk,
|
a.provinceFk provinceAddressFk,
|
||||||
p.name AS province,
|
p.name province,
|
||||||
u.id AS salesPersonFk,
|
d.id departmentFk,
|
||||||
u.name AS salesPerson,
|
d.name departmentName,
|
||||||
co.name AS country
|
co.name AS country
|
||||||
FROM client c
|
FROM client c
|
||||||
LEFT JOIN account.user u ON u.id = c.salesPersonFk
|
LEFT JOIN department d ON d.id = c.departmentFk
|
||||||
LEFT JOIN province p ON p.id = c.provinceFk
|
LEFT JOIN province p ON p.id = c.provinceFk
|
||||||
LEFT JOIN country co ON co.id = c.countryFk
|
LEFT JOIN country co ON co.id = c.countryFk
|
||||||
JOIN address a ON a.clientFk = c.id
|
JOIN address a ON a.clientFk = c.id
|
||||||
|
|
|
@ -42,7 +42,7 @@ module.exports = function(Self) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
relation: 'salesPersonUser',
|
relation: 'department',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'name']
|
fields: ['id', 'name']
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,8 @@ describe('Client Create', () => {
|
||||||
street: 'WALL STREET',
|
street: 'WALL STREET',
|
||||||
city: 'New York',
|
city: 'New York',
|
||||||
businessTypeFk: 'florist',
|
businessTypeFk: 'florist',
|
||||||
provinceFk: 1
|
provinceFk: 1,
|
||||||
|
departmentFk: 155
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -86,14 +86,14 @@ describe('client extendedListFilter()', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the clients matching the "salesPersonFk" argument', async() => {
|
it('should return the clients matching the "salesDepartmementFk" argument', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
const salesPersonId = 18;
|
const salesDepartmementId = 155;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const ctx = {req: {accessToken: {userId: 1}}, args: {salesPersonFk: salesPersonId}};
|
const ctx = {req: {accessToken: {userId: 1}}, args: {departmentFk: salesDepartmementId}};
|
||||||
const filter = {};
|
const filter = {};
|
||||||
const result = await models.Client.extendedListFilter(ctx, filter, options);
|
const result = await models.Client.extendedListFilter(ctx, filter, options);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ describe('client extendedListFilter()', () => {
|
||||||
const randomResultClient = result[randomIndex];
|
const randomResultClient = result[randomIndex];
|
||||||
|
|
||||||
expect(result.length).toBeGreaterThanOrEqual(5);
|
expect(result.length).toBeGreaterThanOrEqual(5);
|
||||||
expect(randomResultClient.salesPersonFk).toEqual(salesPersonId);
|
expect(randomResultClient.departmentFk).toEqual(salesDepartmementId);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -86,14 +86,14 @@ describe('client filter()', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the clients matching the "salesPersonFk" argument', async() => {
|
it('should return the clients matching the "departmentFk" argument', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const tx = await models.Client.beginTransaction({});
|
||||||
const salesPersonId = 18;
|
const departmentId = 155;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const ctx = {req: {accessToken: {userId: 1}}, args: {salesPersonFk: salesPersonId}};
|
const ctx = {req: {accessToken: {userId: 1}}, args: {departmentFk: departmentId}};
|
||||||
const filter = {};
|
const filter = {};
|
||||||
const result = await models.Client.filter(ctx, filter, options);
|
const result = await models.Client.filter(ctx, filter, options);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ describe('client filter()', () => {
|
||||||
const randomResultClient = result[randomIndex];
|
const randomResultClient = result[randomIndex];
|
||||||
|
|
||||||
expect(result.length).toBeGreaterThanOrEqual(5);
|
expect(result.length).toBeGreaterThanOrEqual(5);
|
||||||
expect(randomResultClient.salesPersonFk).toEqual(salesPersonId);
|
expect(randomResultClient.departmentFk).toEqual(departmentId);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
relation: 'salesPersonUser',
|
relation: 'department',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'name']
|
fields: ['id', 'name']
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,7 @@ module.exports = Self => {
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const where = buildFilter(ctx.args, (param, value) => {
|
const where = buildFilter(ctx.args, (param, value) => {
|
||||||
switch (param) {
|
if (param === 'search') {
|
||||||
case 'search':
|
|
||||||
return {or: [
|
return {or: [
|
||||||
{'c.id': value},
|
{'c.id': value},
|
||||||
{'c.name': {like: `%${value}%`}}
|
{'c.name': {like: `%${value}%`}}
|
||||||
|
@ -57,16 +56,17 @@ module.exports = Self => {
|
||||||
|
|
||||||
let stmt = new ParameterizedSQL(
|
let stmt = new ParameterizedSQL(
|
||||||
`CREATE OR REPLACE TEMPORARY TABLE tmp.defaulters
|
`CREATE OR REPLACE TEMPORARY TABLE tmp.defaulters
|
||||||
WITH clientObservations AS
|
WITH wClientObservations AS
|
||||||
(SELECT clientFk,text, created, workerFk
|
(SELECT clientFk,text, created, workerFk
|
||||||
FROM vn.clientObservation
|
FROM vn.clientObservation
|
||||||
GROUP BY clientFk
|
GROUP BY clientFk
|
||||||
ORDER BY created DESC
|
ORDER BY created DESC
|
||||||
)SELECT c.id clientFk,
|
)SELECT c.id clientFk,
|
||||||
c.name clientName,
|
c.name clientName,
|
||||||
c.salesPersonFk,
|
|
||||||
c.businessTypeFk = 'worker' isWorker,
|
c.businessTypeFk = 'worker' isWorker,
|
||||||
u.name salesPersonName,
|
c.departmentFk,
|
||||||
|
c.businessTypeFk,
|
||||||
|
de.name departmentName,
|
||||||
d.amount,
|
d.amount,
|
||||||
co.created,
|
co.created,
|
||||||
co.text observation,
|
co.text observation,
|
||||||
|
@ -78,15 +78,13 @@ module.exports = Self => {
|
||||||
c.countryFk,
|
c.countryFk,
|
||||||
pm.name payMethod,
|
pm.name payMethod,
|
||||||
r.finished IS NULL hasRecovery,
|
r.finished IS NULL hasRecovery,
|
||||||
dp.id departmentFk,
|
de.notificationEmail departmentEmail
|
||||||
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
|
||||||
JOIN payMethod pm ON pm.id = c.payMethodFk
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
||||||
LEFT JOIN clientObservations co ON co.clientFk = c.id
|
LEFT JOIN wClientObservations co ON co.clientFk = c.id
|
||||||
LEFT JOIN account.user u ON u.id = c.salesPersonFk
|
LEFT JOIN department de ON de.id = c.departmentFk
|
||||||
LEFT JOIN account.user uw ON uw.id = co.workerFk
|
LEFT JOIN account.user uw ON uw.id = co.workerFk
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT r1.started, r1.clientFk, r1.finished
|
SELECT r1.started, r1.clientFk, r1.finished
|
||||||
|
@ -99,9 +97,7 @@ module.exports = Self => {
|
||||||
AND r1.started = r2.maxStarted
|
AND r1.started = r2.maxStarted
|
||||||
WHERE r1.finished
|
WHERE r1.finished
|
||||||
GROUP BY r1.clientFk
|
GROUP BY r1.clientFk
|
||||||
) r ON r.clientFk = c.id
|
) r ON r.clientFk = c.id`);
|
||||||
LEFT JOIN workerDepartment wd ON wd.workerFk = u.id
|
|
||||||
LEFT JOIN department dp ON dp.id = wd.departmentFk`);
|
|
||||||
|
|
||||||
stmt.merge(conn.makeWhere(filter.where));
|
stmt.merge(conn.makeWhere(filter.where));
|
||||||
stmts.push(stmt);
|
stmts.push(stmt);
|
||||||
|
|
|
@ -126,12 +126,12 @@ module.exports = Self => {
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Self.validate('payMethod', hasSalesMan, {
|
Self.validate('payMethod', hasDepartment, {
|
||||||
message: 'Cannot change the payment method if no salesperson'
|
message: 'Cannot change the payment method if no department'
|
||||||
});
|
});
|
||||||
|
|
||||||
function hasSalesMan(err) {
|
function hasDepartment(err) {
|
||||||
if (this.payMethod && !this.salesPersonUser)
|
if (this.payMethod && !this.department)
|
||||||
err();
|
err();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,9 +283,8 @@ module.exports = Self => {
|
||||||
const finalState = getFinalState(ctx);
|
const finalState = getFinalState(ctx);
|
||||||
const payMethodWithIban = 4;
|
const payMethodWithIban = 4;
|
||||||
|
|
||||||
// Validate socialName format
|
|
||||||
const hasChanges = orgData && changes;
|
const hasChanges = orgData && changes;
|
||||||
const socialName = changes && changes.socialName || orgData && orgData.socialName;
|
const socialName = changes?.socialName || orgData?.socialName;
|
||||||
const isTaxDataChecked = hasChanges && (changes.isTaxDataChecked || orgData.isTaxDataChecked);
|
const isTaxDataChecked = hasChanges && (changes.isTaxDataChecked || orgData.isTaxDataChecked);
|
||||||
|
|
||||||
const socialNameChanged = hasChanges
|
const socialNameChanged = hasChanges
|
||||||
|
@ -296,7 +295,7 @@ module.exports = Self => {
|
||||||
if ((socialNameChanged || isTaxDataCheckedChanged) && !isAlpha(socialName))
|
if ((socialNameChanged || isTaxDataCheckedChanged) && !isAlpha(socialName))
|
||||||
throw new UserError(`The social name has an invalid format`);
|
throw new UserError(`The social name has an invalid format`);
|
||||||
|
|
||||||
if (changes.salesPerson === null) {
|
if (changes.department === null) {
|
||||||
changes.credit = 0;
|
changes.credit = 0;
|
||||||
changes.discount = 0;
|
changes.discount = 0;
|
||||||
changes.payMethodFk = 5; // Credit card
|
changes.payMethodFk = 5; // Credit card
|
||||||
|
@ -358,18 +357,17 @@ module.exports = Self => {
|
||||||
const $t = httpRequest.__;
|
const $t = httpRequest.__;
|
||||||
const url = await Self.app.models.Url.getUrl();
|
const url = await Self.app.models.Url.getUrl();
|
||||||
|
|
||||||
const salesPersonId = instance.salesPersonFk;
|
const departmentId = instance.departmentFk;
|
||||||
|
|
||||||
if (salesPersonId) {
|
if (departmentId) {
|
||||||
// Send email to client
|
const department = await models.Department.findById(departmentId);
|
||||||
if (instance.email) {
|
if (instance.email) {
|
||||||
const {Email} = require('vn-print');
|
const {Email} = require('vn-print');
|
||||||
const worker = await models.EmailUser.findById(salesPersonId);
|
|
||||||
const params = {
|
const params = {
|
||||||
id: instance.id,
|
id: instance.id,
|
||||||
recipientId: instance.id,
|
recipientId: instance.id,
|
||||||
recipient: instance.email,
|
recipient: instance.email,
|
||||||
replyTo: worker.email
|
replyTo: department.notificationEmail
|
||||||
};
|
};
|
||||||
const email = new Email('payment-update', params);
|
const email = new Email('payment-update', params);
|
||||||
await email.send();
|
await email.send();
|
||||||
|
@ -381,19 +379,15 @@ module.exports = Self => {
|
||||||
clientName: instance.name,
|
clientName: instance.name,
|
||||||
url: fullUrl
|
url: fullUrl
|
||||||
});
|
});
|
||||||
await models.Chat.sendCheckingPresence(httpCtx, salesPersonId, message);
|
await models.Chat.send(httpCtx, `#${department.chatName}`, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const workerIdBefore = oldInstance.salesPersonFk;
|
if (oldInstance.departmentFk != newInstance.departmentFk)
|
||||||
const workerIdAfter = newInstance.salesPersonFk;
|
await Self.notifyAssignment(instance, oldInstance.departmentFk, newInstance.departmentFk);
|
||||||
const assignmentChanged = workerIdBefore != workerIdAfter;
|
|
||||||
if (assignmentChanged)
|
|
||||||
await Self.notifyAssignment(instance, workerIdBefore, workerIdAfter);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Send notification on client worker assignment
|
Self.notifyAssignment = async function notifyAssignment(client, previousDepartmentId, currentDepartmentId) {
|
||||||
Self.notifyAssignment = async function notifyAssignment(client, previousWorkerId, currentWorkerId) {
|
|
||||||
const loopBackContext = LoopBackContext.getCurrentContext();
|
const loopBackContext = LoopBackContext.getCurrentContext();
|
||||||
const httpCtx = {req: loopBackContext.active};
|
const httpCtx = {req: loopBackContext.active};
|
||||||
const httpRequest = httpCtx.req.http.req;
|
const httpRequest = httpCtx.req.http.req;
|
||||||
|
@ -401,38 +395,38 @@ module.exports = Self => {
|
||||||
const url = await Self.app.models.Url.getUrl();
|
const url = await Self.app.models.Url.getUrl();
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
|
|
||||||
let previousWorker = {name: $t('None')};
|
let previousDepartment = {name: $t('None'), chatName: $t('None')};
|
||||||
let currentWorker = {name: $t('None')};
|
let currentDepartment = {name: $t('None'), chatName: $t('None')};
|
||||||
if (previousWorkerId) {
|
if (previousDepartmentId) {
|
||||||
const worker = await models.Worker.findById(previousWorkerId, {
|
previousDepartment = await models.Department.findOne({
|
||||||
include: {relation: 'user'}
|
field: ['name', 'chatName'],
|
||||||
|
where: {
|
||||||
|
id: previousDepartmentId
|
||||||
|
}
|
||||||
});
|
});
|
||||||
previousWorker.user = worker && worker.user().name;
|
|
||||||
previousWorker.name = worker && worker.user().nickname;
|
|
||||||
}
|
}
|
||||||
|
if (currentDepartmentId) {
|
||||||
if (currentWorkerId) {
|
currentDepartment = await models.Department.findOne({
|
||||||
const worker = await models.Worker.findById(currentWorkerId, {
|
field: ['name', 'chatName'],
|
||||||
include: {relation: 'user'}
|
where: {
|
||||||
|
id: currentDepartmentId
|
||||||
|
}
|
||||||
});
|
});
|
||||||
currentWorker.user = worker && worker.user().name;
|
|
||||||
currentWorker.name = worker && worker.user().nickname;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const fullUrl = `${url}client/${client.id}/basic-data`;
|
const fullUrl = `${url}client/${client.id}/basic-data`;
|
||||||
const message = $t('Client assignment has changed', {
|
const message = $t('Client assignment has changed', {
|
||||||
clientId: client.id,
|
clientId: client.id,
|
||||||
clientName: client.name,
|
clientName: client.name,
|
||||||
url: fullUrl,
|
url: fullUrl,
|
||||||
previousWorkerName: previousWorker.name,
|
previousDepartmentName: previousDepartment.name,
|
||||||
currentWorkerName: currentWorker.name
|
currentDepartmentName: currentDepartment.name
|
||||||
});
|
});
|
||||||
|
|
||||||
if (previousWorkerId)
|
if (previousDepartmentId)
|
||||||
await models.Chat.send(httpCtx, `@${previousWorker.user}`, message);
|
await models.Chat.send(httpCtx, `#${previousDepartment.chatName}`, message);
|
||||||
|
|
||||||
if (currentWorkerId)
|
if (currentDepartmentId)
|
||||||
await models.Chat.send(httpCtx, `@${currentWorker.user}`, message);
|
await models.Chat.send(httpCtx, `#${currentDepartment.chatName}`, message);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Credit change validations
|
// Credit change validations
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Aço no te que vore en la tasca no? Vuic dir, es un feature