Created
December 22, 2021 09:05
-
-
Save Djourdain/d759393c57a7e85936592f612b316419 to your computer and use it in GitHub Desktop.
calcul_ca.SQL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE FUNCTION calcul_ca(v_dtdebut TIMESTAMP WITHOUT TIME ZONE, v_dtfin TIMESTAMP WITHOUT TIME ZONE, v_nb_jour_a_enlever INTEGER, | |
v_e_typestat CHARACTER VARYING, v_e_cdoper CHARACTER VARYING, v_type_select INTEGER) RETURNS VOID | |
LANGUAGE plpgsql | |
AS | |
$$ | |
DECLARE | |
v_dtdebut_n_1 TIMESTAMP; | |
v_dtfin_n_1 TIMESTAMP; | |
v_max_dtvaleur TIMESTAMP; | |
v_max_dtvaleur_n_1 TIMESTAMP; | |
v_cdsite VARCHAR(5); | |
v_dtvaleur TIMESTAMP; | |
v_nbtickets INTEGER; | |
v_nbtickets_hors_presse INTEGER; | |
v_nb_cca INTEGER; | |
v_qte INTEGER; | |
v_qte_lib INTEGER; | |
v_qte_pap INTEGER; | |
v_mtttc NUMERIC(19, 4); | |
v_mtrms NUMERIC(19, 4); | |
v_mttva NUMERIC(19, 4); | |
v_mtttc_lib NUMERIC(19, 4); | |
v_mtrms_lib NUMERIC(19, 4); | |
v_mttva_lib NUMERIC(19, 4); | |
v_mtttc_pap NUMERIC(19, 4); | |
v_mtrms_pap NUMERIC(19, 4); | |
v_mttva_pap NUMERIC(19, 4); | |
v_mtttc_cca NUMERIC(19, 4); | |
v_mtrms_cca NUMERIC(19, 4); | |
v_mttva_cca NUMERIC(19, 4); | |
v_ca_net_ht NUMERIC(19, 4); | |
v_ca_net_ht_lib NUMERIC(19, 4); | |
v_ca_net_ht_pap NUMERIC(19, 4); | |
v_panier NUMERIC(19, 4); | |
v_ca_net_ht_cca NUMERIC(19, 4); | |
v_ca_net_ttc NUMERIC(19, 4); | |
v_ca_net_ttc_lib NUMERIC(19, 4); | |
v_ca_net_ttc_pap NUMERIC(19, 4); | |
v_ca_brut_ttc NUMERIC(19, 4); | |
v_ca_brut_ht NUMERIC(19, 4); | |
v_ca_brut_ht_lib NUMERIC(19, 4); | |
v_ca_brut_ht_pap NUMERIC(19, 4); | |
v_nbcartesach INTEGER; | |
v_mtcartesach NUMERIC(19, 4); | |
v_nbcartesrenouv INTEGER; | |
v_mtcartesrenouv NUMERIC(19, 4); | |
v_nbabovigi INTEGER; | |
v_pctobjjour DECIMAL(8, 6); | |
v_pctobjjourlib DECIMAL(8, 6); | |
v_pctobjjourpap DECIMAL(8, 6); | |
v_mtobjmois NUMERIC(19, 4); | |
v_anneemois VARCHAR(6); | |
v_verrue INTEGER; | |
v_date29fevrier TIMESTAMP; | |
v_annee INTEGER; | |
v_nbrecpt_lib INTEGER; | |
v_nbrecpt_pap INTEGER; | |
v_nbret_lib INTEGER; | |
v_mtobjlib NUMERIC(19, 4); | |
v_mtobjpap NUMERIC(19, 4); | |
v_mtinteresmax NUMERIC(19, 4); | |
v_mtinteresmax_lib NUMERIC(19, 4); | |
v_mtinteresmax_pap NUMERIC(19, 4); | |
v_mtttc_kdo NUMERIC(19, 4); | |
v_mtrms_kdo NUMERIC(19, 4); | |
v_mttva_kdo NUMERIC(19, 4); | |
v_nb_kdo INTEGER; | |
v_ca_net_ht_kdo NUMERIC(19, 4); | |
v_nb_entrees INTEGER; | |
v_objmaxlib DECIMAL(20, 4); | |
v_objmaxpap DECIMAL(20, 4); | |
v_ca_brut_ht_tot_jour DECIMAL(20, 4); | |
v_nbcartepay INTEGER; | |
v_txencartpay DECIMAL(5, 2); | |
v_nbcarteens INTEGER; | |
v_nbcartegrat INTEGER; | |
v_nbliseuse INTEGER; | |
v_cadesign NUMERIC(19, 4); | |
v_nbtcksscarte INTEGER; | |
v_nbtcksscarte_ann INTEGER; | |
v_nbcartepay_ann INTEGER; | |
v_dteb_boucle TIMESTAMP; | |
v_dtfin_boucle TIMESTAMP; | |
v_dteb_boucle_n1 TIMESTAMP; | |
v_dtfin_boucle_n1 TIMESTAMP; | |
c_list_site CURSOR FOR | |
SELECT DISTINCT site.cdsite | |
FROM site | |
WHERE | |
coalesce(cdenvinfocai, 0) = 1; | |
BEGIN | |
DELETE | |
FROM tempdb.resultat_ca | |
WHERE | |
cdoper = v_e_cdoper; | |
DELETE | |
FROM tempdb.calcul_ca_n | |
WHERE | |
cdoper = v_e_cdoper; | |
DELETE | |
FROM tempdb.calcul_ca_n_1 | |
WHERE | |
cdoper = v_e_cdoper; | |
-- On r?cup?re la date max dans resultat_ca_jour | |
-- pour voir s'il faut r?cup?rer les donn?es dans histo_ventes | |
v_verrue := 0; | |
v_max_dtvaleur := LOCALTIMESTAMP; | |
-- si date de fin < date du jour on ne recherche que des données historisée | |
IF v_dtfin < current_date | |
THEN | |
v_max_dtvaleur := v_dtfin; | |
ELSE | |
IF v_e_typestat <> 'H' | |
THEN | |
v_max_dtvaleur := cast(to_char(current_date, 'YYYYMMDD') || ' 23:59:59' AS TIMESTAMP) ; | |
END IF; | |
END IF; | |
IF v_nb_jour_a_enlever = 0 | |
THEN | |
v_dtdebut_n_1 := v_dtdebut - INTERVAL '1 year'; | |
v_dtfin_n_1 := v_dtfin - INTERVAL '1 year'; | |
v_max_dtvaleur_n_1 := v_max_dtvaleur - INTERVAL '1 year'; | |
ELSE | |
v_dtdebut_n_1 := get_date_annee_precedente(v_dtdebut::DATE); | |
v_dtfin_n_1 := get_date_annee_precedente(v_dtfin::DATE); | |
v_max_dtvaleur_n_1 := get_date_annee_precedente(v_max_dtvaleur::DATE); | |
END IF; | |
v_annee := EXTRACT(YEAR FROM v_dtdebut); | |
-- on traite les journée avt la date J | |
IF v_dtdebut < current_date | |
THEN -- on ne traite pas la date du jour | |
v_dtfin_boucle := v_max_dtvaleur; | |
v_dtfin_boucle_n1 := v_max_dtvaleur_n_1; | |
IF v_dtfin >= current_date | |
THEN | |
v_dtfin_boucle := v_max_dtvaleur + INTERVAL '-1 day'; | |
v_dtfin_boucle_n1 := v_max_dtvaleur_n_1 + INTERVAL '-1 day'; | |
END IF; | |
PERFORM calcul_ca_insert_calculca_jour_nonj(v_dtdebut, v_dtfin_boucle, v_e_cdoper, 'N'); | |
PERFORM calcul_ca_insert_calculca_jour_nonj(v_dtdebut_n_1, v_dtfin_boucle_n1, v_e_cdoper, 'N1'); | |
END IF; | |
-- traitement date du jour | |
IF v_dtfin >= current_date | |
THEN | |
-- donnees horaires | |
IF v_e_typestat = 'H' | |
THEN | |
v_dteb_boucle := current_date; | |
v_dtfin_boucle := v_max_dtvaleur; | |
v_dteb_boucle_n1 := date_trunc('day', v_max_dtvaleur_n_1); | |
v_dtfin_boucle_n1 := v_max_dtvaleur_n_1 + now()::time; | |
ELSE | |
v_dteb_boucle := current_date; | |
v_dtfin_boucle := v_max_dtvaleur + INTERVAL '1 day'; | |
v_dteb_boucle_n1 := date_trunc('day', v_max_dtvaleur_n_1); | |
v_dtfin_boucle_n1 := v_max_dtvaleur_n_1 + INTERVAL '1 day'; | |
END IF; | |
OPEN c_list_site; | |
FETCH c_list_site INTO v_cdsite; | |
WHILE (found) | |
LOOP | |
PERFORM calcul_ca_insert_calculc_jourj(v_cdsite, v_dteb_boucle, v_dtfin_boucle, v_e_cdoper, 'N', v_type_select); | |
PERFORM calcul_ca_insert_calculc_jourj(v_cdsite, v_dteb_boucle_n1, v_dtfin_boucle_n1, v_e_cdoper, 'N1', v_type_select); | |
FETCH c_list_site INTO v_cdsite; | |
END LOOP; | |
CLOSE c_list_site; | |
END IF; -- fin traitement date du jour | |
INSERT INTO | |
tempdb.resultat_ca(cdsite, jour, dtvaleur, jour_n_1, dtvaleur_n_1, ca_net_ht_n, ca_net_ht_n_1, panier_n, panier_n_1, nb_ticket_n, | |
nb_ticket_n_1, nb_chq_cad_n, nb_chq_cad_n_1, mt_net_ht_cca_n, ca_net_ht_cca_n_1, ca_net_ttc_n, ca_net_ttc_n_1, ca_brut_ttc_n, | |
ca_brut_ttc_n_1, ca_brut_ht_n, ca_brut_ht_n_1, cdoper, qte_n, qte_n_1, nbcartesach, nbcartesach_n_1, mtcartesach, | |
mtcartesach_n_1, nbcartesrenouv, nbcartesrenouv_n_1, mtcartesrenouv, mtcartesrenouv_n_1, nbvigiab, nbvigiab_n_1, mtobjjour, | |
mtinteresmax, ca_brut_ht_lib, ca_brut_ht_lib_n_1, mtobjjour_lib, mtinteresmax_lib, ca_brut_ht_pap, ca_brut_ht_pap_n_1, | |
mtobjjour_pap, | |
mtinteresmax_pap, qte_lib, qte_lib_n_1, qte_recpt_lib, qte_recpt_lib_n_1, qte_ret_lib, qte_ret_lib_n_1, qte_pap, | |
qte_pap_n_1, qte_recpt_pap, qte_recpt_pap_n_1, nb_tickets_hors_presse, nb_tickets_hors_presse_n_1, nb_car_kdo, nb_car_kdo_n_1, | |
ca_net_ht_kdo, ca_net_ht_kdo_n_1, nb_entrees, nb_entrees_n_1, nbcartepay, nbcartepay_n_1, txencartpay, txencartpay_n_1, | |
nbcarteens, nbcarteens_n_1, nbcartegrat, nbcartegrat_n_1, nbliseuse, nbliseuse_n_1, cadesign, cadesign_n_1, | |
nbtcksscarte, nbtcksscarte_n_1) | |
SELECT | |
ca_n.cdsite, | |
ca_n.jour AS jour, | |
ca_n.dtvaleur AS dtvaleur, | |
ca_n1.jour AS jour_n_1, | |
ca_n1.dtvaleur AS dtvaleur_n_1, | |
ca_n.ca_net_ht AS ca_net_ht_n, | |
ca_n1.ca_net_ht AS ca_net_ht_n_1, | |
ca_n.panier AS panier_n, | |
ca_n1.panier AS panier_n_1, | |
ca_n.nb_tickets AS nb_ticket_n, | |
ca_n1.nb_tickets AS nb_ticket_n_1, | |
ca_n.nb_chq_cad AS nb_chq_cad_n, | |
ca_n1.nb_chq_cad AS nb_chq_cad_n_1, | |
ca_n.ca_net_ht_cca AS mt_net_ht_cca_n, | |
ca_n1.ca_net_ht_cca AS ca_net_ht_cca_n_1, | |
ca_n.ca_net_ttc AS ca_net_ttc_n, | |
ca_n1.ca_net_ttc AS ca_net_ttc_n_1, | |
ca_n.ca_brut_ttc AS ca_brut_ttc_n, | |
ca_n1.ca_brut_ttc AS ca_brut_ttc_n_1, | |
ca_n.ca_brut_ht AS ca_brut_ht_n, | |
ca_n1.ca_brut_ht AS ca_brut_ht_n_1, | |
v_e_cdoper, | |
ca_n.qte AS qte_n, | |
ca_n1.qte AS qte_n_1, | |
ca_n.nbcartesach AS nb_cartes_ach, | |
ca_n1.nbcartesach AS nb_cartes_ach_n_1, | |
ca_n.mtcartesach AS mt_cartes_ach, | |
ca_n1.mtcartesach AS mt_cartes_ach_n_1, | |
ca_n.nbcartesrenouv AS nb_cartes_renouv, | |
ca_n1.nbcartesrenouv AS nb_cartes_renouv_n_1, | |
ca_n.mtcartesrenouv AS mt_cartes_renouv, | |
ca_n1.mtcartesrenouv AS mt_cartes_renouv_n_1, | |
ca_n.nbvigiab AS nbvigiab, | |
ca_n1.nbvigiab AS nbvigiab_n_1, | |
CAST(ca_n.ca_brut_ht_tot_jour AS NUMERIC(19, 4)) AS mtobjjour, | |
coalesce(ca_n.mtinteresmax, cast(0 AS NUMERIC(19, 4))) AS mtinteresmax, | |
ca_n.ca_brut_ht_lib AS ca_brut_ht_lib, | |
ca_n1.ca_brut_ht_lib AS ca_brut_ht_lib_n_1, | |
CAST(coalesce(coalesce(ca_n.pctobjlib, ca_n.pctobjca), 0) * coalesce(ca_n.mtobjlib, cast(0 AS NUMERIC(19, 4))) AS NUMERIC(19, 4)) AS mtobjjour_lib, | |
CAST(ca_n.objmaxlib AS NUMERIC(19, 4)) AS mtinteresmax_lib, | |
ca_n.ca_brut_ht_pap AS ca_brut_ht_pap, | |
ca_n1.ca_brut_ht_pap AS ca_brut_ht_pap_n_1, | |
CAST(coalesce(coalesce(ca_n.pctobjpap, ca_n.pctobjca), 0) * coalesce(ca_n.mtobjpap, cast(0 AS NUMERIC(19, 4))) AS NUMERIC(19, 4)) AS mtobjjour_pap, | |
CAST(ca_n.objmaxpap AS NUMERIC(19, 4)) AS mtinteresmax_pap, | |
ca_n.qte_lib AS qte_lib, | |
ca_n1.qte_lib AS qte_lib_n_1, | |
ca_n.nbrecpt_lib AS qte_recpt_lib, | |
ca_n1.nbrecpt_lib AS qte_recpt_lib_n_1, | |
ca_n.nbret_lib AS qte_ret_lib, | |
ca_n1.nbret_lib AS qte_ret_lib_n_1, | |
ca_n.qte_pap AS qte_pap, | |
ca_n1.qte_pap AS qte_pap_n_1, | |
ca_n.nbrecpt_pap AS qte_recpt_pap, | |
ca_n1.nbrecpt_pap AS qte_recpt_pap_n_1, | |
CASE | |
WHEN coalesce(ca_n.nb_tickets_hors_presse, 0) > 0 | |
THEN ca_n.nb_tickets_hors_presse | |
ELSE 1 | |
END AS nb_tickets_hors_presse, | |
ca_n1.nb_tickets_hors_presse AS nb_tickets_hors_presse_n_1, | |
ca_n.nb_car_kdo AS nb_car_kdo, | |
ca_n1.nb_car_kdo AS nb_car_kdo_n_1, | |
ca_n.ca_net_ht_kdo AS ca_net_ht_kdo, | |
ca_n1.ca_net_ht_kdo AS ca_net_ht_kdo_n_1, | |
ca_n.nb_entrees AS nb_entrees, | |
ca_n1.nb_entrees AS nb_entrees_n_1, | |
ca_n.nbcartepay AS nbcartepay, | |
ca_n1.nbcartepay AS nbcartepay_n_1, | |
ca_n.txencartpay AS txencartpay, | |
ca_n1.txencartpay AS txencartpay_n_1, | |
ca_n.nbcarteens AS nbcarteens, | |
ca_n1.nbcarteens AS nbcarteens_n_1, | |
ca_n.nbcartegrat AS nbcartegrat, | |
ca_n1.nbcartegrat AS nbcartegrat_n_1, | |
ca_n.nbliseuse AS nbliseuse, | |
ca_n1.nbliseuse AS nbliseuse_n_1, | |
ca_n.cadesign AS cadesign, | |
CAST(ca_n1.cadesign AS INTEGER) AS cadesign_n_1, | |
ca_n.nbtcksscarte AS nbtcksscarte, | |
ca_n1.nbtcksscarte AS nbtcksscarte_n_1 | |
FROM | |
tempdb.calcul_ca_n ca_n | |
LEFT JOIN tempdb.calcul_ca_n_1 ca_n1 | |
ON ca_n.cdsite = ca_n1.cdsite | |
AND ca_n.cdoper = ca_n1.cdoper | |
AND ((ca_n1.dtvaleur = get_date_annee_precedente(ca_n.dtvaleur::DATE) AND v_nb_jour_a_enlever > 0) | |
OR (ca_n1.dtvaleur = (ca_n.dtvaleur - INTERVAL '1 year')) AND v_nb_jour_a_enlever = 0) | |
WHERE | |
ca_n.cdoper = v_e_cdoper; | |
RAISE NOTICE 'avt delete'; | |
DELETE | |
FROM tempdb.resultat_ca | |
WHERE | |
cdoper = v_e_cdoper | |
AND cdsite = 'JUN'; | |
RAISE NOTICE 'avt update '; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtinteresmax = coalesce(mtinteresmax_lib, cast(0 AS NUMERIC(19, 4))) + coalesce(mtinteresmax_pap, cast(0 AS NUMERIC(19, 4))) | |
WHERE | |
cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtobjjour = NULL | |
WHERE | |
mtobjjour = 0 | |
AND cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtobjjour_lib = NULL | |
WHERE | |
mtobjjour_lib = 0 | |
AND cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtobjjour_pap = NULL | |
WHERE | |
mtobjjour_pap = 0 | |
AND cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtinteresmax_lib = NULL | |
WHERE | |
mtinteresmax_lib = 0 | |
AND cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtinteresmax_pap = NULL | |
WHERE | |
mtinteresmax_pap = 0 | |
AND cdoper = v_e_cdoper; | |
UPDATE tempdb.resultat_ca | |
SET | |
mtinteresmax = NULL | |
WHERE | |
mtinteresmax = 0 | |
AND cdoper = v_e_cdoper; | |
END; | |
$$; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment