on remonte toutes les entités. when (SELECT max(length(rhp_in)) = 9 from (select rhp_in('siren')) as subq) THEN substr(siret, 1, 9) IN (SELECT rhp_in('siren')) -- Un ou des SIREN paramétrés => on remonte toutes les entreprises associées (sur 9 cars). when (SELECT max(length(rhp_in)) = 2 from (select rhp_in('siren')) as subq) THEN ste IN (SELECT rhp_in('siren')) -- ste else siret IN (SELECT rhp_in('siren')) -- Un ou des SIRET paramétrés => on remonte tous les établissements associés (sur 14 cars). end ; -- Màj des Depts. INSERT INTO rh.t_departements(code, texte, texte_court) SELECT code_departement, libelle, substr(libelle,1,50) FROM prod_sigems.departement WHERE code_departement NOT IN (SELECT code FROM rh.t_departements) ; -- Màj des Entreprises INSERT INTO rh.t_entreprises(code, texte, texte_court, code_original, siren) SELECT etab.ste, max(etab.nometab1), max(substr(etab.nometab1, 1, 50)), etab.ste, substr(etab.siret, 1, 9) FROM prod_sigems.etab JOIN w_ets ON 1=1 AND w_ets.ste = etab.ste AND w_ets.etbl = etab.etbl WHERE etab.ste NOT IN (SELECT code_original FROM rh.t_entreprises) GROUP BY 1,4,5 ; with ent as ( SELECT t_entreprises.oid, substr(etab.siret, 1, 9) AS siren FROM rh.t_entreprises JOIN prod_sigems.etab on etab.ste = t_entreprises.code_original) UPDATE rh.t_entreprises SET siren = ent.siren FROM ent WHERE 1=1 and t_entreprises.oid = ent.oid and t_entreprises.siren IS DISTINCT FROM ent.siren ; -- Màj des Etablissements INSERT INTO rh.t_etablissements(code, texte, texte_court, code_original, entreprise_id, siret) SELECT etab.etbl, etab.nometab1, substr(etab.nometab1, 1, 50), etab.ste||etab.etbl, t_entreprises.oid, etab.siret FROM prod_sigems.etab JOIN w_ets ON 1=1 AND w_ets.ste = etab.ste AND w_ets.etbl = etab.etbl JOIN rh.t_entreprises ON t_entreprises.code_original = etab.ste WHERE etab.ste||etab.etbl NOT IN (SELECT code_original FROM rh.t_etablissements) GROUP BY 1,2,3,4,5,6 ; with eta as ( SELECT t_etablissements.oid, etab.siret as siret FROM rh.t_etablissements JOIN prod_sigems.etab on etab.ste||etab.etbl = t_etablissements.code_original) UPDATE rh.t_etablissements SET siret = eta.siret FROM eta WHERE 1=1 and t_etablissements.oid = eta.oid and t_etablissements.siret IS DISTINCT FROM eta.siret ; -- Màj des catégories socio-professionnelles INSERT INTO rh.t_categories_socio_professionnelle (code, texte, texte_court, code_original) SELECT lower(c_pcs), libelpcs, substr(libelpcs,1,50), lower(c_pcs) FROM prod_sigems.ipcs WHERE lower(c_pcs) NOT IN (SELECT code_original FROM rh.t_categories_socio_professionnelle) AND c_pcs != '' GROUP BY 1,2,3,4 ; -- KO Màj des groupes cotisants. INSERT INTO rh.t_groupes_cotisant(code, texte, texte_court, code_original) SELECT c_group,lib_group,substr(lib_group,1,50),c_group FROM prod_sigems.groupe_fiehp WHERE c_group NOT IN (SELECT code_original FROM rh.t_groupes_cotisant) GROUP BY 1,2,3,4 ; -- Màj des motifs de début de contrat DROP TABLE IF EXISTS w_tmp_mar_0 ; CREATE TEMP TABLE w_tmp_mar_0 AS SELECT motif_abs AS libelle, upper(translate(translate(motif_abs,'éèà','eea'),' -)(','')) AS libellecode FROM prod_sigems.REMPLACEMENT GROUP BY 1,2 ; DROP TABLE IF EXISTS w_tmp_mar_1 ; CREATE TEMP TABLE w_tmp_mar_1 AS SELECT rpad(substr(libellecode,1,4) || substr(upper(md5(libelle)),1,2),6,'0') as code, libelle as code_original FROM w_tmp_mar_0 ; INSERT INTO rh.t_motifs_debut_contrat(code, code_original, texte, texte_court) SELECT motif_deb||CASE WHEN motif_abs IS NULL OR trim(motif_abs) = '' THEN '000000' ELSE w_tmp_mar_1.code END as code, motif_deb||CASE WHEN w_tmp_mar_1.code_original IS NULL THEN '' ELSE w_tmp_mar_1.code_original END as code_original, CASE WHEN motif_abs IS NULL OR trim(motif_abs) = '' THEN DADSU_TABLES.libelle ELSE substr(DADSU_TABLES.libelle,1,10)||' '||motif_abs END as texte, substr(CASE WHEN motif_abs IS NULL OR trim(motif_abs) = '' THEN DADSU_TABLES.libelle ELSE substr(DADSU_TABLES.libelle,1,10)||' '||motif_abs END,1,50) as texte_court FROM prod_sigems.CONTRATS_PB LEFT JOIN prod_sigems.DADSU_TABLES ON DADSU_TABLES.code = CONTRATS_PB.motif_deb LEFT JOIN prod_sigems.REMPLACEMENT ON REMPLACEMENT.id_cont = CONTRATS_PB.id_cont LEFT JOIN w_tmp_mar_1 ON w_tmp_mar_1.code_original = REMPLACEMENT.motif_abs WHERE 1=1 AND DADSU_TABLES.code_structure = 'S41.G01.00.002.001' AND (motif_deb||CASE WHEN w_tmp_mar_1.code_original IS NULL THEN '' ELSE w_tmp_mar_1.code_original END) NOT IN (SELECT code_original FROM rh.t_motifs_debut_contrat) AND motif_deb IS NOT NULL AND trim(motif_deb) <> '' GROUP BY 1,2,3,4 ORDER BY 1,2 ; -- Màj des motifs de fin de contrat INSERT INTO rh.t_motifs_fin_contrat(code, texte, texte_court, code_original) SELECT code, libelle, substr(libelle,1,50), code FROM prod_sigems.dadsu_tables WHERE code NOT IN (SELECT code_original FROM rh.t_motifs_fin_contrat) AND code_structure = 'S41.G01.00.004.001' GROUP BY 1,2,3,4 ; /*SELECT c_motf, libelmotf, substr(libelmotf,1,50), c_motf FROM prod_sigems.motf WHERE c_motf NOT IN (SELECT code_original FROM rh.t_motifs_fin_contrat) GROUP BY 1,2,3,4*/ -- Màj des nationalités INSERT INTO rh.t_nationalites(code, texte, texte_court, code_original) SELECT c_nati, libelnati, substr(libelnati,1,50), c_nati FROM prod_sigems.nati WHERE c_nati NOT IN (SELECT code_original FROM rh.t_nationalites) GROUP BY 1,2,3,4 ; -- Màj des organismes de cotisation INSERT INTO rh.t_organismes_cotisation(code, texte, texte_court, code_original) SELECT code, libelle, substr(libelle,1,50), code FROM prod_sigems.dadsu_typcont WHERE code NOT IN (SELECT code_original FROM rh.t_organismes_cotisation) GROUP BY 1,2,3,4 ; -- Màj des codes emplois INSERT INTO rh.t_codes_emploi(code, texte, texte_court, code_original) SELECT c_empl, libelempl, substr(libelempl, 1, 50), c_empl FROM prod_sigems.empl WHERE c_empl NOT IN (SELECT code_original FROM rh.t_codes_emploi) GROUP BY 1,2,3,4 ; -- Màj des qualifications INSERT INTO rh.t_qualifications(code, texte, texte_court, code_original) SELECT c_qual, nomqual, substr(nomred,1,50), c_qual FROM prod_sigems.qual WHERE 1=1 AND trim(c_qual) != '' AND c_qual NOT IN (SELECT code_original FROM rh.t_qualifications) GROUP BY 1,2,3,4 ; UPDATE rh.t_qualifications SET texte_court = substr(texte,1,50) WHERE char_length(trim(texte_court)) = 0 ; -- Màj des rubriques INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT reduitr, libel, substr(libel,1,50), reduitr, ordre FROM prod_sigems.rub WHERE reduitr NOT IN (SELECT code_original FROM rh.t_rubriques) GROUP BY 1,2,3,4,5 ; -- (création des rubriques CTI de cumul) INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C000', 'Ecart cumulé', 'Ecart cumulé', 'C000', -1 WHERE 'C000' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C007', 'Heures payées', 'Heures payées', 'C007', -1 WHERE 'C007' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C507', 'Heures travaillées', 'Heures travaillées', 'C507', -1 WHERE 'C507' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C001', 'Brut', 'Brut', 'C001', -1 WHERE 'C001' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C003', 'Cotisations salariales', 'Cotisations salariales', 'C003', -1 WHERE 'C003' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C881', 'Heures payées cadre', 'Heures payées cadre', 'C881', -1 WHERE 'C881' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C998', 'Cotisations patronales', 'Cotisations patronales', 'C998', -1 WHERE 'C998' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C005', 'Net imposable', 'Net imposable', 'C005', -1 WHERE 'C005' NOT IN (SELECT code_original FROM rh.t_rubriques) ; INSERT INTO rh.t_rubriques(code, texte, texte_court, code_original, rang_edition) SELECT 'C011', 'Net à payer', 'Net à payer', 'C011', -1 WHERE 'C011' NOT IN (SELECT code_original FROM rh.t_rubriques) ; -- Ajout de la rubrique si elle n'existe pas déjà. INSERT INTO rh.t_rubriques(code_original, code, texte, texte_court, rang_edition) SELECT 'C714', 'C714', 'Taxe sur les salaires', 'Taxe sur les salaires', -1 WHERE 1=1 AND (SELECT valeur = '1' FROM rh.t_divers WHERE code = 'SIGEMS_TS') -- Taxe sur les salaires que si l'option a été définie à 1. AND 'C714' NOT IN (SELECT code_original FROM rh.t_rubriques) ; -- Mà des Comptes. INSERT INTO rh.t_compte(code_original, code, texte, texte_court) SELECT n_cpt, n_cpt, n_cpt, n_cpt FROM prod_sigems.rub WHERE 1=1 and n_cpt NOT IN (SELECT code_original FROM rh.t_compte WHERE code_original IS NOT NULL) and length(trim(n_cpt)) > 0 GROUP BY 1,2,3,4 ; -- Màj des situations de famille INSERT INTO rh.t_situations_famille(code, texte, texte_court, code_original) SELECT cod_sit, lib_sit, substr(lib_sit,1,50), cod_sit FROM prod_sigems.situation WHERE cod_sit NOT IN (SELECT code_original FROM rh.t_situations_famille) GROUP BY 1,2,3,4 ; INSERT INTO rh.t_situations_famille(code, texte, texte_court, code_original) SELECT c_sfa, c_sfa, c_sfa, c_sfa FROM prod_sigems.pers JOIN w_ets ON w_ets.ste||w_ets.etbl = pers.ste||pers.etb WHERE c_sfa IS NOT NULL AND trim(c_sfa) <> '' AND c_sfa NOT IN (SELECT code_original FROM rh.t_situations_famille) GROUP BY 1,2,3,4 ; -- Màj des types de contrat INSERT INTO rh.t_types_contrat(code, texte, texte_court, code_original) SELECT typecont, typecont, substr(typecont,1,50), typecont FROM prod_sigems.contrats_pb WHERE typecont NOT IN (SELECT code_original FROM rh.t_types_contrat) AND typecont <> '' GROUP BY 1,2,3,4 ; /* SELECT cod_nat, lib_nat, substr(lib_nat,1,50), cod_nat FROM prod_sigems.nature_contrat WHERE cod_nat NOT IN (SELECT code_original FROM rh.t_types_contrat) GROUP BY 1,2,3,4 */ -- Màj des statuts INSERT INTO rh.t_statuts(code, texte, texte_court, code_original) SELECT c_stat, libelstat, substr(libelstat,1,50), c_stat FROM prod_sigems.stat WHERE c_stat NOT IN (SELECT code_original FROM rh.t_statuts) GROUP BY 1,2,3,4 ; -- Màj des types de temps de travail INSERT INTO rh.t_types_temps_travail(code_original, code, texte, texte_court) SELECT caract, caract, caract, caract FROM prod_sigems.contrats_pb WHERE caract NOT IN (SELECT code_original FROM rh.t_types_temps_travail) GROUP BY 1,2,3,4 ; /*SELECT code, code, libelle, substr(libelle,1,50) FROM prod_sigems.dadsu_tables WHERE code NOT IN (SELECT code_original FROM rh.t_types_temps_travail) AND code_structure ilike 'S41.G01.00.013%' GROUP BY 1,2,3,4*/ -- Màj des services INSERT INTO rh.t_services(code_original, code, texte, texte_court) SELECT c_serv, c_serv, nomserv, substr(nomserv,1,50) FROM prod_sigems.serv WHERE c_serv NOT IN (SELECT code_original FROM rh.t_services) GROUP BY 1,2,3,4 ; -- Màj des spécialités INSERT INTO rh.t_specialites(code_original, code, texte, texte_court) SELECT cod_spe, cod_spe, lib_spe, substr(lib_spe,1,50) FROM prod_sigems.specialite WHERE cod_spe NOT IN (SELECT code_original FROM rh.t_specialites) GROUP BY 1,2,3,4 ; -- Màj des types d'horaire INSERT INTO rh.t_types_horaire(code_original, code, texte, texte_court) -- SELECT cod_hor, cod_hor, lib_hor, substr(lib_hor,1,50) -- FROM prod_sigems.horaire -- WHERE cod_hor NOT IN (SELECT code_original FROM rh.t_types_horaire) -- GROUP BY 1,2,3,4 SELECT c_ssec, c_ssec, c_ssec, substr(c_ssec, 1, 50) FROM prod_sigems.contrats_pb WHERE c_ssec NOT IN (SELECT code_original FROM rh.t_types_horaire) GROUP BY 1,2,3,4 ; -- Màj des sociétés d'interim -- Màj des grilles -- Suppression doublons suite à bug (à enlever en mars 2023) DELETE FROM rh.t_grilles USING ( SELECT code_original, count(*), MAX(CASE WHEN oid IN (SELECT grille_id FROM rh.p_profils) THEN oid ELSE 0 END) AS last_use, MIN(oid) AS first_create FROM rh.t_grilles WHERE oid <> 0 GROUP BY 1 HAVING count(*) > 1 ) subview WHERE t_grilles.code_original = subview.code_original AND ( t_grilles.oid <> last_use AND last_use > 0 OR t_grilles.oid <> first_create AND last_use = 0 ) ; -- Ajout des nouvelles INSERT INTO rh.t_grilles(code_original, code, texte, texte_court) SELECT lpad(c_group,2,'0')||lpad(qualif,4,'0'), lpad(c_group,2,'0')||lpad(qualif,4,'0'), lib_group||CASE WHEN qualif <> '' THEN ' Q'||qualif ELSE '' END, substr(lib_group||CASE WHEN qualif <> '' THEN ' Q'||qualif ELSE '' END,1,50) FROM prod_sigems.groupe_fiehp WHERE lpad(c_group,2,'0')||lpad(qualif,4,'0') NOT IN (SELECT code_original FROM rh.t_grilles) GROUP BY 1,2,3,4 ; -- Màj des groupes de grilles INSERT INTO rh.t_grilles_groupes(code_original, code, texte, texte_court) SELECT c_group, c_group, lib_group, substr(lib_group,1,50) FROM prod_sigems.groupe_fiehp WHERE c_group NOT IN (SELECT code_original FROM rh.t_grilles_groupes) GROUP BY 1,2,3,4 ; -- Màj des motifs d'arret INSERT INTO rh.t_motifs_arret(code_original, code, texte, texte_court) SELECT code, code, lib, substr(lib,1,50) FROM prod_sigems.motif_arret WHERE code NOT IN (SELECT code_original FROM rh.t_motifs_arret) GROUP BY 1,2,3,4 ; -- Màj des précisions du motif d'arrêt -- Màj des motifs de visite médicale INSERT INTO rh.t_motifs_visite(code_original, code, texte, texte_court) SELECT code, code, libelle, substr(libelle,1,50) FROM prod_sigems.MOTIF_VISMED WHERE code NOT IN (SELECT code_original FROM rh.t_motifs_visite) GROUP BY 1,2,3,4 ; -- Màj des circonstances d'accident du travail INSERT INTO rh.t_accident_circonstance(code_original, code, texte, texte_court) SELECT code, code, libelle, substr(libelle,1,50) FROM prod_sigems.acc_circst WHERE code NOT IN (SELECT code_original FROM rh.t_accident_circonstance) AND code <> '' AND code IS DISTINCT FROM NULL GROUP BY 1,2,3,4 ; -- Màj des lieux d'accident du travail DROP TABLE IF EXISTS w_tmp_lieu_0 ; CREATE TEMP TABLE w_tmp_lieu_0 AS SELECT lieu as libelle, upper(translate(translate(lieu,'éèà','eea'),' ,-)(+/''','')) AS libellecode FROM prod_sigems.acctravail WHERE lieu <> '' AND lieu IS DISTINCT FROM NULL ; DROP TABLE IF EXISTS w_tmp_lieu_1 ; CREATE TEMP TABLE w_tmp_lieu_1 AS SELECT rpad(substr(libellecode,1,4) || substr(upper(md5(libelle)),1,2),6,'0') as code, libelle as code_original FROM w_tmp_lieu_0 ; INSERT INTO rh.t_accident_lieu(code_original, code, texte, texte_court) SELECT code_original, code, code_original, substr(code_original,1,50) FROM w_tmp_lieu_1 WHERE code_original NOT IN (SELECT code_original FROM rh.t_accident_lieu) GROUP BY 1,2,3,4 ; -- Màj de la nature de l'accident du travail INSERT INTO rh.t_accident_nature(code_original, code, texte, texte_court) SELECT code, code, libelle, substr(libelle,1,50) FROM prod_sigems.acc_nature WHERE code NOT IN (SELECT code_original FROM rh.t_accident_nature) AND code <> '' AND code IS DISTINCT FROM NULL GROUP BY 1,2,3,4 ; -- Màj des sièges d'accident du travail INSERT INTO rh.t_accident_siege(code_original, code, texte, texte_court) SELECT code, code, libelle, substr(libelle,1,50) FROM prod_sigems.acc_siege WHERE code NOT IN (SELECT code_original FROM rh.t_accident_siege) AND code <> '' AND code IS DISTINCT FROM NULL GROUP BY 1,2,3,4 ; -- Màj des listes de formations INSERT INTO rh.t_liste_formations(code_original, code, texte, texte_court) SELECT id_formation, id_formation, libelfrma, substr(libelfrma,1,50) FROM prod_sigems.frma WHERE id_formation NOT IN (SELECT code_original FROM rh.t_liste_formations) GROUP BY 1,2,3,4 ; ]]> = 2014 GROUP BY 1,2,3 ; ]]> 1 ) SELECT (CASE WHEN dtdebu IS DISTINCT FROM NULL AND char_length(dtdebu) > 0 THEN dtdebu ELSE '1900-01-01' END)::date AS date_debut, (CASE WHEN dtsort IS DISTINCT FROM NULL AND char_length(dtsort) > 0 THEN dtsort ELSE '2099-12-31' END)::date AS date_fin, mat||'-'||id_cont AS u_id_cont, -- Attention : u_id_cont n'est pas forcément chronologique, d'où rang_contrat. rank() OVER (PARTITION BY mat ORDER BY (CASE WHEN dtdebu IS DISTINCT FROM NULL AND char_length(dtdebu) > 0 THEN dtdebu ELSE '1900-01-01' END)::date) rang_contrat, contrats_pb.* FROM prod_sigems.contrats_pb JOIN w_ets ON 1=1 AND w_ets.ste = contrats_pb.soc AND w_ets.etbl = contrats_pb.etb left join discarded_cnt on discarded_cnt.dc_id_cont = contrats_pb.id_cont WHERE 1=1 AND dtdebu IS NOT NULL AND mat IS DISTINCT FROM NULL AND mat != '' AND mat NOT IN (SELECT mat FROM w_exc_mat) and discarded_cnt.dc_mat is null ; -- #correction Lorsque le statut n'est pas alimenté une seule fois pour un matricule, -- utiliser le statut de la fiche salarié UPDATE w_cnt SET c_stat = pers.c_stat FROM prod_sigems.pers, w_ets WHERE 1=1 AND pers.mat = w_cnt.mat AND w_ets.ste||w_ets.etbl = pers.ste||pers.etb AND w_cnt.mat IN ( SELECT mat FROM w_cnt WHERE 1!=1 OR c_stat IS NULL OR char_length(c_stat) = 0 GROUP BY 1) ; -- Création d'un table propre des remplacements DROP TABLE IF EXISTS w_rmp ; CREATE TEMP TABLE w_rmp AS SELECT id_cont, max(motif_abs) AS motif_abs FROM prod_sigems.remplacement GROUP BY 1 ; -- Création d'un table temp de profils DROP TABLE IF EXISTS w_profils ; CREATE TEMP TABLE w_profils AS SELECT 0 as profil_id, w_cnt.soc as ste, w_cnt.etb, w_cnt.mat, w_cnt.date_debut as grh_dtdu, w_cnt.date_fin as grh_dtau, w_cnt.id_cont, w_cnt.u_id_cont, w_cnt.rang_contrat, w_cnt.nbh_mens, w_cnt.date_debut as contrat_dtdu, w_cnt.date_fin as contrat_dtau, -- Champs dédiés au privé. COALESCE(lower(pers.c_pcs),chr(1)||'*') AS categorie_socio_professionnelle_code_original, COALESCE(pers.c_emp, chr(1)||'*') AS code_emploi_code_original, COALESCE(lpad(groupe_fiehp.c_group, 2, '0')||lpad(groupe_fiehp.qualif, 4, '0'), chr(1)||'*') AS grille_code_original, COALESCE(groupe_fiehp.c_group, chr(1)||'*') AS grille_groupe_code_original, chr(1)||'*' AS groupe_cotisant_code_original, COALESCE(w_cnt.motif_deb||CASE WHEN w_rmp.motif_abs IS NULL THEN '' ELSE w_rmp.motif_abs END, chr(1)||'*') AS motif_debut_code_original, COALESCE(w_cnt.motif_fin,chr(1)||'*') AS motif_fin_code_original, COALESCE(pers.c_qual, chr(1)||'*') AS qualification_code_original, chr(1)||'*' AS section_analytique_code_original, chr(1)||'*' AS section_analytique_paie_code_original, COALESCE(nullif(trim(w_cnt.serv), ''), nullif(trim(pers.c_serv), ''), chr(1)||'*') AS service_code_original, chr(1)||'*' AS societe_interim_code_original, chr(1)||'*' AS specialite_code_original, COALESCE(w_cnt.c_stat,chr(1)||'*') AS statut_code_original, COALESCE(w_cnt.typecont,chr(1)||'*') AS type_contrat_code_original, --GREATEST(w_cnt.nature,chr(1)||'*') AS type_contrat_code_original, COALESCE(nullif(trim(w_cnt.c_ssec), ''), chr(1)||'*') AS type_horaire_code_original, COALESCE(w_cnt.caract,chr(1)||'*') AS type_temps_travail_code_original, -- Champs dédiés au public. chr(1)||'*' AS unite_fonctionnelle_code_original, chr(1)||'*' AS categorie_conge_code_original, chr(1)||'*' AS compte_salarie_code_original, chr(1)||'*' AS commission_paritaire_code_original, chr(1)||'*' AS lettre_budgetaire_code_original, chr(1)||'*' AS cadre_emploi_code_original, chr(1)||'*' AS filiere_code_original, chr(1)||'*' AS categorie_statutaire_code_original FROM w_cnt LEFT JOIN prod_sigems.pers on 1=1 AND pers.mat = w_cnt.mat AND pers.ste = w_cnt.soc AND pers.etb = w_cnt.etb LEFT JOIN prod_sigems.groupe_fiehp on 1=1 AND groupe_fiehp.qualif = pers.c_qual AND groupe_fiehp.qualif <> '' AND groupe_fiehp.qualif IS DISTINCT FROM NULL LEFT JOIN w_rmp ON w_rmp.id_cont = w_cnt.id_cont WHERE w_cnt.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ; ]]> 'O' AND trim(pers.mat) != '' AND pers.ste != 'XX' AND pers.etb != 'XX' AND pers.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20,21,22,23,24,25,26 ; -- Les dates d'entrée et de sortie établissement sont calculées à partir des contrats. UPDATE w_salaries SET date_entree_ets = date_debut, date_sortie_ets = date_fin ; ]]> '' GROUP BY 1,2,3,4,5,6,7 ; -- Ajout des salariés remplacés UPDATE rh.p_contrats SET salarie_remplace_id = subq.salarie_remplace_id FROM ( SELECT mat||'-'||id_cont AS u_id_cont, max(p_salaries.oid) AS salarie_remplace_id FROM prod_sigems.remplacement JOIN rh.p_salaries on p_salaries.matricule = remplacement.mat_abs WHERE 1=1 AND id_cont <> 0 AND mat_abs IS NOT NULL AND mat_abs <> '' GROUP BY 1 ) AS subq WHERE numero_contrat = subq.u_id_cont ; -- Calcul ancienneté au début de contrat UPDATE rh.p_contrats SET anciennete_anterieure_jours = subq.anciennete_anterieure_jours, anciennete_anterieure_calculee_mois = subq.anciennete_anterieure_calculee_mois FROM ( SELECT t1.u_id_cont AS numero_contrat, sum(coalesce(t2.contrat_dtau::date, '20991231'::date) - t2.contrat_dtdu::date + 1) AS anciennete_anterieure_jours, sum(coalesce(t2.contrat_dtau::date, '20991231'::date) - t2.contrat_dtdu::date + 1) / 30 AS anciennete_anterieure_calculee_mois FROM w_contrats AS t1 JOIN w_contrats AS t2 ON 1=1 AND t2.mat = t1.mat AND t2.rang_contrat < t1.rang_contrat group by 1 ) AS subq WHERE 1=1 AND p_contrats.numero_contrat = subq.numero_contrat ; -- Ventilation des contrats par mois TRUNCATE rh.p_contrats_mois ; ALTER SEQUENCE rh.s_contrats_mois RESTART WITH 1 ; INSERT INTO rh.p_contrats_mois( salarie_id, contrat_id, mois_activite, date_debut, date_fin, nombre_entrees, nombre_departs, nombre_debut_contrat, nombre_fin_contrat, est_hors_periode, present_debut_mois, present_fin_mois, nombre_heures, ratio_temps_travail, equivalent_temps_plein, age_id, age_jours, anciennete_jours, anciennete_mois, anciennete_annee_id) SELECT p_contrats.salarie_id AS salarie_id, p_contrats.oid AS contrat_id, p_calendrier_mois.mois AS mois, GREATEST(p_calendrier_mois.date_debut, p_contrats.date_debut) AS date_debut, LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin) AS date_fin, CASE WHEN p_salaries.date_entree_ets BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_entrees, CASE WHEN p_salaries.date_sortie_ets BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_departs, CASE WHEN p_contrats.date_debut BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_debut_contrat, CASE WHEN p_contrats.date_fin BETWEEN p_calendrier_mois.date_debut AND p_calendrier_mois.date_fin THEN 1 ELSE 0 END AS nombre_fin_contrat, '0' AS est_hors_periode, CASE WHEN p_calendrier_mois.date_debut BETWEEN p_contrats.date_debut AND p_contrats.date_fin THEN 1 ELSE 0 END AS present_debut_mois, CASE WHEN p_calendrier_mois.date_fin BETWEEN p_contrats.date_debut AND p_contrats.date_fin THEN 1 ELSE 0 END AS present_fin_mois, w_contrats.nbh_mens::numeric AS nombre_heures, -- /!\ Nombre d'heures a priori non proratisé : correspond au temps de travail. w_contrats.nbh_mens::numeric / t_etablissements.base_calcul_etp::numeric as ratio_temps_travail, -- Correspond au type de temps de travail : temps complet = 1; mi-temps = 0.5; etc. (w_contrats.nbh_mens::numeric / t_etablissements.base_calcul_etp::numeric) * ( (LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin) - GREATEST(p_calendrier_mois.date_debut, p_contrats.date_debut) + 1)::numeric / (p_calendrier_mois.date_fin - p_calendrier_mois.date_debut + 1)::numeric ) AS equivalent_temps_plein, base.cti_age(LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin), COALESCE(p_salaries.date_naissance, '1962-04-18'::date), 'ny') AS age_id, LEAST(p_calendrier_mois.date_fin, p_contrats.date_fin)::date - COALESCE(p_salaries.date_naissance, '1962-04-18'::date) AS age_jours, -- Ancienneté en jours p_contrats.anciennete_anterieure_jours + (p_calendrier_mois.date_fin - p_contrats.date_debut) + 1 AS anciennete_jours, -- Ancienneté en mois base.cti_age(date_trunc('month',p_calendrier_mois.date_fin::date)::date, date_trunc('month',p_contrats.date_debut)::date, 'nm') + GREATEST(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois) + 1 AS anciennete_mois, -- Ancienneté en années floor( (base.cti_age(date_trunc('month',p_calendrier_mois.date_fin::date)::date, date_trunc('month',p_contrats.date_debut)::date, 'nm') + GREATEST(p_contrats.anciennete_anterieure_mois, p_contrats.anciennete_anterieure_calculee_mois) + 1) / 12) AS anciennete_annee_id FROM rh.p_contrats JOIN rh.p_salaries ON p_contrats.salarie_id = p_salaries.oid JOIN rh.t_etablissements ON p_contrats.etablissement_id = t_etablissements.oid JOIN rh.t_entreprises ON t_etablissements.entreprise_id = t_entreprises.oid JOIN base.p_calendrier_mois ON (p_contrats.date_debut <= p_calendrier_mois.date_fin AND p_contrats.date_fin >= p_calendrier_mois.date_debut) JOIN w_contrats ON w_contrats.u_id_cont = p_contrats.numero_contrat GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ; -- Màj des âges négatifs (plage autorisée : 0 -> 110 ans) UPDATE rh.p_contrats_mois SET age_id = 0 WHERE age_id < 0 ; UPDATE rh.p_contrats_mois SET age_id = (SELECT max(oid) FROM rh.t_ages) WHERE age_id > (SELECT max(oid) FROM rh.t_ages) ; -- Màj des anciennetés trop grandes (plage autorisée : 0 -> 50 ans) UPDATE rh.p_contrats_mois SET anciennete_annee_id = 0 WHERE anciennete_annee_id < 0 ; UPDATE rh.p_contrats_mois SET anciennete_annee_id = (SELECT max(oid) FROM rh.t_anciennetes_annee) WHERE anciennete_annee_id > (SELECT max(oid) FROM rh.t_anciennetes_annee) ; ]]> = '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation de la colonne "Taux salarial". INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::numeric AS mois, reduitr AS rub_code, ordre, n_cpt, 0, sum(CASE WHEN typtas = 'G' THEN v_csg ELSE v_cst END), 0, 0, 0 FROM prod_sigems.phst JOIN prod_sigems.rub ON rub.c_tas = phst.num JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb JOIN (select valeur = 0 as opt_std_hp from rh.t_divers where code = 'OPT_STD_HP') as t_divers ON true WHERE 1=1 AND CASE WHEN t_divers.opt_std_hp THEN typdoc = 'B' ELSE true END AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND CASE WHEN typtas = 'G' THEN v_csg ELSE v_cst END != 0 AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation de la colonne "Montant salarial". INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::numeric AS mois, reduitr AS rub_code, ordre, n_cpt, 0, 0, sum(v_rub), 0, 0 FROM prod_sigems.phst JOIN prod_sigems.rub ON rub.c_rub = phst.num JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 -- AND (1!=1 -- OR typdoc = 'B' AND n_cpt::text||c_rub::text != '128' -- @specifique Ste Félicité : on retire la R128 qui n'a pas de comtpe défini. -- OR typdoc = 'D' AND c_rub = 3034 -- @specifique Ste Félicité : on intégre la 3034 "Réintégration du net imposable". -- OR typdoc = 'X' AND c_rub IN (129, 130) AND substr(n_cpt, 1, 1) = '1') -- @specifique Ste Félicité : on n'a pas pris la R128 mais prend sa décomposition en R129 + R130. AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND v_rub != 0 AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation de la colonne "Taux patronal". INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::numeric AS mois, reduitr AS rub_code, ordre, n_cpt, 0, 0, 0, sum(CASE WHEN typtap = 'G' THEN v_csg ELSE v_cst END), 0 FROM prod_sigems.phst JOIN prod_sigems.rub ON rub.c_tap = phst.num JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb JOIN (select valeur = 0 as opt_std_hp from rh.t_divers where code = 'OPT_STD_HP') as t_divers ON true WHERE 1=1 AND CASE WHEN t_divers.opt_std_hp THEN typdoc = 'B' ELSE true END AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND CASE WHEN typtap = 'G' THEN v_csg ELSE v_cst END != 0 AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation de la colonne "Montant patronal". INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::numeric AS mois, reduitr AS rub_code, ordre, n_cpt, 0, 0, 0, 0, sum(v_cst) FROM prod_sigems.phst JOIN prod_sigems.rub ON rub.c_mtp = phst.num JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb JOIN (select valeur = 0 as opt_std_hp from rh.t_divers where code = 'OPT_STD_HP') as t_divers ON true WHERE 1=1 AND CASE WHEN t_divers.opt_std_hp THEN typdoc = 'B' ELSE true END AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND v_cst != 0 AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation de la rubrique C714 "Taxe sur les salaires". INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year',d_hst)::text||lpad (date_part('month',d_hst),2,'0'))::NUMERIC AS mois, 'C714'::text AS rub_code, -1, '99999999', sum(v_cst), 0, 0, 0, sum(v_cst) FROM prod_sigems.phst JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 AND (SELECT valeur = '1' FROM rh.t_divers WHERE code = 'SIGEMS_TS') -- Taxe sur les salaires que si l'option a été définie à 1. AND num = 714 AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; -- Alimentation des rubriques de cumul. INSERT INTO w_hp_sq SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, mat||'-'||id_contrat AS u_id_cont, d_hst AS "date", (date_part('year',d_hst)::text||lpad (date_part('month',d_hst),2,'0'))::NUMERIC AS mois, 'C'::text||lpad(num,3,'0') AS rub_code, -1, '99999999', sum(v_cst), -- base 0, sum(case when num IN (7, 507) then 0 else v_cst end), -- sal; pas de montant pour les heures payées et travaillées. 0, sum(case when num IN (7, 507) then 0 else v_rub end) -- pat; pas de montant pour les heures payées et travaillées. FROM prod_sigems.phst JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 AND num IN (1, 3, 5, 7, 11, 507, 881, 998) AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) AND d_hst >= '2014-01-01'::date GROUP BY 1,2,3,4,5,6,7,8,9 ; DROP TABLE IF EXISTS w_hp ; -- Aggrégation des rubriques de paie. CREATE TEMP TABLE w_hp AS SELECT * FROM ( SELECT societe, etablissement, matricule, u_id_cont, "date"::date, mois, rub_code, ordre, n_cpt, sum(base) AS base, sum(taux_sal) AS taux_sal, sum(montant_sal) AS montant_sal, sum(taux_pat) AS taux_pat, sum(montant_pat) AS montant_pat FROM w_hp_sq GROUP BY 1,2,3,4,5,6,7,8,9 ) AS phst2 WHERE 1!=1 OR montant_sal != 0 OR montant_pat != 0 OR rub_code IN ('C001','C003','C005','C007','C011', 'C507','C998', 'C714') ; -- #specifique Spécifiques Brétéché Forfait (on renseigne dans base le nombre d'heures à inscrire dans le champ d'HP base). UPDATE w_hp SET base = round(base * 151.67 / 206.0, 2) WHERE 1=1 AND current_database() = 'icti_171' AND rub_code = '3017' ; -- #specifique Spécifiques St Louis Forfait (on renseigne dans base le nombre d'heures à inscrire dans le champ d'HP base). with fj_sal as ( select u_id_cont, date from w_hp where true and rub_code = 'R001' and to_char(date, 'YYYY') >= 2019 and base = 0 and montant_sal != 0 AND current_database() = 'icti_320' ) , new_data_fj as ( select w_hp.u_id_cont, w_hp.date, w_hp.base from w_hp join fj_sal on true and fj_sal.u_id_cont = w_hp.u_id_cont and fj_sal.date = w_hp.date where 1=1 and w_hp.rub_code = 'C507' AND current_database() = 'icti_320') update w_hp set base = new_data_fj.base from new_data_fj where 1=1 and new_data_fj.u_id_cont = w_hp.u_id_cont and new_data_fj.date = w_hp.date and w_hp.rub_code = 'R001' AND current_database() = 'icti_320' ; CREATE INDEX i_w_hp_1 ON w_hp USING btree (matricule) ; CREATE INDEX i_w_hp_2 ON w_hp USING btree ("date") ; CREATE INDEX i_w_hp_3 ON w_hp USING btree (rub_code) ; TRUNCATE rh.p_historique_paie ; ]]> 7 AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) UNION ALL SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::NUMERIC AS mois, 'C012'::text AS rub_code, v_cst, v_cst, v_cst, v_cst, v_cst, -1 FROM prod_sigems.phst JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 AND num = 173 AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) UNION ALL -- Taxe sur les salaires que si l'option a été définie à 1. SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::NUMERIC AS mois, 'C714'::text AS rub_code, v_cst, 0, 0, 0, v_cst, -1 FROM prod_sigems.phst JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 AND (SELECT valeur = '1' FROM rh.t_divers WHERE code = 'SIGEMS_TS') -- Taxe sur les salaires que si l'option a été définie à 1. AND num = 714 AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) UNION ALL -- @specifique Compléter le brut standard avec le brut exceptionnel (intéressement). -- Spécifique Brétéché de juillet 2014 avec comme condition : n_cpt = 'ANNEXE04' and reduitr = '3057'. -- En espérant que cette condition ne soit jamais rencontré chez un autre client. SELECT phst.ste AS societe, phst.etb AS etablissement, mat AS matricule, d_hst AS "date", (date_part('year', d_hst)::text||lpad(date_part('month', d_hst), 2, '0'))::NUMERIC AS mois, 'C001' AS rub_code, v_rub AS base, v_rub AS taux_sal, v_rub AS montant_sal, v_rub AS taux_pat, v_rub AS montant_pat, -1 as ordre FROM prod_sigems.phst JOIN prod_sigems.rub ON rub.c_rub = phst.num JOIN w_ets ON 1=1 AND w_ets.ste = phst.ste AND w_ets.etbl = phst.etb WHERE 1=1 AND (1!=1 OR substr(n_cpt, 1, 2) = '87' OR (n_cpt = 'ANNEXE04' and reduitr = '3057')) AND phst.mat NOT IN (SELECT mat FROM w_exc_mat) ) as subq GROUP BY 1,2,3,4,5,6) AS phst2 WHERE (montant_sal <> 0 OR montant_pat <> 0) AND "date" >= '2014-01-01' ; DROP TABLE IF EXISTS w_cumul ; CREATE TEMP TABLE w_cumul AS SELECT true as total_heures_contrat, true as total_heures_payees, true as total_heures_travaillees, true as total_masse_salariale, true as total_brut, true as total_avantage_nature, true as total_frais_imposables, true as total_cotisation_salarie, true as total_cotisation_patronale, true as total_od_net_salarie, true as total_od_net_patronale, true as total_net_imposable, true as total_net_a_payer ; DROP TABLE IF EXISTS w_totaux ; CREATE TEMP TABLE w_totaux AS SELECT societe, etablissement, matricule, "date", mois, sum(CASE WHEN rub_code = 'C007' THEN montant_sal ELSE 0 END) AS mnt_hp, sum(CASE WHEN rub_code = 'C507' THEN montant_sal ELSE 0 END) AS mnt_hw, sum(CASE WHEN rub_code = 'C001' THEN montant_sal ELSE 0 END) AS mnt_brut, sum(CASE WHEN rub_code = 'C003' THEN -montant_sal ELSE 0 END) AS mnt_cotisation_salariale, sum(CASE WHEN rub_code IN ('C012', 'C714') THEN montant_pat ELSE 0 END) AS mnt_cotisation_patronale, sum(CASE WHEN rub_code = 'C005' THEN montant_sal ELSE 0 END) as mnt_net_imposable_salarie, sum(CASE WHEN rub_code = 'C011' THEN montant_sal ELSE 0 END) AS mnt_net_a_payer_salarie FROM w_tmp_totaux GROUP BY 1,2,3,4,5 ; ]]> date_fin ; -- Renseigner les heures contrats à partir de la rubriques d'heures salaire de base conventionnel lorsque le nombre d'heures contrat n'est pas renseigné. UPDATE rh.p_contrats_mois SET nombre_heures = 0 WHERE (select count(*) > 0 from rh.t_listes join rh.t_listes_contenu on t_listes_contenu.liste_id = t_listes.oid where code = 'CTI_HCNT') ; UPDATE rh.p_contrats_mois SET nombre_heures = subq.nombre_heures FROM ( SELECT contrat_mois_id, mois_paie, sum(base) as nombre_heures FROM rh.p_historique_paie WHERE rubrique_id IN (select to_id from rh.t_listes join rh.t_listes_contenu on t_listes_contenu.liste_id = t_listes.oid where code = 'CTI_HCNT') GROUP BY 1,2) as subq WHERE 1=1 AND p_contrats_mois.oid = subq.contrat_mois_id AND p_contrats_mois.mois_activite = subq.mois_paie AND nullif(p_contrats_mois.nombre_heures, 0) is null ; ]]> = '2014-01-01' AND dtdu <= now() AND ij_arret.mat NOT IN (SELECT mat FROM w_exc_mat) and ij_arret.id_liencontrat > 0 GROUP BY 1,2,3,4,5,6,7,8,9 ; TRUNCATE rh.p_arrets_travail ; ALTER SEQUENCE rh.s_arrets_travail RESTART WITH 1 ; INSERT INTO rh.p_arrets_travail( salarie_id, contrat_id, mois_activite, date_debut, date_fin, date_reprise, motif_arret_id, precision_motif_arret_id, nb_jours ) SELECT p_salaries.oid, p_contrats.oid, w_arrets.mois_activite, w_arrets.date_debut, w_arrets.date_fin, (w_arrets.date_fin + INTERVAL '1 day')::date AS date_reprise, t_motifs_arret.oid AS motif_arret_id, 0 AS precision_motif_arret_id, w_arrets.nbj AS nb_jours FROM w_arrets JOIN prod_sigems.contrats_pb on contrats_pb.mat||'-'||contrats_pb.id_cont = w_arrets.u_id_cont JOIN rh.p_salaries ON p_salaries.matricule = w_arrets.mat JOIN rh.p_contrats ON p_contrats.numero_contrat = w_arrets.u_id_cont JOIN rh.t_motifs_arret ON t_motifs_arret.code_original = w_arrets.motif ; TRUNCATE rh.p_arrets_travail_mois ; INSERT INTO rh.p_arrets_travail_mois( arret_travail_id, salarie_id, contrat_id, contrat_mois_id, mois_activite, nb_debut_arret, nb_fin_arret, nb_reprise_apres_arret, date_debut, date_fin, nb_jours, nb_arret ) SELECT p_arrets_travail.oid AS arret_travail_id, p_arrets_travail.salarie_id AS salarie_id, p_arrets_travail.contrat_id AS contrat_id, p_contrats_mois.oid AS contrat_mois_id, p_contrats_mois.mois_activite, CASE WHEN p_arrets_travail.date_debut BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_debut_arret, CASE WHEN p_arrets_travail.date_fin BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_fin_arret, CASE WHEN p_arrets_travail.date_reprise BETWEEN p_contrats_mois.date_debut AND p_contrats_mois.date_fin THEN 1 ELSE 0 END AS nombre_reprise_apres_arret, GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut) AS date_debut, LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin) AS date_fin, LEAST(p_contrats_mois.date_fin, p_arrets_travail.date_fin)::date - GREATEST(p_contrats_mois.date_debut, p_arrets_travail.date_debut)::date + 1 AS nb_jours, 1 FROM rh.p_contrats_mois JOIN rh.p_arrets_travail ON (p_contrats_mois.contrat_id = p_arrets_travail.contrat_id AND p_arrets_travail.date_debut <= p_contrats_mois.date_fin AND p_arrets_travail.date_reprise >= p_contrats_mois.date_debut ) ORDER BY arret_travail_id, p_contrats_mois.mois_activite ; ]]> = '2014-01-01' AND c_anu <> 'S' AND vis_med.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,6 ; -- Peuplement de rh.p_visites_medicales TRUNCATE rh.p_visites_medicales ; ALTER SEQUENCE rh.s_visites_medicales RESTART WITH 1 ; INSERT INTO rh.p_visites_medicales( salarie_id, contrat_id, contrat_mois_id, mois_activite, date, motif_visite_id ) SELECT p_salaries.oid, p_contrats.oid, p_contrats_mois.oid, w_visites.mois_activite, w_visites.date, t_motifs_visite.oid FROM w_visites JOIN rh.p_salaries ON p_salaries.matricule = w_visites.mat JOIN rh.p_contrats ON p_contrats.numero_contrat = w_visites.u_id_cont JOIN rh.p_contrats_mois ON p_contrats_mois.contrat_id = p_contrats.oid AND w_visites.date >= p_contrats_mois.date_debut AND w_visites.date <= p_contrats_mois.date_fin JOIN rh.t_motifs_visite ON t_motifs_visite.code_original = w_visites.motif ; ]]> = '2014-01-01' AND c_anu <> 'S' AND acctravail.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,7,8,9,10 ; -- Peuplement de rh.p_accident_travail TRUNCATE rh.p_accident_travail ; ALTER SEQUENCE rh.s_accident_travail RESTART WITH 1 ; INSERT INTO rh.p_accident_travail( salarie_id, contrat_id, contrat_mois_id, mois_activite, date, accident_circonstance_id, accident_lieu_id, accident_nature_id, accident_siege_id ) SELECT p_salaries.oid, p_contrats.oid, p_contrats_mois.oid, w_accident.mois_activite, w_accident.date, t_accident_circonstance.oid, t_accident_lieu.oid, t_accident_nature.oid, t_accident_siege.oid FROM w_accident JOIN rh.p_salaries ON p_salaries.matricule = w_accident.mat JOIN rh.p_contrats ON p_contrats.numero_contrat = w_accident.u_id_cont JOIN rh.p_contrats_mois ON p_contrats_mois.contrat_id = p_contrats.oid AND w_accident.date >= p_contrats_mois.date_debut AND w_accident.date <= p_contrats_mois.date_fin JOIN rh.t_accident_circonstance ON t_accident_circonstance.code_original = w_accident.circonstance JOIN rh.t_accident_lieu ON t_accident_lieu.code_original = w_accident.lieu JOIN rh.t_accident_nature ON t_accident_nature.code_original = w_accident.nature JOIN rh.t_accident_siege ON t_accident_siege.code_original = w_accident.siege ; ]]> 01 Janvier 2014 et < date actuelle + 2 ans -- * Si une entrée a un code de formation et une date mais a un nombre d'heures à zéro, -- force le nombre d'heures à 1.00 INSERT INTO w_formation (matricule, ste, etb, code_formation, date_formation, mois_activite, nbre_heures, n_org) ( SELECT pform_pb.mat, pform_pb.ste, pform_pb.etb, pform_pb.id_formation, pform_pb.d_for, (date_part('year',pform_pb.d_for::date)::text||lpad(date_part('month', pform_pb.d_for::DATE), 2, '0'))::NUMERIC, CASE WHEN pform_pb.nb_hr > 0 THEN pform_pb.nb_hr ELSE 1.00 END, pform_pb.n_org FROM prod_sigems.pform_pb JOIN prod_sigems.pers ON 1=1 AND pers.mat = pform_pb.mat AND pers.ste = pform_pb.ste AND pers.etb = pform_pb.etb JOIN w_cnt ON w_cnt.mat = pform_pb.mat WHERE 1=1 AND d_for < (CURRENT_DATE + INTEGER '731') AND (1!=1 OR pers.c_anu <> 'S' OR (1=1 AND pers.c_anu = 'S' AND w_cnt.date_fin > CURRENT_DATE)) AND pform_pb.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,6,7,8 UNION -- * Insère les données dont la date de formation n'est pas encore renseignée -- * Force à 0.00 le nombre d'heures de formation -- * Zappe les employés suspendus sauf ceux dont le contrat est en cours (date de sortie -- nulle ou supérieure à date actuelle) -- * Zappe les entrées dont le code de formation n'est pas renseigné SELECT pform_pb.mat, pform_pb.ste, pform_pb.etb, pform_pb.id_formation, pform_pb.d_for, (date_part('year',pform_pb.d_for::date)::text||lpad(date_part('month',pform_pb.d_for::DATE),2,'0'))::NUMERIC, 0.00 AS nb_hr, n_org FROM prod_sigems.pform_pb JOIN prod_sigems.pers ON 1=1 AND pers.mat = pform_pb.mat AND pers.ste = pform_pb.ste AND pers.etb = pform_pb.etb JOIN w_cnt ON w_cnt.mat = pform_pb.mat WHERE 1=1 AND pform_pb.d_for IS NULL AND (1!=1 OR pers.c_anu <> 'S' OR (1=1 AND pers.c_anu = 'S' AND w_cnt.date_fin > CURRENT_DATE)) AND pform_pb.mat NOT IN (SELECT mat FROM w_exc_mat) GROUP BY 1,2,3,4,5,6,7,8 ) ; ---------------------------------------------------------------------------------------------------- -- * Insère la date de début de contrat la plus proche de la date de formation -- Servira si la date de formation ne rentre dans aucun contrat UPDATE w_formation SET date_debut = ( SELECT MAX(dtdebu) FROM w_cnt WHERE 1=1 AND w_cnt.mat = matricule AND date_formation IS DISTINCT FROM NULL AND dtdebu < date_formation ) ; -- select * from w_formation order by 2 ---------------------------------------------------------------------------------------------------- -- * Cherche les lignes qui ont en commun le matricule, le code, la date et les heures -- * Supprime celle qui a le plus petit id (normalement qui a été saisie en premier) DELETE FROM w_formation WHERE id NOT IN ( SELECT MIN(dup.id) FROM w_formation AS dup GROUP BY dup.matricule, dup.code_formation, dup.date_formation, dup.nbre_heures ) ; -- select * from w_formation order by 2 ---------------------------------------------------------------------------------------------------- -- * Cherche les lignes qui ont en commun le matricule, le code et la date -- * Supprime celle qui a le plus petit id (normalement qui a été saisie en premier) DELETE FROM w_formation WHERE id IN ( SELECT MIN(id) FROM w_formation GROUP BY matricule, code_formation, date_formation HAVING COUNT(date_formation) > 1 ORDER BY 1 ) ; -- select * from w_formation order by 2 ---------------------------------------------------------------------------------------------------- -- * Cherche les entrées où la date de formation n'est comprise dans aucun intervalle de contrat -- * Remplace la date de formation par la plus récente date de début de contrat antérieure -- à la date de formation -- * Recalcule le champ mois_activite avec la nouvelle date UPDATE w_formation SET date_formation = date_debut, mois_activite = (date_part('year',date_formation::date)::text||lpad(date_part('month', date_formation::DATE), 2, '0'))::NUMERIC WHERE id IN ( SELECT id FROM w_formation JOIN w_cnt ON w_cnt.mat = w_formation.matricule JOIN prod_sigems.pers ON 1=1 AND pers.mat = w_cnt.mat AND pers.ste = w_cnt.soc AND pers.etb = w_cnt.etb WHERE id NOT IN ( SELECT id FROM w_formation JOIN w_cnt ON w_cnt.mat = w_formation.matricule GROUP BY w_formation.id, w_formation.date_formation, w_cnt.date_debut, w_cnt.date_fin HAVING w_formation.date_formation BETWEEN w_cnt.date_debut AND w_cnt.date_fin ORDER BY 1 ) GROUP BY 1 ORDER BY 1 ) AND date_formation IS DISTINCT FROM NULL ; -- select * from w_formation order by 2 ---------------------------------------------------------------------------------------------------- -- * Cherche les cas où un salarié fait au moins deux formations le même jour pour un -- total d'heures supérieur à 9. On considère alors qu'on est dans le cas d'une -- formation 'marathon' et on force tous les nombres d'heures de ces formations à 1.00 UPDATE w_formation SET nbre_heures = 1.00 WHERE id in ( SELECT id FROM w_formation WHERE ARRAY[matricule::text, date_formation::text] in ( SELECT ARRAY[matricule::text,date_formation::text] FROM w_formation WHERE date_formation IS NOT NULL GROUP BY 1 HAVING sum (nbre_heures) > 9 AND COUNT (DISTINCT code_formation) > 1 ) ) ; -- select * from w_formation order by 2 ---------------------------------------------------------------------------------------------------- -- Peuplement de rh.p_formations TRUNCATE rh.p_formations ; ALTER SEQUENCE rh.s_formations RESTART WITH 1 ; INSERT INTO rh.p_formations( salarie_id, formation_id, formation_date, mois_activite, nb_heures, organisateur ) SELECT p_salaries.oid AS "salarie_oid", t_liste_formations.oid AS "formation_oid", w_formation.date_formation, w_formation.mois_activite, w_formation.nbre_heures, w_formation.n_org FROM w_formation JOIN rh.p_salaries ON p_salaries.matricule = w_formation.matricule JOIN rh.t_liste_formations ON w_formation.code_formation = t_liste_formations.code ORDER BY 1,2,3,4 ; -- select * from rh.p_formations order by 2 ---------------------------------------------------------------------------------------------------- -- Rattache une formation qui n'a pas de date au contrat le plus récent du -- salarié concerné par la formation -- Met la date de la formation à 2099-12-31 et le mois_activite à 209912 UPDATE rh.p_formations toto SET contrat_id = ( SELECT (MAX(ARRAY[date_debut::text,oid::text]))[2]::bigint FROM rh.p_contrats cont WHERE cont.salarie_id = toto.salarie_id ), formation_date = '2099-12-31'::DATE, mois_activite = 209912 WHERE formation_date IS NULL ; -- SELECT * FROM rh.p_formations order by 2 ---------------------------------------------------------------------------------------------------- -- Rattache le numéro de contrat à la formation dont la date est comprise -- entre les dates de début et de fin dudit contrat -- Concerne les formations dont la date a été renseignée UPDATE rh.p_formations toto SET contrat_id = ( SELECT (MAX(ARRAY[date_debut::text,oid::text]))[2]::bigint FROM rh.p_contrats cont WHERE cont.salarie_id = toto.salarie_id AND toto.formation_date <= cont.date_fin AND toto.formation_date >= cont.date_debut ) WHERE formation_date < '2099-12-31' ; -- SELECT * FROM rh.p_formations order by 2 ---------------------------------------------------------------------------------------------------- -- Rattache le contrat_mois_id de la formation pour les formations dont la date a été -- renseignée UPDATE rh.p_formations toto SET contrat_mois_id = ( SELECT oid FROM rh.p_contrats_mois cont WHERE cont.contrat_id = toto.contrat_id AND cont.mois_activite = toto.mois_activite ) WHERE toto.formation_date < '2099-12-31' ; -- SELECT * FROM rh.p_formations order by 2 ---------------------------------------------------------------------------------------------------- -- Rattache le contrat_mois_id de la formation pour les formations dont la date n'a pas été -- renseignée. On prendra dans ce cas le contrat_mois_id le plus élevé UPDATE rh.p_formations toto SET contrat_mois_id = ( SELECT (MAX(ARRAY[date_debut::text,oid::text]))[2]::bigint FROM rh.p_contrats_mois cont WHERE cont.contrat_id = toto.contrat_id ) WHERE toto.formation_date = '2099-12-31' ; -- select * from rh.p_formations order by 2; -- BRET00 (1046) ]]>