<?php
//$Id$ 
//gen openMairie le 24/07/2015 12:20

require_once "../gen/obj/taxe_amenagement.class.php";

class taxe_amenagement extends taxe_amenagement_gen {

    /**
     * Instance de la classe om_collectivite.
     *
     * @var mixed
     */
    var $inst_om_collectivite = null;

    /**
     * Liste des champs nécessaires au calcul de l'imposition.
     *
     * @var array
     */
    var $list_fields_simulation = array(
            "tax_su_princ_log_nb1",
            "tax_su_princ_surf1",
            "tax_su_princ_surf_stat1",
            "tax_su_princ_surf2",
            "tax_su_princ_surf_stat2",
            "tax_su_princ_surf4",
            "tax_su_princ_surf_stat4",
            "tax_su_princ_surf3",
            "tax_su_princ_surf_stat3",
            "tax_su_secon_surf",
            "tax_su_secon_surf_stat",
            "tax_su_non_habit_surf1",
            "tax_su_non_habit_surf_stat1",
            "tax_su_non_habit_surf2",
            "tax_su_non_habit_surf_stat2",
            "tax_su_non_habit_surf3",
            "tax_su_non_habit_surf_stat3",
            "tax_empl_ten_carav_mobil_nb_cr",
            "tax_empl_hll_nb_cr",
            "tax_eol_haut_nb_cr",
            "tax_sup_bass_pisc_cr",
            "tax_pann_volt_sup_cr",
            "tax_am_statio_ext_cr"
        );

    function __construct($id, &$dnu1 = null, $dnu2 = null) {
        $this->constructeur($id);
    }

    /**
     * Permet de définir l’attribut “onchange” sur chaque champ.
     * 
     * @param object  $form Formumaire
     * @param integer $maj  Mode d'insertion
     */
    function setOnchange(&$form, $maj) {
        parent::setOnchange($form, $maj);
        $form->setOnchange('tx_depart', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_reg', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_1', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_2', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_3', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_4', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_5', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_6', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_7', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_8', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_9', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_10', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_11', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_12', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_13', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_14', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_15', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_16', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_17', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_18', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_19', 'VerifFloat(this, 2)');
        $form->setOnchange('tx_comm_secteur_20', 'VerifFloat(this, 2)');
    }

    /**
     * Permet de définir les valeurs des champs.
     *
     * @param object  $form       Objet formulaire
     * @param integer $maj        Mode du formulaire
     * @param integer $validation Validation du formulaire
     *
     * @return void
     */
    function setVal(&$form, $maj, $validation) {
        parent::setVal($form, $maj, $validation);

        //
        if ($validation == 0 && $this->getParameter('maj') == 0) {
            //
            $form->setVal('val_forf_surf_cstr', 705);
            $form->setVal('val_forf_empl_tente_carav_rml', 3000);
            $form->setVal('val_forf_empl_hll', 10000);
            $form->setVal('val_forf_surf_piscine', 200);
            $form->setVal('val_forf_nb_eolienne', 3000);
            $form->setVal('val_forf_surf_pann_photo', 10);
            $form->setVal('val_forf_nb_parking_ext', 2000);
            $form->setVal('tx_depart', "2.00");
            $form->setVal('tx_comm_secteur_1', "1.00");
        }
    }

    /**
     * Définit s'il y a un seul secteur.
     *
     * @return boolean
     */
    function has_one_secteur() {
        // Il ne peut y avoir que 20 secteur maximum
        for ($i=2; $i < 21; $i++) {
            //
            $secteur = $this->getVal('tx_comm_secteur_'.$i);
            // Si un des secteurs de 2 à 20 n'est pas vide
            if (!empty($secteur)) {
                //
                return false;
            }
        }

        //
        return true;
    }

    /**
     * Calcul des montants liquidés.
     *
     * @param integer $secteur            Numéro du secteur
     * @param array   $donnees_techniques Liste des valeurs des données techniques
     *
     * @return array
     */
    function calcul($secteur, $donnees_techniques) {

        // Taux
        $tx = array();
        $tx['commu'] = ($this->getVal('tx_comm_secteur_'.$secteur)/100);
        $tx['depart'] = ($this->getVal('tx_depart')/100);
        $tx['reg'] = ($this->getVal('tx_reg')/100);

        // Initialisation du tableau des résultats
        $result = array();

        // Pour chaque part
        foreach ($tx as $key => $taux) {

            // Surface résidence principale
            $surf_log_res_princ = ($donnees_techniques['tax_su_princ_surf1'] + $donnees_techniques['tax_su_princ_surf_stat1']) + ($donnees_techniques['tax_su_princ_surf2'] + $donnees_techniques['tax_su_princ_surf_stat2']) + ($donnees_techniques['tax_su_princ_surf4'] + $donnees_techniques['tax_su_princ_surf_stat4']) + ($donnees_techniques['tax_su_princ_surf3'] + $donnees_techniques['tax_su_princ_surf_stat3']);

            //
            if ($donnees_techniques['tax_su_princ_log_nb1'] * 100 > $surf_log_res_princ) {

                //
                $cal1 = (($surf_log_res_princ / 2) + (($donnees_techniques['tax_su_princ_surf3'] + $donnees_techniques['tax_su_princ_surf_stat3']) / 2) + ($donnees_techniques['tax_su_secon_surf'] + $donnees_techniques['tax_su_secon_surf_stat']) + ($donnees_techniques['tax_su_non_habit_surf1'] + $donnees_techniques['tax_su_non_habit_surf_stat1']) + ((($donnees_techniques['tax_su_non_habit_surf2'] + $donnees_techniques['tax_su_non_habit_surf_stat2']) + ($donnees_techniques['tax_su_non_habit_surf3'] + $donnees_techniques['tax_su_non_habit_surf_stat3'])) / 2)) * $taux * $this->getVal('val_forf_surf_cstr');

            } else {

                //
                $cal1 = (($donnees_techniques['tax_su_princ_log_nb1'] * 100 / 2) + (($surf_log_res_princ - ($donnees_techniques['tax_su_princ_log_nb1'] * 100))) + (($donnees_techniques['tax_su_princ_surf3'] + $donnees_techniques['tax_su_princ_surf_stat3']) / 2) + ($donnees_techniques['tax_su_secon_surf'] + $donnees_techniques['tax_su_secon_surf_stat']) + ($donnees_techniques['tax_su_non_habit_surf1'] + $donnees_techniques['tax_su_non_habit_surf_stat1']) + ((($donnees_techniques['tax_su_non_habit_surf2'] + $donnees_techniques['tax_su_non_habit_surf_stat2']) + ($donnees_techniques['tax_su_non_habit_surf3'] + $donnees_techniques['tax_su_non_habit_surf_stat3'])) / 2)) * $taux * $this->getVal('val_forf_surf_cstr');
            }

            // Calcul des autres installations
            $cal2 = (($donnees_techniques['tax_empl_ten_carav_mobil_nb_cr'] * $this->getVal('val_forf_empl_tente_carav_rml')) + ($donnees_techniques['tax_empl_hll_nb_cr'] * $this->getVal('val_forf_empl_hll')) + ($donnees_techniques['tax_eol_haut_nb_cr'] * $this->getVal('val_forf_nb_eolienne')) + ($donnees_techniques['tax_sup_bass_pisc_cr'] * $this->getVal('val_forf_surf_piscine')) + ($donnees_techniques['tax_pann_volt_sup_cr'] * $this->getVal('val_forf_surf_pann_photo')) + ($donnees_techniques['tax_am_statio_ext_cr'] * $this->getVal('val_forf_nb_parking_ext'))) * $taux;

            // Montant liquidé
            $result[$key] = $cal1 + $cal2;
        }

        //
        return $result;
    }

    /**
     * Permet de modifier le fil d'Ariane.
     * 
     * @param string $ent Fil d'Ariane
     *
     * @return string
     */
    function getFormTitle($ent) {

        // Si différent de l'ajout
        if ($this->getParameter("maj") != 0) {

            $ent .= " -> ".$this->get_om_collectivite_libelle();
        }

        // Change le fil d'Ariane
        return $ent;
    }

    /**
     * Récupère le libellé de la collectivité.
     *
     * @return string
     */
    function get_om_collectivite_libelle() {
        // Instance de om_collectivite
        $om_collectivite = $this->get_inst_om_collectivite();

        // Récupère la valeur du champ libelle
        $libelle = $om_collectivite->getVal('libelle');

        //
        return $libelle;
    }

    /**
     * Récupère l'instance de la collectivité.
     *
     * @param mixed $om_collectivite Identifiant de la om_collectivite
     *
     * @return object
     */
    function get_inst_om_collectivite($om_collectivite = null) {
        //
        if (is_null($this->inst_om_collectivite)) {
            //
            if (is_null($om_collectivite)) {
                $om_collectivite = $this->getVal('om_collectivite');
            }
            //
            require_once "../obj/om_collectivite.class.php";
            $this->inst_om_collectivite = new om_collectivite($om_collectivite, $this->f->db, 0);
        }
        //
        return $this->inst_om_collectivite;
    }

    /**
     * Récupère la liste des champs nécessaires au calcul de l'imposition.
     *
     * @return array
     */
    function get_list_fields_simulation() {
        //
        return $this->list_fields_simulation;
    }

}

?>
