#5835 getTotals fixed #1854

Merged
jorgep merged 7 commits from 5835-fixGetTotals into dev 2023-11-24 09:56:22 +00:00
38 changed files with 133 additions and 102 deletions
Showing only changes of commit 048e3089cd - Show all commits

View File

@ -5,11 +5,19 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2350.01] - 2023-12-14
### Added
### Changed
### Fixed
## [2348.01] - 2023-11-30 ## [2348.01] - 2023-11-30
### Added ### Added
- (Ticket -> Adelantar) Permite mover lineas sin generar negativos - (Ticket -> Adelantar) Permite mover lineas sin generar negativos
- (Ticket -> Adelantar) Permite modificar la fecha de los tickets - (Ticket -> Adelantar) Permite modificar la fecha de los tickets
- (Trabajadores -> Notificaciones) Nueva sección (lilium)
### Changed ### Changed
### Fixed ### Fixed

View File

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`,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_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,60 +163,68 @@ 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 TEMPORARY TABLE tmp.filter CREATE OR REPLACE TEMPORARY TABLE tmp.filter
(PRIMARY KEY (id)) (PRIMARY KEY (id))
ENGINE = MEMORY ENGINE = MEMORY
SELECT SELECT t.id,
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, t.warehouseFk,
t.warehouseFk, 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 LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN address a ON a.id = t.addressFk LEFT JOIN province p ON p.id = a.provinceFk
LEFT JOIN province p ON p.id = a.provinceFk LEFT JOIN warehouse w ON w.id = t.warehouseFk
LEFT JOIN warehouse w ON w.id = t.warehouseFk LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk LEFT JOIN ticketState ts ON ts.ticketFk = t.id
LEFT JOIN ticketState ts ON ts.ticketFk = t.id LEFT JOIN state st ON st.id = ts.stateFk
LEFT JOIN state st ON st.id = ts.stateFk 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

@ -139,46 +139,65 @@ module.exports = Self => {
filter = mergeFilters(filter, {where}); filter = mergeFilters(filter, {where});
const stmts = []; const stmts = [];
let stmt; let stmt;
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
stmts.push(`SET SESSION optimizer_search_depth = 0`);
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 SELECT o.id,
o.id, o.total,
o.total, o.date_send landed,
o.date_send landed, o.date_make created,
o.date_make created, o.customer_id clientFk,
o.customer_id clientFk, o.agency_id agencyModeFk,
o.agency_id agencyModeFk, o.address_id addressFk,
o.address_id addressFk, o.company_id companyFk,
o.company_id companyFk, o.source_app sourceApp,
o.source_app sourceApp, o.confirmed isConfirmed,
o.confirmed isConfirmed, c.name clientName,
c.name clientName, c.salesPersonFk,
c.salesPersonFk, u.nickname workerNickname,
u.nickname workerNickname, u.name name,
u.name name, co.code companyCode,
co.code companyCode, 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 LEFT JOIN client c ON c.id = o.customer_id
LEFT JOIN client c ON c.id = o.customer_id 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 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`);
stmt.merge(conn.makePagination(filter)); stmt.merge(conn.makePagination(filter));
stmts.push(stmt); stmts.push(stmt);
stmts.push(`SET SESSION optimizer_search_depth = @_optimizer_search_depth`);
stmt = new ParameterizedSQL(`SELECT * FROM tmp.filter`); stmt = new ParameterizedSQL(`SELECT * FROM tmp.filter`);
stmt.merge(conn.makeOrderBy(filter.order)); stmt.merge(conn.makeOrderBy(filter.order));

View File

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

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "salix-back", "name": "salix-back",
"version": "23.48.01", "version": "23.50.01",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "salix-back", "name": "salix-back",
"version": "23.48.01", "version": "23.50.01",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"axios": "^1.2.2", "axios": "^1.2.2",

View File

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