refs #6493 refactorizar-procedimientos-vn2008-parte_2 #2235

Merged
jbreso merged 39 commits from 6493-refactorizar-procedimientos-vn2008-parte_2 into dev 2024-04-24 05:18:59 +00:00
3 changed files with 48 additions and 43 deletions
Showing only changes of commit 92cd61460e - Show all commits

View File

@ -5,11 +5,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`available_traslate`
vWarehouseShipment INT)
proc: BEGIN
/**
* Calcular la disponibilidad dependiendo del almacen de origen y destino según la fecha
* Calcular la disponibilidad dependiendo del almacen
jbreso marked this conversation as resolved Outdated

Sobrepasa los carácteres máximos x linea, a parte que al final va un punto

Sobrepasa los carácteres máximos x linea, a parte que al final va un punto
* de origen y destino según la fecha.
*
jbreso marked this conversation as resolved
Review

Falta poner un espacio entre vWarehouse y Landing.

Además de que cuando se ponen los params, ninguna descripción del param debe de tener punto (viendo otros procs se puede comprobar)

Falta poner un espacio entre vWarehouse y Landing. Además de que cuando se ponen los params, ninguna descripción del param debe de tener punto (viendo otros procs se puede comprobar)
Review

vWarehouseLanding no se porque quieres el espacio la variable se llama asi, si pongo el espacio en esa también tendía que ponerlo en vWarehouseShipment?

vWarehouseLanding no se porque quieres el espacio la variable se llama asi, si pongo el espacio en esa también tendía que ponerlo en vWarehouseShipment?
Review

Vale no sorry, queria decir que la primera letra del comentario de la variable debe de estár en mayuscula, así en todos los del PR

Vale no sorry, queria decir que la primera letra del comentario de la variable debe de estár en mayuscula, así en todos los del PR
* @param vWarehouseLanding almacén de llegada.
* @param vDated la fecha para la cual se está calculando la disponibilidad de articulos.
* @param vWarehouseShipment almacén de destino.
* @param vWarehouseLanding almacén de llegada
jbreso marked this conversation as resolved Outdated

Aquí hay doble espacio, y sobrepasa los carácteres máximos, acortar

Aquí hay doble espacio, y sobrepasa los carácteres máximos, acortar

lA primera letra del comentario de la variable debe de estar en mayúscula, así en todos los del PR

lA primera letra del comentario de la variable debe de estar en mayúscula, así en todos los del PR
* @param vDated fecha del calculo para la disponibilidad de articulos
* @param vWarehouseShipment almacén de destino
*/
DECLARE vDatedFrom DATE;
DECLARE vDatedTo DATETIME;
@ -44,7 +45,8 @@ proc: BEGIN
AND NOT e.isRaid
GROUP BY c.itemFk;
jbreso marked this conversation as resolved
Review

Sobrepasa los carácteres máximos x linea

Sobrepasa los carácteres máximos x linea
-- Tabla con el ultimo dia de last_buy para cada producto que hace un replace de la anterior
-- Tabla con el ultimo dia de last_buy para cada producto
-- que hace un replace de la anterior.
CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
INSERT INTO tItemRange
@ -56,7 +58,8 @@ proc: BEGIN
LEFT JOIN tItemRange i ON t.itemFk = i.itemFk
WHERE t.warehouseFk = vWarehouseShipment
jbreso marked this conversation as resolved
Review

Sobrepasa los carácteres máximos x linea

Sobrepasa los carácteres máximos x linea
AND NOT e.isRaid
ON DUPLICATE KEY UPDATE tItemRange.dated = GREATEST(tItemRange.dated, tr.landed);
ON DUPLICATE KEY UPDATE tItemRange.dated = GREATEST(tItemRange.dated,
tr.landed);
CREATE OR REPLACE TEMPORARY TABLE tItemRangeLive
jbreso marked this conversation as resolved Outdated

No utilizar hacer uso de TIMESTAMP(ir.dated + INTERVAL it.life DAY, '23:59:59') , tenemos una función que hace eso util.dayEnd

No utilizar hacer uso de TIMESTAMP(ir.dated + INTERVAL it.life DAY, '23:59:59') , tenemos una función que hace eso util.dayEnd
(PRIMARY KEY (itemFk))
jbreso marked this conversation as resolved
Review

TIMESTAMPADD substituir por INTERVAL

TIMESTAMPADD substituir por INTERVAL
@ -67,18 +70,24 @@ proc: BEGIN
JOIN itemType it ON it.id = i.typeFk
HAVING dated >= vDatedFrom OR dated IS NULL;
-- Calcula el ATP
-- Calcula el ATP.
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
jbreso marked this conversation as resolved Outdated

Sobrepasa los carácteres máximos x linea, tabular

Sobrepasa los carácteres máximos x linea, tabular
(INDEX (itemFk,warehouseFk))
ENGINE = MEMORY
jbreso marked this conversation as resolved Outdated

eliminar esquema vn, no es necesario

eliminar esquema vn, no es necesario
SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
SELECT i.itemFk,
jbreso marked this conversation as resolved Outdated

porque se ha cambiado a item_id?

porque se ha cambiado a item_id?
vWarehouseLanding warehouseFk,
jbreso marked this conversation as resolved Outdated

Tab

Tab
i.shipped dated,
i.quantity
FROM itemTicketOut i
JOIN tItemRangeLive ir ON ir.itemFK = i.itemFk
WHERE i.shipped >= vDatedFrom
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
AND i.warehouseFk = vWarehouseLanding
UNION ALL
SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
SELECT b.itemFk,
vWarehouseLanding,
jbreso marked this conversation as resolved Outdated

Tab

Tab
t.landed,
b.quantity
FROM buy b
JOIN entry e ON b.entryFk = e.id
jbreso marked this conversation as resolved Outdated

Tab

Tab
JOIN travel t ON t.id = e.travelFk

View File

@ -7,13 +7,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`balance_create`(
IN vInterGroupSalesIncluded BOOLEAN)
BEGIN
/**
* Crea un balance financiero para una empresa durante un período de tiempo determinado
* Crea un balance financiero para una empresa durante
jbreso marked this conversation as resolved Outdated

Sobrepasa los carácteres máximos x linea, a parte que al final va un punto

Sobrepasa los carácteres máximos x linea, a parte que al final va un punto
* un período de tiempo determinado.
*
* @param vStartingMonth Mes de inicio del período
* @param vEndingMonth Mes de finalización del período
* @param vCompany Identificador de la empresa
* @param vIsConsolidated Indica si se trata de un balance consolidado
jbreso marked this conversation as resolved
Review

Sobrepasa los caracteres máximos, acortar

Sobrepasa los caracteres máximos, acortar
* @param vInterGroupSalesIncluded Indica si se incluyen las ventas dentro del grupo
* @param vInterGroupSalesIncluded Indica si se incluyen las ventas del grupo
*/
DECLARE intGAP INT DEFAULT 7;
DECLARE vYears INT DEFAULT 2;
@ -32,19 +33,20 @@ BEGIN
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
jbreso marked this conversation as resolved
Review

En el string donde hay una consulta SQL, linea 38, no poner la coma al principio, sino al final:

SELECT node.id,
CONCAT( REPEA...

A parte de quitar los AS (Menos el del CAST que es necesario).

Cast va en mayuscula.

Cambiar CONCAT( REPE... por CONCAT(REPE...

En el string donde hay una consulta SQL, linea 38, no poner la coma al principio, sino al final: SELECT node.id, CONCAT( REPEA... A parte de quitar los AS (Menos el del CAST que es necesario). Cast va en mayuscula. Cambiar `CONCAT( REPE...` por `CONCAT(REPE...`
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
-- Solicitamos la tabla tmp.nest, como base para el balance
-- Solicitamos la tabla tmp.nest, como base para el balance.
DROP TEMPORARY TABLE IF EXISTS tmp.nest;
EXECUTE IMMEDIATE CONCAT(
'CREATE TEMPORARY TABLE tmp.nest
SELECT node.id
,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1), node.name) AS name
,node.lft
,node.rgt
,COUNT(parent.id) - 1 as depth
,cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons
FROM ', vTable, ' AS node,
', vTable, ' AS parent
,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1),
node.name) name,
node.lft,
node.rgt,
COUNT(parent.id) - 1 depth,
CAST((node.rgt - node.lft - 1) / 2 AS DECIMAL) sons
FROM ', vTable, ' node,
', vTable, ' parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.id
ORDER BY node.lft')
@ -76,7 +78,8 @@ BEGIN
END IF;
jbreso marked this conversation as resolved
Review

Sobrepasa los caracteres máximos x linea

Sobrepasa los caracteres máximos x linea
-- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
-- Se calculan las facturas que intervienen,
-- para luego poder servir el desglose desde aqui.
CREATE OR REPLACE TEMPORARY TABLE tmp.balanceDetail
SELECT cr.companyFk receivingId,
ci.companyFk issuingId,
@ -90,30 +93,30 @@ BEGIN
JOIN tCompanyIssuing ci ON ci.companyFk = r.supplierFk
jbreso marked this conversation as resolved Outdated

companyFk

companyFk
WHERE COALESCE(r.bookEntried, r.booked, r.issued) >= vStartingDate
AND r.isBooked
GROUP BY expenseFk, year, month, ci.companyFk, cr.companyFk;
GROUP BY expenseFk, `year`, `month`, ci.companyFk, cr.companyFk;
INSERT INTO tmp.balanceDetail(
jbreso marked this conversation as resolved Outdated

Year y month son palabras reservadas, poner entre `

Revisa todo el PR aplicandolo

Year y month son palabras reservadas, poner entre ` Revisa todo el PR aplicandolo
receivingId,
issuingId,
year,
month,
`year`,
`month`,
expenseFk,
amount)
SELECT em.companyFk,
em.companyFk,
year,
month,
`year`,
`month`,
expenseFk,
jbreso marked this conversation as resolved Outdated

ON en mayúsculas
el JOIN está mal em.companyFk = em.companyFk enlazará todos los registros

ON en mayúsculas el JOIN está mal em.companyFk = em.companyFk enlazará todos los registros
SUM(em.amount)
FROM expenseManual em
JOIN tCompanyReceiving er ON er.companyFk = em.companyFk
WHERE year >= vStartingYear
AND month BETWEEN vStartingMonth AND vEndingMonth
GROUP BY expenseFk, year, month, em.companyFk;
WHERE `year` >= vStartingYear
AND `month` BETWEEN vStartingMonth AND vEndingMonth
GROUP BY expenseFk, `year`, `month`, em.companyFk;
DELETE FROM tmp.balanceDetail
WHERE month < vStartingMonth
OR month > vEndingMonth;
WHERE `month` < vStartingMonth
OR `month` > vEndingMonth;
-- Ahora el balance
EXECUTE IMMEDIATE CONCAT(
@ -130,8 +133,8 @@ BEGIN
JOIN (SELECT id, name
jbreso marked this conversation as resolved Outdated

JOIN (
(TAB) SELECT id, name
....
GROUP BY id
) g ON g.id = bnt.expenseFk COLLATE utf8_general_ci

JOIN ( (TAB) SELECT id, name .... GROUP BY id ) g ON g.id = bnt.expenseFk COLLATE utf8_general_ci
FROM expense
jbreso marked this conversation as resolved Outdated

No poner la , al principio, sino al final en la linea anterior

No poner la , al principio, sino al final en la linea anterior

El id de la tabla expense es PK no tiene sentido hacer subconsulta con el GROUP BY

El id de la tabla expense es PK no tiene sentido hacer subconsulta con el GROUP BY
GROUP BY id) g ON g.id = bnt.expenseFk COLLATE utf8_general_ci
SET b.expenseFk = g.id COLLATE utf8_general_ci
, b.expenseName = g.id COLLATE utf8_general_ci ;
SET b.expenseFk = g.id COLLATE utf8_general_ci,
b.expenseName = g.id COLLATE utf8_general_ci ;
-- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
WHILE vYears >= 0 DO
@ -208,8 +211,7 @@ BEGIN
SELECT *, CONCAT('',IFNULL(expenseFk,'')) newgasto
jbreso marked this conversation as resolved Outdated

Utilizar un solo DROP para dropear las 2 tablas.

Utilizar un solo DROP para dropear las 2 tablas.
FROM tmp.balance;
DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving;
DROP TEMPORARY TABLE IF EXISTS tCompanyIssuing;
DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving, tCompanyIssuing;
END$$
DELIMITER ;

View File

@ -2,14 +2,8 @@ CREATE OR REPLACE PROCEDURE `vn`.`balance_create`() BEGIN END;
CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByEntry`() BEGIN END;
CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByBuy`() BEGIN END;
GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`;
GRANT EXECUTE ON PROCEDURE vn.balance_create TO `hrBoss`;
GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`, `hrBoss`;
jbreso marked this conversation as resolved Outdated

Unificar GRANT EXECUTE ON PROCEDURE vn.balance_create TO financialBoss, hrBoss;

Así con los demás grants, solo tiene que haber un GRANT EXECUTE para cada proc

Unificar GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`, `hrBoss`; Así con los demás grants, solo tiene que haber un GRANT EXECUTE para cada proc
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `buyer`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `claimManager`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `employee`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `buyer`, `claimManager`, `employee`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `buyer`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `entryEditor`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `claimManager`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `employee`;
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `buyer`, `entryEditor`, `claimManager`, `employee`;