refs #6493 refactorizar-procedimientos-vn2008-parte_2 #2235
|
@ -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
|
||||
* de origen y destino según la fecha.
|
||||
*
|
||||
jbreso marked this conversation as resolved
guillermo
commented
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)
jbreso
commented
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?
guillermo
commented
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
guillermo
commented
Aquí hay doble espacio, y sobrepasa los carácteres máximos, acortar Aquí hay doble espacio, y sobrepasa los carácteres máximos, acortar
guillermo
commented
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
guillermo
commented
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
guillermo
commented
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
carlosap
commented
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
carlosap
commented
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
guillermo
commented
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
carlosap
commented
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
carlosap
commented
porque se ha cambiado a item_id? porque se ha cambiado a item_id?
|
||||
vWarehouseLanding warehouseFk,
|
||||
jbreso marked this conversation as resolved
Outdated
guillermo
commented
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
guillermo
commented
Tab Tab
|
||||
t.landed,
|
||||
b.quantity
|
||||
FROM buy b
|
||||
JOIN entry e ON b.entryFk = e.id
|
||||
jbreso marked this conversation as resolved
Outdated
guillermo
commented
Tab Tab
|
||||
JOIN travel t ON t.id = e.travelFk
|
||||
|
|
|
@ -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
guillermo
commented
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
guillermo
commented
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
guillermo
commented
En el string donde hay una consulta SQL, linea 38, no poner la coma al principio, sino al final: SELECT node.id, A parte de quitar los AS (Menos el del CAST que es necesario). Cast va en mayuscula. Cambiar 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
guillermo
commented
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
carlosap
commented
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
guillermo
commented
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
carlosap
commented
ON en mayúsculas 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
guillermo
commented
JOIN ( 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
guillermo
commented
No poner la , al principio, sino al final en la linea anterior No poner la , al principio, sino al final en la linea anterior
carlosap
commented
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
guillermo
commented
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 ;
|
|
@ -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
guillermo
commented
Unificar GRANT EXECUTE ON PROCEDURE vn.balance_create TO 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`;
|
Sobrepasa los carácteres máximos x linea, a parte que al final va un punto