Merge branch 'dev' into 8004-liliumStyleRemake
gitea/salix/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Alex Moreno 2024-12-04 07:09:30 +00:00
commit 91db8817ef
58 changed files with 312 additions and 95 deletions

View File

@ -24,12 +24,13 @@ module.exports = Self => {
Self.cancelShipment = async expeditionFk => { Self.cancelShipment = async expeditionFk => {
const models = Self.app.models; const models = Self.app.models;
const mrw = await models.MrwConfig.findOne(); const mrw = await models.MrwConfig.findOne();
const {externalId} = await models.Expedition.findById(expeditionFk); const {externalId} = await models.Expedition.findById(expeditionFk);
const clientType = await models.MrwConfig.getClientType(expeditionFk); const clientType = await models.MrwConfig.getClientType(expeditionFk);
const template = fs.readFileSync(__dirname + '/cancelShipment.ejs', 'utf-8'); const template = fs.readFileSync(__dirname + '/cancelShipment.ejs', 'utf-8');
const renderedXml = ejs.render(template, {mrw, externalId, clientType}); const renderedXml = ejs.render(template, {mrw, externalId, clientType});
await Self.rawSql('CALL util.debugAdd(?,?);', ['cancelShipment', renderedXml]);
const response = await axios.post(mrw.url, renderedXml, { const response = await axios.post(mrw.url, renderedXml, {
headers: { headers: {
'Content-Type': 'application/soap+xml; charset=utf-8' 'Content-Type': 'application/soap+xml; charset=utf-8'
@ -37,12 +38,11 @@ module.exports = Self => {
}); });
const xmlString = response.data; const xmlString = response.data;
await Self.rawSql('CALL util.debugAdd(?,?);', ['cancelShipmentResponse', xmlString]);
const parser = new DOMParser(); const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml'); const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
await Self.rawSql('CALL util.debugAdd(?,?);', ['cancelShipment', xmlDoc]);
const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent; const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
return result.toLowerCase().includes('se ha cancelado correctamente'); return ['no se ha encontrado', 'se ha cancelado correctamente'].some(res => result.toLowerCase().includes(res));
}; };
}; };

View File

@ -130,9 +130,15 @@
"Payment": { "Payment": {
"dataSource": "vn" "dataSource": "vn"
}, },
"PbxConfig": {
"dataSource": "vn"
},
"Postcode": { "Postcode": {
"dataSource": "vn" "dataSource": "vn"
}, },
"Prefix": {
"dataSource": "vn"
},
"ReferenceRate": { "ReferenceRate": {
"dataSource": "vn" "dataSource": "vn"
}, },

View File

@ -0,0 +1,27 @@
{
"name": "PbxConfig",
"base": "VnModel",
"options": {
"mysql": {
"table": "pbx.config"
}
},
"properties": {
"id": {
"type": "number",
"id": true
},
"defaultPrefix": {
"type": "string"
}
},
"acls": [
{
"property": "*",
"accessType": "READ",
"principalType": "ROLE",
"principalId": "employee",
"permission": "ALLOW"
}
]
}

27
back/models/prefix.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "Prefix",
"base": "VnModel",
"options": {
"mysql": {
"table": "pbx.prefix"
}
},
"properties": {
"country": {
"type": "string",
"id": true
},
"prefix": {
"type": "string"
}
},
"acls": [
{
"property": "*",
"accessType": "READ",
"principalType": "ROLE",
"principalId": "employee",
"permission": "ALLOW"
}
]
}

View File

@ -9,7 +9,7 @@
}, },
"vn": { "vn": {
"view": { "view": {
"expeditionPallet_Print": "99f75145ac2e7b612a6d71e74b6e55f194a465780fd9875a15eb01e6596b447e" "expeditionPallet_Print": "04fc5f2967ce53bfbb85f7f48b9a3dca4a4f7111ac41e1775f4cc7d6538774b2"
} }
} }
} }

View File

@ -745,15 +745,15 @@ INSERT INTO `vn`.`zoneClosure` (`zoneFk`, `dated`, `hour`)
INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1'); INSERT INTO `vn`.`zoneConfig` (`id`, `scope`) VALUES (1, '1');
INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`) INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`, `dated`)
VALUES VALUES
(1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1), (1, '1899-12-30 12:15:00', 56, util.VN_CURDATE(), 1, 1, 'first route', 1.8, 10, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 1, util.VN_CURDATE()),
(2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9), (2, '1899-12-30 13:20:00', 56, util.VN_CURDATE(), 1, 2, 'second route', 0.2, 20, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 9, util.VN_CURDATE()),
(3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 10), (3, '1899-12-30 14:30:00', 56, util.VN_CURDATE(), 2, 3, 'third route', 0.5, 30, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 10, util.VN_CURDATE()),
(4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 12), (4, '1899-12-30 15:45:00', 56, util.VN_CURDATE(), 3, 4, 'fourth route', 0, 40, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 12, util.VN_CURDATE()),
(5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 13), (5, '1899-12-30 16:00:00', 56, util.VN_CURDATE(), 4, 5, 'fifth route', 0.1, 50, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 13, util.VN_CURDATE()),
(6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3), (6, NULL, 57, util.VN_CURDATE(), 5, 7, 'sixth route', 1.7, 60, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 3, util.VN_CURDATE()),
(7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5); (7, NULL, 57, util.VN_CURDATE(), 6, 8, 'seventh route', 0, 70, util.VN_CURDATE(), DATE_ADD(util.VN_CURDATE(), INTERVAL + 1 DAY), 5, util.VN_CURDATE());
INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`, `problem`, `risk`) INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeFk`, `shipped`, `landed`, `clientFk`,`nickname`, `addressFk`, `refFk`, `isDeleted`, `zoneFk`, `zonePrice`, `zoneBonus`, `created`, `weight`, `cmrFk`, `problem`, `risk`)
VALUES VALUES
@ -2040,7 +2040,7 @@ INSERT INTO `vn`.`ticketService`(`id`, `description`, `quantity`, `price`, `taxC
INSERT INTO `pbx`.`config` (id,defaultPrefix) INSERT INTO `pbx`.`config` (id,defaultPrefix)
VALUES (1,'0034'); VALUES (1,'0034');
INSERT INTO `pbx`.`prefix` (country, prefix) INSERT IGNORE INTO `pbx`.`prefix` (country, prefix)
VALUES VALUES
('es', '0034'), ('es', '0034'),
('fr', '0033'), ('fr', '0033'),
@ -4026,10 +4026,11 @@ INSERT INTO srt.buffer (id, x, y, `size`, `length`, stateFk, typeFk, isActive, c
INSERT IGNORE INTO vn.saySimpleCountry (countryFk, channel) INSERT IGNORE INTO vn.saySimpleCountry (countryFk, channel)
VALUES (19, '1169'), VALUES (19, '1169'),
(8, '1183'); (8, '1183'),
(1, '1320');
INSERT IGNORE INTO vn.saySimpleConfig (url, defaultChannel) INSERT IGNORE INTO vn.saySimpleConfig (url, defaultChannel)
VALUES ('saysimle-url-mock', 1320); VALUES ('saysimle-url-mock', '1819');
INSERT INTO vn.workerIrpf (workerFk,spouseNif, geographicMobilityDate) INSERT INTO vn.workerIrpf (workerFk,spouseNif, geographicMobilityDate)
VALUES (1106,'26493101E','2019-09-20'); VALUES (1106,'26493101E','2019-09-20');

View File

@ -19,14 +19,14 @@ BEGIN
bultos) bultos)
SELECT r.id, SELECT r.id,
r.agencyModeFk, r.agencyModeFk,
r.created, r.dated,
SUM(sv.volume / ebv.m3) SUM(sv.volume / ebv.m3)
FROM vn.route r FROM vn.route r
JOIN vn.ticket t ON t.routeFk = r.id JOIN vn.ticket t ON t.routeFk = r.id
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
JOIN vn.saleVolume sv ON sv.ticketFk = t.id JOIN vn.saleVolume sv ON sv.ticketFk = t.id
JOIN vn.expeditionBoxVol ebv ON ebv.code = 'transportBox' JOIN vn.expeditionBoxVol ebv ON ebv.code = 'transportBox'
WHERE r.created BETWEEN vDatedFrom AND vDatedTo WHERE r.dated BETWEEN vDatedFrom AND vDatedTo
AND z.isVolumetric AND z.isVolumetric
GROUP BY r.id; GROUP BY r.id;
@ -38,12 +38,12 @@ BEGIN
Bultos) Bultos)
SELECT r.id, SELECT r.id,
r.agencyModeFk, r.agencyModeFk,
r.created, r.dated,
SUM(t.packages) SUM(t.packages)
FROM vn.route r FROM vn.route r
JOIN vn.ticket t ON t.routeFk = r.id JOIN vn.ticket t ON t.routeFk = r.id
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
WHERE r.created BETWEEN vDatedFrom AND vDatedTo WHERE r.dated BETWEEN vDatedFrom AND vDatedTo
AND NOT z.isVolumetric AND NOT z.isVolumetric
GROUP BY r.id GROUP BY r.id
ON DUPLICATE KEY UPDATE Bultos = Bultos + VALUES(Bultos); ON DUPLICATE KEY UPDATE Bultos = Bultos + VALUES(Bultos);
@ -60,7 +60,7 @@ BEGIN
JOIN vn.component c ON c.id = sc.componentFk JOIN vn.component c ON c.id = sc.componentFk
JOIN vn.componentType ct ON ct.id = c.typeFk JOIN vn.componentType ct ON ct.id = c.typeFk
WHERE ct.code = 'freight' WHERE ct.code = 'freight'
AND r.created BETWEEN vDatedFrom AND vDatedTo AND r.dated BETWEEN vDatedFrom AND vDatedTo
GROUP BY r.id GROUP BY r.id
) sub ON sub.routeFk = r.Id_Ruta ) sub ON sub.routeFk = r.Id_Ruta
SET r.practico = IFNULL(sub.totalPractice / r.Bultos, 0); SET r.practico = IFNULL(sub.totalPractice / r.Bultos, 0);
@ -77,7 +77,7 @@ BEGIN
JOIN vn.address ad ON ad.id = t.addressFk JOIN vn.address ad ON ad.id = t.addressFk
JOIN vn.client c ON c.id = ad.clientFk JOIN vn.client c ON c.id = ad.clientFk
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
WHERE r.created BETWEEN vDatedFrom AND vDatedTo WHERE r.dated BETWEEN vDatedFrom AND vDatedTo
AND NOT z.isVolumetric AND NOT z.isVolumetric
GROUP BY t.routeFk GROUP BY t.routeFk
) sub ON r.Id_Ruta = sub.routeFk ) sub ON r.Id_Ruta = sub.routeFk
@ -93,7 +93,7 @@ BEGIN
JOIN vn.saleVolume sf ON sf.ticketFk = t.id JOIN vn.saleVolume sf ON sf.ticketFk = t.id
JOIN vn.client c ON c.id = t.clientFk JOIN vn.client c ON c.id = t.clientFk
JOIN vn.`zone` z ON z.id = t.zoneFk JOIN vn.`zone` z ON z.id = t.zoneFk
WHERE r.created BETWEEN vDatedFrom AND vDatedTo WHERE r.dated BETWEEN vDatedFrom AND vDatedTo
AND z.isVolumetric AND z.isVolumetric
GROUP BY t.routeFk GROUP BY t.routeFk
) sub ON r.Id_Ruta = sub.routeFk ) sub ON r.Id_Ruta = sub.routeFk
@ -108,7 +108,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
JOIN vn.greuge g ON g.ticketFk = t.id JOIN vn.greuge g ON g.ticketFk = t.id
JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk
WHERE r.created BETWEEN vDatedFrom AND vDatedTo WHERE r.dated BETWEEN vDatedFrom AND vDatedTo
AND gt.code = 'freightDifference' AND gt.code = 'freightDifference'
GROUP BY t.routeFk GROUP BY t.routeFk
) sub ON r.Id_Ruta = sub.routeFk ) sub ON r.Id_Ruta = sub.routeFk

View File

@ -0,0 +1,32 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`buy_getLastWithoutInventory`(
vItemFk INT,
vWarehouseFk INT
)
RETURNS int(11)
DETERMINISTIC
BEGIN
/**
* Retorna la última compra que no sea inventario.
*
* @param vItemFk Id del artículo
* @param vWarehouseFk Id del almacén
* @return Id de compra
*/
DECLARE vBuyFk INT;
SELECT b.id INTO vBuyFk
FROM buy b
JOIN entry e ON e.id = b.entryFk
JOIN travel t ON t.id = e.travelFk
WHERE e.id <> (SELECT defaultEntry FROM entryConfig)
AND e.supplierFk <> (SELECT supplierFk FROM inventoryConfig)
AND e.typeFk <> 'inventory'
AND b.itemFk = vItemFk
AND (t.warehouseInFk = vWarehouseFk OR t.warehouseInFk IS NULL)
ORDER BY ABS(DATEDIFF(util.VN_CURDATE(), t.landed)), e.created DESC
LIMIT 1;
RETURN vBuyFk;
END$$
DELIMITER ;

View File

@ -26,7 +26,7 @@ BEGIN
JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk
WHERE friendship >= vSignificativeFriendship WHERE friendship >= vSignificativeFriendship
AND zf.zoneFk = vZoneFk AND zf.zoneFk = vZoneFk
AND r.created = vLanded AND r.dated = vLanded
ORDER BY friendship; ORDER BY friendship;
-- Se eliminan aquellas que superan el volumen máximo -- Se eliminan aquellas que superan el volumen máximo

View File

@ -26,7 +26,7 @@ BEGIN
JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk JOIN cache.zoneAgencyFriendship zf ON zf.agencyModeFk = r.agencyModeFk
WHERE friendship >= vSignificativeFriendship WHERE friendship >= vSignificativeFriendship
AND zf.zoneFk = vZoneFk AND zf.zoneFk = vZoneFk
AND r.created = vLanded AND r.dated = vLanded
ORDER BY friendship; ORDER BY friendship;
-- Se eliminan aquellas que superan el volumen máximo -- Se eliminan aquellas que superan el volumen máximo

View File

@ -41,6 +41,6 @@ BEGIN
WHERE expeditionFk = e.id) WHERE expeditionFk = e.id)
LEFT JOIN expeditionState es2 ON es2.id = es.id LEFT JOIN expeditionState es2 ON es2.id = es.id
WHERE t.routeFk = vRouteFk AND e.freightItemFk <> FALSE WHERE t.routeFk = vRouteFk AND e.freightItemFk <> FALSE
ORDER BY r.created, t.priority DESC; ORDER BY r.dated, t.priority DESC;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -54,7 +54,9 @@ proc:BEGIN
WHERE shipped BETWEEN vCreated AND util.dayEnd(vCreated) WHERE shipped BETWEEN vCreated AND util.dayEnd(vCreated)
AND clientFk = vClientFk AND clientFk = vClientFk
AND addressFk = vAddressFk AND addressFk = vAddressFk
AND warehouseFk = vWarehouseFk; AND warehouseFk = vWarehouseFk
AND nickname = 'CAJAS AUTOCONSUMO'
LIMIT 1;
IF vTicketFk IS NULL AND vAction = 'add' THEN IF vTicketFk IS NULL AND vAction = 'add' THEN
INSERT INTO ticket(clientFk, warehouseFk, shipped, nickname, addressFk) INSERT INTO ticket(clientFk, warehouseFk, shipped, nickname, addressFk)

View File

@ -27,7 +27,7 @@ BEGIN
rm.ticketFree = 0, rm.ticketFree = 0,
rm.ticketProduction = 0, rm.ticketProduction = 0,
rm.ticketPacked = 0, rm.ticketPacked = 0,
rm.dated = r.created; rm.dated = r.dated;
UPDATE routesMonitor rm UPDATE routesMonitor rm
JOIN ( JOIN (

View File

@ -14,7 +14,7 @@ BEGIN
DECLARE vIsKmTruckRate BOOL; DECLARE vIsKmTruckRate BOOL;
DECLARE vCountryFk INT; DECLARE vCountryFk INT;
SELECT r.created >= rc.cutoffDated INTO vIsUpdatable SELECT r.dated >= rc.cutoffDated INTO vIsUpdatable
FROM route r FROM route r
JOIN routeConfig rc JOIN routeConfig rc
WHERE r.id = vSelf; WHERE r.id = vSelf;

View File

@ -16,7 +16,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND ic.itemFk = NEW.itemFk AND ic.itemFk = NEW.itemFk
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
IF NEW.cm3Delivery = 0 AND NEW.warehouseFk = 60 THEN IF NEW.cm3Delivery = 0 AND NEW.warehouseFk = 60 THEN
CALL mail_insert( CALL mail_insert(

View File

@ -14,7 +14,7 @@ BEGIN
SELECT IFNULL(b.workCenterFK, r.defaultWorkCenterFk) SELECT IFNULL(b.workCenterFK, r.defaultWorkCenterFk)
FROM vn.routeConfig r FROM vn.routeConfig r
LEFT JOIN vn.business b ON b.workerFk = vUserFk LEFT JOIN vn.business b ON b.workerFk = vUserFk
AND NEW.created BETWEEN b.started AND IFNULL(b.ended, NEW.created)); AND NEW.dated BETWEEN b.started AND IFNULL(b.ended, NEW.dated));
IF ISNULL(NEW.agencyModeFk) THEN IF ISNULL(NEW.agencyModeFk) THEN
SELECT r.agencyModeFk INTO vDefaultAgencyModeFk SELECT r.agencyModeFk INTO vDefaultAgencyModeFk

View File

@ -23,7 +23,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND s.id = NEW.id AND s.id = NEW.id
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
END IF; END IF;
END$$ END$$

View File

@ -54,7 +54,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND s.id = NEW.id AND s.id = NEW.id
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
END IF; END IF;

View File

@ -11,7 +11,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND s.id = OLD.id AND s.id = OLD.id
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
END IF; END IF;
END$$ END$$

View File

@ -8,7 +8,7 @@ BEGIN
FROM vn.route r FROM vn.route r
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND r.id = OLD.routeFk AND r.id = OLD.routeFk
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
DELETE FROM sale WHERE ticketFk = OLD.id; DELETE FROM sale WHERE ticketFk = OLD.id;

View File

@ -22,7 +22,7 @@ BEGIN
FROM `route` FROM `route`
WHERE NOT isOk WHERE NOT isOk
AND id IN (OLD.routeFk, NEW.routeFk) AND id IN (OLD.routeFk, NEW.routeFk)
AND created >= util.VN_CURDATE() AND dated >= util.VN_CURDATE()
GROUP BY id; GROUP BY id;
END IF; END IF;
@ -45,7 +45,7 @@ BEGIN
JOIN vn.route r ON r.id = t.routeFk JOIN vn.route r ON r.id = t.routeFk
WHERE r.isOk = FALSE WHERE r.isOk = FALSE
AND t.id = NEW.id AND t.id = NEW.id
AND r.created >= util.VN_CURDATE() AND r.dated >= util.VN_CURDATE()
GROUP BY r.id; GROUP BY r.id;
SET NEW.shipped = DATE_FORMAT(NEW.shipped, '2000-%m-%d %T'); SET NEW.shipped = DATE_FORMAT(NEW.shipped, '2000-%m-%d %T');
SET NEW.landed = DATE_FORMAT(NEW.landed, '2000-%m-%d %T'); SET NEW.landed = DATE_FORMAT(NEW.landed, '2000-%m-%d %T');

View File

@ -9,8 +9,8 @@ AS SELECT `rs2`.`description` AS `truck`,
`rs`.`id` <=> `rm`.`roadmapStopFk` AS `isMatch`, `rs`.`id` <=> `rm`.`roadmapStopFk` AS `isMatch`,
`t`.`warehouseFk` AS `warehouseFk`, `t`.`warehouseFk` AS `warehouseFk`,
IF( IF(
`r`.`created` > `util`.`VN_CURDATE`() + INTERVAL 1 DAY, `r`.`dated` > `util`.`VN_CURDATE`() + INTERVAL 1 DAY,
ucase(dayname(`r`.`created`)), ucase(dayname(`r`.`dated`)),
NULL NULL
) AS `nombreDia` ) AS `nombreDia`
FROM ( FROM (

View File

@ -6,7 +6,7 @@ AS SELECT `r`.`id` AS `routeFk`,
COUNT(DISTINCT `e`.`id`) AS `expeditions`, COUNT(DISTINCT `e`.`id`) AS `expeditions`,
COUNT(DISTINCT `es`.`id`) AS `scanned`, COUNT(DISTINCT `es`.`id`) AS `scanned`,
max(`e`.`created`) AS `lastPacked`, max(`e`.`created`) AS `lastPacked`,
`r`.`created` AS `created` `r`.`dated` AS `created`
FROM ( FROM (
( (
( (
@ -23,5 +23,5 @@ FROM (
) )
LEFT JOIN `vn`.`expeditionScan` `es` ON(`es`.`expeditionFk` = `e`.`id`) LEFT JOIN `vn`.`expeditionScan` `es` ON(`es`.`expeditionFk` = `e`.`id`)
) )
WHERE `r`.`created` >= `util`.`yesterday`() WHERE `r`.`dated` >= `util`.`yesterday`()
GROUP BY `r`.`id` GROUP BY `r`.`id`

View File

@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
VIEW `vn2008`.`Rutas` VIEW `vn2008`.`Rutas`
AS SELECT `r`.`id` AS `Id_Ruta`, AS SELECT `r`.`id` AS `Id_Ruta`,
`r`.`workerFk` AS `Id_Trabajador`, `r`.`workerFk` AS `Id_Trabajador`,
`r`.`created` AS `Fecha`, `r`.`dated` AS `Fecha`,
`r`.`vehicleFk` AS `Id_Vehiculo`, `r`.`vehicleFk` AS `Id_Vehiculo`,
`r`.`agencyModeFk` AS `Id_Agencia`, `r`.`agencyModeFk` AS `Id_Agencia`,
`r`.`time` AS `Hora`, `r`.`time` AS `Hora`,

View File

@ -0,0 +1,5 @@
ALTER TABLE vn.duaInvoiceIn DROP KEY IF EXISTS duaFk_UNIQUE;
ALTER TABLE vn.duaInvoiceIn DROP KEY IF EXISTS duaInvoiceIn_unique;
ALTER TABLE vn.duaInvoiceIn ADD CONSTRAINT duaInvoiceIn_unique
UNIQUE KEY (invoiceInFk);

View File

@ -0,0 +1 @@
ALTER TABLE vn.route ADD dated DATE;

View File

@ -0,0 +1 @@
UPDATE vn.route SET dated = created;

View File

@ -0,0 +1,2 @@
ALTER TABLE vn.route
MODIFY COLUMN dated DATE NOT NULL;

View File

@ -0,0 +1,2 @@
ALTER TABLE vn.route
MODIFY COLUMN created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

View File

@ -0,0 +1,107 @@
INSERT IGNORE INTO vn.saySimpleCountry
SET countryFk = 1,
channel = '1320';
UPDATE vn.saySimpleConfig
SET defaultChannel = '1819';
INSERT IGNORE INTO pbx.prefix (country, prefix) VALUES
('ES', '0034'),
('IT', '0039'),
('DE', '0049'),
('RO', '0040'),
('NL', '0031'),
('BE', '0032'),
('RU', '007'),
('PT', '00351'),
('LT', '00370'),
('UA', '00380'),
('CO', '0057'),
('FI', '00358'),
('EC', '00593'),
('LB', '00961'),
('IL', '00972'),
('TH', '0066'),
('PA', '00507'),
('GB', '0044'),
('FR', '0033'),
('PL', '0048'),
('MX', '0052'),
('MA', '00212'),
('AI', '001268'),
('GH', '00233'),
('SE', '0046'),
('AE', '00971'),
('KE', '00254'),
('AD', '00376'),
('AO', '00244'),
('LU', '00352'),
('BY', '00375'),
('MD', '00373'),
('DK', '0045'),
('ET', '00251'),
('AU', '0061'),
('CA', '0001'),
('CL', '0056'),
('CN', '0086'),
('CR', '00506'),
('GT', '00502'),
('CI', '00225'),
('PE', '0051'),
('LK', '0094'),
('ZA', '0027'),
('TR', '0090'),
('ZW', '00263'),
('MY', '0060'),
('NZ', '0064'),
('IE', '00353'),
('MN', '00976'),
('SV', '00503'),
('ZM', '00260'),
('JP', '0081'),
('RW', '00250'),
('AL', '00355'),
('KW', '00965'),
('SG', '0065'),
('SR', '00597'),
('KR', '0082'),
('US', '0001'),
('RS', '00381'),
('AT', '0043'),
('EG', '0020'),
('LV', '00371'),
('CY', '00357'),
('CZ', '00420'),
('BB', '001246'),
('SK', '00421'),
('IN', '0091'),
('DZ', '00213'),
('BR', '0055'),
('GR', '0030'),
('MC', '00377'),
('SI', '00386'),
('GP', '00590'),
('NO', '0047'),
('CH', '0041'),
('AR', '0054'),
('CU', '0053'),
('GQ', '00240'),
('GN', '00224'),
('HN', '00504'),
('ML', '00223'),
('NI', '00505'),
('PK', '0092'),
('PY', '00595'),
('SN', '00221'),
('UY', '00598'),
('VE', '0058'),
('BG', '00359'),
('GE', '00995'),
('EE', '00372'),
('SA', '00966'),
('RN', '00234'),
('HK', '00852'),
('GI', '00350'),
('CM', '00237'),
('HU', '0036'),
('AM', '00374');

View File

@ -0,0 +1,2 @@
ALTER TABLE vn.ticket DROP FOREIGN KEY tickets_zone_fk;
ALTER TABLE vn.ticket ADD CONSTRAINT tickets_zone_fk FOREIGN KEY (zoneFk) REFERENCES vn.`zone`(id) ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -791,7 +791,7 @@ export default {
}, },
createRouteView: { createRouteView: {
worker: 'vn-route-create vn-worker-autocomplete[ng-model="$ctrl.route.workerFk"]', worker: 'vn-route-create vn-worker-autocomplete[ng-model="$ctrl.route.workerFk"]',
createdDatePicker: 'vn-route-create vn-date-picker[ng-model="$ctrl.route.created"]', createdDatePicker: 'vn-route-create vn-date-picker[ng-model="$ctrl.route.dated"]',
vehicleAuto: 'vn-route-create vn-autocomplete[ng-model="$ctrl.route.vehicleFk"]', vehicleAuto: 'vn-route-create vn-autocomplete[ng-model="$ctrl.route.vehicleFk"]',
agency: 'vn-route-create vn-autocomplete[ng-model="$ctrl.route.agencyModeFk"]', agency: 'vn-route-create vn-autocomplete[ng-model="$ctrl.route.agencyModeFk"]',
description: 'vn-route-create [ng-model="$ctrl.route.description"]', description: 'vn-route-create [ng-model="$ctrl.route.description"]',

View File

@ -246,5 +246,6 @@
"ticketLostExpedition": "The ticket [{{ticketId}}]({{{ticketUrl}}}) has the following lost expedition:{{ expeditionId }}", "ticketLostExpedition": "The ticket [{{ticketId}}]({{{ticketUrl}}}) has the following lost expedition:{{ expeditionId }}",
"The raid information is not correct": "The raid information is not correct", "The raid information is not correct": "The raid information is not correct",
"Payment method is required": "Payment method is required", "Payment method is required": "Payment method is required",
"Sales already moved": "Sales already moved" "Sales already moved": "Sales already moved",
"There are tickets to be invoiced": "There are tickets to be invoiced for this zone, please delete them first"
} }

View File

@ -389,6 +389,7 @@
"ticketLostExpedition": "El ticket [{{ticketId}}]({{{ticketUrl}}}) tiene la siguiente expedición perdida:{{ expeditionId }}", "ticketLostExpedition": "El ticket [{{ticketId}}]({{{ticketUrl}}}) tiene la siguiente expedición perdida:{{ expeditionId }}",
"The web user's email already exists": "El correo del usuario web ya existe", "The web user's email already exists": "El correo del usuario web ya existe",
"Sales already moved": "Ya han sido transferidas", "Sales already moved": "Ya han sido transferidas",
"The raid information is not correct": "La información de la redada no es correcta" "The raid information is not correct": "La información de la redada no es correcta",
"There are tickets to be invoiced": "Hay tickets para esta zona, borralos primero"
} }

View File

@ -54,7 +54,7 @@ module.exports = Self => {
{ {
relation: 'country', relation: 'country',
scope: { scope: {
fields: ['id', 'name'], fields: ['id', 'name', 'code'],
include: { include: {
relation: 'saySimpleCountry', relation: 'saySimpleCountry',
} }

View File

@ -51,7 +51,7 @@ module.exports = Self => {
JOIN vn.productionConfig pc JOIN vn.productionConfig pc
WHERE sh.code = ? AND s.code = pc.sectorFromCode WHERE sh.code = ? AND s.code = pc.sectorFromCode
), tItemInSector AS ( ), tItemInSector AS (
SELECT is2.itemFk, is2.created, is2.shelvingFk SELECT is2.itemFk, is2.created, sh.code
FROM vn.itemShelving is2 FROM vn.itemShelving is2
JOIN vn.shelving sh ON sh.id = is2.shelvingFk JOIN vn.shelving sh ON sh.id = is2.shelvingFk
JOIN vn.parking p ON p.id = sh.parkingFk JOIN vn.parking p ON p.id = sh.parkingFk
@ -59,7 +59,7 @@ module.exports = Self => {
JOIN vn.productionConfig pc JOIN vn.productionConfig pc
WHERE sh.code <> ? WHERE sh.code <> ?
AND s.code = pc.sectorFromCode) AND s.code = pc.sectorFromCode)
SELECT ti.itemFK, tis.shelvingFk SELECT ti.itemFK, tis.code shelvingFk
FROM tItemShelving ti FROM tItemShelving ti
JOIN tItemInSector tis ON tis.itemFk = ti.itemFk JOIN tItemInSector tis ON tis.itemFk = ti.itemFk
JOIN vn.productionConfig pc JOIN vn.productionConfig pc

View File

@ -66,9 +66,9 @@ module.exports = Self => {
case 'agencyFk': case 'agencyFk':
return {'agencyFk': value}; return {'agencyFk': value};
case 'from': case 'from':
return {'created': {gte: value}}; return {'dated': {gte: value}};
case 'to': case 'to':
return {'created': {lte: value}}; return {'dated': {lte: value}};
} }
}); });
@ -81,7 +81,7 @@ module.exports = Self => {
`SELECT * `SELECT *
FROM ( FROM (
SELECT r.id routeFk, SELECT r.id routeFk,
r.created, r.dated,
r.agencyModeFk, r.agencyModeFk,
am.name agencyModeName, am.name agencyModeName,
am.agencyFk, am.agencyFk,
@ -103,7 +103,7 @@ module.exports = Self => {
LEFT JOIN vn.ticket t ON t.routeFk = r.id LEFT JOIN vn.ticket t ON t.routeFk = r.id
LEFT JOIN vn.supplierAgencyTerm sat ON sat.agencyFk = a.id LEFT JOIN vn.supplierAgencyTerm sat ON sat.agencyFk = a.id
LEFT JOIN vn.supplier s ON s.id = sat.supplierFk LEFT JOIN vn.supplier s ON s.id = sat.supplierFk
WHERE r.created > DATE_ADD(?, INTERVAL -2 MONTH) AND sat.supplierFk IS NOT NULL WHERE r.dated > DATE_ADD(?, INTERVAL -2 MONTH) AND sat.supplierFk IS NOT NULL
GROUP BY r.id GROUP BY r.id
) a` ) a`
, [date]); , [date]);

View File

@ -10,10 +10,10 @@ module.exports = Self => {
description: 'The routes ids to clone' description: 'The routes ids to clone'
}, },
{ {
arg: 'created', arg: 'dated',
type: 'date', type: 'date',
required: true, required: true,
description: 'The created date for all routes' description: 'The date for all routes'
} }
], ],
returns: { returns: {
@ -26,7 +26,7 @@ module.exports = Self => {
} }
}); });
Self.clone = async(ids, created) => { Self.clone = async(ids, dated) => {
const tx = await Self.beginTransaction({}); const tx = await Self.beginTransaction({});
try { try {
const options = {transaction: tx}; const options = {transaction: tx};
@ -39,7 +39,7 @@ module.exports = Self => {
throw new Error(`The amount of routes found don't match`); throw new Error(`The amount of routes found don't match`);
const routes = originalRoutes.map(route => { const routes = originalRoutes.map(route => {
route.created = created; route.dated = dated;
return route; return route;
}); });

View File

@ -93,9 +93,9 @@ module.exports = Self => {
case 'search': case 'search':
return {'id': value}; return {'id': value};
case 'from': case 'from':
return {'created': {gte: value}}; return {'dated': {gte: value}};
case 'to': case 'to':
return {'created': {lte: value}}; return {'dated': {lte: value}};
case 'description': case 'description':
return {'description': {like: `%${value}%`}}; return {'description': {like: `%${value}%`}};
case 'isOk': case 'isOk':
@ -119,7 +119,7 @@ module.exports = Self => {
SELECT SELECT
r.id, r.id,
r.workerFk, r.workerFk,
r.created, r.dated,
r.vehicleFk, r.vehicleFk,
r.agencyModeFk, r.agencyModeFk,
r.time, r.time,

View File

@ -46,14 +46,14 @@ module.exports = Self => {
and: [ and: [
{ {
or: [ or: [
{'created': currentDate}, {'dated': currentDate},
{'created': nextDay} {'dated': nextDay}
] ]
} }
] ]
}, },
order: [ order: [
'created ASC', 'dated ASC',
'time ASC', 'time ASC',
'agencyName ASC' 'agencyName ASC'
] ]

View File

@ -43,10 +43,10 @@ module.exports = Self => {
for (let zoneAgencyMode of zoneAgencyModes) for (let zoneAgencyMode of zoneAgencyModes)
zoneIds.push(zoneAgencyMode.zoneFk); zoneIds.push(zoneAgencyMode.zoneFk);
const minDate = new Date(route.created); const minDate = new Date(route.dated);
minDate.setHours(0, 0, 0, 0); minDate.setHours(0, 0, 0, 0);
const maxDate = new Date(route.created); const maxDate = new Date(route.dated);
maxDate.setHours(23, 59, 59, 59); maxDate.setHours(23, 59, 59, 59);
let tickets = await Self.app.models.Ticket.find({ let tickets = await Self.app.models.Ticket.find({

View File

@ -42,10 +42,10 @@ module.exports = Self => {
try { try {
const route = await models.Route.findById(routeId, null, myOptions); const route = await models.Route.findById(routeId, null, myOptions);
const minDate = new Date(route.created); const minDate = new Date(route.dated);
minDate.setHours(0, 0, 0, 0); minDate.setHours(0, 0, 0, 0);
const maxDate = new Date(route.created); const maxDate = new Date(route.dated);
maxDate.setHours(23, 59, 59, 59); maxDate.setHours(23, 59, 59, 59);
const ticket = await models.Ticket.findOne({ const ticket = await models.Ticket.findOne({
where: { where: {

View File

@ -15,7 +15,7 @@
"id": true, "id": true,
"description": "Identifier" "description": "Identifier"
}, },
"created": { "dated": {
"type": "date" "type": "date"
}, },
"time": { "time": {

View File

@ -32,7 +32,7 @@
<div class="attributes"> <div class="attributes">
<vn-label-value <vn-label-value
label="Date" label="Date"
value="{{$ctrl.route.created | date: 'dd/MM/yyyy'}}"> value="{{$ctrl.route.dated | date: 'dd/MM/yyyy'}}">
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Agency" label="Agency"

View File

@ -48,7 +48,7 @@ class Controller extends Descriptor {
'id', 'id',
'workerFk', 'workerFk',
'agencyModeFk', 'agencyModeFk',
'created', 'dated',
'm3', 'm3',
'warehouseFk', 'warehouseFk',
'description', 'description',

View File

@ -14,7 +14,7 @@
value="{{$ctrl.summary.route.id}}"> value="{{$ctrl.summary.route.id}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Date" <vn-label-value label="Date"
value="{{$ctrl.summary.route.created | date: 'dd/MM/yyyy'}}"> value="{{$ctrl.summary.route.dated | date: 'dd/MM/yyyy'}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Agency" <vn-label-value label="Agency"
value="{{$ctrl.summary.route.agencyMode.name}}"> value="{{$ctrl.summary.route.agencyMode.name}}">

View File

@ -52,7 +52,8 @@ module.exports = Self => {
const deletedExpedition = await models.Expedition.destroyById(expeditionId); const deletedExpedition = await models.Expedition.destroyById(expeditionId);
deletedExpeditions.push(deletedExpedition); deletedExpeditions.push(deletedExpedition);
} catch (e) { } catch (error) {
console.error('error: ', error);
notDeletedExpeditions.push(expeditionId); notDeletedExpeditions.push(expeditionId);
} }
} }

View File

@ -387,10 +387,10 @@ class Controller extends Section {
} }
newOrderFromTicket() { newOrderFromTicket() {
this.$http.post(`Orders/newFromTicket`, {ticketFk: this.ticket.id}).then(res => { this.$http.post(`Orders/newFromTicket`, {ticketFk: this.ticket.id}).then(async res => {
const path = this.$state.href('order.card.catalog', {id: res.data}); const path = await this.vnApp.getUrl(`order/${res.data}/catalog`);
window.open(path, '_blank');
window.open(path, '_blank');
this.vnApp.showSuccess(this.$t('Order created')); this.vnApp.showSuccess(this.$t('Order created'));
}); });
} }

View File

@ -567,14 +567,10 @@ describe('Ticket', () => {
const expectedResponse = {id: 123}; const expectedResponse = {id: 123};
window.open = jasmine.createSpy('open'); window.open = jasmine.createSpy('open');
controller.$state.href = jasmine.createSpy('href')
.and.returnValue('/somePath');
$httpBackend.expect('POST', `Orders/newFromTicket`, expectedParams).respond(expectedResponse); $httpBackend.expect('POST', `Orders/newFromTicket`, expectedParams).respond(expectedResponse);
controller.newOrderFromTicket(); controller.newOrderFromTicket();
$httpBackend.flush(); $httpBackend.flush();
expect(window.open).toHaveBeenCalledWith('/somePath', '_blank');
}); });
}); });

View File

@ -51,9 +51,9 @@ module.exports = Self => {
}; };
const ticketList = await models.Ticket.find(filter, myOptions); const ticketList = await models.Ticket.find(filter, myOptions);
const hasRefFk = ticketList.some(ticket => ticket.refFk);
if (ticketList.length > 0) if (hasRefFk)
throw new UserError('There are tickets for this area, delete them first'); throw new UserError('There are tickets to be invoiced');
await models.Zone.destroyById(id, myOptions); await models.Zone.destroyById(id, myOptions);

View File

@ -8,14 +8,14 @@ describe('zone deletezone()', () => {
__: value => value __: value => value
}; };
const ctx = {req: activeCtx}; const ctx = {req: activeCtx};
const zoneId = 4;
const zoneId2 = 3;
let ticketIDs; let ticketIDs;
beforeAll(async() => { beforeAll(async() => {
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({ spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
active: activeCtx active: activeCtx
}); });
const zoneId = 4;
const originalTickets = await models.Ticket.find({ const originalTickets = await models.Ticket.find({
where: { where: {
zoneFk: zoneId zoneFk: zoneId
@ -29,7 +29,7 @@ describe('zone deletezone()', () => {
it('should delete a zone and update their tickets', async() => { it('should delete a zone and update their tickets', async() => {
const tx = await models.Zone.beginTransaction({}); const tx = await models.Zone.beginTransaction({});
const zoneId = 4;
try { try {
const options = {transaction: tx}; const options = {transaction: tx};
await models.Zone.deleteZone(ctx, zoneId, options); await models.Zone.deleteZone(ctx, zoneId, options);
@ -47,17 +47,18 @@ describe('zone deletezone()', () => {
it('should not delete the zone if it has tickets', async() => { it('should not delete the zone if it has tickets', async() => {
const tx = await models.Zone.beginTransaction({}); const tx = await models.Zone.beginTransaction({});
const zoneId = 1;
let error; let error;
try { try {
const options = {transaction: tx}; const options = {transaction: tx};
await models.Zone.deleteZone(ctx, zoneId2, options); await models.Zone.deleteZone(ctx, zoneId, options);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
error = e.message; error = e.message;
await tx.rollback(); await tx.rollback();
} }
expect(error).toEqual('There are tickets for this area, delete them first'); expect(error).toEqual('There are tickets to be invoiced');
}); });
}); });

View File

@ -1,6 +1,6 @@
{ {
"name": "salix-back", "name": "salix-back",
"version": "24.50.0", "version": "24.52.0",
"author": "Verdnatura Levante SL", "author": "Verdnatura Levante SL",
"description": "Salix backend", "description": "Salix backend",
"license": "GPL-3.0", "license": "GPL-3.0",

View File

@ -33,7 +33,9 @@ td {
font-size: 26px; font-size: 26px;
} }
.lg-txt { .lg-txt {
font-size: 32px; font-size: 40px;
padding: 0px;
line-height: 1;
} }
.xl-txt { .xl-txt {
font-size: 50px; font-size: 50px;

View File

@ -36,12 +36,12 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="lg-txt xl-width bold center"> <td class="bold center lg-txt xl-width">
<div class="overflow-line"> <div class="overflow-line">
{{formatNumber(buy.itemFk)}} {{formatNumber(buy.itemFk)}}
</div> </div>
</td> </td>
<td colspan="2" class="md-txt md-width center"> <td colspan="2" class="center md-txt md-width">
<div class="overflow-line"> <div class="overflow-line">
{{`${(packing || buy.packing)} x ${buy.stems || ''}`}} {{`${(packing || buy.packing)} x ${buy.stems || ''}`}}
</div> </div>

View File

@ -20,7 +20,7 @@ module.exports = {
xmlDocument: document, xmlDocument: document,
format: 'code128', format: 'code128',
displayValue: false, displayValue: false,
width: 3.8, width: 3.5,
height: 75, height: 75,
margin: 0 margin: 0
}); });

View File

@ -16,7 +16,7 @@
</tr> </tr>
<tr> <tr>
<th class="font gray align-right">{{$t('date')}}</th> <th class="font gray align-right">{{$t('date')}}</th>
<td>{{formatDate(route.created, '%d-%m-%Y')}}</td> <td>{{formatDate(route.dated, '%d-%m-%Y')}}</td>
<th class="font gray align-right">{{$t('vehicle')}}</th> <th class="font gray align-right">{{$t('vehicle')}}</th>
<td>{{route.vehicleTradeMark}} {{route.vehicleModel}}</td> <td>{{route.vehicleTradeMark}} {{route.vehicleModel}}</td>
</tr> </tr>

View File

@ -1,6 +1,6 @@
SELECT r.id, SELECT r.id,
r.m3, r.m3,
r.created, r.dated,
r.time, r.time,
u.nickName userNickName, u.nickName userNickName,
v.tradeMark vehicleTradeMark, v.tradeMark vehicleTradeMark,

View File

@ -4,7 +4,7 @@ SELECT ep.id palletFk,
r.description `zone`, r.description `zone`,
COUNT(es.id) labels, COUNT(es.id) labels,
t.warehouseFk warehouseFk, t.warehouseFk warehouseFk,
dayname(r.created) `dayName`, dayname(r.dated) `dayName`,
rs.id <=> rm.roadmapStopFk isMatch rs.id <=> rm.roadmapStopFk isMatch
FROM vn.roadmapStop rs FROM vn.roadmapStop rs
JOIN vn.expeditionPallet ep ON ep.truckFk = rs.id JOIN vn.expeditionPallet ep ON ep.truckFk = rs.id