Browse Source

initial commit

master
ymi 2 months ago
commit
b212ed5cf1
382 changed files with 134371 additions and 0 deletions
  1. +67
    -0
      cmd.sql
  2. +0
    -0
      db/data/.gitkeep
  3. +70
    -0
      db/data/dbdata_eco_t_classes.SQL
  4. +120
    -0
      db/data/dbdata_eco_t_classes_sections.SQL
  5. +19071
    -0
      db/data/dbdata_eco_t_classification_atc.SQL
  6. +47
    -0
      db/data/dbdata_eco_t_divers.SQL
  7. +83
    -0
      db/data/dbdata_eco_t_indicateur_theme.SQL
  8. +489
    -0
      db/data/dbdata_eco_t_indicateurs.SQL
  9. +115
    -0
      db/data/dbdata_eco_t_listes.SQL
  10. +111
    -0
      db/data/dbdata_eco_t_listes_tables.SQL
  11. +174
    -0
      db/data/dbdata_eco_t_rapports.SQL
  12. +4434
    -0
      db/data/dbdata_eco_t_rapports_rubriques.SQL
  13. +71
    -0
      db/data/dbdata_eco_t_type_article_cti.SQL
  14. +4
    -0
      db/data2/dbdata_eco_t_classes.csv
  15. +17
    -0
      db/data2/dbdata_eco_t_classes_sections.csv
  16. +18957
    -0
      db/data2/dbdata_eco_t_classification_atc.csv
  17. +3
    -0
      db/data2/dbdata_eco_t_divers.csv
  18. +30
    -0
      db/data2/dbdata_eco_t_indicateur_theme.csv
  19. +145
    -0
      db/data2/dbdata_eco_t_indicateurs.csv
  20. +10
    -0
      db/data2/dbdata_eco_t_listes.csv
  21. +74
    -0
      db/data2/dbdata_eco_t_listes_tables.csv
  22. +34
    -0
      db/data2/dbdata_eco_t_rapports.csv
  23. +4232
    -0
      db/data2/dbdata_eco_t_rapports_rubriques.csv
  24. +7
    -0
      db/data2/dbdata_eco_t_type_article_cti.csv
  25. +1096
    -0
      db/dbsetup_data_eco.XML
  26. +4
    -0
      db/dvp_data_apply.bat
  27. +2
    -0
      db/dvp_data_extract.bat
  28. +5
    -0
      db/hooks/install_db_last_jobs.sql
  29. +122
    -0
      db/hooks/post_install_data.sql
  30. +3
    -0
      db/hooks/pre_install_data.sql
  31. +8
    -0
      db/hooks/pre_install_schema.sql
  32. +123
    -0
      db/schema2/functions/cti_create_repartition.yaml
  33. +33
    -0
      db/schema2/functions/cti_eval~tx.yaml
  34. +204
    -0
      db/schema2/functions/cti_extract_used_oids.yaml
  35. +651
    -0
      db/schema2/functions/cti_gen_referentiel_cacic~tx,tx.yaml
  36. +365
    -0
      db/schema2/functions/cti_gen_referentiel_cti.yaml
  37. +1397
    -0
      db/schema2/functions/cti_get_columns_from_indicateurs~tx.yaml
  38. +116
    -0
      db/schema2/functions/cti_initialize_tables.yaml
  39. +61
    -0
      db/schema2/functions/cti_now~tx,tx.yaml
  40. +51
    -0
      db/schema2/functions/cti_prepare_rapport_calc_indicator~tx,tx,in,bi,bi,bi,bi,bi,bi.yaml
  41. +72
    -0
      db/schema2/functions/cti_prepare_rapport_comp~bi.yaml
  42. +178
    -0
      db/schema2/functions/cti_prepare_rapport_indicateurs~bi,tx,tx.yaml
  43. +59
    -0
      db/schema2/functions/cti_prepare_rapport_month~bi.yaml
  44. +88
    -0
      db/schema2/functions/cti_prepare_rapport~bi.yaml
  45. +540
    -0
      db/schema2/functions/cti_reorganize_classification_atc.yaml
  46. +94
    -0
      db/schema2/functions/cti_reorganize_fournisseur.yaml
  47. +454
    -0
      db/schema2/functions/cti_reorganize_indicateur_condition.yaml
  48. +108
    -0
      db/schema2/functions/cti_reorganize_pole.yaml
  49. +27
    -0
      db/schema2/functions/cti_reorganize_profils.yaml
  50. +43
    -0
      db/schema2/functions/cti_reorganize_profils_table~tx,tx.yaml
  51. +353
    -0
      db/schema2/functions/cti_reorganize_sejour.yaml
  52. +654
    -0
      db/schema2/functions/cti_reorganize_sejour_ucd_lpp.yaml
  53. +233
    -0
      db/schema2/functions/cti_reorganize_type_article_cti.yaml
  54. +92
    -0
      db/schema2/functions/cti_reorganize_ucd_lpp_c.yaml
  55. +45
    -0
      db/schema2/functions/cti_to_date~ae,ae,ae,ae.yaml
  56. +193
    -0
      db/schema2/functions/cti_update_mvt_mnt_stock.yaml
  57. +164
    -0
      db/schema2/functions/cti_update_mvt_qte_stock.yaml
  58. +229
    -0
      db/schema2/functions/cti_update_mvt_stock.yaml
  59. +229
    -0
      db/schema2/functions/cti_update_schema_classes~tx.yaml
  60. +705
    -0
      db/schema2/functions/cti_view_after~tx,tx.yaml
  61. +5
    -0
      db/schema2/sequences/s_article_fournisseur.yaml
  62. +5
    -0
      db/schema2/sequences/s_article_reference_cacic.yaml
  63. +5
    -0
      db/schema2/sequences/s_article_reference_cti.yaml
  64. +5
    -0
      db/schema2/sequences/s_articles.yaml
  65. +5
    -0
      db/schema2/sequences/s_categories_articles.yaml
  66. +5
    -0
      db/schema2/sequences/s_centres_responsabilites.yaml
  67. +5
    -0
      db/schema2/sequences/s_chart.yaml
  68. +5
    -0
      db/schema2/sequences/s_classes.yaml
  69. +5
    -0
      db/schema2/sequences/s_classes_sections.yaml
  70. +5
    -0
      db/schema2/sequences/s_classification_atc.yaml
  71. +5
    -0
      db/schema2/sequences/s_codes_emploi.yaml
  72. +5
    -0
      db/schema2/sequences/s_commandes.yaml
  73. +5
    -0
      db/schema2/sequences/s_compte.yaml
  74. +5
    -0
      db/schema2/sequences/s_dashboard.yaml
  75. +5
    -0
      db/schema2/sequences/s_dashboard_filter.yaml
  76. +5
    -0
      db/schema2/sequences/s_dashboard_onglet.yaml
  77. +5
    -0
      db/schema2/sequences/s_dashboard_widget.yaml
  78. +5
    -0
      db/schema2/sequences/s_facture.yaml
  79. +5
    -0
      db/schema2/sequences/s_familles_articles.yaml
  80. +5
    -0
      db/schema2/sequences/s_fournisseur_reference_cacic.yaml
  81. +5
    -0
      db/schema2/sequences/s_fournisseur_reference_cti.yaml
  82. +5
    -0
      db/schema2/sequences/s_fournisseurs.yaml
  83. +5
    -0
      db/schema2/sequences/s_gestionnaires.yaml
  84. +5
    -0
      db/schema2/sequences/s_indicateur_condition.yaml
  85. +5
    -0
      db/schema2/sequences/s_indicateur_condition_table.yaml
  86. +5
    -0
      db/schema2/sequences/s_indicateur_serie.yaml
  87. +5
    -0
      db/schema2/sequences/s_indicateur_theme.yaml
  88. +5
    -0
      db/schema2/sequences/s_indicateurs.yaml
  89. +5
    -0
      db/schema2/sequences/s_lettre_budgetaire.yaml
  90. +5
    -0
      db/schema2/sequences/s_lieux.yaml
  91. +5
    -0
      db/schema2/sequences/s_lignes_commandes.yaml
  92. +5
    -0
      db/schema2/sequences/s_lignes_facture.yaml
  93. +5
    -0
      db/schema2/sequences/s_listes.yaml
  94. +5
    -0
      db/schema2/sequences/s_listes_tables.yaml
  95. +5
    -0
      db/schema2/sequences/s_mouvements_articles.yaml
  96. +5
    -0
      db/schema2/sequences/s_pole_rule.yaml
  97. +5
    -0
      db/schema2/sequences/s_profils_comptables.yaml
  98. +5
    -0
      db/schema2/sequences/s_prorata_tva.yaml
  99. +5
    -0
      db/schema2/sequences/s_rapports.yaml
  100. +5
    -0
      db/schema2/sequences/s_reference_input.yaml

+ 67
- 0
cmd.sql View File

@ -0,0 +1,67 @@
TRUNCATE econom.p_commandes;
INSERT INTO econom.p_commandes(
numero,
date_commande,
objet,
reference,
date_livraison_prevue,
etat_reception,
date_reception,
etat_liquidation,
fournisseur_id,
gestionnaire_id,
lieu_facturation_id,
lieu_livraison_id,
montant_commande_ht,
montant_commande_remise,
montant_commande_tva,
montant_commande_port,
montant_commande_total,
montant_liquidation_ht,
montant_liquidation_remise,
montant_liquidation_tva,
montant_liquidation_port,
montant_liquidation_total)
SELECT
trim(to_char(FUNCDE,'000000')) AS numero,
econom.cti_to_date(FUSCRE, FUACRE, FUMCRE, FUJCRE) AS date_commande,
trim(FUOBFU) AS objet,
trim(FUREFC) AS reference,
econom.cti_to_date(FUSLIP, FUALIP, FUMLIP, FUJLIP) AS date_livraison_prevue,
CASE WHEN FUTOP4 = '1' THEN 'T' ELSE 'N' END AS etat_reception,
econom.cti_to_date(FUSLIV, FUALIV, FUMLIV, FUJLIV) AS date_reception,
CASE WHEN FUTOP5 = '1' THEN 'T' ELSE 'N' END AS etat_liquidation,
COALESCE(t_fournisseurs.oid,0) AS fournisseur_id,
COALESCE(t_gestionnaires.oid,0) AS gestionnaire_id,
COALESCE(t_lieux_facturation.oid,0) AS lieu_facturation_id,
COALESCE(t_lieux_livraison.oid,0) AS lieu_livraison_id,
FUMHTC AS montant_commande_ht,
FUMREC AS montant_commande_remise,
FUMTVC AS montant_commande_tva,
FUMPOC AS montant_commande_port,
FUMTCC AS montant_commande_total,
FUMHTL AS montant_liquidation_ht,
FUMREL AS montant_liquidation_remise,
FUMTVL AS montant_liquidation_tva,
FUMPOL AS montant_liquidation_port,
FUMTCL AS montant_liquidation_total
FROM prod_shs.pigefi180_FUP01
LEFT JOIN econom.t_fournisseurs ON FUIUFN = t_fournisseurs.code_original
LEFT JOIN econom.t_gestionnaires ON FUKGEC = t_gestionnaires.code_original
LEFT JOIN econom.t_lieux t_lieux_facturation ON FULFAC = t_lieux_facturation.code_original
LEFT JOIN econom.t_lieux t_lieux_livraison ON FULLIV = t_lieux_livraison.code_original
WHERE FUSCRE = 20 and FUACRE BETWEEN 08 AND 20
select * FROM econom.p_commandes order by article_id, date
limit 1000

+ 0
- 0
db/data/.gitkeep View File


+ 70
- 0
db/data/dbdata_eco_t_classes.SQL View File

@ -0,0 +1,70 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_classes.oid,
t_classes.code,
t_classes.texte,
t_classes.is_cti,
t_classes.sequence,
CASE WHEN NOT (t_classes.sequence = 30 AND t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN t_listes_tables.code ELSE 'TYA' END as table_code
FROM
eco.t_classes,
eco.t_listes_tables
WHERE 1=1
AND (is_cti = '1' OR (t_classes.code ilike 'CTI_%' AND t_classes.code NOT IN ('CTI_CPTLETBUD','CTI_CPTVOTE','CTI_CPTRCV','CTI_UFCR','CTI_UFUM','CTI_UFSERS','CTI_UFSITE')))
AND table_id = t_listes_tables.oid
ORDER BY t_classes.code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
is_cti,
sequence,
table_code
)
VALUES
(1, 'CTI_CLE_REP', 'Clef de répartition CTI', '0', 30, 'TYA'),
(1, 'CTI_ESS_ART80', 'Lstes des articles répartis représentant 80% des stocks en montant', '1', 1, 'ART'),
(1, 'CTI_TYPMVT', 'Types de mouvements CTI', '0', 1, 'TYM')
;
-- 3/3 : Màj de la table iCTI
UPDATE eco.t_classes SET
code = w_dbsetup.code,
texte = w_dbsetup.texte,
table_id = t_listes_tables.oid,
is_cti = w_dbsetup.is_cti
FROM
w_dbsetup,
eco.t_listes_tables
WHERE
w_dbsetup.table_code = t_listes_tables.code
AND t_classes.sequence = w_dbsetup.sequence
AND t_classes.table_id = t_listes_tables.oid ;
INSERT INTO eco.t_classes(code, texte, table_id, is_cti, sequence)
SELECT
w_dbsetup.code,
w_dbsetup.texte,
t_listes_tables.oid,
w_dbsetup.is_cti,
w_dbsetup.sequence
FROM
w_dbsetup,
eco.t_listes_tables
WHERE
w_dbsetup.table_code = t_listes_tables.code
AND t_listes_tables.oid::text || '-' || w_dbsetup.sequence::text NOT IN (SELECT table_id::text || '-' || sequence::text FROM eco.t_classes) AND w_dbsetup.texte NOT LIKE '*SUPPRIME%'
AND NOT (
-- pour la classe de cle de répartition
w_dbsetup.code = 'CTI_CLE_REP'
-- la valeur de la cle est initialisée
AND (SELECT code FROM eco.t_classes WHERE code = 'CTI_CLE_REP') IS NOT NULL
)

+ 120
- 0
db/data/dbdata_eco_t_classes_sections.SQL View File

@ -0,0 +1,120 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_classes_sections.oid,
t_classes_sections.code,
t_classes_sections.texte,
t_classes_sections.condition,
t_classes_sections.include_code,
t_classes_sections.exclude_code,
CASE WHEN NOT (t_classes.sequence != 30 AND t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN t_listes_tables.code ELSE 'TYA' END as table_code,
t_classes.sequence as classe_sequence
FROM
eco.t_classes_sections,
eco.t_classes,
eco.t_listes_tables
WHERE 1=1
AND t_classes_sections.classe_id = t_classes.oid
AND table_id = t_listes_tables.oid
AND (t_classes.is_cti = '1' OR (t_classes.code ilike 'CTI_%' AND t_classes.code NOT IN ('CTI_CPTLETBUD','CTI_CPTVOTE','CTI_CPTRCV','CTI_UFCR','CTI_UFUM','CTI_UFSERS','CTI_UFSITE')))
ORDER BY
t_listes_tables.code,
t_classes.sequence,
t_classes_sections.code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
condition,
include_code,
exclude_code,
table_code,
classe_sequence
)
VALUES
(1, 'ATE', 'Atelier', '', '0', '0', 'TYA', 30),
(1, 'CUI', 'Cuisine', '', '0', '0', 'TYA', 30),
(1, 'DM', 'Dispositifs Médicaux', '', '0', '0', 'TYA', 30),
(1, 'DMI', 'Dispositifs Médicaux Implantables', '', '0', '0', 'TYA', 30),
(1, 'ECO', 'Economat', '', '0', '0', 'TYA', 30),
(1, 'LIN', 'Lingerie', '', '0', '0', 'TYA', 30),
(1, 'MED', 'Médicaments', '', '0', '0', 'TYA', 30),
(1, 'PAR', 'Parapharmacie', '', '0', '0', 'TYA', 30),
(1, '00', 'Livraison', '', '', '', 'TYM', 1),
(1, '01', 'Consommations', '', '', '', 'TYM', 1),
(1, '02', 'Pertes', '', '', '', 'TYM', 1),
(1, '99', 'Autres', '', '', '', 'TYM', 1),
(1, '11', 'Régularisation livraison', '', '', '', 'TYM', 1),
(1, '12', 'Retour', '', '', '', 'TYM', 1),
(1, '13', 'Avoir', '', '', '', 'TYM', 1),
(1, '30', 'Régularisation inventaire', '', '', '', 'TYM', 1)
;
-- 3/3 : Màj de la table iCTI
-- Sections à supprimer -> Sections CTI non-livrées
DROP TABLE IF EXISTS w_del_sections
;
CREATE TEMP TABLE w_del_sections as (
SELECT oid FROM eco.t_classes_sections
WHERE classe_id IN (
SELECT
t_classes.oid
FROM eco.t_classes
LEFT JOIN w_dbsetup ON w_dbsetup.code = t_classes_sections.code
WHERE 1=1
AND is_cti = '1'
AND w_dbsetup.code IS NULL
)
);
DELETE FROM eco.t_classes_sections_elements
WHERE section_id IN (SELECT oid FROM w_del_sections);
DELETE FROM eco.t_classes_sections
WHERE oid IN (SELECT oid FROM w_del_sections);
UPDATE eco.t_classes_sections SET
texte = w_dbsetup.texte,
condition = w_dbsetup.condition,
exclude_code = w_dbsetup.exclude_code,
include_code = w_dbsetup.include_code
FROM w_dbsetup, eco.t_classes, eco.t_listes_tables
WHERE t_classes.oid = t_classes_sections.classe_id
AND t_listes_tables.oid = t_classes.table_id
AND w_dbsetup.code||'@'||w_dbsetup.classe_sequence||'@'||w_dbsetup.table_code = t_classes_sections.code||'@'||t_classes.sequence||'@'||t_listes_tables.code
AND (
t_classes_sections.texte IS DISTINCT FROM w_dbsetup.texte
OR t_classes_sections.condition IS DISTINCT FROM w_dbsetup.condition
OR t_classes_sections.exclude_code IS DISTINCT FROM w_dbsetup.exclude_code
OR t_classes_sections.include_code IS DISTINCT FROM w_dbsetup.include_code
);
INSERT INTO eco.t_classes_sections(code, texte, classe_id, include_code, exclude_code)
SELECT
w_dbsetup.code,
w_dbsetup.texte,
t_classes.oid,
w_dbsetup.include_code,
w_dbsetup.exclude_code
FROM
w_dbsetup
JOIN eco.t_listes_tables ON (w_dbsetup.table_code = t_listes_tables.code
-- ou s'il s'agit de la classe des cles
OR (classe_sequence = 30 AND t_listes_tables.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)))
JOIN eco.t_classes ON 1=1
AND t_classes.table_id = t_listes_tables.oid
AND t_classes.sequence = w_dbsetup.classe_sequence
WHERE w_dbsetup.code||'@'||w_dbsetup.classe_sequence||'@'|| CASE WHEN w_dbsetup.classe_sequence != 30 THEN w_dbsetup.table_code ELSE (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') END
NOT IN (
SELECT t_classes_sections.code||'@'||t_classes.sequence||'@'||CASE WHEN w_dbsetup.classe_sequence != 30 THEN t_listes_tables.code ELSE (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') END
FROM eco.t_classes_sections
JOIN eco.t_classes ON t_classes.oid = t_classes_sections.classe_id
JOIN eco.t_listes_tables ON t_listes_tables.oid = t_classes.table_id)
;

+ 19071
- 0
db/data/dbdata_eco_t_classification_atc.SQL
File diff suppressed because it is too large
View File


+ 47
- 0
db/data/dbdata_eco_t_divers.SQL View File

@ -0,0 +1,47 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_divers.code,
t_divers.texte,
t_divers.valeur,
t_divers.valeur_date::text,
t_divers.description
FROM
eco.t_divers
WHERE t_divers.code IN ('CLE_REPARTITION', 'UPDATE PMSI')
ORDER BY code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
code,
texte,
valeur,
valeur_date,
description
)
VALUES
('CLE_REPARTITION', 'Code de la table à utiliser pour créer la classe utilisée comme clé de répartition', 'TYA', '1970-01-01', 'TYA (type d''articles, défaut), ART (articles), CAA (cétgories articles), CPT (compte), FAA (familles articles), LIE (lieu)'),
('UPDATE PMSI', 'Mise à jour des données PMSI à partir des données Gestion Economique', '0', '1970-01-01', '0: Désactivé 1: Activé')
;
-- 3/3 : Màj de la table iCTI
-- Mise à jour des données
INSERT INTO eco.t_divers(
code,
texte,
valeur,
valeur_date,
description
)
SELECT
code,
texte,
valeur,
CASE WHEN valeur_date = '' THEN NULL::date ELSE valeur_date::date END AS valeur_date,
description
FROM w_dbsetup
WHERE code NOT IN (SELECT code FROM eco.t_divers)

+ 83
- 0
db/data/dbdata_eco_t_indicateur_theme.SQL View File

@ -0,0 +1,83 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_indicateur_theme.oid,
t_indicateur_theme.code,
t_indicateur_theme.texte,
t_indicateur_theme.level,
COALESCE(t_indicateur_parent_theme.code,'') AS parent_code
FROM eco.t_indicateur_theme
LEFT JOIN eco.t_indicateur_theme t_indicateur_parent_theme ON t_indicateur_theme.parent_id = t_indicateur_parent_theme.oid
ORDER BY 2 LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
level,
parent_code
)
VALUES
(1, '--0', 'Source', 1, ''),
(1, '--1', 'Thèmes principaux', 1, ''),
(1, '--2', 'Période', 1, ''),
(1, '--3', 'Rapports', 1, ''),
(1, '--4', 'Type de donnée', 1, ''),
(1, '--DDATE', 'Date date', 2, '--2'),
(1, '--DDATE_COMMANDE', 'Date date_commande', 2, '--2'),
(1, '--DDATE_ENGAGEMENT', 'Date date_engagement', 2, '--2'),
(1, '--DDATE_FIN', 'Date date_fin', 2, '--2'),
(1, '--R1', 'Rapports CTI', 2, '--3'),
(1, '--R10002', 'Essentiels CTI', 3, '--R1'),
(1, '--R10003', 'Dispositifs Médicaux', 3, '--R1'),
(1, '--R10004', 'Dispostifs Médicaux Implantables', 3, '--R1'),
(1, '--R10005', 'Médicaments', 3, '--R1'),
(1, '--R10006', 'Parapharmacie', 3, '--R1'),
(1, '--R10007', 'Economat', 3, '--R1'),
(1, '--R10008', 'Cuisine', 3, '--R1'),
(1, '--R10009', 'Lingerie', 3, '--R1'),
(1, '--R10010', 'Atelier', 3, '--R1'),
(1, '--R3', 'Rapports Etablissement', 2, '--3'),
(1, '--R30011', 'CTI Portfolio ', 3, '--R3'),
(1, '--S1', 'Indicateurs CTI', 2, '--0'),
(1, '--S2', 'Indicateurs Groupe', 2, '--0'),
(1, '--S3', 'Indicateurs spécifiques Etablissement', 2, '--0'),
(1, '--T0010', 'Mouvements', 2, '--1'),
(1, '--T0020', 'Commandes', 2, '--1'),
(1, '--T0030', 'Stocks mensuels', 2, '--1'),
(1, '1QTE', 'Quantité', 2, '--4'),
(1, '2MNT', 'Montants', 2, '--4'),
(1, '3DUR', 'Durées', 2, '--4'),
(1, '4TAUX', 'Taux', 2, '--4'),
(1, '5STOCK', 'Stocks', 2, '--4')
;
-- 3/3 : Màj de la table iCTI
INSERT INTO eco.t_indicateur_theme (code, texte, level)
SELECT code, texte, level
FROM w_dbsetup
WHERE code NOT IN (SELECT code FROM eco.t_indicateur_theme WHERE t_indicateur_theme.code IS NOT NULL)
;
UPDATE eco.t_indicateur_theme SET
texte = w_dbsetup.texte,
level = w_dbsetup.level,
parent_id = COALESCE(t_indicateur_parent_theme.oid,0)
FROM w_dbsetup
LEFT JOIN eco.t_indicateur_theme t_indicateur_parent_theme ON w_dbsetup.parent_code = t_indicateur_parent_theme.code
WHERE t_indicateur_theme.code = w_dbsetup.code AND
(
t_indicateur_theme.texte IS DISTINCT FROM w_dbsetup.texte OR
t_indicateur_theme.level IS DISTINCT FROM w_dbsetup.level OR
t_indicateur_theme.parent_id IS DISTINCT FROM COALESCE(t_indicateur_parent_theme.oid,0)
)
;
SELECT base.cti_reorganize_indicateur_theme('eco')
;

+ 489
- 0
db/data/dbdata_eco_t_indicateurs.SQL View File

@ -0,0 +1,489 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT t_indicateurs.oid,
t_indicateurs.texte,
t_indicateurs.table_name,
t_indicateurs.column_name,
t_indicateurs.is_cti,
t_indicateurs.entete,
t_indicateurs.code,
t_indicateurs.total_function,
t_indicateurs.output_format,
t_indicateurs.width,
t_indicateurs.entete_etendue,
t_indicateurs.dimension_date_1,
t_indicateurs.dimension_date_2,
t_indicateurs.dimension_date_3,
t_indicateurs.dimension_date_4,
t_indicateurs.dimension_date_5,
t_indicateurs.dimension_date,
t_indicateurs_1.code as indicateur_associe_1_code,
t_indicateurs_2.code as indicateur_associe_2_code,
t_indicateurs_3.code as indicateur_associe_3_code,
t_indicateurs_4.code as indicateur_associe_4_code,
t_indicateurs_5.code as indicateur_associe_5_code,
t_indicateurs_6.code as indicateur_associe_6_code,
t_indicateurs_7.code as indicateur_associe_7_code,
t_indicateurs_8.code as indicateur_associe_8_code,
t_indicateurs_9.code as indicateur_associe_9_code,
t_indicateurs_10.code as indicateur_associe_10_code,
t_indicateurs_11.code as indicateur_associe_11_code,
t_indicateurs_12.code as indicateur_associe_12_code,
t_indicateurs_13.code as indicateur_associe_13_code,
t_indicateurs_14.code as indicateur_associe_14_code,
t_indicateurs_15.code as indicateur_associe_15_code,
t_indicateurs_16.code as indicateur_associe_16_code,
t_indicateurs_17.code as indicateur_associe_17_code,
t_indicateurs_18.code as indicateur_associe_18_code,
t_indicateurs_19.code as indicateur_associe_19_code,
t_indicateurs_20.code as indicateur_associe_20_code,
t_indicateurs_reference.code as indicateur_reference_code,
t_indicateurs.is_template,
t_indicateurs_template.code as indicateur_template_code,
COALESCE(t_indicateurs.variable_definition[1],'') AS variable_definition_1,
COALESCE(t_indicateurs.variable_definition[2],'') AS variable_definition_2,
COALESCE(t_indicateurs.variable_definition[3],'') AS variable_definition_3,
COALESCE(t_indicateurs.variable_value[1],'') AS variable_value_1,
COALESCE(t_indicateurs.variable_value[2],'') AS variable_value_2,
COALESCE(t_indicateurs.variable_value[3],'') AS variable_value_3,
COALESCE(t_indicateurs.variable_value_text[1],'') AS variable_value_text_1,
COALESCE(t_indicateurs.variable_value_text[2],'') AS variable_value_text_2,
COALESCE(t_indicateurs.variable_value_text[3],'') AS variable_value_text_3,
t_indicateurs.description,
COALESCE(t_indicateur_theme_1.code,'') AS theme_1_code,
COALESCE(t_indicateur_theme_2.code,'') AS theme_2_code,
COALESCE(t_indicateur_theme_3.code,'') AS theme_3_code,
COALESCE(t_indicateur_theme_4.code,'') AS theme_4_code,
COALESCE(t_indicateur_theme_5.code,'') AS theme_5_code,
COALESCE(t_indicateur_theme_6.code,'') AS theme_6_code,
COALESCE(t_indicateur_theme_7.code,'') AS theme_7_code,
COALESCE(t_indicateur_theme_8.code,'') AS theme_8_code,
COALESCE(t_indicateur_theme_9.code,'') AS theme_9_code,
t_indicateurs.is_hide
FROM eco.t_indicateurs
LEFT JOIN eco.t_indicateurs t_indicateurs_1 ON (t_indicateurs.indicateur_associe_1_id = t_indicateurs_1.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_2 ON (t_indicateurs.indicateur_associe_2_id = t_indicateurs_2.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_3 ON (t_indicateurs.indicateur_associe_3_id = t_indicateurs_3.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_4 ON (t_indicateurs.indicateur_associe_4_id = t_indicateurs_4.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_5 ON (t_indicateurs.indicateur_associe_5_id = t_indicateurs_5.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_6 ON (t_indicateurs.indicateur_associe_6_id = t_indicateurs_6.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_7 ON (t_indicateurs.indicateur_associe_7_id = t_indicateurs_7.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_8 ON (t_indicateurs.indicateur_associe_8_id = t_indicateurs_8.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_9 ON (t_indicateurs.indicateur_associe_9_id = t_indicateurs_9.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_10 ON (t_indicateurs.indicateur_associe_10_id = t_indicateurs_10.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_11 ON (t_indicateurs.indicateur_associe_11_id = t_indicateurs_11.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_12 ON (t_indicateurs.indicateur_associe_12_id = t_indicateurs_12.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_13 ON (t_indicateurs.indicateur_associe_13_id = t_indicateurs_13.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_14 ON (t_indicateurs.indicateur_associe_14_id = t_indicateurs_14.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_15 ON (t_indicateurs.indicateur_associe_15_id = t_indicateurs_15.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_16 ON (t_indicateurs.indicateur_associe_16_id = t_indicateurs_16.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_17 ON (t_indicateurs.indicateur_associe_17_id = t_indicateurs_17.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_18 ON (t_indicateurs.indicateur_associe_18_id = t_indicateurs_18.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_19 ON (t_indicateurs.indicateur_associe_19_id = t_indicateurs_19.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_20 ON (t_indicateurs.indicateur_associe_20_id = t_indicateurs_20.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_reference ON (t_indicateurs.indicateur_reference_id = t_indicateurs_reference.oid)
LEFT JOIN eco.t_indicateurs t_indicateurs_template ON (t_indicateurs.indicateur_template_id = t_indicateurs_template.oid)
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_1 ON t_indicateur_theme_1.oid = t_indicateurs.theme_id[1]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_2 ON t_indicateur_theme_2.oid = t_indicateurs.theme_id[2]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_3 ON t_indicateur_theme_3.oid = t_indicateurs.theme_id[3]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_4 ON t_indicateur_theme_4.oid = t_indicateurs.theme_id[4]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_5 ON t_indicateur_theme_5.oid = t_indicateurs.theme_id[5]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_6 ON t_indicateur_theme_6.oid = t_indicateurs.theme_id[6]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_7 ON t_indicateur_theme_6.oid = t_indicateurs.theme_id[7]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_8 ON t_indicateur_theme_6.oid = t_indicateurs.theme_id[8]
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_9 ON t_indicateur_theme_6.oid = t_indicateurs.theme_id[9]
WHERE 1=1
AND t_indicateurs.is_cti = '1'
AND t_indicateurs.indicateur_reference_id = 0
ORDER BY t_indicateurs.code
LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
texte,
table_name,
column_name,
is_cti,
entete,
code,
total_function,
output_format,
width,
entete_etendue,
dimension_date_1,
dimension_date_2,
dimension_date_3,
dimension_date_4,
dimension_date_5,
dimension_date,
indicateur_associe_1_code,
indicateur_associe_2_code,
indicateur_associe_3_code,
indicateur_associe_4_code,
indicateur_associe_5_code,
indicateur_associe_6_code,
indicateur_associe_7_code,
indicateur_associe_8_code,
indicateur_associe_9_code,
indicateur_associe_10_code,
indicateur_associe_11_code,
indicateur_associe_12_code,
indicateur_associe_13_code,
indicateur_associe_14_code,
indicateur_associe_15_code,
indicateur_associe_16_code,
indicateur_associe_17_code,
indicateur_associe_18_code,
indicateur_associe_19_code,
indicateur_associe_20_code,
indicateur_reference_code,
is_template,
indicateur_template_code,
variable_definition_1,
variable_definition_2,
variable_definition_3,
variable_value_1,
variable_value_2,
variable_value_3,
variable_value_text_1,
variable_value_text_2,
variable_value_text_3,
description,
theme_1_code,
theme_2_code,
theme_3_code,
theme_4_code,
theme_5_code,
theme_6_code,
theme_7_code,
theme_8_code,
theme_9_code,
is_hide
)
VALUES
(1, 'Nombre d''articles couvrant 80% des stocks', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:[TEMPLATE_VALUE_1]]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Code de ventilation', '', '', '', '', '', '', '', '', 'Nombre d''articles couvrant 80% des stocks en quantité', '1QTE', '', '', '', '', '', '', '', '', '1'),
(1, 'Nombre d''articles couvrant 80% des stocks - Atelier', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:ATE]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#ATE', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'ATE', '', '', 'Atelier', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - Cuisine', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:CUI]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#CUI', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'CUI', '', '', 'Cuisine', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - DispositifsMédicaux', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:DM]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#DM', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'DM', '', '', 'Dispositifs Médicaux', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - DispositifsMédicauxImplantables', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:DMI]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#DMI', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'DMI', '', '', 'Dispositifs Médicaux Implantables', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - Economat', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:ECO]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#ECO', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'ECO', '', '', 'Economat', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - Lingerie', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:LIN]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#LIN', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'LIN', '', '', 'Lingerie', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - Médicaments', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:MED]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#MED', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'MED', '', '', 'Médicaments', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks - Parapharmacie', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:PAR]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80MNT#PAR', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_ART80MNT', '', '', '', 'PAR', '', '', 'Parapharmacie', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles couvrant 80% des stocks', 'V_STOCK_MENSUEL_X', 'DISTINCT CASE WHEN article_id IN ([LISTE:CTI_ESS_ART80]) THEN article_id ELSE null END', '1', 'Nb Art. 80% stock Qté.', 'CTI_ART80QTE', 'COUNT', '', 50, 'Nombre des articles couvrant 80% des stocks', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre d''articles couvrant 80% des stocks en quantité', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Code article', 'TABART', 'article_code', '1', 'Article', 'CTI_ARTCODE', '*LIST', '', 50, 'Code article', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code de l''article', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre moyen d''articles par fournisseur', '*CALC', 'base.cti_division([1],[2])', '1', 'Moy Art. / four.', 'CTI_ARTFOUMOY', '*CALC', '', 50, 'Nombre moyen d''articles par fournisseur', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBART', 'CTI_NBFOU#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre moyen d''articles par fournisseur', '1QTE', '', '', '', '', '', '', '', '', '1'),
(1, 'Oid article', 'TABART', 'CASE WHEN COUNT(DISTINCT article_id) = 1 THEN MAX(article_id) ELSE 0 END', '1', '', 'CTI_ARTOID', '*LIST', '', 0, '', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Désignation de l''article', 'TABART', 'CASE WHEN COUNT(DISTINCT article_texte) = 1 THEN MAX(article_texte) ELSE '''' END', '1', 'Article', 'CTI_ARTTXT', '*LIST', '', 200, 'Désignation de l''article', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Désignation de l''article', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Date de commande', 'V_LIGNES_COMMANDES_X', 'CASE WHEN COUNT(DISTINCT(date_commande)) = 1 THEN MAX(date_commande)::text ELSE '''' END', '1', 'Date de commande', 'CTI_COMDATE', '*LIST', 'DD/MM/YYYY', 65, 'Date de commande', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Date de commande', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Délai livraison moyen', '*CALC', 'base.cti_division([1],[2])', '1', 'Moy Délai livraison', 'CTI_DELLIVMOY', '*CALC', '', 80, 'Délai livraison moyen', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBJLIV', 'CTI_NB_LIGCOM#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '3DUR', '2MNT', '1QTE', '', '', '', '', '', '', '0'),
(1, 'Délai paiement moyen founisseur', '*CALC', 'base.cti_division([1],[2])', '1', 'Moy Délai payment', 'CTI_DELPAYMOY', '*CALC', '', 50, 'Délai paiement moyen founisseur', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBJPAYFOU#2', 'CTI_NB_LIGCOM#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Délai paiement moyen founisseur', '3DUR', '2MNT', '1QTE', '', '', '', '', '', '', '1'),
(1, 'Date d''engagement', 'V_LIGNES_COMMANDES_X', 'CASE WHEN COUNT(DISTINCT(date_engagement)) = 1 THEN MAX(date_engagement)::text ELSE '''' END', '1', 'Date d''engagement', 'CTI_ENGDATE', '*LIST', 'DD/MM/YYYY', 65, 'Date d''engagement', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Date d''engagement', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Erreur', 'V_SEP__X', '', '1', '', 'CTI_ERROR', 'SEP', '#', 50, '', '0', ' ', ' ', ' ', ' ', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre moyen de factures par fournisseur', '*CALC', 'base.cti_division([1],[2])', '1', 'Moy Fac. / Four.', 'CTI_FACFOUMOY', '*CALC', '', 50, 'Nombre moyen de factures par fournisseur', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBFAC#2', 'CTI_NBFOU#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre moyen de factures par fournisseur', '1QTE', '', '', '', '', '', '', '', '', '1'),
(1, 'Fréquence de rupture de stocks', '*CALC', 'base.cti_division([2],[1])', '1', 'Fr. ruptures', 'CTI_FRRUPSTO', '*CALC', '#j', 50, 'Fréquence de rupture de stocks', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBRUPSTO', 'CTI_NBJPER', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Duréee en jours / Nombre de rupture de stocks', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Code du Gestionnaire', 'TABGEST', 'CASE WHEN COUNT( DISTINCT gestionnaire_code) = 1 THEN MAX(gestionnaire_code) ELSE '''' END', '1', 'Gest', 'CTI_GESTCODE', '*LIST', '40', 30, 'Code Gestionnaire', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code du Gestionnaire', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Code du lieu', 'TABLIEU', 'CASE WHEN COUNT(DISTINCT lieu_code) = 1 THEN MAX(lieu_code) ELSE '''' END', '1', 'Lieu', 'CTI_LIEUCODE', '*LIST', '', 30, 'Code du lieu', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code du lieu', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Marge brute', '*CALC', '[3]*(base.cti_division([1],[3])-base.cti_division([2],[4]))', '1', 'Marge brute', 'CTI_MBRUT', '*CALC', '#,00E', 100, 'Marge brute', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MTSORTTCSTO-2#01', 'CTI_MTSORTTCSTO-2#01', 'CTI_NBSORSTO#01', 'CTI_MTENTTTCSTO-2#00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d''entrées)', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant HT Pertes et Périmés', '*CALC', '[1] + [2]', '1', '', 'CTI_MNTHTPEPE', '*CALC', '#,00E', 100, '', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTHTUFPER', 'CTI_MTSORHT-2#02', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant HT pertes et périmés', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant HT dans UF de Périmés', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN unite_fonctionnelle_id IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt HT UF Pér.', 'CTI_MNTHTUFPER', 'SUM', '#,00E', 100, 'Montant HT UF Périmés', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant HT des pertes par rapport à la liste CTI des UF de pertes', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant payé HT', 'V_LIGNES_COMMANDES_X', 'montant_liquidation_ht', '1', 'Mt payé. HT', 'CTI_MNTPAYHT', 'SUM', '#,00E', 100, 'Montant payé HT', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant Liquidation HT', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant payé TTC', 'V_LIGNES_COMMANDES_X', 'montant_liquidation_ttc', '1', 'Mt payé. TTC', 'CTI_MNTPAYTTC', 'SUM', '#,00E', 100, 'Montant payé TTC', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant Liquidation TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur stock début période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_debut = periode THEN stock_valeur_debut ELSE 0 END', '1', 'Valeur Stock début', 'CTI_MNTSTODEB', 'SUMFIRSTMONTH', '#,00E', 100, 'Valeur stock début période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant stock calculé début période', 'V_MOUVEMENTS_STOCKS_X', 'round(CASE WHEN gere_en_stock != ''0'' AND date < periode AND est_dernier_jour = ''1'' THEN stock_quantite_fin*prix_unitaire_calcule WHEN gere_en_stock != ''0'' AND date = periode AND est_premier_jour = ''1'' THEN stock_quantite_debut*prix_unitaire_calcule ELSE 0 END,10)', '1', 'Mt Stock début', 'CTI_MNTSTODEBACHAT', 'SUMFIRSTMONTH', '#,00E', 100, 'Montant HT stock calculé début période', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant des stocks en début de période basé sur le pump CTI', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant stock calculé début', 'V_MOUVEMENTS_ARTICLES_X', 'round(stock_quantite_debut*prix_unitaire_calcule,10)', '1', 'Mt Stock fin', 'CTI_MNTSTODEBMVT', 'SUM', '#,00E', 100, 'Montant TTC stock calculé en début de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant stock en début de mouvement basé sur le pump CTI', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur stock fin période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_fin = toperiode THEN stock_valeur_fin ELSE 0 END', '1', 'Valeur Stock fin', 'CTI_MNTSTOFIN', 'SUMLASTMONTH', '#,00E', 100, 'Valeur stock fin période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant stock calculé fin période', 'V_MOUVEMENTS_STOCKS_X', 'round(CASE WHEN gere_en_stock != ''0'' AND toperiode <= date_fin AND est_dernier_jour = 1 THEN stock_quantite_fin*prix_unitaire_calcule ELSE 0 END,10)', '1', 'Mt Stock fin', 'CTI_MNTSTOFINACHAT', 'SUMLASTMONTH', '#,00E', 100, 'Montant HT stock calculé fin période', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant stock fin de période basé sur le pump CTI', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant stock calculé fin', 'V_MOUVEMENTS_ARTICLES_X', '(MAX(ARRAY[CASE WHEN est_dernier_jour = ''1'' THEN date::text ELSE ''1900-01-01''::text END,round(stock_quantite_fin*prix_unitaire_calcule,10)::text]))[2]::numeric', '1', 'Mt Stock fin', 'CTI_MNTSTOFINMVT', '', '#,00E', 100, 'Montant HT stock calculé en fin de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant stock en fin de mouvement basé sur le pump CTI', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur stock moyen (mouvements)', '*CALC', 'base.cti_division([1]+[2],2)', '1', 'Mnt. Stock moy.', 'CTI_MNTSTOMOYMVT', '*CALC', '#,00E', 100, 'Valeur stock moyen (mouvements)', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTODEBACHAT', 'CTI_MNTSTOFINACHAT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Valeur de stock moyen (valeur stock début (achat) + valeur stock fin (achat) /2)', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur stock moyen', '*CALC', 'base.cti_division([1]+[2],2)', '1', 'Mnt. Stock moy.', 'CTI_MNTSTOMY', '*CALC', '#,00E', 100, 'Valeur stock moyen', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTODEB', 'CTI_MNTSTOFIN', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Valeur de stock moyen (valeur stock début (achat) + valeur stock fin (achat) /2)', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur TTC stock début période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_debut = periode THEN stock_valeur_debut_ttc ELSE 0 END', '1', 'Valeur TTC Stock début', 'CTI_MNTTTCSTODEB', 'SUMFIRSTMONTH', '#,00E', 100, 'Valeur TTC stock début période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Valeur TTC stock fin période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_fin = toperiode THEN stock_valeur_fin_ttc ELSE 0 END', '1', 'Valeur TTC Stock fin', 'CTI_MNTTTCSTOFIN', 'SUMLASTMONTH', '#,00E', 100, 'Valeur TTC stock fin période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant des achats', 'V_LIGNES_COMMANDES_X', 'montant_liquidation_ttc', '1', 'Mt achats', 'CTI_MTACHA', 'SUM', '#,00E', 100, 'Montant des achats', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant des achats', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Panier Moyen (HT)', '*CALC', 'base.cti_division([1],[2])', '1', 'Panier Moy. HT', 'CTI_MTCMOYHT', '*CALC', '#E', 100, 'Panier Moyen (HT)', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MTCOMHT#2', 'CTI_NBCOM#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Panier moyen HT (montant commandé ht / nombre de commandes)', '2MNT', '1QTE', '', '', '', '', '', '', '', '0'),
(1, 'Montant commandé HT', 'V_LIGNES_COMMANDES_X', 'montant_commande_ht', '1', 'Mt Com. HT', 'CTI_MTCOMHT', 'SUM', '#,00E', 100, 'Montant Commandé HT', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant Commandé HT', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant commandé TTC', 'V_LIGNES_COMMANDES_X', 'montant_commande_ttc', '1', 'Mt Com. TTC', 'CTI_MTCOMTTC', 'SUM', '#,00E', 100, 'Montant commande TTC', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant commande TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TTC des entrées', 'V_MOUVEMENTS_ARTICLES_X', 'entree_montant', '1', 'Mt Ent. TTC', 'CTI_MTENT', 'SUM', '#,00E', 100, 'Montant TTC des entrées', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant TTC des entrées', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT des entrées', 'V_MOUVEMENTS_ARTICLES_X', 'entree_montant_ht', '1', 'Mt Ent. HT', 'CTI_MTENTHT', 'SUM', '#,00E', 100, 'Montant HT des entrées', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant HT des entrées', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant_ht ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] HT', 'CTI_MTENTHT-2', 'SUM', '#,00E', 100, 'Montant HT [TEMPLATE_TEXT_1]', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements d''entrée', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant des entrées', 'V_STOCK_MENSUEL_X', 'entree_montant', '1', 'Mt Ent. HT', 'CTI_MTENTSTO', 'SUM', '#,00E', 100, 'Montant HT des entrées', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant TTC des sorties', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TTC des entrées par type', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] TTC', 'CTI_MTENTTTC-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] TTC', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements d''entrée', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant TTC des entrées par type - autres', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:99]) THEN entree_montant ELSE 0 END', '1', 'Mt autres TTC', 'CTI_MTENTTTC-2#99', 'SUM', '#,00E', 100, 'Montant autres TTC', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTENTTTC-2', '', '', '', '99', '', '', 'autres', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TTC des entrées (stock)', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] TTC (stock)', 'CTI_MTENTTTCSTO-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] TTC (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements d''entrée', '', '', '', '', '', '', '', '', 'Montant TTC des entrées par type (produit gérés stock)', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant TTC des entrées (stock) - livraison', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:00]) THEN entree_montant ELSE 0 END', '1', 'Mt livraison TTC (stock)', 'CTI_MTENTTTCSTO-2#00', 'SUM', '#,00E', 100, 'Montant livraison TTC (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTENTTTCSTO-2', '', '', '', '00', '', '', 'livraison', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant d''achats auprès des fournisseurs références', 'V_LIGNES_COMMANDES_X', 'CASE WHEN fournisseur_id IN [LISTE:CTI_FOUREF] OR fournisseur_id = fournisseur_principal_id THEN montant_liquidation_ttc ELSE 0 END', '1', 'Mt achat four. ref.', 'CTI_MTFOUGR', 'SUM', '#,00E', 100, 'Montant d''achats auprès des fournisseurs références', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant d''achats auprès des fournisseurs références', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant HT des entrées (stock)', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant_ht ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] HT (stock)', 'CTI_MTHTSORSTO-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] HT (stock)', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements d''entrée', '', '', '', '', '', '', '', '', 'Montant HT des entrées par type (produits gérés en stock)', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant Ecart HT', 'V_MOUVEMENTS_ARTICLES_X', 'entree_montant_ht-sortie_montant_ht', '1', 'Mt Ecart HT', 'CTI_MTMVTECENTSORHT', 'SUM', '#,00E', 100, 'Montant Ecart HT', '1', ' ', ' ', ' ', ' ', '1', 'CTI_MTENTHT', 'CTI_MTSORHT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les montants d''entrée et de sortie en HT', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant Ecart TTC', 'V_MOUVEMENTS_ARTICLES_X', 'entree_montant-sortie_montant', '1', 'Mt Ecart TTC', 'CTI_MTMVTECENTSORTTC', 'SUM', '#,00E', 100, 'Montant Ecart TTC', '1', ' ', ' ', ' ', ' ', '1', 'CTI_MTENT', 'CTI_MTSORT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les montants d''entrée et de sortie en TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant non livré HT', 'V_LIGNES_COMMANDES_X', 'montant_non_livraison_ht', '1', 'Mt Non Liv. HT', 'CTI_MTNLIVHT', 'SUM', '#,00E', 80, 'Montant non livré HT', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant non livraison HT', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant non livré TTC', 'V_LIGNES_COMMANDES_X', 'montant_non_livraison_ttc', '1', 'Mt Non Liv. TTC', 'CTI_MTNLIVTTC', 'SUM', '#,00E', 80, 'Montant non livré TTC', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant non livré TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant port', 'V_LIGNES_COMMANDES_X', 'montant_commande_port', '1', 'Mt Port', 'CTI_MTPORT', 'SUM', '#,00E', 100, 'Montant port', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant port', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant remise', 'V_LIGNES_COMMANDES_X', 'montant_commande_remise', '1', 'Mt Remise', 'CTI_MTREM', 'SUM', '#,00E', 80, 'Montant remise', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant remise', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT des sorties', 'V_MOUVEMENTS_ARTICLES_X', 'sortie_montant_ht', '1', 'Mt Sor. HT', 'CTI_MTSORHT', 'SUM', '#,00E', 100, 'Montant HT des sorties', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant HT des sorties', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT des sorties', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] HT', 'CTI_MTSORHT-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] HT', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements de sortie', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant HT des sorties - consommation', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt consommation HT', 'CTI_MTSORHT-2#01', 'SUM', '#,00E', 100, 'Montant consommation HT', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTSORHT-2', '', '', '', '01', '', '', 'consommation', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT des sorties - pertes', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:02]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt pertes HT', 'CTI_MTSORHT-2#02', 'SUM', '#,00E', 100, 'Montant pertes HT', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTSORHT-2', '', '', '', '02', '', '', 'pertes', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant HT des sorties - autres', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:99]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt autres HT', 'CTI_MTSORHT-2#99', 'SUM', '#,00E', 100, 'Montant autres HT', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTSORHT-2', '', '', '', '99', '', '', 'autres', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant HT des sorties (stock)', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] HT (stock)', 'CTI_MTSORHTSTO-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] HT (stock)', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements de sortie', '', '', '', '', '', '', '', '', 'Montant HT des sorties par type (produits gérés en stock)', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant TTC des sorties', 'V_MOUVEMENTS_ARTICLES_X', 'sortie_montant', '1', 'Mt Sor. TTC', 'CTI_MTSORT', 'SUM', '#,00E', 100, 'Montant TTC des sorties', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant TTC des sorties', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant des sorties', 'V_STOCK_MENSUEL_X', 'sortie_montant', '1', 'Mt Sor. HT', 'CTI_MTSORTSTO', 'SUM', '#,00E', 100, 'Montant HT des sorties', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant TTC des sorties', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TTC des sorties par type', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] TTC', 'CTI_MTSORTTC-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] TTC', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements de sortie', '', '', '', '', '', '', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant TTC des sorties par type - pertes', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:02]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END', '1', 'Mt pertes TTC', 'CTI_MTSORTTC-2#02', 'SUM', '#,00E', 100, 'Montant pertes TTC', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTSORTTC-2', '', '', '', '02', '', '', 'pertes', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TTC des sorties (stock)', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END', '1', 'Mt [TEMPLATE_TEXT_1] TTC (stock)', 'CTI_MTSORTTCSTO-2', 'SUM', '#,00E', 100, 'Montant [TEMPLATE_TEXT_1] TTC (stock)', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements de sortie', '', '', '', '', '', '', '', '', 'Montant TTC des sorties par type (produit gérés en stock)', '2MNT', '', '', '', '', '', '', '', '', '1'),
(1, 'Montant TTC des sorties (stock) - consommation', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END', '1', 'Mt consommation TTC (stock)', 'CTI_MTSORTTCSTO-2#01', 'SUM', '#,00E', 100, 'Montant consommation TTC (stock)', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_MTSORTTCSTO-2', '', '', '', '01', '', '', 'consommation', '', '', '', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant Ecart HT', 'V_STOCK_MENSUEL_X', 'entree_montant-sortie_montant', '1', 'Mt Ecart HT', 'CTI_MTSTOECENTSORHT', 'SUM', '#,00E', 100, 'Montant Ecart HT', '4', ' ', ' ', ' ', ' ', '4', 'CTI_MTENTHT', 'CTI_MTSORHT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les montants d''entrée et de sortie en HT', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Montant TVA', 'V_LIGNES_COMMANDES_X', 'montant_commande_tva', '1', 'Mt TVA', 'CTI_MTTVA', 'SUM', '#,00E', 80, 'Montant TVA', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Montant TVA', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Numéro de commande', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN COUNT(DISTINCT commande_code) = 1 THEN MAX(commande_code) ELSE '''' END', '1', 'Commande', 'CTI_MVTCMD', '*LIST', '', 50, 'Numéro de commande', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Numéro de commande associé', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Date', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN COUNT(DISTINCT date) = 1 THEN MAX(date::text) ELSE '''' END', '1', 'Date', 'CTI_MVTDATE', '*LIST', 'DD/MM/YYYY', 65, 'Date de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Date du mouvement', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Date de commande', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN COUNT(DISTINCT date_commande) = 1 THEN MAX(date_commande)::text ELSE '''' END', '1', 'Date de commande', 'CTI_MVTDCMD', '*LIST', 'DD/MM/YYYY', 65, 'Date de commande', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Date de Commande', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Texte du mouvement', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN COUNT(DISTINCT mouvement_texte) = 1 THEN MAX(mouvement_texte) ELSE '''' END', '1', 'Texte', 'CTI_MVTTXT', '*LIST', '', 200, 'Texte du mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Texte du mouvement', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Type de mouvement', 'V_MOUVEMENTS_ARTICLES_X', 'CASE WHEN COUNT(DISTINCT type_mouvement_code) = 1 THEN MAX(type_mouvement_code) ELSE '''' END', '1', 'Mvt', 'CTI_MVTTYPE', '*LIST', '', 30, 'Type de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code du type de mouvement', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles différents', 'V_MOUVEMENTS_ARTICLES_X', 'DISTINCT article_id', '1', 'Nb Art.', 'CTI_NBART', 'COUNT', '', 50, 'Nombre d''articles', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre d''articles', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre d''articles différents commandés', 'V_LIGNES_COMMANDES_X', 'DISTINCT article_id', '1', 'Nb Art. Com.', 'CTI_NBARTCOM', 'COUNT', '', 50, 'Nombre d''articles commandés', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre d''articles commandés', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre moyen d''articles par commande', '*CALC', 'base.cti_division([1],[2])', '1', 'Moy Art. / com.', 'CTI_NBARTMOYCOM', '*CALC', '', 50, 'Nombre moyen d''articles par commande', ' ', ' ', ' ', ' ', ' ', ' ', '', 'CTI_NBCOM#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre moyen d''articles par commande', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de commandes', 'V_LIGNES_COMMANDES_X', 'DISTINCT commande_id', '1', 'Nb Com.', 'CTI_NBCOM', 'COUNT', '', 50, 'Nombre de commandes', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de commandes', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité entrée', 'V_MOUVEMENTS_ARTICLES_X', 'entree_quantite', '1', 'Qté entrée', 'CTI_NBENT', 'SUM', '', 70, 'Quantité entrée', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité entrée', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité entrée (stock)', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_quantite ELSE 0 END', '1', 'Qté [TEMPLATE_TEXT_1] (stock)', 'CTI_NBENTSTO', 'SUM', '#,00E', 90, 'Quantité entrée [TEMPLATE_TEXT_1] (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements d''entrée', '', '', '', '', '', '', '', '', 'Quantité des entrées par type (produit gérés stock)', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Quantité entrée (stock) - livraison', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:00]) THEN entree_quantite ELSE 0 END', '1', 'Qté livraison (stock)', 'CTI_NBENTSTO#00', 'SUM', '#,00E', 90, 'Quantité entrée livraison (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_NBENTSTO', '', '', '', '00', '', '', 'livraison', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité entrée', 'V_STOCK_MENSUEL_X', 'entree_quantite', '1', 'Qté entrée', 'CTI_NBENTSTOM', 'SUM', '', 70, 'Quantité entrée', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité entrée', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre total de factures', 'V_LIGNES_COMMANDES_X', 'DISTINCT CASE WHEN montant_liquidation_ht != 0 THEN commande_id ELSE null END', '1', 'Nb Fac.', 'CTI_NBFAC', 'COUNT', '', 50, 'Nombre total de factures', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre total de factures', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre total de fournisseurs', 'V_LIGNES_COMMANDES_X', 'DISTINCT fournisseur_id', '1', 'Nb Four.', 'CTI_NBFOU', 'COUNT', '', 50, 'Nombre total de fournisseurs', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre total de fournisseurs', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de fournisseurs régionaux', 'V_LIGNES_COMMANDES_X', 'DISTINCT CASE WHEN fournisseur_id in [LISTE:CTI_FOUREG] THEN fournisseur_id ELSE null END', '1', 'Nb Four. regio.', 'CTI_NBFOUREG', 'COUNT', '', 50, 'Nombre de fournisseurs régionaux', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de fournisseurs régionaux', '1QTE', '', '', '', '', '', '', '', '', '1'),
(1, 'Delais livraison', 'V_LIGNES_COMMANDES_X', 'CASE WHEN ligne_commande_etat_livraison = ''T'' THEN date_reception - date_commande ELSE 0 END', '1', 'Delais livraison', 'CTI_NBJLIV', 'SUM', '', 80, 'Delais livraison', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Delais paiement fournisseurs', 'V_LIGNES_COMMANDES_X', 'CASE WHEN date_reglement IS NOT NULL THEN delai_paiement ELSE 0 END', '1', 'Delais paiement fournisseurs', 'CTI_NBJPAYFOU', 'SUM', '', 50, 'Delais paiement fournisseurs', '2', '3', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Delais paiement fournisseurs', '3DUR', '', '', '', '', '', '', '', '', '1'),
(1, 'Durée période', 'V_MOUVEMENTS_STOCKS_X', 'date( toperiode) - date( periode)', '1', 'Durée période', 'CTI_NBJPER', 'MIN', '', 50, 'Durée période', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Durée période', '3DUR', '', '', '', '', '', '', '', '', '1'),
(1, 'Nombre de litiges, de retard...', 'V_LIGNES_COMMANDES_X', 'DISTINCT CASE WHEN date_reception > date_livraison_prevue + 10 OR quantite_non_livraison_approvisionnement > 0 THEN commande_id ELSE null END', '1', 'Nb litiges...', 'CTI_NBLIRET', 'COUNT', '', 50, 'Nombre de litiges, de retard...', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de lignes de commandes où les produits n''ont pas été livrées en intégralité et nombre de livraison supérieure à 10 jours', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de livraisons > 10 jours', 'V_LIGNES_COMMANDES_X', 'DISTINCT CASE WHEN date_reception > date_livraison_prevue + 10 THEN commande_id ELSE null END', '1', 'Nb com. non liv. 10 j.', 'CTI_NBLIV10', 'COUNT', '', 80, 'Nombre de livraison supérieures à 10 jours', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de lignes de commandes où les produits n''ont pas été livrées en intégralité dans les 10 jours', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de mouvements', 'V_MOUVEMENTS_ARTICLES_X', '1', '1', 'Nb mouvements', 'CTI_NBMVT', 'SUM', '', 50, 'Nombre de mouvements', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de mouvements', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de commandes non livrées en totalité', 'V_LIGNES_COMMANDES_X', 'DISTINCT CASE WHEN quantite_non_livraison_approvisionnement > 0 THEN commande_id ELSE null END', '1', 'Nb com. non liv. tot.', 'CTI_NBNLI', 'COUNT', '', 80, 'Nombre de commandes incomplètes', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre de lignes de commandes où les produits n''ont pas été livrées en intégralité', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre de rupture de stocks', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN est_dernier_jour = 1 AND stock_quantite_fin < 0 and gere_en_stock != ''0'' THEN 1 ELSE 0 END', '1', 'Nb ruptures', 'CTI_NBRUPSTO', 'SUM', '', 50, 'Nombre de rupture de stocks', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre d''occurence d''une quantité de stock négative pour un produit géré en stock', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité sortie (stock)', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_quantite ELSE 0 END', '1', 'Qté [TEMPLATE_TEXT_1] (stock)', 'CTI_NBSORSTO', 'SUM', '#,00E', 90, 'Quantité sortie [TEMPLATE_TEXT_1] (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', 'Type de mouvements de sortie', '', '', '', '', '', '', '', '', 'Quantité sortie (produits gérés en stock)', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Quantité sortie (stock) - consommations', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_quantite ELSE 0 END', '1', 'Qté consommations (stock)', 'CTI_NBSORSTO#01', 'SUM', '#,00E', 90, 'Quantité sortie consommations (stock)', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', 'CTI_NBSORSTO', '', '', '', '01', '', '', 'consommations', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité sortie', 'V_MOUVEMENTS_ARTICLES_X', 'sortie_quantite', '1', 'Qté sortie', 'CTI_NBSORT', 'SUM', '', 70, 'Quantité sortie', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité sortie', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité sortie', 'V_STOCK_MENSUEL_X', 'sortie_quantite', '1', 'Qté sortie', 'CTI_NBSORTSTO', 'SUM', '', 70, 'Quantité sortie', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité sortie', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombres de lignes de commandes', 'V_LIGNES_COMMANDES_X', 'DISTINCT ligne_commande_id', '1', 'Nb Lignes Com.', 'CTI_NB_LIGCOM', 'COUNT', '', 50, 'Nombres de lignes de commandes', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombres de lignes de commandes', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire HT Calculé', 'V_MOUVEMENTS_ARTICLES_X', '(MAX(ARRAY[CASE WHEN est_dernier_jour = ''1'' THEN date::text ELSE ''1900-01-01''::text END,round(prix_unitaire_calcule,2)::text]))[2]::numeric', '1', 'PU HT', 'CTI_PUCALC', '', '#,00E', 60, 'PU HT', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Calculé HT (Calul d''après les stocks mensuels et les livraisons)', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire HT (dernier)', 'V_LIGNES_COMMANDES_X', '((MAX(ARRAY[date_commande::text,base.cti_division(CASE WHEN montant_commande_ht > 0 THEN montant_commande_ht ELSE 0 END,CASE WHEN montant_commande_ht > 0 THEN quantite_approvisionnement ELSE 0 END)::text]))[2]::numeric)', '1', 'PU HT (dernier)', 'CTI_PULHT', 'CUSTOM', '#,0000E', 60, 'Dernier Prix Unitaire HT', '2', ' ', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Dernier Prix Unitaire HT (commande)', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire TTC (dernier)', 'V_MOUVEMENTS_ARTICLES_X', '((MAX(ARRAY[date::text,CASE WHEN prix_unitaire > 0 THEN prix_unitaire ELSE 0 END::text]))[2]::numeric)', '1', 'PU TTC (dernier)', 'CTI_PULMVT', '', '#,0000E', 60, 'PU TTC (dernier)', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Dernier Prix Unitaire TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire TTC (dernier)', 'V_LIGNES_COMMANDES_X', '(MAX(ARRAY[date_commande::text,base.cti_division(CASE WHEN montant_commande_ttc > 0 THEN montant_commande_ttc ELSE 0 END,CASE WHEN montant_commande_ttc > 0 THEN quantite_approvisionnement ELSE 0 END)::text]))[2]::numeric', '1', 'PU TTC (dernier)', 'CTI_PULTTC', '', '#,0000E', 60, 'Dernier Prix Unitaire TTC', '2', ' ', ' ', ' ', ' ', '2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Dernier Prix Unitaire TTC', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire Moyen', '*CALC', 'base.cti_division([1],[2])', '1', 'PU Moy.', 'CTI_PUMOY', '*CALC', '#,0000E', 60, 'Prix Unitaire Moyen', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFIN', 'CTI_QTESTOFIN', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Moyen', '2MNT', '1QTE', '', '', '', '', '', '', '', '0'),
(1, 'Prix Unitaire Moyen liquidation TTC', '*CALC', 'base.cti_division([1],[2])', '1', 'PU Moy. TTC', 'CTI_PUMOYCOM', '*CALC', '#,0000E', 60, 'Prix Unitaire Moyen TTC', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTPAYTTC#2', 'CTI_QTELIV#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Moyen (Montant liquidation TTC / quantié livrée)', '2MNT', '1QTE', '', '', '', '', '', '', '', '0'),
(1, 'PUMP (moyen)', '*CALC', 'base.cti_division([1]+[2],[3]+[4])', '1', 'PUMP Moy.', 'CTI_PUMOYMVT', '*CALC', '#,0000E', 60, 'PUMP moyen', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MTENTHT', 'CTI_MTSORHT', 'CTI_NBENT', 'CTI_NBSORT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Moyen Pondéré (global)', '2MNT', '1QTE', '', '', '', '', '', '', '', '0'),
(1, 'Quantité commandée', 'V_LIGNES_COMMANDES_X', 'quantite_approvisionnement', '1', 'Qté Com.', 'CTI_QTECOM', 'SUM', '', 70, 'Quantité commandé', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité commandé', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock calculé début période', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND est_dernier_jour = 1 and date < periode THEN stock_quantite_fin WHEN gere_en_stock != ''0'' AND date = periode and est_premier_jour = 1 THEN stock_quantite_debut ELSE 0 END', '1', 'Qté Stock début', 'CTI_QTEDEBMVT', 'SUMFIRSTMONTH', '', 70, 'Quantité Stock calculé début période', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Ecart', 'V_MOUVEMENTS_ARTICLES_X', 'entree_quantite-sortie_quantite', '1', 'Qté Ecart', 'CTI_QTEECAENTSOR', 'SUM', '', 70, 'Quantité écart', '1', ' ', ' ', ' ', ' ', '1', 'CTI_NBENT', 'CTI_NBSORT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les quantités entrées et sorties', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Ecart', '*CALC', '', '1', 'Qté Ecart', 'CTI_QTEECAMVS', '*CALC', '', 70, 'Quantité écart', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBENTSTO#00', 'CTI_NBENTSTO#00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les quantités livrées et consommées', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Ecart', 'V_STOCK_MENSUEL_X', 'entree_quantite-sortie_quantite', '1', 'Qté Ecart', 'CTI_QTEECASTO', 'SUM', '', 70, 'Quantité écart', '4', ' ', ' ', ' ', ' ', '4', 'CTI_NBENT', 'CTI_NBSORT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Différence entre les quantités entrées et sorties', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité livrée', 'V_LIGNES_COMMANDES_X', 'quantite_livraison_approvisionnement', '1', 'Qté livrée.', 'CTI_QTELIV', 'SUM', '', 80, 'Quantité livrée', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité commandé', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock calculé fin période', 'V_MOUVEMENTS_STOCKS_X', 'CASE WHEN gere_en_stock != ''0'' AND date_fin > toperiode AND est_dernier_jour = 1 THEN stock_quantite_fin ELSE 0 END', '1', 'Qté Stock fin', 'CTI_QTEMVTFIN', 'SUMLASTMONTH', '', 70, 'Quantité Stock calculé fin période', '5', ' ', ' ', ' ', ' ', '5', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité non livrée', 'V_LIGNES_COMMANDES_X', 'quantite_non_livraison_approvisionnement', '1', 'Qté non liv.', 'CTI_QTENLIV', 'SUM', '', 80, 'Quantité non livrée', '2', '3', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité non livrée', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock début période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_debut = periode THEN stock_quantite_debut ELSE 0 END', '1', 'Qté Stock debut', 'CTI_QTESTODEB', 'SUMFIRSTMONTH', '', 70, 'Quantité Stock début période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock calculé début', 'V_MOUVEMENTS_ARTICLES_X', '(MIN(ARRAY[CASE WHEN est_premier_jour = ''1'' THEN date::text ELSE ''2099-12-31''::text END,stock_quantite_debut::text]))[2]::numeric', '1', 'Qté Stock début', 'CTI_QTESTODEBMVT', '', '', 70, 'Quantité Stock calculé en début de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock fin période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_fin = toperiode THEN stock_quantite_fin ELSE 0 END', '1', 'Qté Stock fin', 'CTI_QTESTOFIN', 'SUMLASTMONTH', '', 70, 'Quantité Stock fin période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '1QTE', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité Stock calculé fin', 'V_MOUVEMENTS_ARTICLES_X', '(MAX(ARRAY[CASE WHEN est_dernier_jour = ''1'' THEN date::text ELSE ''1900-01-01''::text END,,stock_quantite_fin::text]))[2]::numeric', '1', 'Qté Stock fin', 'CTI_QTESTOFINMVT', '', '', 70, 'Quantité Stock calculé fin de mouvement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Quantité stock moyen (mouvements)', '*CALC', 'base.cti_division([1]+[2],2)', '1', 'Qté. Stock moy.', 'CTI_QTESTOMOYMVT', '*CALC', '#,00E', 90, 'Quantité stock moyen (mouvements)', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_QTEDEBMVT', 'CTI_QTEMVTFIN', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Quantité de stock moyen (quantité stock début (achat) + quantité stock fin (achat) /2)', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Calcul d''indicateurs dans le rapport', '*RAPPORTCALC', '', '1', '', 'CTI_RAPPORTCALC', 'sum', '#', 50, '', '0', ' ', ' ', ' ', ' ', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Pour calculer directement dans la définition du rapport', '', '', '', '', '', '', '', '', '', '1'),
(1, 'Date de réception', 'V_LIGNES_COMMANDES_X', 'CASE WHEN COUNT(DISTINCT(date_reception)) = 1 THEN MAX(date_reception)::text ELSE '''' END', '1', 'Date de réception', 'CTI_RECDATE', '*LIST', 'DD/MM/YYYY', 65, 'Date de réception', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Date de réception', '3DUR', '', '', '', '', '', '', '', '', '0'),
(1, 'Référence commande', 'V_LIGNES_COMMANDES_X', 'CASE WHEN COUNT(DISTINCT commande_reference) = 1 THEN MAX(commande_reference) ELSE '''' END', '1', 'Réference commande', 'CTI_REFCOM', '*LIST', '', 50, 'Réference commande', ' ', ' ', ' ', ' ', ' ', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Référence commande', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Rotation du stock par rapport aux entrées', '*CALC', 'round(base.cti_division([3],base.cti_division([1]+[2],2)),0)', '1', 'Rotation du stock / entrées', 'CTI_ROTSTOACH', '*CALC', '', 50, 'Rotation du stock / entrées', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFIN', 'CTI_QTESTOFIN', 'CTI_MTENTSTO', 'CTI_NBJPER', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Rapport entre les achats sur la période et le stock moyen (valeur stock début + valeur stock fin / 2)', '2MNT', '1QTE', '3DUR', '', '', '', '', '', '', '1'),
(1, 'Rotation du stock calculé par rapport aux achat', '*CALC', 'round(base.cti_division([3],base.cti_division([1]+[2],2)),0)', '1', 'Rotation du stock / achat', 'CTI_ROTSTOMVTACH', '*CALC', '', 50, 'Rotation du stock calculé / achat', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFINACHAT', 'CTI_QTEDEBMVT', 'CTI_MTENTTTCSTO-2#00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Rapport entre les achats sur la période et le stock moyen (valeur stock début + valeur stock fin / 2)', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Rotation du stock calculé par rapport aux ventes', '*CALC', 'round(base.cti_division(365*[3]/[4],([1]+[2])/2),0)', '1', 'Rotation du stock / vente', 'CTI_ROTSTOMVTVEN', '*CALC', '', 50, 'Rotation du stock calculé / vente', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFINACHAT', 'CTI_MNTSTODEBACHAT', 'CTI_MTSORTTCSTO-2#01', 'CTI_NBJPER', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Rapport entre le CA TTC et le stock moyen (valeur stock début + valeur stock fin / 2) sur période', '2MNT', '3DUR', '', '', '', '', '', '', '', '0'),
(1, 'Rotation du stock par rapport aux sorties', '*CALC', 'roud(base.cti_division(365*[3]/[4],([1]+[2])/2))', '1', 'Rotation du stock / sorties', 'CTI_ROTSTOVEN', '*CALC', '', 50, 'Rotation du stock / sorties', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFIN', 'CTI_MNTSTODEB', 'CTI_MTSORTSTO', 'CTI_NBJPER', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Rapport entre le CA TTC et le stock moyen (valeur stock début + valeur stock fin / 2) sur période', '2MNT', '3DUR', '', '', '', '', '', '', '', '0'),
(1, 'Séparateur', 'SEP', '', '1', '', 'CTI_SEP', 'SEP', '#', 0, '', '0', ' ', ' ', ' ', ' ', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Code du site', 'TABSITE', 'CASE WHEN COUNT(DISTINCT site_code) = 1 THEN MAX(site_code) ELSE '''' END', '1', 'Site', 'CTI_SITECODE', '*LIST', '', 30, 'Code du site', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code du site', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Durée stock moyen (jours)', '*CALC', 'round(365*base.cti_division(([1]+[2])/2,365*[3]/[4]),0)', '1', 'Stock moyen (j)', 'CTI_STOMOYJ', '*CALC', '#j', 50, 'Durée stock moyen (jours)', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFINACHAT', 'CTI_MNTSTODEBACHAT', 'CTI_MTSORHT', 'CTI_NBJPER', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Rapport entre les ventes et le stock moyen (valeur stock début + valeur stock fin /2) ramené à l''année', '2MNT', '3DUR', '', '', '', '', '', '', '', '0'),
(1, 'PUMP début période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_debut = periode THEN pump ELSE 0 END', '1', 'PUMP déb. période', 'CTI_STOPUMPDEB', 'SUMFIRSTMONTH', '#,0000E', 60, 'PUMP début période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Moyen Pondéré', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'PUMP fin période', 'V_STOCK_MENSUEL_X', 'CASE WHEN date_fin = toperiode THEN pump ELSE 0 END', '1', 'PUMP fin période', 'CTI_STOPUMPFIN', 'SUMLASTMONTH', '#,0000E', 60, 'PUMP fin période', '4', ' ', ' ', ' ', ' ', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Prix Unitaire Moyen Pondéré', '2MNT', '', '', '', '', '', '', '', '', '0'),
(1, 'Nombre moyen de références actives par fournisseur', '*CALC', 'base.cti_division([1],[2])', '1', 'Nb moyen réf actives / four.', 'CTI_TXARTFOU', '*CALC', '', 50, 'Nombre moyen de références actives par fournisseur', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBART', 'CTI_NBFOU#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Nombre moyen de références actives par fournisseur', '1QTE', '', '', '', '', '', '', '', '', '1'),
(1, 'Taux d''achats auprès des fournisseurs références', '*CALC', '100*base.cti_division([1],[2])', '1', 'Tx Fou. Ref.', 'CTI_TXFOUGR', '*CALC', '#,00%', 50, 'Taux d''achats auprès des fournisseurs références', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MTFOUGR#2', 'CTI_MTACHA#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Taux d''achats auprès des fournisseurs références', '4TAUX', '2MNT', '', '', '', '', '', '', '', '1'),
(1, 'Taux de fournisseurs régionaux', '*CALC', '100*base.cti_division([1],[2])', '1', 'Tx Four. Reg.', 'CTI_TXFOUREG', '*CALC', '#,00%', 50, 'Taux fournisseurs de régionaux', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBFOUREG#2', 'CTI_NBFOU#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Taux de fournisseurs régionaux', '4TAUX', '1QTE', '', '', '', '', '', '', '', '1'),
(1, 'Taux de litiges, taux de retard...', '*CALC', '100*base.cti_division([1],[2])', '1', 'Tx litiges...', 'CTI_TXLIRET', '*CALC', '#,00%', 50, 'Taux de litiges, taux de retard...', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_NBLIRET', 'CTI_NBCOM#2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Taux de litiges (livraison incomplète) et de retard (livraison > 10 jours)', '4TAUX', '1QTE', '', '', '', '', '', '', '', '0'),
(1, 'Taux de Marge', '*CALC', '100*(base.cti_division([5],[2]) - (base.cti_division([3],[4])))', '1', 'Tx Marge', 'CTI_TXMARGSTO', '*CALC', '#,00%', 50, 'Taux de Marge', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFIN', 'CTI_MTENTSTO', 'CTI_NBSORTSTO', 'CTI_NBENTSTO', 'CTI_MTSORTSTO', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d''entrées)) / montant_entree', '4TAUX', '1QTE', '2MNT', '', '', '', '', '', '', '1'),
(1, 'Taux de Marque', '*CALC', '100*(CASE WHEN [1] > 0 AND [2] > 0 THEN 1 - base.cti_division([2]*[3],[4]*[1]) ELSE 0 END)', '1', 'Tx Marque', 'CTI_TXMARQSTO', '*CALC', '#,00%', 50, 'Taux de Marque', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MTSORTTCSTO-2#01', 'CTI_MTENTTTCSTO-2#00', 'CTI_NBSORSTO#01', 'CTI_NBENTSTO#00', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Pour les articles ayant des mouvements d''entrées et de sortie, (nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d''entrées)) / montant sortie, 0 sinon', '4TAUX', '1QTE', '2MNT', '', '', '', '', '', '', '1'),
(1, 'Taux de Marge', '*CALC', '100*(base.cti_division([5],[2]) - (base.cti_division([3],[4])))', '1', 'Tx Marge', 'CTI_TXMRG', '*CALC', '#,00%', 50, 'Taux de Marge', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFINACHAT', 'CTI_MTENTTTCSTO-2#00', 'CTI_NBSORSTO#01', 'CTI_NBENTSTO#00', 'CTI_MTSORTTCSTO-2#01', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d''entrées)) / montant_entree', '1QTE', '2MNT', '', '', '', '', '', '', '', '1'),
(1, 'Taux de Marque', '*CALC', '100*(CASE WHEN [5] > 0 THEN 1 - base.cti_division([2]*[3],[4]*[5]) ELSE 0 END)', '1', 'Tx Marque', 'CTI_TXMRQ', '*CALC', '#,00%', 50, 'Taux de Marque', ' ', ' ', ' ', ' ', ' ', ' ', 'CTI_MNTSTOFINACHAT', 'CTI_MTENT', 'CTI_NBSORT', 'CTI_NBENT', 'CTI_MTSORT', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', '(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d''entrées)) / montant sortie', '4TAUX', '1QTE', '2MNT', '', '', '', '', '', '', '1'),
(1, 'Code de l''Unité d''approvisionnement', 'TABUNIT', 'CASE WHEN COUNT(DISTINCT unite_approvisionnement_article_id) = 1 AND MAX(unite_approvisionnement_article_id) <> 0 AND MAX(unite_approvisionnement_article_code) <> ''UN'' THEN MAX(unite_approvisionnement_article_code) ELSE '''' END', '1', 'Unité', 'CTI_UAPCODE', '*LIST', '', 30, 'Code de l''Unité d''approvisionnement', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Unité d''approvisionnement', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Code de l''Unité Fonctionnelle', 'TABUF', 'CASE WHEN COUNT(DISTINCT unite_fonctionnelle_code) = 1 THEN MAX(unite_fonctionnelle_code) ELSE '''' END', '1', 'UF', 'CTI_UFCODE', '*LIST', '', 30, 'Code de l''UF', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Code de l''Unite Fonctionnelle', '', '', '', '', '', '', '', '', '', '0'),
(1, 'Code de l''Unité de stockage', 'TABUNIT', 'CASE WHEN COUNT(DISTINCT unite_stockage_article_id) = 1 AND MAX(unite_stockage_article_id) <> 0 AND MAX(unite_stockage_article_code) <> ''UN'' THEN MAX(unite_stockage_article_code) ELSE '''' END', '1', 'Unité', 'CTI_USTOCODE', '*LIST', '', 30, 'Code de l''Unité de stockage', '1', ' ', ' ', ' ', ' ', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0', '', '', '', '', '', '', '', '', '', '', 'Unité de stockage', '', '', '', '', '', '', '', '', '', '0')
;
-- 3/3 : Màj de la table iCTI
DELETE FROM eco.t_indicateurs
USING
(
SELECT code, MIN(oid) AS minoid FROM eco.t_indicateurs WHERE code <> '' GROUP BY 1 HAVING count(*) > 1
) subview
WHERE t_indicateurs.code = subview.code AND t_indicateurs.oid <> subview.minoid;
UPDATE eco.t_indicateurs SET
texte = w_dbsetup.texte,
table_name = w_dbsetup.table_name,
column_name = w_dbsetup.column_name,
is_cti = w_dbsetup.is_cti,
entete = w_dbsetup.entete,
entete_etendue = w_dbsetup.entete_etendue,
total_function = w_dbsetup.total_function,
output_format = w_dbsetup.output_format,
width = w_dbsetup.width,
dimension_date_1 = w_dbsetup.dimension_date_1,
dimension_date_2 = w_dbsetup.dimension_date_2,
dimension_date_3 = w_dbsetup.dimension_date_3,
dimension_date_4 = w_dbsetup.dimension_date_4,
dimension_date_5 = w_dbsetup.dimension_date_5,
dimension_date = w_dbsetup.dimension_date,
is_template = w_dbsetup.is_template,
variable_definition = ARRAY[variable_definition_1,variable_definition_2,variable_definition_3] ,
variable_value = ARRAY[variable_value_1,variable_value_2,variable_value_3],
variable_value_text = ARRAY[variable_value_text_1,variable_value_text_2,variable_value_text_3],
description = w_dbsetup.description,
is_hide = CASE WHEN t_indicateurs.is_hide = '1' THEN '1' ELSE w_dbsetup.is_hide END
FROM w_dbsetup
WHERE t_indicateurs.code = w_dbsetup.code;
-- Ajout des indicateurs
INSERT INTO eco.t_indicateurs(texte,
table_name,
column_name,
is_cti,
entete,
entete_etendue,
code,
total_function,
output_format,
width,
dimension_date_1,
dimension_date_2,
dimension_date_3,
dimension_date_4,
dimension_date_5,
dimension_date,
is_template,
variable_definition,
variable_value,
variable_value_text,
description,
is_hide
)
SELECT texte,
table_name,
column_name,
is_cti,
entete,
entete_etendue,
code,
total_function,
output_format,
width,
dimension_date_1,
dimension_date_2,
dimension_date_3,
dimension_date_4,
dimension_date_5,
dimension_date,
is_template,
ARRAY[variable_definition_1,variable_definition_2,variable_definition_3] ,
ARRAY[variable_value_1,variable_value_2,variable_value_3],
ARRAY[variable_value_text_1,variable_value_text_2,variable_value_text_3],
description,
is_hide
FROM w_dbsetup WHERE oid <> 0 AND code NOT IN (SELECT code FROM eco.t_indicateurs WHERE code IS NOT NULL);
-- Thèmes
UPDATE eco.t_indicateurs SET
theme_id = ARRAY[
t_indicateur_theme_1.oid,
t_indicateur_theme_2.oid,
t_indicateur_theme_3.oid,
t_indicateur_theme_4.oid,
t_indicateur_theme_5.oid,
t_indicateur_theme_6.oid,
t_indicateur_theme_7.oid,
t_indicateur_theme_8.oid,
t_indicateur_theme_9.oid
]
FROM w_dbsetup
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_1 ON w_dbsetup.theme_1_code = t_indicateur_theme_1.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_2 ON w_dbsetup.theme_2_code = t_indicateur_theme_2.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_3 ON w_dbsetup.theme_3_code = t_indicateur_theme_3.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_4 ON w_dbsetup.theme_4_code = t_indicateur_theme_4.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_5 ON w_dbsetup.theme_5_code = t_indicateur_theme_5.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_6 ON w_dbsetup.theme_6_code = t_indicateur_theme_6.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_7 ON w_dbsetup.theme_7_code = t_indicateur_theme_7.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_8 ON w_dbsetup.theme_8_code = t_indicateur_theme_8.code
LEFT JOIN eco.t_indicateur_theme t_indicateur_theme_9 ON w_dbsetup.theme_9_code = t_indicateur_theme_9.code
WHERE t_indicateurs.code = w_dbsetup.code AND
theme_id IS DISTINCT FROM ARRAY[
t_indicateur_theme_1.oid,
t_indicateur_theme_2.oid,
t_indicateur_theme_3.oid,
t_indicateur_theme_4.oid,
t_indicateur_theme_5.oid,
t_indicateur_theme_6.oid,
t_indicateur_theme_7.oid,
t_indicateur_theme_8.oid,
t_indicateur_theme_9.oid
]
;
-- Mise à jour des références
UPDATE eco.t_indicateurs SET
indicateur_associe_1_id = COALESCE(t_indicateurs_1.oid,0),
indicateur_associe_2_id = COALESCE(t_indicateurs_2.oid,0),
indicateur_associe_3_id = COALESCE(t_indicateurs_3.oid,0),
indicateur_associe_4_id = COALESCE(t_indicateurs_4.oid,0),
indicateur_associe_5_id = COALESCE(t_indicateurs_5.oid,0),
indicateur_associe_6_id = COALESCE(t_indicateurs_6.oid,0),
indicateur_associe_7_id = COALESCE(t_indicateurs_7.oid,0),
indicateur_associe_8_id = COALESCE(t_indicateurs_8.oid,0),
indicateur_associe_9_id = COALESCE(t_indicateurs_9.oid,0),
indicateur_associe_10_id = COALESCE(t_indicateurs_10.oid,0),
indicateur_associe_11_id = COALESCE(t_indicateurs_11.oid,0),
indicateur_associe_12_id = COALESCE(t_indicateurs_12.oid,0),
indicateur_associe_13_id = COALESCE(t_indicateurs_13.oid,0),
indicateur_associe_14_id = COALESCE(t_indicateurs_14.oid,0),
indicateur_associe_15_id = COALESCE(t_indicateurs_15.oid,0),
indicateur_associe_16_id = COALESCE(t_indicateurs_16.oid,0),
indicateur_associe_17_id = COALESCE(t_indicateurs_17.oid,0),
indicateur_associe_18_id = COALESCE(t_indicateurs_18.oid,0),
indicateur_associe_19_id = COALESCE(t_indicateurs_19.oid,0),
indicateur_associe_20_id = COALESCE(t_indicateurs_20.oid,0),
indicateur_reference_id = COALESCE(t_indicateurs_reference.oid,0),
indicateur_template_id = COALESCE(t_indicateurs_template.oid,0)
FROM w_dbsetup
LEFT JOIN eco.t_indicateurs t_indicateurs_1 ON (w_dbsetup.indicateur_associe_1_code = t_indicateurs_1.code AND w_dbsetup.indicateur_associe_1_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_2 ON (w_dbsetup.indicateur_associe_2_code = t_indicateurs_2.code AND w_dbsetup.indicateur_associe_2_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_3 ON (w_dbsetup.indicateur_associe_3_code = t_indicateurs_3.code AND w_dbsetup.indicateur_associe_3_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_4 ON (w_dbsetup.indicateur_associe_4_code = t_indicateurs_4.code AND w_dbsetup.indicateur_associe_4_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_5 ON (w_dbsetup.indicateur_associe_5_code = t_indicateurs_5.code AND w_dbsetup.indicateur_associe_5_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_6 ON (w_dbsetup.indicateur_associe_6_code = t_indicateurs_6.code AND w_dbsetup.indicateur_associe_6_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_7 ON (w_dbsetup.indicateur_associe_7_code = t_indicateurs_7.code AND w_dbsetup.indicateur_associe_7_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_8 ON (w_dbsetup.indicateur_associe_8_code = t_indicateurs_8.code AND w_dbsetup.indicateur_associe_8_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_9 ON (w_dbsetup.indicateur_associe_9_code = t_indicateurs_9.code AND w_dbsetup.indicateur_associe_9_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_10 ON (w_dbsetup.indicateur_associe_10_code = t_indicateurs_10.code AND w_dbsetup.indicateur_associe_10_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_11 ON (w_dbsetup.indicateur_associe_11_code = t_indicateurs_11.code AND w_dbsetup.indicateur_associe_11_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_12 ON (w_dbsetup.indicateur_associe_12_code = t_indicateurs_12.code AND w_dbsetup.indicateur_associe_12_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_13 ON (w_dbsetup.indicateur_associe_13_code = t_indicateurs_13.code AND w_dbsetup.indicateur_associe_13_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_14 ON (w_dbsetup.indicateur_associe_14_code = t_indicateurs_14.code AND w_dbsetup.indicateur_associe_14_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_15 ON (w_dbsetup.indicateur_associe_15_code = t_indicateurs_15.code AND w_dbsetup.indicateur_associe_15_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_16 ON (w_dbsetup.indicateur_associe_16_code = t_indicateurs_16.code AND w_dbsetup.indicateur_associe_16_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_17 ON (w_dbsetup.indicateur_associe_17_code = t_indicateurs_17.code AND w_dbsetup.indicateur_associe_17_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_18 ON (w_dbsetup.indicateur_associe_18_code = t_indicateurs_18.code AND w_dbsetup.indicateur_associe_18_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_19 ON (w_dbsetup.indicateur_associe_19_code = t_indicateurs_19.code AND w_dbsetup.indicateur_associe_19_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_20 ON (w_dbsetup.indicateur_associe_20_code = t_indicateurs_20.code AND w_dbsetup.indicateur_associe_20_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_reference ON (w_dbsetup.indicateur_reference_code = t_indicateurs_reference.code AND w_dbsetup.indicateur_reference_code <> '')
LEFT JOIN eco.t_indicateurs t_indicateurs_template ON (w_dbsetup.indicateur_template_code = t_indicateurs_template.code AND w_dbsetup.indicateur_template_code <> '')
WHERE t_indicateurs.code = w_dbsetup.code
AND (indicateur_associe_1_code <> '' OR
indicateur_associe_2_code <> '' OR
indicateur_associe_3_code <> '' OR
indicateur_reference_code <> '' OR
indicateur_template_code <> '');
SELECT base.cti_reorganize_indicateurs('eco')
;

+ 115
- 0
db/data/dbdata_eco_t_listes.SQL View File

@ -0,0 +1,115 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_listes.oid,
t_listes.code,
t_listes.texte,
t_listes.chapitre,
t_listes.contenu_by_code,
t_listes.include_code,
t_listes.exclude_code,
t_listes.is_cti,
t_listes.show_omit,
t_listes.utilisateur_createur,
t_listes.est_partagee_modification,
t_listes_tables.name as table_name
FROM
eco.t_listes,
eco.t_listes_tables
WHERE
(is_cti = '1' OR t_listes.code LIKE 'CTI%')
AND t_listes.code <> ''
AND table_id = t_listes_tables.oid
ORDER BY t_listes.code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
chapitre,
contenu_by_code,
include_code,
exclude_code,
is_cti,
show_omit,
utilisateur_createur,
est_partagee_modification,
table_name
)
VALUES
(1, 'CTI_ALIBIO', 'Aliments Biologiques', '', '0', '', '', '1', '0', '*CTI', '1', 't_articles'),
(1, 'CTI_ESS_ART80', 'Liste des articles représentant 80% des stocks en montant', '', '0', '', '', '1', '0', '*CTI', '1', 't_articles'),
(1, 'CTI_FAMALI', 'Alimentation', '', '0', '', '', '1', '0', '*CTI', '1', 't_familles_articles'),
(1, 'CTI_FAMNRJ', 'Energie', '', '0', '', '', '1', '0', '*CTI', '1', 't_familles_articles'),
(1, 'CTI_FOUH', 'Fournisseurs favorisant le travail de personnes handicapés ou en difficulté', '', '0', '', '', '1', '0', '*CTI', '1', 't_fournisseurs'),
(1, 'CTI_FOUREF', 'Fournisseurs références', '', '0', '', '', '1', '0', '*CTI', '1', 't_fournisseurs'),
(1, 'CTI_FOUREG', 'Fournisseurs régionaux', '', '0', '', '', '1', '0', '*CTI', '1', 't_fournisseurs'),
(1, 'CTI_NRJREN', 'Energie renouvelables', '', '0', '', '', '1', '0', '*CTI', '1', 't_articles'),
(1, 'CTI_UFPER', 'UF de pertes ou périmés', '', '0', '', '', '1', '1', '*CTI', '1', 't_unites_fonctionnelles')
;
-- 3/3 : Màj de la table iCTI
UPDATE eco.t_listes SET
texte = w_dbsetup.texte,
chapitre = w_dbsetup.chapitre,
contenu_by_code= w_dbsetup.contenu_by_code,
include_code = w_dbsetup.include_code,
exclude_code = w_dbsetup.exclude_code,
is_cti = w_dbsetup.is_cti,
show_omit = w_dbsetup.show_omit,
utilisateur_createur = w_dbsetup.utilisateur_createur,
est_partagee_modification = w_dbsetup.est_partagee_modification,
table_id = t_listes_tables.oid
FROM
w_dbsetup,
eco.t_listes_tables
WHERE
w_dbsetup.table_name = t_listes_tables.name
AND t_listes.code = w_dbsetup.code
;
INSERT INTO eco.t_listes(
code,
texte,
chapitre,
contenu_by_code,
include_code,
exclude_code,
is_cti,
show_omit,
utilisateur_createur,
est_partagee_modification,
table_id
)
SELECT
w_dbsetup.code,
w_dbsetup.texte,
w_dbsetup.chapitre,
w_dbsetup.contenu_by_code,
w_dbsetup.include_code,
w_dbsetup.exclude_code,
w_dbsetup.is_cti,
w_dbsetup.show_omit,
w_dbsetup.utilisateur_createur,
w_dbsetup.est_partagee_modification,
t_listes_tables.oid
FROM
w_dbsetup,
eco.t_listes_tables
WHERE
w_dbsetup.table_name = t_listes_tables.name
AND w_dbsetup.code NOT IN (SELECT code FROM eco.t_listes)
AND w_dbsetup.texte NOT LIKE '*SUPPRIME%'
;
DELETE FROM eco.t_listes WHERE texte like '*SUPPRIME%' AND is_cti = '1'
;
SELECT base.cti_initialize_listes_by_code('eco');

+ 111
- 0
db/data/dbdata_eco_t_listes_tables.SQL View File

@ -0,0 +1,111 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT oid,
name,
texte,
select_cmd,
code
FROM eco.t_listes_tables
ORDER BY code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
name,
texte,
select_cmd,
code
)
VALUES
(1, 't_articles', 'Articles', 'SELECT t_articles.oid, t_articles.code, t_articles.texte, t_types_articles.texte::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_articles
JOIN eco.t_types_articles ON type_id = t_types_articles.oid
JOIN eco.p_oids ON (t_articles.oid = p_oids.oid AND code_table = ''articles'')
WHERE t_articles.oid > 0
ORDER BY t_articles.code', 'ART'),
(1, 't_categories_articles', 'Catégories articles', 'SELECT t_categories_articles.oid, t_categories_articles.code, t_categories_articles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_categories_articles LEFT JOIN eco.p_oids ON (t_categories_articles.oid = p_oids.oid AND code_table = ''categories_articles'')
WHERE t_categories_articles.oid > 0
ORDER BY t_categories_articles.code', 'CAA'),
(1, 't_compte', 'Comptes', 'SELECT t_compte.oid, t_compte.code, t_compte.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_compte LEFT JOIN eco.p_oids ON (t_compte.oid = p_oids.oid AND code_table = ''compte'')
WHERE t_compte.oid > 0
ORDER BY t_compte.code', 'CPT'),
(1, 't_centres_responsabilite', 'Centres responsabilité', 'SELECT t_centres_responsabilites.oid, t_centres_responsabilites.code, t_centres_responsabilites.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_centres_responsabilites LEFT JOIN eco.p_oids ON (t_centres_responsabilites.oid = p_oids.oid AND code_table = ''centres_responsabilites'')
WHERE t_centres_responsabilites.oid > 0
ORDER BY t_centres_responsabilites.code', 'CRE'),
(1, 't_familles_articles', 'Familles d''articles', 'SELECT t_familles_articles.oid, t_familles_articles.code, t_familles_articles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_familles_articles LEFT JOIN eco.p_oids ON (t_familles_articles.oid = p_oids.oid AND code_table = ''familles_articles'')
WHERE t_familles_articles.oid > 0
ORDER BY t_familles_articles.code', 'FAA'),
(1, 't_fournisseurs', 'Fournisseurs', 'SELECT t_fournisseurs.oid, t_fournisseurs.code, t_fournisseurs.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_fournisseurs LEFT JOIN eco.p_oids ON (t_fournisseurs.oid = p_oids.oid AND code_table = ''fournisseurs'')
WHERE t_fournisseurs.oid > 0
ORDER BY t_fournisseurs.code', 'FOU'),
(1, 't_gestionnaires', 'Gestionnaires', 'SELECT t_gestionnaires.oid, t_gestionnaires.code, t_gestionnaires.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_gestionnaires LEFT JOIN eco.p_oids ON (t_gestionnaires.oid = p_oids.oid AND code_table = ''gestionnaires'')
WHERE t_gestionnaires.oid > 0
ORDER BY t_gestionnaires.code', 'GES'),
(1, 't_lieux', 'Lieux', 'SELECT t_lieux.oid, t_lieux.code, t_lieux.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_lieux LEFT JOIN eco.p_oids ON (t_lieux.oid = p_oids.oid AND code_table = ''lieux'')
WHERE t_lieux.oid > 0
ORDER BY t_lieux.code', 'LIE'),
(1, 't_lpp_c', 'LPP', 'SELECT t_lpp_c.oid, t_lpp_c.code, t_lpp_c.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_lpp_c LEFT JOIN eco.p_oids ON (t_lpp_c.oid = p_oids.oid AND code_table = ''lpp'')
WHERE t_lpp_c.oid > 0
ORDER BY t_lpp_c.code', 'LPP'),
(1, 't_sous_categories_articles', 'Sous catégories articles', 'SELECT t_sous_categories_articles.oid, t_sous_categories_articles.code, t_sous_categories_articles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_sous_categories_articles LEFT JOIN eco.p_oids ON (t_sous_categories_articles.oid = p_oids.oid AND code_table = ''sous_categories_articles'')
WHERE t_sous_categories_articles.oid > 0
ORDER BY t_sous_categories_articles.code', 'SCA'),
(1, 't_sous_familles_articles', 'Sous familles articles', 'SELECT t_sous_familles_articles.oid, t_sous_familles_articles.code, t_sous_familles_articles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_sous_familles_articles LEFT JOIN eco.p_oids ON (t_sous_familles_articles.oid = p_oids.oid AND code_table = ''sous_familles_articles'')
WHERE t_sous_familles_articles.oid > 0
ORDER BY t_sous_familles_articles.code', 'SFA'),
(1, 't_type_article_cti', 'Types d''articles CTI', 'SELECT t_type_article_cti.oid, t_type_article_cti.code, t_type_article_cti.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_type_article_cti LEFT JOIN eco.p_oids ON (t_type_article_cti.oid = p_oids.oid AND code_table = ''type_article_cti'')
ORDER BY t_type_article_cti.code', 'TAC'),
(1, 't_types_articles', 'Types d''articles', 'SELECT t_types_articles.oid, t_types_articles.code, t_types_articles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_types_articles LEFT JOIN eco.p_oids ON (t_types_articles.oid = p_oids.oid AND code_table = ''types_articles'')
WHERE t_types_articles.oid > 0
ORDER BY t_types_articles.code', 'TYA'),
(1, 't_types_fournisseurs', 'Types de fournisseurs', 'SELECT t_types_fournisseurs.oid, t_types_fournisseurs.code, t_types_fournisseurs.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_types_fournisseurs LEFT JOIN eco.p_oids ON (t_types_fournisseurs.oid = p_oids.oid AND code_table = ''types_fournisseurs'')
WHERE t_types_fournisseurs.oid > 0
ORDER BY t_types_fournisseurs.code', 'TYF'),
(1, 't_types_mouvements', 'Types de mouvements', 'SELECT t_types_mouvements.oid, t_types_mouvements.code, t_types_mouvements.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_types_mouvements LEFT JOIN eco.p_oids ON (t_types_mouvements.oid = p_oids.oid AND code_table = ''types_mouvements'')
WHERE t_types_mouvements.oid > 0
ORDER BY t_types_mouvements.code', 'TYM'),
(1, 't_ucd_c', 'UCD', 'SELECT t_ucd_c.oid, t_ucd_c.code, t_ucd_c.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_ucd_c LEFT JOIN eco.p_oids ON (t_ucd_c.oid = p_oids.oid AND code_table = ''ucd'')
WHERE t_ucd_c.oid > 0
ORDER BY t_ucd_c.code', 'UCD'),
(1, 't_unites_fonctionnelles', 'Unités fonctionnelles', 'SELECT t_unites_fonctionnelles.oid, t_unites_fonctionnelles.code, t_unites_fonctionnelles.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_unites_fonctionnelles LEFT JOIN eco.p_oids ON (t_unites_fonctionnelles.oid = p_oids.oid AND code_table = ''unites_fonctionnelles'')
WHERE t_unites_fonctionnelles.oid > 0
ORDER BY t_unites_fonctionnelles.code', 'UFO'),
(1, 't_unites', 'Unités', 'SELECT t_unites.oid, t_unites.code, t_unites.texte, ''''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN ''O'' ELSE ''N'' END as utilise
FROM eco.t_unites LEFT JOIN eco.p_oids ON (t_unites.oid = p_oids.oid AND code_table = ''unites_stockage_articles'')
WHERE t_unites.oid > 0
ORDER BY t_unites.code', 'UNI')
;
-- 3/3 : Màj de la table iCTI
UPDATE eco.t_listes_tables SET
name = w_dbsetup.name,
texte = w_dbsetup.texte,
select_cmd = w_dbsetup.select_cmd
FROM w_dbsetup
WHERE t_listes_tables.code = w_dbsetup.code;
INSERT INTO eco.t_listes_tables(oid, code, name, texte, select_cmd)
SELECT oid, code, name, texte, select_cmd FROM w_dbsetup WHERE oid = 0 AND oid NOT IN (SELECT oid FROM eco.t_listes_tables);
INSERT INTO eco.t_listes_tables(code, name, texte, select_cmd)
SELECT code, name, texte, select_cmd FROM w_dbsetup WHERE oid <> 0 AND code NOT IN (SELECT code FROM eco.t_listes_tables);

+ 174
- 0
db/data/dbdata_eco_t_rapports.SQL View File

@ -0,0 +1,174 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_rapports.oid,
t_rapports.code,
t_rapports.texte,
t_rapports.is_cti,
template.code AS template_code,
t_rapports.is_template_updatable,
ARRAY[
CASE WHEN NOT (classe_0.sequence = 30 AND table_0.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN table_0.code ELSE 'TYA' END ||'|'||classe_0.code||'|'||section_0.code,
CASE WHEN NOT (classe_1.sequence = 30 AND table_1.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN table_1.code ELSE 'TYA' END ||'|'||classe_1.code||'|'||section_1.code,
CASE WHEN NOT (classe_2.sequence = 30 AND table_2.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN table_2.code ELSE 'TYA' END ||'|'||classe_2.code||'|'||section_2.code,
CASE WHEN NOT (classe_3.sequence = 30 AND table_3.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN table_3.code ELSE 'TYA' END ||'|'||classe_3.code||'|'||section_3.code,
CASE WHEN NOT (classe_4.sequence = 30 AND table_4.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')) THEN table_4.code ELSE 'TYA' END ||'|'||classe_4.code||'|'||section_4.code] AS condition_codes,
t_rapports.is_essentiel
FROM eco.t_rapports
LEFT JOIN eco.t_rapports template ON t_rapports.rapport_template_id = template.oid
LEFT JOIN eco.t_indicateur_condition condition_0 ON t_rapports.rapport_indicateur_condition_id[1] = condition_0.oid
LEFT JOIN eco.t_listes_tables table_0 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_0.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_0.column_name,'_','','g')
LEFT JOIN eco.t_classes classe_0 ON table_0.oid = classe_0.table_id AND classe_0.sequence = substring(split_part(condition_0.code,'#',2),3,2) AND left(split_part(condition_0.code,'#',2),2) = 'LS'
LEFT JOIN eco.t_classes_sections section_0 ON classe_0.oid = section_0.classe_id AND section_0.oid = right(split_part(condition_0.code,'#',2),-4)
LEFT JOIN eco.t_indicateur_condition condition_1 ON t_rapports.rapport_indicateur_condition_id[2] = condition_1.oid
LEFT JOIN eco.t_listes_tables table_1 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_1.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_1.column_name,'_','','g')
LEFT JOIN eco.t_classes classe_1 ON table_1.oid = classe_1.table_id AND classe_1.sequence = substring(split_part(condition_1.code,'#',2),3,2) AND left(split_part(condition_1.code,'#',2),2) = 'LS'
LEFT JOIN eco.t_classes_sections section_1 ON classe_1.oid = section_1.classe_id AND section_1.oid = right(split_part(condition_1.code,'#',2),-4)
LEFT JOIN eco.t_indicateur_condition condition_2 ON t_rapports.rapport_indicateur_condition_id[3] = condition_2.oid
LEFT JOIN eco.t_listes_tables table_2 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_2.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_2.column_name,'_','','g')
LEFT JOIN eco.t_classes classe_2 ON table_2.oid = classe_2.table_id AND classe_2.sequence = substring(split_part(condition_2.code,'#',2),3,2) AND left(split_part(condition_2.code,'#',2),2) = 'LS'
LEFT JOIN eco.t_classes_sections section_2 ON classe_2.oid = section_2.classe_id AND section_2.oid = right(split_part(condition_2.code,'#',2),-4)
LEFT JOIN eco.t_indicateur_condition condition_3 ON t_rapports.rapport_indicateur_condition_id[4] = condition_3.oid
LEFT JOIN eco.t_listes_tables table_3 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_3.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_3.column_name,'_','','g')
LEFT JOIN eco.t_classes classe_3 ON table_3.oid = classe_3.table_id AND classe_3.sequence = substring(split_part(condition_3.code,'#',2),3,2) AND left(split_part(condition_3.code,'#',2),2) = 'LS'
LEFT JOIN eco.t_classes_sections section_3 ON classe_3.oid = section_3.classe_id AND section_3.oid = right(split_part(condition_3.code,'#',2),-4)
LEFT JOIN eco.t_indicateur_condition condition_4 ON t_rapports.rapport_indicateur_condition_id[5] = condition_4.oid
LEFT JOIN eco.t_listes_tables table_4 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_4.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_4.column_name,'_','','g')
LEFT JOIN eco.t_classes classe_4 ON table_4.oid = classe_4.table_id AND classe_4.sequence = substring(split_part(condition_4.code,'#',2),3,2) AND left(split_part(condition_4.code,'#',2),2) = 'LS'
LEFT JOIN eco.t_classes_sections section_4 ON classe_4.oid = section_4.classe_id AND section_4.oid = right(split_part(condition_4.code,'#',2),-4)
WHERE (t_rapports.is_cti = '1' OR t_rapports.code LIKE 'CTI_%') AND
t_rapports.code <> 'CTI_PORTFO'
ORDER BY t_rapports.code
LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte,
is_cti,
template_code,
is_template_updatable,
condition_codes,
is_essentiel
)
VALUES
(1, 'CTI_ESS_01', 'Essentiels CTI', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_02', 'Dispositifs Médicaux', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|DM", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_03', 'Dispostifs Médicaux Implantables', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|DMI", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_04', 'Médicaments', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|MED", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_05', 'Parapharmacie', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|PAR", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_06', 'Economat', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|ECO", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_07', 'Cuisine', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|CUI", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_08', 'Lingerie', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|LIN", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_ESS_09', 'Atelier', '1', 'CTI_ESS_01', '0', '{"TYA|CTI_CLE_REP|ATE", "NULL", "NULL", "NULL", "NULL"}', '1'),
(1, 'CTI_LIST_CMD', 'Justificatif Commandes', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_CMD2', 'Justificatif Délais et litiges', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT', 'Justificatif Mouvements', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT100', 'Justificatif Mouvements et Stocks', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT2', 'Justificatif Entrées', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT3', 'Justificatif Sorties', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT4', 'Justificatif Quantités', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT5', 'Justificatif Montants', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT6', 'Justificatif Montants Entrées', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_LIST_MVT7', 'Justificatif Montants sorties', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_CMD', 'Commandes', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_CMD2', 'Délais et litiges', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_CMD3', 'Commandes (engagement)', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVS', 'Stocks calculés', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT', 'Quantités et Montants Mouvements', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT2', 'Quantités et Montants Entrées', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT3', 'Quantités et Montants Sorties', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT4', 'Quantités Mouvements', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT5', 'Montants Mouvements', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT6', 'Montants Entrées', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_MVT7', 'Montants Sorties', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_STK', 'Stocks Mensuels', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_STK2', 'Quantités stocks mensuels', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0'),
(1, 'CTI_VIEW_STK3', 'Montants Stocks Mensuels', '1', '', '0', '{"NULL", "NULL", "NULL", "NULL", "NULL"}', '0')
;
-- 3/3 : Màj de la table iCTI
SELECT eco.cti_reorganize_indicateur_condition();
INSERT INTO eco.t_rapports(oid, code, texte, is_cti, is_essentiel)
SELECT
oid,
code,
texte,
is_cti,
is_essentiel
FROM w_dbsetup
WHERE oid = 0 AND oid NOT IN (SELECT oid FROM eco.t_rapports);
INSERT INTO eco.t_rapports(code, texte, is_cti, is_essentiel)
SELECT
code,
texte,
is_cti,
is_essentiel
FROM w_dbsetup
WHERE oid <> 0
AND code NOT IN (SELECT code FROM eco.t_rapports)
;
UPDATE eco.t_rapports SET
texte = w_dbsetup.texte,
is_cti = w_dbsetup.is_cti,
is_essentiel = w_dbsetup.is_essentiel,
rapport_template_id = template.oid,
is_template_updatable = w_dbsetup.is_template_updatable,
rapport_indicateur_condition_id = ARRAY[condition_0.oid,condition_1.oid,condition_2.oid,condition_3.oid,condition_4.oid]
FROM w_dbsetup
LEFT JOIN eco.t_rapports template ON template_code = template.code
LEFT JOIN eco.t_listes_tables table_0 ON split_part(condition_codes[1],'|',1) = table_0.code
OR table_0.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)
LEFT JOIN eco.t_classes classe_0 ON table_0.oid = classe_0.table_id AND classe_0.code = split_part(condition_codes[1] ,'|',2)
LEFT JOIN eco.t_classes_sections section_0 ON classe_0.oid = section_0.classe_id AND section_0.code = split_part(condition_codes[1] ,'|',3)
LEFT JOIN eco.t_indicateur_condition condition_0 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_0.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_0.column_name,'_','','g')
AND classe_0.sequence = substring(split_part(condition_0.code,'#',2),3,2) AND left(split_part(condition_0.code,'#',2),2) = 'LS'
AND section_0.oid = right(split_part(condition_0.code,'#',2),-4)
LEFT JOIN eco.t_listes_tables table_1 ON split_part(condition_codes[2],'|',1) = table_1.code
OR table_1.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)
LEFT JOIN eco.t_classes classe_1 ON table_1.oid = classe_1.table_id AND classe_1.code = split_part(condition_codes[2] ,'|',2)
LEFT JOIN eco.t_classes_sections section_1 ON classe_1.oid = section_1.classe_id AND section_1.code = split_part(condition_codes[2] ,'|',3)
LEFT JOIN eco.t_indicateur_condition condition_1 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_1.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_1.column_name,'_','','g')
AND classe_1.sequence = substring(split_part(condition_1.code,'#',2),3,2) AND left(split_part(condition_1.code,'#',2),2) = 'LS'
AND section_1.oid = right(split_part(condition_1.code,'#',2),-4)
LEFT JOIN eco.t_listes_tables table_2 ON split_part(condition_codes[3],'|',1) = table_2.code
OR table_2.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)
LEFT JOIN eco.t_classes classe_2 ON table_2.oid = classe_2.table_id AND classe_2.code = split_part(condition_codes[3] ,'|',2)
LEFT JOIN eco.t_classes_sections section_2 ON classe_2.oid = section_2.classe_id AND section_2.code = split_part(condition_codes[3] ,'|',3)
LEFT JOIN eco.t_indicateur_condition condition_2 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_2.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_2.column_name,'_','','g')
AND classe_2.sequence = substring(split_part(condition_2.code,'#',2),3,2) AND left(split_part(condition_2.code,'#',2),2) = 'LS'
AND section_2.oid = right(split_part(condition_2.code,'#',2),-4)
LEFT JOIN eco.t_listes_tables table_3 ON split_part(condition_codes[4],'|',1) = table_3.code
OR table_3.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)
LEFT JOIN eco.t_classes classe_3 ON table_3.oid = classe_3.table_id AND classe_3.code = split_part(condition_codes[4] ,'|',2)
LEFT JOIN eco.t_classes_sections section_3 ON classe_3.oid = section_3.classe_id AND section_3.code = split_part(condition_codes[4] ,'|',3)
LEFT JOIN eco.t_indicateur_condition condition_3 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_3.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_3.column_name,'_','','g')
AND classe_3.sequence = substring(split_part(condition_3.code,'#',2),3,2) AND left(split_part(condition_3.code,'#',2),2) = 'LS'
AND section_3.oid = right(split_part(condition_3.code,'#',2),-4)
LEFT JOIN eco.t_listes_tables table_4 ON split_part(condition_codes[5],'|',1) = table_4.code
OR table_4.code = (SELECT t_listes_tables.code FROM eco.t_listes_tables JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP' AND table_id = t_listes_tables.oid)
LEFT JOIN eco.t_classes classe_4 ON table_4.oid = classe_4.table_id AND classe_4.code = split_part(condition_codes[5] ,'|',2)
LEFT JOIN eco.t_classes_sections section_4 ON classe_4.oid = section_4.classe_id AND section_4.code = split_part(condition_codes[5] ,'|',3)
LEFT JOIN eco.t_indicateur_condition condition_4 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(table_4.name,'^t_',''),'s_','','g'),'x',''),'s$','') || 'id' = regexp_replace(condition_4.column_name,'_','','g')
AND classe_4.sequence = substring(split_part(condition_4.code,'#',2),3,2) AND left(split_part(condition_4.code,'#',2),2) = 'LS'
AND section_4.oid = right(split_part(condition_4.code,'#',2),-4)
WHERE t_rapports.code = w_dbsetup.code;

+ 4434
- 0
db/data/dbdata_eco_t_rapports_rubriques.SQL
File diff suppressed because it is too large
View File


+ 71
- 0
db/data/dbdata_eco_t_type_article_cti.SQL View File

@ -0,0 +1,71 @@
-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;
CREATE TEMP TABLE w_dbsetup AS
SELECT
t_type_article_cti.oid,
t_type_article_cti.code,
t_type_article_cti.texte
FROM eco.t_type_article_cti
ORDER BY code LIMIT 0
;
-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
oid,
code,
texte
)
VALUES
(0, '*', 'Non renseigné'),
(1, 'DM', 'Dispositifs Médicaux'),
(1, 'DMI', 'Dispositifs Médicaux Implantables'),
(1, 'ECO', 'Economat'),
(1, 'MED', 'Médicaments'),
(1, 'ZZZ', 'Autres')
;
-- 3/3 : Màj de la table iCTI
-- Mise à jour des données
UPDATE eco.t_type_article_cti SET
code = w_dbsetup.code
FROM w_dbsetup
WHERE
t_type_article_cti.oid = w_dbsetup.oid
AND w_dbsetup.oid = 0;
UPDATE eco.t_type_article_cti SET
texte = w_dbsetup.texte
FROM w_dbsetup
WHERE
t_type_article_cti.code = w_dbsetup.code
AND (
t_type_article_cti.texte IS DISTINCT FROM w_dbsetup.texte
);
INSERT INTO eco.t_type_article_cti(
oid,
code,
texte)
SELECT
oid,
code,
texte
FROM w_dbsetup
WHERE
oid = 0
AND oid NOT IN (SELECT oid FROM eco.t_type_article_cti);
INSERT INTO eco.t_type_article_cti(
code,
texte)
SELECT
w_dbsetup.code,
w_dbsetup.texte
FROM w_dbsetup
WHERE
w_dbsetup.oid <> 0
AND w_dbsetup.code NOT IN (SELECT code FROM eco.t_type_article_cti WHERE code IS NOT NULL);

+ 4
- 0
db/data2/dbdata_eco_t_classes.csv View File

@ -0,0 +1,4 @@
oid|code|texte|is_cti|sequence|table_code
1|CTI_CLE_REP|Clef de répartition CTI|0|30|TYA
1|CTI_ESS_ART80|Lstes des articles répartis représentant 80% des stocks en montant|1|1|ART
1|CTI_TYPMVT|Types de mouvements CTI|0|1|TYM

+ 17
- 0
db/data2/dbdata_eco_t_classes_sections.csv View File

@ -0,0 +1,17 @@
oid|code|texte|condition|include_code|exclude_code|table_code|classe_sequence
1|ATE|Atelier||0|0|TYA|30
1|CUI|Cuisine||0|0|TYA|30
1|DM|Dispositifs Médicaux||0|0|TYA|30
1|DMI|Dispositifs Médicaux Implantables||0|0|TYA|30
1|ECO|Economat||0|0|TYA|30
1|LIN|Lingerie||0|0|TYA|30
1|MED|Médicaments||0|0|TYA|30
1|PAR|Parapharmacie||0|0|TYA|30
1|00|Livraison||||TYM|1
1|01|Consommations||||TYM|1
1|02|Pertes||||TYM|1
1|99|Autres||||TYM|1
1|11|Régularisation livraison||||TYM|1
1|12|Retour||||TYM|1
1|13|Avoir||||TYM|1
1|30|Régularisation inventaire||||TYM|1

+ 18957
- 0
db/data2/dbdata_eco_t_classification_atc.csv
File diff suppressed because it is too large
View File


+ 3
- 0
db/data2/dbdata_eco_t_divers.csv View File

@ -0,0 +1,3 @@
code|texte|valeur|valeur_date|description
CLE_REPARTITION|Code de la table à utiliser pour créer la classe utilisée comme clé de répartition|TYA|1970-01-01|TYA (type d'articles, défaut), ART (articles), CAA (cétgories articles), CPT (compte), FAA (familles articles), LIE (lieu)
UPDATE PMSI|Mise à jour des données PMSI à partir des données Gestion Economique|0|1970-01-01|0: Désactivé 1: Activé

+ 30
- 0
db/data2/dbdata_eco_t_indicateur_theme.csv View File

@ -0,0 +1,30 @@
oid|code|texte|level|parent_code
1|--0|Source|1|
1|--1|Thèmes principaux|1|
1|--2|Période|1|
1|--3|Rapports|1|
1|--4|Type de donnée|1|
1|--DDATE|Date date|2|--2
1|--DDATE_COMMANDE|Date date_commande|2|--2
1|--DDATE_ENGAGEMENT|Date date_engagement|2|--2
1|--DDATE_FIN|Date date_fin|2|--2
1|--DDATE_ITEM|Date date_item|2|--2
1|--R1|Rapports CTI|2|--3
1|--R3|Rapports Etablissement|2|--3
1|--S1|Indicateurs CTI|2|--0
1|--S2|Indicateurs Groupe|2|--0
1|--S3|Indicateurs spécifiques Etablissement|2|--0
1|--T0010|Mouvements|2|--1
1|--T0020|Commandes|2|--1
1|--T0030|Stocks mensuels|2|--1
1|--T0071|Table Articles|2|--1
1|--T0072|Table Sites|2|--1
1|--T0073|Table Lieux|2|--1
1|--T0074|Table UF|2|--1
1|--T0075|Table Gestionnaires|2|--1
1|--T0076|Table Unités|2|--1
1|1QTE|Quantité|2|--4
1|2MNT|Montants|2|--4
1|3DUR|Durées|2|--4
1|4TAUX|Taux|2|--4
1|5STOCK|Stocks|2|--4

+ 145
- 0
db/data2/dbdata_eco_t_indicateurs.csv View File

@ -0,0 +1,145 @@
oid|texte|table_name|column_name|is_cti|entete|code|total_function|output_format|width|entete_etendue|dimension_date_1|dimension_date_2|dimension_date_3|dimension_date_4|dimension_date_5|dimension_date|indicateur_associe_1_code|indicateur_associe_2_code|indicateur_associe_3_code|indicateur_associe_4_code|indicateur_associe_5_code|indicateur_associe_6_code|indicateur_associe_7_code|indicateur_associe_8_code|indicateur_associe_9_code|indicateur_associe_10_code|indicateur_associe_11_code|indicateur_associe_12_code|indicateur_associe_13_code|indicateur_associe_14_code|indicateur_associe_15_code|indicateur_associe_16_code|indicateur_associe_17_code|indicateur_associe_18_code|indicateur_associe_19_code|indicateur_associe_20_code|indicateur_reference_code|is_template|indicateur_template_code|variable_definition_1|variable_definition_2|variable_definition_3|variable_value_1|variable_value_2|variable_value_3|variable_value_text_1|variable_value_text_2|variable_value_text_3|description|theme_1_code|theme_2_code|theme_3_code|theme_4_code|theme_5_code|theme_6_code|theme_7_code|theme_8_code|theme_9_code|is_hide
1|Nombre d'articles couvrant 80% des stocks|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:[TEMPLATE_VALUE_1]]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Code de ventilation|||||||||Nombre d'articles couvrant 80% des stocks en quantité|1QTE|||||||||1
1|Nombre d'articles couvrant 80% des stocks - Atelier|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:ATE]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#ATE|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||ATE|||Atelier||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - Cuisine|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:CUI]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#CUI|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||CUI|||Cuisine||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - DispositifsMédicaux|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:DM]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#DM|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||DM|||Dispositifs Médicaux||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - DispositifsMédicauxImplantables|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:DMI]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#DMI|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||DMI|||Dispositifs Médicaux Implantables||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - Economat|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:ECO]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#ECO|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||ECO|||Economat||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - Lingerie|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:LIN]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#LIN|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||LIN|||Lingerie||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - Médicaments|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:MED]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#MED|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||MED|||Médicaments||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks - Parapharmacie|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([CLASSE:CTI_ESS_ART80:PAR]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80MNT#PAR|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_ART80MNT||||PAR|||Parapharmacie||||1QTE|||||||||0
1|Nombre d'articles couvrant 80% des stocks|V_STOCK_MENSUEL_X|DISTINCT CASE WHEN article_id IN ([LISTE:CTI_ESS_ART80]) THEN article_id ELSE null END|1|Nb Art. 80% stock Qté.|CTI_ART80QTE|COUNT||50|Nombre des articles couvrant 80% des stocks|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre d'articles couvrant 80% des stocks en quantité|1QTE|||||||||0
1|Code article|TABART|article_code|1|Article|CTI_ARTCODE|*LIST||50|Code article|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code de l'article||||||||||0
1|Nombre moyen d'articles par fournisseur|*CALC|base.cti_division([1],[2])|1|Moy Art. / four.|CTI_ARTFOUMOY|*CALC||50|Nombre moyen d'articles par fournisseur| | | | | | |CTI_NBART|CTI_NBFOU#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre moyen d'articles par fournisseur|1QTE|||||||||1
1|Oid article|TABART|CASE WHEN COUNT(DISTINCT article_id) = 1 THEN MAX(article_id) ELSE 0 END|1||CTI_ARTOID|*LIST||0||1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Désignation de l'article|TABART|CASE WHEN COUNT(DISTINCT article_texte) = 1 THEN MAX(article_texte) ELSE '' END|1|Article|CTI_ARTTXT|*LIST||200|Désignation de l'article|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Désignation de l'article||||||||||0
1|Date de commande|V_LIGNES_COMMANDES_X|CASE WHEN COUNT(DISTINCT(date_commande)) = 1 THEN MAX(date_commande)::text ELSE '' END|1|Date de commande|CTI_COMDATE|*LIST|DD/MM/YYYY|65|Date de commande| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Date de commande|3DUR|||||||||0
1|Délai livraison moyen|*CALC|base.cti_division([1],[2])|1|Moy Délai livraison|CTI_DELLIVMOY|*CALC||80|Délai livraison moyen| | | | | | |CTI_NBJLIV|CTI_NB_LIGCOM#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||3DUR|2MNT|1QTE|||||||0
1|Délai paiement moyen founisseur|*CALC|base.cti_division([1],[2])|1|Moy Délai payment|CTI_DELPAYMOY|*CALC||50|Délai paiement moyen founisseur| | | | | | |CTI_NBJPAYFOU#2|CTI_NB_LIGCOM#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Délai paiement moyen founisseur|3DUR|2MNT|1QTE|||||||1
1|Date d'engagement|V_LIGNES_COMMANDES_X|CASE WHEN COUNT(DISTINCT(date_engagement)) = 1 THEN MAX(date_engagement)::text ELSE '' END|1|Date d'engagement|CTI_ENGDATE|*LIST|DD/MM/YYYY|65|Date d'engagement| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Date d'engagement|3DUR|||||||||0
1|Erreur|V_SEP__X||1||CTI_ERROR|SEP|#|50||0| | | | |0|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Nombre moyen de factures par fournisseur|*CALC|base.cti_division([1],[2])|1|Moy Fac. / Four.|CTI_FACFOUMOY|*CALC||50|Nombre moyen de factures par fournisseur| | | | | | |CTI_NBFAC#2|CTI_NBFOU#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre moyen de factures par fournisseur|1QTE|||||||||1
1|Fréquence de rupture de stocks|*CALC|base.cti_division([2],[1])|1|Fr. ruptures|CTI_FRRUPSTO|*CALC|#j|50|Fréquence de rupture de stocks| | | | | | |CTI_NBRUPSTO|CTI_NBJPER|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Duréee en jours / Nombre de rupture de stocks|3DUR|||||||||0
1|Code du Gestionnaire|TABGEST|CASE WHEN COUNT( DISTINCT gestionnaire_code) = 1 THEN MAX(gestionnaire_code) ELSE '' END|1|Gest|CTI_GESTCODE|*LIST|40|30|Code Gestionnaire|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code du Gestionnaire||||||||||0
1|Code du lieu|TABLIEU|CASE WHEN COUNT(DISTINCT lieu_code) = 1 THEN MAX(lieu_code) ELSE '' END|1|Lieu|CTI_LIEUCODE|*LIST||30|Code du lieu|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code du lieu||||||||||0
1|Marge brute|*CALC|[3]*(base.cti_division([1],[3])-base.cti_division([2],[4]))|1|Marge brute|CTI_MBRUT|*CALC|#,00E|100|Marge brute| | | | | | |CTI_MTSORTTCSTO-2#01|CTI_MTSORTTCSTO-2#01|CTI_NBSORSTO#01|CTI_MTENTTTCSTO-2#00|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d'entrées)|2MNT|||||||||1
1|Montant HT Pertes et Périmés|*CALC|[1] + [2]|1||CTI_MNTHTPEPE|*CALC|#,00E|100|| | | | | | |CTI_MNTHTUFPER|CTI_MTSORHT-2#02|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant HT pertes et périmés|2MNT|||||||||1
1|Montant HT dans UF de Périmés|V_MOUVEMENTS_ARTICLES_X|CASE WHEN unite_fonctionnelle_id IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt HT UF Pér.|CTI_MNTHTUFPER|SUM|#,00E|100|Montant HT UF Périmés|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant HT des pertes par rapport à la liste CTI des UF de pertes|2MNT|||||||||1
1|Montant payé HT|V_LIGNES_COMMANDES_X|montant_liquidation_ht|1|Mt payé. HT|CTI_MNTPAYHT|SUM|#,00E|100|Montant payé HT|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant Liquidation HT|2MNT|||||||||0
1|Montant payé TTC|V_LIGNES_COMMANDES_X|montant_liquidation_ttc|1|Mt payé. TTC|CTI_MNTPAYTTC|SUM|#,00E|100|Montant payé TTC|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant Liquidation TTC|2MNT|||||||||0
1|Valeur stock début période|V_STOCK_MENSUEL_X|CASE WHEN date_debut = periode THEN stock_valeur_debut ELSE 0 END|1|Valeur Stock début|CTI_MNTSTODEB|SUMFIRSTMONTH|#,00E|100|Valeur stock début période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||2MNT|||||||||0
1|Montant stock calculé début période|V_MOUVEMENTS_STOCKS_X|round(CASE WHEN gere_en_stock != '0' AND date < periode AND est_dernier_jour = '1' THEN stock_quantite_fin*prix_unitaire_calcule WHEN gere_en_stock != '0' AND date = periode AND est_premier_jour = '1' THEN stock_quantite_debut*prix_unitaire_calcule ELSE 0 END,10)|1|Mt Stock début|CTI_MNTSTODEBACHAT|SUMFIRSTMONTH|#,00E|100|Montant HT stock calculé début période|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant des stocks en début de période basé sur le pump CTI||||||||||0
1|Montant stock calculé début|V_MOUVEMENTS_ARTICLES_X|round(stock_quantite_debut*prix_unitaire_calcule,10)|1|Mt Stock fin|CTI_MNTSTODEBMVT|SUM|#,00E|100|Montant TTC stock calculé en début de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant stock en début de mouvement basé sur le pump CTI||||||||||0
1|Valeur stock fin période|V_STOCK_MENSUEL_X|CASE WHEN date_fin = toperiode THEN stock_valeur_fin ELSE 0 END|1|Valeur Stock fin|CTI_MNTSTOFIN|SUMLASTMONTH|#,00E|100|Valeur stock fin période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||2MNT|||||||||0
1|Montant stock calculé fin période|V_MOUVEMENTS_STOCKS_X|round(CASE WHEN gere_en_stock != '0' AND toperiode <= date_fin AND est_dernier_jour = 1 THEN stock_quantite_fin*prix_unitaire_calcule ELSE 0 END,10)|1|Mt Stock fin|CTI_MNTSTOFINACHAT|SUMLASTMONTH|#,00E|100|Montant HT stock calculé fin période|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant stock fin de période basé sur le pump CTI||||||||||0
1|Montant stock calculé fin|V_MOUVEMENTS_ARTICLES_X|(MAX(ARRAY[CASE WHEN est_dernier_jour = '1' THEN date::text ELSE '1900-01-01'::text END,round(stock_quantite_fin*prix_unitaire_calcule,10)::text]))[2]::numeric|1|Mt Stock fin|CTI_MNTSTOFINMVT||#,00E|100|Montant HT stock calculé en fin de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant stock en fin de mouvement basé sur le pump CTI||||||||||0
1|Valeur stock moyen (mouvements)|*CALC|base.cti_division([1]+[2],2)|1|Mnt. Stock moy.|CTI_MNTSTOMOYMVT|*CALC|#,00E|100|Valeur stock moyen (mouvements)| | | | | | |CTI_MNTSTODEBACHAT|CTI_MNTSTOFINACHAT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Valeur de stock moyen (valeur stock début (achat) + valeur stock fin (achat) /2)||||||||||0
1|Valeur stock moyen|*CALC|base.cti_division([1]+[2],2)|1|Mnt. Stock moy.|CTI_MNTSTOMY|*CALC|#,00E|100|Valeur stock moyen| | | | | | |CTI_MNTSTODEB|CTI_MNTSTOFIN|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Valeur de stock moyen (valeur stock début (achat) + valeur stock fin (achat) /2)|2MNT|||||||||0
1|Valeur TTC stock début période|V_STOCK_MENSUEL_X|CASE WHEN date_debut = periode THEN stock_valeur_debut_ttc ELSE 0 END|1|Valeur TTC Stock début|CTI_MNTTTCSTODEB|SUMFIRSTMONTH|#,00E|100|Valeur TTC stock début période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||2MNT|||||||||0
1|Valeur TTC stock fin période|V_STOCK_MENSUEL_X|CASE WHEN date_fin = toperiode THEN stock_valeur_fin_ttc ELSE 0 END|1|Valeur TTC Stock fin|CTI_MNTTTCSTOFIN|SUMLASTMONTH|#,00E|100|Valeur TTC stock fin période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||2MNT|||||||||0
1|Montant des achats|V_LIGNES_COMMANDES_X|montant_liquidation_ttc|1|Mt achats|CTI_MTACHA|SUM|#,00E|100|Montant des achats|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant des achats|2MNT|||||||||0
1|Panier Moyen (HT)|*CALC|base.cti_division([1],[2])|1|Panier Moy. HT|CTI_MTCMOYHT|*CALC|#E|100|Panier Moyen (HT)| | | | | | |CTI_MTCOMHT#2|CTI_NBCOM#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Panier moyen HT (montant commandé ht / nombre de commandes)|2MNT|1QTE||||||||0
1|Montant commandé HT|V_LIGNES_COMMANDES_X|montant_commande_ht|1|Mt Com. HT|CTI_MTCOMHT|SUM|#,00E|100|Montant Commandé HT|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant Commandé HT|2MNT|||||||||0
1|Montant commandé TTC|V_LIGNES_COMMANDES_X|montant_commande_ttc|1|Mt Com. TTC|CTI_MTCOMTTC|SUM|#,00E|100|Montant commande TTC|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant commande TTC|2MNT|||||||||0
1|Montant TTC des entrées|V_MOUVEMENTS_ARTICLES_X|entree_montant|1|Mt Ent. TTC|CTI_MTENT|SUM|#,00E|100|Montant TTC des entrées|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant TTC des entrées|2MNT|||||||||0
1|Montant HT des entrées|V_MOUVEMENTS_ARTICLES_X|entree_montant_ht|1|Mt Ent. HT|CTI_MTENTHT|SUM|#,00E|100|Montant HT des entrées|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant HT des entrées|2MNT|||||||||0
1|Montant HT|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant_ht ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] HT|CTI_MTENTHT-2|SUM|#,00E|100|Montant HT [TEMPLATE_TEXT_1]|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements d'entrée||||||||||2MNT|||||||||1
1|Montant des entrées|V_STOCK_MENSUEL_X|entree_montant|1|Mt Ent. HT|CTI_MTENTSTO|SUM|#,00E|100|Montant HT des entrées|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant TTC des sorties|2MNT|||||||||0
1|Montant TTC des entrées par type|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] TTC|CTI_MTENTTTC-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] TTC|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements d'entrée||||||||||2MNT|||||||||1
1|Montant TTC des entrées par type - autres|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:99]) THEN entree_montant ELSE 0 END|1|Mt autres TTC|CTI_MTENTTTC-2#99|SUM|#,00E|100|Montant autres TTC|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTENTTTC-2||||99|||autres||||2MNT|||||||||0
1|Montant TTC des entrées (stock)|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] TTC (stock)|CTI_MTENTTTCSTO-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] TTC (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements d'entrée|||||||||Montant TTC des entrées par type (produit gérés stock)||||||||||1
1|Montant TTC des entrées (stock) - livraison|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:00]) THEN entree_montant ELSE 0 END|1|Mt livraison TTC (stock)|CTI_MTENTTTCSTO-2#00|SUM|#,00E|100|Montant livraison TTC (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTENTTTCSTO-2||||00|||livraison||||2MNT|||||||||0
1|Montant d'achats auprès des fournisseurs références|V_LIGNES_COMMANDES_X|CASE WHEN fournisseur_id IN [LISTE:CTI_FOUREF] OR fournisseur_id = fournisseur_principal_id THEN montant_liquidation_ttc ELSE 0 END|1|Mt achat four. ref.|CTI_MTFOUGR|SUM|#,00E|100|Montant d'achats auprès des fournisseurs références|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant d'achats auprès des fournisseurs références|2MNT|||||||||1
1|Montant HT des entrées (stock)|V_MOUVEMENTS_ARTICLES_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_montant_ht ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] HT (stock)|CTI_MTHTSORSTO-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] HT (stock)|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements d'entrée|||||||||Montant HT des entrées par type (produits gérés en stock)||||||||||1
1|Montant Ecart HT|V_MOUVEMENTS_ARTICLES_X|entree_montant_ht-sortie_montant_ht|1|Mt Ecart HT|CTI_MTMVTECENTSORHT|SUM|#,00E|100|Montant Ecart HT|1| | | | |1|CTI_MTENTHT|CTI_MTSORHT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les montants d'entrée et de sortie en HT|2MNT|||||||||0
1|Montant Ecart TTC|V_MOUVEMENTS_ARTICLES_X|entree_montant-sortie_montant|1|Mt Ecart TTC|CTI_MTMVTECENTSORTTC|SUM|#,00E|100|Montant Ecart TTC|1| | | | |1|CTI_MTENT|CTI_MTSORT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les montants d'entrée et de sortie en TTC|2MNT|||||||||0
1|Montant non livré HT|V_LIGNES_COMMANDES_X|montant_non_livraison_ht|1|Mt Non Liv. HT|CTI_MTNLIVHT|SUM|#,00E|80|Montant non livré HT|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant non livraison HT|2MNT|||||||||0
1|Montant non livré TTC|V_LIGNES_COMMANDES_X|montant_non_livraison_ttc|1|Mt Non Liv. TTC|CTI_MTNLIVTTC|SUM|#,00E|80|Montant non livré TTC|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant non livré TTC|2MNT|||||||||0
1|Montant port|V_LIGNES_COMMANDES_X|montant_commande_port|1|Mt Port|CTI_MTPORT|SUM|#,00E|100|Montant port|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant port|2MNT|||||||||1
1|Montant remise|V_LIGNES_COMMANDES_X|montant_commande_remise|1|Mt Remise|CTI_MTREM|SUM|#,00E|80|Montant remise|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant remise|2MNT|||||||||0
1|Montant HT des sorties|V_MOUVEMENTS_ARTICLES_X|sortie_montant_ht|1|Mt Sor. HT|CTI_MTSORHT|SUM|#,00E|100|Montant HT des sorties|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant HT des sorties|2MNT|||||||||0
1|Montant HT des sorties|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] HT|CTI_MTSORHT-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] HT|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements de sortie||||||||||2MNT|||||||||1
1|Montant HT des sorties - consommation|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt consommation HT|CTI_MTSORHT-2#01|SUM|#,00E|100|Montant consommation HT|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTSORHT-2||||01|||consommation||||2MNT|||||||||0
1|Montant HT des sorties - pertes|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:02]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt pertes HT|CTI_MTSORHT-2#02|SUM|#,00E|100|Montant pertes HT|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTSORHT-2||||02|||pertes||||2MNT|||||||||0
1|Montant HT des sorties - autres|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:99]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt autres HT|CTI_MTSORHT-2#99|SUM|#,00E|100|Montant autres HT|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTSORHT-2||||99|||autres||||2MNT|||||||||1
1|Montant HT des sorties (stock)|V_MOUVEMENTS_ARTICLES_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant_ht ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] HT (stock)|CTI_MTSORHTSTO-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] HT (stock)|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements de sortie|||||||||Montant HT des sorties par type (produits gérés en stock)||||||||||1
1|Montant TTC des sorties|V_MOUVEMENTS_ARTICLES_X|sortie_montant|1|Mt Sor. TTC|CTI_MTSORT|SUM|#,00E|100|Montant TTC des sorties|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant TTC des sorties|2MNT|||||||||0
1|Montant des sorties|V_STOCK_MENSUEL_X|sortie_montant|1|Mt Sor. HT|CTI_MTSORTSTO|SUM|#,00E|100|Montant HT des sorties|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant TTC des sorties|2MNT|||||||||0
1|Montant TTC des sorties par type|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] TTC|CTI_MTSORTTC-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] TTC|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements de sortie||||||||||2MNT|||||||||1
1|Montant TTC des sorties par type - pertes|V_MOUVEMENTS_ARTICLES_X|CASE WHEN type_mouvement_id IN ([CLASSE:CTI_TYPMVT:02]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END|1|Mt pertes TTC|CTI_MTSORTTC-2#02|SUM|#,00E|100|Montant pertes TTC|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTSORTTC-2||||02|||pertes||||2MNT|||||||||0
1|Montant TTC des sorties (stock)|V_MOUVEMENTS_ARTICLES_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END|1|Mt [TEMPLATE_TEXT_1] TTC (stock)|CTI_MTSORTTCSTO-2|SUM|#,00E|100|Montant [TEMPLATE_TEXT_1] TTC (stock)|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements de sortie|||||||||Montant TTC des sorties par type (produit gérés en stock)|2MNT|||||||||1
1|Montant TTC des sorties (stock) - consommation|V_MOUVEMENTS_ARTICLES_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_montant ELSE 0 END|1|Mt consommation TTC (stock)|CTI_MTSORTTCSTO-2#01|SUM|#,00E|100|Montant consommation TTC (stock)|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_MTSORTTCSTO-2||||01|||consommation||||2MNT|||||||||0
1|Montant Ecart HT|V_STOCK_MENSUEL_X|entree_montant-sortie_montant|1|Mt Ecart HT|CTI_MTSTOECENTSORHT|SUM|#,00E|100|Montant Ecart HT|4| | | | |4|CTI_MTENTHT|CTI_MTSORHT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les montants d'entrée et de sortie en HT|2MNT|||||||||0
1|Montant TVA|V_LIGNES_COMMANDES_X|montant_commande_tva|1|Mt TVA|CTI_MTTVA|SUM|#,00E|80|Montant TVA|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Montant TVA|2MNT|||||||||0
1|Numéro de commande|V_MOUVEMENTS_ARTICLES_X|CASE WHEN COUNT(DISTINCT commande_code) = 1 THEN MAX(commande_code) ELSE '' END|1|Commande|CTI_MVTCMD|*LIST||50|Numéro de commande|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Numéro de commande associé||||||||||0
1|Date|V_MOUVEMENTS_ARTICLES_X|CASE WHEN COUNT(DISTINCT date) = 1 THEN MAX(date::text) ELSE '' END|1|Date|CTI_MVTDATE|*LIST|DD/MM/YYYY|65|Date de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Date du mouvement|3DUR|||||||||0
1|Date de commande|V_MOUVEMENTS_ARTICLES_X|CASE WHEN COUNT(DISTINCT date_commande) = 1 THEN MAX(date_commande)::text ELSE '' END|1|Date de commande|CTI_MVTDCMD|*LIST|DD/MM/YYYY|65|Date de commande|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Date de Commande||||||||||0
1|Texte du mouvement|V_MOUVEMENTS_ARTICLES_X|CASE WHEN COUNT(DISTINCT mouvement_texte) = 1 THEN MAX(mouvement_texte) ELSE '' END|1|Texte|CTI_MVTTXT|*LIST||200|Texte du mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Texte du mouvement||||||||||0
1|Type de mouvement|V_MOUVEMENTS_ARTICLES_X|CASE WHEN COUNT(DISTINCT type_mouvement_code) = 1 THEN MAX(type_mouvement_code) ELSE '' END|1|Mvt|CTI_MVTTYPE|*LIST||30|Type de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code du type de mouvement||||||||||0
1|Nombre d'articles différents|V_MOUVEMENTS_ARTICLES_X|DISTINCT article_id|1|Nb Art.|CTI_NBART|COUNT||50|Nombre d'articles|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre d'articles|1QTE|||||||||0
1|Nombre d'articles différents commandés|V_LIGNES_COMMANDES_X|DISTINCT article_id|1|Nb Art. Com.|CTI_NBARTCOM|COUNT||50|Nombre d'articles commandés| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre d'articles commandés|1QTE|||||||||0
1|Nombre moyen d'articles par commande|*CALC|base.cti_division([1],[2])|1|Moy Art. / com.|CTI_NBARTMOYCOM|*CALC||50|Nombre moyen d'articles par commande| | | | | | |<NULL>|CTI_NBCOM#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre moyen d'articles par commande|1QTE|||||||||0
1|Nombre de commandes|V_LIGNES_COMMANDES_X|DISTINCT commande_id|1|Nb Com.|CTI_NBCOM|COUNT||50|Nombre de commandes|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de commandes|1QTE|||||||||0
1|Quantité entrée|V_MOUVEMENTS_ARTICLES_X|entree_quantite|1|Qté entrée|CTI_NBENT|SUM||70|Quantité entrée|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité entrée|1QTE|||||||||0
1|Quantité entrée (stock)|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) THEN entree_quantite ELSE 0 END|1|Qté [TEMPLATE_TEXT_1] (stock)|CTI_NBENTSTO|SUM|#,00E|90|Quantité entrée [TEMPLATE_TEXT_1] (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements d'entrée|||||||||Quantité des entrées par type (produit gérés stock)||||||||||1
1|Quantité entrée (stock) - livraison|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:00]) THEN entree_quantite ELSE 0 END|1|Qté livraison (stock)|CTI_NBENTSTO#00|SUM|#,00E|90|Quantité entrée livraison (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_NBENTSTO||||00|||livraison|||||||||||||0
1|Quantité entrée|V_STOCK_MENSUEL_X|entree_quantite|1|Qté entrée|CTI_NBENTSTOM|SUM||70|Quantité entrée|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité entrée|1QTE|||||||||0
1|Nombre total de factures|V_LIGNES_COMMANDES_X|DISTINCT CASE WHEN montant_liquidation_ht != 0 THEN commande_id ELSE null END|1|Nb Fac.|CTI_NBFAC|COUNT||50|Nombre total de factures|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre total de factures|1QTE|||||||||0
1|Nombre total de fournisseurs|V_LIGNES_COMMANDES_X|DISTINCT fournisseur_id|1|Nb Four.|CTI_NBFOU|COUNT||50|Nombre total de fournisseurs|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre total de fournisseurs|1QTE|||||||||0
1|Nombre de fournisseurs régionaux|V_LIGNES_COMMANDES_X|DISTINCT CASE WHEN fournisseur_id in [LISTE:CTI_FOUREG] THEN fournisseur_id ELSE null END|1|Nb Four. regio.|CTI_NBFOUREG|COUNT||50|Nombre de fournisseurs régionaux|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de fournisseurs régionaux|1QTE|||||||||1
1|Delais livraison|V_LIGNES_COMMANDES_X|CASE WHEN ligne_commande_etat_livraison = 'T' THEN date_reception - date_commande ELSE 0 END|1|Delais livraison|CTI_NBJLIV|SUM||80|Delais livraison| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||3DUR|||||||||0
1|Delais paiement fournisseurs|V_LIGNES_COMMANDES_X|CASE WHEN date_reglement IS NOT NULL THEN delai_paiement ELSE 0 END|1|Delais paiement fournisseurs|CTI_NBJPAYFOU|SUM||50|Delais paiement fournisseurs|2|3| | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Delais paiement fournisseurs|3DUR|||||||||1
1|Durée période|V_MOUVEMENTS_STOCKS_X|date( toperiode) - date( periode)|1|Durée période|CTI_NBJPER|MIN||50|Durée période|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Durée période|3DUR|||||||||1
1|Nombre de litiges, de retard...|V_LIGNES_COMMANDES_X|DISTINCT CASE WHEN date_reception > date_livraison_prevue + 10 OR quantite_non_livraison_approvisionnement > 0 THEN commande_id ELSE null END|1|Nb litiges...|CTI_NBLIRET|COUNT||50|Nombre de litiges, de retard...| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de lignes de commandes où les produits n'ont pas été livrées en intégralité et nombre de livraison supérieure à 10 jours|1QTE|||||||||0
1|Nombre de livraisons > 10 jours|V_LIGNES_COMMANDES_X|DISTINCT CASE WHEN date_reception > date_livraison_prevue + 10 THEN commande_id ELSE null END|1|Nb com. non liv. 10 j.|CTI_NBLIV10|COUNT||80|Nombre de livraison supérieures à 10 jours| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de lignes de commandes où les produits n'ont pas été livrées en intégralité dans les 10 jours|1QTE|||||||||0
1|Nombre de mouvements|V_MOUVEMENTS_ARTICLES_X|1|1|Nb mouvements|CTI_NBMVT|SUM||50|Nombre de mouvements|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de mouvements|1QTE|||||||||0
1|Nombre de commandes non livrées en totalité|V_LIGNES_COMMANDES_X|DISTINCT CASE WHEN quantite_non_livraison_approvisionnement > 0 THEN commande_id ELSE null END|1|Nb com. non liv. tot.|CTI_NBNLI|COUNT||80|Nombre de commandes incomplètes|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre de lignes de commandes où les produits n'ont pas été livrées en intégralité|1QTE|||||||||0
1|Nombre de rupture de stocks|V_MOUVEMENTS_STOCKS_X|CASE WHEN est_dernier_jour = 1 AND stock_quantite_fin < 0 and gere_en_stock != '0' THEN 1 ELSE 0 END|1|Nb ruptures|CTI_NBRUPSTO|SUM||50|Nombre de rupture de stocks|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre d'occurence d'une quantité de stock négative pour un produit géré en stock||||||||||0
1|Quantité sortie (stock)|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:[TEMPLATE_VALUE_1]]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_quantite ELSE 0 END|1|Qté [TEMPLATE_TEXT_1] (stock)|CTI_NBSORSTO|SUM|#,00E|90|Quantité sortie [TEMPLATE_TEXT_1] (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|1|<NULL>|Type de mouvements de sortie|||||||||Quantité sortie (produits gérés en stock)||||||||||1
1|Quantité sortie (stock) - consommations|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date BETWEEN periode AND toperiode AND type_mouvement_id IN ([CLASSE:CTI_TYPMVT:01]) AND unite_fonctionnelle_id NOT IN [LISTE:CTI_UFPER] THEN sortie_quantite ELSE 0 END|1|Qté consommations (stock)|CTI_NBSORSTO#01|SUM|#,00E|90|Quantité sortie consommations (stock)|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|CTI_NBSORSTO||||01|||consommations|||||||||||||0
1|Quantité sortie|V_MOUVEMENTS_ARTICLES_X|sortie_quantite|1|Qté sortie|CTI_NBSORT|SUM||70|Quantité sortie|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité sortie|1QTE|||||||||0
1|Quantité sortie|V_STOCK_MENSUEL_X|sortie_quantite|1|Qté sortie|CTI_NBSORTSTO|SUM||70|Quantité sortie|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité sortie|1QTE|||||||||0
1|Nombres de lignes de commandes|V_LIGNES_COMMANDES_X|DISTINCT ligne_commande_id|1|Nb Lignes Com.|CTI_NB_LIGCOM|COUNT||50|Nombres de lignes de commandes|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombres de lignes de commandes|1QTE|||||||||0
1|Prix Unitaire HT Calculé|V_MOUVEMENTS_ARTICLES_X|(MAX(ARRAY[CASE WHEN est_dernier_jour = '1' THEN date::text ELSE '1900-01-01'::text END,round(prix_unitaire_calcule,2)::text]))[2]::numeric|1|PU HT|CTI_PUCALC||#,00E|60|PU HT|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Calculé HT (Calul d'après les stocks mensuels et les livraisons)||||||||||0
1|Prix Unitaire HT (dernier)|V_LIGNES_COMMANDES_X|((MAX(ARRAY[date_commande::text,base.cti_division(CASE WHEN montant_commande_ht > 0 THEN montant_commande_ht ELSE 0 END,CASE WHEN montant_commande_ht > 0 THEN quantite_approvisionnement ELSE 0 END)::text]))[2]::numeric)|1|PU HT (dernier)|CTI_PULHT|CUSTOM|#,0000E|60|Dernier Prix Unitaire HT|2| | | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Dernier Prix Unitaire HT (commande)|2MNT|||||||||0
1|Prix Unitaire TTC (dernier)|V_MOUVEMENTS_ARTICLES_X|((MAX(ARRAY[date::text,CASE WHEN prix_unitaire > 0 THEN prix_unitaire ELSE 0 END::text]))[2]::numeric)|1|PU TTC (dernier)|CTI_PULMVT||#,0000E|60|PU TTC (dernier)|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Dernier Prix Unitaire TTC|2MNT|||||||||0
1|Prix Unitaire TTC (dernier)|V_LIGNES_COMMANDES_X|(MAX(ARRAY[date_commande::text,base.cti_division(CASE WHEN montant_commande_ttc > 0 THEN montant_commande_ttc ELSE 0 END,CASE WHEN montant_commande_ttc > 0 THEN quantite_approvisionnement ELSE 0 END)::text]))[2]::numeric|1|PU TTC (dernier)|CTI_PULTTC||#,0000E|60|Dernier Prix Unitaire TTC|2| | | | |2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Dernier Prix Unitaire TTC|2MNT|||||||||0
1|Prix Unitaire Moyen|*CALC|base.cti_division([1],[2])|1|PU Moy.|CTI_PUMOY|*CALC|#,0000E|60|Prix Unitaire Moyen| | | | | | |CTI_MNTSTOFIN|CTI_QTESTOFIN|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Moyen|2MNT|1QTE||||||||0
1|Prix Unitaire Moyen liquidation TTC|*CALC|base.cti_division([1],[2])|1|PU Moy. TTC|CTI_PUMOYCOM|*CALC|#,0000E|60|Prix Unitaire Moyen TTC| | | | | | |CTI_MNTPAYTTC#2|CTI_QTELIV#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Moyen (Montant liquidation TTC / quantié livrée)|2MNT|1QTE||||||||0
1|PUMP (moyen)|*CALC|base.cti_division([1]+[2],[3]+[4])|1|PUMP Moy.|CTI_PUMOYMVT|*CALC|#,0000E|60|PUMP moyen| | | | | | |CTI_MTENTHT|CTI_MTSORHT|CTI_NBENT|CTI_NBSORT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Moyen Pondéré (global)|2MNT|1QTE||||||||0
1|Quantité commandée|V_LIGNES_COMMANDES_X|quantite_approvisionnement|1|Qté Com.|CTI_QTECOM|SUM||70|Quantité commandé|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité commandé|1QTE|||||||||0
1|Quantité Stock calculé début période|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND est_dernier_jour = 1 and date < periode THEN stock_quantite_fin WHEN gere_en_stock != '0' AND date = periode and est_premier_jour = 1 THEN stock_quantite_debut ELSE 0 END|1|Qté Stock début|CTI_QTEDEBMVT|SUMFIRSTMONTH||70|Quantité Stock calculé début période|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Quantité Ecart|V_MOUVEMENTS_ARTICLES_X|entree_quantite-sortie_quantite|1|Qté Ecart|CTI_QTEECAENTSOR|SUM||70|Quantité écart|1| | | | |1|CTI_NBENT|CTI_NBSORT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les quantités entrées et sorties|1QTE|||||||||0
1|Quantité Ecart|*CALC||1|Qté Ecart|CTI_QTEECAMVS|*CALC||70|Quantité écart| | | | | | |CTI_NBENTSTO#00|CTI_NBENTSTO#00|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les quantités livrées et consommées|1QTE|||||||||0
1|Quantité Ecart|V_STOCK_MENSUEL_X|entree_quantite-sortie_quantite|1|Qté Ecart|CTI_QTEECASTO|SUM||70|Quantité écart|4| | | | |4|CTI_NBENT|CTI_NBSORT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Différence entre les quantités entrées et sorties|1QTE|||||||||0
1|Quantité livrée|V_LIGNES_COMMANDES_X|quantite_livraison_approvisionnement|1|Qté livrée.|CTI_QTELIV|SUM||80|Quantité livrée|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité commandé|1QTE|||||||||0
1|Quantité Stock calculé fin période|V_MOUVEMENTS_STOCKS_X|CASE WHEN gere_en_stock != '0' AND date_fin > toperiode AND est_dernier_jour = 1 THEN stock_quantite_fin ELSE 0 END|1|Qté Stock fin|CTI_QTEMVTFIN|SUMLASTMONTH||70|Quantité Stock calculé fin période|5| | | | |5|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Quantité non livrée|V_LIGNES_COMMANDES_X|quantite_non_livraison_approvisionnement|1|Qté non liv.|CTI_QTENLIV|SUM||80|Quantité non livrée|2|3| | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité non livrée|1QTE|||||||||0
1|Quantité Stock début période|V_STOCK_MENSUEL_X|CASE WHEN date_debut = periode THEN stock_quantite_debut ELSE 0 END|1|Qté Stock debut|CTI_QTESTODEB|SUMFIRSTMONTH||70|Quantité Stock début période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||1QTE|||||||||0
1|Quantité Stock calculé début|V_MOUVEMENTS_ARTICLES_X|(MIN(ARRAY[CASE WHEN est_premier_jour = '1' THEN date::text ELSE '2099-12-31'::text END,stock_quantite_debut::text]))[2]::numeric|1|Qté Stock début|CTI_QTESTODEBMVT|||70|Quantité Stock calculé en début de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Quantité Stock fin période|V_STOCK_MENSUEL_X|CASE WHEN date_fin = toperiode THEN stock_quantite_fin ELSE 0 END|1|Qté Stock fin|CTI_QTESTOFIN|SUMLASTMONTH||70|Quantité Stock fin période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>|||||||||||1QTE|||||||||0
1|Quantité Stock calculé fin|V_MOUVEMENTS_ARTICLES_X|(MAX(ARRAY[CASE WHEN est_dernier_jour = '1' THEN date::text ELSE '1900-01-01'::text END,,stock_quantite_fin::text]))[2]::numeric|1|Qté Stock fin|CTI_QTESTOFINMVT|||70|Quantité Stock calculé fin de mouvement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Quantité stock moyen (mouvements)|*CALC|base.cti_division([1]+[2],2)|1|Qté. Stock moy.|CTI_QTESTOMOYMVT|*CALC|#,00E|90|Quantité stock moyen (mouvements)| | | | | | |CTI_QTEDEBMVT|CTI_QTEMVTFIN|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Quantité de stock moyen (quantité stock début (achat) + quantité stock fin (achat) /2)||||||||||0
1|Calcul d'indicateurs dans le rapport|*RAPPORTCALC||1||CTI_RAPPORTCALC|sum|#|50||0| | | | |0|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Pour calculer directement dans la définition du rapport||||||||||1
1|Date de réception|V_LIGNES_COMMANDES_X|CASE WHEN COUNT(DISTINCT(date_reception)) = 1 THEN MAX(date_reception)::text ELSE '' END|1|Date de réception|CTI_RECDATE|*LIST|DD/MM/YYYY|65|Date de réception| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Date de réception|3DUR|||||||||0
1|Référence commande|V_LIGNES_COMMANDES_X|CASE WHEN COUNT(DISTINCT commande_reference) = 1 THEN MAX(commande_reference) ELSE '' END|1|Réference commande|CTI_REFCOM|*LIST||50|Réference commande| | | | | | |<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Référence commande||||||||||0
1|Rotation du stock par rapport aux entrées|*CALC|round(base.cti_division([3],base.cti_division([1]+[2],2)),0)|1|Rotation du stock / entrées|CTI_ROTSTOACH|*CALC||50|Rotation du stock / entrées| | | | | | |CTI_MNTSTOFIN|CTI_QTESTOFIN|CTI_MTENTSTO|CTI_NBJPER|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Rapport entre les achats sur la période et le stock moyen (valeur stock début + valeur stock fin / 2)|2MNT|1QTE|3DUR|||||||1
1|Rotation du stock calculé par rapport aux achat|*CALC|round(base.cti_division([3],base.cti_division([1]+[2],2)),0)|1|Rotation du stock / achat|CTI_ROTSTOMVTACH|*CALC||50|Rotation du stock calculé / achat| | | | | | |CTI_MNTSTOFINACHAT|CTI_QTEDEBMVT|CTI_MTENTTTCSTO-2#00|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Rapport entre les achats sur la période et le stock moyen (valeur stock début + valeur stock fin / 2)|2MNT|||||||||0
1|Rotation du stock calculé par rapport aux ventes|*CALC|round(base.cti_division(365*[3]/[4],([1]+[2])/2),0)|1|Rotation du stock / vente|CTI_ROTSTOMVTVEN|*CALC||50|Rotation du stock calculé / vente| | | | | | |CTI_MNTSTOFINACHAT|CTI_MNTSTODEBACHAT|CTI_MTSORTTCSTO-2#01|CTI_NBJPER|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Rapport entre le CA TTC et le stock moyen (valeur stock début + valeur stock fin / 2) sur période|2MNT|3DUR||||||||0
1|Rotation du stock par rapport aux sorties|*CALC|roud(base.cti_division(365*[3]/[4],([1]+[2])/2))|1|Rotation du stock / sorties|CTI_ROTSTOVEN|*CALC||50|Rotation du stock / sorties| | | | | | |CTI_MNTSTOFIN|CTI_MNTSTODEB|CTI_MTSORTSTO|CTI_NBJPER|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Rapport entre le CA TTC et le stock moyen (valeur stock début + valeur stock fin / 2) sur période|2MNT|3DUR||||||||0
1|Séparateur|SEP||1||CTI_SEP|SEP|#|0||0| | | | |0|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||||||||||||0
1|Code du site|TABSITE|CASE WHEN COUNT(DISTINCT site_code) = 1 THEN MAX(site_code) ELSE '' END|1|Site|CTI_SITECODE|*LIST||30|Code du site|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code du site||||||||||0
1|Durée stock moyen (jours)|*CALC|round(365*base.cti_division(([1]+[2])/2,365*[3]/[4]),0)|1|Stock moyen (j)|CTI_STOMOYJ|*CALC|#j|50|Durée stock moyen (jours)| | | | | | |CTI_MNTSTOFINACHAT|CTI_MNTSTODEBACHAT|CTI_MTSORHT|CTI_NBJPER|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Rapport entre les ventes et le stock moyen (valeur stock début + valeur stock fin /2) ramené à l'année|2MNT|3DUR||||||||0
1|PUMP début période|V_STOCK_MENSUEL_X|CASE WHEN date_debut = periode THEN pump ELSE 0 END|1|PUMP déb. période|CTI_STOPUMPDEB|SUMFIRSTMONTH|#,0000E|60|PUMP début période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Moyen Pondéré|2MNT|||||||||0
1|PUMP fin période|V_STOCK_MENSUEL_X|CASE WHEN date_fin = toperiode THEN pump ELSE 0 END|1|PUMP fin période|CTI_STOPUMPFIN|SUMLASTMONTH|#,0000E|60|PUMP fin période|4| | | | |4|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Prix Unitaire Moyen Pondéré|2MNT|||||||||0
1|Nombre moyen de références actives par fournisseur|*CALC|base.cti_division([1],[2])|1|Nb moyen réf actives / four.|CTI_TXARTFOU|*CALC||50|Nombre moyen de références actives par fournisseur| | | | | | |CTI_NBART|CTI_NBFOU#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Nombre moyen de références actives par fournisseur|1QTE|||||||||1
1|Taux d'achats auprès des fournisseurs références|*CALC|100*base.cti_division([1],[2])|1|Tx Fou. Ref.|CTI_TXFOUGR|*CALC|#,00%|50|Taux d'achats auprès des fournisseurs références| | | | | | |CTI_MTFOUGR#2|CTI_MTACHA#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Taux d'achats auprès des fournisseurs références|4TAUX|2MNT||||||||1
1|Taux de fournisseurs régionaux|*CALC|100*base.cti_division([1],[2])|1|Tx Four. Reg.|CTI_TXFOUREG|*CALC|#,00%|50|Taux fournisseurs de régionaux| | | | | | |CTI_NBFOUREG#2|CTI_NBFOU#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Taux de fournisseurs régionaux|4TAUX|1QTE||||||||1
1|Taux de litiges, taux de retard...|*CALC|100*base.cti_division([1],[2])|1|Tx litiges...|CTI_TXLIRET|*CALC|#,00%|50|Taux de litiges, taux de retard...| | | | | | |CTI_NBLIRET|CTI_NBCOM#2|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Taux de litiges (livraison incomplète) et de retard (livraison > 10 jours)|4TAUX|1QTE||||||||0
1|Taux de Marge|*CALC|100*(base.cti_division([5],[2]) - (base.cti_division([3],[4])))|1|Tx Marge|CTI_TXMARGSTO|*CALC|#,00%|50|Taux de Marge| | | | | | |CTI_MNTSTOFIN|CTI_MTENTSTO|CTI_NBSORTSTO|CTI_NBENTSTO|CTI_MTSORTSTO|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d'entrées)) / montant_entree|4TAUX|1QTE|2MNT|||||||1
1|Taux de Marque|*CALC|100*(CASE WHEN [1] > 0 AND [2] > 0 THEN 1 - base.cti_division([2]*[3],[4]*[1]) ELSE 0 END)|1|Tx Marque|CTI_TXMARQSTO|*CALC|#,00%|50|Taux de Marque| | | | | | |CTI_MTSORTTCSTO-2#01|CTI_MTENTTTCSTO-2#00|CTI_NBSORSTO#01|CTI_NBENTSTO#00|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Pour les articles ayant des mouvements d'entrées et de sortie, (nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d'entrées)) / montant sortie, 0 sinon|4TAUX|1QTE|2MNT|||||||1
1|Taux de Marge|*CALC|100*(base.cti_division([5],[2]) - (base.cti_division([3],[4])))|1|Tx Marge|CTI_TXMRG|*CALC|#,00%|50|Taux de Marge| | | | | | |CTI_MNTSTOFINACHAT|CTI_MTENTTTCSTO-2#00|CTI_NBSORSTO#01|CTI_NBENTSTO#00|CTI_MTSORTTCSTO-2#01|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d'entrées)) / montant_entree|1QTE|2MNT||||||||1
1|Taux de Marque|*CALC|100*(CASE WHEN [5] > 0 THEN 1 - base.cti_division([2]*[3],[4]*[5]) ELSE 0 END)|1|Tx Marque|CTI_TXMRQ|*CALC|#,00%|50|Taux de Marque| | | | | | |CTI_MNTSTOFINACHAT|CTI_MTENT|CTI_NBSORT|CTI_NBENT|CTI_MTSORT|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||(nombre de sorties * (montant des sorties/nombre sorties - montant des entrées/nombre d'entrées)) / montant sortie|4TAUX|1QTE|2MNT|||||||1
1|Code de l'Unité d'approvisionnement|TABUNIT|CASE WHEN COUNT(DISTINCT unite_approvisionnement_article_id) = 1 AND MAX(unite_approvisionnement_article_id) <> 0 AND MAX(unite_approvisionnement_article_code) <> 'UN' THEN MAX(unite_approvisionnement_article_code) ELSE '' END|1|Unité|CTI_UAPCODE|*LIST||30|Code de l'Unité d'approvisionnement|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Unité d'approvisionnement||||||||||0
1|Code de l'Unité Fonctionnelle|TABUF|CASE WHEN COUNT(DISTINCT unite_fonctionnelle_code) = 1 THEN MAX(unite_fonctionnelle_code) ELSE '' END|1|UF|CTI_UFCODE|*LIST||30|Code de l'UF|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Code de l'Unite Fonctionnelle||||||||||0
1|Code de l'Unité de stockage|TABUNIT|CASE WHEN COUNT(DISTINCT unite_stockage_article_id) = 1 AND MAX(unite_stockage_article_id) <> 0 AND MAX(unite_stockage_article_code) <> 'UN' THEN MAX(unite_stockage_article_code) ELSE '' END|1|Unité|CTI_USTOCODE|*LIST||30|Code de l'Unité de stockage|1| | | | |1|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|<NULL>|0|<NULL>||||||||||Unité de stockage||||||||||0

+ 10
- 0
db/data2/dbdata_eco_t_listes.csv View File

@ -0,0 +1,10 @@
oid|code|texte|chapitre|contenu_by_code|include_code|exclude_code|is_cti|show_omit|utilisateur_createur|est_partagee_modification|table_name
1|CTI_ALIBIO|Aliments Biologiques||0|||1|0|*CTI|1|t_articles
1|CTI_ESS_ART80|Liste des articles représentant 80% des stocks en montant||0|||1|0|*CTI|1|t_articles
1|CTI_FAMALI|Alimentation||0|||1|0|*CTI|1|t_familles_articles
1|CTI_FAMNRJ|Energie||0|||1|0|*CTI|1|t_familles_articles
1|CTI_FOUH|Fournisseurs favorisant le travail de personnes handicapés ou en difficulté||0|||1|0|*CTI|1|t_fournisseurs
1|CTI_FOUREF|Fournisseurs références||0|||1|0|*CTI|1|t_fournisseurs
1|CTI_FOUREG|Fournisseurs régionaux||0|||1|0|*CTI|1|t_fournisseurs
1|CTI_NRJREN|Energie renouvelables||0|||1|0|*CTI|1|t_articles
1|CTI_UFPER|UF de pertes ou périmés||0|||1|1|*CTI|1|t_unites_fonctionnelles

+ 74
- 0
db/data2/dbdata_eco_t_listes_tables.csv View File

@ -0,0 +1,74 @@
oid|name|texte|select_cmd|code
1|t_articles|Articles|"SELECT t_articles.oid, t_articles.code, t_articles.texte, t_types_articles.texte::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_articles
JOIN eco.t_types_articles ON type_id = t_types_articles.oid
JOIN eco.p_oids ON (t_articles.oid = p_oids.oid AND code_table = 'articles')
WHERE t_articles.oid > 0
ORDER BY t_articles.code"|ART
1|t_categories_articles|Catégories articles|"SELECT t_categories_articles.oid, t_categories_articles.code, t_categories_articles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_categories_articles LEFT JOIN eco.p_oids ON (t_categories_articles.oid = p_oids.oid AND code_table = 'categories_articles')
WHERE t_categories_articles.oid > 0
ORDER BY t_categories_articles.code"|CAA
1|t_compte|Comptes|"SELECT t_compte.oid, t_compte.code, t_compte.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_compte LEFT JOIN eco.p_oids ON (t_compte.oid = p_oids.oid AND code_table = 'compte')
WHERE t_compte.oid > 0
ORDER BY t_compte.code"|CPT
1|t_centres_responsabilite|Centres responsabilité|"SELECT t_centres_responsabilites.oid, t_centres_responsabilites.code, t_centres_responsabilites.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_centres_responsabilites LEFT JOIN eco.p_oids ON (t_centres_responsabilites.oid = p_oids.oid AND code_table = 'centres_responsabilites')
WHERE t_centres_responsabilites.oid > 0
ORDER BY t_centres_responsabilites.code"|CRE
1|t_familles_articles|Familles d'articles|"SELECT t_familles_articles.oid, t_familles_articles.code, t_familles_articles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_familles_articles LEFT JOIN eco.p_oids ON (t_familles_articles.oid = p_oids.oid AND code_table = 'familles_articles')
WHERE t_familles_articles.oid > 0
ORDER BY t_familles_articles.code"|FAA
1|t_fournisseurs|Fournisseurs|"SELECT t_fournisseurs.oid, t_fournisseurs.code, t_fournisseurs.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_fournisseurs LEFT JOIN eco.p_oids ON (t_fournisseurs.oid = p_oids.oid AND code_table = 'fournisseurs')
WHERE t_fournisseurs.oid > 0
ORDER BY t_fournisseurs.code"|FOU
1|t_gestionnaires|Gestionnaires|"SELECT t_gestionnaires.oid, t_gestionnaires.code, t_gestionnaires.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_gestionnaires LEFT JOIN eco.p_oids ON (t_gestionnaires.oid = p_oids.oid AND code_table = 'gestionnaires')
WHERE t_gestionnaires.oid > 0
ORDER BY t_gestionnaires.code"|GES
1|t_lieux|Lieux|"SELECT t_lieux.oid, t_lieux.code, t_lieux.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_lieux LEFT JOIN eco.p_oids ON (t_lieux.oid = p_oids.oid AND code_table = 'lieux')
WHERE t_lieux.oid > 0
ORDER BY t_lieux.code"|LIE
1|t_lpp_c|LPP|"SELECT t_lpp_c.oid, t_lpp_c.code, t_lpp_c.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_lpp_c LEFT JOIN eco.p_oids ON (t_lpp_c.oid = p_oids.oid AND code_table = 'lpp')
WHERE t_lpp_c.oid > 0
ORDER BY t_lpp_c.code"|LPP
1|t_sous_categories_articles|Sous catégories articles|"SELECT t_sous_categories_articles.oid, t_sous_categories_articles.code, t_sous_categories_articles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_sous_categories_articles LEFT JOIN eco.p_oids ON (t_sous_categories_articles.oid = p_oids.oid AND code_table = 'sous_categories_articles')
WHERE t_sous_categories_articles.oid > 0
ORDER BY t_sous_categories_articles.code"|SCA
1|t_sous_familles_articles|Sous familles articles|"SELECT t_sous_familles_articles.oid, t_sous_familles_articles.code, t_sous_familles_articles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_sous_familles_articles LEFT JOIN eco.p_oids ON (t_sous_familles_articles.oid = p_oids.oid AND code_table = 'sous_familles_articles')
WHERE t_sous_familles_articles.oid > 0
ORDER BY t_sous_familles_articles.code"|SFA
1|t_type_article_cti|Types d'articles CTI|"SELECT t_type_article_cti.oid, t_type_article_cti.code, t_type_article_cti.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_type_article_cti LEFT JOIN eco.p_oids ON (t_type_article_cti.oid = p_oids.oid AND code_table = 'type_article_cti')
ORDER BY t_type_article_cti.code"|TAC
1|t_types_articles|Types d'articles|"SELECT t_types_articles.oid, t_types_articles.code, t_types_articles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_types_articles LEFT JOIN eco.p_oids ON (t_types_articles.oid = p_oids.oid AND code_table = 'types_articles')
WHERE t_types_articles.oid > 0
ORDER BY t_types_articles.code"|TYA
1|t_types_fournisseurs|Types de fournisseurs|"SELECT t_types_fournisseurs.oid, t_types_fournisseurs.code, t_types_fournisseurs.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_types_fournisseurs LEFT JOIN eco.p_oids ON (t_types_fournisseurs.oid = p_oids.oid AND code_table = 'types_fournisseurs')
WHERE t_types_fournisseurs.oid > 0
ORDER BY t_types_fournisseurs.code"|TYF
1|t_types_mouvements|Types de mouvements|"SELECT t_types_mouvements.oid, t_types_mouvements.code, t_types_mouvements.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_types_mouvements LEFT JOIN eco.p_oids ON (t_types_mouvements.oid = p_oids.oid AND code_table = 'types_mouvements')
WHERE t_types_mouvements.oid > 0
ORDER BY t_types_mouvements.code"|TYM
1|t_ucd_c|UCD|"SELECT t_ucd_c.oid, t_ucd_c.code, t_ucd_c.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_ucd_c LEFT JOIN eco.p_oids ON (t_ucd_c.oid = p_oids.oid AND code_table = 'ucd')
WHERE t_ucd_c.oid > 0
ORDER BY t_ucd_c.code"|UCD
1|t_unites_fonctionnelles|Unités fonctionnelles|"SELECT t_unites_fonctionnelles.oid, t_unites_fonctionnelles.code, t_unites_fonctionnelles.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_unites_fonctionnelles LEFT JOIN eco.p_oids ON (t_unites_fonctionnelles.oid = p_oids.oid AND code_table = 'unites_fonctionnelles')
WHERE t_unites_fonctionnelles.oid > 0
ORDER BY t_unites_fonctionnelles.code"|UFO
1|t_unites|Unités|"SELECT t_unites.oid, t_unites.code, t_unites.texte, ''::text as complement, CASE WHEN p_oids.oid IS NOT NULL THEN 'O' ELSE 'N' END as utilise
FROM eco.t_unites LEFT JOIN eco.p_oids ON (t_unites.oid = p_oids.oid AND code_table = 'unites_stockage_articles')
WHERE t_unites.oid > 0
ORDER BY t_unites.code"|UNI

+ 34
- 0
db/data2/dbdata_eco_t_rapports.csv View File

@ -0,0 +1,34 @@
oid|code|texte|is_cti|template_code|is_template_updatable|condition_codes|is_essentiel
1|CTI_ESS_01|Essentiels CTI|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|1
1|CTI_ESS_02|Dispositifs Médicaux|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|DM,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_03|Dispostifs Médicaux Implantables|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|DMI,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_04|Médicaments|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|MED,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_05|Parapharmacie|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|PAR,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_06|Economat|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|ECO,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_07|Cuisine|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|CUI,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_08|Lingerie|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|LIN,NULL,NULL,NULL,NULL}"|1
1|CTI_ESS_09|Atelier|1|CTI_ESS_01|0|"{TYA|CTI_CLE_REP|ATE,NULL,NULL,NULL,NULL}"|1
1|CTI_LIST_CMD|Justificatif Commandes|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_CMD2|Justificatif Délais et litiges|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT|Justificatif Mouvements|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT100|Justificatif Mouvements et Stocks|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT2|Justificatif Entrées|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT3|Justificatif Sorties|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT4|Justificatif Quantités|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT5|Justificatif Montants|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT6|Justificatif Montants Entrées|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_LIST_MVT7|Justificatif Montants sorties|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_CMD|Commandes|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_CMD2|Délais et litiges|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_CMD3|Commandes (engagement)|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVS|Stocks calculés|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT|Quantités et Montants Mouvements|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT2|Quantités et Montants Entrées|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT3|Quantités et Montants Sorties|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT4|Quantités Mouvements|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT5|Montants Mouvements|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT6|Montants Entrées|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_MVT7|Montants Sorties|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_STK|Stocks Mensuels|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_STK2|Quantités stocks mensuels|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0
1|CTI_VIEW_STK3|Montants Stocks Mensuels|1|<NULL>|0|{NULL,NULL,NULL,NULL,NULL}|0

+ 4232
- 0
db/data2/dbdata_eco_t_rapports_rubriques.csv
File diff suppressed because it is too large
View File


+ 7
- 0
db/data2/dbdata_eco_t_type_article_cti.csv View File

@ -0,0 +1,7 @@
oid|code|texte
0|*|Non renseigné
1|DM|Dispositifs Médicaux
1|DMI|Dispositifs Médicaux Implantables
1|ECO|Economat
1|MED|Médicaments
1|ZZZ|Autres

+ 1096
- 0
db/dbsetup_data_eco.XML
File diff suppressed because it is too large
View File


+ 4
- 0
db/dvp_data_apply.bat View File

@ -0,0 +1,4 @@
@ECHO Off
ECHO /!\ VOUS ETES SUR LE POINT DE PERDRE LES DONNEES DE VOTRE BASE /!\
PAUSE
..\..\..\Sources\db\data\iCTI_svn_data_apply.exe -m eco

+ 2
- 0
db/dvp_data_extract.bat View File

@ -0,0 +1,2 @@
@ECHO Off
..\..\..\Sources\db\data\iCTI_svn_data_extract.exe -m eco

+ 5
- 0
db/hooks/install_db_last_jobs.sql View File

@ -0,0 +1,5 @@
-- ============================================================
-- Derniers traitements
-- - Lancement de fonctions PGSQL
-- - Nettoyage installdb (éventuel)
-- ============================================================

+ 122
- 0
db/hooks/post_install_data.sql View File

@ -0,0 +1,122 @@
-- =====================================================================
-- Divers traitements sur les données après l'installation des données
-- =====================================================================
-- Ajout des paramétrages.
DROP TABLE IF EXISTS w_divers
;
CREATE TEMP TABLE w_divers AS
SELECT
'FORCE_PUMP_STOCK' AS code,
'Forcage pump sur celui états de stock' AS texte,
'1' AS valeur,
NULL::date AS valeur_date,
'Défini si le pump des mouvements est calculé à partir de celui des stocks' AS description
UNION
SELECT
'FORCE_LIV_LIQ',
'Forcage commandes liquidées en livrées en totalité',
'0',
NULL::date,
''
UNION
SELECT
'FORCE_QTE_APR_STK',
'Commandes soldées non livrées',
'1',
NULL::date,
'Force à 0 quantite_approvisionnement et quantite_stockage si montant_commande_ht = 0, etat_liquidation = ''T'', quantite_livraison_approvisionnement = 0 et etat_livraison = ''N''.'
UNION
SELECT
'MERGE_CPT',
'Fusionne les comptes de deux prestataires',
'0',
NULL::date,
'Remplace les comptes ancien prestataire par ceux du nouveaux si les codes de comptes sont les mêmes'
UNION
SELECT
'MERGE_ART',
'Fusionne les articles',
'0',
NULL::date,
'Remplace les comptes ancien prestataire par ceux du nouveaux si les textes sont les mêmes'
UNION
SELECT
'MERGE_UF',
'Fusionne les UF',
'0',
NULL::date,
'Remplace les UF ancien prestataire par ceux du nouveaux si les codes sont les mêmes'
UNION
SELECT
'X3_TYPART',
'Type article SageX3',
'0',
NULL::date,
'0: Première lettre 1: Messages chapitre 1019'
UNION
SELECT
'FORCE_ATC',
'Forcer les classifications ATC et Cladimed selon les données CTI',
'0',
NULL::date,
'0: Non 1: Oui'
UNION
SELECT
'CEGI_FORCE_FAC_COM',
'Forcer les montants facturées en commandés dans Cegi',
'0',
NULL::date,
'0: Non 1: Oui'
UNION
SELECT
'CEGI_FORCE_FAC_LIV',
'Forcer les montants facturées en livrés dans Cegi',
'0',
NULL::date,
'0: Non 1: Oui'
UNION
SELECT
'CEGI_FORCE_LIV_COM',
'Forcer les montants livrés en commandés dans Cegi',
'0',
NULL::date,
'0: Non 1: Oui'
UNION
SELECT
'CEGI_STO_TYP',
'Utilise le type de stock Cegi pour le type article au lieu de la racine de la famille',
'0',
NULL::date,
'0: Non 1: Oui'
;
-- Insertion du paramère de répartition
INSERT INTO eco.t_divers(
code,
texte,
valeur,
valeur_date,
description)
SELECT
code,
texte,
valeur,
valeur_date,
description
FROM w_divers
WHERE code NOT IN (SELECT code FROM eco.t_divers)
;
UPDATE eco.t_divers SET
texte = w_divers.texte,
description = w_divers.description
FROM w_divers
WHERE 1=1
AND t_divers.code = w_divers.code
AND (1!=1
OR t_divers.texte != w_divers.texte
OR t_divers.description != w_divers.description)
;

+ 3
- 0
db/hooks/pre_install_data.sql View File

@ -0,0 +1,3 @@
-- =====================================================================
-- Divers traitements sur les données avant l'installation des données
-- =====================================================================

+ 8
- 0
db/hooks/pre_install_schema.sql View File

@ -0,0 +1,8 @@
-- =============================================
-- Nettoyage de la BDD avant installation.
-- (Supprimer le contenu au bout de 3 mois)
-- - Suppression de tables
-- - Suppression de champs
-- - Suppression de vues/fonctions SQL
-- - Suppression ou modification de séquences
-- =============================================

+ 123
- 0
db/schema2/functions/cti_create_repartition.yaml View File

@ -0,0 +1,123 @@
return: text
lang: plpgsql
src: |
DECLARE --select * from eco.p_stock order by date_fin desc
result TEXT;
BEGIN
IF ((SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION') !=
(
SELECT
t_listes_tables.code
FROM
eco.t_classes
JOIN eco.t_listes_tables ON table_id = t_listes_tables.oid
WHERE t_classes.code = 'CTI_CLE_REP'))
THEN
RAISE NOTICE '%','Valeur changé - Mise à jour';
-- enregistrement des sections CTI
DROP TABLE IF EXISTS w_sections;
CREATE TEMP TABLE w_sections AS
SELECT t_classes_sections.code, t_classes_sections.texte
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
;
-- enregistrement des conditions de rapport CTI liées à la clef de répartition
DROP TABLE IF EXISTS w_conditions;
CREATE TEMP TABLE w_conditions AS
SELECT t_rapports.oid, ARRAY[
section_0.code,
section_1.code,
section_2.code,
section_3.code,
section_4.code] AS code_section FROM eco.t_rapports
LEFT JOIN eco.t_indicateur_condition condition_0 ON t_rapports.rapport_indicateur_condition_id[1] = condition_0.oid
LEFT JOIN eco.t_classes_sections section_0 ON section_0.oid = right(split_part(condition_0.code,'#',2),-4) AND left(split_part(condition_0.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_1 ON t_rapports.rapport_indicateur_condition_id[2] = condition_1.oid
LEFT JOIN eco.t_classes_sections section_1 ON section_1.oid = right(split_part(condition_1.code,'#',2),-4) AND left(split_part(condition_1.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_2 ON t_rapports.rapport_indicateur_condition_id[3] = condition_2.oid
LEFT JOIN eco.t_classes_sections section_2 ON section_2.oid = right(split_part(condition_2.code,'#',2),-4) AND left(split_part(condition_2.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_3 ON t_rapports.rapport_indicateur_condition_id[4] = condition_3.oid
LEFT JOIN eco.t_classes_sections section_3 ON section_3.oid = right(split_part(condition_3.code,'#',2),-4) AND left(split_part(condition_3.code,'#',2),4) = 'LS30'
LEFT JOIN eco.t_indicateur_condition condition_4 ON t_rapports.rapport_indicateur_condition_id[5] = condition_4.oid
LEFT JOIN eco.t_classes_sections section_4 ON section_4.oid = right(split_part(condition_4.code,'#',2),-4) AND left(split_part(condition_4.code,'#',2),4) = 'LS30'
WHERE t_rapports.code LIKE 'CTI_ESS%'
;
-- effacement de la classe CTI_CLE_REP
DELETE FROM eco.t_classes_sections_elements
WHERE section_id IN (
SELECT t_classes_sections.oid
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
)
;
DELETE FROM eco.t_classes_sections
WHERE oid IN (
SELECT t_classes_sections.oid
FROM eco.t_classes
JOIN eco.t_classes_sections ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_CLE_REP'
)
;
DELETE FROM eco.t_classes
WHERE code = 'CTI_CLE_REP'
;
-- création de la classe CTI_CLE_REP
INSERT INTO eco.t_classes(code, texte, table_id, is_cti, sequence)
SELECT
'CTI_CLE_REP',
'Clef de répartition CTI',
oid,
0,
30
FROM
eco.t_listes_tables
WHERE
code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')
;
INSERT INTO eco.t_classes_sections (code, texte, classe_id)
SELECT w_sections.code, w_sections.texte, oid
FROM w_sections LEFT JOIN eco.t_classes ON t_classes.code = 'CTI_CLE_REP'
;
PERFORM eco.cti_reorganize_indicateur_condition();
-- ajustement des condition de rapports essentiels CTI
UPDATE eco.t_rapports
SET
rapport_indicateur_condition_id = ARRAY[condition_0.oid,condition_1.oid,condition_2.oid,condition_3.oid,condition_4.oid]
FROM
w_conditions
JOIN eco.t_listes_tables ON t_listes_tables.code = (SELECT valeur FROM eco.t_divers WHERE code = 'CLE_REPARTITION')
JOIN eco.t_classes ON table_id = t_listes_tables.oid AND sequence = 30
LEFT JOIN eco.t_classes_sections section_0 ON t_classes.oid = section_0.classe_id AND section_0.code = code_section[1]
LEFT JOIN eco.t_indicateur_condition condition_0 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_0.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_0.code,'#',2),3,2) AND left(split_part(condition_0.code,'#',2),2) = 'LS'
AND section_0.oid = right(split_part(condition_0.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_1 ON t_classes.oid = section_1.classe_id AND section_1.code = code_section[2]
LEFT JOIN eco.t_indicateur_condition condition_1 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_1.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_1.code,'#',2),3,2) AND left(split_part(condition_1.code,'#',2),2) = 'LS'
AND section_1.oid = right(split_part(condition_1.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_2 ON t_classes.oid = section_2.classe_id AND section_2.code = code_section[3]
LEFT JOIN eco.t_indicateur_condition condition_2 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_2.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_2.code,'#',2),3,2) AND left(split_part(condition_2.code,'#',2),2) = 'LS'
AND section_2.oid = right(split_part(condition_2.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_3 ON t_classes.oid = section_3.classe_id AND section_3.code = code_section[4]
LEFT JOIN eco.t_indicateur_condition condition_3 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_3.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_3.code,'#',2),3,2) AND left(split_part(condition_3.code,'#',2),2) = 'LS'
AND section_3.oid = right(split_part(condition_3.code,'#',2),-4)
LEFT JOIN eco.t_classes_sections section_4 ON t_classes.oid = section_4.classe_id AND section_4.code = code_section[5]
LEFT JOIN eco.t_indicateur_condition condition_4 ON regexp_replace(regexp_replace(regexp_replace(regexp_replace(t_listes_tables.name,'^t_',''),'x',''),'s_','','g'),'s$','') || 'id' = regexp_replace(condition_4.column_name,'_','','g')
AND t_classes.sequence = substring(split_part(condition_4.code,'#',2),3,2) AND left(split_part(condition_4.code,'#',2),2) = 'LS'
AND section_4.oid = right(split_part(condition_4.code,'#',2),-4)
WHERE t_rapports.oid = w_conditions.oid
;
END IF;
RETURN 'OK';
END;

+ 33
- 0
db/schema2/functions/cti_eval~tx.yaml View File

@ -0,0 +1,33 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_formula
src: |
DECLARE
temp_cursor refcursor;
sqlcmd text;
_value text;
_return text;
BEGIN
_return = '';
sqlcmd = 'SELECT (' || i_formula ||')::text';
BEGIN
OPEN temp_cursor FOR EXECUTE sqlcmd;
FETCH temp_cursor INTO _value;
WHILE FOUND LOOP
_return = _value;
FETCH temp_cursor INTO _value;
END LOOP;
CLOSE temp_cursor;
EXCEPTION
WHEN others THEN RAISE NOTICE 'Erreur %' , sqlcmd;
END;
RETURN _return;
END;

+ 204
- 0
db/schema2/functions/cti_extract_used_oids.yaml View File

@ -0,0 +1,204 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
TRUNCATE eco.p_oids;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'articles', article_id
FROM eco.p_mouvements_articles
WHERE article_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'articles', article_id
FROM eco.p_lignes_commandes
WHERE article_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'categories_articles', categorie_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE categorie_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'categories_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'categories_articles', categorie_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE categorie_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'categories_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'sous_categories_articles', sous_categorie_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE sous_categorie_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'sous_categories_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'sous_categories_articles', sous_categorie_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE sous_categorie_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'sous_categories_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'classification_atc', classification_atc_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE classification_atc_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'classification_atc')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'classification_atc', classification_atc_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE classification_atc_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'classification_atc')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'familles_articles', famille_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE famille_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'familles_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'familles_articles', famille_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE famille_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'familles_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'sous_familles_articles', sous_famille_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE sous_famille_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'sous_familles_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'sous_familles_articles', sous_famille_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE sous_famille_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'sous_familles_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'compte', compte_id
FROM eco.p_mouvements_articles
WHERE compte_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'compte')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'compte', compte_id
FROM eco.p_lignes_commandes
WHERE compte_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'compte')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'types_articles', t_articles.type_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE t_articles.type_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'types_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'types_articles', t_articles.type_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE t_articles.type_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'types_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'unites_stockage_articles', t_articles.unite_stockage_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE t_articles.unite_stockage_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'unites_stockage_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'unites_stockage_articles', t_articles.unite_stockage_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE t_articles.unite_stockage_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'unites_stockage_articles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'gestionnaires', gestionnaire_id
FROM eco.p_mouvements_articles
WHERE gestionnaire_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'gestionnaires')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'gestionnaires', gestionnaire_id
FROM eco.p_commandes
WHERE gestionnaire_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'gestionnaires')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'unites_fonctionnelles', unite_fonctionnelle_id
FROM eco.p_mouvements_articles
WHERE unite_fonctionnelle_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'unites_fonctionnelles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'unites_fonctionnelles', unite_fonctionnelle_id
FROM eco.p_commandes
WHERE unite_fonctionnelle_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'unites_fonctionnelles')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'fournisseurs', fournisseur_id
FROM eco.p_mouvements_articles
WHERE fournisseur_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'fournisseurs')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'fournisseurs', fournisseur_id
FROM eco.p_commandes
WHERE fournisseur_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'fournisseurs')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'types_fournisseurs', t_fournisseurs.type_id
FROM eco.p_mouvements_articles JOIN eco.t_fournisseurs ON fournisseur_id = t_fournisseurs.oid
WHERE t_fournisseurs.type_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'types_fournisseurs')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'types_fournisseurs', t_fournisseurs.type_id
FROM eco.p_commandes JOIN eco.t_fournisseurs ON fournisseur_id = t_fournisseurs.oid
WHERE t_fournisseurs.type_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'types_fournisseurs')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'lieux_mouvements', lieu_id
FROM eco.p_mouvements_articles
WHERE lieu_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'lieux_mouvements')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'lieux_commandes', lieu_livraison_id
FROM eco.p_commandes
WHERE lieu_livraison_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'lieux_commandes')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'types_mouvements', type_mouvement_id
FROM eco.p_mouvements_articles
WHERE type_mouvement_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'types_mouvements')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'ucd', ucd_id
FROM eco.p_mouvements_articles
WHERE ucd_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'ucd')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'lpp', lpp_id
FROM eco.p_mouvements_articles
WHERE lpp_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'lpp')
GROUP BY 1,2;
RETURN 'OK';
END;

+ 651
- 0
db/schema2/functions/cti_gen_referentiel_cacic~tx,tx.yaml View File

@ -0,0 +1,651 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_code
p1:
type: text
name: i_file
src: |
DECLARE
file TEXT;
ok TEXT;
result TEXT;
BEGIN
-- Import des données du fichier
IF i_file <> '' THEN
ok = '0';
IF i_code = 'CACIC_ATC' THEN
IF i_file ILIKE '%ATC%' THEN
ok = '1';
END IF;
END IF;
IF i_code = 'CACIC_ARTICLE_SP' THEN
IF i_file ILIKE '%SP%' THEN
ok = '1';
END IF;
END IF;
IF i_code = 'CACIC_ARTICLE_DM' THEN
IF i_file ILIKE '%DM%' THEN
ok = '1';
END IF;
END IF;
IF i_code = 'CACIC_ARTICLE_ASSOC' THEN
IF i_file ILIKE '%ASSOC%' AND i_file ILIKE '%ART%' THEN
ok = '1';
END IF;
END IF;
IF i_code = 'CACIC_FOURNISSEUR_ASSOC' THEN
IF i_file ILIKE '%ASSOC%' AND i_file ILIKE '%FOU%' THEN
ok = '1';
END IF;
END IF;
IF ok = '0' THEN
RETURN 'KO. Fichier ' || i_file || ' incompatible avec ' || i_code;
END IF ;
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_reference_import') THEN
DROP TABLE IF EXISTS w_reference_import;
CREATE TEMP TABLE w_reference_import (
data text
);
END IF;
TRUNCATE w_reference_import;
RAISE NOTICE '%' , 'Copie des donnees ' || i_file;
file = replace(i_file,chr(92),'/');
BEGIN
EXECUTE ('COPY w_reference_import (data)
FROM ''' || file || '''
WITH DELIMITER AS E''' || chr(92) || '01''');
EXCEPTION
WHEN others THEN RAISE NOTICE 'Erreur %' , 'Fichier ' || file || ' incompatible';
RETURN 'KO. Structure fichier ' || file || ' incorrecte';
END;
DELETE FROM eco.t_reference_input_data
USING eco.t_reference_input
WHERE t_reference_input_data.reference_input_id = t_reference_input.oid AND
code = i_code;
DROP SEQUENCE IF EXISTS w_reference_input_data_sequence;
CREATE TEMP SEQUENCE w_reference_input_data_sequence;
INSERT INTO eco.t_reference_input_data
(
reference_input_id,
no_ligne,
data
)
SELECT
t_reference_input.oid,
nextval('w_reference_input_data_sequence'::regclass),
replace(data,E'\t','||')
FROM w_reference_import
JOIN eco.t_reference_input ON code = i_code;
END IF;
-- Génération
RAISE NOTICE '%' , 'Generation ' || i_code;
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_reference_import_ligne') THEN
CREATE TEMP TABLE w_reference_import_ligne(
import_no_ligne bigint,
import_data text,
import_columns text[]
);
END IF;
-- ATC
IF i_code = 'CACIC_ATC' OR i_code = '*' THEN
TRUNCATE w_reference_import_ligne;
INSERT INTO w_reference_import_ligne(
import_no_ligne,
import_data,
import_columns
)
SELECT
no_ligne,
data,
string_to_array(data,'||')
FROM eco.t_reference_input_data
JOIN eco.t_reference_input ON t_reference_input_data.reference_input_id = t_reference_input.oid
WHERE t_reference_input.code = 'CACIC_ATC' AND
data <> '' AND
trim(split_part(data,'||',1)) <> '' AND
no_ligne <> 1;
UPDATE w_reference_import_ligne SET
import_columns[1] = trim(import_columns[1]),
import_columns[2] = trim(import_columns[2])
WHERE import_columns[1] IS DISTINCT FROM trim(import_columns[1]) OR
import_columns[2] IS DISTINCT FROM trim(import_columns[2])
;
INSERT INTO eco.t_classification_atc (code_original, code, texte, texte_court)
SELECT import_columns[1],
import_columns[1],
import_columns[2],
import_columns[2]
FROM w_reference_import_ligne
WHERE import_columns[1] <> '' AND
import_columns[1] NOT IN (SELECT code_original FROM eco.t_classification_atc WHERE code_original IS NOT NULL);
UPDATE eco.t_classification_atc SET
texte = import_columns[2],
texte_court = import_columns[2]
FROM w_reference_import_ligne
WHERE t_classification_atc.code_original = import_columns[1] AND
(
t_classification_atc.texte IS DISTINCT FROM import_columns[2] OR
t_classification_atc.texte_court IS DISTINCT FROM import_columns[2]
);
PERFORM eco.cti_reorganize_classification_atc();
UPDATE eco.t_reference_input SET
import_date = date(now()),
nb_lignes = COALESCE((SELECT count(*) FROM w_reference_import_ligne),0)
WHERE code = 'CACIC_ATC';
END IF;
-- SP
IF i_code = 'CACIC_ARTICLE_SP' OR i_code = '*' THEN
TRUNCATE w_reference_import_ligne;
INSERT INTO w_reference_import_ligne(
import_no_ligne,
import_data,
import_columns
)
SELECT
no_ligne,
data,
string_to_array(data,'||')
FROM eco.t_reference_input_data
JOIN eco.t_reference_input ON t_reference_input_data.reference_input_id = t_reference_input.oid
WHERE t_reference_input.code = 'CACIC_ARTICLE_SP' AND
data <> '' AND
trim(split_part(data,'||',1)) <> '' AND
no_ligne <> 1;
UPDATE w_reference_import_ligne SET
import_columns[1] = trim(import_columns[1]),
import_columns[2] = trim(import_columns[2]),
import_columns[3] = trim(import_columns[3]),
import_columns[4] = trim(import_columns[4]),
import_columns[5] = trim(import_columns[5]),
import_columns[6] = trim(import_columns[6]),
import_columns[7] = trim(import_columns[7]),
import_columns[8] = trim(import_columns[8]),
import_columns[9] = trim(import_columns[9]),
import_columns[10] = trim(import_columns[10]),
import_columns[11] = trim(import_columns[11]),
import_columns[12] = trim(import_columns[12]),
import_columns[13] = trim(import_columns[13]),
import_columns[14] = trim(import_columns[14]),
import_columns[15] = trim(import_columns[15]),
import_columns[16] = trim(import_columns[16]),
import_columns[17] = trim(import_columns[17]),
import_columns[18] = trim(import_columns[18]),
import_columns[19] = trim(import_columns[19]),
import_columns[20] = trim(import_columns[20])
WHERE import_columns[1] IS DISTINCT FROM trim(import_columns[1]) OR
import_columns[2] IS DISTINCT FROM trim(import_columns[2]) OR
import_columns[3] IS DISTINCT FROM trim(import_columns[3]) OR
import_columns[4] IS DISTINCT FROM trim(import_columns[4]) OR
import_columns[5] IS DISTINCT FROM trim(import_columns[5]) OR
import_columns[6] IS DISTINCT FROM trim(import_columns[6]) OR
import_columns[7] IS DISTINCT FROM trim(import_columns[7]) OR
import_columns[8] IS DISTINCT FROM trim(import_columns[8]) OR
import_columns[9] IS DISTINCT FROM trim(import_columns[9]) OR
import_columns[10] IS DISTINCT FROM trim(import_columns[10]) OR
import_columns[11] IS DISTINCT FROM trim(import_columns[11]) OR
import_columns[12] IS DISTINCT FROM trim(import_columns[12]) OR
import_columns[13] IS DISTINCT FROM trim(import_columns[13]) OR
import_columns[14] IS DISTINCT FROM trim(import_columns[14]) OR
import_columns[15] IS DISTINCT FROM trim(import_columns[15]) OR
import_columns[16] IS DISTINCT FROM trim(import_columns[16]) OR
import_columns[17] IS DISTINCT FROM trim(import_columns[17]) OR
import_columns[18] IS DISTINCT FROM trim(import_columns[18]) OR
import_columns[19] IS DISTINCT FROM trim(import_columns[19]) OR
import_columns[20] IS DISTINCT FROM trim(import_columns[20])
;
INSERT INTO eco.t_fournisseur_reference_cacic (code_original, code, texte, texte_court)
SELECT import_columns[6],
import_columns[6],
MAX(import_columns[7]),
MAX(import_columns[7])
FROM w_reference_import_ligne
WHERE import_columns[6] <> '' AND
import_columns[6] NOT IN (SELECT code_original FROM eco.t_fournisseur_reference_cacic WHERE code_original IS NOT NULL)
GROUP BY 1,2;
UPDATE eco.t_fournisseur_reference_cacic SET
code = import_columns[6],
texte = import_columns[7]
FROM w_reference_import_ligne
WHERE t_fournisseur_reference_cacic.code_original = import_columns[6] AND
(
t_fournisseur_reference_cacic.code IS DISTINCT FROM import_columns[6] OR
t_fournisseur_reference_cacic.texte IS DISTINCT FROM import_columns[7]
);
INSERT INTO eco.t_article_reference_cacic (code_original, code, texte, texte_court, ucd_id, classification_atc_id, fournisseur_reference_cacic_id)
SELECT import_columns[1],
import_columns[1],
CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END,
CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END,
COALESCE(t_ucd.oid,0) AS ucd_id,
COALESCE(t_classification_atc.oid,0) AS classification_atc_id,
COALESCE(t_fournisseur_reference_cacic.oid,0) AS fournisseur_reference_cacic_id
FROM w_reference_import_ligne
LEFT JOIN base.t_ucd ON import_columns[3] = t_ucd.code
LEFT JOIN eco.t_classification_atc ON import_columns[16] = t_classification_atc.code
LEFT JOIN eco.t_fournisseur_reference_cacic ON import_columns[6] = t_fournisseur_reference_cacic.code_original
WHERE import_columns[1] NOT IN (SELECT code_original FROM eco.t_article_reference_cacic);
UPDATE eco.t_article_reference_cacic SET
code = import_columns[1],
texte = CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END,
texte_court = CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END,
ucd_id = COALESCE(t_ucd.oid,0),
classification_atc_id = COALESCE(t_classification_atc.oid,0),
fournisseur_reference_cacic_id = COALESCE(t_fournisseur_reference_cacic.oid,0)
FROM w_reference_import_ligne
LEFT JOIN base.t_ucd ON import_columns[3] = t_ucd.code
LEFT JOIN eco.t_classification_atc ON import_columns[16] = t_classification_atc.code
LEFT JOIN eco.t_fournisseur_reference_cacic ON import_columns[6] = t_fournisseur_reference_cacic.code
WHERE t_article_reference_cacic.code_original = import_columns[1] AND
(
t_article_reference_cacic.code IS DISTINCT FROM import_columns[1] OR
t_article_reference_cacic.texte IS DISTINCT FROM CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END OR
t_article_reference_cacic.texte_court IS DISTINCT FROM CASE WHEN import_columns[19] <> '' THEN import_columns[19] ELSE import_columns[8] || ' ' || import_columns[9] END OR
t_article_reference_cacic.ucd_id IS DISTINCT FROM COALESCE(t_ucd.oid,0) OR
t_article_reference_cacic.classification_atc_id IS DISTINCT FROM COALESCE(t_classification_atc.oid,0) OR
fournisseur_reference_cacic_id IS DISTINCT FROM COALESCE(t_fournisseur_reference_cacic.oid,0)
);
INSERT INTO eco.t_types_articles(code_original, code, texte, texte_court)
SELECT code, code, texte, texte
FROM
(
SELECT 'CACIC_SP'::text AS code,'CACIC SP'::text AS texte
) subview
WHERE subview.code NOT IN (SELECT code_original FROM eco.t_types_articles WHERE code_original IS NOT NULL);
UPDATE eco.t_article_reference_cacic SET
type_id = t_types_articles.oid
FROM eco.t_types_articles
WHERE t_types_articles.code = 'CACIC_SP' AND
type_id IS DISTINCT FROM t_types_articles.oid;
UPDATE eco.t_reference_input SET
import_date = date(now()),
nb_lignes = COALESCE((SELECT count(*) FROM w_reference_import_ligne),0)
WHERE code = 'CACIC_ARTICLE_SP';
END IF;
-- DM
IF i_code = 'CACIC_ARTICLE_DM' OR i_code = '*' THEN
TRUNCATE w_reference_import_ligne;
INSERT INTO w_reference_import_ligne(
import_no_ligne,
import_data,
import_columns
)
SELECT
no_ligne,
data,
string_to_array(data,'||')
FROM eco.t_reference_input_data
JOIN eco.t_reference_input ON t_reference_input_data.reference_input_id = t_reference_input.oid
WHERE t_reference_input.code = 'CACIC_ARTICLE_DM' AND
data <> '' AND
trim(split_part(data,'||',1)) <> '' AND
no_ligne <> 1;
UPDATE w_reference_import_ligne SET
import_columns[1] = trim(import_columns[1]),
import_columns[2] = trim(import_columns[2]),
import_columns[3] = trim(import_columns[3]),
import_columns[4] = trim(import_columns[4]),
import_columns[5] = trim(import_columns[5]),
import_columns[6] = trim(import_columns[6]),
import_columns[7] = trim(import_columns[7]),
import_columns[8] = trim(import_columns[8]),
import_columns[9] = trim(import_columns[9]),
import_columns[10] = trim(import_columns[10]),
import_columns[11] = trim(import_columns[11]),
import_columns[12] = trim(import_columns[12]),
import_columns[13] = trim(import_columns[13]),
import_columns[14] = trim(import_columns[14]),
import_columns[15] = trim(import_columns[15]),
import_columns[16] = trim(import_columns[16]),
import_columns[17] = trim(import_columns[17]),
import_columns[18] = trim(import_columns[18]),
import_columns[19] = trim(import_columns[19]),
import_columns[20] = trim(import_columns[20])
WHERE import_columns[1] IS DISTINCT FROM trim(import_columns[1]) OR
import_columns[2] IS DISTINCT FROM trim(import_columns[2]) OR
import_columns[3] IS DISTINCT FROM trim(import_columns[3]) OR
import_columns[4] IS DISTINCT FROM trim(import_columns[4]) OR
import_columns[5] IS DISTINCT FROM trim(import_columns[5]) OR
import_columns[6] IS DISTINCT FROM trim(import_columns[6]) OR
import_columns[7] IS DISTINCT FROM trim(import_columns[7]) OR
import_columns[8] IS DISTINCT FROM trim(import_columns[8]) OR
import_columns[9] IS DISTINCT FROM trim(import_columns[9]) OR
import_columns[10] IS DISTINCT FROM trim(import_columns[10]) OR
import_columns[11] IS DISTINCT FROM trim(import_columns[11]) OR
import_columns[12] IS DISTINCT FROM trim(import_columns[12]) OR
import_columns[13] IS DISTINCT FROM trim(import_columns[13]) OR
import_columns[14] IS DISTINCT FROM trim(import_columns[14]) OR
import_columns[15] IS DISTINCT FROM trim(import_columns[15]) OR
import_columns[16] IS DISTINCT FROM trim(import_columns[16]) OR
import_columns[17] IS DISTINCT FROM trim(import_columns[17]) OR
import_columns[18] IS DISTINCT FROM trim(import_columns[18]) OR
import_columns[19] IS DISTINCT FROM trim(import_columns[19]) OR
import_columns[20] IS DISTINCT FROM trim(import_columns[20])
;
INSERT INTO eco.t_fournisseur_reference_cacic (code_original, code, texte, texte_court)
SELECT import_columns[4],
import_columns[4],
MAX(import_columns[5]),
MAX(import_columns[5])
FROM w_reference_import_ligne
WHERE import_columns[4] <> '' AND
import_columns[4] NOT IN (SELECT code_original FROM eco.t_fournisseur_reference_cacic WHERE code_original IS NOT NULL)
GROUP BY 1,2;
UPDATE eco.t_fournisseur_reference_cacic SET
code = import_columns[4],
texte = import_columns[5]
FROM w_reference_import_ligne
WHERE t_fournisseur_reference_cacic.code_original = import_columns[4] AND
(
t_fournisseur_reference_cacic.code IS DISTINCT FROM import_columns[4] OR
t_fournisseur_reference_cacic.texte IS DISTINCT FROM import_columns[5]
);
INSERT INTO eco.t_article_reference_cacic (code_original, code, texte, texte_court, fournisseur_reference_cacic_id)
SELECT import_columns[1],
import_columns[1],
import_columns[6],
import_columns[6],
COALESCE(t_fournisseur_reference_cacic.oid,0) AS fournisseur_reference_cacic_id
FROM w_reference_import_ligne
LEFT JOIN eco.t_fournisseur_reference_cacic ON import_columns[4] = t_fournisseur_reference_cacic.code_original
WHERE import_columns[1] NOT IN (SELECT code_original FROM eco.t_article_reference_cacic);
UPDATE eco.t_article_reference_cacic SET
code = import_columns[1],
texte = import_columns[6],
texte_court = import_columns[6],
fournisseur_reference_cacic_id = COALESCE(t_fournisseur_reference_cacic.oid,0)
FROM w_reference_import_ligne
LEFT JOIN eco.t_fournisseur_reference_cacic ON import_columns[4] = t_fournisseur_reference_cacic.code
WHERE t_article_reference_cacic.code_original = import_columns[1] AND
(
t_article_reference_cacic.code IS DISTINCT FROM import_columns[1] OR
t_article_reference_cacic.texte IS DISTINCT FROM import_columns[6] OR
t_article_reference_cacic.texte_court IS DISTINCT FROM import_columns[6] OR
fournisseur_reference_cacic_id IS DISTINCT FROM COALESCE(t_fournisseur_reference_cacic.oid,0)
);
INSERT INTO eco.t_types_articles(code_original, code, texte, texte_court)
SELECT code, code, texte, texte
FROM
(
SELECT 'CACIC_DM'::text AS code,'CACIC DM'::text AS texte
) subview
WHERE subview.code NOT IN (SELECT code_original FROM eco.t_types_articles WHERE code_original IS NOT NULL);
UPDATE eco.t_article_reference_cacic SET
type_id = t_types_articles.oid
FROM eco.t_types_articles
WHERE t_types_articles.code = 'CACIC_DM' AND
type_id IS DISTINCT FROM t_types_articles.oid;
UPDATE eco.t_reference_input SET
import_date = date(now()),
nb_lignes = COALESCE((SELECT count(*) FROM w_reference_import_ligne),0)
WHERE code = 'CACIC_ARTICLE_DM';
END IF;
-- Articles ASSOC
IF i_code = 'CACIC_ARTICLE_ASSOC' OR i_code = '*' THEN
TRUNCATE w_reference_import_ligne;
INSERT INTO w_reference_import_ligne(
import_no_ligne,
import_data,
import_columns
)
SELECT
no_ligne,
data,
string_to_array(data,'||')
FROM eco.t_reference_input_data
JOIN eco.t_reference_input ON t_reference_input_data.reference_input_id = t_reference_input.oid
WHERE t_reference_input.code = 'CACIC_ARTICLE_ASSOC' AND
data <> '' AND
trim(split_part(data,'||',1)) <> '' AND
no_ligne <> 1;
UPDATE w_reference_import_ligne SET
import_columns[1] = trim(import_columns[1]),
import_columns[2] = trim(import_columns[2]),
import_columns[3] = trim(import_columns[3]),
import_columns[4] = trim(import_columns[4]),
import_columns[5] = trim(import_columns[5]),
import_columns[6] = trim(import_columns[6]),
import_columns[7] = trim(import_columns[7]),
import_columns[8] = trim(import_columns[8]),
import_columns[9] = trim(import_columns[9]),
import_columns[10] = trim(import_columns[10]),
import_columns[11] = trim(import_columns[11]),
import_columns[12] = trim(import_columns[12]),
import_columns[13] = trim(import_columns[13]),
import_columns[14] = trim(import_columns[14]),
import_columns[15] = trim(import_columns[15]),
import_columns[16] = trim(import_columns[16]),
import_columns[17] = trim(import_columns[17]),
import_columns[18] = trim(import_columns[18]),
import_columns[19] = trim(import_columns[19]),
import_columns[20] = trim(import_columns[20])
WHERE import_columns[1] IS DISTINCT FROM trim(import_columns[1]) OR
import_columns[2] IS DISTINCT FROM trim(import_columns[2]) OR
import_columns[3] IS DISTINCT FROM trim(import_columns[3]) OR
import_columns[4] IS DISTINCT FROM trim(import_columns[4]) OR
import_columns[5] IS DISTINCT FROM trim(import_columns[5]) OR
import_columns[6] IS DISTINCT FROM trim(import_columns[6]) OR
import_columns[7] IS DISTINCT FROM trim(import_columns[7]) OR
import_columns[8] IS DISTINCT FROM trim(import_columns[8]) OR
import_columns[9] IS DISTINCT FROM trim(import_columns[9]) OR
import_columns[10] IS DISTINCT FROM trim(import_columns[10]) OR
import_columns[11] IS DISTINCT FROM trim(import_columns[11]) OR
import_columns[12] IS DISTINCT FROM trim(import_columns[12]) OR
import_columns[13] IS DISTINCT FROM trim(import_columns[13]) OR
import_columns[14] IS DISTINCT FROM trim(import_columns[14]) OR
import_columns[15] IS DISTINCT FROM trim(import_columns[15]) OR
import_columns[16] IS DISTINCT FROM trim(import_columns[16]) OR
import_columns[17] IS DISTINCT FROM trim(import_columns[17]) OR
import_columns[18] IS DISTINCT FROM trim(import_columns[18]) OR
import_columns[19] IS DISTINCT FROM trim(import_columns[19]) OR
import_columns[20] IS DISTINCT FROM trim(import_columns[20])
;
-- Mise à jour par le code
UPDATE eco.t_articles
SET article_reference_cacic_id = t_article_reference_cacic.oid
FROM w_reference_import_ligne
JOIN eco.t_article_reference_cacic ON eco.t_article_reference_cacic.code = w_reference_import_ligne.import_columns[2]
WHERE t_articles.code = w_reference_import_ligne.import_columns[1] AND
t_articles.article_reference_cacic_id IS DISTINCT FROM t_article_reference_cacic.oid;
-- Mise à jour par le code original
UPDATE eco.t_articles
SET article_reference_cacic_id = t_article_reference_cacic.oid
FROM w_reference_import_ligne
JOIN eco.t_article_reference_cacic ON eco.t_article_reference_cacic.code = w_reference_import_ligne.import_columns[2]
WHERE ltrim(t_articles.code_original,'0') = w_reference_import_ligne.import_columns[1] AND
t_articles.article_reference_cacic_id IS DISTINCT FROM t_article_reference_cacic.oid;
UPDATE eco.t_reference_input SET
import_date = date(now()),
nb_lignes = COALESCE((SELECT count(*) FROM w_reference_import_ligne),0)
WHERE code = 'CACIC_ARTICLE_ASSOC';
END IF;
-- Articles ASSOC
IF i_code = 'CACIC_FOURNISSEUR_ASSOC' OR i_code = '*' THEN
TRUNCATE w_reference_import_ligne;
INSERT INTO w_reference_import_ligne(
import_no_ligne,
import_data,
import_columns
)
SELECT
no_ligne,
data,
string_to_array(data,'||')
FROM eco.t_reference_input_data
JOIN eco.t_reference_input ON t_reference_input_data.reference_input_id = t_reference_input.oid
WHERE t_reference_input.code = 'CACIC_FOURNISSEUR_ASSOC' AND
data <> '' AND
trim(split_part(data,'||',1)) <> '' AND
no_ligne <> 1;
UPDATE w_reference_import_ligne SET
import_columns[1] = trim(import_columns[1]),
import_columns[2] = trim(import_columns[2]),
import_columns[3] = trim(import_columns[3]),
import_columns[4] = trim(import_columns[4]),
import_columns[5] = trim(import_columns[5]),
import_columns[6] = trim(import_columns[6]),
import_columns[7] = trim(import_columns[7]),
import_columns[8] = trim(import_columns[8]),
import_columns[9] = trim(import_columns[9]),
import_columns[10] = trim(import_columns[10]),
import_columns[11] = trim(import_columns[11]),
import_columns[12] = trim(import_columns[12]),
import_columns[13] = trim(import_columns[13]),
import_columns[14] = trim(import_columns[14]),
import_columns[15] = trim(import_columns[15]),
import_columns[16] = trim(import_columns[16]),
import_columns[17] = trim(import_columns[17]),
import_columns[18] = trim(import_columns[18]),
import_columns[19] = trim(import_columns[19]),
import_columns[20] = trim(import_columns[20])
WHERE import_columns[1] IS DISTINCT FROM trim(import_columns[1]) OR
import_columns[2] IS DISTINCT FROM trim(import_columns[2]) OR
import_columns[3] IS DISTINCT FROM trim(import_columns[3]) OR
import_columns[4] IS DISTINCT FROM trim(import_columns[4]) OR
import_columns[5] IS DISTINCT FROM trim(import_columns[5]) OR
import_columns[6] IS DISTINCT FROM trim(import_columns[6]) OR
import_columns[7] IS DISTINCT FROM trim(import_columns[7]) OR
import_columns[8] IS DISTINCT FROM trim(import_columns[8]) OR
import_columns[9] IS DISTINCT FROM trim(import_columns[9]) OR
import_columns[10] IS DISTINCT FROM trim(import_columns[10]) OR
import_columns[11] IS DISTINCT FROM trim(import_columns[11]) OR
import_columns[12] IS DISTINCT FROM trim(import_columns[12]) OR
import_columns[13] IS DISTINCT FROM trim(import_columns[13]) OR
import_columns[14] IS DISTINCT FROM trim(import_columns[14]) OR
import_columns[15] IS DISTINCT FROM trim(import_columns[15]) OR
import_columns[16] IS DISTINCT FROM trim(import_columns[16]) OR
import_columns[17] IS DISTINCT FROM trim(import_columns[17]) OR
import_columns[18] IS DISTINCT FROM trim(import_columns[18]) OR
import_columns[19] IS DISTINCT FROM trim(import_columns[19]) OR
import_columns[20] IS DISTINCT FROM trim(import_columns[20])
;
UPDATE eco.t_fournisseurs
SET fournisseur_reference_cacic_id = t_fournisseur_reference_cacic.oid
FROM w_reference_import_ligne
JOIN eco.t_fournisseur_reference_cacic ON eco.t_fournisseur_reference_cacic.code = w_reference_import_ligne.import_columns[2]
WHERE t_fournisseurs.code = w_reference_import_ligne.import_columns[1] AND
t_fournisseurs.fournisseur_reference_cacic_id IS DISTINCT FROM t_fournisseur_reference_cacic.oid;
UPDATE eco.t_reference_input SET
import_date = date(now()),
nb_lignes = COALESCE((SELECT count(*) FROM w_reference_import_ligne),0)
WHERE code = 'CACIC_FOURNISSEUR_ASSOC';
END IF;
-- Impacts sur base de données
UPDATE eco.t_articles
SET article_reference_cacic_id = subview.article_reference_cacic_id
FROM (
SELECT ucd_id, MAX(oid) AS article_reference_cacic_id
FROM eco.t_article_reference_cacic
WHERE ucd_id <> 0
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE t_articles.ucd_id = subview.ucd_id AND
t_articles.article_reference_cacic_id = 0;
UPDATE eco.t_articles
SET article_reference_cacic_id = subview.article_reference_cacic_id
FROM (
SELECT ucd_id,
classification_atc_id,
MAX(oid) AS article_reference_cacic_id
FROM eco.t_article_reference_cacic
WHERE ucd_id <> 0 AND classification_atc_id <> 0
GROUP BY 1,2
HAVING count(*) = 1
) subview
WHERE t_articles.ucd_id = subview.ucd_id AND
t_articles.classification_atc_id = subview.classification_atc_id AND
t_articles.article_reference_cacic_id = 0;
UPDATE eco.t_articles
SET article_reference_cacic_id = subview.article_reference_cacic_id
FROM
(SELECT t_articles.oid AS article_id, t_article_reference_cacic.texte, MAX(t_article_reference_cacic.oid) AS article_reference_cacic_id
FROM eco.t_article_reference_cacic
JOIN eco.t_articles ON upper(t_article_reference_cacic.texte) = upper(t_articles.texte)
WHERE t_articles.oid <> 0 AND
t_articles.article_reference_cacic_id = 0 AND
t_article_reference_cacic.oid <> 0
GROUP BY 1,2
HAVING count(*) = 1
) subview
WHERE t_articles.oid = subview.article_id AND
t_articles.article_reference_cacic_id = 0;
UPDATE eco.t_articles
SET classification_atc_id = t_article_reference_cacic.classification_atc_id
FROM eco.t_article_reference_cacic
WHERE t_articles.article_reference_cacic_id = t_article_reference_cacic.oid AND
t_articles.classification_atc_id = 0 AND
t_article_reference_cacic.classification_atc_id <> 0;
UPDATE eco.t_articles
SET ucd_id = t_article_reference_cacic.ucd_id
FROM eco.t_article_reference_cacic
WHERE t_articles.article_reference_cacic_id = t_article_reference_cacic.oid AND
t_articles.ucd_id = 0 AND
t_article_reference_cacic.ucd_id <> 0;
UPDATE eco.t_articles SET
article_reference_cacic_code = t_article_reference_cacic.code,
article_reference_cacic_texte = t_article_reference_cacic.texte_court,
article_reference_cacic_section_id = t_article_reference_cacic.section_id,
article_reference_cacic_section_code = t_article_reference_cacic.section_code,
article_reference_cacic_section_texte = t_article_reference_cacic.section_texte
FROM eco.t_article_reference_cacic
WHERE article_reference_cacic_id = t_article_reference_cacic.oid AND
(
article_reference_cacic_code IS DISTINCT FROM t_article_reference_cacic.code OR
article_reference_cacic_texte IS DISTINCT FROM t_article_reference_cacic.texte_court OR
article_reference_cacic_section_id IS DISTINCT FROM t_article_reference_cacic.section_id OR
article_reference_cacic_section_code IS DISTINCT FROM t_article_reference_cacic.section_code OR
article_reference_cacic_section_texte IS DISTINCT FROM t_article_reference_cacic.section_texte
);
UPDATE eco.t_fournisseurs
SET fournisseur_reference_cacic_id = subview.fournisseur_reference_cacic_id
FROM
(
SELECT texte, MAX(oid) AS fournisseur_reference_cacic_id
FROM eco.t_fournisseur_reference_cacic
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE subview.texte ILIKE t_fournisseurs.texte AND
t_fournisseurs.fournisseur_reference_cacic_id IS DISTINCT FROM subview.fournisseur_reference_cacic_id
;
UPDATE eco.t_fournisseurs SET
fournisseur_reference_cacic_code = t_fournisseur_reference_cacic.code,
fournisseur_reference_cacic_texte = t_fournisseur_reference_cacic.texte_court,
fournisseur_reference_cacic_section_id = t_fournisseur_reference_cacic.section_id,
fournisseur_reference_cacic_section_code = t_fournisseur_reference_cacic.section_code,
fournisseur_reference_cacic_section_texte = t_fournisseur_reference_cacic.section_texte
FROM eco.t_fournisseur_reference_cacic
WHERE fournisseur_reference_cacic_id = t_fournisseur_reference_cacic.oid AND
(
fournisseur_reference_cacic_code IS DISTINCT FROM t_fournisseur_reference_cacic.code OR
fournisseur_reference_cacic_texte IS DISTINCT FROM t_fournisseur_reference_cacic.texte_court OR
fournisseur_reference_cacic_section_id IS DISTINCT FROM t_fournisseur_reference_cacic.section_id OR
fournisseur_reference_cacic_section_code IS DISTINCT FROM t_fournisseur_reference_cacic.section_code OR
fournisseur_reference_cacic_section_texte IS DISTINCT FROM t_fournisseur_reference_cacic.section_texte
);
RETURN 'OK';
END;

+ 365
- 0
db/schema2/functions/cti_gen_referentiel_cti.yaml View File

@ -0,0 +1,365 @@
return: text
lang: plpgsql
src: |
DECLARE
file TEXT;
ok TEXT;
result TEXT;
BEGIN
INSERT INTO eco.t_divers (code, texte, valeur, description, valeur2)
SELECT
'REFFOUCTI',
'Référentiel fournisseur CTI',
'0',
'1=Génération référentiel fournisseur CTI',
''
WHERE 'REFFOUCTI' NOT IN (SELECT code FROM eco.t_divers);
INSERT INTO eco.t_divers (code, texte, valeur, description, valeur2)
SELECT
'REFARTCTI',
'Référentiel article CTI',
'0',
'1=Génération référentiel article CTI',
''
WHERE 'REFARTCTI' NOT IN (SELECT code FROM eco.t_divers);
-- Referentiel fournisseurs
IF EXISTS (SELECT valeur FROM eco.t_divers WHERE code = 'REFFOUCTI' AND valeur = '1') THEN
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_gen_referentiel') THEN
DROP TABLE IF EXISTS w_cti_gen_referentiel;
CREATE TEMP TABLE w_cti_gen_referentiel (
oid bigint,
code text,
texte text,
texte_court text,
texte_soundex text
);
END IF;
TRUNCATE w_cti_gen_referentiel;
INSERT INTO w_cti_gen_referentiel
SELECT oid, code, texte, texte_court, texte AS texte_soundex
FROM eco.t_fournisseurs
WHERE oid <> 0 AND
(fournisseur_reference_cti_id IS NULL OR
fournisseur_reference_cti_id = 0);
UPDATE w_cti_gen_referentiel
SET texte_soundex = trim(split_part(texte_soundex,'(',1))
WHERE texte_soundex like '%(%';
UPDATE w_cti_gen_referentiel
SET texte_soundex = translate(texte_soundex,'*.''"-;,/&','');
UPDATE w_cti_gen_referentiel
SET texte_soundex = rtrim(texte_soundex,'X')
WHERE texte_soundex like '%XX';
UPDATE w_cti_gen_referentiel
SET texte_soundex = ltrim(texte_soundex,'X')
WHERE texte_soundex like 'XX%';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' SAS','')
WHERE texte_soundex like '% SAS%';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' SA','')
WHERE texte_soundex like '% SA';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' SA','')
WHERE texte_soundex like '% SARL';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' FRANCE','')
WHERE texte_soundex like '% FRANCE';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' ','')
WHERE texte_soundex like '% %';
INSERT INTO eco.t_fournisseur_reference_cti (code_original, code, texte, texte_court)
SELECT
texte_soundex AS code_original,
substr(texte_soundex,1,10),
MIN(texte) AS texte,
MIN(texte) AS texte_court
FROM w_cti_gen_referentiel
WHERE length(texte_soundex) > 1 AND
texte_soundex NOT IN (SELECT code_original FROM eco.t_fournisseur_reference_cti WHERE code_original IS NOT NULL)
GROUP BY 1
ORDER BY 1
;
UPDATE eco.t_fournisseurs
SET fournisseur_reference_cti_id = t_fournisseur_reference_cti.oid
FROM w_cti_gen_referentiel
JOIN eco.t_fournisseur_reference_cti ON t_fournisseur_reference_cti.code_original = texte_soundex
WHERE t_fournisseurs.oid = w_cti_gen_referentiel.oid;
UPDATE eco.t_fournisseur_reference_cti
SET code = ''
WHERE oid <> 0;
UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,4)
FROM
(SELECT substr(code_original,1,4) AS new_code
FROM eco.t_fournisseur_reference_cti
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,4) = new_code
;
UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,5)
FROM
(SELECT substr(code_original,1,5) AS new_code
FROM eco.t_fournisseur_reference_cti
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,5) = new_code AND
code = ''
;
UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,6)
FROM
(SELECT substr(code_original,1,6) AS new_code
FROM eco.t_fournisseur_reference_cti
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,6) = new_code AND
code = ''
;
UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,7)
FROM
(SELECT substr(code_original,1,7) AS new_code
FROM eco.t_fournisseur_reference_cti
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,7) = new_code AND
code = ''
;
UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,8)
FROM
(SELECT substr(code_original,1,8) AS new_code
FROM eco.t_fournisseur_reference_cti
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,8) = new_code AND
code = ''
;
PERFORM base.cti_execute(
'UPDATE eco.t_fournisseur_reference_cti
SET code = substr(code_original,1,8) || to_char(nb,''FM00'')
FROM
(
SELECT substr(code_original,1,8) AS new_code,
MAX(oid) AS max_id,
count(*) AS nb
FROM eco.t_fournisseur_reference_cti
WHERE code = ''''
GROUP BY 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,8) = new_code AND
oid = max_id AND
code = ''''
',100);
UPDATE eco.t_fournisseurs SET
fournisseur_reference_cti_code = t_fournisseur_reference_cti.code,
fournisseur_reference_cti_texte = t_fournisseur_reference_cti.texte_court,
fournisseur_reference_cti_section_id = t_fournisseur_reference_cti.section_id,
fournisseur_reference_cti_section_code = t_fournisseur_reference_cti.section_code,
fournisseur_reference_cti_section_texte = t_fournisseur_reference_cti.section_texte
FROM eco.t_fournisseur_reference_cti
WHERE fournisseur_reference_cti_id = t_fournisseur_reference_cti.oid AND
(
fournisseur_reference_cti_code IS DISTINCT FROM t_fournisseur_reference_cti.code OR
fournisseur_reference_cti_texte IS DISTINCT FROM t_fournisseur_reference_cti.texte_court OR
fournisseur_reference_cti_section_id IS DISTINCT FROM t_fournisseur_reference_cti.section_id OR
fournisseur_reference_cti_section_code IS DISTINCT FROM t_fournisseur_reference_cti.section_code OR
fournisseur_reference_cti_section_texte IS DISTINCT FROM t_fournisseur_reference_cti.section_texte
);
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'fournisseur_reference_cti', fournisseur_reference_cti_id
FROM eco.p_mouvements_articles JOIN eco.t_fournisseurs ON fournisseur_id = t_fournisseurs.oid
WHERE fournisseur_reference_cti_id <> 0 AND fournisseur_reference_cti_id IS NOT NULL AND fournisseur_reference_cti_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'fournisseur_reference_cti')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'fournisseur_reference_cti', fournisseur_reference_cti_id
FROM eco.p_commandes JOIN eco.t_fournisseurs ON fournisseur_id = t_fournisseurs.oid
WHERE fournisseur_reference_cti_id IS NOT NULL AND fournisseur_reference_cti_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'fournisseur_reference_cti')
GROUP BY 1,2;
END IF;
-- Referentiel articles
IF EXISTS (SELECT valeur FROM eco.t_divers WHERE code = 'REFARTCTI' AND valeur = '1') THEN
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cti_gen_referentiel') THEN
DROP TABLE IF EXISTS w_cti_gen_referentiel;
CREATE TEMP TABLE w_cti_gen_referentiel (
oid bigint,
code text,
texte text,
texte_court text,
texte_soundex text
);
END IF;
TRUNCATE w_cti_gen_referentiel;
INSERT INTO w_cti_gen_referentiel
SELECT oid, code, texte, texte_court, texte AS texte_soundex
FROM eco.t_articles
WHERE oid <> 0 AND
(article_reference_cti_id IS NULL OR
article_reference_cti_id = 0);
UPDATE w_cti_gen_referentiel
SET texte_soundex = trim(split_part(texte_soundex,'(',1))
WHERE texte_soundex like '%(%';
UPDATE w_cti_gen_referentiel
SET texte_soundex = translate(texte_soundex,'*.''"-;,/&=','');
UPDATE w_cti_gen_referentiel
SET texte_soundex = rtrim(texte_soundex,'X')
WHERE texte_soundex like '%XX';
UPDATE w_cti_gen_referentiel
SET texte_soundex = ltrim(texte_soundex,'X')
WHERE texte_soundex like 'XX%';
UPDATE w_cti_gen_referentiel
SET texte_soundex = replace(texte_soundex,' ','')
WHERE texte_soundex like '% %';
INSERT INTO eco.t_article_reference_cti (code_original, code, texte, texte_court)
SELECT
texte_soundex AS code_original,
substr(texte_soundex,1,10),
MIN(texte) AS texte,
MIN(texte) AS texte_court
FROM w_cti_gen_referentiel
WHERE length(texte_soundex) > 1 AND
texte_soundex NOT IN (SELECT code_original FROM eco.t_article_reference_cti WHERE code_original IS NOT NULL)
GROUP BY 1
ORDER BY 1
;
UPDATE eco.t_articles
SET article_reference_cti_id = t_article_reference_cti.oid
FROM w_cti_gen_referentiel
JOIN eco.t_article_reference_cti ON t_article_reference_cti.code_original = texte_soundex
WHERE t_articles.oid = w_cti_gen_referentiel.oid;
UPDATE eco.t_article_reference_cti
SET code = ''
WHERE oid <> 0;
UPDATE eco.t_article_reference_cti
SET code = substr(translate(code_original,'0123456789',''),1,4)
FROM
(SELECT substr(translate(code_original,'0123456789',''),1,4) AS new_code
FROM eco.t_article_reference_cti
WHERE length(translate(code_original,'0123456789','')) >= 4
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(translate(code_original,'0123456789',''),1,4) = new_code
;
UPDATE eco.t_article_reference_cti
SET code = substr(translate(code_original,'0123456789',''),1,5)
FROM
(SELECT substr(translate(code_original,'0123456789',''),1,5) AS new_code
FROM eco.t_article_reference_cti
WHERE length(translate(code_original,'0123456789','')) >= 4
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(translate(code_original,'0123456789',''),1,5) = new_code AND
code = ''
;
UPDATE eco.t_article_reference_cti
SET code = substr(translate(code_original,'0123456789',''),1,6)
FROM
(SELECT substr(translate(code_original,'0123456789',''),1,6) AS new_code
FROM eco.t_article_reference_cti
WHERE length(translate(code_original,'0123456789','')) >= 4
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(translate(code_original,'0123456789',''),1,6) = new_code AND
code = ''
;
UPDATE eco.t_article_reference_cti
SET code = substr(translate(code_original,'0123456789',''),1,7)
FROM
(SELECT substr(translate(code_original,'0123456789',''),1,7) AS new_code
FROM eco.t_article_reference_cti
WHERE length(translate(code_original,'0123456789','')) >= 4
GROUP BY 1
HAVING count(*) = 1
) subview
WHERE oid <> 0 AND
substr(translate(code_original,'0123456789',''),1,7) = new_code AND
code = ''
;
PERFORM base.cti_execute(
'UPDATE eco.t_article_reference_cti
SET code = substr(translate(code_original,''0123456789'',''''),1,7) || to_char(nb,''FM00'')
FROM
(
SELECT substr(translate(code_original,''0123456789'',''''),1,7) AS new_code,
MAX(oid) AS max_id,
count(*) AS nb
FROM eco.t_article_reference_cti
WHERE length(translate(code_original,''0123456789'','''')) >= 4 AND
code = ''''
GROUP BY 1
) subview
WHERE oid <> 0 AND
substr(translate(code_original,''0123456789'',''''),1,7) = new_code AND
oid = max_id AND
code = ''''',500)
;
PERFORM base.cti_execute(
'UPDATE eco.t_article_reference_cti
SET code = substr(code_original,1,7) || to_char(nb,''FM00'')
FROM
(
SELECT substr(code_original,1,7) AS new_code,
MAX(oid) AS max_id,
count(*) AS nb
FROM eco.t_article_reference_cti
WHERE code = ''''
GROUP BY 1
) subview
WHERE oid <> 0 AND
substr(code_original,1,7) = new_code AND
oid = max_id AND
code = ''''',500)
;
UPDATE eco.t_articles SET
article_reference_cti_code = t_article_reference_cti.code,
article_reference_cti_texte = t_article_reference_cti.texte_court,
article_reference_cti_section_id = t_article_reference_cti.section_id,
article_reference_cti_section_code = t_article_reference_cti.section_code,
article_reference_cti_section_texte = t_article_reference_cti.section_texte
FROM eco.t_article_reference_cti
WHERE article_reference_cti_id = t_article_reference_cti.oid AND
(
article_reference_cti_code IS DISTINCT FROM t_article_reference_cti.code OR
article_reference_cti_texte IS DISTINCT FROM t_article_reference_cti.texte_court OR
article_reference_cti_section_id IS DISTINCT FROM t_article_reference_cti.section_id OR
article_reference_cti_section_code IS DISTINCT FROM t_article_reference_cti.section_code OR
article_reference_cti_section_texte IS DISTINCT FROM t_article_reference_cti.section_texte
);
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'article_reference_cti', article_reference_cti_id
FROM eco.p_mouvements_articles JOIN eco.t_articles ON article_id = t_articles.oid
WHERE article_reference_cti_id IS NOT NULL AND article_reference_cti_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'article_reference_cti')
GROUP BY 1,2;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'article_reference_cti', article_reference_cti_id
FROM eco.p_lignes_commandes JOIN eco.t_articles ON article_id = t_articles.oid
WHERE article_reference_cti_id IS NOT NULL AND article_reference_cti_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'article_reference_cti')
GROUP BY 1,2;
END IF;
RETURN 'OK';
END;

+ 1397
- 0
db/schema2/functions/cti_get_columns_from_indicateurs~tx.yaml
File diff suppressed because it is too large
View File


+ 116
- 0
db/schema2/functions/cti_initialize_tables.yaml View File

@ -0,0 +1,116 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
-- UCD
INSERT INTO base.t_ucd(oid, code, texte, texte_court)
SELECT 0, chr(127) || '*', 'Non renseigné', 'N/R'
WHERE 0 NOT IN (SELECT oid FROM base.t_ucd);
-- LPP
INSERT INTO base.t_lpp(oid, code, texte, texte_court)
SELECT 0, chr(127) || '*', 'Non renseigné', 'N/R'
WHERE 0 NOT IN (SELECT oid FROM base.t_lpp);
-- Sites
INSERT INTO eco.t_sites(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'N/R'
WHERE 0 NOT IN (SELECT oid FROM eco.t_sites);
-- Comptes
INSERT INTO eco.t_compte(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'N/R'
WHERE 0 NOT IN (SELECT oid FROM eco.t_compte);
-- Classification ATC
INSERT INTO eco.t_classification_atc(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*********', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM eco.t_classification_atc);
-- Familles articles
INSERT INTO eco.t_familles_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM eco.t_familles_articles);
-- Sous Familles articles
INSERT INTO eco.t_sous_familles_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM eco.t_sous_familles_articles);
-- Types articles
INSERT INTO eco.t_types_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_types_articles);
-- Catégories articles
INSERT INTO eco.t_categories_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_categories_articles);
-- Sous Catégories articles
INSERT INTO eco.t_sous_categories_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_sous_categories_articles);
-- Référence article
INSERT INTO eco.t_article_reference_cacic(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_article_reference_cacic);
-- Lieux
INSERT INTO eco.t_lieux(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_lieux);
-- Articles
INSERT INTO eco.t_articles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_articles);
-- unités
INSERT INTO eco.t_unites(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM eco.t_unites);
-- Types de fournisseur
INSERT INTO eco.t_types_fournisseurs(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_types_fournisseurs);
-- Fournisseurs
INSERT INTO eco.t_fournisseurs(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_fournisseurs);
-- Gestionnaires
INSERT INTO eco.t_gestionnaires(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_gestionnaires);
-- Référence fournisseur cacic
INSERT INTO eco.t_fournisseur_reference_cacic(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_fournisseur_reference_cacic);
-- Référence fournisseur cti
INSERT INTO eco.t_fournisseur_reference_cti(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_fournisseur_reference_cti);
-- unites fonctionnelles
INSERT INTO eco.t_unites_fonctionnelles(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM eco.t_unites_fonctionnelles);
-- Types de mouvement
INSERT INTO eco.t_types_mouvements(oid, code_original, code, texte, texte_court)
SELECT 0, '', chr(127) || '*', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM eco.t_types_mouvements);
RETURN 'OK';
END;

+ 61
- 0
db/schema2/functions/cti_now~tx,tx.yaml View File

@ -0,0 +1,61 @@
return: date
lang: plpgsql
parameters:
p0:
type: text
name: i_code
p1:
type: text
name: i_option
src: |
DECLARE
_code text;
_option text;
_now date;
BEGIN
_code = i_code;
IF _code NOT IN ('NOW', 'NOWCLOTURE') THEN
_code = 'NOW';
END IF;
_option = i_option;
IF NOT EXISTS (SELECT * FROM eco.t_divers WHERE code = _code) THEN
_option = 'FORCE';
END IF;
IF _option = 'FORCE' THEN
_now =
CASE _code
WHEN 'NOW' THEN
(SELECT MAX(date) FROM eco.p_mouvements_articles WHERE date <= date(now()) )
WHEN 'NOWCLOTURE' THEN
(SELECT date(date_trunc('month',MAX(date_commande)) - interval '1 day') FROM eco.p_commandes WHERE date_commande <= date(now()))
ELSE date(now())
END;
UPDATE eco.t_divers SET
texte = CASE _code
WHEN 'NOW' THEN 'Date dernier mouvement'
WHEN 'NOWCLOTURE' THEN 'Date clôture'
ELSE 'Date dernier mouvement'
END,
valeur = _now::text,
valeur_date = _now,
show_info_module = true
WHERE code = _code;
INSERT INTO eco.t_divers (code, texte, valeur, valeur_date, description, show_info_module)
SELECT
_code,
CASE _code
WHEN 'NOW' THEN 'Date dernier mouvement'
WHEN 'NOWCLOTURE' THEN 'Date clôture'
ELSE 'Date dernier mouvement'
END,
_now::text,
_now,
'Date non modifiable',
true
WHERE _code NOT IN (SELECT code FROM eco.t_divers);
ELSE
_now = (SELECT valeur_date FROM eco.t_divers WHERE code = _code);
END IF;
RETURN _now;
END;

+ 51
- 0
db/schema2/functions/cti_prepare_rapport_calc_indicator~tx,tx,in,bi,bi,bi,bi,bi,bi.yaml View File

@ -0,0 +1,51 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_column_name
p1:
type: text
name: i_table_name
p2:
type: integer
name: i_array_index
p3:
type: bigint
name: i_indicateur_id
p4:
type: bigint
name: i_indicateur_associe_1_id
p5:
type: bigint
name: i_indicateur_associe_2_id
p6:
type: bigint
name: i_indicateur_associe_3_id
p7:
type: bigint
name: i_indicateur_associe_4_id
p8:
type: bigint
name: i_indicateur_associe_5_id
src: |
DECLARE
column_name text;
array_index text;
BEGIN
array_index = '';
if i_array_index > 0 THEN
array_index = '[0000' || i_array_index || ']';
END IF;
if i_table_name <> '*CALC' THEN
column_name = 'SUM(indicateurs[000' || i_indicateur_id || ']' || array_index ||')';
ELSE
column_name = replace(i_column_name, '[1]', 'SUM(indicateurs[000' || i_indicateur_associe_1_id || ']' || array_index ||')');
column_name = replace(column_name, '[2]', 'SUM(indicateurs[000' || i_indicateur_associe_2_id || ']' || array_index ||')');
column_name = replace(column_name, '[3]', 'SUM(indicateurs[000' || i_indicateur_associe_3_id || ']' || array_index ||')');
column_name = replace(column_name, '[4]', 'SUM(indicateurs[000' || i_indicateur_associe_4_id || ']' || array_index ||')');
column_name = replace(column_name, '[5]', 'SUM(indicateurs[000' || i_indicateur_associe_5_id || ']' || array_index ||')');
END IF;
RETURN column_name;
END;

+ 72
- 0
db/schema2/functions/cti_prepare_rapport_comp~bi.yaml View File

@ -0,0 +1,72 @@
return: SETOF record
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
src: |
DECLARE
sqlcmd text;
temp_cursor refcursor;
_oid integer;
_maxind integer;
row RECORD;
BEGIN
FOR row IN
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_contrats_mois_1', 'COMP') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_historique_paie_1', 'COMP') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_arrets_travail_mois_1', 'COMP') AS (name text, value text)
UNION
SELECT 'RUBRIQUES_RAPPORT',
base.cti_group_concat(
'ARRAY[' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
'(' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' - ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ') ' ||
', ' ||
'CASE WHEN ' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' > 0 AND ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || '> 0 THEN ' ||
'base.cti_division((' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' - ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || '), ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ') * 100 ' ||
'ELSE 0 END, ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 1, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
'(' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 1, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' - ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ') ' ||
', ' ||
'CASE WHEN ' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 1, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' > 0 AND ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || '> 0 THEN ' ||
'base.cti_division((' || econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 1, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ' - ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || '), ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ') * 100 ' ||
'ELSE 0 END ' ||
']'
)
FROM econom.t_rapports_rubriques
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid
WHERE rapport_id = i_rapport_id
LOOP
RETURN NEXT row;
END LOOP;
RETURN ;
END;

+ 178
- 0
db/schema2/functions/cti_prepare_rapport_indicateurs~bi,tx,tx.yaml View File

@ -0,0 +1,178 @@
return: SETOF record
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
p1:
type: text
name: i_table_name
p2:
type: text
name: i_option
src: |
DECLARE
sqlcmd text;
temp_cursor refcursor;
_oid integer;
_count integer;
_table_count integer;
_maxind integer;
_indicateur_name text;
row RECORD;
BEGIN
_maxind = 100;
_table_count = 0;
OPEN temp_cursor FOR
SELECT MAX(oid), SUM(CASE WHEN i_table_name = table_name THEN 1 ELSE 0 END)
FROM econom.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id])
FROM econom.t_rapports
JOIN econom.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid);
FETCH temp_cursor INTO _oid,_count;
WHILE FOUND LOOP
_maxind = _oid;
_table_count = _count;
FETCH temp_cursor INTO _oid, _count;
END LOOP;
CLOSE temp_cursor;
_indicateur_name = CASE i_table_name WHEN 'v_contrats_mois_1' THEN 'INDICATEURS_CONTRAT'
WHEN 'v_historique_paie_1' THEN 'INDICATEURS_PAIE'
WHEN 'v_arrets_travail_mois_1' THEN 'INDICATEURS_ARRET'
ELSE 'INDICATEURS_OTHERS' END;
IF (_table_count = 0) THEN
FOR row IN SELECT _indicateur_name::text, ''::text
LOOP
RETURN NEXT row;
END LOOP;
END IF;
IF (i_option <> 'MONTH' AND i_option <> 'COMP' AND _table_count > 0) THEN
FOR row IN
SELECT
_indicateur_name::text, base.cti_group_concat(CASE WHEN subview.oid IS NOT NULL THEN total_function || '(' || column_name || ')' ELSE 'NULL::numeric' END)
FROM generate_series(1, _maxind)
LEFT JOIN
(
SELECT *
FROM econom.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id])
FROM econom.t_rapports
JOIN econom.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON generate_series = subview.oid AND subview.table_name = i_table_name
UNION
SELECT 'RUBRIQUES_RAPPORT',
base.cti_group_concat(
CASE WHEN table_name <> '*CALC' THEN 'SUM(indicateurs[' || indicateur_id || '])'
ELSE
replace(
replace(
column_name,
'[1]',
'SUM(indicateurs[000' || indicateur_associe_1_id || '])'
),
'[2]',
'SUM(indicateurs[000' || indicateur_associe_2_id || '])'
)
END)
FROM econom.t_rapports_rubriques
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid
WHERE rapport_id = i_rapport_id
LOOP
RETURN NEXT row;
END LOOP;
END IF;
IF (i_option = 'MONTH' AND _table_count > 0) THEN
FOR row IN
SELECT
_indicateur_name::text,
base.cti_group_concat(
CASE WHEN subview.oid IS NOT NULL THEN
'ARRAY['
|| '(' || total_function || '(' || column_name || ')::numeric),'
|| replace(month_formula, '#SEQ#', '< 1') || ','
|| replace(month_formula, '#SEQ#', '= 1') || ','
|| replace(month_formula, '#SEQ#', '= 2') || ','
|| replace(month_formula, '#SEQ#', '= 3') || ','
|| replace(month_formula, '#SEQ#', '= 4') || ','
|| replace(month_formula, '#SEQ#', '= 5') || ','
|| replace(month_formula, '#SEQ#', '= 6') || ','
|| replace(month_formula, '#SEQ#', '= 7') || ','
|| replace(month_formula, '#SEQ#', '= 8') || ','
|| replace(month_formula, '#SEQ#', '= 9') || ','
|| replace(month_formula, '#SEQ#', '= 10') || ','
|| replace(month_formula, '#SEQ#', '= 11') || ','
|| replace(month_formula, '#SEQ#', '= 12') || ''
|| ']'
ELSE 'ARRAY[NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric,NULL::numeric]' END)
FROM generate_series(1, _maxind)
LEFT JOIN
(
SELECT *,
CASE WHEN column_name ILIKE '%DISTINCT%'
THEN total_function || '(DISTINCT CASE WHEN columnby_sequence #SEQ# THEN ' || replace(column_name,'DISTINCT','') || ' ELSE NULL END)'
ELSE total_function || '(CASE WHEN columnby_sequence #SEQ# THEN ' || column_name || ' ELSE NULL END)' END AS month_formula
FROM econom.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id])
FROM econom.t_rapports
JOIN econom.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON generate_series = subview.oid AND subview.table_name = i_table_name
LOOP
RETURN NEXT row;
END LOOP;
END IF;
IF (i_option = 'COMP' AND _table_count > 0) THEN
FOR row IN
SELECT
_indicateur_name::text,
base.cti_group_concat(
CASE WHEN subview.oid IS NOT NULL THEN
'ARRAY['
|| replace(month_formula, '#SEQ#', '= 1') || '::numeric,'
|| replace(month_formula, '#SEQ#', '= 2') || '::numeric,'
|| replace(month_formula, '#SEQ#', '= 3') || '::numeric'
|| ']'
ELSE 'ARRAY[NULL::numeric,NULL::numeric,NULL::numeric]' END)
FROM generate_series(1, _maxind)
LEFT JOIN
(
SELECT *,
CASE WHEN column_name ILIKE '%DISTINCT%'
THEN total_function || '(DISTINCT CASE WHEN columnby_sequence #SEQ# THEN ' || replace(column_name,'DISTINCT','') || ' ELSE NULL END)'
ELSE total_function || '(CASE WHEN columnby_sequence #SEQ# THEN ' || column_name || ' ELSE NULL END)' END AS month_formula
FROM econom.t_indicateurs
WHERE oid IN (
SELECT base.cti_unnest(Array[indicateur_id, indicateur_associe_1_id, indicateur_associe_2_id, indicateur_associe_3_id, indicateur_associe_4_id, indicateur_associe_5_id])
FROM econom.t_rapports
JOIN econom.t_rapports_rubriques ON t_rapports.oid = t_rapports_rubriques.rapport_id AND rapport_id = i_rapport_id
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid)
) subview ON generate_series = subview.oid AND subview.table_name = i_table_name
LOOP
RETURN NEXT row;
END LOOP;
END IF;
RETURN ;
END;

+ 59
- 0
db/schema2/functions/cti_prepare_rapport_month~bi.yaml View File

@ -0,0 +1,59 @@
return: SETOF record
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
src: |
DECLARE
sqlcmd text;
temp_cursor refcursor;
_oid integer;
_maxind integer;
row RECORD;
BEGIN
FOR row IN
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_contrats_mois_1', 'MONTH') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_historique_paie_1', 'MONTH') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_arrets_travail_mois_1', 'MONTH') AS (name text, value text)
UNION
SELECT 'RUBRIQUES_RAPPORT',
base.cti_group_concat(
'ARRAY[' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 1, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 2, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 3, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 4, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 5, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 6, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 7, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 8, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 9, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 10, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 11, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 12, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 13, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id ) || ', ' ||
econom.cti_prepare_rapport_calc_indicator(column_name, table_name, 14, indicateur_id, indicateur_associe_1_id , indicateur_associe_2_id , indicateur_associe_3_id ,indicateur_associe_4_id ,indicateur_associe_5_id )
|| ']'
)
FROM econom.t_rapports_rubriques
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid
WHERE rapport_id = i_rapport_id
LOOP
RETURN NEXT row;
END LOOP;
RETURN ;
END;

+ 88
- 0
db/schema2/functions/cti_prepare_rapport~bi.yaml View File

@ -0,0 +1,88 @@
return: SETOF record
lang: plpgsql
parameters:
p0:
type: bigint
name: i_rapport_id
src: |
DECLARE
sqlcmd text;
temp_cursor refcursor;
_oid integer;
_maxind integer;
row RECORD;
BEGIN
FOR row IN
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_contrats_mois_1', '') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_historique_paie_1', '') AS (name text, value text)
UNION
SELECT * FROM econom.cti_prepare_rapport_indicateurs(i_rapport_id, 'v_arrets_travail_mois_1', '') AS (name text, value text)
UNION
SELECT 'RUBRIQUES_RAPPORT',
base.cti_group_concat(
CASE WHEN table_name <> '*CALC' THEN 'SUM(indicateurs[000' || indicateur_id || '])'
ELSE
replace(
replace(
column_name,
'[1]',
'SUM(indicateurs[000' || indicateur_associe_1_id || '])'
),
'[2]',
'SUM(indicateurs[000' || indicateur_associe_2_id || '])'
)
END)
FROM econom.t_rapports_rubriques
JOIN econom.t_indicateurs ON t_rapports_rubriques.indicateur_id = t_indicateurs.oid
WHERE rapport_id = i_rapport_id
UNION
SELECT 'IC' || numero_rubrique, t_indicateurs.oid::text FROM econom.t_rapports_rubriques, econom.t_indicateurs
WHERE t_rapports_rubriques.rapport_id = i_rapport_id AND t_rapports_rubriques.indicateur_id = t_indicateurs.oid
UNION
SELECT 'IH' || numero_rubrique, CASE WHEN t_rapports_rubriques.entete <> '' THEN t_rapports_rubriques.entete ELSE t_indicateurs.entete END FROM econom.t_rapports_rubriques, econom.t_indicateurs
WHERE t_rapports_rubriques.rapport_id = i_rapport_id AND t_rapports_rubriques.indicateur_id = t_indicateurs.oid
UNION
SELECT 'IW' || numero_rubrique,
CASE
WHEN t_indicateurs.table_name = 'SEP' THEN '2'
WHEN t_rapports_rubriques.width > 0 THEN t_rapports_rubriques.width::text
WHEN t_indicateurs.width > 0 THEN t_indicateurs.width::text
ELSE '80'
END
FROM econom.t_rapports_rubriques, econom.t_indicateurs
WHERE t_rapports_rubriques.rapport_id = i_rapport_id AND t_rapports_rubriques.indicateur_id = t_indicateurs.oid
UNION
SELECT 'IO' || numero_rubrique,
CASE WHEN t_rapports_rubriques.output_format <> '' THEN t_rapports_rubriques.output_format
WHEN t_indicateurs.output_format <> '' THEN t_indicateurs.output_format
ELSE '#' END
FROM econom.t_rapports_rubriques, econom.t_indicateurs
WHERE t_rapports_rubriques.rapport_id = i_rapport_id AND t_rapports_rubriques.indicateur_id = t_indicateurs.oid
UNION
SELECT 'IT' || numero_rubrique, t_indicateurs.table_name::text FROM econom.t_rapports_rubriques, econom.t_indicateurs
WHERE t_rapports_rubriques.rapport_id = i_rapport_id AND t_rapports_rubriques.indicateur_id = t_indicateurs.oid
LOOP
RETURN NEXT row;
END LOOP;
RETURN ;
END;

+ 540
- 0
db/schema2/functions/cti_reorganize_classification_atc.yaml View File

@ -0,0 +1,540 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
-- Standard ATC
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99XX99', code_original || '99XX99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 1 AND
code_original || '99XX99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99', code_original || '99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 1 AND
code_original || '99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99X', code_original || '99X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 1 AND
code_original || '99X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99XX', code_original || '99XX', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 1 AND
code_original || '99XX' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'XX99', code_original || 'XX99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 3 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,1) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'XX99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'XX', code_original || 'XX', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 3 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,1) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'XX' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X', code_original || 'X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 3 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,1) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X99', code_original || 'X99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 4 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,3) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X', code_original || 'X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 4 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,3) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99', code_original || '99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 5 AND substr(code,2,1) BETWEEN '0' AND '9' AND
substr(code,1,4) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || '99' NOT IN (SELECT code FROM eco.t_classification_atc);
-- Spécial préfixe à deux caractères
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99XX99', code_original || '99XX99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 2 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
code_original || '99XX99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99', code_original || '99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 2 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
code_original || '99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99X', code_original || '99X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 2 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
code_original || '99X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99XX', code_original || '99XX', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 2 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
code_original || '99XX' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'XX99', code_original || 'XX99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 4 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,2) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'XX99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'XX', code_original || 'XX', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 4 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,2) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'XX' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X', code_original || 'X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 4 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,2) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X99', code_original || 'X99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 5 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,4) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X99' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || 'X', code_original || 'X', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 5 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,4) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || 'X' NOT IN (SELECT code FROM eco.t_classification_atc);
INSERT INTO eco.t_classification_atc(code_original, code, texte, texte_court )
SELECT code_original || '99', code_original || '99', texte || ' (NON PRECISE)', texte_court || ' (NON PRECISE)'
FROM eco.t_classification_atc
WHERE oid <> 0 AND
length(code) = 6 AND substr(code,2,1) NOT BETWEEN '0' AND '9' AND
substr(code,1,5) IN (SELECT code FROM eco.t_classification_atc) AND
code_original || '99' NOT IN (SELECT code FROM eco.t_classification_atc);
-- compléments
UPDATE eco.t_classification_atc SET
texte = trim(replace(texte,'(NON PRECISE)','')),
texte_court = trim(replace(texte,'(NON PRECISE)',''))
WHERE code like 'Z%' AND texte like '%(NON PRECISE)%';
UPDATE eco.t_classification_atc SET
classification_atc_1_id = t_classification_atc_1.oid,
classification_atc_1_code = t_classification_atc_1.code,
classification_atc_1_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,1) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) BETWEEN '0' AND '9' AND
(
t_classification_atc.classification_atc_1_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_1_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_1_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_1_id = t_classification_atc_1.oid,
classification_atc_1_code = t_classification_atc_1.code,
classification_atc_1_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,2) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) NOT BETWEEN '0' AND '9' AND
(
t_classification_atc.classification_atc_1_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_1_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_1_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_1_id = t_classification_atc_1.oid,
classification_atc_1_code = t_classification_atc_1.code,
classification_atc_1_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
t_classification_atc_1.code = 'X' AND COALESCE(t_classification_atc.classification_atc_1_id,0) = 0 AND
(
t_classification_atc.classification_atc_1_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_1_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_1_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_1_code = t_classification_atc_1.code,
classification_atc_1_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.classification_atc_1_id = t_classification_atc_1.oid AND
(
t_classification_atc.classification_atc_1_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_1_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_2_id = t_classification_atc_1.oid,
classification_atc_2_code = t_classification_atc_1.code,
classification_atc_2_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,3) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) BETWEEN '0' AND '9' AND
length(t_classification_atc.code) >= 3 AND
(
t_classification_atc.classification_atc_2_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_2_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_2_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_2_id = t_classification_atc_1.oid,
classification_atc_2_code = t_classification_atc_1.code,
classification_atc_2_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,4) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) NOT BETWEEN '0' AND '9' AND
length(t_classification_atc.code) >= 4 AND
(
t_classification_atc.classification_atc_2_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_2_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_2_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_2_id = t_classification_atc_1.oid,
classification_atc_2_code = t_classification_atc_1.code,
classification_atc_2_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
t_classification_atc_1.code = t_classification_atc.classification_atc_1_code || '99' AND COALESCE(t_classification_atc.classification_atc_2_id,0) = 0 AND
(
t_classification_atc.classification_atc_2_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_2_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_2_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_2_code = t_classification_atc_1.code,
classification_atc_2_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.classification_atc_2_id = t_classification_atc_1.oid AND
(
t_classification_atc.classification_atc_2_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_2_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_3_id = t_classification_atc_1.oid,
classification_atc_3_code = t_classification_atc_1.code,
classification_atc_3_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,4) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) BETWEEN '0' AND '9' AND
length(t_classification_atc.code) >= 4 AND
(
t_classification_atc.classification_atc_3_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_3_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_3_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_3_id = t_classification_atc_1.oid,
classification_atc_3_code = t_classification_atc_1.code,
classification_atc_3_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,1,5) = t_classification_atc_1.code AND
substr(t_classification_atc.code,2,1) NOT BETWEEN '0' AND '9' AND
length(t_classification_atc.code) >= 5 AND
(
t_classification_atc.classification_atc_3_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_3_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_3_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_3_id = t_classification_atc_1.oid,
classification_atc_3_code = t_classification_atc_1.code,
classification_atc_3_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
t_classification_atc_1.code = t_classification_atc.classification_atc_2_code || 'X' AND COALESCE(t_classification_atc.classification_atc_3_id,0) = 0 AND
(
t_classification_atc.classification_atc_3_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_3_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_3_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_3_code = t_classification_atc_1.code,
classification_atc_3_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.classification_atc_3_id = t_classification_atc_1.oid AND
(
t_classification_atc.classification_atc_3_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_3_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_4_id = t_classification_atc_1.oid,
classification_atc_4_code = t_classification_atc_1.code,
classification_atc_4_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,2,1) BETWEEN '0' AND '9' AND
substr(t_classification_atc.code,1,5) = t_classification_atc_1.code AND
length(t_classification_atc.code) >= 5 AND
(
t_classification_atc.classification_atc_4_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_4_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_4_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_4_id = t_classification_atc_1.oid,
classification_atc_4_code = t_classification_atc_1.code,
classification_atc_4_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
substr(t_classification_atc.code,2,1) NOT BETWEEN '0' AND '9' AND
substr(t_classification_atc.code,1,6) = t_classification_atc_1.code AND
length(t_classification_atc.code) >= 6 AND
(
t_classification_atc.classification_atc_4_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_4_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_4_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_4_id = t_classification_atc_1.oid,
classification_atc_4_code = t_classification_atc_1.code,
classification_atc_4_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.oid <> 0 AND
t_classification_atc_1.code = t_classification_atc.classification_atc_3_code || 'X' AND COALESCE(t_classification_atc.classification_atc_4_id,0) = 0 AND
(
t_classification_atc.classification_atc_4_id IS DISTINCT FROM t_classification_atc_1.oid OR
t_classification_atc.classification_atc_4_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_4_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_4_code = t_classification_atc_1.code,
classification_atc_4_texte = t_classification_atc_1.texte
FROM eco.t_classification_atc t_classification_atc_1
WHERE t_classification_atc.classification_atc_4_id = t_classification_atc_1.oid AND
(
t_classification_atc.classification_atc_4_code IS DISTINCT FROM t_classification_atc_1.code OR
t_classification_atc.classification_atc_4_texte IS DISTINCT FROM t_classification_atc_1.texte
);
UPDATE eco.t_classification_atc SET
classification_atc_1_id = oid,
classification_atc_1_code = code,
classification_atc_1_texte = texte_court,
classification_atc_2_id = oid,
classification_atc_2_code = code,
classification_atc_2_texte = texte_court,
classification_atc_3_id = oid,
classification_atc_3_code = code,
classification_atc_3_texte = texte_court,
classification_atc_4_id = oid,
classification_atc_4_code = code,
classification_atc_4_texte = texte_court
WHERE
(
classification_atc_1_code = 'X' AND code NOT LIKE 'X%' OR
classification_atc_1_id = 0 OR
classification_atc_1_id IS NULL
)
AND
(classification_atc_1_id IS DISTINCT FROM oid OR
classification_atc_1_code IS DISTINCT FROM code OR
classification_atc_1_texte IS DISTINCT FROM texte_court OR
classification_atc_2_id IS DISTINCT FROM oid OR
classification_atc_2_code IS DISTINCT FROM code OR
classification_atc_2_texte IS DISTINCT FROM texte_court OR
classification_atc_3_id IS DISTINCT FROM oid OR
classification_atc_3_code IS DISTINCT FROM code OR
classification_atc_3_texte IS DISTINCT FROM texte_court OR
classification_atc_4_id IS DISTINCT FROM oid OR
classification_atc_4_code IS DISTINCT FROM code OR
classification_atc_4_texte IS DISTINCT FROM texte_court
)
;
-- Ventilation ATC/CLADIMED
UPDATE eco.t_classification_atc SET
est_atc = subview.est_atc,
est_cladimed = subview.est_cladimed
FROM
(SELECT substr(t_classification_atc.code,1,1) AS code, MAX(est_atc) AS est_atc, MAX(est_cladimed) AS est_cladimed
FROM eco.t_classification_atc
WHERE oid <> 0
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(t_classification_atc.code,2,6) = '99' AND
substr(t_classification_atc.code,1,1) = subview.code AND
(
t_classification_atc.est_atc IS DISTINCT FROM subview.est_atc OR
t_classification_atc.est_cladimed IS DISTINCT FROM subview.est_cladimed
)
;
UPDATE eco.t_classification_atc SET
est_atc = subview.est_atc,
est_cladimed = subview.est_cladimed
FROM
(SELECT substr(t_classification_atc.code,1,3) AS code, MAX(est_atc) AS est_atc, MAX(est_cladimed) AS est_cladimed
FROM eco.t_classification_atc
WHERE oid <> 0
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(t_classification_atc.code,4,4) = 'X' AND
substr(t_classification_atc.code,1,3) = subview.code AND
(
t_classification_atc.est_atc IS DISTINCT FROM subview.est_atc OR
t_classification_atc.est_cladimed IS DISTINCT FROM subview.est_cladimed
)
;
UPDATE eco.t_classification_atc SET
est_atc = subview.est_atc,
est_cladimed = subview.est_cladimed
FROM
(SELECT substr(t_classification_atc.code,1,4) AS code, MAX(est_atc) AS est_atc, MAX(est_cladimed) AS est_cladimed
FROM eco.t_classification_atc
WHERE oid <> 0
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(t_classification_atc.code,5,3) = 'X' AND
substr(t_classification_atc.code,1,4) = subview.code AND
(
t_classification_atc.est_atc IS DISTINCT FROM subview.est_atc OR
t_classification_atc.est_cladimed IS DISTINCT FROM subview.est_cladimed
)
;
UPDATE eco.t_classification_atc SET
est_atc = subview.est_atc,
est_cladimed = subview.est_cladimed
FROM
(SELECT substr(t_classification_atc.code,1,5) AS code, MAX(est_atc) AS est_atc, MAX(est_cladimed) AS est_cladimed
FROM eco.t_classification_atc
WHERE oid <> 0
GROUP BY 1
ORDER BY 1
) subview
WHERE substr(t_classification_atc.code,6,2) = 'XX' AND
substr(t_classification_atc.code,1,5) = subview.code AND
(
t_classification_atc.est_atc IS DISTINCT FROM subview.est_atc OR
t_classification_atc.est_cladimed IS DISTINCT FROM subview.est_cladimed
)
;
-- Atc dans articles selon ucd
UPDATE eco.t_articles SET
classification_atc_id = t_classification_atc.oid
FROM base.t_ucd
JOIN base.t_classification_atc t_classification_atc_base ON t_ucd.classification_atc_id = t_classification_atc_base.oid
JOIN eco.t_classification_atc ON t_classification_atc_base.code = t_classification_atc.code
WHERE t_articles.ucd_id = t_ucd.oid AND
t_articles.ucd_id <> 0 AND
t_classification_atc.oid <> 0 AND
(
t_articles.classification_atc_id IS DISTINCT FROM t_classification_atc.oid
)
;
-- UPDATE eco.t_articles SET
-- classification_atc_id = 0
-- WHERE ucd_id = 0 AND
-- lpp_id = 0 AND
-- classification_atc_id <> 0
-- ;
-- Les articles sans ATC sont affectés à Z99XX99 (Verrouillé en attendant alanyse : ELA)
UPDATE eco.t_articles SET
classification_atc_id = t_classification_atc.oid
FROM eco.t_classification_atc
WHERE 1<>1 AND
(ucd_id <> 0 OR lpp_id <> 0) AND
classification_atc_id = 0 AND
t_classification_atc.code = 'Z99XX99' AND
(
t_articles.classification_atc_id IS DISTINCT FROM t_classification_atc.oid
)
;
UPDATE eco.t_articles SET
classification_atc_id = 0
WHERE classification_atc_id IN (SELECT oid FROM eco.t_classification_atc WHERE code LIKE 'Z99%')
;
UPDATE eco.t_articles SET
classification_atc_code = t_classification_atc.code,
classification_atc_texte = t_classification_atc.texte_court,
classification_atc_section_id = t_classification_atc.section_id,
classification_atc_section_code = t_classification_atc.section_code,
classification_atc_section_texte = t_classification_atc.section_texte,
classification_atc_1_id = t_classification_atc.classification_atc_1_id,
classification_atc_1_code = t_classification_atc.classification_atc_1_code,
classification_atc_1_texte = t_classification_atc.classification_atc_1_texte,
classification_atc_2_id = t_classification_atc.classification_atc_2_id,
classification_atc_2_code = t_classification_atc.classification_atc_2_code,
classification_atc_2_texte = t_classification_atc.classification_atc_2_texte,
classification_atc_3_id = t_classification_atc.classification_atc_3_id,
classification_atc_3_code = t_classification_atc.classification_atc_3_code,
classification_atc_3_texte = t_classification_atc.classification_atc_3_texte,
classification_atc_4_id = t_classification_atc.classification_atc_4_id,
classification_atc_4_code = t_classification_atc.classification_atc_4_code,
classification_atc_4_texte = t_classification_atc.classification_atc_4_texte
FROM eco.t_classification_atc
WHERE t_articles.classification_atc_id = t_classification_atc.oid AND
(
t_articles.classification_atc_code IS DISTINCT FROM t_classification_atc.code OR
t_articles.classification_atc_texte IS DISTINCT FROM t_classification_atc.texte_court OR
t_articles.classification_atc_section_id IS DISTINCT FROM t_classification_atc.section_id OR
t_articles.classification_atc_section_code IS DISTINCT FROM t_classification_atc.section_code OR
t_articles.classification_atc_section_texte IS DISTINCT FROM t_classification_atc.section_texte OR
t_articles.classification_atc_1_id IS DISTINCT FROM t_classification_atc.classification_atc_1_id OR
t_articles.classification_atc_1_code IS DISTINCT FROM t_classification_atc.classification_atc_1_code OR
t_articles.classification_atc_1_texte IS DISTINCT FROM t_classification_atc.classification_atc_1_texte OR
t_articles.classification_atc_2_id IS DISTINCT FROM t_classification_atc.classification_atc_2_id OR
t_articles.classification_atc_2_code IS DISTINCT FROM t_classification_atc.classification_atc_2_code OR
t_articles.classification_atc_2_texte IS DISTINCT FROM t_classification_atc.classification_atc_2_texte OR
t_articles.classification_atc_3_id IS DISTINCT FROM t_classification_atc.classification_atc_3_id OR
t_articles.classification_atc_3_code IS DISTINCT FROM t_classification_atc.classification_atc_3_code OR
t_articles.classification_atc_3_texte IS DISTINCT FROM t_classification_atc.classification_atc_3_texte OR
t_articles.classification_atc_4_id IS DISTINCT FROM t_classification_atc.classification_atc_4_id OR
t_articles.classification_atc_4_code IS DISTINCT FROM t_classification_atc.classification_atc_4_code OR
t_articles.classification_atc_4_texte IS DISTINCT FROM t_classification_atc.classification_atc_4_texte
);
RETURN 'OK';
END;

+ 94
- 0
db/schema2/functions/cti_reorganize_fournisseur.yaml View File

@ -0,0 +1,94 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
_module_pmsimco TEXT;
BEGIN
-- Fusion des fournisseurs
UPDATE eco.p_commandes SET
fournisseur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE p_commandes.fournisseur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.p_commandes SET
fournisseur_distributeur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE p_commandes.fournisseur_distributeur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.p_lignes_commandes SET
fournisseur_distributeur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE p_lignes_commandes.fournisseur_distributeur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.p_mouvements_articles SET
fournisseur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE p_mouvements_articles.fournisseur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.p_facture SET
fournisseur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE p_facture.fournisseur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.t_profils SET
fournisseur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE t_profils.fournisseur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.t_articles
SET fournisseur_principal_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE t_articles.fournisseur_principal_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
UPDATE eco.t_article_fournisseur
SET fournisseur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE t_article_fournisseur.fournisseur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL AND
(t_article_fournisseur.article_id::text||'-'||fusionner_vers_fournisseur_id::text) NOT IN (SELECT (t_article_fournisseur2.article_id::text||'-'||t_article_fournisseur2.fournisseur_id::text) FROM eco.t_article_fournisseur t_article_fournisseur2)
;
UPDATE eco.t_article_fournisseur
SET fournisseur_distributeur_id = fusionner_vers_fournisseur_id
FROM eco.t_fournisseurs
WHERE t_article_fournisseur.fournisseur_distributeur_id = t_fournisseurs.oid AND
fusionner_vers_fournisseur_id <> 0 AND
fusionner_vers_fournisseur_id IS NOT NULL
;
DELETE
FROM eco.p_oids
WHERE code_table = 'fournisseurs' AND
oid IN (SELECT t_fournisseurs.oid FROM eco.t_fournisseurs WHERE fusionner_vers_fournisseur_id <> 0 AND fusionner_vers_fournisseur_id IS NOT NULL)
;
RETURN 'OK';
END;

+ 454
- 0
db/schema2/functions/cti_reorganize_indicateur_condition.yaml View File

@ -0,0 +1,454 @@
return: text
lang: plpgsql
src: |
DECLARE
sqlcmd text;
def_cursor refcursor;
_schemaname text;
result TEXT;
BEGIN
-- Types d'articles
DROP TABLE IF EXISTS w_indicateur_condition;
CREATE TEMP TABLE w_indicateur_condition AS
SELECT
'CTI_TYPEARTICLE#'::text || v_source.oid::text AS code, 'Type article'::text AS table_texte, 'TYA'::text AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'type_article_id'::text AS column_name,
v_source.oid AS value,
'TYPE_ARTICLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)]::text[] AS arbre_code,
ARRAY['Valeurs', v_source.texte]::text[] AS arbre_texte
FROM eco.v_types_articles_1 v_source
LEFT JOIN eco.t_types_articles t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Categorie Articles
INSERT INTO w_indicateur_condition
SELECT
'CTI_CATARTICLE#' || v_source.oid::text AS code, 'Catégorie article' AS table_texte, 'CAA' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'categorie_article_id'::text AS column_name,
v_source.oid AS value,
'CATEGORIE_ARTICLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_categories_articles_1 v_source
LEFT JOIN eco.t_categories_articles t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Famille Articles
INSERT INTO w_indicateur_condition
SELECT
'CTI_FAMARTICLE#' || v_source.oid::text AS code, 'Famille article' AS table_texte, 'FAA' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'famille_article_id'::text AS column_name,
v_source.oid AS value,
'FAMILLE_ARTICLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_familles_articles_1 v_source
LEFT JOIN eco.t_familles_articles t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Articles
INSERT INTO w_indicateur_condition
SELECT
'CTI_ARTICLE#' || v_source.oid::text AS code, 'Article' AS table_texte, 'ART' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'article_id'::text AS column_name,
v_source.oid AS value,
'ARTICLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_articles_1 v_source
LEFT JOIN eco.t_articles t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid NOT LIKE 'DT%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Fournisseurs
INSERT INTO w_indicateur_condition
SELECT
'CTI_FOURNISSEUR#' || v_source.oid::text AS code, 'Fournisseur' AS table_texte, 'FOU' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'fournisseur_id'::text AS column_name,
v_source.oid AS value,
'FOURNISSEUR='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_fournisseurs_1 v_source
LEFT JOIN eco.t_fournisseurs t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid NOT LIKE 'DT%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Types mouvement
INSERT INTO w_indicateur_condition
SELECT
'CTI_TYPEMOUVEMENT#' || v_source.oid::text AS code, 'Type mvt' AS table_texte, 'TYM' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'type_mouvement_id'::text AS column_name,
v_source.oid AS value,
'TYPE_MOUVEMENT='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_types_mouvements_1 v_source
LEFT JOIN eco.t_types_mouvements t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Types compte
INSERT INTO w_indicateur_condition
SELECT
'CTI_COMPTE#' || v_source.oid::text AS code, 'Compte' AS table_texte, 'CPT' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'compte_article_id'::text AS column_name,
v_source.oid AS value,
'COMPTE_ARTICLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_compte_1 v_source
LEFT JOIN eco.t_compte t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Unite de sortie
INSERT INTO w_indicateur_condition
SELECT
'CTI_UFMOUVEMENT#' || v_source.oid::text AS code, 'UF Mvt' AS table_texte, 'UFO' AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'unite_fonctionnelle_id'::text AS column_name,
v_source.oid AS value,
'UNITE_FONCTIONNELLE='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs', v_source.texte] AS arbre_texte
FROM eco.v_unites_fonctionnelles_1 v_source
LEFT JOIN eco.t_unites_fonctionnelles t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Unite de sortie
INSERT INTO w_indicateur_condition
SELECT
'CTI_POLE#'::text || v_source.oid::text AS code, 'Pole'::text AS table_texte, 'POL'::text AS table_code,
v_source.texte AS texte,
v_source.texte AS texte_court,
'pole_id'::text AS column_name,
v_source.oid AS value,
'POL='||v_source.oid AS view_select_rule,
ARRAY['9'::text, COALESCE('DT#'||t_source.code,v_source.texte)] AS arbre_code,
ARRAY['Valeurs'::text, v_source.texte] AS arbre_texte
FROM eco.v_pole_2 v_source
LEFT JOIN eco.t_pole t_source ON v_source.oid LIKE 'DT%' AND t_source.oid = substr(v_source.oid,3)
WHERE v_source.oid NOT LIKE 'LC%' AND
v_source.oid <> 'DT0' AND
v_source.oid NOT LIKE '-%'
;
-- Ne pas garder les listes vides
-- Ajout des valeurs à zéro
INSERT INTO w_indicateur_condition
SELECT *
FROM
(
SELECT
split_part(code,'#',1)||'#'||'DT0' AS code,
MAX(table_texte) AS table_texte,
MAX(table_code) AS table_code,
chr(127)||MAX(table_texte) || ' non renseigné(e)' AS texte,
'Non renseigné(e)'::text AS texte_court,
MAX(column_name) AS column_name,
'DT0'::text AS value,
MAX(split_part(view_select_rule,'=',1)||'=DT0') AS view_select_rule,
ARRAY['9','DT'||chr(127)||'**'] AS arbre_code,
ARRAY['Valeurs','Non renseigné(e)'] AS arbre_texte
FROM w_indicateur_condition
WHERE value LIKE 'DT%'
GROUP BY 1
) subview
WHERE code NOT IN (SELECT code FROM w_indicateur_condition)
;
-- Intitulés pour les classes et les listes
DROP TABLE IF EXISTS w_indicateur_condition_classes;
CREATE TEMP TABLE w_indicateur_condition_classes AS
SELECT
w_indicateur_condition.code,
t_classes.texte || '. ' || t_classes_sections.texte AS texte,
t_classes_sections.texte AS texte_court,
ARRAY[
'1-Classe'||to_char(t_classes.sequence,'FM00'),
'LS#'||table_code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'||t_classes_sections.code
]::text[] AS arbre_code,
ARRAY[
t_classes.texte,
t_classes_sections.texte
]::text[] AS arbre_texte,
w_indicateur_condition.value AS value
FROM w_indicateur_condition
JOIN eco.t_listes_tables ON t_listes_tables.code = table_code
JOIN eco.t_classes ON
t_classes.table_id = t_listes_tables.oid AND
to_char(t_classes.sequence,'FM00') = substr(w_indicateur_condition.value,3,2)
JOIN eco.t_classes_sections ON
t_classes_sections.classe_id = t_classes.oid AND
t_classes_sections.oid::text = substr(w_indicateur_condition.value,5)
WHERE w_indicateur_condition.code LIKE '%LS%'
;
INSERT INTO w_indicateur_condition_classes
SELECT
w_indicateur_condition.code,
t_classes.texte || '. Sections attribuées' AS texte,
'Sections attribuées' AS texte_court,
ARRAY[
'1-Classe'||to_char(t_classes.sequence,'FM00'),
'LC#'||table_code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END
]::text[] AS arbre_code,
ARRAY[
t_classes.texte,
'Sections attribuées'::text
]::text[] AS arbre_texte,
w_indicateur_condition.value AS value
FROM w_indicateur_condition
JOIN eco.t_listes_tables ON t_listes_tables.code = table_code
JOIN eco.t_classes ON
t_classes.table_id = t_listes_tables.oid AND
to_char(t_classes.sequence,'FM00') = substr(w_indicateur_condition.value,3,2) AND
t_classes.oid::text = substr(w_indicateur_condition.value,5)
WHERE w_indicateur_condition.code LIKE '%LC%'
;
INSERT INTO w_indicateur_condition_classes
SELECT
w_indicateur_condition.code,
chr(127)||t_classes.texte || '. ' || 'Section non attribuée' AS texte,
'Section non attribuée' AS texte_court,
ARRAY[
'1-Classe'||to_char(t_classes.sequence,'FM00'),
chr(127)||'LS#'||table_code||':'||CASE WHEN t_classes.code <> '' THEN t_classes.code ELSE '*CLS'||to_char(t_classes.sequence,'FM00') END||':'
] AS arbre_code,
ARRAY[
t_classes.texte,
'Section non attribuée'
] AS arbre_texte,
'LX'||t_classes.oid AS value
FROM w_indicateur_condition
JOIN eco.t_listes_tables ON t_listes_tables.code = table_code
JOIN eco.t_classes ON
t_classes.table_id = t_listes_tables.oid AND
to_char(t_classes.sequence,'FM00') = substr(split_part(w_indicateur_condition.code,'#',2),3,2)
WHERE w_indicateur_condition.code LIKE '%LS%' AND
substr(split_part(w_indicateur_condition.code,'#',2),5) = '0'
;
INSERT INTO w_indicateur_condition_classes
SELECT
w_indicateur_condition.code,
table_texte || ' ' || t_listes.texte AS texte,
t_listes.texte AS texte_court,
ARRAY[
CASE WHEN t_listes.is_cti = '1' THEN '2-Listes CTI' ELSE '3-Listes ETS' END,
'LI#'||table_code||':'||CASE WHEN t_listes.code <> '' THEN t_listes.code ELSE '*LST'||t_listes.oid END
] AS arbre_code,
ARRAY[
CASE WHEN t_listes.is_cti = '1' THEN '2-Listes CTI' ELSE '3-Listes ETS' END,
t_listes.texte
] AS arbre_texte,
w_indicateur_condition.value AS value
FROM w_indicateur_condition
JOIN eco.t_listes_tables ON t_listes_tables.code = table_code
JOIN eco.t_listes ON
t_listes.table_id = t_listes_tables.oid AND
t_listes.oid::text = substr(split_part(w_indicateur_condition.code,'#',2),3)
WHERE w_indicateur_condition.code LIKE '%#LI%'
;
INSERT INTO w_indicateur_condition_classes
SELECT
w_indicateur_condition.code,
table_texte || ' sauf ' || t_listes.texte AS texte,
'Sauf ' || t_listes.texte AS texte_court,
ARRAY[
CASE WHEN t_listes.is_cti = '1' THEN '2-Listes CTI' ELSE '3-Listes ETS' END,
'SL#'||table_code||':'||CASE WHEN t_listes.code <> '' THEN t_listes.code ELSE '*LST'||t_listes.oid END
] AS arbre_code,
ARRAY[
CASE WHEN t_listes.is_cti = '1' THEN '2-Listes CTI' ELSE '3-Listes ETS' END,
'Sauf ' || t_listes.texte
] AS arbre_texte,
w_indicateur_condition.value AS value
FROM w_indicateur_condition
JOIN eco.t_listes_tables ON t_listes_tables.code = table_code
JOIN eco.t_listes ON
t_listes.table_id = t_listes_tables.oid AND
t_listes.oid::text = substr(split_part(w_indicateur_condition.code,'#',2),3)
WHERE w_indicateur_condition.code LIKE '%#SL%'
;
UPDATE w_indicateur_condition SET
texte = w_indicateur_condition_classes.texte,
texte_court = w_indicateur_condition_classes.texte_court,
arbre_code = w_indicateur_condition_classes.arbre_code,
arbre_texte = w_indicateur_condition_classes.arbre_texte,
value = w_indicateur_condition_classes.value
FROM w_indicateur_condition_classes
WHERE w_indicateur_condition.code = w_indicateur_condition_classes.code
;
INSERT INTO eco.t_indicateur_condition(code, texte,texte_court,column_name,column_texte,value,view_select_rule, arbre_code, arbre_texte)
SELECT code, texte,texte_court,column_name,table_texte,value,view_select_rule, arbre_code, arbre_texte
FROM w_indicateur_condition
WHERE code NOT IN (SELECT code FROM eco.t_indicateur_condition WHERE code IS NOT NULL)
;
UPDATE eco.t_indicateur_condition SET
texte = w_indicateur_condition.texte,
texte_court = w_indicateur_condition.texte_court,
column_name = w_indicateur_condition.column_name,
column_texte = w_indicateur_condition.table_texte,
value = w_indicateur_condition.value,
view_select_rule = w_indicateur_condition.view_select_rule,
arbre_code = w_indicateur_condition.arbre_code,
arbre_texte = w_indicateur_condition.arbre_texte
FROM w_indicateur_condition
WHERE w_indicateur_condition.code = t_indicateur_condition.code AND
(
t_indicateur_condition.texte IS DISTINCT FROM w_indicateur_condition.texte OR
t_indicateur_condition.texte_court IS DISTINCT FROM w_indicateur_condition.texte_court OR
t_indicateur_condition.column_name IS DISTINCT FROM w_indicateur_condition.column_name OR
t_indicateur_condition.column_texte IS DISTINCT FROM w_indicateur_condition.table_texte OR
t_indicateur_condition.value IS DISTINCT FROM w_indicateur_condition.value OR
t_indicateur_condition.view_select_rule IS DISTINCT FROM w_indicateur_condition.view_select_rule OR
t_indicateur_condition.arbre_code IS DISTINCT FROM w_indicateur_condition.arbre_code OR
t_indicateur_condition.arbre_texte IS DISTINCT FROM w_indicateur_condition.arbre_texte
)
;
DELETE FROM eco.t_indicateur_condition
WHERE code LIKE 'CTI%' AND
code NOT IN (SELECT code FROM w_indicateur_condition)
;
UPDATE eco.t_indicateur_condition
SET external_code = split_part(code,'#',1)||'#'||CASE
WHEN arbre_code[1] LIKE '1-Classe%' AND arbre_code[2] NOT LIKE '%:%' THEN 'LS'::text||substr(arbre_code[1],9) || '-'::text
WHEN arbre_code[1] LIKE '1-Classe%' AND arbre_code[2] LIKE '%:%' THEN ''
ELSE '' END||CASE WHEN code NOT LIKE '%#DT0' THEN arbre_code[2] ELSE 'DT0' END
WHERE external_code IS DISTINCT FROM (split_part(code,'#',1)||'#'||CASE
WHEN arbre_code[1] LIKE '1-Classe%' AND arbre_code[2] NOT LIKE '%:%' THEN 'LS'::text||substr(arbre_code[1],9) || '-'::text
WHEN arbre_code[1] LIKE '1-Classe%' AND arbre_code[2] LIKE '%:%' THEN ''
ELSE '' END||CASE WHEN code NOT LIKE '%#DT0' THEN arbre_code[2] ELSE 'DT0' END)
;
UPDATE eco.t_indicateur_condition SET
column_texte = CASE column_name
WHEN 'type_article_id' THEN 'Type article'
WHEN 'unite_fonctionnelle_id' THEN 'UF'
WHEN 'compte_article_id' THEN 'Compte'
ELSE replace(Upper(substr(split_part(column_name,'_id',1),1,1)) || substr(split_part(column_name,'_id',1),2),'_',' ') END
WHERE
column_texte IS DISTINCT FROM
CASE column_name
WHEN 'type_article_id' THEN 'Type article'
WHEN 'unite_fonctionnelle_id' THEN 'UF'
WHEN 'compte_article_id' THEN 'Compte'
ELSE replace(Upper(substr(split_part(column_name,'_id',1),1,1)) || substr(split_part(column_name,'_id',1),2),'_',' ') END
;
DROP TABLE IF EXISTS w_indicateur_condition_table;
CREATE TEMP TABLE w_indicateur_condition_table AS
SELECT t_indicateur_condition.oid AS indicateur_condition_id,
''::text As table_name,
t_indicateur_condition.column_name || ' ' ||
CASE
WHEN t_indicateur_condition.value LIKE 'LS%' THEN 'IN'
WHEN t_indicateur_condition.value LIKE 'LI%' THEN 'IN'
WHEN t_indicateur_condition.value LIKE 'SL%' THEN 'NOT IN'
WHEN t_indicateur_condition.value LIKE 'DT%' THEN '='
ELSE '='
END || ' ' ||
CASE
WHEN t_indicateur_condition.value LIKE 'LS%' THEN
'(SELECT to_id FROM eco.t_classes_sections_elements WHERE section_id = ' || substr(value,5) || ')'
WHEN t_indicateur_condition.value LIKE 'LI%' THEN
'(SELECT to_id FROM eco.t_listes_contenu WHERE liste_id = ' || substr(value,3) || ')'
WHEN t_indicateur_condition.value LIKE 'SL%' THEN
'(SELECT to_id FROM eco.t_listes_contenu WHERE liste_id = ' || substr(value,3) || ')'
WHEN t_indicateur_condition.value LIKE 'DT%' THEN
substr(value,3)
ELSE substr(value,3)
END AS check_where
FROM eco.t_indicateur_condition
WHERE t_indicateur_condition.code LIKE 'CTI%'
;
INSERT INTO eco.t_indicateur_condition_table(indicateur_condition_id, table_name, check_where)
SELECT indicateur_condition_id, table_name, check_where
FROM w_indicateur_condition_table
WHERE (indicateur_condition_id::text || '-' || table_name) NOT IN
(SELECT indicateur_condition_id::text || '-' || table_name FROM eco.t_indicateur_condition_table WHERE table_name IS NOT NULL)
;
UPDATE eco.t_indicateur_condition_table SET
check_where = w_indicateur_condition_table.check_where
FROM w_indicateur_condition_table
WHERE t_indicateur_condition_table.indicateur_condition_id = w_indicateur_condition_table.indicateur_condition_id AND
t_indicateur_condition_table.table_name = w_indicateur_condition_table.table_name AND
(
t_indicateur_condition_table.check_where IS DISTINCT FROM w_indicateur_condition_table.check_where
)
;
DELETE FROM eco.t_indicateur_condition_table
USING eco.t_indicateur_condition
WHERE t_indicateur_condition.oid = t_indicateur_condition_table.indicateur_condition_id AND
t_indicateur_condition.code LIKE 'CTI%' AND
(indicateur_condition_id::text || '-' || table_name) NOT IN
(SELECT indicateur_condition_id::text || '-' || table_name FROM w_indicateur_condition_table WHERE table_name IS NOT NULL)
;
RETURN 'OK';
END;

+ 108
- 0
db/schema2/functions/cti_reorganize_pole.yaml View File

@ -0,0 +1,108 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
_module_pmsimco TEXT;
BEGIN
RAISE NOTICE '%' , 'Initialisation poles';
-- Contenu table
INSERT INTO base.t_pole (oid, code, texte, texte_court)
SELECT 0, '**', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM base.t_pole);
-- replication dans eco
TRUNCATE eco.t_pole;
INSERT INTO eco.t_pole (oid, code, texte, texte_court, section_id, section_code, section_texte)
SELECT oid, code, texte, texte_court, section_id, section_code, section_texte
FROM base.t_pole
;
-- Traduction des règles en oid
RAISE NOTICE '%' , 'Application des regles. Traduction en oid';
DROP TABLE IF EXISTS w_pole_rule;
CREATE TEMP TABLE w_pole_rule AS
SELECT
t_pole_rule.oid,
pole_id,
priorite,
CASE WHEN liste_finess <> '' THEN '1' ELSE '0' END AS a_liste_finess,
string_to_array(translate(liste_finess,'*,','% '),' ') AS liste_finess,
NULL::bigint[] AS liste_finess_id ,
CASE WHEN liste_site <> '' THEN '1' ELSE '0' END AS a_liste_site,
string_to_array(translate(liste_site,'*,','% '),' ') AS liste_site,
NULL::bigint[] AS liste_site_id ,
CASE WHEN liste_unite_fonctionnelle <> '' THEN '1' ELSE '0' END AS a_liste_unite_fonctionnelle,
string_to_array(translate(liste_unite_fonctionnelle,'*,','% '),' ') AS liste_unite_fonctionnelle,
NULL::bigint[] AS liste_unite_fonctionnelle_id
FROM eco.t_pole_rule
JOIN eco.t_pole ON pole_id = t_pole.oid
ORDER BY priorite, pole_id;
UPDATE w_pole_rule
SET liste_finess_id = (SELECT base.cti_group_array3(oid) FROM base.t_finess WHERE oid <> 0 AND code LIKE ANY (liste_finess))
WHERE a_liste_finess = '1';
UPDATE w_pole_rule
SET liste_site_id = (SELECT base.cti_group_array3(oid) FROM eco.t_sites WHERE oid <> 0 AND code LIKE ANY (liste_site))
WHERE a_liste_site = '1';
UPDATE w_pole_rule
SET liste_unite_fonctionnelle_id = (SELECT base.cti_group_array3(oid) FROM eco.t_unites_fonctionnelles WHERE oid <> 0 AND code LIKE ANY (liste_unite_fonctionnelle))
WHERE a_liste_unite_fonctionnelle = '1';
RAISE NOTICE '%' , 'Application des regles.';
DROP TABLE IF EXISTS w_mouvements_articles;
CREATE TEMP TABLE w_mouvements_articles AS
SELECT p_mouvements_articles.CTID AS from_CTID,
COALESCE(MIN(priorite),999999999) AS pole_priorite,
COALESCE((MIN(ARRAY[priorite,w_pole_rule.pole_id]))[2],0) AS pole_id
FROM eco.p_mouvements_articles
JOIN eco.t_sites ON t_sites.oid = site_id
JOIN w_pole_rule ON
(a_liste_finess = '0' OR finess_id = ANY (liste_finess_id)) AND
(a_liste_site = '0' OR site_id = ANY (liste_site_id)) AND
(a_liste_unite_fonctionnelle = '0' OR unite_fonctionnelle_id = ANY (liste_unite_fonctionnelle_id))
GROUP BY 1
ORDER BY 2,1
;
RAISE NOTICE '%' , 'Application des regles. Validation des poles';
UPDATE eco.p_mouvements_articles
SET pole_id = w_mouvements_articles.pole_id
FROM w_mouvements_articles
WHERE p_mouvements_articles.CTID = w_mouvements_articles.from_CTID AND
p_mouvements_articles.pole_id IS DISTINCT FROM w_mouvements_articles.pole_id
;
ANALYSE eco.p_mouvements_articles
;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'pole', pole_id
FROM eco.p_mouvements_articles
WHERE pole_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'pole')
GROUP BY 2;
RETURN 'OK';
END;

+ 27
- 0
db/schema2/functions/cti_reorganize_profils.yaml View File

@ -0,0 +1,27 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
PERFORM econom.cti_reorganize_profils_table('t_types_contrat', 'type_contrat');
PERFORM econom.cti_reorganize_profils_table('t_motifs_debut_contrat', 'motif_debut');
PERFORM econom.cti_reorganize_profils_table('t_motifs_fin_contrat', 'motif_fin');
PERFORM econom.cti_reorganize_profils_table('t_qualifications', 'qualification');
PERFORM econom.cti_reorganize_profils_table('t_services', 'service');
PERFORM econom.cti_reorganize_profils_table('t_specialites', 'specialite');
PERFORM econom.cti_reorganize_profils_table('t_types_temps_travail', 'type_temps_travail');
PERFORM econom.cti_reorganize_profils_table('t_categories_socio_professionnelle', 'categorie_socio_professionnelle');
PERFORM econom.cti_reorganize_profils_table('t_statuts', 'statut');
PERFORM econom.cti_reorganize_profils_table('t_codes_emploi', 'code_emploi');
PERFORM econom.cti_reorganize_profils_table('t_societes_interim', 'societe_interim');
PERFORM econom.cti_reorganize_profils_table('t_sections_analytiques_paie', 'section_analytique_paie');
PERFORM econom.cti_reorganize_profils_table('t_sections_analytiques', 'section_analytique');
PERFORM econom.cti_reorganize_profils_table('t_grilles', 'grille');
PERFORM econom.cti_reorganize_profils_table('t_grilles_groupes', 'grille_groupe');
PERFORM econom.cti_reorganize_profils_table('t_types_horaire', 'type_horaire');
PERFORM econom.cti_reorganize_profils_table('t_groupes_cotisant', 'groupe_cotisant');
RETURN 'OK';
END;

+ 43
- 0
db/schema2/functions/cti_reorganize_profils_table~tx,tx.yaml View File

@ -0,0 +1,43 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: tablename
p1:
type: text
name: field_prefix
src: |
DECLARE
w_tablename TEXT;
w_field_prefix TEXT;
result TEXT;
BEGIN
w_tablename = tablename;
IF w_tablename = '' THEN
w_tablename = 't_articles';
END IF;
w_field_prefix = field_prefix;
IF w_field_prefix = '' THEN
w_field_prefix = 'article';
END IF;
EXECUTE 'UPDATE econom.p_profils
SET ' || w_field_prefix || '_id = ' || w_tablename || '.oid
FROM econom.' || w_tablename || '
WHERE ' || w_tablename || '.code_original = p_profils.' || w_field_prefix || '_code_original
AND ' || w_field_prefix || '_id IS DISTINCT FROM ' || w_tablename || '.oid;';
EXECUTE 'UPDATE econom.p_profils SET ' || w_field_prefix || '_id = 0 WHERE ' || w_field_prefix || '_id IS NULL;';
EXECUTE 'UPDATE econom.p_profils
SET
' || w_field_prefix || '_code = ' || w_tablename || '.code,
' || w_field_prefix || '_texte = ' || w_tablename || '.texte_court
FROM econom.' || w_tablename || '
WHERE ' || w_tablename || '.oid = p_profils.' || w_field_prefix || '_id
AND (' || w_field_prefix || '_code IS DISTINCT FROM ' || w_tablename || '.code OR
' || w_field_prefix || '_texte IS DISTINCT FROM ' || w_tablename || '.texte_court);';
RETURN 'OK';
END;

+ 353
- 0
db/schema2/functions/cti_reorganize_sejour.yaml View File

@ -0,0 +1,353 @@
return: text
lang: plpgsql
src: |
DECLARE
_module_pmsimco TEXT;
_module_activite TEXT;
_module_pmsissr TEXT;
result TEXT;
BEGIN
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') THEN
_module_pmsimco = '1';
ELSE
_module_pmsimco = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'activite' AND tablename = 'p_sejours') THEN
_module_activite = '1';
ELSE
_module_activite = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsissr' AND tablename = 'p_ssr') THEN
_module_pmsissr = '1';
ELSE
_module_pmsissr = '0';
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'eco.p_sejours' AND
column_name = 'ssr_id') THEN
ALTER TABLE eco.p_sejours ADD COLUMN ssr_id bigint DEFAULT 0;
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'eco.p_sejours' AND
column_name = 'ssr_id') THEN
ALTER TABLE eco.p_sejours ADD COLUMN ssr_id bigint DEFAULT 0;
END IF;
TRUNCATE eco.p_sejours;
-- Creation association eco - sejour pmsi
IF _module_pmsimco = '1' THEN
BEGIN
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE 'pmsi.' || table_name = 'pmsi.p_rss_lpp' AND
column_name = 'from_eco') THEN
ALTER TABLE pmsi.p_rss_lpp ADD COLUMN from_eco bigint DEFAULT 0;
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE 'pmsi.' || table_name = 'pmsi.p_rss_ucd' AND
column_name = 'from_eco') THEN
ALTER TABLE pmsi.p_rss_ucd ADD COLUMN from_eco bigint DEFAULT 0;
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE 'pmsi.' || table_name = 'pmsi.p_rss_lpp' AND
column_name = 'montant_consommation') THEN
ALTER TABLE pmsi.p_rss_lpp ADD COLUMN montant_consommation numeric DEFAULT 0;
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE 'pmsi.' || table_name = 'pmsi.p_rss_ucd' AND
column_name = 'montant_consommation') THEN
ALTER TABLE pmsi.p_rss_ucd ADD COLUMN montant_consommation numeric DEFAULT 0;
END IF;
IF NOT EXISTS (
SELECT column_name
FROM information_schema.columns
WHERE 'pmsi.' || table_name = 'pmsi.p_rss_lpp' AND
column_name = 'type_lpp_id') THEN
ALTER TABLE pmsi.p_rss_lpp ADD COLUMN type_lpp_id bigint DEFAULT 0;
END IF;
DROP TABLE IF EXISTS w_rss;
CREATE TEMP TABLE w_rss
(
mouvement_id bigint,
rss_id bigint,
no_sejour_pmsi text,
no_rss text,
date_entree date,
date_sortie date
) ;
CREATE INDEX w_rss_i1
ON w_rss
USING btree
(mouvement_id);
CREATE INDEX w_rss_i2
ON w_rss
USING btree
(no_sejour_pmsi);
CREATE INDEX w_rss_i3
ON w_rss
USING btree
(rss_id);
-- sejour + date
INSERT INTO w_rss
SELECT p_mouvements_articles.oid AS mouvement_id,
p_rss.oid AS rss_id,
p_rss.no_sejour_administratif,
p_rss.no_rss,
p_rss.date_entree,
p_rss.date_sortie
FROM eco.p_mouvements_articles
JOIN pmsi.p_rss ON no_sejour_administratif = no_sejour
AND no_sejour_administratif != ''
AND p_mouvements_articles.date BETWEEN date_entree AND date_sortie
WHERE p_rss.etat = ''
;
-- sejour + patient + première date
INSERT INTO w_rss
SELECT p_mouvements_articles.oid AS mouvement_id,
sub.rss_id,
p_rss.no_sejour_administratif,
p_rss.no_rss,
p_rss.date_entree,
p_rss.date_sortie
FROM eco.p_mouvements_articles
LEFT JOIN w_rss ON oid = mouvement_id
JOIN (SELECT p_mouvements_articles.oid,
(MIN(ARRAY[abs(date - date_entree)::text,p_rss.oid::text]))[2]::bigint AS rss_id
FROM eco.p_mouvements_articles JOIN pmsi.p_rss ON no_sejour_administratif = no_sejour
AND p_rss.no_patient = p_mouvements_articles.no_patient
WHERE p_rss.etat = '' AND p_mouvements_articles.oid NOT IN (SELECT mouvement_id FROM w_rss)
GROUP BY 1) sub ON sub.oid = p_mouvements_articles.oid
JOIN pmsi.p_rss ON sub.rss_id = p_rss.oid
WHERE mouvement_id IS NULL
;
-- no patient avec dates correspondantes
INSERT INTO w_rss
SELECT p_mouvements_articles.oid AS mouvement_id,
sub.rss_id,
p_rss.no_sejour_administratif,
p_rss.no_rss,
p_rss.date_entree,
p_rss.date_sortie
FROM eco.p_mouvements_articles
JOIN (SELECT p_mouvements_articles.oid,
(MIN(ARRAY[abs(date - date_entree)::text,p_rss.oid::text]))[2]::bigint AS rss_id
FROM eco.p_mouvements_articles JOIN pmsi.p_rss ON date BETWEEN p_rss.date_entree AND p_rss.date_sortie
AND p_rss.no_patient = p_mouvements_articles.no_patient
WHERE p_rss.etat = '' AND p_mouvements_articles.oid NOT IN (SELECT mouvement_id FROM w_rss)
GROUP BY 1) sub ON sub.oid = p_mouvements_articles.oid
JOIN pmsi.p_rss ON sub.rss_id = p_rss.oid
;
INSERT INTO eco.p_sejours (
mouvement_id,
rss_id,
no_sejour,
no_rss
)
SELECT mouvement_id,
rss_id,
no_sejour_pmsi,
no_rss
FROM w_rss
;
UPDATE eco.p_sejours
SET no_patient = p_rss.no_patient
FROM pmsi.p_rss
WHERE p_sejours.rss_id = p_rss.oid AND
p_sejours.no_patient IS DISTINCT FROM p_rss.no_patient
;
UPDATE eco.p_mouvements_articles
SET medecin_reference_id = t_medecins.medecin_id
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_sejours.rss_id = p_rss.oid
JOIN pmsi.t_medecins ON medecin_rss_id = t_medecins.oid
WHERE mouvement_id = p_mouvements_articles.oid AND
p_mouvements_articles.medecin_reference_id IS DISTINCT FROM t_medecins.medecin_id
;
END;
END IF;
-- Mise e jour des associations provenant d'activité
IF _module_activite = '1' THEN
DROP TABLE IF EXISTS w_sejours;
CREATE TEMP TABLE w_sejours
(
mouvement_id bigint,
sejour_id bigint,
no_sejour_pmsi text,
date_entree date,
date_sortie date
) ;
CREATE INDEX w_sejours_i1
ON w_sejours
USING btree
(mouvement_id);
CREATE INDEX w_sejours_i2
ON w_sejours
USING btree
(no_sejour_pmsi);
CREATE INDEX w_sejours_i3
ON w_sejours
USING btree
(sejour_id);
-- sejour + patient + date
INSERT INTO w_sejours
SELECT p_mouvements_articles.oid AS mouvement_id,
p_sejours.oid AS sejour_id,
p_sejours.no_sejour,
p_sejours.date_entree,
p_sejours.date_sortie
FROM eco.p_mouvements_articles
JOIN activite.p_sejours ON p_sejours.no_sejour = p_mouvements_articles.no_sejour AND
p_mouvements_articles.date BETWEEN date_entree AND date_sortie
;
-- sejour + patient + première date
INSERT INTO w_sejours
SELECT p_mouvements_articles.oid AS mouvement_id,
sub.sejour_id,
p_sejours.no_sejour,
p_sejours.date_entree,
p_sejours.date_sortie
FROM eco.p_mouvements_articles
LEFT JOIN w_sejours ON oid = mouvement_id
JOIN (SELECT p_mouvements_articles.oid,
(MIN(ARRAY[abs(date - date_entree)::text,p_sejours.oid::text]))[2]::bigint AS sejour_id
FROM eco.p_mouvements_articles JOIN activite.p_sejours ON p_sejours.no_sejour = p_mouvements_articles.no_sejour
AND p_sejours.no_patient = p_mouvements_articles.no_patient
WHERE p_sejours.etat = '' AND p_mouvements_articles.oid NOT IN (SELECT mouvement_id FROM w_sejours)
GROUP BY 1) sub ON sub.oid = p_mouvements_articles.oid
JOIN activite.p_sejours ON sub.sejour_id = p_sejours.oid
WHERE mouvement_id IS NULL
;
-- no patient avec dates correspondantes
INSERT INTO w_sejours
SELECT p_mouvements_articles.oid AS mouvement_id,
sub.sejour_id,
p_sejours.no_sejour,
p_sejours.date_entree,
p_sejours.date_sortie
FROM eco.p_mouvements_articles
JOIN (SELECT p_mouvements_articles.oid,
(MIN(ARRAY[abs(date - date_entree)::text,p_sejours.oid::text]))[2]::bigint AS sejour_id
FROM eco.p_mouvements_articles JOIN activite.p_sejours ON date BETWEEN p_sejours.date_entree AND p_sejours.date_sortie
AND p_sejours.no_patient = p_mouvements_articles.no_patient
WHERE p_sejours.etat = '' AND p_mouvements_articles.oid NOT IN (SELECT mouvement_id FROM w_sejours)
GROUP BY 1) sub ON sub.oid = p_mouvements_articles.oid
JOIN activite.p_sejours ON sub.sejour_id = p_sejours.oid
;
UPDATE eco.p_sejours
SET
sejour_id = w_sejours.sejour_id
FROM
w_sejours
WHERE
p_sejours.mouvement_id = w_sejours.mouvement_id
;
INSERT INTO eco.p_sejours (mouvement_id, sejour_id, no_sejour)
SELECT mouvement_id, sejour_id , no_sejour_pmsi
FROM w_sejours
WHERE w_sejours.mouvement_id NOT IN (SELECT mouvement_id FROM eco.p_sejours)
;
UPDATE eco.p_sejours
SET
sejour_id = p_sejour_pmsi.sejour_id,
no_sejour = p_sejour_pmsi.no_sejour
FROM
activite.p_sejour_pmsi
WHERE
p_sejours.rss_id = p_sejour_pmsi.rss_id
AND p_sejours.sejour_id = 0
AND p_sejour_pmsi.sejour_id IS NOT NULL
;
UPDATE eco.p_sejours
SET
rss_id = p_sejour_pmsi.rss_id,
no_rss = p_sejour_pmsi.no_rss
FROM
activite.p_sejour_pmsi
WHERE
p_sejours.sejour_id = p_sejour_pmsi.sejour_id
AND p_sejours.rss_id = 0
AND p_sejour_pmsi.rss_id IS NOT NULL
;
UPDATE eco.p_sejours SET no_patient = sejours.no_patient
FROM
activite.p_sejours sejours
WHERE sejour_id = sejours.oid AND
p_sejours.no_patient IS DISTINCT FROM sejours.no_patient
;
UPDATE eco.p_mouvements_articles
SET medecin_reference_id = t_medecins_administratifs.medecin_id
FROM eco.p_sejours
JOIN activite.p_sejours p_sejours_activite ON p_sejours.sejour_id = p_sejours_activite.oid
JOIN activite.t_medecins_administratifs ON p_sejours_activite.medecin_sejour_id = t_medecins_administratifs.oid AND
t_medecins_administratifs.medecin_id <> 0
WHERE p_mouvements_articles.oid = p_sejours.mouvement_id
AND p_mouvements_articles.medecin_reference_id IS DISTINCT FROM t_medecins_administratifs.medecin_id
;
END IF;
-- Mise e jour des associations provenant du SSR
IF _module_pmsissr = '1' THEN
BEGIN
END;
END IF;
UPDATE eco.p_mouvements_articles
SET medecin_reference_id = 0
WHERE medecin_reference_id IS NULL
;
ANALYSE eco.p_sejours;
REINDEX TABLE eco.p_sejours;
RETURN 'OK';
END;

+ 654
- 0
db/schema2/functions/cti_reorganize_sejour_ucd_lpp.yaml View File

@ -0,0 +1,654 @@
return: text
lang: plpgsql
src: |
DECLARE
_module_pmsimco TEXT;
_module_activite TEXT;
_module_pmsissr TEXT;
result TEXT;
BEGIN
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') THEN
_module_pmsimco = '1';
ELSE
_module_pmsimco = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'activite' AND tablename = 'p_sejours') THEN
_module_activite = '1';
ELSE
_module_activite = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsissr' AND tablename = 'p_ssr') THEN
_module_pmsissr = '1';
ELSE
_module_pmsissr = '0';
END IF;
PERFORM base.cti_execute('INSERT INTO eco.t_divers(code,texte,valeur,description)
VALUES (''UPDATE_PMSI'',''Mise à jour des LPP et UCD dans le module Pmsi Mco à partir du module Gestion Economique'',''0'',''0: Non 1: Oui'')',1)
WHERE (SELECT count(*) FROM eco.t_divers WHERE code = 'UPDATE_PMSI') = 0
;
DROP TABLE IF EXISTS w_mvt_sejours;
CREATE TABLE w_mvt_sejours AS
SELECT
sejour_id
,rss_id
,COALESCE(t_lpp_c.code,t_ucd_c.code,'') AS code
,SUM(sortie_montant-entree_montant) AS sortie_montant
FROM eco.p_mouvements_articles
JOIN eco.p_sejours ON mouvement_id = p_mouvements_articles.oid
LEFT JOIN eco.t_lpp_c ON lpp_id = t_lpp_c.oid
LEFT JOIN eco.t_ucd_c ON ucd_id = t_ucd_c.oid
WHERE (lpp_id != 0 OR ucd_id != 0)
AND type_mouvement_id IN (SELECT to_id from eco.t_classes JOIN eco.t_classes_sections ON t_classes.oid = classe_id
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = '01')
GROUP BY 1,2,3
;
CREATE INDEX w_mvt_sejours_i1 on w_mvt_sejours USING btree (sejour_id);
CREATE INDEX w_mvt_sejours_i2 on w_mvt_sejours USING btree (rss_id);
CREATE INDEX w_mvt_sejours_i3 on w_mvt_sejours USING btree (code);
-- Mise à jour des ucd et lpp
DROP TABLE IF EXISTS w_fac;
CREATE TEMP TABLE w_fac AS
SELECT
0::bigint AS mco_rss_id,
0::bigint AS act_sejour_id,
''::text AS fac_code,
''::text AS fac_code_orig,
0 AS from_eco,
0 AS nombre,
0 AS montant_facture
;
DROP TABLE IF EXISTS w_ghs;
CREATE TEMP TABLE w_ghs AS
SELECT
0::bigint AS mco_rss_id,
0::bigint AS act_sejour_id,
0::int AS encours,
0::numeric AS ca_ghs_theorique
;
IF _module_pmsimco = '1' THEN
INSERT INTO w_fac
SELECT
rss_id AS mco_rss_id,
0::bigint AS act_sejour_id,
lpp_code AS fac_code,
'',
COALESCE(from_eco,0),
sum(nombre) AS nombre,
sum(montant_facture) AS montant_facture
FROM pmsi.v_rss_lpp_1
WHERE rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_fac
SELECT
rss_id AS mco_rss_id,
0::bigint AS act_sejour_id,
ucd_code AS fac_code,
'',
COALESCE(from_eco,0),
sum(nombre) AS nombre,
sum(montant_facture) AS montant_facture
FROM pmsi.v_rss_ucd_1
WHERE rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_ghs
SELECT
v_rss_1.rss_id AS mco_rss_id,
0,
0::bigint AS act_sejour_id,
SUM(ca_ghs_theorique) AS ca_ghs_theorique
FROM pmsi.v_rss_1
WHERE ca_ghs_theorique != 0
AND rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3
;
END IF;
IF _module_activite = '1' THEN
INSERT INTO w_fac
SELECT
p_sejour_pmsi.rss_id,
p_sejours.oid AS act_sejour_id,
CASE WHEN lpp_id != 0 THEN t_lpp.code
WHEN ucd_id != 0 THEN t_ucd.code
WHEN t_prestations.code IN ('PME','PII') THEN 'LPP' || (montant_facture+montant_encours)::text
ELSE 'UCD' || (montant_facture+montant_encours)::text END,
'',
0 AS from_eco,
sum(nb_prestation),
sum(montant_facture + montant_encours)
FROM
activite.v_factures_lignes_c_5
JOIN activite.p_sejours ON v_factures_lignes_c_5.no_sejour = p_sejours.no_sejour
JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_5.no_sejour = p_sejour_pmsi.no_sejour
LEFT JOIN base.t_ucd on ucd_id = t_ucd.oid
LEFT JOIN base.t_lpp on lpp_id = t_lpp.oid
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('PII','PME','LPP','PH8','PHX','UCD')
WHERE
p_sejours.oid = ANY(ARRAY(SELECT sejour_id FROM w_mvt_sejours)) AND
(p_sejour_pmsi.rss_id = 0 OR (p_sejour_pmsi.rss_id,COALESCE(t_ucd.code,t_lpp.code)) NOT IN (SELECT mco_rss_id, fac_code FROM w_fac))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_ghs
SELECT
p_sejour_pmsi.rss_id,
p_sejours.oid AS act_sejour_id,
CASE WHEN montant_encours != 0 THEN 1 ELSE 0 END as encours,
sum(montant_facture + montant_encours) as ca_ghs_theorique
FROM
activite.v_factures_lignes_c_1
JOIN activite.p_sejours ON v_factures_lignes_c_1.no_sejour = p_sejours.no_sejour
LEFT JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_1.no_sejour = p_sejour_pmsi.no_sejour
WHERE
prestation_code = 'GHS' AND
p_sejours.oid = ANY(ARRAY(SELECT sejour_id FROM w_mvt_sejours)) AND
(p_sejour_pmsi.rss_id = 0 OR p_sejour_pmsi.rss_id NOT IN (SELECT mco_rss_id FROM w_ghs))
GROUP BY 1,2,3
;
UPDATE w_ghs
SET encours = 1
FROM
activite.v_factures_lignes_c_1
JOIN activite.p_sejours ON v_factures_lignes_c_1.no_sejour = p_sejours.no_sejour
LEFT JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_1.no_sejour = p_sejour_pmsi.no_sejour
WHERE
prestation_code = 'GHS' AND
montant_encours != 0 AND
p_sejour_pmsi.rss_id = mco_rss_id
;
END IF;
CREATE INDEX w_fac_i1 on w_fac USING btree (mco_rss_id);
CREATE INDEX w_fac_i2 on w_fac USING btree (act_sejour_id);
CREATE INDEX w_ghs_i1 on w_ghs USING btree (mco_rss_id);
CREATE INDEX w_ghs_i2 on w_ghs USING btree (act_sejour_id);
ANALYSE w_fac;
ANALYSe w_ghs;
UPDATE w_fac
SET fac_code_orig = w_fac.fac_code
,fac_code = sub.code
FROM (
SELECT w_fac.*
,sub.*
FROM w_fac
JOIN (
SELECT sejour_id
,rss_id
,code
,sortie_montant
FROM w_mvt_sejours
LEFT JOIN w_fac ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
AND code = fac_code
WHERE
COALESCE(from_eco,1) != 0
) sub ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
LEFT JOIN w_mvt_sejours ON (
w_mvt_sejours.rss_id = mco_rss_id
AND w_mvt_sejours.rss_id != 0
OR w_mvt_sejours.sejour_id = act_sejour_id
AND w_mvt_sejours.sejour_id != 0
)
AND w_mvt_sejours.code = fac_code
WHERE w_mvt_sejours.code IS NULL
AND base.cti_division(abs(sub.sortie_montant - montant_facture), sub.sortie_montant) < 0.01
) sub
WHERE (
sub.mco_rss_id = w_fac.mco_rss_id
AND sub.act_sejour_id = w_fac.act_sejour_id
AND sub.fac_code = w_fac.fac_code
);
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.sejour_id = w_ghs.act_sejour_id AND w_ghs.act_sejour_id != 0
;
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.rss_id = w_ghs.mco_rss_id AND w_ghs.mco_rss_id != 0 AND
ca_ghs = 0
;
UPDATE w_fac
SET fac_code_orig = w_fac.fac_code
,fac_code = sub.code
FROM (
SELECT w_fac.*
,sub.*
FROM w_fac
JOIN (
SELECT sejour_id
,rss_id
,code
,sortie_montant
FROM w_mvt_sejours
LEFT JOIN w_fac ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
AND code = fac_code
WHERE
COALESCE(from_eco,1) != 0
) sub ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
LEFT JOIN w_mvt_sejours ON (
w_mvt_sejours.rss_id = mco_rss_id
AND w_mvt_sejours.rss_id != 0
OR w_mvt_sejours.sejour_id = act_sejour_id
AND w_mvt_sejours.sejour_id != 0
)
AND w_mvt_sejours.code = fac_code
WHERE w_mvt_sejours.code IS NULL
AND base.cti_division(abs(sub.sortie_montant - montant_facture), sub.sortie_montant) < 0.1
) sub
WHERE (
sub.mco_rss_id = w_fac.mco_rss_id
AND sub.act_sejour_id = w_fac.act_sejour_id
AND sub.fac_code = w_fac.fac_code
);
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.sejour_id = w_ghs.act_sejour_id AND w_ghs.act_sejour_id != 0
;
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.rss_id = w_ghs.mco_rss_id AND w_ghs.mco_rss_id != 0 AND ca_ghs = 0
;
DROP TABLE IF EXISTS w_fac_sej;
CREATE TEMP TABLE w_fac_sej AS
SELECT w_fac.*, mouvement_id
FROM w_fac JOIN eco.p_sejours ON (
rss_id != 0 AND mco_rss_id != 0 AND rss_id = mco_rss_id)
;
INSERT INTO w_fac_sej
SELECT w_fac.*, p_sejours.mouvement_id
FROM w_fac JOIN eco.p_sejours ON (
sejour_id != 0
AND act_sejour_id != 0
AND sejour_id = act_sejour_id)
LEFT JOIN (SELECT DISTINCT mouvement_id FROM w_fac_sej) sub ON sub.mouvement_id = p_sejours.mouvement_id
WHERE sub.mouvement_id IS NULL
;
UPDATE eco.p_mouvements_articles
SET quantite_ligne_facture = nombre,
montant_ligne_facture = montant_facture
FROM
w_fac_sej
LEFT JOIN eco.t_lpp_c ON w_fac_sej.fac_code = t_lpp_c.code
LEFT JOIN eco.t_ucd_c ON w_fac_sej.fac_code = t_ucd_c.code
WHERE
mouvement_id = p_mouvements_articles.oid
AND (lpp_id = t_lpp_c.oid
OR ucd_id = t_ucd_c.oid)
;
IF _module_pmsimco = '1' AND (SELECT count(*) FROM eco.t_divers WHERE code = 'UPDATE_PMSI' AND valeur = '1') = 1 THEN
BEGIN
-- maj et ajout des ucd
DELETE FROM pmsi.p_rss_ucd
WHERE from_eco = 1
;
UPDATE pmsi.p_rss_ucd
SET
montant_consommation = sortie_montant
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_ucd_c ON t_ucd_c.oid = p_mouvements_articles.ucd_id AND p_mouvements_articles.ucd_id != 0
JOIN pmsi.t_ucd ON t_ucd.code = t_ucd_c.code
JOIN pmsi.t_ucd_tarifs ON t_ucd.oid = t_ucd_tarifs.ucd_id AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
WHERE p_rss_ucd.rss_id = p_rss.oid AND t_ucd.oid = p_rss_ucd.ucd_id AND sortie_quantite = nombre
;
INSERT INTO pmsi.p_rss_ucd (
finess,
no_rss,
date_ucd,
ucd_id,
nombre,
prix_unitaire_achat,
montant_consommation,
rss_id,
type_ucd_id,
from_eco)
SELECT
p_rss.finess,
p_rss.no_rss,
date,
t_ucd.oid,
sortie_quantite,
COALESCE(prix_unitaire_ttc,prix_unitaire),
sortie_montant,
p_rss.oid,
CASE WHEN t_ucd_tarifs.ucd_id IS NULL OR top_taa = 0 THEN 0 ELSE 1 END ,
1
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_ucd_c ON t_ucd_c.oid = p_mouvements_articles.ucd_id AND p_mouvements_articles.ucd_id != 0
JOIN pmsi.t_ucd ON t_ucd.code = t_ucd_c.code
LEFT JOIN pmsi.t_ucd_tarifs ON t_ucd.oid = t_ucd_tarifs.ucd_id AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
LEFT JOIN pmsi.p_rss_ucd ON p_rss_ucd.rss_id = p_rss.oid AND t_ucd.oid = p_rss_ucd.ucd_id
WHERE p_rss_ucd.ucd_id IS NULL AND type_mouvement_id IN
(SELECT to_id FROM eco.t_classes JOIN eco.t_classes_sections on classe_id = t_classes.oid
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = '01')
;
-- maj et ajout des lpp
DELETE FROM pmsi.p_rss_lpp
WHERE from_eco = 1
;
UPDATE pmsi.p_rss_lpp
SET
montant_consommation = sortie_montant
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_lpp_c ON t_lpp_c.oid = p_mouvements_articles.lpp_id AND p_mouvements_articles.lpp_id != 0
JOIN pmsi.t_lpp ON t_lpp.code = t_lpp_c.code
JOIN pmsi.t_lpp_tarifs ON t_lpp.oid = t_lpp_tarifs.lpp_id AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
WHERE p_rss_lpp.rss_id = p_rss.oid AND t_lpp.oid = p_rss_lpp.lpp_id AND sortie_quantite = nombre
;
INSERT INTO pmsi.p_rss_lpp (
finess,
no_rss,
date_lpp,
lpp_id,
nombre,
prix_unitaire,
montant_consommation,
rss_id,
type_lpp_id,
from_eco)
SELECT
p_rss.finess,
p_rss.no_rss,
date,
t_lpp.oid,
sortie_quantite,
COALESCE(t_lpp_tarifs.prix_unitaire, p_mouvements_articles.prix_unitaire),
sortie_montant,
p_rss.oid,
CASE WHEN annexe = 1 OR (annexe = 2 AND type_etablissement = 1) THEN 1 ELSE 0 END ,
1
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN base.t_finess ON finess = t_finess.code
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_lpp_c ON t_lpp_c.oid = p_mouvements_articles.lpp_id AND p_mouvements_articles.lpp_id != 0
JOIN pmsi.t_lpp ON t_lpp.code = t_lpp_c.code
LEFT JOIN base.t_lpp_sus ON t_lpp.oid = t_lpp_sus.lpp_id AND date BETWEEN t_lpp_sus.date_debut AND t_lpp_sus.date_fin
LEFT JOIN pmsi.t_lpp_tarifs ON t_lpp.oid = t_lpp_tarifs.lpp_id AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
LEFT JOIN pmsi.p_rss_lpp ON p_rss_lpp.rss_id = p_rss.oid AND t_lpp.oid = p_rss_lpp.lpp_id
WHERE p_rss_lpp.lpp_id IS NULL AND type_mouvement_id IN
(SELECT to_id FROM eco.t_classes JOIN eco.t_classes_sections on classe_id = t_classes.oid
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = 'CO')
;
END;
END IF;
-- Mise à jour des prestation PII et PH8
IF _module_activite = '1' AND _module_pmsimco = '1' AND false THEN
BEGIN
-- maj et ajout des lpp
DELETE FROM activite.p_factures_lignes_non_facturees_c
WHERE from_eco = 1
;
DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c;
CREATE TEMP TABLE w_factures_lignes_non_facturees_c AS
SELECT
finess,
sejour_id,
sejour_act.no_sejour,
ghs_id,
date,
lieu_sortie_id,
t_prestations.code,
t_lpp_tarifs.prix_unitaire,
t_lpp_tarifs.prix_unitaire * sortie_quantite AS montant_non_facture,
sortie_quantite,
sejour_act.date_entree,
sejour_act.date_sortie
FROM eco.p_sejours
JOIN eco.p_mouvements_articles ON mouvement_id = p_mouvements_articles.oid
JOIN activite.p_sejours sejour_act ON p_sejours.sejour_id = sejour_act.oid
LEFT JOIN base.t_finess ON sejour_act.finess = t_finess.code
JOIN eco.t_lpp_c on lpp_id = t_lpp_c.oid
JOIN pmsi.t_lpp on t_lpp_c.code = t_lpp.code
JOIN pmsi.t_prestations on t_lpp.prestation_defaut_id = t_prestations.oid
JOIN base.t_lpp_sus on t_lpp_sus.lpp_id = t_lpp.oid AND date BETWEEN t_lpp_sus.date_debut AND t_lpp_sus.date_fin
JOIN pmsi.t_lpp_tarifs on t_lpp_tarifs.lpp_id = t_lpp.oid AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
WHERE p_mouvements_articles.lpp_id != 0
AND (annexe = 1 OR annexe = 2 AND COALESCE(type_etablissement,'1') = '1')
AND type_sejour = '1'
;
DELETE FROM w_factures_lignes_non_facturees_c
USING activite.p_factures
JOIN activite.p_factures_lignes_c ON facture_id = p_factures.oid
JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid
WHERE
p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND
(t_prestations.code = w_factures_lignes_non_facturees_c.code OR code_cloture = 'H')
;
INSERT INTO activite.p_factures (
sejour_id,
finess,
no_sejour,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
ghs_id,
date_debut,
date_fin,
montant_encours_c)
SELECT
w_factures_lignes_non_facturees_c.sejour_id,
w_factures_lignes_non_facturees_c.finess,
w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E',
'0',
'20991231'::date,
w_factures_lignes_non_facturees_c.ghs_id,
date_entree AS date_debut,
date_sortie AS date_fin,
sum(prix_unitaire * sortie_quantite)
FROM w_factures_lignes_non_facturees_c
LEFT JOIN activite.p_factures ON p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND montant_encours_c != 0
WHERE p_factures.no_facture IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11;
INSERT INTO activite.p_factures_lignes_non_facturees_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id,
from_eco)
SELECT
no_facture,
date,
date,
sortie_quantite,
1,
0,
t_prestations.oid,
prix_unitaire,
lieu_sortie_id,
1
FROM w_factures_lignes_non_facturees_c
JOIN activite.p_factures ON w_factures_lignes_non_facturees_c.sejour_id = p_factures.sejour_id
AND montant_encours_c != 0
LEFT JOIN activite.t_prestations ON w_factures_lignes_non_facturees_c.code = t_prestations.code
--LEFT JOIN activite.t_rubriques_facturation ON w_factures_lignes_non_facturees_c.code = t_prestations.code
;
-- maj et ajout des ucd
DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c;
CREATE TEMP TABLE w_factures_lignes_non_facturees_c AS
SELECT
finess,
sejour_id,
sejour_act.no_sejour,
ghs_id,
date,
lieu_sortie_id,
t_prestations.code,
t_ucd_tarifs.prix_unitaire_ttc,
sortie_montant,
sortie_quantite,
sejour_act.date_entree,
sejour_act.date_sortie
FROM eco.p_sejours
JOIN eco.p_mouvements_articles ON mouvement_id = p_mouvements_articles.oid
JOIN activite.p_sejours sejour_act ON p_sejours.sejour_id = sejour_act.oid
LEFT JOIN base.t_finess ON sejour_act.finess = t_finess.code
JOIN eco.t_ucd_c on ucd_id = t_ucd_c.oid
JOIN pmsi.t_ucd on t_ucd_c.code = t_ucd.code
JOIN pmsi.t_prestations on t_ucd.prestation_defaut_id = t_prestations.oid
JOIN pmsi.t_ucd_tarifs on t_ucd_tarifs.ucd_id = t_ucd.oid AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
WHERE p_mouvements_articles.ucd_id != 0
AND type_sejour = '1'
;
DELETE FROM w_factures_lignes_non_facturees_c
USING activite.p_factures
JOIN activite.p_factures_lignes_c ON facture_id = p_factures.oid
JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid
WHERE
p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND
(t_prestations.code = w_factures_lignes_non_facturees_c.code OR code_cloture = 'H')
;
INSERT INTO activite.p_factures (
sejour_id,
finess,
no_sejour,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
ghs_id,
date_debut,
date_fin,
montant_encours_c)
SELECT
w_factures_lignes_non_facturees_c.sejour_id,
w_factures_lignes_non_facturees_c.finess,
w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E',
'0',
'20991231'::date,
w_factures_lignes_non_facturees_c.ghs_id,
date_entree AS date_debut,
date_sortie AS date_fin,
sum(prix_unitaire_ttc * sortie_quantite)
FROM w_factures_lignes_non_facturees_c
LEFT JOIN activite.p_factures ON p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND montant_encours_c != 0
WHERE p_factures.no_facture IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11;
INSERT INTO activite.p_factures_lignes_non_facturees_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id)
SELECT
no_facture,
date,
date,
prix_unitaire_ttc * sortie_quantite,
1,
0,
t_prestations.oid,
prix_unitaire_ttc,
lieu_sortie_id
FROM w_factures_lignes_non_facturees_c
JOIN activite.p_factures ON w_factures_lignes_non_facturees_c.sejour_id = p_factures.sejour_id
AND montant_encours_c != 0
LEFT JOIN activite.t_prestations ON w_factures_lignes_non_facturees_c.code = t_prestations.code
--LEFT JOIN activite.t_rubriques_facturation ON w_factures_lignes_non_facturees_c.code = t_prestations.code
;
END;
END IF;
REINDEX TABLE eco.p_sejours;
RETURN 'OK';
END;

+ 233
- 0
db/schema2/functions/cti_reorganize_type_article_cti.yaml View File

@ -0,0 +1,233 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
_module_pmsimco TEXT;
BEGIN
RAISE NOTICE '%' , 'Initialisation Selon compte';
DROP TABLE IF EXISTS w_compte_article;
CREATE TEMP TABLE w_compte_article AS
SELECT
t_compte.code AS compte_code,
t_compte.texte AS compte_texte,
CASE
WHEN t_compte.texte LIKE '%DMI%' THEN 'DMI'
WHEN t_compte.texte ILIKE '%prothese%' THEN 'DMI'
WHEN t_compte.texte ILIKE '%prothèse%' THEN 'DMI'
WHEN t_compte.texte ILIKE '%dispo%' AND t_compte.texte ILIKE '%implant%' THEN 'DMI'
WHEN t_compte.texte LIKE '%DM %' THEN 'DM'
WHEN t_compte.texte LIKE '% DM%' THEN 'DM'
WHEN t_compte.texte ILIKE '%medicament%' THEN 'MED'
WHEN t_compte.texte ILIKE '%médicament%' THEN 'MED'
WHEN t_compte.texte ILIKE '%pharmacie%' THEN 'MED'
WHEN t_compte.texte ILIKE '%produit%' AND t_compte.texte ILIKE '%entretien%' THEN 'ECO'
WHEN t_compte.texte ILIKE '%sang%' THEN 'MED'
WHEN 1<>1 THEN ''
ELSE '' END AS type_article_cti_code
FROM eco.t_articles
JOIN eco.t_compte ON compte_id = t_compte.oid
WHERE compte_id <> 0 AND
(
t_compte.code LIKE '467%' OR
t_compte.code LIKE '60%'
) AND
(
t_articles.oid IN (SELECT article_id FROM eco.p_lignes_commandes) OR
t_articles.oid IN (SELECT article_id FROM eco.p_mouvements_articles)
)
GROUP BY 1,2,3
ORDER BY 1
;
DROP TABLE IF EXISTS w_type_article_cti_rule;
CREATE TEMP TABLE w_type_article_cti_rule AS
SELECT type_article_cti_code,
'Défaut CTI selon compte ' || t_type_article_cti.texte AS type_article_cti_rule_texte,
t_type_article_cti.oid AS type_article_cti_id,
CASE type_article_cti_code
WHEN 'DMI' THEN 70001
WHEN 'DM' THEN 70002
WHEN 'MED' THEN 70003
WHEN 'ECO' THEN 70004
END AS priorite,
array_to_string(base.cti_array_accum(compte_code),',') AS liste_compte
FROM w_compte_article
JOIN eco.t_type_article_cti ON t_type_article_cti.code = type_article_cti_code
WHERE type_article_cti_code <> ''
GROUP BY 1,2,3,4
;
INSERT INTO w_type_article_cti_rule
SELECT
t_type_article_cti.code,
CASE WHEN t_type_article_cti.code <> 'ZZZ' THEN 'Défaut CTI selon racine de compte ' || t_type_article_cti.texte ELSE 'Défaut CTI Autres' END AS type_article_cti_rule_texte,
t_type_article_cti.oid,
CASE t_type_article_cti.code
WHEN 'ECO' THEN 70009
WHEN 'ZZZ' THEN 99999
END AS priorite,
CASE t_type_article_cti.code
WHEN 'ECO' THEN '2%,61%,62%'
WHEN 'ZZZ' THEN ''
END AS liste_compte
FROM eco.t_type_article_cti
WHERE code IN ('ECO','ZZZ')
;
INSERT INTO eco.t_type_article_cti_rule(
texte,
priorite,
type_article_cti_id,
liste_compte
)
SELECT
type_article_cti_rule_texte AS texte,
priorite,
type_article_cti_id,
liste_compte
FROM w_type_article_cti_rule
WHERE w_type_article_cti_rule.priorite NOT IN (SELECT t_type_article_cti_rule.priorite FROM eco.t_type_article_cti_rule)
;
UPDATE eco.t_type_article_cti_rule SET
texte = type_article_cti_rule_texte,
type_article_cti_id = w_type_article_cti_rule.type_article_cti_id,
liste_compte = w_type_article_cti_rule.liste_compte
FROM w_type_article_cti_rule
WHERE t_type_article_cti_rule.priorite = w_type_article_cti_rule.priorite AND
(
t_type_article_cti_rule.texte IS DISTINCT FROM type_article_cti_rule_texte OR
t_type_article_cti_rule.type_article_cti_id IS DISTINCT FROM w_type_article_cti_rule.type_article_cti_id OR
t_type_article_cti_rule.liste_compte IS DISTINCT FROM w_type_article_cti_rule.liste_compte
)
;
-- Traduction des règles en oid
RAISE NOTICE '%' , 'Application des regles. Traduction en oid';
DROP TABLE IF EXISTS w_type_article_cti_rule;
CREATE TEMP TABLE w_type_article_cti_rule AS
SELECT
t_type_article_cti_rule.oid,
type_article_cti_id,
priorite,
CASE WHEN liste_article <> '' THEN '1' ELSE '0' END AS a_liste_article,
string_to_array(translate(liste_article,'*,','% '),' ') AS liste_article,
NULL::bigint[] AS liste_article_id ,
CASE WHEN liste_type_article <> '' THEN '1' ELSE '0' END AS a_liste_type_article,
string_to_array(translate(liste_type_article,'*,','% '),' ') AS liste_type_article,
NULL::bigint[] AS liste_type_article_id ,
CASE WHEN liste_famille <> '' THEN '1' ELSE '0' END AS a_liste_famille,
string_to_array(translate(liste_famille,'*,','% '),' ') AS liste_famille,
NULL::bigint[] AS liste_famille_id,
CASE WHEN liste_sous_famille <> '' THEN '1' ELSE '0' END AS a_liste_sous_famille,
string_to_array(translate(liste_sous_famille,'*,','% '),' ') AS liste_sous_famille,
NULL::bigint[] AS liste_sous_famille_id,
CASE WHEN liste_categorie <> '' THEN '1' ELSE '0' END AS a_liste_categorie,
string_to_array(translate(liste_categorie,'*,','% '),' ') AS liste_categorie,
NULL::bigint[] AS liste_categorie_id,
CASE WHEN liste_sous_categorie <> '' THEN '1' ELSE '0' END AS a_liste_sous_categorie,
string_to_array(translate(liste_sous_categorie,'*,','% '),' ') AS liste_sous_categorie,
NULL::bigint[] AS liste_sous_categorie_id,
CASE WHEN liste_compte <> '' THEN '1' ELSE '0' END AS a_liste_compte,
string_to_array(translate(liste_compte,'*,','% '),' ') AS liste_compte,
NULL::bigint[] AS liste_compte_id
FROM eco.t_type_article_cti_rule
JOIN eco.t_type_article_cti ON type_article_cti_id = t_type_article_cti.oid
ORDER BY priorite, type_article_cti_id;
UPDATE w_type_article_cti_rule
SET liste_article_id = (SELECT base.cti_group_array3(oid) FROM eco.t_articles WHERE oid <> 0 AND code LIKE ANY (liste_article))
WHERE a_liste_article = '1';
UPDATE w_type_article_cti_rule
SET liste_type_article_id = (SELECT base.cti_group_array3(oid) FROM eco.t_types_articles WHERE oid <> 0 AND code LIKE ANY (liste_type_article))
WHERE a_liste_type_article = '1';
UPDATE w_type_article_cti_rule
SET liste_famille_id = (SELECT base.cti_group_array3(oid) FROM eco.t_familles_articles WHERE oid <> 0 AND code LIKE ANY (liste_famille))
WHERE a_liste_famille = '1';
UPDATE w_type_article_cti_rule
SET liste_sous_famille_id = (SELECT base.cti_group_array3(oid) FROM eco.t_sous_familles_articles WHERE oid <> 0 AND code LIKE ANY (liste_sous_famille))
WHERE a_liste_sous_famille = '1';
UPDATE w_type_article_cti_rule
SET liste_categorie_id = (SELECT base.cti_group_array3(oid) FROM eco.t_categories_articles WHERE oid <> 0 AND code LIKE ANY (liste_categorie))
WHERE a_liste_categorie = '1';
UPDATE w_type_article_cti_rule
SET liste_sous_categorie_id = (SELECT base.cti_group_array3(oid) FROM eco.t_sous_categories_articles WHERE oid <> 0 AND code LIKE ANY (liste_sous_categorie))
WHERE a_liste_sous_categorie = '1';
UPDATE w_type_article_cti_rule
SET liste_compte_id = (SELECT base.cti_group_array3(oid) FROM eco.t_compte WHERE oid <> 0 AND code LIKE ANY (liste_compte))
WHERE a_liste_compte = '1';
RAISE NOTICE '%' , 'Application des regles.';
DROP TABLE IF EXISTS w_articles;
CREATE TEMP TABLE w_articles AS
SELECT t_articles.oid,
COALESCE(MIN(priorite),999999999) AS type_article_cti_priorite,
COALESCE((MIN(ARRAY[priorite,w_type_article_cti_rule.type_article_cti_id]))[2],0) AS type_article_cti_id
FROM eco.t_articles
JOIN w_type_article_cti_rule ON
(a_liste_article = '0' OR t_articles.oid = ANY (liste_article_id)) AND
(a_liste_type_article = '0' OR type_id = ANY (liste_type_article_id)) AND
(a_liste_famille = '0' OR famille_id = ANY (liste_famille_id)) AND
(a_liste_sous_famille = '0' OR sous_famille_id = ANY (liste_sous_famille_id)) AND
(a_liste_categorie = '0' OR categorie_id = ANY (liste_categorie_id)) AND
(a_liste_sous_categorie = '0' OR sous_categorie_id = ANY (liste_sous_categorie_id)) AND
(a_liste_compte = '0' OR compte_id = ANY (liste_compte_id))
GROUP BY 1
ORDER BY 2,1
;
ANALYSE w_articles
;
RAISE NOTICE '%' , 'Application des regles. Validation des type_article_ctis';
UPDATE eco.t_articles
SET type_article_cti_id = w_articles.type_article_cti_id
FROM w_articles
WHERE t_articles.oid = w_articles.oid AND
t_articles.type_article_cti_id IS DISTINCT FROM w_articles.type_article_cti_id
;
ANALYSE eco.t_articles
;
INSERT INTO eco.p_oids (code_table, oid)
SELECT 'type_article_cti', type_article_cti_id
FROM eco.t_articles
WHERE type_article_cti_id NOT IN (SELECT oid FROM eco.p_oids WHERE code_table = 'type_article_cti')
GROUP BY 2;
RETURN 'OK';
END;

+ 92
- 0
db/schema2/functions/cti_reorganize_ucd_lpp_c.yaml View File

@ -0,0 +1,92 @@
return: text
lang: plpgsql
src: |
DECLARE
result TEXT;
BEGIN
UPDATE base.t_ucd SET texte_court = texte WHERE COALESCE(texte_court,'') = '';
INSERT INTO base.t_ucd(oid, code, texte, texte_court)
SELECT 0, chr(127) || '*******', chr(127) || 'Non renseigné', chr(127) || 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM base.t_ucd);
INSERT INTO eco.t_ucd_c (oid, code, texte, texte_court)
SELECT oid, code, texte, texte_court
FROM base.t_ucd
WHERE oid NOT IN (SELECT oid FROM eco.t_ucd_c);
UPDATE eco.t_ucd_c SET
code = t_ucd.code,
code_ucd13 = sub.code_ucd13,
texte = t_ucd.texte,
texte_court = t_ucd.texte_court
FROM base.t_ucd
LEFT JOIN (
SELECT ucd_id, code_ucd13 FROM eco.t_articles WHERE ucd_id != 0 AND code_ucd13 != '' GROUP BY 1,2
) sub ON sub.ucd_id = oid
WHERE t_ucd.oid = t_ucd_c.oid AND
(
t_ucd_c.code IS DISTINCT FROM t_ucd.code OR
t_ucd_c.code_ucd13 IS DISTINCT FROM sub.code_ucd13 OR
t_ucd_c.texte IS DISTINCT FROM t_ucd.texte OR
t_ucd_c.texte_court IS DISTINCT FROM t_ucd.texte_court
);
-- Synchronisation des différentes colonnes concernant le code UCD13 dans les différentes tables
DROP TABLE IF EXISTS w_liste_codes_ucd
;
CREATE TEMP TABLE w_liste_codes_ucd AS
SELECT
t_ucd.oid AS ucd_id,
t_ucd.code AS t_ucd_code_ucd7,
t_ucd_c.code AS t_ucd_c_code_ucd7,
CASE WHEN t_ucd_c.code_ucd13 = '' THEN NULL ELSE t_ucd_c.code_ucd13 END AS t_ucd_c_code_ucd13,
t_ucd_c.code AS t_articles_code_ucd7,
CASE WHEN t_articles.code_ucd13 = '' THEN NULL ELSE t_articles.code_ucd13 END AS t_articles_code_ucd13,
t_ucd_c.code AS t_article_fournisseur_ucd7,
CASE WHEN t_article_fournisseur.code_ucd13 = '' THEN NULL ELSE t_article_fournisseur.code_ucd13 END AS t_article_fournisseur_code_ucd13
FROM base.t_ucd
LEFT JOIN eco.t_ucd_c ON t_ucd_c.oid = t_ucd.oid
LEFT JOIN eco.t_articles ON t_articles.ucd_id > 0 AND t_articles.ucd_id = t_ucd.oid AND t_articles.code_ucd13 <> ''
LEFT JOIN eco.t_article_fournisseur ON t_article_fournisseur.ucd_id > 0 AND t_article_fournisseur.ucd_id = t_ucd.oid AND t_article_fournisseur.code_ucd13 <> ''
;
UPDATE eco.t_ucd_c
SET code_ucd13 = COALESCE(t_articles_code_ucd13, t_article_fournisseur_code_ucd13)
FROM w_liste_codes_ucd
WHERE w_liste_codes_ucd.ucd_id = t_ucd_c.oid
;
UPDATE eco.t_articles
SET code_ucd13 = COALESCE(t_ucd_c_code_ucd13, t_article_fournisseur_code_ucd13)
FROM w_liste_codes_ucd
WHERE w_liste_codes_ucd.ucd_id = t_articles.ucd_id
;
UPDATE eco.t_article_fournisseur
SET code_ucd13 = COALESCE(t_ucd_c_code_ucd13, t_articles_code_ucd13)
FROM w_liste_codes_ucd
WHERE w_liste_codes_ucd.ucd_id = t_article_fournisseur.ucd_id
;
UPDATE base.t_lpp SET texte_court = texte WHERE COALESCE(texte_court,'') = '';
INSERT INTO base.t_lpp(oid, code, texte, texte_court)
SELECT 0, chr(127) || '*******', chr(127) || 'Non renseigné', chr(127) || 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM base.t_lpp);
INSERT INTO eco.t_lpp_c (oid, code, texte, texte_court)
SELECT oid, code, texte, texte_court
FROM base.t_lpp
WHERE oid NOT IN (SELECT oid FROM eco.t_lpp_c);
UPDATE eco.t_lpp_c SET
code = t_lpp.code,
texte = t_lpp.texte,
texte_court = t_lpp.texte_court
FROM base.t_lpp
WHERE t_lpp.oid = t_lpp_c.oid AND
(
t_lpp_c.code IS DISTINCT FROM t_lpp.code OR
t_lpp_c.texte IS DISTINCT FROM t_lpp.texte OR
t_lpp_c.texte_court IS DISTINCT FROM t_lpp.texte_court
);
RETURN 'OK';
END;

+ 45
- 0
db/schema2/functions/cti_to_date~ae,ae,ae,ae.yaml View File

@ -0,0 +1,45 @@
return: date
lang: plpgsql
parameters:
p0:
type: anyelement
p1:
type: anyelement
p2:
type: anyelement
p3:
type: anyelement
strict: STRICT
src: |
DECLARE
i_century text;
i_year text;
i_month text;
i_day text;
return_date date;
BEGIN
i_century = $1;
IF (length(i_century ) <= 1) THEN
i_century = '0' || i_century;
END IF;
if i_century = '00' THEN
i_century = '00';
END IF;
i_year = $2;
IF (length(i_year ) <= 1) THEN
i_year = '0' || i_year;
END IF;
i_month = $3;
IF (length(i_month ) <= 1) THEN
i_month = '0' || i_month;
END IF;
i_day = $4;
IF (length(i_day ) <= 1) THEN
i_day = '0' || i_day;
END IF;
if i_day = '00' THEN
i_day = '01';
END IF;
return_date = to_date(i_century || i_year || i_month || i_day, 'YYYYMMDD');
return return_date;
END;

+ 193
- 0
db/schema2/functions/cti_update_mvt_mnt_stock.yaml View File

@ -0,0 +1,193 @@
return: text
lang: plpgsql
src: |
DECLARE --eco.p_stock order by date_fin desc
result TEXT;
BEGIN
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = null;
-- initialisation des pump à première entrée ou au pu des stock selon le paramétrage
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
FROM (
SELECT
article_id,
site_id,
lieu_id,
(MIN(ARRAY[CASE WHEN entree_montant > 0 and entree_quantite > 0 THEN date::text ELSE '2099-12-31' END, oid::text]))[2] as oid
FROM eco.p_mouvements_articles
LEFT JOIN eco.t_divers ON t_divers.code = 'FORCE_PUMP_STOCK'
WHERE t_divers.valeur = '0'
GROUP BY 1,2,3
) sub
WHERE p_mouvements_articles.oid = sub.oid
AND p_mouvements_articles.site_id = sub.site_id
AND p_mouvements_articles.lieu_id = sub.lieu_id
AND p_mouvements_articles.article_id = sub.article_id
;
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = CASE WHEN pump_ttc > 0 THEN pump_ttc ELSE pump END
FROM (
SELECT
article_id,
site_id,
lieu_id,
date_fin,
pump,
pump_ttc
FROM eco.p_stock
LEFT JOIN eco.t_divers ON t_divers.code = 'FORCE_PUMP_STOCK'
WHERE t_divers.valeur = '1'
) sub
WHERE (p_mouvements_articles.lieu_id = sub.lieu_id OR (SELECT COUNT(DISTINCT lieu_id) FROM eco.p_stock) = 1)
AND p_mouvements_articles.site_id = sub.site_id
AND p_mouvements_articles.article_id = sub.article_id
AND sub.date_fin BETWEEN date AND p_mouvements_articles.date_fin
;
-- ou si le stock est nul avant et pas après
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
WHERE prix_unitaire_calcule IS NULL
AND stock_quantite_debut <= 0
AND stock_quantite_fin > 0;
-- pump 0 si pas de stock
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = 0
WHERE stock_quantite_fin = 0
;
ANALYSE eco.p_mouvements_articles;
DROP SEQUENCE IF EXISTS s_mv_sto;
CREATE TEMP SEQUENCE s_mv_sto;
DROP TABLE IF EXISTS w_mvt_sto;
CREATE TEMP TABLE w_mvt_sto AS
SELECT
nextval(' s_mv_sto'::regclass) AS sequence,
*,
0::bigint AS derniere_entree
FROM (
SELECT article_id,
site_id,
lieu_id,
date,
oid,
stock_quantite_fin,
entree_quantite,
entree_montant,
prix_unitaire_calcule,
date_fin
FROM eco.p_mouvements_articles
WHERE date >= date_trunc('month', now()) - interval '3 year'
ORDER BY 1,2,3,4,5
) sub;
-- sélection des mouvements d'entrée
DROP TABLE IF EXISTS w_periode_sto;
CREATE TEMP TABLE w_periode_sto AS
SELECT article_id,
site_id,
lieu_id,
date,
oid,
lead(oid,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY sequence) AS oid_next,
lead(date,1) OVER (PARTITION BY article_id, site_id, lieu_id ORDER BY sequence) as date_fin
FROM w_mvt_sto
WHERE (entree_montant > 0 AND entree_quantite > 0)
ORDER BY 1,2,3,4
;
UPDATE w_periode_sto SET date_fin = '2099-12-31' WHERE date_fin IS NULL;
-- calcul des dernière entrées
UPDATE w_mvt_sto
SET derniere_entree = w_periode_sto.oid
FROM w_periode_sto
WHERE 1=1
AND w_mvt_sto.article_id = w_periode_sto.article_id
AND w_mvt_sto.site_id = w_periode_sto.site_id
AND w_mvt_sto.lieu_id = w_periode_sto.lieu_id
AND (w_mvt_sto.oid = w_periode_sto.oid_next
OR (w_mvt_sto.oid > w_periode_sto.oid AND w_mvt_sto.date BETWEEN w_periode_sto.date AND w_periode_sto.date_fin))
;
UPDATE w_mvt_sto
SET derniere_entree = w_first_ent.oid
FROM (SELECT article_id, site_id, lieu_id, (MIN(ARRAY[date::text, oid::text]))[2]::bigint as oid FROM w_periode_sto GROUP BY 1,2,3) w_first_ent
WHERE 1=1
AND derniere_entree = 0
AND w_mvt_sto.article_id = w_first_ent.article_id
AND w_mvt_sto.site_id = w_first_ent.site_id
AND w_mvt_sto.lieu_id = w_first_ent.lieu_id
;
CREATE INDEX w_mvt_article_id ON w_mvt_sto USING btree (article_id);
CREATE INDEX w_mvt_site_id ON w_mvt_sto USING btree (site_id);
CREATE INDEX w_mvt_lieu_id ON w_mvt_sto USING btree (lieu_id);
CREATE INDEX w_mvt_oid ON w_mvt_sto USING btree (oid);
ANALYSE w_mvt_sto;
-- maj des pump
PERFORM base.cti_execute('
UPDATE w_mvt_sto
SET prix_unitaire_calcule = base.cti_division(abs(w_mvt_prev.stock_quantite_fin)*w_mvt_prev.prix_unitaire_calcule + abs(w_mvt_sto.entree_montant), abs(w_mvt_prev.stock_quantite_fin) + abs(w_mvt_sto.entree_quantite))
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
AND w_mvt_sto.derniere_entree = w_mvt_prev.oid
AND (w_mvt_sto.entree_montant != 0)',2000)
--select article_id, lieu_id, (MIN(ARRAY[sequence::text, prix_unitaire_calcule::text]))[2] from w_mvt_sto group by 1,2 having (MIN(ARRAY[sequence::text, prix_unitaire_calcule::text]))[2] is null order by 3 desc
--select * from eco.v_mouvements_articles_1 where article_id = 6634 and lieu_id = 2 order by date
--select * from w_mvt_sto where article_id = 9663 and lieu_id = 2 order by sequence
;
-- extension aux mouvements de sortie
UPDATE w_mvt_sto
SET prix_unitaire_calcule = w_mvt_prev.prix_unitaire_calcule
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_sto.derniere_entree != 0
AND w_mvt_prev.oid = w_mvt_sto.derniere_entree
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
;
-- prise en compte des lieu différents au besoin
UPDATE w_mvt_sto
SET prix_unitaire_calcule = w_mvt_prev.prix_unitaire_calcule
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_prev.article_id = w_mvt_sto.article_id
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
AND w_mvt_sto.date BETWEEN w_mvt_prev.date AND w_mvt_prev.date_fin
AND w_mvt_prev.site_id != w_mvt_sto.site_id
AND w_mvt_prev.lieu_id != w_mvt_sto.lieu_id
;
-- maj des mouvements
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = round(w_mvt_sto.prix_unitaire_calcule,10)
FROM w_mvt_sto
WHERE p_mouvements_articles.oid = w_mvt_sto.oid
;
-- sinon (au pire si pas d'information) pump = pu
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
WHERE 1=1
AND prix_unitaire_calcule IS NULL
;
RETURN 'OK';
END;

+ 164
- 0
db/schema2/functions/cti_update_mvt_qte_stock.yaml View File

@ -0,0 +1,164 @@
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;

+ 229
- 0
db/schema2/functions/cti_update_mvt_stock.yaml View File

@ -0,0 +1,229 @@
return: text
lang: plpgsql
src: |
DECLARE --select * from eco.p_stock order by date_fin desc
result TEXT;
BEGIN
UPDATE eco.p_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 p_mouvements_articles.article_id, p_mouvements_articles.lieu_id,date ORDER BY p_mouvements_articles.oid) = 1 THEN 1
ELSE 0
END AS est_premier_jour,
CASE
WHEN cume_dist() OVER (PARTITION BY p_mouvements_articles.article_id, p_mouvements_articles.lieu_id, p_mouvements_articles.date ORDER BY p_mouvements_articles.oid) = 1 THEN 1
ELSE 0
END AS est_dernier_jour,
CASE
WHEN cume_dist() OVER (PARTITION BY p_mouvements_articles.article_id, p_mouvements_articles.lieu_id, p_mouvements_articles.date ORDER BY p_mouvements_articles.oid) = 1
THEN lead(p_mouvements_articles.date) OVER (PARTITION BY p_mouvements_articles.article_id, p_mouvements_articles.lieu_id ORDER BY p_mouvements_articles.date) - interval '1 day'
ELSE date
END AS date_fin
FROm eco.p_mouvements_articles
) sub
WHERE sub.oid = p_mouvements_articles.oid;
UPDATE eco.p_mouvements_articles
SET date_fin = date_trunc('month',now()) - interval '1 day' + interval '1 month'
WHERE date_fin IS NULL
;
UPDATE eco.p_mouvements_articles
SET
stock_quantite_debut = 0,
stock_quantite_fin = 0
;
UPDATE eco.p_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 + p_mouvements_articles.entree_quantite - p_mouvements_articles.sortie_quantite
FROM
(
SELECT
oid,
lieu_id,
article_id,
date,
date_trunc('month',date) as month,
sum(entree_quantite) OVER (PARTITION BY lieu_id, article_id, date_trunc('month',date) ORDER BY date DESC, oid DESC) AS entree_var,
sum(sortie_quantite) OVER (PARTITION BY lieu_id, article_id, date_trunc('month',date) ORDER BY date DESC, oid DESC) AS sortie_var
FROM eco.p_mouvements_articles
ORDER BY 1,2,3,4
) w_stock_var
JOIN
eco.p_stock
ON 1=1
AND w_stock_var.article_id = p_stock.article_id
AND w_stock_var.lieu_id = p_stock.lieu_id
AND date_trunc('month',date_fin) = month
WHERE 1=1
AND p_mouvements_articles.article_id = w_stock_var.article_id
AND p_mouvements_articles.lieu_id = w_stock_var.lieu_id
AND p_mouvements_articles.oid = w_stock_var.oid
;
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = null;
-- initialisation des pump à première entrée
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
FROM (
SELECT
article_id,
lieu_id,
(MIN(ARRAY[CASE WHEN entree_montant_ht > 0 and entree_quantite > 0 THEN date::text ELSE '2099-12-31' END, oid::text]))[2] as oid
FROM eco.p_mouvements_articles
GROUP BY 1,2
) sub
WHERE p_mouvements_articles.oid = sub.oid
AND p_mouvements_articles.lieu_id = sub.lieu_id
AND p_mouvements_articles.article_id = sub.article_id
;
-- ou si le stock est nul avant et pas après
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
WHERE prix_unitaire_calcule IS NULL
AND stock_quantite_debut <= 0
AND stock_quantite_fin > 0;
-- pump 0 si pas de stock
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = 0
WHERE stock_quantite_fin = 0
;
ANALYSE eco.p_mouvements_articles;
DROP SEQUENCE IF EXISTS s_mv_sto;
CREATE TEMP SEQUENCE s_mv_sto;
DROP TABLE IF EXISTS w_mvt_sto;
CREATE TEMP TABLE w_mvt_sto AS
SELECT
nextval(' s_mv_sto'::regclass) AS sequence,
*,
0::bigint AS derniere_entree
FROM (
SELECT article_id,
lieu_id,
date,
oid,
stock_quantite_fin,
entree_quantite,
entree_montant_ht,
prix_unitaire_calcule,
date_fin
FROM eco.p_mouvements_articles
ORDER BY 1,2,3,4
) sub;
-- sélection des mouvements d'entrée
DROP TABLE IF EXISTS w_periode_sto;
CREATE TEMP TABLE w_periode_sto AS
SELECT article_id,
lieu_id,
date,
oid,
lead(oid,1) OVER (PARTITION BY article_id, lieu_id ORDER BY sequence) AS oid_next,
lead(date,1) OVER (PARTITION BY article_id, lieu_id ORDER BY sequence) as date_fin
FROM w_mvt_sto
WHERE (entree_montant_ht > 0 AND entree_quantite > 0)
ORDER BY 1,2,3
;
UPDATE w_periode_sto SET date_fin = '2099-12-31' WHERE date_fin IS NULL;
-- calcul des dernière entrées
UPDATE w_mvt_sto
SET derniere_entree = w_periode_sto.oid
FROM w_periode_sto
WHERE 1=1
AND w_mvt_sto.article_id = w_periode_sto.article_id
AND w_mvt_sto.lieu_id = w_periode_sto.lieu_id
AND (w_mvt_sto.oid = w_periode_sto.oid_next
OR (w_mvt_sto.oid > w_periode_sto.oid AND w_mvt_sto.date BETWEEN w_periode_sto.date AND w_periode_sto.date_fin))
;
UPDATE w_mvt_sto
SET derniere_entree = w_first_ent.oid
FROM (SELECT article_id, lieu_id, (MIN(ARRAY[date::text, oid::text]))[2]::bigint as oid FROM w_periode_sto GROUP BY 1,2) w_first_ent
WHERE 1=1
AND derniere_entree = 0
AND w_mvt_sto.article_id = w_first_ent.article_id
AND w_mvt_sto.lieu_id = w_first_ent.lieu_id
;
CREATE INDEX w_mvt_article_id ON w_mvt_sto USING btree (article_id);
CREATE INDEX w_mvt_lieu_id ON w_mvt_sto USING btree (lieu_id);
CREATE INDEX w_mvt_oid ON w_mvt_sto USING btree (oid);
ANALYSE w_mvt_sto;
-- maj des pump
PERFORM base.cti_execute('
UPDATE w_mvt_sto
SET prix_unitaire_calcule = base.cti_division(abs(w_mvt_prev.stock_quantite_fin)*w_mvt_prev.prix_unitaire_calcule + abs(w_mvt_sto.entree_montant_ht), abs(w_mvt_prev.stock_quantite_fin) + abs(w_mvt_sto.entree_quantite))
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
AND w_mvt_sto.derniere_entree = w_mvt_prev.oid
AND (w_mvt_sto.entree_montant_ht != 0)',2000)
--select article_id, lieu_id, (MIN(ARRAY[sequence::text, prix_unitaire_calcule::text]))[2] from w_mvt_sto group by 1,2 having (MIN(ARRAY[sequence::text, prix_unitaire_calcule::text]))[2] is null order by 3 desc
--select * from eco.v_mouvements_articles_1 where article_id = 6634 and lieu_id = 2 order by date
--select * from w_mvt_sto where article_id = 9663 and lieu_id = 2 order by sequence
;
-- extension aux mouvements de sortie
UPDATE w_mvt_sto
SET prix_unitaire_calcule = w_mvt_prev.prix_unitaire_calcule
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_sto.derniere_entree != 0
AND w_mvt_prev.oid = w_mvt_sto.derniere_entree
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
;
-- prise en compte des lieu différents au besoin
UPDATE w_mvt_sto
SET prix_unitaire_calcule = w_mvt_prev.prix_unitaire_calcule
FROM w_mvt_sto w_mvt_prev
WHERE 1=1
AND w_mvt_sto.prix_unitaire_calcule IS NULL
AND w_mvt_prev.article_id = w_mvt_sto.article_id
AND w_mvt_prev.prix_unitaire_calcule IS NOT NULL
AND w_mvt_sto.date BETWEEN w_mvt_prev.date AND w_mvt_prev.date_fin
AND w_mvt_prev.lieu_id != w_mvt_sto.lieu_id
;
-- maj des mouvements
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = w_mvt_sto.prix_unitaire_calcule
FROM w_mvt_sto
WHERE p_mouvements_articles.oid = w_mvt_sto.oid
;
-- sinon (au pire si pas d'information) pump = pu
UPDATE eco.p_mouvements_articles
SET prix_unitaire_calcule = prix_unitaire
WHERE 1=1
AND prix_unitaire_calcule IS NULL
;
UPDATE eco.p_mouvements_articles SET date_fin = date_fin + interval '1 day' WHERE est_dernier_jour = 1;
RETURN 'OK';
END;

+ 229
- 0
db/schema2/functions/cti_update_schema_classes~tx.yaml View File

@ -0,0 +1,229 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_table_code
src: |
DECLARE
result TEXT;
BEGIN
IF (i_table_code = 'ART' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_articles', 'ART','');
END IF;
IF (i_table_code = 'CAA' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_categories_articles', 'CAA','');
END IF;
IF (i_table_code = 'SCA' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_sous_categories_articles', 'SCA','');
END IF;
IF (i_table_code = 'FAA' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_familles_articles', 'FAA','');
END IF;
IF (i_table_code = 'SFA' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_sous_familles_articles', 'SFA','');
END IF;
IF (i_table_code = 'TYA' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_types_articles', 'TYA','');
END IF;
IF (i_table_code = 'SIT' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_sites', 'SIT','');
END IF;
IF (i_table_code = 'GES' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_gestionnaires', 'GES','');
END IF;
IF (i_table_code = 'LIE' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_lieux', 'LIE','');
END IF;
IF (i_table_code = 'TYF' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_types_fournisseurs', 'TYF','');
END IF;
IF (i_table_code = 'FOU' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_fournisseurs', 'FOU','');
END IF;
IF (i_table_code = 'TYM' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_types_mouvements', 'TYM','');
END IF;
IF (i_table_code = 'UFO' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_unites_fonctionnelles', 'UFO','');
END IF;
IF (i_table_code = 'UNI' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_unites', 'UNI','');
END IF;
IF (i_table_code = 'CPT' OR i_table_code = '*ALL') THEN
PERFORM base.cti_update_classes('eco', 't_compte', 'CPT','');
END IF;
IF i_table_code IN ('*ALL', 'CAA', 'SCA', 'FAA', 'SFA', 'TYA', 'UNI') THEN
UPDATE eco.t_articles SET
type_code = t_types_articles.code,
type_texte = t_types_articles.texte_court,
type_section_id = t_types_articles.section_id,
type_section_code = t_types_articles.section_code,
type_section_texte = t_types_articles.section_texte,
famille_code = t_familles_articles.code,
famille_texte = t_familles_articles.texte_court,
famille_section_id = t_familles_articles.section_id,
famille_section_code = t_familles_articles.section_code,
famille_section_texte = t_familles_articles.section_texte,
sous_famille_code = t_sous_familles_articles.code,
sous_famille_texte = t_sous_familles_articles.texte_court,
sous_famille_section_id = t_sous_familles_articles.section_id,
sous_famille_section_code = t_sous_familles_articles.section_code,
sous_famille_section_texte = t_sous_familles_articles.section_texte,
categorie_code = t_categories_articles.code,
categorie_texte = t_categories_articles.texte_court,
categorie_section_id = t_categories_articles.section_id,
categorie_section_code = t_categories_articles.section_code,
categorie_section_texte = t_categories_articles.section_texte,
sous_categorie_code = t_sous_categories_articles.code,
sous_categorie_texte = t_sous_categories_articles.texte_court,
sous_categorie_section_id = t_sous_categories_articles.section_id,
sous_categorie_section_code = t_sous_categories_articles.section_code,
sous_categorie_section_texte = t_sous_categories_articles.section_texte,
classification_atc_code = t_classification_atc.code,
classification_atc_texte = t_classification_atc.texte_court,
classification_atc_section_id = t_classification_atc.section_id,
classification_atc_section_code = t_classification_atc.section_code,
classification_atc_section_texte = t_classification_atc.section_texte,
classification_atc_1_id = t_classification_atc.classification_atc_1_id,
classification_atc_1_code = t_classification_atc.classification_atc_1_code,
classification_atc_1_texte = t_classification_atc.classification_atc_1_texte,
classification_atc_2_id = t_classification_atc.classification_atc_2_id,
classification_atc_2_code = t_classification_atc.classification_atc_2_code,
classification_atc_2_texte = t_classification_atc.classification_atc_2_texte,
classification_atc_3_id = t_classification_atc.classification_atc_3_id,
classification_atc_3_code = t_classification_atc.classification_atc_3_code,
classification_atc_3_texte = t_classification_atc.classification_atc_3_texte,
classification_atc_4_id = t_classification_atc.classification_atc_4_id,
classification_atc_4_code = t_classification_atc.classification_atc_4_code,
classification_atc_4_texte = t_classification_atc.classification_atc_4_texte,
unite_stockage_code = t_unites_stockage.code,
unite_stockage_texte = t_unites_stockage.texte_court,
unite_stockage_section_id = t_unites_stockage.section_id,
unite_stockage_section_code = t_unites_stockage.section_code,
unite_stockage_section_texte = t_unites_stockage.section_texte,
unite_distribution_code = t_unites_distribution.code,
unite_distribution_texte = t_unites_distribution.texte_court,
unite_distribution_section_id = t_unites_distribution.section_id,
unite_distribution_section_code = t_unites_distribution.section_code,
unite_distribution_section_texte = t_unites_distribution.section_texte,
compte_code = t_compte.code,
compte_texte = t_compte.texte_court,
compte_section_id = t_compte.section_id,
compte_section_code = t_compte.section_code,
compte_section_texte = t_compte.section_texte
FROM eco.t_types_articles ,
eco.t_familles_articles,
eco.t_sous_familles_articles,
eco.t_categories_articles,
eco.t_sous_categories_articles,
eco.t_classification_atc,
eco.t_unites t_unites_stockage,
eco.t_unites t_unites_distribution,
eco.t_compte
WHERE type_id = t_types_articles.oid
AND famille_id = t_familles_articles.oid
AND sous_famille_id = t_sous_familles_articles.oid
AND categorie_id = t_categories_articles.oid
AND sous_categorie_id = t_sous_categories_articles.oid
AND classification_atc_id = t_classification_atc.oid
AND unite_stockage_id = t_unites_stockage.oid
AND unite_distribution_id = t_unites_distribution.oid
AND compte_id = t_compte.oid
AND (
type_code IS DISTINCT FROM t_types_articles.code OR
type_texte IS DISTINCT FROM t_types_articles.texte_court OR
type_section_id IS DISTINCT FROM t_types_articles.section_id OR
type_section_code IS DISTINCT FROM t_types_articles.section_code OR
type_section_texte IS DISTINCT FROM t_types_articles.section_texte OR
famille_code IS DISTINCT FROM t_familles_articles.code OR
famille_texte IS DISTINCT FROM t_familles_articles.texte_court OR
famille_section_id IS DISTINCT FROM t_familles_articles.section_id OR
famille_section_code IS DISTINCT FROM t_familles_articles.section_code OR
famille_section_texte IS DISTINCT FROM t_familles_articles.section_texte OR
sous_famille_code IS DISTINCT FROM t_sous_familles_articles.code OR
sous_famille_texte IS DISTINCT FROM t_sous_familles_articles.texte_court OR
sous_famille_section_id IS DISTINCT FROM t_sous_familles_articles.section_id OR
sous_famille_section_code IS DISTINCT FROM t_sous_familles_articles.section_code OR
sous_famille_section_texte IS DISTINCT FROM t_sous_familles_articles.section_texte OR
categorie_code IS DISTINCT FROM t_categories_articles.code OR
categorie_texte IS DISTINCT FROM t_categories_articles.texte_court OR
categorie_section_id IS DISTINCT FROM t_categories_articles.section_id OR
categorie_section_code IS DISTINCT FROM t_categories_articles.section_code OR
categorie_section_texte IS DISTINCT FROM t_categories_articles.section_texte OR
sous_categorie_code IS DISTINCT FROM t_sous_categories_articles.code OR
sous_categorie_texte IS DISTINCT FROM t_sous_categories_articles.texte_court OR
sous_categorie_section_id IS DISTINCT FROM t_sous_categories_articles.section_id OR
sous_categorie_section_code IS DISTINCT FROM t_sous_categories_articles.section_code OR
sous_categorie_section_texte IS DISTINCT FROM t_sous_categories_articles.section_texte OR
t_articles.classification_atc_code IS DISTINCT FROM t_classification_atc.code OR
t_articles.classification_atc_texte IS DISTINCT FROM t_classification_atc.texte_court OR
t_articles.classification_atc_section_id IS DISTINCT FROM t_classification_atc.section_id OR
t_articles.classification_atc_section_code IS DISTINCT FROM t_classification_atc.section_code OR
t_articles.classification_atc_section_texte IS DISTINCT FROM t_classification_atc.section_texte OR
t_articles.classification_atc_1_id IS DISTINCT FROM t_classification_atc.classification_atc_1_id OR
t_articles.classification_atc_1_code IS DISTINCT FROM t_classification_atc.classification_atc_1_code OR
t_articles.classification_atc_1_texte IS DISTINCT FROM t_classification_atc.classification_atc_1_texte OR
t_articles.classification_atc_2_id IS DISTINCT FROM t_classification_atc.classification_atc_2_id OR
t_articles.classification_atc_2_code IS DISTINCT FROM t_classification_atc.classification_atc_2_code OR
t_articles.classification_atc_2_texte IS DISTINCT FROM t_classification_atc.classification_atc_2_texte OR
t_articles.classification_atc_3_id IS DISTINCT FROM t_classification_atc.classification_atc_3_id OR
t_articles.classification_atc_3_code IS DISTINCT FROM t_classification_atc.classification_atc_3_code OR
t_articles.classification_atc_3_texte IS DISTINCT FROM t_classification_atc.classification_atc_3_texte OR
t_articles.classification_atc_4_id IS DISTINCT FROM t_classification_atc.classification_atc_4_id OR
t_articles.classification_atc_4_code IS DISTINCT FROM t_classification_atc.classification_atc_4_code OR
t_articles.classification_atc_4_texte IS DISTINCT FROM t_classification_atc.classification_atc_4_texte OR
t_articles.unite_stockage_code IS DISTINCT FROM t_unites_stockage.code OR
t_articles.unite_stockage_texte IS DISTINCT FROM t_unites_stockage.texte_court OR
t_articles.unite_stockage_section_id IS DISTINCT FROM t_unites_stockage.section_id OR
t_articles.unite_stockage_section_code IS DISTINCT FROM t_unites_stockage.section_code OR
t_articles.unite_stockage_section_texte IS DISTINCT FROM t_unites_stockage.section_texte OR
t_articles.unite_distribution_code IS DISTINCT FROM t_unites_distribution.code OR
t_articles.unite_distribution_texte IS DISTINCT FROM t_unites_distribution.texte_court OR
t_articles.unite_distribution_section_id IS DISTINCT FROM t_unites_distribution.section_id OR
t_articles.unite_distribution_section_code IS DISTINCT FROM t_unites_distribution.section_code OR
t_articles.unite_distribution_section_texte IS DISTINCT FROM t_unites_distribution.section_texte OR
t_articles.compte_code IS DISTINCT FROM t_compte.code OR
t_articles.compte_texte IS DISTINCT FROM t_compte.texte_court OR
t_articles.compte_section_id IS DISTINCT FROM t_compte.section_id OR
t_articles.compte_section_code IS DISTINCT FROM t_compte.section_code OR
t_articles.compte_section_texte IS DISTINCT FROM t_compte.section_texte
);
END IF;
IF i_table_code IN ('*ALL', 'TYF') THEN
UPDATE eco.t_fournisseurs SET
type_code = t_types_fournisseurs.code,
type_texte = t_types_fournisseurs.texte_court,
type_section_id = t_types_fournisseurs.section_id,
type_section_code = t_types_fournisseurs.section_code,
type_section_texte = t_types_fournisseurs.section_texte
FROM eco.t_types_fournisseurs
WHERE type_id = t_types_fournisseurs.oid
AND (
type_code IS DISTINCT FROM t_types_fournisseurs.code OR
type_texte IS DISTINCT FROM t_types_fournisseurs.texte_court OR
type_section_id IS DISTINCT FROM t_types_fournisseurs.section_id OR
type_section_code IS DISTINCT FROM t_types_fournisseurs.section_code OR
type_section_texte IS DISTINCT FROM t_types_fournisseurs.section_texte
);
END IF;
RETURN 'OK';
END;

+ 705
- 0
db/schema2/functions/cti_view_after~tx,tx.yaml View File

@ -0,0 +1,705 @@
return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_table
p1:
type: text
name: i_option
src: |
DECLARE
_TABLE text;
_VIEWTYPE text;
_DG_SETCOLUMNS text;
_DG_MAXCOLUMNS text;
BEGIN
_TABLE = i_table;
IF _TABLE = '' THEN
_TABLE = 'w_table';
END IF
;
-- DEBUG
EXECUTE('DROP TABLE IF EXISTS temp.debug_w_table; CREATE TABLE temp.debug_w_table AS SELECT * FROM ' || _TABLE || ';');
EXECUTE('DROP TABLE IF EXISTS temp.debug_cti_get_columns_from_indicateurs_properties; CREATE TABLE temp.debug_cti_get_columns_from_indicateurs_properties AS SELECT * FROM cti_get_columns_from_indicateurs_properties;');
_VIEWTYPE =
(
SELECT COALESCE(MAX(property_value),'')
FROM cti_get_columns_from_indicateurs_properties
WHERE property LIKE 'IN_VIEWTYPE'
)
;
_DG_SETCOLUMNS =
(
SELECT COALESCE(MAX(property_value),'')
FROM cti_get_columns_from_indicateurs_properties
WHERE property LIKE 'DG_SETCOLUMNS'
)
;
_DG_MAXCOLUMNS =
(
SELECT COALESCE(array_to_string(base.cti_array_accum(item),','),'MAX(work_indicateurs[1]')
FROM
(
SELECT 'MAX(work_indicateurs['||i::text||'])' AS item
FROM cti_get_columns_from_indicateurs_properties
JOIN generate_series(1,1000) i ON (string_to_array(property_value,',,'))[i] IS NOT NULL OR i = 1
WHERE property = 'DB_COLUMNS'
ORDER BY i
) subview
)
;
-- Regroupement si plusieurs tables analysées
EXECUTE('INSERT INTO ' || _TABLE || ' (
work_table_sequence,
sort,
level,
oidt,
labelt,
textet,
oid1,
code1,
texte1,
oid2,
code2,
texte2,
oid3,
code3,
texte3,
oid,
code,
texte,
other_fields,
significant_data,
indicateurs,
work_indicateurs,
indicateurs_text,
q_special
)
SELECT
''*'',
MAX(sort),
level,
oidt,
MAX(labelt),
MAX(textet),
oid1,
MAX(code1),
MAX(texte1),
oid2,
MAX(code2),
MAX(texte2),
oid3,
MAX(code3),
MAX(texte3),
oid,
MAX(code),
MAX(texte),
MAX(other_fields),
MAX(significant_data),
NULL AS indicateurs,
ARRAY['||_DG_MAXCOLUMNS||'],
indicateurs_text,
''0''::text AS q_special
FROM ' || _TABLE || '
WHERE NOT (oid = -9999999 AND indicateurs[1] IS NULL AND work_indicateurs[1] IS NULL)
GROUP BY level, oidt, oid1, oid2, oid3, oid, indicateurs_text
;
DELETE FROM ' || _TABLE || ' WHERE work_table_sequence <> ''*''
;
ANALYSE ' || _TABLE || '
');
IF _TABLE <> 'w_table' THEN
EXECUTE 'DROP VIEW IF EXISTS w_table CASCADE; CREATE TEMP VIEW w_table AS SELECT * FROM '||_TABLE;
END IF ;
PERFORM base.cti_execute('
UPDATE ' || _TABLE || ' w_table
SET ' || itemset || '
FROM w_table w_table123
WHERE
w_table123.level = w_table.level AND
w_table123.oid1 = w_table.oid1 AND
w_table123.oid2 = w_table.oid2 AND
w_table123.oid3 = w_table.oid3 AND
w_table123.oidt = -123 AND
w_table.oidt <> -123 AND
('||itemwhere||')
;
UPDATE ' || _TABLE || ' w_table
SET ' || itemset || '
FROM w_table w_table123
WHERE
w_table123.level = w_table.level AND
w_table123.oid1 = -123 AND
w_table.oid1 <> -123 AND
w_table123.oid2 = w_table.oid2 AND
w_table123.oid3 = w_table.oid3 AND
w_table123.oidt = -123 AND
w_table.oidt <> -123 AND
('||itemwhere||')
;
UPDATE ' || _TABLE || ' w_table
SET ' || itemset || '
FROM w_table w_table123
WHERE
w_table123.level = w_table.level AND
w_table123.oidt = w_table.oidt AND
w_table123.oid2 = w_table.oid2 AND
w_table123.oid3 = w_table.oid3 AND
w_table123.oid1 = -123 AND
w_table.oid1 <> -123 AND
('||itemwhere||')
;
UPDATE ' || _TABLE || ' w_table
SET ' || itemset || '
FROM w_table w_table123
WHERE
w_table123.level = w_table.level AND
w_table123.oidt = w_table.oidt AND
w_table123.oid1 = w_table.oid1 AND
w_table123.oid3 = w_table.oid3 AND
w_table123.oid2 = -123 AND
w_table.oid2 <> -123 AND
('||itemwhere||')
;
UPDATE ' || _TABLE || ' w_table
SET ' || itemset || '
FROM w_table w_table123
WHERE
w_table123.level = w_table.level AND
w_table123.oidt = w_table.oidt AND
w_table123.oid1 = w_table.oid1 AND
w_table123.oid2 = w_table.oid2 AND
w_table123.oid3 = -123 AND
w_table.oid3 <> -123 AND
('||itemwhere||')
;
',1)
FROM
(
SELECT array_to_string(base.cti_array_accum(itemset),',') AS itemset,
array_to_string(base.cti_array_accum(itemwhere),' OR ') AS itemwhere
FROM
(SELECT
'work_indicateurs['||i||'] = CASE WHEN w_table123.work_indicateurs['||i||'] <> 0 THEN w_table123.work_indicateurs['||i||'] ELSE w_table.work_indicateurs['||i||'] END' AS itemset,
'w_table123.work_indicateurs['||i||'] <> 0' AS itemwhere
FROM cti_get_columns_from_indicateurs_properties
JOIN generate_series(1,1000) i ON (string_to_array(property_value,',,'))[i] IS NOT NULL OR i = 1
WHERE property = 'DB_COLUMNS'
ORDER BY i
) subview
) subview
;
EXECUTE('
DELETE FROM ' || _TABLE || ' w_table
WHERE
(
w_table.oidt = -123 OR
w_table.oid1 = -123 OR
w_table.oid2 = -123 OR
w_table.oid2 = -123
)
;')
;
IF _DG_SETCOLUMNS <> '' THEN
EXECUTE '
DROP TABLE IF EXISTS w_tablet
;
CREATE TEMP TABLE w_tablet AS SELECT MAX(work_indicateurs) AS work_indicateurs FROM ' || _TABLE || ' w_table WHERE w_table.level = 9 AND w_table.oid = -9999999
;
UPDATE ' || _TABLE || ' w_table
SET '||_DG_SETCOLUMNS||'
FROM w_tablet'
;
END IF;
-- Si comparaison, différenes et pourcentages
IF _VIEWTYPE = 'COMP' THEN
EXECUTE '
UPDATE ' || _TABLE || ' SET
indicateurs[009]=indicateurs[001]-indicateurs[002],
indicateurs[010]=indicateurs[002]-indicateurs[003],
indicateurs[011]=indicateurs[003]-indicateurs[004],
indicateurs[012]=indicateurs[005]-indicateurs[006],
indicateurs[013]=indicateurs[006]-indicateurs[007],
indicateurs[014]=indicateurs[007]-indicateurs[008],
indicateurs[015]=base.cti_division(indicateurs[001]-indicateurs[002],indicateurs[002])*100,
indicateurs[016]=base.cti_division(indicateurs[002]-indicateurs[003],indicateurs[003])*100,
indicateurs[017]=base.cti_division(indicateurs[003]-indicateurs[004],indicateurs[004])*100,
indicateurs[018]=base.cti_division(indicateurs[005]-indicateurs[006],indicateurs[006])*100,
indicateurs[019]=base.cti_division(indicateurs[006]-indicateurs[007],indicateurs[007])*100,
indicateurs[020]=base.cti_division(indicateurs[007]-indicateurs[008],indicateurs[008])*100,
indicateurs[029]=indicateurs[021]-indicateurs[022],
indicateurs[030]=indicateurs[022]-indicateurs[023],
indicateurs[031]=indicateurs[023]-indicateurs[024],
indicateurs[032]=indicateurs[025]-indicateurs[026],
indicateurs[033]=indicateurs[026]-indicateurs[027],
indicateurs[034]=indicateurs[027]-indicateurs[028],
indicateurs[035]=base.cti_division(indicateurs[021]-indicateurs[022],indicateurs[022])*100,
indicateurs[036]=base.cti_division(indicateurs[022]-indicateurs[023],indicateurs[023])*100,
indicateurs[037]=base.cti_division(indicateurs[023]-indicateurs[024],indicateurs[024])*100,
indicateurs[038]=base.cti_division(indicateurs[025]-indicateurs[026],indicateurs[026])*100,
indicateurs[039]=base.cti_division(indicateurs[026]-indicateurs[027],indicateurs[027])*100,
indicateurs[040]=base.cti_division(indicateurs[027]-indicateurs[028],indicateurs[028])*100,
indicateurs[049]=indicateurs[041]-indicateurs[042],
indicateurs[050]=indicateurs[042]-indicateurs[043],
indicateurs[051]=indicateurs[043]-indicateurs[044],
indicateurs[052]=indicateurs[045]-indicateurs[046],
indicateurs[053]=indicateurs[046]-indicateurs[047],
indicateurs[054]=indicateurs[047]-indicateurs[048],
indicateurs[055]=base.cti_division(indicateurs[041]-indicateurs[042],indicateurs[042])*100,
indicateurs[056]=base.cti_division(indicateurs[042]-indicateurs[043],indicateurs[043])*100,
indicateurs[057]=base.cti_division(indicateurs[043]-indicateurs[044],indicateurs[044])*100,
indicateurs[058]=base.cti_division(indicateurs[045]-indicateurs[046],indicateurs[046])*100,
indicateurs[059]=base.cti_division(indicateurs[046]-indicateurs[047],indicateurs[047])*100,
indicateurs[060]=base.cti_division(indicateurs[047]-indicateurs[048],indicateurs[048])*100,
indicateurs[069]=indicateurs[061]-indicateurs[062],
indicateurs[070]=indicateurs[062]-indicateurs[063],
indicateurs[071]=indicateurs[063]-indicateurs[064],
indicateurs[072]=indicateurs[065]-indicateurs[066],
indicateurs[073]=indicateurs[066]-indicateurs[067],
indicateurs[074]=indicateurs[067]-indicateurs[068],
indicateurs[075]=base.cti_division(indicateurs[061]-indicateurs[062],indicateurs[062])*100,
indicateurs[076]=base.cti_division(indicateurs[062]-indicateurs[063],indicateurs[063])*100,
indicateurs[077]=base.cti_division(indicateurs[063]-indicateurs[064],indicateurs[064])*100,
indicateurs[078]=base.cti_division(indicateurs[065]-indicateurs[066],indicateurs[066])*100,
indicateurs[079]=base.cti_division(indicateurs[066]-indicateurs[067],indicateurs[067])*100,
indicateurs[080]=base.cti_division(indicateurs[067]-indicateurs[068],indicateurs[068])*100,
indicateurs[089]=indicateurs[081]-indicateurs[082],
indicateurs[090]=indicateurs[082]-indicateurs[083],
indicateurs[091]=indicateurs[083]-indicateurs[084],
indicateurs[092]=indicateurs[085]-indicateurs[086],
indicateurs[093]=indicateurs[086]-indicateurs[087],
indicateurs[094]=indicateurs[087]-indicateurs[088],
indicateurs[095]=base.cti_division(indicateurs[081]-indicateurs[082],indicateurs[082])*100,
indicateurs[096]=base.cti_division(indicateurs[082]-indicateurs[083],indicateurs[083])*100,
indicateurs[097]=base.cti_division(indicateurs[083]-indicateurs[084],indicateurs[084])*100,
indicateurs[098]=base.cti_division(indicateurs[085]-indicateurs[086],indicateurs[086])*100,
indicateurs[099]=base.cti_division(indicateurs[086]-indicateurs[087],indicateurs[087])*100,
indicateurs[100]=base.cti_division(indicateurs[087]-indicateurs[088],indicateurs[088])*100,
indicateurs[109]=indicateurs[101]-indicateurs[102],
indicateurs[110]=indicateurs[102]-indicateurs[103],
indicateurs[111]=indicateurs[103]-indicateurs[104],
indicateurs[112]=indicateurs[105]-indicateurs[106],
indicateurs[113]=indicateurs[106]-indicateurs[107],
indicateurs[114]=indicateurs[107]-indicateurs[108],
indicateurs[115]=base.cti_division(indicateurs[101]-indicateurs[102],indicateurs[102])*100,
indicateurs[116]=base.cti_division(indicateurs[102]-indicateurs[103],indicateurs[103])*100,
indicateurs[117]=base.cti_division(indicateurs[103]-indicateurs[104],indicateurs[104])*100,
indicateurs[118]=base.cti_division(indicateurs[105]-indicateurs[106],indicateurs[106])*100,
indicateurs[119]=base.cti_division(indicateurs[106]-indicateurs[107],indicateurs[107])*100,
indicateurs[120]=base.cti_division(indicateurs[107]-indicateurs[108],indicateurs[108])*100,
indicateurs[129]=indicateurs[121]-indicateurs[122],
indicateurs[130]=indicateurs[122]-indicateurs[123],
indicateurs[131]=indicateurs[123]-indicateurs[124],
indicateurs[132]=indicateurs[125]-indicateurs[126],
indicateurs[133]=indicateurs[126]-indicateurs[127],
indicateurs[134]=indicateurs[127]-indicateurs[128],
indicateurs[135]=base.cti_division(indicateurs[121]-indicateurs[122],indicateurs[122])*100,
indicateurs[136]=base.cti_division(indicateurs[122]-indicateurs[123],indicateurs[123])*100,
indicateurs[137]=base.cti_division(indicateurs[123]-indicateurs[124],indicateurs[124])*100,
indicateurs[138]=base.cti_division(indicateurs[125]-indicateurs[126],indicateurs[126])*100,
indicateurs[139]=base.cti_division(indicateurs[126]-indicateurs[127],indicateurs[127])*100,
indicateurs[140]=base.cti_division(indicateurs[127]-indicateurs[128],indicateurs[128])*100,
indicateurs[149]=indicateurs[141]-indicateurs[142],
indicateurs[150]=indicateurs[142]-indicateurs[143],
indicateurs[151]=indicateurs[143]-indicateurs[144],
indicateurs[152]=indicateurs[145]-indicateurs[146],
indicateurs[153]=indicateurs[146]-indicateurs[147],
indicateurs[154]=indicateurs[147]-indicateurs[148],
indicateurs[155]=base.cti_division(indicateurs[141]-indicateurs[142],indicateurs[142])*100,
indicateurs[156]=base.cti_division(indicateurs[142]-indicateurs[143],indicateurs[143])*100,
indicateurs[157]=base.cti_division(indicateurs[143]-indicateurs[144],indicateurs[144])*100,
indicateurs[158]=base.cti_division(indicateurs[145]-indicateurs[146],indicateurs[146])*100,
indicateurs[159]=base.cti_division(indicateurs[146]-indicateurs[147],indicateurs[147])*100,
indicateurs[160]=base.cti_division(indicateurs[147]-indicateurs[148],indicateurs[148])*100,
indicateurs[169]=indicateurs[161]-indicateurs[162],
indicateurs[170]=indicateurs[162]-indicateurs[163],
indicateurs[171]=indicateurs[163]-indicateurs[164],
indicateurs[172]=indicateurs[165]-indicateurs[166],
indicateurs[173]=indicateurs[166]-indicateurs[167],
indicateurs[174]=indicateurs[167]-indicateurs[168],
indicateurs[175]=base.cti_division(indicateurs[161]-indicateurs[162],indicateurs[162])*100,
indicateurs[176]=base.cti_division(indicateurs[162]-indicateurs[163],indicateurs[163])*100,
indicateurs[177]=base.cti_division(indicateurs[163]-indicateurs[164],indicateurs[164])*100,
indicateurs[178]=base.cti_division(indicateurs[165]-indicateurs[166],indicateurs[166])*100,
indicateurs[179]=base.cti_division(indicateurs[166]-indicateurs[167],indicateurs[167])*100,
indicateurs[180]=base.cti_division(indicateurs[167]-indicateurs[168],indicateurs[168])*100,
indicateurs[189]=indicateurs[181]-indicateurs[182],
indicateurs[190]=indicateurs[182]-indicateurs[183],
indicateurs[191]=indicateurs[183]-indicateurs[184],
indicateurs[192]=indicateurs[185]-indicateurs[186],
indicateurs[193]=indicateurs[186]-indicateurs[187],
indicateurs[194]=indicateurs[187]-indicateurs[188],
indicateurs[195]=base.cti_division(indicateurs[181]-indicateurs[182],indicateurs[182])*100,
indicateurs[196]=base.cti_division(indicateurs[182]-indicateurs[183],indicateurs[183])*100,
indicateurs[197]=base.cti_division(indicateurs[183]-indicateurs[184],indicateurs[184])*100,
indicateurs[198]=base.cti_division(indicateurs[185]-indicateurs[186],indicateurs[186])*100,
indicateurs[199]=base.cti_division(indicateurs[186]-indicateurs[187],indicateurs[187])*100,
indicateurs[200]=base.cti_division(indicateurs[187]-indicateurs[188],indicateurs[188])*100,
indicateurs[209]=indicateurs[201]-indicateurs[202],
indicateurs[210]=indicateurs[202]-indicateurs[203],
indicateurs[211]=indicateurs[203]-indicateurs[204],
indicateurs[212]=indicateurs[205]-indicateurs[206],
indicateurs[213]=indicateurs[206]-indicateurs[207],
indicateurs[214]=indicateurs[207]-indicateurs[208],
indicateurs[215]=base.cti_division(indicateurs[201]-indicateurs[202],indicateurs[202])*100,
indicateurs[216]=base.cti_division(indicateurs[202]-indicateurs[203],indicateurs[203])*100,
indicateurs[217]=base.cti_division(indicateurs[203]-indicateurs[204],indicateurs[204])*100,
indicateurs[218]=base.cti_division(indicateurs[205]-indicateurs[206],indicateurs[206])*100,
indicateurs[219]=base.cti_division(indicateurs[206]-indicateurs[207],indicateurs[207])*100,
indicateurs[220]=base.cti_division(indicateurs[207]-indicateurs[208],indicateurs[208])*100,
indicateurs[229]=indicateurs[221]-indicateurs[222],
indicateurs[230]=indicateurs[222]-indicateurs[223],
indicateurs[231]=indicateurs[223]-indicateurs[224],
indicateurs[232]=indicateurs[225]-indicateurs[226],
indicateurs[233]=indicateurs[226]-indicateurs[227],
indicateurs[234]=indicateurs[227]-indicateurs[228],
indicateurs[235]=base.cti_division(indicateurs[221]-indicateurs[222],indicateurs[222])*100,
indicateurs[236]=base.cti_division(indicateurs[222]-indicateurs[223],indicateurs[223])*100,
indicateurs[237]=base.cti_division(indicateurs[223]-indicateurs[224],indicateurs[224])*100,
indicateurs[238]=base.cti_division(indicateurs[225]-indicateurs[226],indicateurs[226])*100,
indicateurs[239]=base.cti_division(indicateurs[226]-indicateurs[227],indicateurs[227])*100,
indicateurs[240]=base.cti_division(indicateurs[227]-indicateurs[228],indicateurs[228])*100,
indicateurs[249]=indicateurs[241]-indicateurs[242],
indicateurs[250]=indicateurs[242]-indicateurs[243],
indicateurs[251]=indicateurs[243]-indicateurs[244],
indicateurs[252]=indicateurs[245]-indicateurs[246],
indicateurs[253]=indicateurs[246]-indicateurs[247],
indicateurs[254]=indicateurs[247]-indicateurs[248],
indicateurs[255]=base.cti_division(indicateurs[241]-indicateurs[242],indicateurs[242])*100,
indicateurs[256]=base.cti_division(indicateurs[242]-indicateurs[243],indicateurs[243])*100,
indicateurs[257]=base.cti_division(indicateurs[243]-indicateurs[244],indicateurs[244])*100,
indicateurs[258]=base.cti_division(indicateurs[245]-indicateurs[246],indicateurs[246])*100,
indicateurs[259]=base.cti_division(indicateurs[246]-indicateurs[247],indicateurs[247])*100,
indicateurs[260]=base.cti_division(indicateurs[247]-indicateurs[248],indicateurs[248])*100,
indicateurs[269]=indicateurs[261]-indicateurs[262],
indicateurs[270]=indicateurs[262]-indicateurs[263],
indicateurs[271]=indicateurs[263]-indicateurs[264],
indicateurs[272]=indicateurs[265]-indicateurs[266],
indicateurs[273]=indicateurs[266]-indicateurs[267],
indicateurs[274]=indicateurs[267]-indicateurs[268],
indicateurs[275]=base.cti_division(indicateurs[261]-indicateurs[262],indicateurs[262])*100,
indicateurs[276]=base.cti_division(indicateurs[262]-indicateurs[263],indicateurs[263])*100,
indicateurs[277]=base.cti_division(indicateurs[263]-indicateurs[264],indicateurs[264])*100,
indicateurs[278]=base.cti_division(indicateurs[265]-indicateurs[266],indicateurs[266])*100,
indicateurs[279]=base.cti_division(indicateurs[266]-indicateurs[267],indicateurs[267])*100,
indicateurs[280]=base.cti_division(indicateurs[267]-indicateurs[268],indicateurs[268])*100,
indicateurs[289]=indicateurs[281]-indicateurs[282],
indicateurs[290]=indicateurs[282]-indicateurs[283],
indicateurs[291]=indicateurs[283]-indicateurs[284],
indicateurs[292]=indicateurs[285]-indicateurs[286],
indicateurs[293]=indicateurs[286]-indicateurs[287],
indicateurs[294]=indicateurs[287]-indicateurs[288],
indicateurs[295]=base.cti_division(indicateurs[281]-indicateurs[282],indicateurs[282])*100,
indicateurs[296]=base.cti_division(indicateurs[282]-indicateurs[283],indicateurs[283])*100,
indicateurs[297]=base.cti_division(indicateurs[283]-indicateurs[284],indicateurs[284])*100,
indicateurs[298]=base.cti_division(indicateurs[285]-indicateurs[286],indicateurs[286])*100,
indicateurs[299]=base.cti_division(indicateurs[286]-indicateurs[287],indicateurs[287])*100,
indicateurs[300]=base.cti_division(indicateurs[287]-indicateurs[288],indicateurs[288])*100
'
;
END IF;
-- Si evolution comparative, transformation des colonnes en lignes d'indicateurs
IF _VIEWTYPE = 'EVOLCOMP' THEN
EXECUTE('
DROP TABLE IF EXISTS w_evolcomp_indicateurs
;
CREATE TEMP TABLE w_evolcomp_indicateurs AS
SELECT property, property_value, substr(property,9,3)::integer AS indicateur_num, (substr(property,9,3)::integer-1)*20 AS indicateur_index
FROM cti_get_columns_from_indicateurs_properties
WHERE property LIKE ''DG\_LHEAD%''
;
UPDATE w_table SET
level = 2,
oidt = oid2,
textet = texte2,
labelt = texte2,
oid1 = oid2,
code1 = code2,
texte1 = texte2,
oid2 = oid1,
code2 = code1,
texte2 = texte1,
oid3 = oid1,
code3 = code1,
texte3 = texte1 ,
oid = oid1,
code = code1,
texte = texte1
;
DROP TABLE IF EXISTS w_table_evolcomp
;
CREATE TEMP TABLE w_table_evolcomp AS
SELECT
w_table.work_table_sequence,
0::bigint AS sort,
w_table.level,
CASE WHEN w_table.oidt = -9999999 THEN 1 ELSE w_table.oidt END AS oidt,
CASE WHEN w_table.oidt = -9999999 THEN '' Synthèse'' ELSE w_table.labelt END AS labelt,
CASE WHEN w_table.oidt = -9999999 THEN ''Synthèse'' ELSE w_table.textet END,
w_table.oid1 ,
w_table.code1,
w_table.texte1,
indicateur_num AS oid2 ,
to_char(indicateur_num,''FM000'') AS code2,
property_value AS texte2,
w_table.oid3,
w_table.code3,
w_table.texte3,
w_table.oid ,
w_table.code,
w_table.texte,
w_table.other_fields,
w_table.significant_data,
CASE WHEN w_table.level = 2 THEN
Array[
indicateurs[indicateur_index+01],
indicateurs[indicateur_index+02],
indicateurs[indicateur_index+03],
indicateurs[indicateur_index+04],
indicateurs[indicateur_index+05],
indicateurs[indicateur_index+06],
indicateurs[indicateur_index+07],
indicateurs[indicateur_index+08],
indicateurs[indicateur_index+09],
indicateurs[indicateur_index+10],
indicateurs[indicateur_index+11],
indicateurs[indicateur_index+12],
indicateurs[indicateur_index+13],
indicateurs[indicateur_index+14],
indicateurs[indicateur_index+15],
indicateurs[indicateur_index+16],
indicateurs[indicateur_index+17],
indicateurs[indicateur_index+18],
indicateurs[indicateur_index+19],
indicateurs[indicateur_index+20]
] ELSE NULL END AS indicateurs,
w_table.work_indicateurs,
w_table.indicateurs_text,
w_table.q_special
FROM w_table
JOIN w_evolcomp_indicateurs ON 1=1
WHERE w_table.oid <> -9999999
;
DROP TABLE IF EXISTS w_table_evolcomp_compare
;
CREATE TEMP TABLE w_table_evolcomp_compare AS
SELECT row_number() OVER (PARTITION BY oidt, oid1, oid2 ORDER BY code) AS n,
oidt||''-''||oid1||''-''||oid2 AS indicateur_code,
NULL::numeric[] AS indicateurs_p,
''''::text AS code_p,
*
FROM w_table_evolcomp
WHERE level = 2
;
UPDATE w_table_evolcomp_compare SET
code_p = w_table_evolcomp_compare_p.code,
indicateurs_p = ARRAY[
w_table_evolcomp_compare_p.indicateurs[01],
w_table_evolcomp_compare_p.indicateurs[02],
w_table_evolcomp_compare_p.indicateurs[03],
w_table_evolcomp_compare_p.indicateurs[04],
w_table_evolcomp_compare_p.indicateurs[05],
w_table_evolcomp_compare_p.indicateurs[06],
w_table_evolcomp_compare_p.indicateurs[07],
w_table_evolcomp_compare_p.indicateurs[08],
w_table_evolcomp_compare_p.indicateurs[09],
w_table_evolcomp_compare_p.indicateurs[10],
w_table_evolcomp_compare_p.indicateurs[11],
w_table_evolcomp_compare_p.indicateurs[12],
w_table_evolcomp_compare_p.indicateurs[13],
w_table_evolcomp_compare_p.indicateurs[14],
w_table_evolcomp_compare_p.indicateurs[15],
w_table_evolcomp_compare_p.indicateurs[16],
w_table_evolcomp_compare_p.indicateurs[17],
w_table_evolcomp_compare_p.indicateurs[18],
w_table_evolcomp_compare_p.indicateurs[19],
w_table_evolcomp_compare_p.indicateurs[20]
]
FROM w_table_evolcomp_compare w_table_evolcomp_compare_p
WHERE w_table_evolcomp_compare.indicateur_code = w_table_evolcomp_compare_p.indicateur_code AND
w_table_evolcomp_compare.n = w_table_evolcomp_compare_p.n+1
;
INSERT INTO w_table_evolcomp
SELECT
work_table_sequence,
0::bigint AS sort,
level,
oidt,
labelt,
textet,
oid1,
code1,
texte1,
oid2,
code2,
texte2,
oid3,
code3 || ''E'',
texte3,
oid,
code || ''E'',
''Evolution ''||code||''-''||code_p,
other_fields,
significant_data,
CASE WHEN level = 2 THEN
Array[
indicateurs[01]-indicateurs_p[01],
indicateurs[02]-indicateurs_p[02],
indicateurs[03]-indicateurs_p[03],
indicateurs[04]-indicateurs_p[04],
indicateurs[05]-indicateurs_p[05],
indicateurs[06]-indicateurs_p[06],
indicateurs[07]-indicateurs_p[07],
indicateurs[08]-indicateurs_p[08],
indicateurs[09]-indicateurs_p[09],
indicateurs[10]-indicateurs_p[10],
indicateurs[11]-indicateurs_p[11],
indicateurs[12]-indicateurs_p[12],
indicateurs[13]-indicateurs_p[13],
indicateurs[14]-indicateurs_p[14],
indicateurs[15]-indicateurs_p[15],
indicateurs[16]-indicateurs_p[16],
indicateurs[17]-indicateurs_p[17],
indicateurs[18]-indicateurs_p[18],
indicateurs[19]-indicateurs_p[19],
indicateurs[20]-indicateurs_p[20]
] ELSE NULL END AS indicateurs,
work_indicateurs,
indicateurs_text,
q_special
FROM w_table_evolcomp_compare
WHERE n > 1
;
INSERT INTO w_table_evolcomp
SELECT
work_table_sequence,
0::bigint AS sort,
level,
oidt,
labelt,
textet,
oid1,
code1,
texte1,
oid2,
code2,
texte2,
oid3,
code3 || ''P'',
texte3,
oid,
code || ''P'',
''% Evolution ''||code||''-''||code_p,
other_fields,
significant_data,
CASE WHEN level = 2 THEN
Array[
base.cti_division(indicateurs[01]-indicateurs_p[01],indicateurs_p[01])*100,
base.cti_division(indicateurs[02]-indicateurs_p[02],indicateurs_p[02])*100,
base.cti_division(indicateurs[03]-indicateurs_p[03],indicateurs_p[03])*100,
base.cti_division(indicateurs[04]-indicateurs_p[04],indicateurs_p[04])*100,
base.cti_division(indicateurs[05]-indicateurs_p[05],indicateurs_p[05])*100,
base.cti_division(indicateurs[06]-indicateurs_p[06],indicateurs_p[06])*100,
base.cti_division(indicateurs[07]-indicateurs_p[07],indicateurs_p[07])*100,
base.cti_division(indicateurs[08]-indicateurs_p[08],indicateurs_p[08])*100,
base.cti_division(indicateurs[09]-indicateurs_p[09],indicateurs_p[09])*100,
base.cti_division(indicateurs[10]-indicateurs_p[10],indicateurs_p[10])*100,
base.cti_division(indicateurs[11]-indicateurs_p[11],indicateurs_p[11])*100,
base.cti_division(indicateurs[12]-indicateurs_p[12],indicateurs_p[12])*100,
base.cti_division(indicateurs[13]-indicateurs_p[13],indicateurs_p[13])*100,
base.cti_division(indicateurs[14]-indicateurs_p[14],indicateurs_p[14])*100,
base.cti_division(indicateurs[15]-indicateurs_p[15],indicateurs_p[15])*100,
base.cti_division(indicateurs[16]-indicateurs_p[16],indicateurs_p[16])*100,
base.cti_division(indicateurs[17]-indicateurs_p[17],indicateurs_p[17])*100,
base.cti_division(indicateurs[18]-indicateurs_p[18],indicateurs_p[18])*100,
base.cti_division(indicateurs[19]-indicateurs_p[19],indicateurs_p[19])*100,
base.cti_division(indicateurs[20]-indicateurs_p[20],indicateurs_p[20])*100
] ELSE NULL END AS indicateurs,
work_indicateurs,
indicateurs_text,
q_special
FROM w_table_evolcomp_compare
WHERE n > 1
;
INSERT INTO w_table_evolcomp
SELECT
work_table_sequence,
0::bigint AS sort,
1 AS level,
oidt,
labelt,
textet,
oid1 ,
code1,
texte1,
oid2 ,
code2,
texte2,
-9999999 ,
chr(1),
'''',
oid2 AS oid ,
code2 AS code,
texte2 AS texte,
NULL,
NULL,
NULL AS indicateurs,
NULL AS work_indicateurs,
NULL AS indicateurs_text,
''0'' AS q_special
FROM w_table_evolcomp
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12
;
TRUNCATE w_table
;
INSERT INTO w_table
SELECT * FROM w_table_evolcomp
');
END IF;
UPDATE w_table SET absolute_sum = (SELECT SUM(ABS(s)) FROM UNNEST(indicateurs) s)
;
RETURN 'OK';
END;

+ 5
- 0
db/schema2/sequences/s_article_fournisseur.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_article_reference_cacic.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_article_reference_cti.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_articles.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_categories_articles.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_centres_responsabilites.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_chart.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_classes.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_classes_sections.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_classification_atc.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_codes_emploi.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_commandes.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_compte.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_dashboard.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_dashboard_filter.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_dashboard_onglet.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_dashboard_widget.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_facture.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_familles_articles.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_fournisseur_reference_cacic.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_fournisseur_reference_cti.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_fournisseurs.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_gestionnaires.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_indicateur_condition.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_indicateur_condition_table.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_indicateur_serie.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_indicateur_theme.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_indicateurs.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_lettre_budgetaire.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_lieux.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_lignes_commandes.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_lignes_facture.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_listes.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_listes_tables.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_mouvements_articles.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_pole_rule.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_profils_comptables.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_prorata_tva.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_rapports.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

+ 5
- 0
db/schema2/sequences/s_reference_input.yaml View File

@ -0,0 +1,5 @@
min: NO MINVALUE
max: NO MAXVALUE
start: 1
increment: 1
cache: 1

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save