867 |
/** |
/** |
868 |
* Permet de détailler les conditions pour l'affichage des contraintes dans |
* Permet de détailler les conditions pour l'affichage des contraintes dans |
869 |
* une édition. |
* une édition. |
870 |
* @param string $contraintes_param Chaine des conditions |
* @param string $contraintes_param Chaine des conditions |
871 |
|
* |
872 |
* @return array Conditions |
* @return array Conditions |
873 |
*/ |
*/ |
874 |
function explodeConditionContrainte($contraintes_param) { |
function explodeConditionContrainte($contraintes_param) { |
877 |
$return = array(); |
$return = array(); |
878 |
$listGroupes = ""; |
$listGroupes = ""; |
879 |
$listSousgroupes = ""; |
$listSousgroupes = ""; |
880 |
|
$service_consulte = ""; |
881 |
|
|
882 |
// Coupe la condition au ";" |
// Coupe la condition au ";" |
883 |
// Doit séparer groupe et sous-groupe |
// Doit séparer groupe et sous-groupe |
884 |
$contraintes_params = explode(";", $contraintes_param); |
$contraintes_params = explode(";", $contraintes_param); |
885 |
|
|
886 |
// Enlève le mots-clés "ssgroupe=" dans la première partie de |
// Pour chaque paramètres |
887 |
// la condition |
foreach ($contraintes_params as $value) { |
888 |
$listSousgroupes = str_replace("ssgroupe=", "", $contraintes_params[0]); |
// Si le mot-clés "liste_groupe=" |
889 |
// Si après traitement le mots-clés "groupe=" est toujours présent |
if (strstr($value, "liste_groupe=")) { |
890 |
if (strstr($listSousgroupes, "groupe=")) { |
// On enlève le mots-clés "liste_groupe=" |
891 |
// On enlève le mots-clés "groupe=" |
$listGroupes = str_replace("liste_groupe=", "", $value); |
892 |
$listGroupes = str_replace("groupe=", "", $contraintes_params[0]); |
} |
893 |
// Met à null la liste des sousgroupes |
// Si le mot-clés "liste_ssgroupe=" |
894 |
$listSousgroupes = ""; |
if (strstr($value, "liste_ssgroupe=")) { |
895 |
} |
// On enlève le mots-clés "liste_ssgroupe=" |
896 |
// Si il y a une deuxième partie à la condition, ça doit être les |
$listSousgroupes = str_replace("liste_ssgroupe=", "", $value); |
897 |
// sousgroupes |
} |
898 |
if (count($contraintes_params) > 1) { |
// Si le mot-clés "service_consulte=" |
899 |
// Enlève le mots-clés "ssgroupe=" |
if (strstr($value, "service_consulte=")) { |
900 |
$listSousgroupes = str_replace("ssgroupe=", "", $contraintes_params[1]); |
// On enlève le mots-clés "service_consulte=" |
901 |
|
$service_consulte = str_replace("service_consulte=", "", $value); |
902 |
|
} |
903 |
} |
} |
904 |
|
|
905 |
// Récupère la liste des groupes et sous-groupes qui doivent |
// Récupère la liste des groupes et sous-groupes qui doivent |
906 |
// être utilisés pour la condition |
// être utilisés pour la condition |
907 |
$groupes = explode(",", $listGroupes); |
if ($listGroupes != "") { |
908 |
$sousgroupes = explode(",", $listSousgroupes); |
$listGroupes = explode(",", $listGroupes); |
909 |
|
} |
910 |
|
if ($listSousgroupes != "") { |
911 |
|
$listSousgroupes = explode(",", $listSousgroupes); |
912 |
|
} |
913 |
|
|
914 |
// Tableau à retourner |
// Tableau à retourner |
915 |
$return['groupes'] = $groupes; |
$return['groupes'] = $listGroupes; |
916 |
$return['sousgroupes'] = $sousgroupes; |
$return['sousgroupes'] = $listSousgroupes; |
917 |
|
$return['service_consulte'] = $service_consulte; |
918 |
|
|
919 |
// |
// |
920 |
return $return; |
return $return; |
921 |
} |
} |
922 |
|
|
923 |
|
/** |
924 |
|
* Traitement pour créer la condition sur les contraintes dans les éditions. |
925 |
|
* @param string $part SQL et parti du pdf (sql, titre ou corps) |
926 |
|
* |
927 |
|
* @return string Condition pour la requête sur les contraintes |
928 |
|
*/ |
929 |
|
function traitement_condition_contrainte($part) { |
930 |
|
|
931 |
|
// Initialisationd de la condition |
932 |
|
$whereContraintes = ""; |
933 |
|
|
934 |
|
// Détaille la condtion |
935 |
|
$explodeConditionContrainte = $this->explodeConditionContrainte($part); |
936 |
|
|
937 |
|
// Récupère les groupes, sous-groupes et service_consulte pour la condition |
938 |
|
$groupes = $explodeConditionContrainte['groupes']; |
939 |
|
$sousgroupes = $explodeConditionContrainte['sousgroupes']; |
940 |
|
$service_consulte = $explodeConditionContrainte['service_consulte']; |
941 |
|
|
942 |
|
// Pour chaque groupe |
943 |
|
if ($groupes != "") { |
944 |
|
foreach ($groupes as $key => $groupe) { |
945 |
|
// Si le groupe n'est pas vide |
946 |
|
if (!empty($groupe)) { |
947 |
|
// Choisit l'opérateur logique |
948 |
|
$op_logique = $key > 0 ? 'OR' : 'AND ('; |
949 |
|
// Ajoute la condition |
950 |
|
$whereContraintes .= " ".$op_logique." contrainte.groupe = '" |
951 |
|
.$groupe."'"; |
952 |
|
} |
953 |
|
} |
954 |
|
// S'il y a des valeurs dans groupe |
955 |
|
if (count($groupe) > 0) { |
956 |
|
// Ferme la parenthèse |
957 |
|
$whereContraintes .= " ) "; |
958 |
|
} |
959 |
|
} |
960 |
|
|
961 |
|
// Pour chaque sous-groupe |
962 |
|
if ($sousgroupes != "") { |
963 |
|
foreach ($sousgroupes as $key => $sousgroupe) { |
964 |
|
// Si le sous-groupe n'est pas vide |
965 |
|
if (!empty($sousgroupe)) { |
966 |
|
// Choisit l'opérateur logique |
967 |
|
$op_logique = $key > 0 ? 'OR' : 'AND ('; |
968 |
|
// Ajoute la condition |
969 |
|
$whereContraintes .= " ".$op_logique." contrainte.sousgroupe = '" |
970 |
|
.$sousgroupe."'"; |
971 |
|
} |
972 |
|
} |
973 |
|
// S'il y a des valeurs dans sous-groupe |
974 |
|
if (count($sousgroupes) > 0) { |
975 |
|
// Ferme la parenthèse |
976 |
|
$whereContraintes .= " ) "; |
977 |
|
} |
978 |
|
} |
979 |
|
|
980 |
|
// Si l'option service_consulte n'est pas vide |
981 |
|
if ($service_consulte != "") { |
982 |
|
// Ajoute la condition |
983 |
|
$whereContraintes .= " AND service_consulte = '".$service_consulte."'"; |
984 |
|
} |
985 |
|
|
986 |
|
// Condition retournée |
987 |
|
return $whereContraintes; |
988 |
|
} |
989 |
|
|
990 |
|
/** |
991 |
|
* Calcule une date par l'ajout ou la soustraction de mois |
992 |
|
* @param date $date Date de base |
993 |
|
* @param integer $delay Délais à ajouter (en mois) |
994 |
|
* @param string $operator Opérateur pour le calcul ("-" ou "+") |
995 |
|
* |
996 |
|
* @return date Date calculée |
997 |
|
*/ |
998 |
|
function mois_date($date, $delay, $operator = "+") { |
999 |
|
|
1000 |
|
// Découpage de la date |
1001 |
|
$temp = explode("-" , $date); |
1002 |
|
$day = (int) $temp[2]; |
1003 |
|
$month = (int) $temp[1]; |
1004 |
|
$year = (int) $temp[0]; |
1005 |
|
|
1006 |
|
// Si c'est une addition |
1007 |
|
if ($operator == '+') { |
1008 |
|
// Si le délais est supérieur à 12 mois |
1009 |
|
if ($delay >= 12) { |
1010 |
|
// Année à ajouter |
1011 |
|
$year += floor($delay / 12); |
1012 |
|
// Mois restant |
1013 |
|
$nb_month = ($delay % 12); |
1014 |
|
// S'il y a des mois restant |
1015 |
|
if ($nb_month != 0) { |
1016 |
|
// Ajout des mois restant |
1017 |
|
$month += $nb_month; |
1018 |
|
// Si ça dépasse le mois 12 (décembre) |
1019 |
|
if ($month > 12) { |
1020 |
|
// Soustrait 12 au mois |
1021 |
|
$month -= 12; |
1022 |
|
// Ajoute 1 à l'année |
1023 |
|
$year += 1; |
1024 |
|
} |
1025 |
|
} |
1026 |
|
} else { |
1027 |
|
// Ajoute le délais |
1028 |
|
$month += $delay; |
1029 |
|
// Si ça dépasse le mois 12 (décembre) |
1030 |
|
if ($month > 12) { |
1031 |
|
// Soustrait 12 au mois |
1032 |
|
$month -= 12; |
1033 |
|
// Ajoute 1 à l'année |
1034 |
|
$year += 1; |
1035 |
|
} |
1036 |
|
} |
1037 |
|
} |
1038 |
|
|
1039 |
|
// Si c'est une soustraction |
1040 |
|
if ($operator == "-") { |
1041 |
|
// Si le délais est supérieur à 12 mois |
1042 |
|
if ($delay >= 12) { |
1043 |
|
// Année à soustraire |
1044 |
|
$year -= floor($delay / 12); |
1045 |
|
// Mois restant |
1046 |
|
$nb_month = ($delay % 12); |
1047 |
|
// S'il y a des mois restant |
1048 |
|
if ($nb_month != 0) { |
1049 |
|
// Soustrait le délais |
1050 |
|
$month -= $nb_month; |
1051 |
|
// Si ça dépasse le mois 1 (janvier) |
1052 |
|
if ($month < 1) { |
1053 |
|
// Soustrait 12 au mois |
1054 |
|
$month += 12; |
1055 |
|
// Ajoute 1 à l'année |
1056 |
|
$year -= 1; |
1057 |
|
} |
1058 |
|
} |
1059 |
|
} else { |
1060 |
|
// Soustrait le délais |
1061 |
|
$month -= $delay; |
1062 |
|
// Si ça dépasse le mois 1 (janvier) |
1063 |
|
if ($month < 1) { |
1064 |
|
// Soustrait 12 au mois |
1065 |
|
$month += 12; |
1066 |
|
// Ajoute 1 à l'année |
1067 |
|
$year -= 1; |
1068 |
|
} |
1069 |
|
} |
1070 |
|
} |
1071 |
|
|
1072 |
|
// Calcul du nombre de jours dans le mois sélectionné |
1073 |
|
switch($month) { |
1074 |
|
// Mois de février |
1075 |
|
case "2": |
1076 |
|
if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) { |
1077 |
|
$day_max = 29; |
1078 |
|
} else { |
1079 |
|
$day_max = 28; |
1080 |
|
} |
1081 |
|
break; |
1082 |
|
// Mois d'avril, juin, septembre et novembre |
1083 |
|
case "4": |
1084 |
|
case "6": |
1085 |
|
case "9": |
1086 |
|
case "11": |
1087 |
|
$day_max = 30; |
1088 |
|
break; |
1089 |
|
// Mois de janvier, mars, mai, juillet, août, octobre et décembre |
1090 |
|
default: |
1091 |
|
$day_max = 31; |
1092 |
|
} |
1093 |
|
|
1094 |
|
// Si le jour est supérieur au jour maximum du mois |
1095 |
|
if ($day > $day_max) { |
1096 |
|
// Le jour devient le jour maximum |
1097 |
|
$day = $day_max; |
1098 |
|
} |
1099 |
|
|
1100 |
|
// Retourne la date calculée |
1101 |
|
return $year."-".$month."-".$day ; |
1102 |
|
} |
1103 |
} |
} |
1104 |
|
|
1105 |
?> |
?> |