<?php
/**
 * Classe permettant de gérér le PunchOut
 *
 */
class PunchOut
{

    // Propriété d'une connexion PunchOut
    protected $id_cat;// Int : Identifiant du catalogue de type punchOut
    protected $code_frs;// String : Code du fournisseur proposant le punchOut
    protected $format_po;// String : Format d'échange du punchOut (CXML ou OCI)
    protected $url_connexion_po;// String : Url de connexion au site du fournisseur proposant le punchOut
    protected $url_retour_oxaproc;// String : Url de retour sur l'application Oxaproc
    protected $info_catalogue;// Array : Tableau contenant les informations relatives au catalogue PunchOut
    protected $lexique;

    /**
     * Constructeur de la classe
     *
     * @param int $id_cat : identifiant du catalogue de type PunchOut
     */
    public function __construct($id_cat)
    {
        // Initialisation des propriétés
        $this->id_cat = $id_cat;
        
        $catalogue = new Catalogue($id_cat);
        $this->info_catalogue = $catalogue->getInfoOnCatPunchOut();
        
        $this->code_frs = $this->info_catalogue['REGRFOUR'];
        $this->format_po = $this->info_catalogue['SRCDATA'];
        $this->url_connexion_po = $this->info_catalogue['URL_CONNECT'];
        
        // Initialisation de l'url de retour vers laquelle seront renvoyée les paniers fournisseur PunchOut
        $this->url_retour_oxaproc = Param::getProtocolWeb() . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
        $this->url_retour_oxaproc = mb_substr($this->url_retour_oxaproc, 0, strrpos($this->url_retour_oxaproc, '/'));
        $this->url_retour_oxaproc .= '/punchOut.php?action=createItems_' . $this->id_cat;
        
        // Initialisation du tableau de lignes de panier punchOut
        $this->listeItemsPanier = array();
        
        // Modification ajustement du lexique via Victor le 14/09/15 confirmé EDP le 15/09/15
        $this->lexique = array(
            'PRIXNET' => 'PX_ART',
            'CODEACDR' => 'COD_ACD',
            'UNITE' => 'COD_UNIT',
            'REFARTFOU' => 'REF_FOURN',
            'DESIGNCRT' => 'DES_ART',
            'DESIGNLG' => 'DES_COMP',
            'CODEFOUR' => 'COD_FOURN',
            'SOUSFAMI' => 'COD_SFAM',
            'REFARTFAB' => 'REF_FAB',
            'FABRICANT' => 'COD_FAB',
            'GAMFABRIC' => 'COD_GAM',
            'CONDITNT' => 'CONDITNT',
            'TXTCOND' => 'TXTCOND',
            'DEVISE_CAT' => 'COD_DEV',
            'TAUX_TVA' => 'TAUX_TVA',
            'IMAGE' => 'IMGART',
            'CODEARTI' => 'COD_ART',
            'DELAIREA' => 'DELAI',
            'CARACTER' => 'CARACT',
            'TYPIMAGE' => 'TYPIMAGE'
        );
    }

    // http://transaction.manutangroup.com/is-bin/INTERSHOP.enfinity/eTS/Store/-/-/-/N_AribaPunchOutSetupRequest-Start?shop=MAF
    // https://b2b.officedepot.nl/invoke/EIFR/ocilogin
    // http://www.rexel.fr/catalogueOCI.aspx
    // username=DEMO&password=DEMO&account=1489905&company=DEMO&OCI_VERSION=4.0
    
    /**
     * Fonction réalisant l'insertion des articles du PunchOut dans le panier en cours
     *
     * @param $mode :
     *            create ou edit, indique si l'insertion du panier punch out est réalisé suite à la création d'un nouveau panier punch out
     *            ou bien suite à la modification d'un panier punch out
     */
    public function insertListeArticleFromPunchOut($mode)
    {
        if ('edit' == $mode) { // S'il s'agit du mode modification de panier punch out
                               // On supprime dans un premier temps toutes les lignes correspondant aux punchout précédent
                               // afin de prévenir l'apparition de ligne en doublon dans le cas des modifications de punch out cXML
            SqlPanierLigne::rqDeleteLigneByID_CAT($this->id_cat, $this->code_frs)->ExecuteSql();
        }

        $panierEntete = new PanierEntete();
        $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
        // On enregistre toutes les lignes du punchout
        foreach ($this->listeItemsPanier as & $itemPanier)
            InsertQteArticlePanier($_SESSION['id_panier'], 1, $itemPanier, $itemPanier['qte'], '', '', '', // L'axe d'imputation est mis à blanc car c'est le process d'insertion qui va declenché les init
'', // L'axe d'imputation est mis à blanc car c'est le process d'insertion qui va declenché les init
'', // L'axe d'imputation est mis à blanc car c'est le process d'insertion qui va declenché les init
'', // L'axe d'imputation est mis à blanc car c'est le process d'insertion qui va declenché les init
'', $panierEntete->getLIV_CTR(), $panierEntete->getMOD_TRS(), '', 0, '', false, true, NULL);
    }

    public function initLigne(& $base)
    {
        $fournisseur = new Fournisseur($this->code_frs);
        
        $base['PROVENANCE'] = Article::PO; // La provenance de la ligne est de type PunchOut
        $base['IDLIGNE'] = '';
        $base['NO_SERIALIZATION'] = ''; // Utilisation reference unique information
        $base['DATABASEID'] = ''; // Utilisation reference unique information
        $base['ID_CAT'] = $this->id_cat;
        $base['COD_ART'] = '';
        $base['COD_FOURN'] = $this->code_frs;
        $base['RS_FOURN'] = (is_null($fournisseur->getEC()) || $fournisseur->getEC() == '') ? $fournisseur->getRS() : $fournisseur->getEC();
        $base['VILLE_FOURN'] = '';
        $base['COD_FAB'] = '';
        $base['RS_FAB'] = '';
        $base['COD_GAM'] = '';
        $base['LIB_GAM'] = '';
        $base['REF_FAB'] = '';
        $base['CODE_FAM'] = '';
        $base['DESIGNFAM'] = '';
        $base['PX_ART_INIT'] = '';
        $base['DELAI'] = '';
        $base['CARACT'] = '';
        $base['FICHTECH'] = false;
        $base['ARTASSOCIE'] = false;
        $base['ARTASSOCIE'] = false;
        $base['IMGART'] = '';
        $base['TYPIMAGE'] = '';
        $base['COD_ACD'] = '';
        $base['CPOSTAL'] = '';
        $base['VILLE1'] = '';
        $base['COD_GRP'] = '';
        $base['CONDITNT'] = '0';
        $base['TXTCOND'] = '';
        $base['CLASSNUM'] = '';
        $base['TYPECATA'] = '';
        $base['CATPRLST'] = $this->id_cat;
        $base['ID_EXTERNE'] = '';
    }
}
