You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

812 lines
28 KiB

<?php
class RHP_Component
{
private static function standard_prefixe($GROUPBY, $DEFAULT = "")
{
if (substr($GROUPBY, 3, 3) == 'CLS') {
$GROUPBY_section = substr($GROUPBY, 6);
$GROUPBY = substr($GROUPBY, 0, 6);
}
$field = '';
$field_id = '';
$field_code = '';
$field_texte = '';
switch ($GROUPBY) {
case '*TAB':
$field = "*TAB";
break;
case '-1':
$field = "";
break;
case 'MOIACT': // @deprecated
$field = "mois_activite";
break;
case 'ANNACT': // @deprecated
$field = "annee_activite";
break;
case 'MOIPAI': // @deprecated
$field = "mois_paie";
break;
case 'ANNPAI': // @deprecated
$field = "annee_paie";
break;
case 'MOIACTPAI': // @deprecated
$field = "mois_activite_paie";
break;
case 'ANNACTPAI': // @deprecated
$field = "annee_activite_paie";
break;
case 'AMACT':
$field = "v_rh_view_1.annee_mois_activite";
break;
case 'ATRIMACT':
$field = "v_rh_view_1.annee_trimestre_activite";
break;
case 'AACT':
$field = "v_rh_view_1.annee_activite";
break;
case 'MACT':
$field = "v_rh_view_1.mois_only_activite";
break;
case 'TRIMACT':
$field = "v_rh_view_1.trimestre_activite";
break;
case 'SEMACT':
$field = "semaine_activite";
break;
case 'JOURACT':
$field = "jour_activite";
break;
case 'AMCAL':
$field = "annee_mois_paie";
break;
case 'ATRIMCAL':
$field = "annee_trimestre_paie";
break;
case 'ACAL':
$field = "annee_paie";
break;
case 'MCAL':
$field = "mois_only_paie";
break;
case 'TRIMCAL':
$field = "trimestre_paie";
break;
case 'AGE':
$field = "age";
break;
case 'AGECLS':
$field = "age_section";
break;
case 'ANC':
$field = "anciennete_annee";
break;
case 'ANCCLS':
$field = "anciennete_annee_section";
break;
case 'BUD':
$field = "budget_cle";
break;
case 'BUDCLS':
$field = "budget_clesection";
break;
case 'CNT':
$field = "v_rh_view_1.contrat";
break;
case 'ENT':
$field = "entreprise";
break;
case 'ENTCLS':
$field = "entreprise_section";
break;
case 'ETS':
$field = "etablissement";
break;
case 'VENCAPETS':
$field = "ventilation_capsante_etablissement";
break;
case 'ETSCLS':
$field = "etablissement_section";
break;
case 'CPO':
$field = "code_postal";
break;
case 'CPOCLS':
$field = "code_postal_section";
break;
case 'CPD':
$field = "departement";
break;
case 'GRI':
$field = "grille";
break;
case 'GRICLS':
$field = "grille_section";
break;
case 'GRG':
$field = "grille_groupe";
break;
case 'GRGCLS':
$field = "grille_groupe_section";
break;
case 'QUA':
$field = "qualification";
break;
case 'QUACLS':
$field = "qualification_section";
break;
case 'POL':
$field = "pole";
break;
case 'POLCLS':
$field = "pole_section";
break;
case 'POP':
$field = "population";
break;
case 'POPCLS':
$field = "population_section";
break;
case 'SER':
$field = "service";
break;
case 'SERCLS':
$field = "service_section";
break;
case 'TTT':
$field = "type_temps_travail";
break;
case 'TTTCLS':
$field = "type_temps_travail_section";
break;
case 'TCN':
$field = "type_contrat";
break;
case 'TCNCLS':
$field = "type_contrat_section";
break;
case 'THO':
$field = "type_horaire";
break;
case 'THOCLS':
$field = "type_horaire_section";
break;
case 'SPE':
$field = "specialite";
break;
case 'SPECLS':
$field = "specialite_section";
break;
case 'STA':
$field = "statut";
break;
case 'STACLS':
$field = "statut_section";
break;
case 'CEM':
$field = "code_emploi";
break;
case 'CEMCLS':
$field = "code_emploi_section";
break;
case 'GCT':
$field = "groupe_cotisant";
break;
case 'GCTCLS':
$field = "groupe_cotisant_section";
break;
case 'CSC':
$field = "categorie_socio_professionnelle";
break;
case 'CSCCLS':
$field = "categorie_socio_professionnelle_section";
break;
case 'MTD':
$field = "motif_debut";
break;
case 'MTDCLS':
$field = "motif_debut_section";
break;
case 'MTF':
$field = "motif_fin";
break;
case 'MTFCLS':
$field = "motif_fin_section";
break;
case 'SAP':
$field = "section_analytique_paie";
break;
case 'SAPCLS':
$field = "section_analytique_paie_section";
break;
case 'SAC':
$field = "section_analytique";
break;
case 'SACCLS':
$field = "section_analytique_section";
break;
case 'SIN':
$field = "societe_interim";
break;
case 'SINCLS':
$field = "societe_interim_section";
break;
case 'SEX':
$field = "v_rh_view_1.sexe";
break;
case 'SFA':
$field = "situation_famille";
break;
case 'SFACLS':
$field = "situation_famille_section";
break;
case 'NAT':
$field = "nationalite";
break;
case 'NIR':
$field = "nir";
break;
case 'NATCLS':
$field = "nationalite_section";
break;
case 'SAL':
$field = "v_rh_view_1.salarie";
break;
case 'SALCLS':
$field = "salarie_section";
break;
case 'PER':
$field = "personne";
break;
case 'SRP':
$field = "salarie_remplace";
break;
case 'SRPCLS':
$field = "salarie_remplace_section";
break;
case 'CNT':
$field = "contrat";
break;
case 'SALFIN':
$field = "salarie";
break;
case 'CNTFIN':
$field = "contrat";
break;
case 'RUP':
$field = "rubrique";
break;
case 'RUPCLS':
$field = "rubrique_section";
break;
case 'CPT':
$field = "compte";
break;
case 'CPTCLS':
$field = "compte_section";
break;
case 'ORC':
$field = "organisme_cotisation";
break;
case 'ORCCLS':
$field = "organisme_cotisation_section";
break;
case 'MOA':
$field = "motif_arret";
break;
case 'MOACLS':
$field = "motif_arret_section";
break;
case 'MPA':
$field = "precision_motif_arret";
break;
case 'MPACLS':
$field = "precision_motif_arret_section";
break;
case 'ARR':
$field = "arret_travail";
break;
case 'MVM':
$field = "motif_visite";
break;
case 'FOR':
$field = "liste_formation";
break;
case 'FORM':
$field = "formation";
break;
case 'VIS':
$field = "visite";
break;
case 'ACC':
$field = "accident_travail";
break;
case 'ATC':
$field = "accident_circonstance";
break;
case 'ATL':
$field = "accident_lieu";
break;
case 'ATN':
$field = "accident_nature";
break;
case 'ATS':
$field = "accident_siege";
break;
case 'UNF':
$field = "unite_fonctionnelle";
break;
case 'UNFCLS':
$field = "unite_fonctionnelle_section";
break;
case 'LEB':
$field = "lettre_budgetaire";
break;
case 'UNFCLS':
$field = "unite_fonctionnelle_section";
break;
case 'GCP':
$field = "commission_paritaire";
break;
case 'GCPCLS':
$field = "commission_paritaire_section";
break;
case 'COI':
$field = "compte_salarie";
break;
case 'COICLS':
$field = "compte_salarie_section";
break;
case 'CAC':
$field = "categorie_conge";
break;
case 'CACCLS':
$field = "categorie_conge_section";
break;
case 'CAE':
$field = "cadre_emploi";
break;
case 'CAECLS':
$field = "cadre_emploi_section";
break;
case 'FIL':
$field = "filiere";
break;
case 'FILCLS':
$field = "filiere_section";
break;
case 'CAS':
$field = "categorie_statutaire";
break;
case 'CASCLS':
$field = "categorie_statutaire_section";
break;
case 'PEP':
$field = "planning_etablissement";
break;
case 'PEPCLS':
$field = "planning_etablissement_section";
break;
case 'PSP':
$field = "planning_service";
break;
case 'PSPCLS':
$field = "planning_service_section";
break;
case 'PSE':
$field = "planning_service_source";
break;
case 'PSECLS':
$field = "planning_service_source_section";
break;
case 'PQP':
$field = "planning_qualification";
break;
case 'PQPCLS':
$field = "planning_qualification_section";
break;
case 'PQU':
$field = "planning_qualification_source";
break;
case 'PQUCLS':
$field = "planning_qualification_source_section";
break;
case 'PNI':
$field = "planning_niveau";
break;
case 'PNICLS':
$field = "planning_niveau_section";
break;
case 'PCH':
$field = "planning_code_horaire";
break;
case 'PCHCLS':
$field = "planning_code_horaire_section";
break;
case 'PAB':
$field = "planning_type_absence";
break;
case 'PABCLS':
$field = "planning_type_absence_section";
break;
case 'AN1':
$field = "ng_section_analytique_1";
break;
case 'AN1CLS':
$field = "ng_section_analytique_1_section";
break;
case 'AN2':
$field = "ng_section_analytique_2";
break;
case 'AN2CLS':
$field = "ng_section_analytique_2_section";
break;
case 'AN3':
$field = "ng_section_analytique_3";
break;
case 'AN3CLS':
$field = "ng_section_analytique_3_section";
break;
case 'VIS':
$field = "salarie";
break;
case 'EXC':
$field = "expert_controle";
break;
default:
$field = $DEFAULT;
}
return $field;
}
private static function standard_view($GROUPBY, $DEFAULT = "v_contrats_1")
{
if (substr($GROUPBY, 3, 3) == 'CLS') {
$GROUPBY_section = substr($GROUPBY, 6);
$GROUPBY = substr($GROUPBY, 0, 6);
}
$field = '';
$field_id = '';
$field_code = '';
$field_texte = '';
switch ($GROUPBY) {
case '*TAB':
$field = "*TAB";
break;
default:
$field = "";
}
return $field;
}
public static function standard_field_id($GROUPBY, $DEFAULT = "")
{
$prefixe = self::standard_prefixe($GROUPBY, $DEFAULT = "");
$view = self::standard_view($GROUPBY);
if (substr($GROUPBY, 3, 3) == 'CLS') {
$GROUPBY_section = substr($GROUPBY, 6);
$field = $view . "$prefixe" . "_id[$GROUPBY_section]";
} else {
switch ($prefixe) {
case "":
$field = "0";
break;
case "*TAB":
$field = "-9999999";
break;
default:
$field = $view . "$prefixe" . "_id";
}
}
return $field;
}
public static function standard_field_code($GROUPBY, $DEFAULT = "")
{
$prefixe = self::standard_prefixe($GROUPBY, $DEFAULT = "");
$view = self::standard_view($GROUPBY);
if (substr($GROUPBY, 3, 3) == 'CLS') {
$GROUPBY_section = substr($GROUPBY, 6);
$field = $view . "$prefixe" . "_code[$GROUPBY_section]";
} else {
switch ($prefixe) {
case "":
$field = "''";
break;
case "*TAB":
$field = "' Résumé'";
break;
default:
$field = $view . "$prefixe" . "_code";
}
}
return $field;
}
public static function standard_field_texte($GROUPBY, $DEFAULT = "")
{
$prefixe = self::standard_prefixe($GROUPBY, $DEFAULT = "");
$view = self::standard_view($GROUPBY);
if (substr($GROUPBY, 3, 3) == 'CLS') {
$GROUPBY_section = substr($GROUPBY, 6);
$field = $view . "$prefixe" . "_texte[$GROUPBY_section]";
} else {
switch ($prefixe) {
case "":
$field = "''";
break;
case "*TAB":
$field = "'Résumé'";
break;
default:
$field = $view . "$prefixe" . "_texte";
}
}
return $field;
}
public static function standard_field_select($field_prefixe, $table_name, $selected_value, $field2_prefixe = "")
{
$select = "";
$module = "rh";
if ($table_name == 't_finess') {
$module = "base";
}
if ($table_name == 't_ages') {
$tmpArr = explode('|', $selected_value);
$selected_value = $tmpArr[0];
$tmpAge1 = (isset($tmpArr[1]) ? $tmpArr[1] : '');
$tmpAge2 = (isset($tmpArr[2]) ? $tmpArr[2] : '');
}
if ($table_name == 't_section_analytique') {
$tmpArr = explode('|', $selected_value);
if ($tmpArr[0] == '-1') {
$selected_value = $tmpArr[0];
} else {
$selected_value = $tmpArr[1];
}
}
if ($selected_value != '-1') {
$section = 1;
$mode = substr($selected_value, 0, 2);
$oid = $selected_value;
if ($mode == 'LS') {
$section = substr($selected_value, 2, 2);
$oid = substr($selected_value, 4);
}
if ($mode != 'LI' && $mode != 'SL' && $mode != 'LS' && $mode != 'C*' && $mode != 'NV' && $mode != 'IN') {
if ($mode != 'D2') {
$mode = 'DT';
}
$oid = substr($selected_value, 2);
}
if ($field_prefixe == "v_rh_view_1.entreprise" && $mode == 'LI') {
$field_prefixe = $field2_prefixe;
}
if ($field_prefixe == "v_rh_view_1.entreprise" && $mode == 'SL') {
$field_prefixe = $field2_prefixe;
}
if ($mode == 'LI' || $mode == 'SL') {
$oid = substr($selected_value, 2);
}
if ($mode == 'C*') {
if ($table_name != "t_ages") {
$where_codes = sql_codes_list_a(substr($selected_value, 2), 'code');
} else {
$where_codes = sql_codes_list_n(substr($selected_value, 2), "to_number(code,'000')");
}
}
// Spécial intervalle âges.
$where = '';
if ($mode == 'IN') {
if ($tmpAge1 != '') {
$where = ' >= ' . $tmpAge1;
}
if ($tmpAge2 != '') {
$where = ' <= ' . $tmpAge2;
}
if ($tmpAge1 != '' && $tmpAge2 != '') {
$where = ' BETWEEN ' . $tmpAge1 . ' AND ' . $tmpAge2;
}
}
$subselect_select = '';
$field_id = $field_prefixe . "_id";
$field2_id = $field2_prefixe . "_id";
$field_section_id = $field_prefixe . "_section_id[" . $section . "]";
if ($mode == 'LI') {
$subselect_select = " $field_id = ANY (array(SELECT to_id FROM $module.t_listes_contenu WHERE liste_id = $oid)::bigint[])";
}
if ($mode == 'SL') {
$subselect_select = " $field_id != ALL (array(SELECT to_id FROM $module.t_listes_contenu WHERE liste_id = $oid)::bigint[])";
}
if ($mode == 'LS') {
$subselect_select = " $field_section_id = $oid";
}
if ($mode == 'NV') {
$subselect_select = " $field_id IS DISTINCT FROM 0";
}
if ($mode == 'DT') {
$subselect_select = " $field_id = $oid";
}
if ($mode == 'D2') {
$subselect_select = " $field2_id = $oid";
}
if ($mode == 'C*') {
$subselect_select = " $field_id = ANY (array(SELECT oid FROM $module.$table_name WHERE $where_codes)::bigint[])";
}
if ($mode == 'IN') {
$subselect_select = " age_id $where";
}
if ($subselect_select != '') {
$select = " AND $subselect_select ";
}
}
return $select;
}
public static function specific_field_select($field, $value, $dateDebut, $dateFin)
{
$ret = '';
switch ($field) {
case 'PRESENCESAL':
switch ($value) {
case '1':
$ret .= "
AND v_rh_view_1.date_debut_activite = '$dateDebut'
";
break;
case '2':
$ret .= "
AND v_rh_view_1.date_fin_activite = '$dateFin'
";
break;
case '3':
$ret .= "
AND v_rh_view_1.date_debut_activite = '$dateDebut'
AND v_rh_view_1.date_fin_activite = '$dateFin'
";
break;
}
break;
case 'PRESENCECNT':
switch ($value) {
case '1':
$ret .= "
AND v_rh_view_1.date_debut_contrat <= '$dateDebut'
";
break;
case '2':
$ret .= "
AND v_rh_view_1.date_fin_contrat >= '$dateFin'
";
break;
case '3':
$ret .= "
AND v_rh_view_1.date_debut_contrat <= '$dateDebut'
AND v_rh_view_1.date_fin_contrat >= '$dateFin'
";
break;
case '4':
$ret .= "
AND v_rh_view_1.present_debut_mois = 1
";
break;
case '4a':
$ret .= "
AND (FALSE
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '101'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '104'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '107'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '110')
";
break;
case '4b':
$ret .= "
AND v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '101'
";
break;
case '5':
$ret .= "
AND v_rh_view_1.present_fin_mois = 1
";
break;
case '5a':
$ret .= "
AND (FALSE
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '103'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '106'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '109'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '112')
";
break;
case '5b':
$ret .= "
AND v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '112'
";
break;
case '6':
$ret .= "
AND v_rh_view_1.present_debut_mois = 1
AND v_rh_view_1.present_fin_mois = 1
";
break;
case '6a':
$ret .= "
AND (FALSE
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '101'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '104'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '107'
OR v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '110')
AND (FALSE
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '103'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '106'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '109'
OR v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '112')
";
break;
case '6b':
$ret .= "
AND v_rh_view_1.present_debut_mois||v_rh_view_1.mois_only_activite_code = '101'
AND v_rh_view_1.present_fin_mois||v_rh_view_1.mois_only_activite_code = '112'
";
break;
case '7':
$ret .= "
AND v_rh_view_1.mois_activite_code = to_char('$dateDebut'::date, 'YYYYMM'::text)
AND v_rh_view_1.present_debut_mois = 1
";
break;
case '8':
$ret .= "
AND v_rh_view_1.mois_activite_code = to_char('$dateFin'::date, 'YYYYMM'::text)
AND v_rh_view_1.present_fin_mois = 1
";
break;
case '9':
$ret .= "
AND v_rh_view_1.mois_activite_code = to_char('$dateDebut'::date, 'YYYYMM'::text)
AND v_rh_view_1.present_debut_mois = 1
AND v_rh_view_1.mois_activite_code = to_char('$dateFin'::date, 'YYYYMM'::text)
AND v_rh_view_1.present_fin_mois = 1
";
break;
}
break;
}
return $ret;
}
public static function specific_day_field_select($days)
{
$ret = '';
// On effectue le traitement uniquement si une case a été décochée.
if (implode('', $days) != '1111111') {
for ($i = 0; $i < 7; $i++) {
if ($days[$i] == '0') {
$ret .= "\nAND to_char(v_rh_view_1.date_fin_activite, 'ID') != " . ($i + 1);
}
}
}
return $ret;
}
}