return: text
lang: plpgsql
src: |
  DECLARE	
  	result TEXT;
  BEGIN
  		INSERT INTO rh.t_divers (code, texte, valeur, description)
  		SELECT
  			'ODETP_SALARIE',
  			'OD ETP. Liste des salaries',
  			''::text,
  			'Format MATRICULE:HEURES|MATRICULE:HEURES|MATRICULE:HEURES'
  		WHERE 'ODETP_SALARIE' NOT IN (SELECT code FROM rh.t_divers);
  
  		INSERT INTO rh.t_divers (code, texte, valeur, description)
  		SELECT
  			'ODETP_RUBRIQUE_BRUT',
  			'OD ETP. Rubrique identifiant la presence',
  			''::text,
  			'Code de la rubrique'
  		WHERE 'ODETP_RUBRIQUE_BRUT' NOT IN (SELECT code FROM rh.t_divers);
  
  		INSERT INTO rh.t_divers (code, texte, valeur, description)
  		SELECT
  			'ODETP_RUBRIQUE_HEURE',
  			'OD ETP. Rubrique d''heure pour generation OD',
  			''::text,
  			'Code de la rubrique'
  		WHERE 'ODETP_RUBRIQUE_HEURE' NOT IN (SELECT code FROM rh.t_divers);
  
  		DROP TABLE IF EXISTS w_divers_odetp;
  		CREATE TEMP TABLE w_divers_odetp AS
  		SELECT p_salaries.oid AS odetp_salarie_id, 
  			CASE WHEN ((string_to_array((string_to_array(replace(t_divers_odetp_salaries.valeur,',','.'),'|'))[i],':'))[2])::text <> '*' THEN base.cti_to_number((string_to_array((string_to_array(replace(t_divers_odetp_salaries.valeur,',','.'),'|'))[i],':'))[2]::text)
  			ELSE -1 END AS odetp_nb_heures,
  			t_rubriques_brut.oid AS odetp_rubrique_brut_id, 
  			t_rubriques_heure.oid AS odetp_rubrique_heure_id
  		FROM rh.p_salaries
  		JOIN rh.t_divers t_divers_odetp_salaries ON t_divers_odetp_salaries.code = 'ODETP_SALARIE'
  		JOIN generate_series(1,100) i ON (string_to_array(t_divers_odetp_salaries.valeur,'|'))[i] <> ''
  		JOIN rh.t_divers t_divers_odetp_rubrique_brut ON t_divers_odetp_rubrique_brut.code = 'ODETP_RUBRIQUE_BRUT'
  		JOIN rh.t_divers t_divers_odetp_rubrique_heure ON t_divers_odetp_rubrique_heure.code = 'ODETP_RUBRIQUE_HEURE'
  		JOIN rh.t_rubriques t_rubriques_brut ON t_divers_odetp_rubrique_brut.valeur = t_rubriques_brut.code
  		JOIN rh.t_rubriques t_rubriques_heure ON t_divers_odetp_rubrique_heure.valeur = t_rubriques_heure.code
  		WHERE matricule = (string_to_array((string_to_array(t_divers_odetp_salaries.valeur,'|'))[i],':'))[1] 
  		;
  		DROP TABLE IF EXISTS w_odetp_mois;
  		CREATE TEMP TABLE w_odetp_mois AS
  		SELECT p_historique_paie.salarie_id,
  			p_historique_paie.contrat_mois_id,
  			mois_paie,
  			CASE WHEN MAX(odetp_nb_heures) >= 0 THEN MAX(odetp_nb_heures) ELSE 0 END  AS odetp_heure_contrat,
  			CASE WHEN MAX(odetp_nb_heures) >= 0 THEN MAX(odetp_nb_heures) ELSE SUM(heure_contrat) END  AS odetp_heure_payee,
  			MAX(odetp_rubrique_brut_id) AS odetp_rubrique_brut_id, 
  			MAX(odetp_rubrique_heure_id) AS odetp_rubrique_heure_id
  		FROM rh.p_historique_paie 
  		JOIN w_divers_odetp ON salarie_id = odetp_salarie_id
  		WHERE rubrique_id = odetp_rubrique_brut_id OR 
  			rubrique_id = odetp_rubrique_heure_id OR 
  			heure_contrat <> 0 AND odetp_nb_heures = -1
  		GROUP BY 1,2,3
  		HAVING MAX(CASE WHEN rubrique_id = odetp_rubrique_heure_id THEN rubrique_id ELSE 0 END) = 0 AND
  			MAX(CASE WHEN rubrique_id = odetp_rubrique_brut_id THEN rubrique_id ELSE 0 END) <> 0
  		;
  		DROP TABLE IF EXISTS w_odetp_historique;
  		CREATE TEMP TABLE w_odetp_historique AS
  		SELECT p_historique_paie.*
  		FROM rh.p_historique_paie
  		JOIN w_odetp_mois ON
  			p_historique_paie.salarie_id = w_odetp_mois.salarie_id AND
  			p_historique_paie.mois_paie = w_odetp_mois.mois_paie AND
  			p_historique_paie.contrat_mois_id = w_odetp_mois.contrat_mois_id AND
  			p_historique_paie.rubrique_id = odetp_rubrique_brut_id;
  		UPDATE w_odetp_historique SET
  			rubrique_id = odetp_rubrique_heure_id,
  			base = odetp_heure_payee,
  			heure_payee = odetp_heure_payee,
  			heure_travaillee = odetp_heure_payee,
  			heure_contrat = odetp_heure_contrat,
  			montant_brut = 0,
  			taux_cotisation_salarie = 0,
  			montant_cotisation_salarie = 0,
  			taux_cotisation_patronale = 0,
  			montant_cotisation_patronale = 0,
  			montant_net_imposable_salarie = 0,
  			montant_net_a_payer_salarie = 0,
  			montant_avantage_nature = 0,
  			montant_frais_imposables = 0,
  			montant_masse_salariale = 0,
  			montant_od_net_salarie = 0
  		FROM w_odetp_mois
  		WHERE w_odetp_mois.salarie_id = w_odetp_historique.salarie_id AND
  			w_odetp_mois.contrat_mois_id = w_odetp_historique.contrat_mois_id AND
  			w_odetp_mois.mois_paie = w_odetp_historique.mois_paie
  		;
  		INSERT INTO rh.p_historique_paie
  		SELECT *
  		FROM w_odetp_historique;
  		
  		UPDATE rh.p_chiffrier_production
  		SET nombre_heures_od = 0 
  		WHERE nombre_heures_od IS NULL;
  		
  		UPDATE rh.p_chiffrier_production
  		SET nombre_heures_od = p_chiffrier_production.nombre_heures_od + subview.nombre_heures_od
  		FROM
  		(
  		SELECT t_etablissements.entreprise_id, 
  			p_contrats.etablissement_id, 
  			mois_paie,
  			SUM(base) AS nombre_heures_od 
  		FROM w_odetp_historique
  		JOIN rh.p_contrats ON contrat_id = p_contrats.oid
  		JOIN rh.t_etablissements ON p_contrats.etablissement_id = t_etablissements.oid
  		GROUP BY 1,2,3
  		) subview
  		WHERE p_chiffrier_production.entreprise_id = subview.entreprise_id AND
  			p_chiffrier_production.etablissement_id = subview.etablissement_id AND
  			p_chiffrier_production.mois = subview.mois_paie;
  	
  	RETURN 'OK';
  END;