Compare commits

..

16 Commits

Author SHA1 Message Date
Javier Segarra 4383ebd7f1 refs #5858 feat: email notification
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-24 12:30:44 +01:00
Javier Segarra 5d156e81ca refs #5858 perf: move files to current version folder 2023-11-23 15:18:09 +01:00
Javier Segarra a2329e1276 refs #5858 feat: update template notification 2023-11-23 15:17:40 +01:00
Javier Segarra 57b8b69ae9 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 5858-zone_Collisions 2023-11-23 07:49:42 +01:00
Guillermo Bonet 31c1add02b Merge pull request 'refactor: refs #4502 Deleted zoneEstimatedDelivery' (!1844) from 4502-zoneEstimatedDelivery into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #1844
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
2023-11-22 12:52:36 +00:00
Guillermo Bonet d52c82fb19 Merge branch 'dev' into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head This commit looks good Details
2023-11-22 11:36:07 +00:00
Guillermo Bonet b3d1c72adc Merge branch 'dev' into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head This commit looks good Details
2023-11-21 09:13:41 +00:00
Guillermo Bonet 5fdf18825c Merge branch 'dev' into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-20 13:14:51 +00:00
Guillermo Bonet b2b12adb3d Merge branch '4502-zoneEstimatedDelivery' of https://gitea.verdnatura.es/verdnatura/salix into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-20 09:47:58 +01:00
Guillermo Bonet 61b2d4c5fd refactor: refs #4502 zoneEstimatedDelivery 2023-11-20 09:47:57 +01:00
Guillermo Bonet badb4d69a2 Merge branch 'dev' into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-20 06:15:40 +00:00
Guillermo Bonet 8da36569f7 refactor: refs #4502 zoneEstimatedDelivery
gitea/salix/pipeline/head Build queued... Details
2023-11-17 07:44:43 +01:00
Guillermo Bonet 500eb22dc6 Merge branch 'dev' into 4502-zoneEstimatedDelivery
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-17 06:43:58 +00:00
Guillermo Bonet 3d1c69be56 refactor: refs #4502 zoneEstimatedDelivery
gitea/salix/pipeline/head There was a failure building this commit Details
2023-11-17 07:43:32 +01:00
Guillermo Bonet 2f611391b9 Revert "refactor: refs #4502 Deleted zoneEstimatedDelivery"
gitea/salix/pipeline/head This commit looks good Details
This reverts commit bfd6e1f398.
2023-11-17 07:17:29 +01:00
Guillermo Bonet bfd6e1f398 refactor: refs #4502 Deleted zoneEstimatedDelivery
gitea/salix/pipeline/head This commit looks good Details
2023-11-16 08:29:00 +01:00
18 changed files with 280 additions and 168 deletions

View File

@ -0,0 +1,73 @@
DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterInsert`;
USE `vn`;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterInsert`
AFTER INSERT ON `zoneIncluded`
FOR EACH ROW
BEGIN
INSERT INTO zoneLog
SET `action` = 'insert',
`changedModel` = 'zoneIncluded',
`changedModelId` = NEW.zoneFk,
`userFk` = account.myUser_getId();
INSERT INTO zoneIncludedCheck
SET
`action`= 'insert',
`zoneFk` = NEW.zoneFk,
`geoFk` = NEW.geoFk,
`userFk` = account.myUser_getId();
-- CALL `vn`.`zoneIncluded_checkCollisions`(NEW.zoneFk, NEW.geoFk);
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterUpdate`;
USE `vn`;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterUpdate`
AFTER UPDATE ON `zoneIncluded`
FOR EACH ROW
BEGIN
INSERT INTO zoneLog
SET `action` = 'update',
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
INSERT INTO zoneIncludedCheck
SET
`action`= 'update',
`zoneFk` = NEW.zoneFk,
`geoFk` = NEW.geoFk,
`userFk` = account.myUser_getId();
-- CALL `vn`.`zoneIncluded_checkCollisions`();
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterDelete`;
USE `vn`;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterDelete`
AFTER DELETE ON `zoneIncluded`
FOR EACH ROW
BEGIN
INSERT INTO zoneLog
SET `action` = 'delete',
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
INSERT INTO zoneIncludedCheck
SET
`action`= 'delete',
`zoneFk` = OLD.zoneFk,
`geoFk` = OLD.geoFk,
`userFk` = account.myUser_getId();
-- CALL `vn`.`zoneIncluded_checkCollisions`();
END$$
DELIMITER ;

View File

@ -0,0 +1,14 @@
CREATE TABLE `vn`.`zoneIncludedCheck` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`zoneFK` int(11) NOT NULL,
`geoFK` int(11) NOT NULL,
`userFK` int(10) unsigned NOT NULL,
`action`set('insert','update','delete') NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `user_FK` FOREIGN KEY (`userFK`) REFERENCES `account`.`user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `zone_FK` FOREIGN KEY (`zoneFK`) REFERENCES `vn`.`zone` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `geo_FK` FOREIGN KEY (`geoFK`) REFERENCES `vn`.`zoneGeo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
UNIQUE INDEX (`zoneFK`, `geoFK`, `userFK`, `action`)
)
comment 'Table to save temporarily zone changes';

View File

@ -0,0 +1,33 @@
DROP PROCEDURE IF EXISTS `vn`.`zoneIncluded_checkCollisions`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zoneIncluded_checkCollisions`(IN zi_zone INT, IN zi_geo INT)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE zic_id, zic_zone, zic_geo, zic_action, zic_userFk INT;
DECLARE z_name VARCHAR(255);
DECLARE g_name VARCHAR(255);
DECLARE my_cur CURSOR FOR
SELECT zic.id, z.name , zg.name , zic.geoFk ,zic.`action` , zic.userFK FROM vn.zoneIncludedCheck zic, vn.`zone` z, vn.zoneGeo zg WHERE zic.zoneFK =z.id AND zic.geoFK = zg.id ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN my_cur;
my_cur_loop:
LOOP FETCH my_cur INTO zic_id, z_name,g_name, zic_geo, zic_action, zic_userFk ;
IF done = 1 THEN
select concat('NO REDCORDS' ) AS '** DEBUG:';
LEAVE my_cur_loop;
END IF;
SELECT concat('** ', zic_id, '** ',z_name, '** ',g_name,'**',zic_geo,'** ', zic_action,'** ', zic_userFk ) AS '** DEBUG:';
DELETE FROM vn.zoneIncludedCheck WHERE id =zic_id;
SELECT util.notification_send('zone-included',
JSON_OBJECT('zoneSelected', z_name, 'geoSelected', g_name),
account.myUser_getId()
);
END LOOP my_cur_loop;
CLOSE my_cur;
END$$
DELIMITER ;

View File

@ -0,0 +1,11 @@
-- Auto-generated SQL script #202311241021
INSERT INTO util.notification (name,description)
VALUES ('zone-included','An email to notify zoneCollisions');
-- Auto-generated SQL script #202311241051
INSERT INTO util.notificationSubscription (notificationFk,userFk)
SELECT id, account.myUser_getId() FROM util.notification WHERE name= "zone-included"
INSERT INTO util.notificationAcl (notificationFk,roleFk)
SELECT id, account.role FROM util.notification WHERE name= "zone-included"

View File

@ -1,47 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterInsert`;
USE `vn`;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterInsert`
AFTER INSERT ON `zoneIncluded`
FOR EACH ROW
BEGIN
INSERT INTO zoneLog
SET `action` = 'insert',
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
END$$
DELIMITER ;
DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterUpdate`;
USE `vn`;
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterUpdate`
AFTER UPDATE ON `zoneIncluded`
FOR EACH ROW
BEGIN
INSERT INTO zoneLog
SET `action` = 'update',
`changedModel` = 'zoneIncluded',
`changedModelId` = OLD.zoneFk,
`userFk` = account.myUser_getId();
END$$
DELIMITER ;
-- DROP TRIGGER IF EXISTS `vn`.`zoneIncluded_afterDelete`;
-- USE `vn`;
-- DELIMITER $$
-- CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`zoneIncluded_afterDelete`
-- AFTER DELETE ON `zoneIncluded`
-- FOR EACH ROW
-- BEGIN
-- INSERT INTO zoneLog
-- SET `action` = 'delete',
-- `changedModel` = 'zoneIncluded',
-- `changedModelId` = OLD.zoneFk,
-- `userFk` = account.myUser_getId();
-- END$$
-- DELIMITER ;

View File

@ -1,7 +0,0 @@
CREATE TABLE `vn`.`zoneIncludedCheck` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`zoneFK` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`inclusion_FK`,`zoneFK`),
CONSTRAINT `inclusion_FK` FOREIGN KEY (`zoneFK`) REFERENCES `zoneIncluded` (`id`) ON UPDATE CASCADE,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

View File

@ -0,0 +1,14 @@
DROP PROCEDURE IF EXISTS `vn`.`zoneIncluded_checkCollisions`;
DELIMITER $$
$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zoneIncluded_checkCollisions`()
BEGIN
-- DROP TEMPORARY TABLE IF EXISTS tmp.toCheck;
DECLARE vZonesToCheck INT;
DECLARE vDone INT DEFAULT FALSE;
DECLARE vZoneFk INT;
DECLARE vCounter INT;
END$$
DELIMITER ;

View File

@ -83201,7 +83201,7 @@ USE `vn`;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `zoneEstimatedDelivery` AS select `t`.`zoneFk` AS `zoneFk`,cast(`util`.`VN_CURDATE`() + interval hour(ifnull(`zc`.`hour`,`z`.`hour`)) * 60 + minute(ifnull(`zc`.`hour`,`z`.`hour`)) minute as time) AS `hourTheoretical`,cast(sum(`sv`.`volume`) as decimal(5,1)) AS `totalVolume`,cast(sum(if(`s`.`alertLevel` < 2,`sv`.`volume`,0)) as decimal(5,1)) AS `remainingVolume`,greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0)) AS `speed`,cast(`zc`.`hour` + interval -sum(if(`s`.`alertLevel` < 2,`sv`.`volume`,0)) * 60 / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0)) minute as time) AS `hourEffective`,floor(-sum(if(`s`.`alertLevel` < 2,`sv`.`volume`,0)) * 60 / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0))) AS `minutesLess`,cast(`zc`.`hour` + interval -sum(if(`s`.`alertLevel` < 2,`sv`.`volume`,0)) * 60 / greatest(ifnull(`lhp`.`m3`,0),ifnull(`dl`.`minSpeed`,0)) minute as time) AS `etc` from (((((((((`vn`.`ticket` `t` join `vn`.`ticketStateToday` `tst` on(`tst`.`ticket` = `t`.`id`)) join `vn`.`state` `s` on(`s`.`id` = `tst`.`state`)) join `vn`.`saleVolume` `sv` on(`sv`.`ticketFk` = `t`.`id`)) left join `vn`.`lastHourProduction` `lhp` on(`lhp`.`warehouseFk` = `t`.`warehouseFk`)) join `vn`.`warehouse` `w` on(`w`.`id` = `t`.`warehouseFk`)) join `vn`.`warehouseAlias` `wa` on(`wa`.`id` = `w`.`aliasFk`)) straight_join `vn`.`zone` `z` on(`z`.`id` = `t`.`zoneFk`)) left join `vn`.`zoneClosure` `zc` on(`zc`.`zoneFk` = `t`.`zoneFk` and `zc`.`dated` = `util`.`VN_CURDATE`())) left join `cache`.`departure_limit` `dl` on(`dl`.`warehouse_id` = `t`.`warehouseFk` and `dl`.`fecha` = `util`.`VN_CURDATE`())) where `w`.`hasProduction` <> 0 and cast(`t`.`shipped` as date) = `util`.`VN_CURDATE`() group by `t`.`zoneFk` */;
/*!50001 VIEW `zoneEstimatedDelivery` AS SELECT `t`.`zoneFk` AS `zoneFk`, `zc`.`hour` AS `zoneClosureHour`, `z`.`hour` AS `zoneHour`, `sv`.`volume` AS `volume`, `al`.`hasToRecalcPrice` AS `hasToRecalcPrice`, `lhp`.`m3` AS `m3`, `dl`.`minSpeed` AS `minSpeed` FROM ((((((((((`vn`.`ticket` `t` JOIN `vn`.`ticketStateToday` `tst` ON (`tst`.`ticket` = `t`.`id`)) JOIN `vn`.`state` `s` ON (`s`.`id` = `tst`.`state`)) JOIN `vn`.`saleVolume` `sv` ON (`sv`.`ticketFk` = `t`.`id`)) LEFT JOIN `vn`.`lastHourProduction` `lhp` ON (`lhp`.`warehouseFk` = `t`.`warehouseFk`)) JOIN `vn`.`warehouse` `w` ON (`w`.`id` = `t`.`warehouseFk`)) JOIN `vn`.`warehouseAlias` `wa` ON (`wa`.`id` = `w`.`aliasFk`)) STRAIGHT_JOIN `vn`.`zone` `z` ON (`z`.`id` = `t`.`zoneFk`)) LEFT JOIN `vn`.`zoneClosure` `zc` ON (`zc`.`zoneFk` = `t`.`zoneFk` AND `zc`.`dated` = `util`.`VN_CURDATE`())) LEFT JOIN `cache`.`departure_limit` `dl` ON (`dl`.`warehouse_id` = `t`.`warehouseFk` AND `dl`.`fecha` = `util`.`VN_CURDATE`())) JOIN `vn`.`alertLevel` `al` ON (`al`.`id` = `s`.`alertLevel`)) WHERE `w`.`hasProduction` <> 0 AND CAST(`t`.`shipped` AS date) = `util`.`VN_CURDATE`() */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;

View File

@ -162,61 +162,69 @@ module.exports = Self => {
const stmts = [];
let stmt;
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.filter');
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
stmts.push(`SET SESSION optimizer_search_depth = 0`);
stmt = new ParameterizedSQL(
`CREATE TEMPORARY TABLE tmp.filter
stmt = new ParameterizedSQL(`
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(PRIMARY KEY (id))
ENGINE = MEMORY
SELECT
t.id,
t.shipped,
CAST(DATE(t.shipped) AS CHAR) AS shippedDate,
t.nickname,
t.refFk,
t.routeFk,
t.warehouseFk,
t.clientFk,
t.totalWithoutVat,
t.totalWithVat,
io.id AS invoiceOutId,
a.provinceFk,
p.name AS province,
w.name AS warehouse,
am.name AS agencyMode,
am.id AS agencyModeFk,
st.name AS state,
wk.lastName AS salesPerson,
ts.stateFk AS stateFk,
ts.alertLevel AS alertLevel,
ts.code AS alertLevelCode,
u.name AS userName,
c.salesPersonFk,
c.credit,
z.hour AS zoneLanding,
z.name AS zoneName,
z.id AS zoneFk,
st.classColor,
TIME_FORMAT(t.shipped, '%H:%i') AS preparationHour,
TIME_FORMAT(z.hour, '%H:%i') AS theoreticalhour,
TIME_FORMAT(zed.etc, '%H:%i') AS practicalHour
FROM ticket t
LEFT JOIN invoiceOut io ON t.refFk = io.ref
LEFT JOIN zone z ON z.id = t.zoneFk
LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN province p ON p.id = a.provinceFk
LEFT JOIN warehouse w ON w.id = t.warehouseFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN ticketState ts ON ts.ticketFk = t.id
LEFT JOIN state st ON st.id = ts.stateFk
LEFT JOIN client c ON c.id = t.clientFk
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
LEFT JOIN account.user u ON u.id = wk.id
LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
SELECT t.id,
t.shipped,
CAST(DATE(t.shipped) AS CHAR) shippedDate,
t.nickname,
t.refFk,
t.routeFk,
t.warehouseFk,
t.clientFk,
t.totalWithoutVat,
t.totalWithVat,
io.id invoiceOutId,
a.provinceFk,
p.name province,
w.name warehouse,
am.name agencyMode,
am.id agencyModeFk,
st.name state,
wk.lastName salesPerson,
ts.stateFk stateFk,
ts.alertLevel alertLevel,
ts.code alertLevelCode,
u.name userName,
c.salesPersonFk,
c.credit,
z.hour zoneLanding,
z.name zoneName,
z.id zoneFk,
st.classColor,
TIME_FORMAT(t.shipped, '%H:%i') preparationHour,
TIME_FORMAT(z.hour, '%H:%i') theoreticalhour,
TIME_FORMAT(zed.etc, '%H:%i') practicalHour
FROM ticket t
LEFT JOIN invoiceOut io ON t.refFk = io.ref
LEFT JOIN zone z ON z.id = t.zoneFk
LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN province p ON p.id = a.provinceFk
LEFT JOIN warehouse w ON w.id = t.warehouseFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN ticketState ts ON ts.ticketFk = t.id
LEFT JOIN state st ON st.id = ts.stateFk
LEFT JOIN client c ON c.id = t.clientFk
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
LEFT JOIN account.user u ON u.id = wk.id
LEFT JOIN (
SELECT zoneFk,
CAST(
IFNULL(zoneClosureHour, zoneHour) +
SUM(IF(hasToRecalcPrice, volume, 0)) * 60 /
GREATEST(IFNULL(m3, 0), IFNULL(minSpeed, 0))
AS time
) etc
FROM zoneEstimatedDelivery
GROUP BY zoneFk
) zed ON zed.zoneFk = t.zoneFk
`);
if (args.orderFk) {
stmt.merge({

View File

@ -140,40 +140,56 @@ module.exports = Self => {
const stmts = [];
let stmt;
stmt = new ParameterizedSQL(
`CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
ENGINE = MEMORY
SELECT
o.id,
o.total,
o.date_send landed,
o.date_make created,
o.customer_id clientFk,
o.agency_id agencyModeFk,
o.address_id addressFk,
o.company_id companyFk,
o.source_app sourceApp,
o.confirmed isConfirmed,
c.name clientName,
c.salesPersonFk,
u.nickname workerNickname,
u.name name,
co.code companyCode,
zed.zoneFk,
zed.hourTheoretical,
zed.hourEffective,
am.name AS agencyName
FROM hedera.order o
LEFT JOIN address a ON a.id = o.address_id
LEFT JOIN agencyMode am ON am.id = o.agency_id
LEFT JOIN client c ON c.id = o.customer_id
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
LEFT JOIN account.user u ON u.id = wk.id
LEFT JOIN company co ON co.id = o.company_id
LEFT JOIN orderTicket ot ON ot.orderFk = o.id
LEFT JOIN ticket t ON t.id = ot.ticketFk
LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
stmt = new ParameterizedSQL(`
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id))
ENGINE = MEMORY
SELECT o.id,
o.total,
o.date_send landed,
o.date_make created,
o.customer_id clientFk,
o.agency_id agencyModeFk,
o.address_id addressFk,
o.company_id companyFk,
o.source_app sourceApp,
o.confirmed isConfirmed,
c.name clientName,
c.salesPersonFk,
u.nickname workerNickname,
u.name name,
co.code companyCode,
zed.zoneFk,
zed.hourTheoretical,
zed.hourEffective,
am.name agencyName
FROM hedera.order o
LEFT JOIN address a ON a.id = o.address_id
LEFT JOIN agencyMode am ON am.id = o.agency_id
LEFT JOIN client c ON c.id = o.customer_id
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
LEFT JOIN account.user u ON u.id = wk.id
LEFT JOIN company co ON co.id = o.company_id
LEFT JOIN orderTicket ot ON ot.orderFk = o.id
LEFT JOIN ticket t ON t.id = ot.ticketFk
LEFT JOIN (
SELECT zoneFk,
CAST(
util.VN_CURDATE() +
INTERVAL HOUR(IFNULL(zoneClosureHour, zoneHour)) * 60 +
MINUTE(IFNULL(zoneClosureHour, zoneHour)) MINUTE
AS time
) hourTheoretical,
CAST(
IFNULL(zoneClosureHour, zoneHour) +
SUM(IF(hasToRecalcPrice, volume, 0)) * 60 /
GREATEST(IFNULL(m3, 0), IFNULL(minSpeed, 0))
AS time
) hourEffective
FROM zoneEstimatedDelivery
GROUP BY zoneFk
) zed ON zed.zoneFk = t.zoneFk
`);
stmt.merge(conn.makeWhere(filter.where));
stmt.merge(`GROUP BY id`);

View File

@ -1,8 +1,9 @@
const models = require('vn-loopback/server/server').models;
const LoopBackContext = require('loopback-context');
let conn = null;
describe('zone toggleIsIncluded()', () => {
beforeAll(async() => {
conn = await models.Item.dataSource.connector;
const activeCtx = {
accessToken: {userId: 9},
http: {
@ -16,15 +17,23 @@ describe('zone toggleIsIncluded()', () => {
});
});
it('should return the created location with isIncluded true', async() => {
fit('should return the created location with isIncluded true', async() => {
const tx = await models.Zone.beginTransaction({});
try {
let toCheck = await conn.executeStmt({sql: ' SELECT * FROM zoneIncludedCheck'});
expect(toCheck.length).toEqual(0);
const options = {transaction: tx};
let result = await models.Zone.toggleIsIncluded(1, 20, true, options);
expect(result.isIncluded).toBeTrue();
toCheck = await conn.executeStmt({sql: ' SELECT * FROM zoneIncludedCheck'});
expect(toCheck.length).not.toEqual(1);
await conn.executeStmt({sql: 'CALL vn.zoneIncluded_checkCollisions(?, ? )', params: [0, 0]});
await tx.rollback();
} catch (e) {

View File

@ -11,28 +11,24 @@
"id": true,
"type": "number"
},
"hourTheoretical": {
"zoneClosureHour": {
"type": "date"
},
"totalVolume": {
"zoneHour": {
"type": "date"
},
"volume": {
"type": "number"
},
"remainingVolume": {
"hasToRecalcPrice": {
"type": "boolean"
},
"m3": {
"type": "number"
},
"speed": {
"minSpeed": {
"type": "number"
},
"hourEffective": {
"type": "date"
},
"minutesLess": {
"type": "date"
},
"etc": {
"type": "date"
}
},
"relations": {
"zone": {

View File

@ -1,2 +1,2 @@
subject: Colisión de zona detectada
title: "La zona {0} ha sido registrada en más de un sitio"
title: "La zona {0} y localización {1} ha sido registrada en más de un sitio"

View File

@ -2,7 +2,7 @@
<div class="grid-row">
<div class="grid-block vn-pa-ml">
<h1>{{ $t('subject') }}</h1>
<p>{{ $t('title', [this.zoneIncluded.name]) }}</p>
<p>{{ $t('title', [zoneSelected,geoSelected]) }}</p>
</div>
</div>
</email-body>

View File

@ -3,23 +3,15 @@ const emailBody = new Component('email-body');
module.exports = {
name: 'zone-included',
async serverPrefetch() {
this.zoneIncluded = await this.fetchZoneIncluded(this.id);
},
methods: {
fetchZoneIncluded(id) {
return this.findOneFromDef('zoneIncluded', [id]);
},
},
components: {
'email-body': emailBody.build(),
},
props: {
id: {
type: Number,
zoneSelected: {
type: String,
required: true
},
url: {
geoSelected: {
type: String,
required: true
}