<?php
/**
 * Ce script définit la classe 'travaux_archive'.
 *
 * @package opencimetiere
 * @version SVN : $Id$
 */

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

/**
 * Définition de la classe 'travaux_archive' (om_dbform).
 */
class travaux_archive extends travaux_archive_gen {

    /**
     * Définition des actions disponibles sur la classe.
     *
     * @return void
     */
    function init_class_actions() {
        parent::init_class_actions();
        // ACTION - 001 - modifier
        // -> modification impossible
        unset($this->class_actions[1]);
        // ACTION - 002 - supprimer
        // -> suppression impossible
        unset($this->class_actions[2]);
        // ACTION - 003 - consulter
        // Ajout de la vérification de collectivité
        $this->class_actions[3]['condition'][] = "is_user_from_allowed_collectivite";
    }

    /**
     * Retourne la collectivité des travaux archivés.
     * 
     * Surcharge de la méthode parent pour récupérer la collectivité
     * via une jointure SQL avec l'emplacement archivé.
     *
     * @return int|null L'identifiant de la collectivité ou null
     */
    function get_collectivite() {
        // Si les travaux archivés n'existent pas, on retourne null
        if ($this->exists() !== true) {
            return null;
        }
        
        // Récupération de la collectivité via jointure avec emplacement_archive
        $sql = sprintf(
            "SELECT emplacement_archive.om_collectivite
            FROM %stravaux_archive
            INNER JOIN %semplacement_archive ON travaux_archive.emplacement = emplacement_archive.emplacement
            WHERE travaux_archive.travaux = %s",
            DB_PREFIXE,
            DB_PREFIXE,
            intval($this->getVal($this->clePrimaire))
        );
        
        $res = $this->f->db->getOne($sql);
        $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
        
        if ($this->f->isDatabaseError($res, true)) {
            return null;
        }
        
        return $res;
    }

    function get_var_sql_forminc__sql_demandeur_by_emplacement() {
        return sprintf(
            "SELECT
                autorisation,
                CONCAT_WS(' ',
                    '(' ||
                        CASE WHEN nature IS NOT NULL AND nature = 'ayantdroit'
                            THEN
                                'ayant-droit'
                            ELSE
                                nature
                        END
                    || ')',
                    titre_de_civilite.libelle,
                    CASE WHEN autorisation_archive.marital IS NOT NULL AND autorisation_archive.marital != ''
                        THEN
                            autorisation_archive.marital
                        ELSE
                            autorisation_archive.nom
                    END,
                    prenom)
                FROM
                    %1\$sautorisation_archive
                    LEFT JOIN %1\$stitre_de_civilite
                        ON autorisation_archive.titre = titre_de_civilite.titre_de_civilite
                WHERE
                    emplacement = <id_emplacement>",
            DB_PREFIXE
        );
    }

    /**
     *
     * @return string
     */
    function get_var_sql_forminc__sql_demandeur_by_id() {
        return sprintf(
            "SELECT
                autorisation,
                CONCAT_WS(' ',
                    '(' ||
                        CASE WHEN nature IS NOT NULL AND nature = 'ayantdroit'
                            THEN
                                'ayant-droit'
                            ELSE
                                nature
                        END
                    || ')',
                    titre_de_civilite.libelle,
                    CASE WHEN autorisation_archive.marital IS NOT NULL AND autorisation_archive.marital != ''
                        THEN
                            autorisation_archive.marital
                        ELSE
                            autorisation_archive.nom
                    END,
                    prenom)
                FROM
                    %1\$sautorisation_archive
                    LEFT JOIN %1\$stitre_de_civilite
                        ON autorisation_archive.titre = titre_de_civilite.titre_de_civilite
                WHERE
                    autorisation = <idx>
            ",
            DB_PREFIXE
        );
    }
        /**
     * SETTER_FORM - setType.
     *
     * @return void
     */
    function setType(&$form, $maj) {
        parent::setType($form, $maj);
        $form->setType('demandeur', 'selectstatic');
    }

    /**
     * SETTER_FORM - setSelect.
     *
     * @return void
     */
    function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
        parent::setSelect($form, $maj);
        // Filtre par emplacement pour demandeur
        $this->init_select(
            $form,
            $this->f->db,
            $maj,
            null,
            "demandeur",
            str_replace(
                '<id_emplacement>',
                $this->getParameter("idxformulaire"),
                $this->get_var_sql_forminc__sql("demandeur_by_emplacement")
            ),
            $this->get_var_sql_forminc__sql("demandeur_by_id"),
            false
        );
    }
}
