|
|
return: text
|
|
|
lang: plpgsql
|
|
|
src: |
|
|
|
DECLARE --select * from eco.p_stock order by date_fin desc
|
|
|
result TEXT;
|
|
|
BEGIN
|
|
|
DROP TABLE IF EXISTS w_mouvements_articles;
|
|
|
CREATE TABLE w_mouvements_articles AS SELECT * from eco.p_mouvements_articles;
|
|
|
|
|
|
ANALYSE w_mouvements_articles;
|
|
|
ANALYSE eco.p_stock;
|
|
|
|
|
|
CREATE INDEX w_mvt_1 ON w_mouvements_articles using btree (article_id);
|
|
|
CREATE INDEX w_mvt_2 ON w_mouvements_articles using btree (site_id);
|
|
|
CREATE INDEX w_mvt_3 ON w_mouvements_articles using btree (lieu_id);
|
|
|
CREATE INDEX w_mvt_4 ON w_mouvements_articles using btree (date);
|
|
|
|
|
|
PERFORM base.cti_execute(
|
|
|
'UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
est_premier_jour = sub.est_premier_jour,
|
|
|
est_dernier_jour = sub.est_dernier_jour,
|
|
|
date_fin = sub.date_fin
|
|
|
FROM (SELECT
|
|
|
oid,
|
|
|
CASE
|
|
|
WHEN rank() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.lieu_id,date ORDER BY w_mouvements_articles.oid) = 1 THEN 1
|
|
|
ELSE 0
|
|
|
END AS est_premier_jour,
|
|
|
CASE
|
|
|
WHEN cume_dist() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.lieu_id, w_mouvements_articles.date ORDER BY w_mouvements_articles.oid) = 1 THEN 1
|
|
|
ELSE 0
|
|
|
END AS est_dernier_jour,
|
|
|
CASE
|
|
|
WHEN cume_dist() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.lieu_id, w_mouvements_articles.date ORDER BY w_mouvements_articles.oid) = 1
|
|
|
THEN lead(w_mouvements_articles.date) OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.lieu_id ORDER BY w_mouvements_articles.date) - interval ''1 day''
|
|
|
ELSE date
|
|
|
END AS date_fin
|
|
|
FROm w_mouvements_articles
|
|
|
) sub
|
|
|
WHERE sub.oid = w_mouvements_articles.oid;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET date_fin = date_trunc(''month'',now()) - interval ''1 day'' + interval ''1 month''
|
|
|
WHERE date_fin IS NULL
|
|
|
;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
stock_quantite_debut = 0,
|
|
|
stock_quantite_fin = 0
|
|
|
;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
stock_quantite_debut = p_stock.stock_quantite_fin - w_stock_var.entree_var + w_stock_var.sortie_var,
|
|
|
stock_quantite_fin = p_stock.stock_quantite_fin - w_stock_var.entree_var + w_stock_var.sortie_var + w_mouvements_articles.entree_quantite - w_mouvements_articles.sortie_quantite
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
oid,
|
|
|
site_id,
|
|
|
lieu_id,
|
|
|
article_id,
|
|
|
date,
|
|
|
date_trunc(''month'',date) as month,
|
|
|
sum(entree_quantite) OVER (PARTITION BY site_id, lieu_id, article_id, date_trunc(''month'',date) ORDER BY date DESC, oid DESC) AS entree_var,
|
|
|
sum(sortie_quantite) OVER (PARTITION BY site_id, lieu_id, article_id, date_trunc(''month'',date) ORDER BY date DESC, oid DESC) AS sortie_var
|
|
|
FROM w_mouvements_articles
|
|
|
ORDER BY 1,2,3,4,5
|
|
|
) w_stock_var
|
|
|
JOIN
|
|
|
eco.p_stock
|
|
|
ON 1=1
|
|
|
AND w_stock_var.article_id = p_stock.article_id
|
|
|
AND w_stock_var.site_id = p_stock.site_id
|
|
|
AND w_stock_var.lieu_id = p_stock.lieu_id
|
|
|
AND date_trunc(''month'',date_fin) = month
|
|
|
WHERE 1=1
|
|
|
AND w_mouvements_articles.article_id = w_stock_var.article_id
|
|
|
AND w_mouvements_articles.site_id = w_stock_var.site_id
|
|
|
AND w_mouvements_articles.lieu_id = w_stock_var.lieu_id
|
|
|
AND w_mouvements_articles.oid = w_stock_var.oid
|
|
|
',1)
|
|
|
WHERE (SELECT count(DISTINCT lieu_id) FROM eco.p_stock) > 1
|
|
|
;
|
|
|
|
|
|
PERFORM base.cti_execute(
|
|
|
'UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
est_premier_jour = sub.est_premier_jour,
|
|
|
est_dernier_jour = sub.est_dernier_jour,
|
|
|
date_fin = sub.date_fin
|
|
|
FROM (SELECT
|
|
|
oid,
|
|
|
CASE
|
|
|
WHEN rank() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, date ORDER BY w_mouvements_articles.oid) = 1 THEN 1
|
|
|
ELSE 0
|
|
|
END AS est_premier_jour,
|
|
|
CASE
|
|
|
WHEN cume_dist() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.date ORDER BY w_mouvements_articles.oid) = 1 THEN 1
|
|
|
ELSE 0
|
|
|
END AS est_dernier_jour,
|
|
|
CASE
|
|
|
WHEN cume_dist() OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id, w_mouvements_articles.date ORDER BY w_mouvements_articles.oid) = 1
|
|
|
THEN lead(w_mouvements_articles.date) OVER (PARTITION BY w_mouvements_articles.article_id, w_mouvements_articles.site_id ORDER BY w_mouvements_articles.date) - interval ''1 day''
|
|
|
ELSE date
|
|
|
END AS date_fin
|
|
|
FROm w_mouvements_articles
|
|
|
) sub
|
|
|
WHERE sub.oid = w_mouvements_articles.oid;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET date_fin = date_trunc(''month'',now()) - interval ''1 day'' + interval ''1 month''
|
|
|
WHERE date_fin IS NULL
|
|
|
;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
stock_quantite_debut = 0,
|
|
|
stock_quantite_fin = 0
|
|
|
;
|
|
|
|
|
|
UPDATE w_mouvements_articles
|
|
|
SET
|
|
|
stock_quantite_debut = p_stock.stock_quantite_fin - w_stock_var.entree_var + w_stock_var.sortie_var,
|
|
|
stock_quantite_fin = p_stock.stock_quantite_fin - w_stock_var.entree_var + w_stock_var.sortie_var + w_mouvements_articles.entree_quantite - w_mouvements_articles.sortie_quantite
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
oid,
|
|
|
site_id,
|
|
|
lieu_id,
|
|
|
article_id,
|
|
|
date,
|
|
|
date_trunc(''month'',date) as month,
|
|
|
sum(entree_quantite) OVER (PARTITION BY site_id, article_id, date_trunc(''month'',date) ORDER BY date DESC, oid DESC) AS entree_var,
|
|
|
sum(sortie_quantite) OVER (PARTITION BY site_id, article_id, date_trunc(''month'',date) ORDER BY date DESC, oid DESC) AS sortie_var
|
|
|
FROM w_mouvements_articles
|
|
|
ORDER BY 1,2,3,4,5
|
|
|
) w_stock_var
|
|
|
JOIN
|
|
|
eco.p_stock
|
|
|
ON 1=1
|
|
|
AND w_stock_var.article_id = p_stock.article_id
|
|
|
AND w_stock_var.site_id = p_stock.site_id
|
|
|
AND date_trunc(''month'',date_fin) = month
|
|
|
WHERE 1=1
|
|
|
AND w_mouvements_articles.article_id = w_stock_var.article_id
|
|
|
AND w_mouvements_articles.site_id = w_stock_var.site_id
|
|
|
AND w_mouvements_articles.oid = w_stock_var.oid
|
|
|
',1)
|
|
|
WHERE (SELECT count(DISTINCT lieu_id) FROM eco.p_stock) = 1
|
|
|
;
|
|
|
|
|
|
TRUNCATE eco.p_mouvements_articles;
|
|
|
|
|
|
INSERT INTO eco.p_mouvements_articles SELECT * FROM w_mouvements_articles;
|
|
|
|
|
|
ANALYSE eco.p_mouvements_articles;
|
|
|
REINDEX TABLE eco.p_mouvements_articles;
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|