Subversion Repositories Applications.annuaire

Rev

Rev 336 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
class Cotisation extends AppControleur {
        
        public function Cotisation() {
                
                parent::__construct();
        }
        
    /**
     * Initialisation du controleur principal en fonction des paramètres de l'url.
     */
    public function executerPlugin() {
        
        $plugin_action = Config::get('plugin_variable_action');
                               
        if (isset($_GET[$plugin_action])) {
            $action = $_GET[$plugin_action];
        } else {
                $action = Config::get('plugin_action_defaut');
        }
        
        if(!$this->controleAccesAdmin($action)) {
                return;
        }
        
        unset($_GET[$plugin_action]);
       
        $resultat_action_plugin = $this->$action($_GET);
        
        return $resultat_action_plugin ;
    }
           
    /**
     * Méthode appelée pour ajouter un élément.
     */
    public function ajouterCotisation() {
        
        $params = $_POST;
        
        $elements_requis = array('id_cotisant','date_cotisation', 'montant_cotisation', 'mode_cotisation');
        $erreurs = array();
        
        foreach($elements_requis as $requis) {
                if(!isset($params[$requis])) {
                        //$erreurs[$requis] = 'erreur ';
                }
        }
        
        if(!empty($erreurs)) {
                $this->envoyer($erreurs);
        }
        
        $params['date_cotisation'] = $this->formaterVersDateMysql($params['date_cotisation']);

        $cotisation_modele = new CotisationModele(); 
        $ajout_cotisation = $cotisation_modele->ajouterCotisation($params);
                
                if(!$ajout_cotisation) {
                $retour['erreurs'] = 'erreur d\'insertion';
        }
        
        $retour['id_utilisateur'] = $params['id_cotisant'];
        
        return $this->afficherInformationsCotisationPourInscrit($retour);
        
    }
   
    /**
     * Méthode appelée pour mettre à jour une cotisation
     */
    public function mettreAJourCotisation()    {
        
        $params = $_POST;
        
        $id_cotisation = $params['id_cotisation'];
        
        $elements_requis = array('id_cotisation','id_cotisant','date_cotisation', 'montant_cotisation', 'mode_cotisation');
        $erreurs = array();
        
        foreach($elements_requis as $requis) {
                if(!isset($params[$requis])) {
                        //$erreurs[$requis] = 'erreur ';
                }
        }
        
        if(!empty($erreurs)) {
                $this->envoyer($erreurs);
        }
                
        $params['date_cotisation'] = $this->formaterVersDateMysql($params['date_cotisation']);
        
        $cotisation_modele = new CotisationModele(); 
        $modification_cotisation = $cotisation_modele->mettreAJourCotisation($id_cotisation, $params);
        
                if(!$modification_cotisation) {
                $retour['erreurs'] = 'erreur d\'insertion';
        }
        
        $retour['id_utilisateur'] = $params['id_cotisant'];
        
        return $this->afficherInformationsCotisationPourInscrit($retour);
    }
   
    /**
     * Méthode appelée pour supprimer un élément
     */
    public function supprimerCotisation() {
                
        $id_cotisation = $_GET['id_cotisation'];
        
        $cotisation_modele = new CotisationModele(); 
        $suppression_cotisation = $cotisation_modele->supprimerCotisation($id_cotisation);
        
        if(!$suppression_cotisation) {
                // TODO: comment gère t'on les erreurs ?
        }
        
        $param['id_utilisateur'] = $_GET['id_utilisateur'];
        
        return $this->afficherInformationsCotisationPourInscrit($param);
        
    }
    
     /**
     * 
         * Affiche un tableau récapitulant les informations de l'historique des cotisations pour un membre donné 
     */
    private function afficherInformationsCotisationPourInscrit($param) {
        
        $id_inscrit = $param['id_utilisateur'];
        
        if(!Registre::getInstance()->get('est_admin')) {
                $id_inscrit = Registre::getInstance()->get('identification_id');
        }
        
        $donnees['cotisations'] = $this->obtenirInformationsCotisationPourInscrit($param);
        
        $donnees['url_formulaire_ajout_cotisation'] = $this->getUrlFormulaireAjoutCotisation($id_inscrit);
        
        if(isset($param['message'])) {
                $donnees['message'] = $param['message'];
        }
        
        if(Registre::getInstance()->get('est_admin')) {
                $squelette = 'liste_cotisations_admin';
        } else {
                $squelette = 'liste_cotisations_inscrit';
        }
        
        $liste_cotisations_html = $this->renvoyerSquelette($squelette, $donnees);
        
        return $liste_cotisations_html;
    }
        
    /**
     * 
         *  Renvoie les informations de cotisation pour un membre donné 
     */
        private function obtenirInformationsCotisationPourInscrit($param) {
                        
                $id_inscrit = $param['id_utilisateur'];
                
                if(!Registre::getInstance()->get('est_admin')) {
                $id_inscrit = Registre::getInstance()->get('identification_id');
        }
                
                $cotisation_modele = new CotisationModele(); 
                $infos_cotisation_inscrit = $cotisation_modele->obtenirInformationsCotisationsPourInscrit($id_inscrit);
                
        $infos_cotisation_inscrit_formatees = array();
        
        foreach($infos_cotisation_inscrit as $cotisation_inscrit) {
                $infos_cotisation_inscrit_formatees[] = $this->formaterInformationsCotisationPourEnvoi($cotisation_inscrit);
        }
        
        return $infos_cotisation_inscrit_formatees;
        }
    
        
        private function afficherFormulaireAjoutCotisation($param) {
        
                $donnees['id_cotisant'] = $param['id_cotisant'];
                
        $donnees['cotisations'] = $this->obtenirInformationsCotisationPourInscrit($param);
        
        $cotisation_modele = new CotisationModele(); 
        $donnees['modes_cotisation'] = $cotisation_modele->obtenirListeModesCotisation();
        
        $donnees['url_liste_cotisations'] = $this->getUrlVoirListeCotisations();
        
        $donnees['url_ajout_cotisation'] = $this->getUrlAjoutCotisation();
        
        $donnees['url_retour'] = $this->urlService();
        
        $liste_cotisations_html = $this->renvoyerSquelette('formulaire_ajout_cotisation', $donnees);
        
        return $liste_cotisations_html;
    }
    
    private function afficherFormulaireModificationCotisation() {

        $param = $_GET;
        
        $donnees['id_utilisateur'] = $param['id_utilisateur'];
        $donnees['id_cotisation_a_modifer'] = $param['id_cotisation'];
        
        $donnees['cotisations'] = $this->obtenirInformationsCotisationPourInscrit($param);
        
        $cotisation_modele = new CotisationModele(); 
        $donnees['modes_cotisation'] = $cotisation_modele->obtenirListeModesCotisation();
        
        $donnees['url_liste_cotisations'] = $this->getUrlVoirListeCotisations();
        
        $donnees['url_modification_cotisation'] = $this->getUrlModificationCotisation($donnees['id_cotisation_a_modifer']);
        
        $donnees['url_retour'] = $this->urlService();
        
        $liste_cotisations_html = $this->renvoyerSquelette('formulaire_modification_cotisation', $donnees);
        
        return $liste_cotisations_html;
    }
    
    // +---------------------------------------------------------------------------------------------------------------+
    // METHODES D'ACCES A LA BASE DE DONNEES
    
    private function getInformationsHistoriqueCotisation() {
        
        $requete_infos_historique_cotisation = 'SELECT * FROM annuaire_COTISATION';

        $infos_historique_cotisation = $this->executerRequete($requete_infos_historique_cotisation);
        
        $infos_historique_cotisation_formatees = array();
        
        foreach($infos_historique_cotisation as $cotisation) {
                $infos_historique_cotisation_formatees[] = $this->formaterInformationsCotisationPourEnvoi($cotisation);
        }
        
        return $infos_historique_cotisation_formatees;
    }
    
    private function obtenirNumeroRecuCotisation($param) {
        
        $id_cotisation = $param['id_cotisation'];
        $id_utilisateur = $param['id_utilisateur'];
        
                if(!Registre::getInstance()->get('est_admin')) {
                $id_utilisateur = Registre::getInstance()->get('identification_id');
        }
        
        $id_annuaire = Config::get('annuaire_defaut');
        
        if(isset($_GET['id_annuaire'])) {
                $id_annuaire = $_GET['id_annuaire'];
        }
        
        $utilisateur = $this->obtenirValeursUtilisateur($id_annuaire, $id_utilisateur);
        
            if(!isset($id_cotisation)) {
                return;
        }
        
        $cotisation_modele = new CotisationModele(); 
        $infos_cotisation = $cotisation_modele->obtenirInformationsPourIdCotisation($id_cotisation, $id_utilisateur);
                
        if(empty($infos_cotisation)) {
                return;
        }
        
        $infos_cotisation_formatees = $this->formaterInformationsCotisationPourEnvoi($infos_cotisation);
        
            if(!$this->recuEstGenere($infos_cotisation_formatees)) {
                
                $numero_nouveau_recu = $this->calculerNouvelOrdreRecuPourCotisation($infos_cotisation_formatees);
                $infos_cotisation_formatees['recu_envoye'] = $numero_nouveau_recu;
                $this->mettreAJourNumeroRecu($infos_cotisation_formatees['id_cotisation'],$numero_nouveau_recu);
        
            }    

            return $infos_cotisation_formatees;
    }
    
    private function initialiserInformationsAnnuaireUtilisateur($param) {
        
        $id_cotisation = $param['id_cotisation'];
        $id_utilisateur = $param['id_utilisateur'];
        
                if(!Registre::getInstance()->get('est_admin')) {
                $param['id_utilisateur'] = Registre::getInstance()->get('identification_id');
        }
        
        $id_annuaire = Config::get('annuaire_defaut');
        
        if(isset($_GET['id_annuaire'])) {
                $param['id_annuaire'] = $_GET['id_annuaire'];
        }
        
        $param['utilisateur'] = $this->obtenirValeursUtilisateur($id_annuaire, $id_utilisateur);
        
        return $param;
    }
        
        private function envoyerRecuCotisation($param) {
                
                $param = $this->initialiserInformationsAnnuaireUtilisateur($param);
                
                $infos_cotisation_formatees = $this->obtenirNumeroRecuCotisation($param);
                
                if(!$this->recuEstEnvoye($infos_cotisation_formatees)) {
                $infos_cotisation_formatees['date_envoi_recu'] = $this->mettreAJourDateEnvoiRecuPourCotisation($infos_cotisation_formatees);
            }
                
        $recu = new Recu();
        $recu_pdf = $recu->renvoyerRecuPdf($param['utilisateur'], $infos_cotisation_formatees);
        
        $messagerie = new MessageControleur();
        $donnees['url_voir_recu'] = $this->getUrlTelechargementRecuPourMail($param['id_cotisation']);
        $contenu_message = $this->renvoyerSquelette('message_recu_cotisation', $donnees);
        $envoi = $messagerie->envoyerMailAvecPieceJointe(Config::get('adresse_mail_cotisation'), $param['utilisateur']['mail']['amv_valeur'], 'Recu pour votre don à tela botanica', $contenu_message, $recu_pdf, 'Recu.pdf', 'application/pdf');
   
        $param['message'] = 'Votre reçu a bien été envoyé à l\'adresse '.$param['utilisateur']['mail']['amv_valeur'];
        
        return $this->afficherInformationsCotisationPourInscrit($param);
    }
    
    private function voirRecuCotisation($param) {
        
                $param = $this->initialiserInformationsAnnuaireUtilisateur($param);
                        
            if(!isset($param['id_cotisation'])) {
                return;
        }
        
        $cotisation_modele = new CotisationModele(); 
        $infos_cotisation = $cotisation_modele->obtenirInformationsPourIdCotisation($param['id_cotisation'], $param['id_utilisateur']);

        if(empty($infos_cotisation)) {
                return;
        }
        
        $infos_cotisation_formatees = $this->formaterInformationsCotisationPourEnvoi($infos_cotisation);                
        $infos_cotisation_formatees = $this->obtenirNumeroRecuCotisation($param);
        
        // tant que le recu n'est pas envoyé sa date est celle du jour courant
        if(!$this->recuEstEnvoye($infos_cotisation_formatees)) {
                $infos_cotisation_formatees['date_envoi_recu'] = date('d/m/Y');
        }
                
        $recu = new Recu();
        
        $recu->afficherRecuPdf($param['utilisateur'], $infos_cotisation_formatees);
        
        return true;
    }
    
    private function recuEstGenere($cotisation) {
        
        if($cotisation['recu_envoye'] != null && $cotisation['recu_envoye'] != 0) {
                return true;
        }
        
        return false;
    }
    
        private function recuEstEnvoye($cotisation) {
        
        if($cotisation['date_envoi_recu'] != null && $cotisation['date_envoi_recu'] != 0) {
                return true;
        }
        
        return false;
    }
    
    private function calculerNouvelOrdreRecuPourCotisation($cotisation) {
        
        $cotisation_modele = new CotisationModele();
        
        $annee_recu = $cotisation['annee_cotisation'];
        $numero_ordre = $cotisation_modele->calculerNouvelOrdreRecuEtIncrementer($annee_recu);
        
        return $numero_ordre;
    }
    
    private function mettreAJourDateEnvoiRecuPourCotisation($cotisation) {
        
        $cotisation_modele = new CotisationModele();
        $cotisation_modele->mettreAJourDateEnvoiRecu($cotisation['id_cotisation']);
        
        $date_envoi_recu = $this->genererDateCouranteFormatAnnuaire();
        
        return $date_envoi_recu;
    }
    
        private function mettreAJourNumeroRecu($id_cotisation, $numero_recu) {
        
        $cotisation_modele = new CotisationModele();
        $maj_cotisation_num_recu = $cotisation_modele->mettreAJourNumeroRecu($id_cotisation, $numero_recu);
        
        return $maj_cotisation_num_recu;
    }
    
    private function formaterInformationsCotisationPourEnvoi($cotisation) {
        
        $cotisation_modele = new CotisationModele(); 
        
        $cotisation_champs_formates = array(
                        'id_cotisation' => $cotisation['IC_ID'],
                        'id_inscrit' => $cotisation['IC_ANNU_ID'],
                        'annee_cotisation' => $this->formaterAnneeDateCotisationMySql($cotisation['IC_DATE']),
                                'date_cotisation' => $this->formaterDateMysqlVersDateAnnuaire($cotisation['IC_DATE']),
                        'montant_cotisation' => $cotisation['IC_MONTANT'],
                                'mode_cotisation' => $cotisation_modele->obtenirModeCotisationParId($cotisation['IC_MC_ID']),
                                'id_mode_cotisation' => $cotisation['IC_MC_ID'],
                                'recu_envoye' => $cotisation['IC_RECU'],
                        'date_envoi_recu' => $this->formaterDateMysqlVersDateCotisation($cotisation['IC_DATE_ENVOIE_RECU']),
                        'url_voir_recu' => $this->getUrlVoirRecuCotisation($cotisation['IC_ID']),
                'url_envoyer_recu' => $this->getUrlEnvoiRecuCotisation($cotisation['IC_ID']),
                        'url_formulaire_modification' => $this->getUrlFormulaireModificationCotisation($cotisation['IC_ID']),
                        'url_suppression' => $this->getUrlSuppressionCotisation($cotisation['IC_ID'])
                    );
                    
                return $cotisation_champs_formates;
    }
    
    private function renvoyerSquelette($squelette, $donnees) {
        
        $chemin_squelette = Config::get('chemin_appli').'composants'.DS.ANNUAIRE_PLUGIN.DS.'squelettes'.DS.$squelette.'.tpl.html';
        
        $sortie = SquelettePhp::analyser($chemin_squelette, $donnees);
        //$squelette_dossier = .'squelettes'.DS;
        return $sortie;
    }
    
        private function urlService($params = array()) {
                
        $url_service = new Url(Url::getDemande()->getUrl());
                        
        $variables_requetes = $url_service->getVariablesRequete();
        
        $variables_plugins = array(Config::get('plugin_variable_action'), 'id_cotisation', 'id_cotisant');
        
        foreach($params as $cle => $valeur) {
                $variables_requetes[$cle] = $valeur;
        }
        
        $url_service->setVariablesRequete($variables_requetes);
        
        return $url_service->getUrl();
    }
    
        private function getUrlVoirListeCotisations() {
                
                $params = array('action_cotisation' => 'afficherInformationsCotisationPourInscrit');
                
        return $this->urlService($params);
    }
    
        private function getUrlVoirRecuCotisation($id_cotisation) {
                
                $params = array('action_cotisation' => 'voirRecuCotisation',
                                                'id_cotisation' => $id_cotisation);
                
        return $this->urlService($params);
    }
    
    private function getUrlTelechargementRecuPourMail($id_cotisation) {
        return Config::get('base_url_telechargement').'?m=annuaire_afficher_page&page=cotisations&id_annuaire=1&action_cotisation=voirRecuCotisation&id_cotisation='.$id_cotisation;
    }
    
        private function getUrlEnvoiRecuCotisation($id_cotisation) {
                
                $params = array('action_cotisation' => 'envoyerRecuCotisation',
                                                'id_cotisation' => $id_cotisation);
                
        return $this->urlService($params);
    }
    
    private function getUrlFormulaireAjoutCotisation($id_cotisant) {
        
        $params = array('action_cotisation' => 'afficherFormulaireAjoutCotisation',
                                                'id_cotisant' => $id_cotisant);
        
        return $this->urlService($params);
    }
    
        private function getUrlAjoutCotisation() {
                
        $params = array('action_cotisation' => 'ajouterCotisation');
        
        return $this->urlService($params);
    }
    
    private function getUrlFormulaireModificationCotisation($id_cotisation) {
        
        $params = array('action_cotisation' => 'afficherFormulaireModificationCotisation',
                                                'id_cotisation' => $id_cotisation);
        
        return $this->urlService($params);
    }
    
        private function getUrlModificationCotisation($id_cotisation) {
                
                $params = array('action_cotisation' => 'mettreAjourCotisation',
                                        'id_cotisation' => $id_cotisation);
                
                return $this->urlService($params);
        }
    
        private function getUrlSuppressionCotisation($id_cotisation) {
                
                $params = array('action_cotisation' => 'supprimerCotisation',
                                        'id_cotisation' => $id_cotisation);
                
        return $this->urlService($params);
    }
    
    private function controleAccesAdmin($fonction) {
        
        $fonction_admins = array(
                'ajouterCotisation',
                'mettreAJourCotisation',
                'supprimerCotisation',
                'afficherFormulaireAjoutCotisation',
                'envoyerRecuCotisation'
        );
        
        if(in_array($fonction, $fonction_admins) && !Registre::getInstance()->get('est_admin')) {
                return false;
        }
        
        return true;
    }
    
    private function formaterAnneeDateCotisationMySql($date_cotisation) {
        
        $annee_cotisation = '0';
        
        if($date_cotisation != '0') {
                $annee_cotisation = date('Y',strtotime($date_cotisation));
        }
        
        return $annee_cotisation;
    }
    
    private function formaterDateMysqlVersDateCotisation($date) {
        if($date == '0000-00-00') {
                return 0;
        }
        return $this->formaterDateMysqlVersDateAnnuaire($date);
    }
}
?>