<?php

class PopupAdrFrs
{

    /**
     * Attributs
     */
    // Attribut contenant le code du bloc fournisseur sur laquelle la popup contact de livraison est appelée
    protected $CODE_FRS = '';

    protected $CRITERE_REGROUP = '';

    protected $num_bloc = null;

    // Attribut contenant la liste de tous les attributs du contact fournisseur
    public static $LISTE_CHAMPS_ADR = array(
        'ADR_CODE',
        'ADR_LABEL',
        'ADR_ADRESSE',
        'ADR_CP',
        'ADR_VILLE',
        'ADR_PAYS',
        'CODE_CTR_LIV',
        'ADR_TEL',
        'ADR_FAX',
        'ADR_MAIL'
    );

    protected $liste_fields;

    // Attribut de type array contenant les données xml transmises à la xsl
    protected $data_xml;

    protected $mode;

    protected $indice;

    /**
     * Constructeur
     */
    public function __construct($mode, $indice, $critere, $num_bloc = null)
    {
        // Initialisation du centre de livraison
        $this->mode = $mode;
        $this->indice = $indice;
        $this->data_xml['popup_title'] = Trad('Adresse fournisseur');
        
        if (is_array($critere)) {
            $this->CODE_FRS = $critere['COD_FOURN'];
            $this->CRITERE_REGROUP = $critere['CRITERE_REGROUP'];
            $this->num_bloc = $num_bloc;
        } else {
            $this->CODE_FRS = $critere;
            $this->CRITERE_REGROUP = '';
            $this->num_bloc = null;
        }
        
        // On récupère les données du contact de livraiso enregistré au niveau du bloc fournisseur
        if ($mode == 'fournisseur') 
        {

            if (! is_null($indice)) 
            {
                
                $array_filters = array(
                    'DATA_STRICT' => $indice
                );
                
                if ($info_contact_liv = & SqlFournisseur::rqPopupGetAllAdresseFournisseur($this->CODE_FRS, $array_filters, true)->Trouve1()) 
                {
                    $info_contact_liv['ADR_CODE'] = & $info_contact_liv['CODE'];
                    $info_contact_liv['ADR_LABEL'] = & $info_contact_liv['RS'];
                    $info_contact_liv['ADR_ADRESSE'] = & $info_contact_liv['ADR'];
                    $info_contact_liv['ADR_CP'] = & $info_contact_liv['CPOSTAL'];
                    $info_contact_liv['ADR_VILLE'] = & $info_contact_liv['VILLE1'];
                    $info_contact_liv['ADR_PAYS'] = & $info_contact_liv['CODE_PAYS'];
                    
                    $info_contact_liv['ADR_TEL'] = & $info_contact_liv['FAX'];
                    $info_contact_liv['ADR_FAX'] = & $info_contact_liv['TEL'];
                    $info_contact_liv['ADR_MAIL'] = & $info_contact_liv['EMAIL'];
                }
            }
            else
            {
                $info_contact_liv = array(); 
            }
        }            
        else 
        {
            $info_contact_liv = & SqlPanier::rqSelectContactByBlocFrs($critere, $indice, $mode)->Trouve1();
        }
 
        
        foreach (self::$LISTE_CHAMPS_ADR as & $champ) {
            $fieldPopup = new FieldPopup();
            
            $info_champ['CODE_CHP'] = $champ;
            $info_champ['ID_CHP'] = $champ;
            
            // print_r($champ); exit; 

            $valeur_attr = (array_key_exists($champ, $info_contact_liv)) ? $info_contact_liv[$champ] : '';
            $fieldPopup->initAttribut($info_champ, $valeur_attr);
            $fieldPopup->setIS_MODIFY(1);
            
            // On définit les propriétés de chacun des champs
            switch ($champ) {
                
                case 'ADR_CODE': // Champ dedié au nom du contact
                    
                    if ($mode == 'M' || ! is_null($indice))
                        $fieldPopup->setIS_MODIFY(0);
                    
                    $fieldPopup->setMAX_LENGTH(45);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Code'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                
                case 'ADR_LABEL': // Champ dedié au nom du contact
                    $fieldPopup->setMAX_LENGTH(45);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Raison sociale'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                
                case 'ADR_ADRESSE': // Champ dedié à la fonction du contact
                    $fieldPopup->setMAX_LENGTH(90);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Adresse'));
                    $fieldPopup->setVALUE($valeur_attr);
                    
                    break;
                
                case 'ADR_CP': // Champ dedié au téléphone du contact
                    $fieldPopup->setMAX_LENGTH(10);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Code Postal'));
                    $fieldPopup->setVALUE($valeur_attr);
                    
                    break;
                
                case 'ADR_VILLE': // Champ dedié au fax du contact
                    $fieldPopup->setMAX_LENGTH(35);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Ville'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                    
                case 'ADR_MAIL': // Champ dedié au fax du contact
                    $fieldPopup->setMAX_LENGTH(35);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Email'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                    
                case 'ADR_TEL': // Champ dedié au fax du contact
                    $fieldPopup->setMAX_LENGTH(16);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Telephone'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                    
                case 'ADR_FAX': // Champ dedié au fax du contact
                    $fieldPopup->setMAX_LENGTH(16);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Fax'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                
                case 'ADR_PAYS': // Champ dedié au fax du contact
                    $fieldPopup->setMAX_LENGTH(2);
                    $fieldPopup->setATTR_CHP('A');
                    $fieldPopup->setLIB_CHP(trad('Pays'));
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
                
                case 'CODE_CTR_LIV': // Champ contenant le code du centre de livraison
                    $fieldPopup->setATTR_CHP('H');
                    $fieldPopup->setVALUE($valeur_attr);
                    break;
            }
            
            $this->liste_fields['champContactLiv'][] = $fieldPopup;
        }
    }

    /**
     * Méthodes
     */
    
    /**
     * Fonction construisant un tableau de donnée XML en vue de les afficher via une xsl.
     * Cette fonction utilise la liste des champs de l'infobulle définis comme attributs.
     */
    public function buildXmlForXsl($mode)
    {
        $this->data_xml['TypePopup'] = 'ContactLiv';
        
        $panierEntete = new PanierEntete();
        $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
        
        if (false !== stripos($panierEntete->getORIGINE(), 'modifDocPourSignature'))
            $is_modification = 0;
        else
            $is_modification = 1;
        
        // Pour chacun des champs de l'infobulle fournisseur
        foreach ($this->liste_fields['champContactLiv'] as & $champ) {
            if ($champ->getCODE_CHP() == 'ADR_PAYS') {
                if ($pays = SqlUsers::rqGetAllCountry()->TrouveTous())
                    if ($mode == 'C')
                        $champ->setVALUE(Param::getPaysInstall()); // Dossier 25447 Proposition de la valeur par defaut du pays dans le contexte de création d'adresse
            } else
                $pays = array();
            
            $this->data_xml['listeChampsContact']['champ'][] = array(
                'ID_CHP' => $champ->getID_CHP(),
                'CODE_CHP' => $champ->getCODE_CHP(),
                'LIB_CHP' => $champ->getLIB_CHP(),
                'VALUE' => $champ->getVALUE(),
                'ATTR_CHP' => $champ->getATTR_CHP(),
                'MASQ_CHP' => $champ->getMASQ_CHP(),
                'NUM_CHP' => $champ->getNUM_CHP(),
                'IS_ZOOM' => $is_modification == 0 ? 0 : $champ->getIS_ZOOM(),
                'ZOOM_ONCLICK' => $champ->getZOOM_ONCLICK(),
                'IS_MODIFY' => $is_modification == 0 ? 0 : $champ->getIS_MODIFY(),
                'IS_VISIBLE' => $champ->isVisible(),
                'MAX_LENGTH' => $champ->getMAX_LENGTH(),
                'OPTIONS' => $pays
            );
        }
        
        $this->data_xml['listeChampsContact']['champ'][] = array(
            'CODE_CHP' => 'IND_CONTACT_LIV',
            'ATTR_CHP' => 'H',
            'VALUE' => ''
        );
        
        // On définit l'action d'enregistrement du contact fournisseur
        if ($this->mode == 'fournisseur') {
            $this->data_xml['listeActions']['save'] = array(
                '!onclick' => "TraiteUrlAsync('ctrl_popup_frs.php?action=saveAdrHAP" . (is_null($this->num_bloc) ? '' : "&num_bloc={$this->num_bloc}") . "&mode={$mode}" . ($mode == 'M' ? "&indice={$this->indice}" : '') . "&code_frs=" . urlencode($this->CODE_FRS) . "&popup_id=ADRFOUR',document.forms.form_popup_contact_liv.CODE_CTR_LIV,\"" . cnv_to_javascript(trad('Enregistrement de l\'adresse en cours...')) . '");'
            );
        } else {
            $this->data_xml['listeActions']['save'] = array(
                '!onclick' => "TraiteUrlAsync('ctrl_popup_frs.php?action=saveContact" . (is_null($this->num_bloc) ? '' : "&num_bloc={$this->num_bloc}") . "&code_frs=" . urlencode($this->CODE_FRS) . "',document.forms.form_popup_contact_liv.CODE_CTR_LIV,\"" . cnv_to_javascript(trad('Enregistrement de l\'adresse en cours...')) . '");'
            );
        }
        
        $this->data_xml['blocFournisseur'] = array(
            '!value' => $this->CODE_FRS,
            '!type' => trad($this->mode)
        );
    }

    /**
     * Fonction renvoyant le code html généré pour l'affichage de la popup contact livraison
     */
    public function &getHtml($mode)
    {
        // On construit le tableau de données XML
        $this->buildXmlForXsl($mode);
        
        // On définti la feuille de style xsl utilisée
        $feuille_xsl = 'application/xsl/popup_adr_livr.xsl';
        
        // On crée l'objet de gestion de l'affichage XSL
        $obj_xsl = new GenXslt();
        
        // On fusionne et on renvoie la fusion des données xml et de la feuille de style xsl
        return $obj_xsl->XslHtml($feuille_xsl, $this->data_xml);
    }
}
