<?php
namespace Modules\Fournisseur\Controller;

use Modules\Fournisseur\MenuContextuel\CommandeMenuContextuel;
use Modules\GlobalApplication\Repository\Societe;
use Skeleton\Controller\Controller;
use Entity\Model\Fourniss;
use Modules\Fournisseur\Repository\Commande;
use Helpers\Fichier\Fichier;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Helpers\Ariane\ArianeSub;
use Modules\Fournisseur\WebService\HistoriqueFournisseur;
use Helpers\Outil\Date;

class CommandeController extends Controller
{
    public function commandeAction()
    {
        $id = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();
        
        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($id);
        
        $societes = null;
        if ($_SESSION['Session_Login']) {
            $societes = (new Societe($this->pdo))->listRestrictedSocieteForUser();
        }
        
        if ($societes !== null) {
            //AJOUT DE LA SOCIETE COURANTE
            array_push($societes, ['CODE_STE' => $_SESSION['Session_SocUsr'], 'RAIS_SOC' => '']);
        } else {
            $societes = new \Entity\Model\Societe($this->pdo);
            $societes = $societes->fetchAll([]);
        }
        
        $listeSociete = '';
        
        foreach ($societes as $soc) {
            if (!$listeSociete) {
                $listeSociete .= "'".$soc['CODE_STE']."'";
            } else {
                $listeSociete .= ', \''.$soc['CODE_STE']."'";
            }
        }
        
        $paginator = new \Helpers\Pagination\PaginatorGestion();
        $paginator->generate(0, 'NO_CDE');
        
        $commande = new Commande($this->pdo);
        $listeCommande = $commande->listeCommande($id, $post, $listeSociete);
        $menuContextuel   = new CommandeMenuContextuel($this->pdo, $this->router, $this->getTranslationService());

        foreach ($listeCommande as &$commande) {
            $commande['menuContextuel'] = $menuContextuel->generate($commande['NO_CDE']);
        }

        $infoPagination = $paginator::getInfoPagination();
        /* trad */
        

        $trad = $this->getTranslationService();
        
        $listeEtatCommande = [
            'E' => $trad->t('En cours'),
            'A' => $trad->t('En Attente'),
            'V' => $trad->t('Validée'),
            'S' => $trad->t('Soldées physiquement'),
            'Z' => $trad->t('Annulées'),
        ];
        
        ArianeSub::generate(1, 0, $trad->t('Commande'), $_SERVER['REQUEST_URI'], 1, $post);
        
        return $this->renderer->render('@Fournisseur/Historique/commande', [
            'menuActive'          => 'Fournisseur',
            'menuLeft'            => 'GestionFournisseur',
            'code_fournisseur'    => $id,
            'libelle_fournisseur' => $fournis['RS'],
            'infoPagination'      => $infoPagination,
            'listeCommande'       => $listeCommande,
            'listeEtat'           => $listeEtatCommande,
        ]);
    }
    
    public function exportCommandeCSVAction() : string
    {
        $id = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();

        $texteAtrad                         = [
                                                'N° de commande',
                                                'Date création',
                                                'Acheteur',
                                                'Total ss remise',
                                                'Total HT remisé',
                                                'TTC remisé',
                                                'Etat',
                                                'En cours',
                                                'En Attente',
                                                'Validée',
                                                'Soldées physiquement',
                                                'Annulées',
        ];

        $trad = $this->getTranslationService();

        $societes = null;
        if ($_SESSION['Session_Login']) {
            $societes = (new Societe($this->pdo))->listRestrictedSocieteForUser();
        }

        if ($societes !== null) {
            //AJOUT DE LA SOCIETE COURANTE
            array_push($societes, ['CODE_STE' => $_SESSION['Session_SocUsr'], 'RAIS_SOC' => '']);
        } else {
            $societes = new \Entity\Model\Societe($this->pdo);
            $societes = $societes->fetchAll([]);
        }
        
        $listeSociete = '';
        
        foreach ($societes as $soc) {
            if (!$listeSociete) {
                $listeSociete .= "'".$soc['CODE_STE']."'";
            } else {
                $listeSociete .= ", '".$soc['CODE_STE']."'";
            }
        }

        $paginator = new \Helpers\Pagination\PaginatorGestion();
        $paginator->generate(0, 'NO_CDE');
        
        $listeCommande = (new Commande($this->pdo))->listeCommande($id, $post, $listeSociete);

        foreach ($listeCommande as &$commande) {
            switch ($commande['ETAT_CDE']) {
                case 'V':
                    $commande['ETAT_CDE']   = $trad->t('Validée');
                    break;
                case 'A':
                    $commande['ETAT_CDE']   = $trad->t('En Attente');
                    break;
                case 'E':
                    $commande['ETAT_CDE']   = $trad->t('En cours');
                    break;
                case 'S':
                    $commande['ETAT_CDE']   = $trad->t('Soldées physiquement');
                    break;
                case 'Z':
                    $commande['ETAT_CDE']   = $trad->t('Annulées');
                    break;
            }
            $commande['DTE_CREAT']          = DATE::dateConverte($commande[ 'DTE_CREAT' ]);

            $commande                                   = [
                $trad->t('N° de commande')         => $commande[ 'NO_CDE' ],
                $trad->t('Date création')          => $commande[ 'DTE_CREAT' ],
                $trad->t('Acheteur')               => $commande[ 'NOM' ],
                $trad->t('Total ss remise')        => number_format($commande[ 'TOT_CDE' ], 2, '.', ''),
                $trad->t('Total HT remisé')        => number_format($commande[ 'TOT_CDEHT' ], 2, '.', ''),
                $trad->t('TTC remisé')             => number_format($commande[ 'TOT_TTC' ], 2, '.', ''),
                $trad->t('Etat')                   => $commande[ 'ETAT_CDE' ],
            ];
        }
        
        \Helpers\ExportTo\Outils::gestionEmailAsync2(
            'export_commande_'.$id,
            $listeCommande,
            $this->JWTKEY,
            $this->router,
            $this->getTranslationService()
        );


        return 'ok';
    }
    
    public function impressionCdeAction() : string
    {
        $idCommande = $this->request->getAttribute('idCommande');
        
        $retour = HistoriqueFournisseur::impressionCde(['NumeroCde' => $idCommande]);
        
        $retourXML = new \SimpleXMLElement($retour->responseData);

        $extention = pathinfo($retourXML->FichierPDF);
        
        $url = Fichier::URLDownload($extention['basename']);
        $message = Fichier::UploadClient($url, $extention['basename']);
        return $message;
    }
}
