Compare commits

..

No commits in common. "4383ebd7f1ad7f0430488f92ba4cd131a0e61e8f" and "b453abdb3a615c11ea630f6930e5784024ebc67a" have entirely different histories.

18 changed files with 170 additions and 282 deletions

View File

@ -1,73 +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` = 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

@ -1,14 +0,0 @@
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

@ -1,33 +0,0 @@
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

@ -1,11 +0,0 @@
-- 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

@ -0,0 +1,47 @@
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

@ -0,0 +1,7 @@
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

@ -1,14 +0,0 @@
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 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */ /*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!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 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 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */; /*!50001 SET collation_connection = @saved_col_connection */;

View File

@ -163,16 +163,19 @@ module.exports = Self => {
const stmts = []; const stmts = [];
let stmt; let stmt;
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.filter');
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`); stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
stmts.push(`SET SESSION optimizer_search_depth = 0`); stmts.push(`SET SESSION optimizer_search_depth = 0`);
stmt = new ParameterizedSQL(` stmt = new ParameterizedSQL(
CREATE OR REPLACE TEMPORARY TABLE tmp.filter `CREATE TEMPORARY TABLE tmp.filter
(PRIMARY KEY (id)) (PRIMARY KEY (id))
ENGINE = MEMORY ENGINE = MEMORY
SELECT t.id, SELECT
t.id,
t.shipped, t.shipped,
CAST(DATE(t.shipped) AS CHAR) shippedDate, CAST(DATE(t.shipped) AS CHAR) AS shippedDate,
t.nickname, t.nickname,
t.refFk, t.refFk,
t.routeFk, t.routeFk,
@ -180,27 +183,27 @@ module.exports = Self => {
t.clientFk, t.clientFk,
t.totalWithoutVat, t.totalWithoutVat,
t.totalWithVat, t.totalWithVat,
io.id invoiceOutId, io.id AS invoiceOutId,
a.provinceFk, a.provinceFk,
p.name province, p.name AS province,
w.name warehouse, w.name AS warehouse,
am.name agencyMode, am.name AS agencyMode,
am.id agencyModeFk, am.id AS agencyModeFk,
st.name state, st.name AS state,
wk.lastName salesPerson, wk.lastName AS salesPerson,
ts.stateFk stateFk, ts.stateFk AS stateFk,
ts.alertLevel alertLevel, ts.alertLevel AS alertLevel,
ts.code alertLevelCode, ts.code AS alertLevelCode,
u.name userName, u.name AS userName,
c.salesPersonFk, c.salesPersonFk,
c.credit, c.credit,
z.hour zoneLanding, z.hour AS zoneLanding,
z.name zoneName, z.name AS zoneName,
z.id zoneFk, z.id AS zoneFk,
st.classColor, st.classColor,
TIME_FORMAT(t.shipped, '%H:%i') preparationHour, TIME_FORMAT(t.shipped, '%H:%i') AS preparationHour,
TIME_FORMAT(z.hour, '%H:%i') theoreticalhour, TIME_FORMAT(z.hour, '%H:%i') AS theoreticalhour,
TIME_FORMAT(zed.etc, '%H:%i') practicalHour TIME_FORMAT(zed.etc, '%H:%i') AS practicalHour
FROM ticket t FROM ticket t
LEFT JOIN invoiceOut io ON t.refFk = io.ref LEFT JOIN invoiceOut io ON t.refFk = io.ref
LEFT JOIN zone z ON z.id = t.zoneFk LEFT JOIN zone z ON z.id = t.zoneFk
@ -213,18 +216,7 @@ module.exports = Self => {
LEFT JOIN client c ON c.id = t.clientFk LEFT JOIN client c ON c.id = t.clientFk
LEFT JOIN worker wk ON wk.id = c.salesPersonFk LEFT JOIN worker wk ON wk.id = c.salesPersonFk
LEFT JOIN account.user u ON u.id = wk.id LEFT JOIN account.user u ON u.id = wk.id
LEFT JOIN ( LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
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) { if (args.orderFk) {
stmt.merge({ stmt.merge({

View File

@ -140,11 +140,12 @@ module.exports = Self => {
const stmts = []; const stmts = [];
let stmt; let stmt;
stmt = new ParameterizedSQL(` stmt = new ParameterizedSQL(
CREATE OR REPLACE TEMPORARY TABLE tmp.filter `CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(INDEX (id)) (INDEX (id))
ENGINE = MEMORY ENGINE = MEMORY
SELECT o.id, SELECT
o.id,
o.total, o.total,
o.date_send landed, o.date_send landed,
o.date_make created, o.date_make created,
@ -162,7 +163,7 @@ module.exports = Self => {
zed.zoneFk, zed.zoneFk,
zed.hourTheoretical, zed.hourTheoretical,
zed.hourEffective, zed.hourEffective,
am.name agencyName am.name AS agencyName
FROM hedera.order o FROM hedera.order o
LEFT JOIN address a ON a.id = o.address_id LEFT JOIN address a ON a.id = o.address_id
LEFT JOIN agencyMode am ON am.id = o.agency_id LEFT JOIN agencyMode am ON am.id = o.agency_id
@ -172,24 +173,7 @@ module.exports = Self => {
LEFT JOIN company co ON co.id = o.company_id LEFT JOIN company co ON co.id = o.company_id
LEFT JOIN orderTicket ot ON ot.orderFk = o.id LEFT JOIN orderTicket ot ON ot.orderFk = o.id
LEFT JOIN ticket t ON t.id = ot.ticketFk LEFT JOIN ticket t ON t.id = ot.ticketFk
LEFT JOIN ( LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
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(conn.makeWhere(filter.where));
stmt.merge(`GROUP BY id`); stmt.merge(`GROUP BY id`);

View File

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

View File

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

View File

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

View File

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

View File

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