/[openfoncier]/trunk/obj/utils.class.php
ViewVC logotype

Diff of /trunk/obj/utils.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2715 by softime, Thu Feb 6 14:09:06 2014 UTC revision 2771 by softime, Tue Feb 25 14:56:56 2014 UTC
# Line 867  class utils extends application { Line 867  class utils extends application {
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) {
# Line 876  class utils extends application { Line 877  class utils extends application {
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  ?>  ?>

Legend:
Removed from v.2715  
changed lines
  Added in v.2771

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26