<?php
namespace Modules\Fournisseur\Controller;

use API\Partenaire\IFournissLink;
use API\Partenaire\Repository\PartenaireRepo;
use Entity\Model\FournScoring;
use Entity\Model\Regroupement;
use Helpers\ExportTo\Outils;
use Helpers\Filter\FiltreAvance\GeneratorCs;
use Modules\Fournisseur\Service\NotationService;
use Modules\GlobalApplication\Repository\LicenceOxalys;
use Modules\Fournisseur\Repository\GestFourniss;
use Entity\Model\Paravrac;
use Helpers\Fichier\Fichier;
use Modules\Fournisseur\Outil\Excel\GenerateExcel;
use Helpers\Session\Session;
use Helpers\Ariane\Ariane;
use Helpers\Outil\Roles;
use Helpers\Outil\Sql;
use Helpers\Pagination\PaginatorGestion;
use Modules\Fournisseur\MenuContextuel\GestionMenuContextuel;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Skeleton\Controller\Controller;
use Helpers\Session\ParseBase1;

class GestionFournisseurController extends Controller
{
    public function indexAction()
    {
        $user   = $_SESSION['Session_Login'];
        $post   = $this->request->getParsedBody();
        $filtre = $this->request->getAttribute('filtre');
        $mode   = $this->request->getAttribute('mode');
        $trad = $this->getTranslationService();
                
        /* NE PAS TOUCHER MERCI, CELA SERT SUR LES RACCOURCIES DEPUIS LE TABLEAU DE BORD !!!!!!! */
        if ($filtre) {
            if ((
                    ($post['filter_typeDoc'] ?? '') == $filtre
                    && (isset($post['filter_statut'])
                    && $post['filter_statut']=='Reference')
                ) || !$post
            ) {
                if ($mode=='INTERNE') {
                    $post['RAT_PART'] = 'NON';
                } elseif ($mode=='API') {
                    $post['RAT_PART'] = 'API';
                }
                
                $post['filter_typeDoc'] = $filtre;
                $post['filter_statut']  = 'Reference';
                
                $post['filter_valid']='VALIDE';
                $post['tri_CODE_ACD'] = 'desc';
                $post['tri_RS'] = 'asc';
            }

            // Filter Demande de modification de Founisseur via un Partenaire
            if ($filtre == 'dem_part') {
                $post['filter_DemPart'] = '*';
            }
        } elseif (!$post) {
            $post['filter_valid']='VALIDE';
            $post['tri_RS'] = 'asc';
        }
        if (isset($post['tri_RS'])) {
            $temp = $post['tri_RS'];
            unset($post['tri_RS']);
            $post['tri_CODE_ACD'] = 'desc';
            $post['tri_RS'] = $temp;
        }
        
        if (isset($post['filter_INV_PART']) && $post['filter_INV_PART']) {
            $_SESSION['bulleFiltre']['filter_INV_PART']['titre'] = $trad->t('Partenaire invités sur');
            $_SESSION['bulleFiltre']['filter_INV_PART']['value'] = 'HIVEO';
        }
                
        if (isset($post['filter_egal_CODE_REGR']) && $post['filter_egal_CODE_REGR']) {
            $_SESSION['bulleFiltre']['filter_egal_CODE_REGR']['titre'] = $trad->t('Catégorie fournisseur');
            $_SESSION['bulleFiltre']['filter_egal_CODE_REGR']['value'] = $post['filter_egal_CODE_REGR'];
        }
                
        $showCategorieColumn = !empty((new Regroupement($this->pdo))->isItEmpty());
        $showNoteColumn = !empty((new FournScoring($this->pdo))->isItEmptyWithPrincipalScore());

        $paravra = Sql::paravrac($this->pdo, "PARAMGEN", "FOURN_DOCRAT_DELAIRELANCE");
        $paravra = explode("|", $paravra);

        $paginator = new \Helpers\Pagination\PaginatorGestion();
        $paginator->generate(0, 'F.CODE');
        
        $gestFourniss = new GestFourniss($this->pdo);
        $listeFourniss = $gestFourniss->listeFournisseur($user, $post, $paravra[1] ?? '');
        $gestFourniss->joinFournissListSoc($listeFourniss, 'listSociete');
        
        Ariane::generate(0, $trad->t('Gestion'), $post, PaginatorGestion::getNbrArticle());
        $infopagination = PaginatorGestion::getInfoPagination();

        $session = new Session('Fournisseur');
        
        $listeFrs=[];
        foreach ($listeFourniss as &$frs) {
            $listeFrs[] = "'".$frs['CODE']."'";
            if (!empty($frs['NOTE'])) {
                $frs['NOTE'] = NotationService::suppression0nonSignificatif($frs['NOTE']);
            }
        }
        
        $listeFrsForDoc = @implode(', ', $listeFrs);
        
        $doc = new \Modules\Fournisseur\Repository\DocAtt($this->pdo);
   
        // TODO BBA optimisation perf
        // $docCritiqueValide = $doc->controlDocumentAllFrs($listeFrsForDoc, true);
        // $last = '';
        // $arrayTmp = [];
        // foreach ($docCritiqueValide as $value) {
        //     if ($last != $value['COD_ENR'] && $last != '') {
        //         $frsDocCritique[$value['COD_ENR']] = $arrayTmp;
        //         $arrayTmp = [];
        //     }

        //     $last = $value['COD_ENR'];
        //     $arrayTmp[] = $value;
        // }
        // $frsDocCritique[$last] = $arrayTmp;

        
        // $docNoCritiqueValide = $doc->controlDocumentAllFrs($listeFrsForDoc, false);
        // $last = '';
        // $arrayTmp = [];
        // foreach ($docNoCritiqueValide as $value) {
        //     if ($last != $value['COD_ENR'] && $last != '') {
        //         $frsNoDocCritique[$value['COD_ENR']] = $arrayTmp;
        //         $arrayTmp = [];
        //     }

        //     $last = $value['COD_ENR'];
        //     $arrayTmp[] = $value;
        // }
        // $frsNoDocCritique[$last] = $arrayTmp;

        $partByFrs = [];
        if (!empty($listeFrs)) {
            $listePartenaire = (new PartenaireRepo($this->pdo))->listePartenaireFrs(array_column($listeFourniss, 'CODE'));
            foreach ($listePartenaire as $frsPart) {
                $partByFrs[$frsPart['CODE_FOU']][] = $frsPart['CODEPARTENAIRE'];
            }
        }
        
        /* ******************************************* */
        
        /* Chargement du tableau de filtrage */
        $listeTypeFourniss   = $gestFourniss->listeTypeFournisseur();
        $tabTypeFourniss[''] = $trad->t('Tous les fournisseurs');

        for ($i=0; $i<count($listeTypeFourniss); $i++) {
            $tabTypeFourniss[$listeTypeFourniss[$i]['LIBELLE']]=$listeTypeFourniss[$i]['LIBELLE'];
        }

        $listeEtat = [
            ''           => $trad->t('Tous les fournisseurs'),
            'VALIDE'     => $trad->t('Fournisseur valide'),
            'NON_VALIDE' => $trad->t('Fournisseur non valide'),
        ];

        $listeClasse = [
            'A' => 'A',
            'B' => 'B',
            'C' => 'C',
        ];

        $listeDocument = [
            ''                  => $trad->t('tous les documents'),
            'A_JOUR'            => $trad->t('Documents à jour'),
            'SURV_ABSENT'       => $trad->t('Documents en surveillance absents'),
            'ABSENT'            => $trad->t('Documents absents'),
            'SURV_RELANCE'      => $trad->t('Documents en surveillance à relancer'),
            'RELANCE'           => $trad->t('Documents à relancer'),
            'CRITIQUE_A_JOUR'   => $trad->t('Documents critiques à jour'),
            'CRITIQUE_ABSENT'   => $trad->t('Documents critiques absents'),
            'CRITIQUE_RELANCE'  => $trad->t('Documents critiques à relancer'),
            'VIGI_A_JOUR'       => $trad->t('Documents en vigilance à jour'),
        ];
        /* ********************************* */
        unset($_SESSION['PaginatorGestion']);
        /* Filtre avancées */
        $filtreAvance = new GeneratorCs($post, 'FOURNISS', 'F.CODE', $this->pdo, $trad);

        $DroitUtilisateur = new DroitUtilisateur($this->router);
        $parametrageOnglet = $DroitUtilisateur->parametrageOngletFournisseur($this->pdo);
        $paramFrsPresent = $DroitUtilisateur->parametrageFournisseurPresent($this->pdo);

        $filtreAvance->setFiltre('F.NO_SIRET', 'text', $trad->t('N° de SIRET'));
        $filtreAvance->setFiltre('F.NO_TVA_IC', 'text', $trad->t('N° de TVA IC'));
        $filtreAvance->setFiltre('F.ENSCOMM', 'text', $trad->t('Enseigne commerciale'));
        // $filtreAvance->setFiltre('RAT_PART', 'bool', $trad->t('rattaché à un partenaire ?'), '', null, null, null, true);
        // $filtreAvance->setFiltre('RAT_PART', 'bool', $trad->t('rattaché à un partenaire ?'), '', null, 'RAT_PART', null, true);
        $filtreAvance->setFiltre('F.ID_EXT', 'text', $trad->t('identifiant externe'));
        $filtreAvance->setFiltre('F.NO_DUNS', 'text', $trad->t('DUNS Number'));
        $filtreAvance->setFiltre('F.CPOSTAL', 'text', $trad->t('Code postal'));
        
        if (!($paramFrsPresent && ($parametrageOnglet['CONDT_NONVISIBLE']??false) == true && (!roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS') || !roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS')))) {
            $filtreAvance->setFiltre('F.COND_PAIE', 'liste', $trad->t('Conditions de paiement'), '', 'Ajax.liste.conditionPaiement', 'CondPaie');
            $filtreAvance->setFiltre('F.MODE_PAIE', 'liste', $trad->t('Mode de paiement'), '', 'Ajax.liste.modePaiement', 'Modepaie');
            $filtreAvance->setFiltre('F.LIV', 'liste', $trad->t('Conditions de livraison'), '', 'Ajax.liste.modelivraison', 'ModeLivr');
            $filtreAvance->setFiltre('F.TYP_TVA', 'liste', $trad->t('Type de tva'), '', 'Ajax.liste.typeTVA', 'typeTVA');
            $filtreAvance->setFiltre('F.MNTMINFAC', 'numeric', $trad->t('Minimum de facturation'));
            $filtreAvance->setFiltre('F.AUTOCC', 'bool', $trad->t('Autorisé à Cde eProc'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.NOCCGEN', 'bool', $trad->t('interdire à Cde eProc sur articles hors catalogue'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.SEUILEPDIF', 'bool', $trad->t('Seuils Cde eProc différents Catalogue / hors catalogue ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.CA_MIN_ST', 'numeric', $trad->t('CA Minimum sous-traitant'));
            $filtreAvance->setFiltre('F.CA_MAX_ST', 'numeric', $trad->t('CA Maximum sous-traitant'));
            $filtreAvance->setFiltre('F.FOURPREF', 'bool', $trad->t('Fournisseur Préferentiel ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.DEFTYPDOC', 'liste', $trad->t('Type de document'), '', 'Ajax.liste.typeDoc', 'typeDoc');
            $filtreAvance->setFiltre('F.RFRACT', 'bool', $trad->t('Règle de franco active ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.MNTMINFRA', 'numeric', $trad->t('Minimum de franco'));
            $filtreAvance->setFiltre('F.FRPOBLIG', 'bool', $trad->t('Frais de port obligatoire ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.ZONE_LIB1', 'text', $trad->t('Zone libre 1'));
            $filtreAvance->setFiltre('F.ZONE_LIB2', 'text', $trad->t('Zone libre 2'));
            $filtreAvance->setFiltre('F.FOURPRIN', 'liste', $trad->t('Groupement'), '', 'Ajax.liste.grpfou', 'Grpfou');

            $filtreAvance->setFiltre('F.MTMAXCC', 'numeric', $trad->t('Montant Max (catalogue)'));
            $filtreAvance->setFiltre('F.MTMAXCCHCT', 'numeric', $trad->t('Montant Max (Hors catalogue)'));
        }

        if (!($paramFrsPresent && ($parametrageOnglet['REGLEM_NONVISIBLE']??false) == true && (!roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS') || !roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS')))) {
            $filtreAvance->setFiltre('F.RS_REGL', 'text', $trad->t('Raison sociale de règlement'));
            $filtreAvance->setFiltre('F.RESP_FAC', 'liste', $trad->t('Resp. Traitement facture'), '', 'Ajax.liste.utilisateur', 'hastutil');
        }

        if (!($paramFrsPresent && ($parametrageOnglet['DETAIL_NONVISIBLE']??false) == true && (!roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS') || !roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS')))) {
            $filtreAvance->setFiltre('F.DTE_AGREM', 'date', $trad->t('Date d\'agrément'));
            $filtreAvance->setFiltre('F.GEREPORTAIL', 'bool', $trad->t('Fournisseur OXA.LINK ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.FRANCTVA', 'bool', $trad->t('Achat systématique en franchise de TVA ?'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.NOT_MANU', 'bool', $trad->t('Notation manuelle systématique'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.NAUTOSFA', 'bool', $trad->t('Pas d alimentation automatique des Sous-Familles'), '', null, null, 'bdd');
            $filtreAvance->setFiltre('F.RECEP_AUTO', 'bool', $trad->t('Réception automatique des cdes'), '', null, null, 'bdd');
        }
        
        // Filtre avancé repository
        $filtreAvance->setFiltre('SSFAM', 'liste', $trad->t('Sous famille'), '', 'Ajax.liste.sousFamille', 'SousFamille', null, true);
        $filtreAvance->setFiltre('CLEFFOUR', 'liste', $trad->t('Mot clef'), '', 'Ajax.liste.motClef', 'MotClef', null, true);
        $filtreAvance->setFiltre('DOMAINE', 'liste', $trad->t('Domaine de comp.'), '', 'Ajax.liste.domaineCompetence', 'DomaineCompetence', null, true);
        if ($showNoteColumn) {
            $filtreAvance->setFiltre('fouscor.VAL_SCORE', 'numeric', $trad->t('Note'));
        }
        /* *************** */

        /* DROIT */
        $listeDroit = [
            'HA_PRO_MOD' => Roles::droitsUtilisateur($this->pdo, 'HA_PRO_MOD'),
            'HA_FOU_MOD' => Roles::droitsUtilisateur($this->pdo, 'HA_FOU_MOD'),
            'HA_BAS_PF'  => Roles::droitsUtilisateur($this->pdo, 'HA_BAS_PF'),
            'HA_GFO_AD'  => Roles::droitsUtilisateur($this->pdo, 'HA_GFO_AD'),
            'HA_FOU_OCF' => Roles::droitsUtilisateur($this->pdo, 'HA_FOU_OCF'),
            'HA_FOU_INV' => Roles::droitsUtilisateur($this->pdo, 'HA_FOU_INV'),

            'HA_FOU_VIS' => Roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS'),
            'HA_PRO_VIS' => Roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS'),
        ];
        
        $DroitUtilisateur = new DroitUtilisateur($this->router);
        if ($paramFrsPresent) {
            if (!roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS') && $parametrageOnglet['OXA360_NONVISIBLE'] == true) {
                $listeDroit['FOU_OXA360_NON_VISI'] = 1;
            }
            
            if (!roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS') && $parametrageOnglet['OXA360_NONVISIBLE'] == true) {
                $listeDroit['PRO_OXA360_NON_VISI'] = 1;
            }
        }

        

        /**
         * Mise en place des invitation HIVEO et INFO LEGAL
         */

        $listFilterPartenaireChoice = [];
        
        $listeHiveo = [];
        $partenaire = new  \Modules\API\APIExterne\Repository\Partenaire($this->pdo);

        $listPartCountTmp = $partenaire->getListeIsPartenaireConnect();
        $listPartCount = [];
        foreach ($listPartCountTmp as $p) {
            $listPartCount[$p['TYPEDICO']] = $p['count'];
        }

        if (($listPartCount['HIVEO']??null)) {
            $listeTmp = $partenaire->listeFournisseurPartenaire('HIVEO', true);
            foreach ($listeTmp as $listeHiveoArray) {
                $listeHiveo[$listeHiveoArray['CODE_FOU']] = 1;
            }
            
            $listFilterPartenaireChoice['HIVEO'] = 'HIVEO';
            
            $listeDocument['DOC_PART_HIVEO'] = $trad->t('Documents partenaire irregulier');
        }

        $listeEAT = [];
        if (($listPartCount['EAT']??null) && $partenaire->countConcordance('EAT')) {
            $listeTmp = $partenaire->listeFournisseurPartenaire('EAT', true);
           
            foreach ($listeTmp as $listeEATArray) {
                $listeEAT[$listeEATArray['CODE_FOU']] = 1;
            }
            

            $paramdico = new \Entity\Model\ParamDico($this->pdo);
            $arrayFournisseurDesactive = $paramdico->findAll(['ALPHA2'=> 'D', 'TYPEDICO' => 'INVIT_PARTFOU', 'ID1' => 'EAT'], ['ID3']);

            foreach ($arrayFournisseurDesactive as $listeEATArray) {
                $listeEAT[$listeEATArray['ID3']] = -1;
            }
            $listFilterPartenaireChoice['EAT'] = 'EAT';
            
            $listeDocument['DOC_PART_EAT'] = $trad->t('Documents partenaire irregulier');
        }
        
        $listeINFOLG = [];
        if (($listPartCount['INFOLG']??null)) {
            $listeTmp = $partenaire->listeFournisseurPartenaireDonnee('INFOLG');
            foreach ($listeTmp as $listeINFOLGArray) {
                $listeINFOLG[$listeINFOLGArray['CODE_FOU']] = 1;
            }
            
            $listFilterPartenaireChoice['INFOLG'] = 'INFO LEGALE';
        }

        $listeBVD = [];
        if (($listPartCount['BVD']??null)) {
            $listeTmp = $partenaire->listeFournisseurPartenaireDonnee('BVD');
            foreach ($listeTmp as $listeBVDArray) {
                $listeBVD[$listeBVDArray['CODE_FOU']] = 1;
            }
            
            $listFilterPartenaireChoice['INFOLG'] = 'BVD';
        }

        // TODO : use licence instead
        if (($listPartCount['PROVIGIS']??null)) {
            $listFilterPartenaireChoice['PROVIGIS'] = 'PROVIGIS';
        }



        // Droits pour la création fournisseur
        $ajout_ACTIF = Roles::droitsUtilisateur($this->pdo, 'HA_PRO_CRE') || Roles::droitsUtilisateur($this->pdo, 'HA_FOU_CRE');

        // TODO : still used by ALG, why only pick first on the list  ?
        $listLicPartn = (new LicenceOxalys($this->pdo))->getPartenaireList();

        $listPartnActif = $this->getPartenaireService()->listActifPartenaire();
        foreach ($listPartnActif as $patn) {
            if (! ($patn instanceof IFournissLink)) {
                continue;
            }
            $listFilterPartenaireChoice[ $patn->getCode() ] =
                mb_strtoupper($patn->getLabel());
        }

        
        
        $menuContextuel = new GestionMenuContextuel(
            $this->pdo,
            $this->router,
            $this->getTranslationService(),
            $this->contenaire,
            $session,
            $listLicPartn,
            $listeINFOLG,
            $listeEAT,
            $listeHiveo,
            $listeBVD,
            $partByFrs,
            $listPartnActif
        );

        foreach ($listeFourniss as &$frs) {
            $frs['menuContextuel'] = $menuContextuel->generate($frs, $tabTypeFourniss);

            $frs['etat_DOC_CRIT'] = $this->calculEtatDoc($frs['DOC_CRIT'], (int)$paravra[1]);
            $frs['etat_DOC_NOT_CRIT'] = $this->calculEtatDoc($frs['DOC_NO_CRIT'], (int)$paravra[1]);
        }
        
        return $this->renderer->render('@Fournisseur/GestionFournisseur/index', [
            'menuLeft'          => 'GestionFournisseur',
            'menuActive'        => 'Fournisseur',
            
            'post'              => $post,
            'listeEtat'         => $listeEtat,
            'listeDroit'        => $listeDroit,
            'ajout_ACTIF'       => $ajout_ACTIF,
            'listeClasse'       => $listeClasse,
            
            'listeDocument'     => $listeDocument,
            'listeFourniss'     => $listeFourniss,
            'infoPagination'    => $infopagination,
            'relance'           => $paravra[1]??'',
            'tabTypeFourniss'   => $tabTypeFourniss,
            'initFiltreAvance'  => $filtreAvance->getInit(),
            'filtreAvance'      => $filtreAvance->getFiltres(),
            'CreationEnCours'   => Session::backToFrs(),
            'module'            => 'FOURNISS',
            'partFournisseur'   => $partByFrs,
            'listeHiveo'        => $listeHiveo,
            'listeEAT'          => $listeEAT,

            'hiveoActif'        => $listPartCount['HIVEO']??false,
            'EATActif'          => $listPartCount['EAT']??false,
            'infolgActif'       => $listPartCount['INFOLG']??false,
            'provigisActif'     => $listPartCount['PROVIGIS']??false,

            'BVDActif'          => $listPartCount['BVD']??false,
            'listeINFOLG'       => $listeINFOLG,
            'listeBVD'          => $listeBVD,
            'listFilterPartenaireChoice'   => $listFilterPartenaireChoice,
            'linkFrsSte'        => Roles::droit($this->pdo, 'LIEN_FOU_STE_ACTIF', 'PARAMFOU'),
            //'partenaire'        => $partenaireOxalys,
            'titleShortList'    => $trad->t('Short lists du fournisseur'),
            // 'frsDocCritique'    => $frsDocCritique,
            // 'frsDocNoCritique'  => $frsDocCritique
            'showCategorieColumn' => $showCategorieColumn,
            'showNoteColumn' => $showNoteColumn,
        ]);
    }

    private function calculEtatDoc(string $date, int $relance) : int
    {
        $dateDepartTimestamp = strtotime($date);
        $dateTmp = $dateDepartTimestamp + ($relance * -3600 * 24);
        $relance = date('Ymd', $dateTmp);

        if ($date == '') {
            //Si $date == '' c'est que le fournisseur n'a aucun document a contrôler
            $etat = 2;
        } elseif (date('Ymd') <= $date and date('Ymd') >= $relance) {
            // si la date du jours est entre la date de fin du doc et la date de relance, on le met en orange
            $etat = 1;
        } elseif ($date != '00000000' && $date < date('Ymd')) {
            // si la date du jours dépasse la date de fin du doc, alors rouge
            $etat = 0;
        } else {
            // sinon tout est ok
            $etat = 2;
        }

        return $etat;
    }

    public function favoriAction() : string
    {
        $id   = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();

        $fav = new GestFourniss($this->pdo);

        if ($post['favEta']!='-1') {
            $fav->rmvFavori($id, $_SESSION['Session_Login']);
        } else {
            $fav->addFavori($id, $_SESSION['Session_Login']);
        }

        return $id;
    }

    public function editionAction() : string
    {
        $idFou = $this->request->getAttribute('id');

        $xmlResult = new \Modules\Fournisseur\WebService\GestionFournisseur();
        $xmlResult = $xmlResult->EditionFournisseur($idFou);

        $reponse = new \SimpleXMLElement($xmlResult->responseData);

        $url = Fichier::URLDownload($reponse->FichierPDF);

        $urlEncode = pathinfo($reponse->FichierPDF);

        $message = Fichier::UploadClient($url, "Fiche_fournisseur_".$reponse->CodeFour.".".($urlEncode['extension']??'pdf'));
        return $message;
    }

    public function invitPartenaireAction() : string
    {
        $id   = $this->request->getAttribute('id');
        $partenaire   = $this->request->getAttribute('idPartenaire');

        // TODO : why only use the first one ?
        $listLicPartn = (new LicenceOxalys($this->pdo))->getPartenaireList();
        
        $trad = $this->getTranslationService();

        if (! empty($listLicPartn)) {
            $xmlResult = new \Modules\Fournisseur\WebService\GestionFournisseur();
            $xmlResult = $xmlResult->invitFournisseur($id, $partenaire);

            $reponse = new \SimpleXMLElement($xmlResult->responseData);

            if ($reponse->Statut=="O") {
                $message = $trad->t("Votre invitation a bien été prise en compte");
                $reload=true;
            } else {
                $message =  $reponse->MsgErreur;
            }
        } else {
            $message =  $trad->t("Vous n'avez pas de partenaire");
        }

        return $this->renderer->render('@popup-erreur/confirmationGestion', [
            'message'   => $message,
            'iconePopup' => 'information',
            'reload'    => $reload??false,
        ]);
    }

    public function exportCSVAction() : string
    {
        $user = $_SESSION['Session_Login'];
        $post = $this->request->getParsedBody();
        
        $paravra = new Paravrac($this->pdo);
        $paravra = $paravra->getGeneric("FOURN_DOCRAT_DELAIRELANCE");
        $paravra = explode("|", $paravra);

        $listeFourniss = new GestFourniss($this->pdo);
        $listeFourniss = $listeFourniss->listeFournisseur($user, $post, $paravra[1], 'wsdl');
        
        $xmlResult = new \Modules\Fournisseur\WebService\GestionFournisseur();
        $xmlResult = $xmlResult->exportCSV($listeFourniss);
        
        $reponse = new \SimpleXMLElement($xmlResult->responseData);

        if (file_exists(Fichier::URLDownload($reponse->ListeDoc->Doc->Fichier))) {
            $generatePhp = new GenerateExcel(12, 'FFFFFF');
            $nomFichier  = $generatePhp->generat(Fichier::URLDownload($reponse->ListeDoc->Doc->Fichier), ";");
    
            Fichier::moveTmpToFicPj($nomFichier);
    
            Outils::sendExportEmailAsync(
                $nomFichier,
                Outils::getExportEmailAsyncRecipient($this->JWTKEY),
                $this->router,
                $this->getTranslationService()
            );
        }

        return 'ok';
    }
}
