diff --git a/modules/monitor/back/methods/sales-monitor/salesFilter.js b/modules/monitor/back/methods/sales-monitor/salesFilter.js index 693ae122f..85945a57d 100644 --- a/modules/monitor/back/methods/sales-monitor/salesFilter.js +++ b/modules/monitor/back/methods/sales-monitor/salesFilter.js @@ -163,17 +163,14 @@ 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, + SELECT t.id, t.shipped, CAST(DATE(t.shipped) AS CHAR) AS shippedDate, t.nickname, @@ -183,27 +180,27 @@ module.exports = Self => { t.clientFk, t.totalWithoutVat, t.totalWithVat, - io.id AS invoiceOutId, + io.id 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, + 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 AS zoneLanding, - z.name AS zoneName, - z.id AS zoneFk, + z.hour zoneLanding, + z.name zoneName, + z.id 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 + 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 @@ -216,7 +213,33 @@ module.exports = Self => { 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`); + LEFT JOIN ( + SELECT zoneFk, + CAST(zoneHour + remainingVolume * 60 / speed AS time) etc + FROM ( + SELECT t.zoneFk, + IFNULL(zc.hour, z.hour) zoneHour, + SUM(IF(al.hasToRecalcPrice, sv.volume, 0)) remainingVolume, + GREATEST(IFNULL(lhp.m3, 0), IFNULL(dl.minSpeed, 0)) speed + FROM ticket t + JOIN ticketStateToday tst ON tst.ticket = t.id + JOIN state s ON s.id = tst.state + JOIN saleVolume sv ON sv.ticketFk = t.id + LEFT JOIN lastHourProduction lhp ON lhp.warehouseFk = t.warehouseFk + JOIN warehouse w ON w.id = t.warehouseFk + JOIN warehouseAlias wa ON wa.id = w.aliasFk + STRAIGHT_JOIN zone z ON z.id = t.zoneFk + LEFT JOIN 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 alertLevel al ON al.id = s.alertLevel + WHERE w.hasProduction + AND DATE(t.shipped) = util.VN_CURDATE() + GROUP BY t.zoneFk + ) sub + ) zed ON zed.zoneFk = t.zoneFk` + ); if (args.orderFk) { stmt.merge({ diff --git a/modules/order/back/methods/order/filter.js b/modules/order/back/methods/order/filter.js index 44d8ccb10..27484acb9 100644 --- a/modules/order/back/methods/order/filter.js +++ b/modules/order/back/methods/order/filter.js @@ -140,40 +140,71 @@ 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(zoneHour) * 60 + MINUTE(zoneHour) MINUTE + AS time + ) hourTheoretical, + CAST(zoneHour + remainingVolume * 60 / speed AS time) hourEffective + FROM ( + SELECT t.zoneFk, + IFNULL(zc.hour, z.hour) zoneHour, + CAST(SUM(sv.volume) AS DECIMAL(5, 1)) totalVolume, + SUM(IF(al.hasToRecalcPrice, sv.volume, 0)) remainingVolume, + GREATEST(IFNULL(lhp.m3, 0), IFNULL(dl.minSpeed, 0)) speed + FROM ticket t + JOIN ticketStateToday tst ON tst.ticket = t.id + JOIN state s ON s.id = tst.state + JOIN saleVolume sv ON sv.ticketFk = t.id + LEFT JOIN lastHourProduction lhp ON lhp.warehouseFk = t.warehouseFk + JOIN warehouse w ON w.id = t.warehouseFk + JOIN warehouseAlias wa ON wa.id = w.aliasFk + STRAIGHT_JOIN zone z ON z.id = t.zoneFk + LEFT JOIN 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 alertLevel al ON al.id = s.alertLevel + WHERE w.hasProduction + AND DATE(t.shipped) = util.VN_CURDATE() + GROUP BY t.zoneFk + ) sub + ) zed ON zed.zoneFk = t.zoneFk + `); stmt.merge(conn.makeWhere(filter.where)); stmt.merge(`GROUP BY id`); diff --git a/modules/zone/back/model-config.json b/modules/zone/back/model-config.json index 261a89902..43d2cb570 100644 --- a/modules/zone/back/model-config.json +++ b/modules/zone/back/model-config.json @@ -35,9 +35,6 @@ "ZoneWarehouse": { "dataSource": "vn" }, - "ZoneEstimatedDelivery": { - "dataSource": "vn" - }, "ZoneLog": { "dataSource": "vn" } diff --git a/modules/zone/back/models/zone-estimated-delivery.json b/modules/zone/back/models/zone-estimated-delivery.json deleted file mode 100644 index 399de8f58..000000000 --- a/modules/zone/back/models/zone-estimated-delivery.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "ZoneEstimatedDelivery", - "base": "VnModel", - "options": { - "mysql": { - "table": "zoneEstimatedDelivery" - } - }, - "properties": { - "zoneFk": { - "id": true, - "type": "number" - }, - "hourTheoretical": { - "type": "date" - }, - "totalVolume": { - "type": "number" - }, - "remainingVolume": { - "type": "number" - }, - "speed": { - "type": "number" - }, - "hourEffective": { - "type": "date" - }, - "minutesLess": { - "type": "date" - }, - "etc": { - "type": "date" - } - - }, - "relations": { - "zone": { - "type": "belongsTo", - "model": "Zone", - "foreignKey": "zoneFk" - } - } -} \ No newline at end of file