CREATE OR REPLACE
ALGORITHM = UNDEFINED VIEW `vn`.`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`;