<?php
namespace Modules\Additional\Specifique\Client118\Modules\EtatStatistique\Controller;

use Helpers\Outil\Sql;
use Skeleton\Controller\Controller;
use Helpers\Ariane\Ariane;
use Modules\Additional\Specifique\Client118\Modules\EtatStatistique\Repository\TableauReporting;
use Entity\Model\Periodes;
use Helpers\Trad\Trad;
use Helpers\Pagination\Paginator;
use Helpers\Fichier\Fichier;
use Entity\Model\Fourniss;
use Helpers\Filter\FiltreAvance\Generator;
use Helpers\Outil\Date;
use Helpers\Parametres\Constante;

class TableauReportingController extends Controller
{
    public function CBNDAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Consommé par nature de dépenses et directions'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listeDirection = $tabReport->listeLibelleDirection();
        $listeNature = $tabReport->listeLibelleNature();
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }
        
        if ($post) {
            if (!$post['filter_SOCIETE']) {
                $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
            }

            $listeDirect = $tabReport->listeNature_Direction($post);
            
            $totalDirection = [];
            foreach ($listeDirect as &$ligne) {
                if ($ligne['Budget'] != '0.0') {
                    $ligne['CONSO'] = floatval($ligne['Consommé'])*100/floatval($ligne['Budget']);
                } else {
                    $ligne['DISPONIBLE'] = 0;
                    $ligne['CONSO'] = 0;
                }

                if (empty($totalDirection[$ligne['Direction']])) {
                    $totalDirection[$ligne['Direction']]['Budget']          = floatval($ligne['Budget']);
                    $totalDirection[$ligne['Direction']]['Consommé']        = floatval($ligne['Consommé']);
                    $totalDirection[$ligne['Direction']]['Disponible']      = floatval($ligne['Disponible']);
                    $totalDirection[$ligne['Direction']]['PREENGAGE']       = floatval($ligne['PREENGAGE']);
                    $totalDirection[$ligne['Direction']]['ENGAGE']          = floatval($ligne['ENGAGE']);
                    $totalDirection[$ligne['Direction']]['RECEP']           = floatval($ligne['RECEP']);
                    $totalDirection[$ligne['Direction']]['FACTURE_AVEC']    = floatval($ligne['FACTURE_AVEC']);
                    $totalDirection[$ligne['Direction']]['FACTURE_SANS']    = floatval($ligne['FACTURE_SANS']);
                } else {
                    $totalDirection[$ligne['Direction']]['Budget']          += floatval($ligne['Budget']);
                    $totalDirection[$ligne['Direction']]['Consommé']        += floatval($ligne['Consommé']);
                    $totalDirection[$ligne['Direction']]['Disponible']      += floatval($ligne['Disponible']);
                    $totalDirection[$ligne['Direction']]['PREENGAGE']       += floatval($ligne['PREENGAGE']);
                    $totalDirection[$ligne['Direction']]['ENGAGE']          += floatval($ligne['ENGAGE']);
                    $totalDirection[$ligne['Direction']]['RECEP']           += floatval($ligne['RECEP']);
                    $totalDirection[$ligne['Direction']]['FACTURE_AVEC']    += floatval($ligne['FACTURE_AVEC']);
                    $totalDirection[$ligne['Direction']]['FACTURE_SANS']    += floatval($ligne['FACTURE_SANS']);
                }
            }

            if ($action=='export') {
                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_CBND_'.date('Ymd'),
                    $listeDirect,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService()
                );
        
                return 'ok';
            }
            
            foreach ($totalDirection as &$ligne) {
                $ligne['CONSO'] = floatval($ligne['Consommé'])*100/floatval($ligne['Budget']);
            }
        } else {
            $post['filter_PERIODES'] = date('Y');
            $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
        }

        return $this->renderer->render('@specifique118/Reporting/tableauReportingCBND', [
            'menuActive'       => 'EtatStatistique',
            'tableau' => $listeDirect??[],
            'total' => $totalDirection??[],
            'listePeriode' => $periode,
            'post' => $post,
            'listeDirection' => $listeDirection,
            'listeNature' => $listeNature,
            'devise' => $_SESSION['parametrage']['DEVISE_BASE'],
        ]);
    }
    
    public function CBNDPAAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Consommé par nature de dépenses, directions, pôles et articles'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listePrestation = $tabReport->listeLibellePrestation();
        $listeNature = $tabReport->listeLibelleNature();
        $listeDirection = $tabReport->listeLibelleDirection();
        $listePole = $tabReport->listeLibellePole();
        
        if ($post) {
            if (!$post['filter_SOCIETE']) {
                $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
            }
            
            $tableau = $tabReport->listeDirection_Nature_Pole_Article($post);
            
            $total = [];
            foreach ($tableau as $key => $ligne) {
                if (($key-1 == -1) || $ligne['Direction'] != $tableau[$key-1]['Direction']) {
                    $total[$ligne['Direction']] = [];
                }
                
                if (($key-1 == -1) || $ligne['Direction'] != $tableau[$key-1]['Direction'] || $ligne['Nature'] != $tableau[$key-1]['Nature']) {
                    $total[$ligne['Direction']][$ligne['Nature']] = [
                        'Budget' => $ligne['Budget'],
                        'Consommé' => $ligne['Consommé'],
                        'Disponible' => $ligne['Disponible'],
                        
                        'PREENGAGE' => 0,
                        'ENGAGE' => 0,
                        'REALISE' => 0,
                        'FACTURE AVEC COMMANDE' => 0,
                        'FACTURE SANS COMMANDE' => 0,
                    ];
                }
                
                if (($key-1 == -1) || $ligne['Direction'] != $tableau[$key-1]['Direction'] || $ligne['Nature'] != $tableau[$key-1]['Nature'] || $ligne['Pôle'] != $tableau[$key-1]['Pôle']) {
                    $total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']] = [
                        'PREENGAGE' => 0,
                        'ENGAGE' => 0,
                        'REALISE' => 0,
                        'FACTURE AVEC COMMANDE' => 0,
                        'FACTURE SANS COMMANDE' => 0,
                    ];
                }
                
                $total[$ligne['Direction']][$ligne['Nature']]['PREENGAGE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['PREENGAGE']) + floatval($ligne['PREENGAGE']);
                $total[$ligne['Direction']][$ligne['Nature']]['ENGAGE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['ENGAGE']) + floatval($ligne['ENGAGE']);
                $total[$ligne['Direction']][$ligne['Nature']]['REALISE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['REALISE']) + floatval($ligne['REALISE']);
                $total[$ligne['Direction']][$ligne['Nature']]['FACTURE AVEC COMMANDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['FACTURE AVEC COMMANDE']) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $total[$ligne['Direction']][$ligne['Nature']]['FACTURE SANS COMMANDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['FACTURE SANS COMMANDE']) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                
                $total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']] = [
                    'PREENGAGE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']]['PREENGAGE']) + floatval($ligne['PREENGAGE']),
                    'ENGAGE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']]['ENGAGE']) + floatval($ligne['ENGAGE']),
                    'REALISE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']]['REALISE']) + floatval($ligne['REALISE']),
                    'FACTURE AVEC COMMANDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']]['FACTURE AVEC COMMANDE']) + floatval($ligne['FACTURE AVEC COMMANDE']),
                    'FACTURE SANS COMMANDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['Pôle']]['FACTURE SANS COMMANDE']) + floatval($ligne['FACTURE SANS COMMANDE']),
                ];
            }

            $totalDirect = [];
            
            foreach ($total as $key => &$sousTotal) {
                $totalDirect[$key] = [
                    'Budget' => 0,
                    'Consommé' => 0,
                    'Disponible' => 0,
                    
                    'PREENGAGE' => 0,
                    'ENGAGE' => 0,
                    'RECEPTIONNE' => 0,
                    'FACTURE AVEC COMMANDE' => 0,
                    'FACTURE SANS COMMANDE' => 0,
                ];
                
                foreach ($sousTotal as $nature) {
                    $totalDirect[$key]['Budget'] += floatval($nature['Budget']);
                    $totalDirect[$key]['Consommé'] += floatval($nature['Consommé']);
                    $totalDirect[$key]['Disponible'] += floatval($nature['Disponible']);
                    
                    $totalDirect[$key]['PREENGAGE'] += floatval($nature['PREENGAGE']);
                    $totalDirect[$key]['ENGAGE'] += floatval($nature['ENGAGE']);
                    $totalDirect[$key]['RECEPTIONNE'] += floatval($nature['REALISE']);
                    $totalDirect[$key]['FACTURE AVEC COMMANDE'] += floatval($nature['FACTURE AVEC COMMANDE']);
                    $totalDirect[$key]['FACTURE SANS COMMANDE'] += floatval($nature['FACTURE SANS COMMANDE']);
                }
            }
            
            if ($action=='export') {
                foreach ($tableau as &$ligne) {
                    $inserted = ['libelle_direction' => $listeDirection[$ligne['Direction']]];
                    array_splice($ligne, 0, 0, $inserted);
                    
                    $inserted = ['libelle_Nature' => $listeNature[$ligne['Nature']]];
                    array_splice($ligne, 2, 0, $inserted);
                    
                    $inserted = ['libelle_Pôle' => $listePole[$ligne['Pôle']]];
                    array_splice($ligne, 4, 0, $inserted);
                    
                    $inserted = ['libelle_Prestation' => $listePrestation[$ligne['Prestation']]];
                    array_splice($ligne, 6, 0, $inserted);
                }
                
                $keyColonne = [
                    'libelle_direction',
                    'Direction',
                    'libelle_Nature',
                    'Nature',
                    'libelle_Pôle',
                    'Pôle',
                    'libelle_Prestation',
                    'Prestation',
                    'Article',
                    'Budget',
                    'Consommé',
                    'Disponible',
                    'PRE-ENGAGE',
                    'ENGAGE',
                    'RECEPTIONNE',
                    'FACTURE_avec_BDC',
                    'FACTURE_sans_BDC',
                ];
                
                
                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_CBNDPA_'.date('Ymd'),
                    $tableau,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService(),
                    $keyColonne
                );
        
                return 'ok';
            }
        } else {
            $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
        }
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }

        return $this->renderer->render('@specifique118/Reporting/tableauReportingCBNDPA', [
            'menuActive'       => 'EtatStatistique',
            'listePeriode' => $periode,
            'post' => $post,
            'tableau' => $tableau??[],
            'total' => $total??[],
            'totalDirect' => $totalDirect??[],
            'listePrestation' => $listePrestation,
            'listeNature' => $listeNature,
            'listePole' => $listePole,
            'listeDirection' => $listeDirection,
            'devise' => $_SESSION['parametrage']['DEVISE_BASE']
        ]);
    }
    
    public function CBDNAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Consommé par direction, nature, fournisseur et article'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listePrestation = $tabReport->listeLibellePrestation();
        $listeNature = $tabReport->listeLibelleNature();
        $listeDirection = $tabReport->listeLibelleDirection();
        
        if ($post) {
            if (!$post['filter_SOCIETE']) {
                $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
            }
            
            $tableau = $tabReport->listeDirection_Nature_Fournisseur_Article($post);
            
            $total = [];
            foreach ($tableau as $key => $ligne) {
                if (($key-1 == -1) or $ligne['Direction'] != $tableau[$key-1]['Direction']) {
                    $total[$ligne['Direction']] = [];
                }
                
                if (($key-1 == -1) or $ligne['Direction'] != $tableau[$key-1]['Direction'] or $ligne['Nature'] != $tableau[$key-1]['Nature']) {
                    $total[$ligne['Direction']][$ligne['Nature']] = [
                        'Budget' => $ligne['Budget'],
                        'Consommé' => $ligne['Consommé'],
                        'Disponible' => $ligne['Disponible'],
                        
                        'NB_ENGAGE' => 0,
                        'ENGAGE' => 0,
                        'NB_REALISE' => 0,
                        'REALISE' => 0,
                        'NBR_FAC_AVEC_CDE' => 0,
                        'NBR_FAC_SANS_CDE' => 0,
                        'FACTURE AVEC COMMANDE' => 0,
                        'FACTURE SANS COMMANDE' => 0,
                    ];
                }
                
                if (($key-1 == -1) or $ligne['Direction'] != $tableau[$key-1]['Direction'] or $ligne['Nature'] != $tableau[$key-1]['Nature']  or $ligne['DOC_CODE_FOURNISSEUR'] != $tableau[$key-1]['DOC_CODE_FOURNISSEUR']) {
                    $total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']] = [
                        'NB_ENGAGE' => 0,
                        'ENGAGE' => 0,
                        'NB_REALISE' => 0,
                        'REALISE' => 0,
                        'NBR_FAC_AVEC_CDE' => 0,
                        'NBR_FAC_SANS_CDE' => 0,
                        'FACTURE AVEC COMMANDE' => 0,
                        'FACTURE SANS COMMANDE' => 0,
                    ];
                }
                
                
                $total[$ligne['Direction']][$ligne['Nature']]['NB_ENGAGE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['NB_ENGAGE']) + floatval($ligne['NB_ENGAGE']);
                $total[$ligne['Direction']][$ligne['Nature']]['ENGAGE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['ENGAGE']) + floatval($ligne['ENGAGE']);
                $total[$ligne['Direction']][$ligne['Nature']]['NB_REALISE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['NB_REALISE']) + floatval($ligne['NB_REALISE']);
                $total[$ligne['Direction']][$ligne['Nature']]['REALISE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['REALISE']) + floatval($ligne['REALISE']);
                
                $total[$ligne['Direction']][$ligne['Nature']]['NBR_FAC_AVEC_CDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['NBR_FAC_AVEC_CDE']) + floatval($ligne['NBR_FAC_AVEC_CDE']);
                $total[$ligne['Direction']][$ligne['Nature']]['NBR_FAC_SANS_CDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['NBR_FAC_SANS_CDE']) + floatval($ligne['NBR_FAC_SANS_CDE']);
                
                $total[$ligne['Direction']][$ligne['Nature']]['FACTURE AVEC COMMANDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['FACTURE AVEC COMMANDE']) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $total[$ligne['Direction']][$ligne['Nature']]['FACTURE SANS COMMANDE'] = floatval($total[$ligne['Direction']][$ligne['Nature']]['FACTURE SANS COMMANDE']) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                
                $total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']] = [
                    'NB_ENGAGE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['NB_ENGAGE']) + floatval($ligne['NB_ENGAGE']),
                    'ENGAGE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['ENGAGE']) + floatval($ligne['ENGAGE']),
                    'NB_REALISE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['NB_REALISE']) + floatval($ligne['NB_REALISE']),
                    'REALISE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['REALISE']) + floatval($ligne['REALISE']),
                    'NBR_FAC_AVEC_CDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['NBR_FAC_AVEC_CDE']) + floatval($ligne['NBR_FAC_AVEC_CDE']),
                    'NBR_FAC_SANS_CDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['NBR_FAC_SANS_CDE']) + floatval($ligne['NBR_FAC_SANS_CDE']),
                    'FACTURE AVEC COMMANDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['FACTURE AVEC COMMANDE']) + floatval($ligne['FACTURE AVEC COMMANDE']),
                    'FACTURE SANS COMMANDE' => floatval($total[$ligne['Direction']][$ligne['Nature']][$ligne['DOC_CODE_FOURNISSEUR']]['FACTURE SANS COMMANDE']) + floatval($ligne['FACTURE SANS COMMANDE']),
                ];
            }
            
            $totalDirect = [];
            
            foreach ($total as $key => &$sousTotal) {
                $totalDirect[$key] = [
                    'Budget' => 0,
                    'Consommé' => 0,
                    'Disponible' => 0,
                    
                    'NB_ENGAGE' => 0,
                    'ENGAGE' => 0,
                    'NB_RECEP' => 0,
                    'RECEPTIONNE' => 0,
                    'NBR_FAC_AVEC_CDE' => 0,
                    'NBR_FAC_SANS_CDE' => 0,
                    'FACTURE AVEC COMMANDE' => 0,
                    'FACTURE SANS COMMANDE' => 0,
                ];
                
                foreach ($sousTotal as $nature) {
                    $totalDirect[$key]['Budget'] += floatval($nature['Budget']);
                    $totalDirect[$key]['Consommé'] += floatval($nature['Consommé']);
                    $totalDirect[$key]['Disponible'] += floatval($nature['Disponible']);
                    
                    $totalDirect[$key]['NB_ENGAGE'] += floatval($nature['NB_ENGAGE']);
                    $totalDirect[$key]['ENGAGE'] += floatval($nature['ENGAGE']);
                    $totalDirect[$key]['NB_RECEP'] += floatval($nature['NB_REALISE']);
                    $totalDirect[$key]['RECEPTIONNE'] += floatval($nature['REALISE']);
                    $totalDirect[$key]['NBR_FAC_AVEC_CDE'] += floatval($nature['NBR_FAC_AVEC_CDE']);
                    $totalDirect[$key]['NBR_FAC_SANS_CDE'] += floatval($nature['NBR_FAC_SANS_CDE']);
                    $totalDirect[$key]['FACTURE AVEC COMMANDE'] += floatval($nature['FACTURE AVEC COMMANDE']);
                    $totalDirect[$key]['FACTURE SANS COMMANDE'] += floatval($nature['FACTURE SANS COMMANDE']);
                }
            }
            
            if ($action=='export') {
                $fourniss = new Fourniss($this->pdo);
                
                foreach ($tableau as &$ligne) {
                    $inserted = ['libelle_direction' => $listeDirection[$ligne['Direction']]];
                    array_splice($ligne, 0, 0, $inserted);
                    
                    $inserted = ['libelle_Nature' => $listeNature[$ligne['Nature']]];
                    array_splice($ligne, 2, 0, $inserted);
                    
                    $libelleFrs = $fourniss->find($ligne['DOC_CODE_FOURNISSEUR'])['RS'];
                    $inserted = ['LIBELLE_FOURNISSEUR' => $libelleFrs];
                    array_splice($ligne, 4, 0, $inserted);
                    
                    $inserted = ['libelle_Prestation' => $listePrestation[$ligne['Prestation']]];
                    array_splice($ligne, 6, 0, $inserted);
                }
                
                $keyColonne = [
                    'libelle_direction',
                    'Direction',
                    'libelle_Nature',
                    'Nature',
                    'LIBELLE_FOURNISSEUR',
                    'DOC_CODE_FOURNISSEUR',
                    'libelle_Prestation',
                    'Prestation',
                    'Article',
                    'Budget',
                    'Consommé',
                    'Disponible',
                    'NB_ENGAGE',
                    'ENGAGE',
                    'NB_RECEPTIONNE',
                    'RECEPTIONNE',
                    'NBR_FAC_AVEC_CDE',
                    'FACTURE AVEC COMMANDE',
                    'NBR_FAC_SANS_CDE',
                    'FACTURE SANS COMMANDE',
                ];

                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_CBDN_'.date('Ymd'),
                    $tableau,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService(),
                    $keyColonne
                );
        
                return 'ok';
            }
        } else {
            $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
        }
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }

        return $this->renderer->render('@specifique118/Reporting/tableauReportingCBDN', [
            'menuActive'       => 'EtatStatistique',
            'listePeriode' => $periode,
            'post' => $post,
            'tableau' => $tableau??[],
            'total' => $total??[],
            'totalDirect' => $totalDirect??[],
            'devise' => $_SESSION['parametrage']['DEVISE_BASE'],
            'listePrestation' => $listePrestation,
            'listeNature' => $listeNature,
            'listeDirection' => $listeDirection,
        ]);
    }
        
    public function engagementParDirectionAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Engagement par direction'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }
        
        $listeEtat = [
            '' => '',
            'S' => $trad->t('Soldé'),
            'E' => $trad->t('En cours'),
            'V' => $trad->t('Validé'),
            'A' => $trad->t('Annulé'),
            'L' => $trad->t('Partiellement livré'),
        ];
        
        if ($post) {
            if (!$post['filter_SOCIETE']) {
                $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
            }
        
            $repVolume = $tabReport->tableau1EngageParDirection(false, $post);
            $repVolumeTotal = $tabReport->tableau1EngageParDirection(true, $post);

            $totalCalcul = $tabReport->engageParDirection(true, $post);

            //$totalEngage = $tabReport->engageParDirection(true, $post);
            $listeEngage = $tabReport->engageParDirection(false, $post);

            $totalTranche['2k_BDC_TTC'] = floatval(0);
            $totalTranche['2k_NBR_BDC'] = floatval(0);
            
            $totalTranche['2_30k_BDC_TTC'] = floatval(0);
            $totalTranche['2_30k_NBR_BDC'] = floatval(0);
            
            $totalTranche['30k_BDC_TTC'] = floatval(0);
            $totalTranche['30k_NBR_BDC'] = floatval(0);
            
            $totalTranche['GLO_BDC_TTC'] = floatval(0);
            $totalTranche['GLO_NBR_BDC'] = floatval(0);
            
            $totalTranche['GLO_BDC_AVEC_ACC'] = floatval(0);
            $totalTranche['GLO_NBR_AVEC_ACC'] = floatval(0);
            
            $totalTranche['2k_BDC_TTC_AVEC_ACC'] = floatval(0);
            $totalTranche['2k_NBR_BDC_AVEC_ACC'] = floatval(0);
            
            $totalTranche['2_30k_BDC_TTC_AVEC_ACC'] = floatval(0);
            $totalTranche['2_30k_NBR_BDC_AVEC_ACC'] = floatval(0);
            
            $totalTranche['30k_BDC_TTC_AVEC_ACC'] = floatval(0);
            $totalTranche['30k_NBR_BDC_AVEC_ACC'] = floatval(0);
            
            $totalTranche['GLO_BDC_SANS_ACC'] = floatval(0);
            $totalTranche['GLO_NBR_SANS_ACC'] = floatval(0);
            
            $totalTranche['2k_BDC_TTC_SANS_ACC'] = floatval(0);
            $totalTranche['2k_NBR_BDC_SANS_ACC'] = floatval(0);
            
            $totalTranche['2_30k_BDC_TTC_SANS_ACC'] = floatval(0);
            $totalTranche['2_30k_NBR_BDC_SANS_ACC'] = floatval(0);
            
            $totalTranche['30k_BDC_TTC_SANS_ACC'] = floatval(0);
            $totalTranche['30k_NBR_BDC_SANS_ACC'] = floatval(0);
            $listeParTranche = [];
            
            $repVolumeTotal[0]['BDC_TTC_POURC'] = floatval($repVolumeTotal[0]['BDC_TTC'])*100/floatval($repVolumeTotal[0]['BDC_TTC']);
            $repVolumeTotal[0]['NBR_BDC_POURC'] = floatval($repVolumeTotal[0]['NBR_BDC'])*100/floatval($repVolumeTotal[0]['NBR_BDC']);
            
            $repVolumeTotal[0]['FACTURE_TTC_POURC'] = $repVolumeTotal[0]['FACTURE_TTC']? floatval($repVolumeTotal[0]['FACTURE_TTC'])*100/floatval($repVolumeTotal[0]['FACTURE_TTC']):0;
            $repVolumeTotal[0]['NBR_FACTURE_POURC'] = $repVolumeTotal[0]['NBR_FACTURE']? floatval($repVolumeTotal[0]['NBR_FACTURE'])*100/floatval($repVolumeTotal[0]['NBR_FACTURE']):0;
            
            foreach ($repVolume as &$repartition) {
                if ($repVolumeTotal[0]['NBR_BDC']) {
                    $repartition['BDC_TTC_POURC'] = floatval($repartition['BDC_TTC'])*100/floatval($repVolumeTotal[0]['BDC_TTC']);
                    $repartition['NBR_BDC_POURC'] = floatval($repartition['NBR_BDC'])*100/floatval($repVolumeTotal[0]['NBR_BDC']);
                } else {
                    $repartition['BDC_TTC_POURC'] = 0;
                    $repartition['NBR_BDC_POURC'] = 0;
                }
                
                
                if ($repVolumeTotal[0]['NBR_FACTURE']) {
                    $repartition['FACTURE_TTC_POURC'] = floatval($repartition['FACTURE_TTC'])*100/floatval($repVolumeTotal[0]['FACTURE_TTC']);
                    $repartition['NBR_FACTURE_POURC'] = floatval($repartition['NBR_FACTURE'])*100/floatval($repVolumeTotal[0]['NBR_FACTURE']);
                } else {
                    $repartition['FACTURE_TTC_POURC'] = 0 ;
                    $repartition['NBR_FACTURE_POURC'] = 0;
                }
            }
            foreach ($listeEngage as &$ligne) {
                $post['accordCadre'] = null;
                if ($totalCalcul[0]['NBR_BDC']) {
                    $ligne['BDC_TTC_POURC'] = floatval($ligne['BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC']);
                    $ligne['NBR_BDC_POURC'] = floatval($ligne['NBR_BDC'])*100/floatval($totalCalcul[0]['NBR_BDC']);
                } else {
                    $ligne['BDC_TTC_POURC'] = 0;
                    $ligne['NBR_BDC_POURC'] = 0;
                }
                
                
                if ($totalCalcul[0]['NBR_FACTURE']) {
                    $ligne['FACTURE_TTC_POURC'] = floatval($ligne['FACTURE_TTC'])*100/floatval($totalCalcul[0]['FACTURE_TTC']);
                    $ligne['NBR_FACTURE_POURC'] = floatval($ligne['NBR_FACTURE'])*100/floatval($totalCalcul[0]['NBR_FACTURE']);
                } else {
                    $ligne['FACTURE_TTC_POURC'] = 0 ;
                    $ligne['NBR_FACTURE_POURC'] = 0;
                }

                // par tranche
                $tranche2k = $tabReport->engageParDirection(false, $post, 1, $ligne['SI_CODE_DIRECTION']);
                $tranche2_30k = $tabReport->engageParDirection(false, $post, 2, $ligne['SI_CODE_DIRECTION']);
                $tranche30k = $tabReport->engageParDirection(false, $post, 3, $ligne['SI_CODE_DIRECTION']);
                
                //$GLO_BDC_TTC = ($tranche2k['BDC_TTC']??0)+($tranche2_30k['BDC_TTC']??0)+($tranche30k['BDC_TTC']??0);
                //$GLO_NBR_BDC = ($tranche2k['NBR_BDC']??0)+($tranche2_30k['NBR_BDC']??0)+($tranche30k['NBR_BDC']??0);
                
                // par tranche & accorde cadre
                $post['accordCadre'] = 'avec';
                $tranche2kAvecACC    = $tabReport->engageParDirection(false, $post, 1, $ligne['SI_CODE_DIRECTION']);
                $tranche2_30kAvecACC = $tabReport->engageParDirection(false, $post, 2, $ligne['SI_CODE_DIRECTION']);
                $tranche30kAvecACC   = $tabReport->engageParDirection(false, $post, 3, $ligne['SI_CODE_DIRECTION']);
                
                $post['accordCadre'] = 'sans';
                $tranche2kSansACC    = $tabReport->engageParDirection(false, $post, 1, $ligne['SI_CODE_DIRECTION']);
                $tranche2_30kSansACC = $tabReport->engageParDirection(false, $post, 2, $ligne['SI_CODE_DIRECTION']);
                $tranche30kSansACC   = $tabReport->engageParDirection(false, $post, 3, $ligne['SI_CODE_DIRECTION']);
               
                $GLO_BDC_AVEC_ACC = ($tranche2kAvecACC['BDC_TTC']??0)+($tranche2_30kAvecACC['BDC_TTC']??0)+($tranche30kAvecACC['BDC_TTC']??0);
                $GLO_NBR_AVEC_ACC = ($tranche2kAvecACC['NBR_BDC']??0)+($tranche2_30kAvecACC['NBR_BDC']??0)+($tranche30kAvecACC['NBR_BDC']??0);
                
                $GLO_BDC_SANS_ACC = ($tranche2kSansACC['BDC_TTC']??0)+($tranche2_30kSansACC['BDC_TTC']??0)+($tranche30kSansACC['BDC_TTC']??0);
                $GLO_NBR_SANS_ACC = ($tranche2kSansACC['NBR_BDC']??0)+($tranche2_30kSansACC['NBR_BDC']??0)+($tranche30kSansACC['NBR_BDC']??0);
                
                
                $listeParTranche[] = [
                    'SI_CODE_DIRECTION' => $ligne['SI_CODE_DIRECTION'],
                    'DIR_DESIGNATION'   => $ligne['DIR_DESIGNATION'],
                    
                    '2k_BDC_TTC' => $tranche2k['BDC_TTC']??0,
                    '2k_NBR_BDC' => $tranche2k['NBR_BDC']??0,
                    
                    '2_30k_BDC_TTC' => $tranche2_30k['BDC_TTC']??0,
                    '2_30k_NBR_BDC' => $tranche2_30k['NBR_BDC']??0,
                    
                    '30k_BDC_TTC' => $tranche30k['BDC_TTC']??0,
                    '30k_NBR_BDC' => $tranche30k['NBR_BDC']??0,
                    
                    /* tranche/montant/acc */
                    /* avec */
                    'GLO_BDC_AVEC_ACC' => $GLO_BDC_AVEC_ACC,
                    'GLO_NBR_AVEC_ACC' => $GLO_NBR_AVEC_ACC,
                    
                    '2k_BDC_TTC_AVEC_ACC' => $tranche2kAvecACC['BDC_TTC']??0,
                    '2k_NBR_BDC_AVEC_ACC' => $tranche2kAvecACC['NBR_BDC']??0,
                    
                    '2_30k_BDC_TTC_AVEC_ACC' => $tranche2_30kAvecACC['BDC_TTC']??0,
                    '2_30k_NBR_BDC_AVEC_ACC' => $tranche2_30kAvecACC['NBR_BDC']??0,
                    
                    '30k_BDC_TTC_AVEC_ACC' => $tranche30kAvecACC['BDC_TTC']??0,
                    '30k_NBR_BDC_AVEC_ACC' => $tranche30kAvecACC['NBR_BDC']??0,
                    
                    /* sans */
                    'GLO_BDC_SANS_ACC' => $GLO_BDC_SANS_ACC,
                    'GLO_NBR_SANS_ACC' => $GLO_NBR_SANS_ACC,
                    
                    '2k_BDC_TTC_SANS_ACC' => $tranche2kSansACC['BDC_TTC']??0,
                    '2k_NBR_BDC_SANS_ACC' => $tranche2kSansACC['NBR_BDC']??0,
                    
                    '2_30k_BDC_TTC_SANS_ACC' => $tranche2_30kSansACC['BDC_TTC']??0,
                    '2_30k_NBR_BDC_SANS_ACC' => $tranche2_30kSansACC['NBR_BDC']??0,
                    
                    '30k_BDC_TTC_SANS_ACC' => $tranche30kSansACC['BDC_TTC']??0,
                    '30k_NBR_BDC_SANS_ACC' => $tranche30kSansACC['NBR_BDC']??0,
                ];

                $totalTranche['2k_BDC_TTC'] += floatval($tranche2k['BDC_TTC']??0);
                $totalTranche['2k_NBR_BDC'] += floatval($tranche2k['NBR_BDC']??0);
                
                $totalTranche['2_30k_BDC_TTC'] += floatval($tranche2_30k['BDC_TTC']??0);
                $totalTranche['2_30k_NBR_BDC'] += floatval($tranche2_30k['NBR_BDC']??0);
                
                $totalTranche['30k_BDC_TTC'] += floatval($tranche30k['BDC_TTC']??0);
                $totalTranche['30k_NBR_BDC'] += floatval($tranche30k['NBR_BDC']??0);
                
                /* tranche avec acc */
                $totalTranche['GLO_BDC_AVEC_ACC'] += floatval($GLO_BDC_AVEC_ACC);
                $totalTranche['GLO_NBR_AVEC_ACC'] += floatval($GLO_NBR_AVEC_ACC);
                
                $totalTranche['2k_BDC_TTC_AVEC_ACC'] += floatval($tranche2kAvecACC['BDC_TTC']??0);
                $totalTranche['2k_NBR_BDC_AVEC_ACC'] += floatval($tranche2kAvecACC['NBR_BDC']??0);
                
                $totalTranche['2_30k_BDC_TTC_AVEC_ACC'] += floatval($tranche2_30kAvecACC['BDC_TTC']??0);
                $totalTranche['2_30k_NBR_BDC_AVEC_ACC'] += floatval($tranche2_30kAvecACC['NBR_BDC']??0);
                
                $totalTranche['30k_BDC_TTC_AVEC_ACC'] += floatval($tranche30kAvecACC['BDC_TTC']??0);
                $totalTranche['30k_NBR_BDC_AVEC_ACC'] += floatval($tranche30kAvecACC['NBR_BDC']??0);
                
                /* tranche sans acc */
                $totalTranche['GLO_BDC_SANS_ACC'] += floatval($GLO_BDC_SANS_ACC);
                $totalTranche['GLO_NBR_SANS_ACC'] += floatval($GLO_NBR_SANS_ACC);
                
                $totalTranche['2k_BDC_TTC_SANS_ACC'] += floatval($tranche2kSansACC['BDC_TTC']??0);
                $totalTranche['2k_NBR_BDC_SANS_ACC'] += floatval($tranche2kSansACC['NBR_BDC']??0);
                
                $totalTranche['2_30k_BDC_TTC_SANS_ACC'] += floatval($tranche2_30kSansACC['BDC_TTC']??0);
                $totalTranche['2_30k_NBR_BDC_SANS_ACC'] += floatval($tranche2_30kSansACC['NBR_BDC']??0);
                
                $totalTranche['30k_BDC_TTC_SANS_ACC'] += floatval($tranche30kSansACC['BDC_TTC']??0);
                $totalTranche['30k_NBR_BDC_SANS_ACC'] += floatval($tranche30kSansACC['NBR_BDC']??0);
            }
            
            $totalTMP['NBR_BDC'] =  $totalTranche['2k_NBR_BDC'] + $totalTranche['2_30k_NBR_BDC']+ $totalTranche['30k_NBR_BDC'];
            
            foreach ($listeParTranche as &$ligneTranche) {
                $ligneTranche['2k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($ligneTranche['2k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
                $ligneTranche['2k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($ligneTranche['2k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
                
                $ligneTranche['2_30k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($ligneTranche['2_30k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
                $ligneTranche['2_30k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($ligneTranche['2_30k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
                
                $ligneTranche['30k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($ligneTranche['30k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
                $ligneTranche['30k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($ligneTranche['30k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
            }
            
            $totalTranche['2k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($totalTranche['2k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
            $totalTranche['2k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($totalTranche['2k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
            
            $totalTranche['2_30k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($totalTranche['2_30k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
            $totalTranche['2_30k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($totalTranche['2_30k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
            
            $totalTranche['30k_BDC_TTC_POURC']= $totalCalcul[0]['BDC_TTC']? (floatval($totalTranche['30k_BDC_TTC'])*100/floatval($totalCalcul[0]['BDC_TTC'])):0;
            $totalTranche['30k_NBR_BDC_POURC']= $totalCalcul[0]['NBR_BDC']? (floatval($totalTranche['30k_NBR_BDC'])*100/floatval($totalTMP['NBR_BDC'])):0;
            
            if ($action == 'export1' || $action == 'export2' || $action == 'export3') {
                $export = [];
                
                if ($action == 'export1') {
                    $export = $repVolume;
                }
                if ($action == 'export2') {
                    foreach ($listeParTranche as $ligne) {
                        $export[] = [
                            'Direction' => $ligne['SI_CODE_DIRECTION'],
                            '<2000 Montant bdc ttc' => $ligne['2k_BDC_TTC'],
                            // @phpstan-ignore-next-line
                            '<2000 Montant bdc %' => $ligne['2k_BDC_TTC_POURC']??0,
                            '<2000 nombre bdc ttc' => $ligne['2k_NBR_BDC'],
                            // @phpstan-ignore-next-line
                            '<2000 nombre bdc %' => $ligne['2k_NBR_BDC_POURC']??0,
                            
                            '>2000 & <30000 Montant bdc ttc' => $ligne['2_30k_BDC_TTC'],
                            // @phpstan-ignore-next-line
                            '>2000 & <30000 Montant bdc %' => $ligne['2_30k_BDC_TTC_POURC']??0,
                            // @phpstan-ignore-next-line
                            '>2000 & <30000 nombre bdc ttc' => $ligne['2_30k_NBR_BDC']??0,
                            // @phpstan-ignore-next-line
                            '>2000 & <30000 nombre bdc %' => $ligne['2_30k_NBR_BDC_POURC']??0,
                            
                            '>30000 Montant bdc ttc' => $ligne['30k_BDC_TTC'],
                            // @phpstan-ignore-next-line
                            '>30000 Montant bdc %' => $ligne['30k_BDC_TTC_POURC']??0,
                            '>30000 nombre bdc ttc' => $ligne['30k_NBR_BDC'],
                            // @phpstan-ignore-next-line
                            '>30000 nombre bdc %' => $ligne['30k_NBR_BDC_POURC']??0,
                        ];
                    }
                }
                
                if ($action == 'export3') {
                    foreach ($listeParTranche as $ligne) {
                        $export[] = [
                            'Direction' => $ligne['SI_CODE_DIRECTION'],
                            // @phpstan-ignore-next-line
                            'global montant bdc avec contract'  => $ligne['GLO_BDC_AVEC_ACC']??0,
                            // @phpstan-ignore-next-line
                            'global nombre bdc avec contract'   => $ligne['GLO_NBR_AVEC_ACC']??0,
                            // @phpstan-ignore-next-line
                            'global montant bdc sans contract'  => $ligne['GLO_BDC_SANS_ACC']??0,
                            // @phpstan-ignore-next-line
                            'global nombre bdc sans contract'   => $ligne['GLO_NBR_SANS_ACC']??0,
                            
                            '<2000 montant bdc avec contract' => $ligne['2k_BDC_TTC_AVEC_ACC'],
                            '<2000 nombre bdc avec contract' => $ligne['2k_NBR_BDC_AVEC_ACC'],
                            '<2000 montant bdc sans contract' => $ligne['2k_BDC_TTC_SANS_ACC'],
                            '<2000 nombre bdc sans contract' => $ligne['2k_NBR_BDC_SANS_ACC'],
                            
                            '>2000 & <30000 montant bdc avec contract' => $ligne['2_30k_BDC_TTC_AVEC_ACC'],
                            '>2000 & <30000 nombre bdc avec contract' => $ligne['2_30k_NBR_BDC_AVEC_ACC'],
                            '>2000 & <30000 montant bdc sans contract' => $ligne['2_30k_BDC_TTC_SANS_ACC'],
                            '>2000 & <30000 nombre bdc sans contract' => $ligne['2_30k_NBR_BDC_SANS_ACC'],
                            
                            '>30000 montant bdc avec contract' => $ligne['30k_BDC_TTC_AVEC_ACC'],
                            '>30000 nombre bdc avec contract' => $ligne['30k_NBR_BDC_AVEC_ACC'],
                            '>30000 montant bdc sans contract' => $ligne['30k_BDC_TTC_SANS_ACC'],
                            '>30000 nombre bdc sans contract' => $ligne['30k_NBR_BDC_SANS_ACC'],
                        ];
                    }
                }
                
                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_engage_par_direction_'.date('Ymd'),
                    $export,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService()
                );
        
                return 'ok';
            }
        } else {
            $post['filter_PERIODES'] = date('Y');
            $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
        }
        
        return $this->renderer->render('@specifique118/Reporting/engagementParDirection', [
            'menuActive'       => 'EtatStatistique',
            'listeEngage' => $repVolume??[],
            'listePeriode' => $periode,
            'post' => $post,
            'totalEngage' => $repVolumeTotal[0]??[],
            'listeEtat' => $listeEtat,
            'listeParTranche' => $listeParTranche??[],
            'totalTranche' => $totalTranche??[],
            'devise' => $_SESSION['parametrage']['DEVISE_BASE'],
        ]);
    }

    public function DDTAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Suivi campagne'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $codeGestion = $tabReport->listeCodeGestion();
        
        if ($post) {
            if (!$post['filter_SOCIETE']) {
                $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
            }
            $tableauTmp = $tabReport->liste_DDT($post);
            
            $i = 0;
            $tableau = [];
            $total = [];
            $totalSection = [];
            $totalNature = [];
            foreach ($tableauTmp as $key => $ligne) {
                $prev_key = $key-1;
                
                if ($prev_key==-1 || $ligne['Nature'] != $tableauTmp[$prev_key]['Nature'] || $ligne['Pôle'] != $tableauTmp[$prev_key]['Pôle'] ||
                    $ligne['Prestation'] != $tableauTmp[$prev_key]['Prestation'] || $ligne['Article'] != $tableauTmp[$prev_key]['Article'] || $ligne['DOC_CODE_FOURNISSEUR'] != $tableauTmp[$prev_key]['DOC_CODE_FOURNISSEUR']) {
                    $i++;
                    $idTable = $i;
                    $tableau[$idTable]= [
                        'Nature' => $ligne['Nature'],
                        'Budget' => $ligne['Budget'],
                        'Disponible' => $ligne['Disponible'],
                        'Pôle' => $ligne['Pôle'],
                        'Prestation' => $ligne['Prestation'],
                        'Article' => $ligne['Article'],
                        'DOC_CODE_FOURNISSEUR' => $ligne['DOC_CODE_FOURNISSEUR']
                    ];
                    
                    $tableau[$idTable]['total'] = [
                        'ENGAGE' => floatval($ligne['ENGAGE']),
                        'REALISE' => floatval($ligne['REALISE']),
                        'FACTURE AVEC COMMANDE' => floatval($ligne['FACTURE AVEC COMMANDE']),
                        'FACTURE SANS COMMANDE' => floatval($ligne['FACTURE SANS COMMANDE']),
                    ];
                    
                    $tableau[$idTable]['listeService'][$ligne['Service']] = [
                            'Service' => $ligne['Service'],
                            'ENGAGE' => floatval($ligne['ENGAGE']),
                            'REALISE' => floatval($ligne['REALISE']),
                            'FACTURE AVEC COMMANDE' => floatval($ligne['FACTURE AVEC COMMANDE']),
                            'FACTURE SANS COMMANDE' => floatval($ligne['FACTURE SANS COMMANDE']),
                    ];
                } else {
                    $tableau[$idTable]['total']['ENGAGE'] += floatval($ligne['ENGAGE']);
                    $tableau[$idTable]['total']['REALISE'] += floatval($ligne['REALISE']);
                    $tableau[$idTable]['total']['FACTURE AVEC COMMANDE'] += floatval($ligne['FACTURE AVEC COMMANDE']);
                    $tableau[$idTable]['total']['FACTURE SANS COMMANDE'] += floatval($ligne['FACTURE SANS COMMANDE']);
                    
                    $tableau[$idTable]['listeService'][$ligne['Service']] = [
                        'Service' => $ligne['Service'],
                        'ENGAGE' => floatval($ligne['ENGAGE']),
                        'REALISE' => floatval($ligne['REALISE']),
                        'FACTURE AVEC COMMANDE' => floatval($ligne['FACTURE AVEC COMMANDE']),
                        'FACTURE SANS COMMANDE' => floatval($ligne['FACTURE SANS COMMANDE']),
                    ];
                }

                if ($prev_key==-1 || $ligne['Nature'] != $tableauTmp[$prev_key]['Nature']) {
                    $total['GLOBAL']['Budget'] = floatval($total['GLOBAL']['Budget']??0) + floatval($ligne['Budget']);
                    $total['GLOBAL']['Disponible'] = floatval($total['GLOBAL']['Disponible']) + floatval($ligne['Disponible']);
                }
                
                $total['GLOBAL']['ENGAGE'] = floatval($total['GLOBAL']['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $total['GLOBAL']['REALISE'] = floatval($total['GLOBAL']['REALISE']) + floatval($ligne['REALISE']);
                $total['GLOBAL']['FACTURE AVEC COMMANDE'] = floatval($total['GLOBAL']['FACTURE AVEC COMMANDE']) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $total['GLOBAL']['FACTURE SANS COMMANDE'] = floatval($total['GLOBAL']['FACTURE SANS COMMANDE']) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                $totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['ENGAGE']                 = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['REALISE']                = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['REALISE']??0) + floatval($ligne['REALISE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['FACTURE AVEC COMMANDE']  = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['FACTURE AVEC COMMANDE']??0) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['FACTURE SANS COMMANDE']  = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']]['GLOBAL']['FACTURE SANS COMMANDE']??0) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                $totalNature[$ligne['Nature']]['GLOBAL']['ENGAGE']                  = floatval($totalNature[$ligne['Nature']]['GLOBAL']['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $totalNature[$ligne['Nature']]['GLOBAL']['REALISE']                 = floatval($totalNature[$ligne['Nature']]['GLOBAL']['REALISE']??0) + floatval($ligne['REALISE']);
                $totalNature[$ligne['Nature']]['GLOBAL']['FACTURE AVEC COMMANDE']   = floatval($totalNature[$ligne['Nature']]['GLOBAL']['FACTURE AVEC COMMANDE']??0) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $totalNature[$ligne['Nature']]['GLOBAL']['FACTURE SANS COMMANDE']   = floatval($totalNature[$ligne['Nature']]['GLOBAL']['FACTURE SANS COMMANDE']??0) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                $total[$ligne['Service']]['ENGAGE'] = floatval($total[$ligne['Service']]['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $total[$ligne['Service']]['REALISE'] = floatval($total[$ligne['Service']]['REALISE']??0) + floatval($ligne['REALISE']);
                $total[$ligne['Service']]['FACTURE AVEC COMMANDE'] = floatval($total[$ligne['Service']]['FACTURE AVEC COMMANDE']??0) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $total[$ligne['Service']]['FACTURE SANS COMMANDE'] = floatval($total[$ligne['Service']]['FACTURE SANS COMMANDE']??0) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                $totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['ENGAGE'] = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['REALISE'] = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['REALISE']??0) + floatval($ligne['REALISE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['FACTURE AVEC COMMANDE'] = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['FACTURE AVEC COMMANDE']??0) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['FACTURE SANS COMMANDE'] = floatval($totalSection[$ligne['Nature']][$ligne['Pôle']][$ligne['Service']]['FACTURE SANS COMMANDE']??0) + floatval($ligne['FACTURE SANS COMMANDE']);
                
                $totalNature[$ligne['Nature']][$ligne['Service']]['ENGAGE'] = floatval($totalNature[$ligne['Nature']][$ligne['Service']]['ENGAGE']??0) + floatval($ligne['ENGAGE']);
                $totalNature[$ligne['Nature']][$ligne['Service']]['REALISE'] = floatval($totalNature[$ligne['Nature']][$ligne['Service']]['REALISE']??0) + floatval($ligne['REALISE']);
                $totalNature[$ligne['Nature']][$ligne['Service']]['FACTURE AVEC COMMANDE'] = floatval($totalNature[$ligne['Nature']][$ligne['Service']]['FACTURE AVEC COMMANDE']??0) + floatval($ligne['FACTURE AVEC COMMANDE']);
                $totalNature[$ligne['Nature']][$ligne['Service']]['FACTURE SANS COMMANDE'] = floatval($totalNature[$ligne['Nature']][$ligne['Service']]['FACTURE SANS COMMANDE']??0) + floatval($ligne['FACTURE SANS COMMANDE']);
            }
            
            if ($action == 'export') {
                $export = [];
                
                foreach ($tableau as $key => $ligne) {
                    $tmpLigne = [];
                    $prev_key = $key-1;
                    
                    $frsRepo = new Fourniss($this->pdo);
                    $frs = $frsRepo->find($ligne['DOC_CODE_FOURNISSEUR'] ?? '');
                    
                    $tmpLigne = [
                        'Nature' => $ligne['Nature'] ?? '',
                        'Budget' => $ligne['Budget'] ?? '',
                        'Disponible' => $ligne['Disponible'] ?? '',
                        'Pole' => $ligne['Pôle'] ?? '',
                        'Prestation' => $ligne['Prestation'] ?? '',
                        'Article' => $ligne['Article'] ?? '',
                        'DOC_CODE_FOURNISSEUR' => $ligne['DOC_CODE_FOURNISSEUR'] ?? '',
                        'FOURNISSEUR' => $frs['RS']??'',
                        
                        'ENGAGE' => $ligne['total']['ENGAGE'],
                        'RECEPTIONNE' => $ligne['total']['REALISE'],
                        'FACTURE AVEC COMMANDE' => $ligne['total']['FACTURE AVEC COMMANDE'],
                        'FACTURE SANS COMMANDE' => $ligne['total']['FACTURE SANS COMMANDE'],
                    ];
                    
                    foreach ($codeGestion as $cg) {
                        $tmpLigne['ENGAGE_'.$cg['CG_CODE_GESTION_AFFICHE']] = $ligne['listeService'][$cg['CG_CODE_GESTION_AFFICHE']]['ENGAGE']??0;
                        $tmpLigne['RECEPTIONNE_'.$cg['CG_CODE_GESTION_AFFICHE']] = $ligne['listeService'][$cg['CG_CODE_GESTION_AFFICHE']]['REALISE']??0;
                        $tmpLigne['FACTURE AVEC COMMANDE_'.$cg['CG_CODE_GESTION_AFFICHE']] = $ligne['listeService'][$cg['CG_CODE_GESTION_AFFICHE']]['FACTURE AVEC COMMANDE']??0;
                        $tmpLigne['FACTURE SANS COMMANDE_'.$cg['CG_CODE_GESTION_AFFICHE']] = $ligne['listeService'][$cg['CG_CODE_GESTION_AFFICHE']]['FACTURE SANS COMMANDE']??0;
                    }
                    
                    
                    $export[] = $tmpLigne;
                }

                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_ddt_'.date('Ymd'),
                    $export,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService()
                );
        
                return 'ok';
            }
        } else {
            $post['filter_SOCIETE'] = $_SESSION['Session_SocUsrProfil'];
        }
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }
        
        return $this->renderer->render('@specifique118/Reporting/tableauReportingDDT', [
            'menuActive'       => 'EtatStatistique',
            'listePeriode' => $periode,
            'post' => $post,
            'tableau' => $tableau??[],
            'listeCG' => $codeGestion,
            'totalSection' => $totalSection??[],
            'total' => $total??[],
            'totalNature' => $totalNature??[],
        ]);
    }
    
    public function consoBDCAction() : string
    {
        $post = $this->request->getParsedBody();
        $action = $this->request->getAttribute('action');
        $trad = $this->getTranslationService();
        
        Ariane::generate(1, $trad->t('Conso des BDC'));
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        $listeStatut = $tabReport->listeStatut();
        
        if ($post) {
            $tableau = $tabReport->listeConsoBDC($post);
            
            foreach ($tableau as $key => $ligne) {
                if ($ligne['Montant TTC BR'] == '0' && $ligne['DOC_QTE_RECEP'] != '0') {
                    $tableau[$key]['Montant TTC BR'] = ((float) $ligne['Prix Unitaire TTC']) * ((float) $ligne['DOC_QTE_RECEP']);
                }
                
                if ($ligne['Montant HT BR'] == '0' && $ligne['DOC_QTE_RECEP'] != '0') {
                    $tableau[$key]['Montant HT BR'] = ((float) $ligne['DOC_PRIX_UNITAIRE_CDE']) * ((float) $ligne['DOC_QTE_RECEP']);
                }
                
                /*$tableau[$key]['DOC_DATE_CREATION_CDE']   = Date::dateConverte($ligne['DOC_DATE_CREATION_CDE']);
                $tableau[$key]['DOC_DATE_LIVRAISON']      = Date::dateConverte($ligne['DOC_DATE_LIVRAISON']);*/
                $tableau[$key]['DOC_DATE_CREATION_CDE']     = TableauReporting::convertdateOXADW($ligne['DOC_DATE_CREATION_CDE']);
                $tableau[$key]['DOC_DATE_LIVRAISON']        = TableauReporting::convertdateOXADW($ligne['DOC_DATE_LIVRAISON']);

                $tableau[$key]['DOC_DATE_VALIDATION_CDE'] = TableauReporting::convertdateOXADW($ligne['DOC_DATE_VALIDATION_CDE']);
                $tableau[$key]['DOC_DATE_IMP_CDE']        = TableauReporting::convertdateOXADW($ligne['DOC_DATE_IMP_CDE']);
                $tableau[$key]['LAST_BR']                 = TableauReporting::convertdateOXADW($ligne['LAST_BR']);
                $tableau[$key]['DOC_DATE_SIGNATURE_CDE']  = TableauReporting::convertdateOXADW($ligne['DOC_DATE_SIGNATURE_CDE']);
                $tableau[$key]['ACC_DATE_DEB']            = TableauReporting::convertdateOXADW($ligne['ACC_DATE_DEB']);
                $tableau[$key]['ACC_DATE_FIN']            = TableauReporting::convertdateOXADW($ligne['ACC_DATE_FIN']);

                $tableau[$key]['SI_CODE_SECTION_IMPUTATION_LBPF'] = explode('_', $ligne['SI_CODE_SECTION_IMPUTATION'])[0];

                $listeSignataire = '';
                foreach ($tabReport->listeSignataireCde($ligne['DOC_NUMERO_CDE']) as $signataireTMP) {
                    if ($listeSignataire == '') {
                        $listeSignataire = $signataireTMP['USR_NOM_UTILISATEUR'];
                    } else {
                        $listeSignataire .= ' - '.$signataireTMP['USR_NOM_UTILISATEUR'];
                    }
                }
                $tableau[$key]['LISTE_SIGNATAIRE'] = $listeSignataire;
                
                $listeSignataireAttendu = null;
                foreach ($tabReport->listeSignataireAttendu($ligne['DOC_NUMERO_CDE']) as $signataireTMP) {
                    if ($listeSignataireAttendu == null) {
                        $listeSignataireAttendu = $signataireTMP['SA_LIBELLE_SIGNATAIRE'];
                    } else {
                        $listeSignataireAttendu .= ' - '.$signataireTMP['SA_LIBELLE_SIGNATAIRE'];
                    }
                }
                $tableau[$key]['LISTE_SIGNATAIRE_ATTENDU'] = $listeSignataireAttendu;
     
                
                $ligne = [];
            }
            
            if ($action == 'export') {
                $export = [];
                
                $tableauStatut = [
                    '' => '',
                    'A_ENVOYER' => 'A envoyer',
                    'ANNULEE' => 'Annulée',
                    'ENVOYEE' => 'Envoyée',
                    'EN_ATTENTE' => 'En attente',
                    'EN_SIGNATURE' => 'En signature',
                    'LIVRAISON_PARTIELLE' => 'Livraison partielle',
                    'A_RECEPTIONNER' => 'A réceptionner',
                    'REFUSEE' => 'Refusée',
                    'SOLDEE' => 'Soldée',
                ];
                

                $entete = [
                    'Numcmd &LIGNE',
                    'N° de Cde',
                    'N°Poste',
                    'Date creat',
                    'Date de livr. prev.',

                    'Objet CDE',
                    'Design. sommaire',
                    'Designation Complémentaire',
                    'Montant HT ligne BDC',
                    'Taux TVA ligne BDC',
                    'Montant TTC ligne BDC',
                    'Code Direction' ,
                    'Libellé direction',
                    'Code pôle',
                    'Libellé Pôle',
                    'Code service',
                    'Libellé service',
                    'CODE ACHETEUR',
                    'Nom Acheteur',
                    'Statut commande',
                    'Statut ligne BDC',
                    'Signataire commande',
                    'Signataires attendus',
                    'Date signature BDC',
                    'Date validation BDC',
                    'Date envoi de la commande au fournisseur',
                    
                    'Date période',
                    'Date réception (dernier BR)',
                    
                    'Montant TTC Réception',
                    'Montant HT Réception',
                    'Montant TTC Reste à livrer',
                    'Quantité commandée',
                    'Quantité réceptionnée',
                    
                    'Prix unitaire HT',
                    'Prix unitaire TTC',
                    'Montant TTC Facture',
                    'Montant HT Facture',
                    
                    'Code prestation',
                    'Libellé prestation',
                    'Compte charge CEGID',
                    'Compte charge SMST' ,
                    'Raison sociale Fournisseur',
                    'SIRET FOURNISSEUR',
                    'CODE FOURNISSEUR OXALYS',
                    'Identifiant FOURNISSEUR CEGID',
                    'Code ICS',
                    'Libellé ICS',
                    'Compte général collectif FOURNISSEUR',
                    'Code Article',
                    'Référence fournisseur',
                    'Article en réception automatique ?',
                    'Périodicité' ,
                    'Article en non réceptionnable ?',
                    
                    'Code Nature de dépense',
                    'Libellé Nature de dépense',
                    'Code sous famille',
                    'Libellé sous famille',
                    'Code famille achat',
                    'Libellé famille achat',
                    'Unité',
                    'CENTRE EMISSION',
                    'CENTRE LIVRAISON',
                    'Numéro de DA',
                    'Numéro de ligne',
                    'Numéro avenant BDC' ,
                    'Motif avenant BDC',
                    'Code accord-cadre',
                    'Accord-cadre',
                    'Date début contrat',
                    'Date fin de contrat',
                ];
                
                foreach ($tableau as $key => $ligne) {
                    if ($ligne['DOC_STATUT_CDE'] == 'ENVOYEE' && $ligne['LAST_BR'] == '1900-01-01 00:00:00.000') {
                        $ligne['STATUT'] = 'A réceptionner';
                    } else {
                        $ligne['STATUT'] = $tableauStatut[$ligne['DOC_STATUT_CDE']];
                    }
                    
                    $export[] = [
                        'Numcmd &LIGNE'                         => $ligne['DOC_NUMERO_CDE'].' '.$ligne['DOC_NUMERO_LIGNE_1'],
                        'N° de Cde'                             => $ligne['DOC_NUMERO_CDE'],
                        'N°Poste'                               => $ligne['DOC_NUMERO_LIGNE_1'],
                        'Date creat'                            => $ligne['DOC_DATE_CREATION_CDE'],
                        'Date de livr. prev.'                   => $ligne['DOC_DATE_LIVRAISON'],

                        'Objet CDE'                             => $ligne['DOC_OBJET_CDE'],
                        'Design. sommaire'                      => $ligne['DOC_DESIGNATION_ARTICLE_CDE'],
                        'Designation Complémentaire'            => $ligne['DOC_DESIGNATION_COMP_CDE'],
                        'Montant HT ligne BDC'                  => number_format($ligne['DOC_MONTANT_LIGNE_CDE'], 2, ',', ' '),
                        'Taux TVA ligne BDC'                    => number_format($ligne['DOC_TVA_CDE'], 2, ',', ' '),
                        'Montant TTC ligne BDC'                 => number_format($ligne['DOC_MONTANT_LIGNE_TTC_CDE'], 2, ',', ' '),
                        'Code Direction'                        => $ligne['SI_CODE_DIRECTION'],
                        'Libellé direction'                     => $ligne['SI_DESIGNATION_DIRECTION'],
                        'Code pôle'                             => $ligne['SI_CODE_SECTION_IMPUTATION_LBPF'],
                        'Libellé Pôle'                          => $ligne['SI_DESIGNATION'],
                        'Code service'                          => $ligne['CG_CODE_GESTION_AFFICHE'],
                        'Libellé service'                       => $ligne['CG_LIBELLE_CODE_GESTION'],
                        'CODE ACHETEUR'                         => $ligne['DOC_CODE_ACHETEUR'],
                        'Nom Acheteur'                          => $ligne['USR_NOM_UTILISATEUR'],
                        'Statut commande'                       => $ligne['STATUT'],
                        'Statut ligne BDC'                      => Sql::toBool($ligne['DOC_SOLDE_PHYSIQUE_LIGNE_CDE']) ? 'Soldé physiquement':'',
                        'Signataire commande'                   => $ligne['LISTE_SIGNATAIRE']??'',
                        'Signataires attendus'                  => $ligne['LISTE_SIGNATAIRE_ATTENDU']??'',
                        'Date signature BDC'                    => ($ligne['DOC_DATE_SIGNATURE_CDE']??''),
                        'Date validation BDC'                   => ($ligne['DOC_DATE_VALIDATION_CDE']??''),
                        'Date envoi de la commande au fournisseur'  => $ligne['DOC_DATE_IMP_CDE'],
                        
                        'Date période'                          => $ligne['PER_CODE_PERIODE'],
                        'Date réception (dernier BR)'           => $ligne['LAST_BR'],
                        
                        'Montant TTC Réception'                 => number_format($ligne['Montant TTC BR'], 2, ',', ' '),    // Certaines commandes sont réceptionnées mais sans montant. Comme indiqué dans la spéc, les réceptions en quantités sont à traduire en montant
                        'Montant HT Réception'                  => number_format($ligne['Montant HT BR'], 2, ',', ' '), // Certaines commandes sont réceptionnées mais sans montant. Comme indiqué dans la spéc, les réceptions en quantités sont à traduire en montant
                        'Montant TTC Reste à livrer'            => number_format($ligne['Montant TTC reste à livrer'], 2, ',', ' '),    // Le montant ne semble pas correspondre. Exemple BDC 475 : le montant TTC commandé est 1,092, le BDC n'est pas réceptionné mais le reste à livrer affiché est 0.182
                        'Quantité commandée'                    => number_format($ligne['DOC_QTE_TOT_LIG_CDE'], 2, ',', ' '),
                        'Quantité réceptionnée'                 => number_format($ligne['DOC_QTE_RECEP'], 2, ',', ' '), // La quantité réceptionnée semble correspondre à la quantité commandée
                        
                        'Prix unitaire HT'                      => number_format($ligne['DOC_PRIX_UNITAIRE_CDE'], Constante::PUDECIMAL, ',', ' '),
                        'Prix unitaire TTC'                     => number_format($ligne['Prix Unitaire TTC'], Constante::PUDECIMAL, ',', ' '),
                        'Montant TTC Facture'                   => number_format($ligne['Montant HT FACTURE'], 2, ',', ' '),
                        'Montant HT Facture'                    => number_format($ligne['Montant TTC FACTURE'], 2, ',', ' '),

                        'Code prestation'                       => $ligne['SCA_CODE_SOUS_CPTE_ANALYSE'],
                        'Libellé prestation'                    => $ligne['SCA_DESIGNATION'],
                        'Compte charge CEGID'                   => $ligne['CC_DESIGNATION'],
                        'Compte charge SMST'                    => $ligne['CC_CS01'],    //non valorisé
                        //'Compte_FNP'                            => '', // Compte_FNP
                        'Raison sociale Fournisseur'            => $ligne['FRS_RAISON_SOCIALE'],
                        'SIRET FOURNISSEUR'                     => $ligne['FRS_NO_SIRET'],
                        'CODE FOURNISSEUR OXALYS'               => $ligne['DOC_CODE_FOURNISSEUR'],
                        'Identifiant FOURNISSEUR CEGID'         => ($ligne['FRS_IDENTIFIANT_EXTERNE']??''),
                        'Code ICS'                              => $ligne['FRS_CS02'],
                        'Libellé ICS'                           => $ligne['FRS_CS02_L'],
                        'Compte général collectif FOURNISSEUR'  => ($ligne['FRS_CS07']??''),
                        'Code Article'                          => $ligne['DOC_CODE_ARTICLE'],
                        'Référence fournisseur'                 =>  $ligne['DOC_REFERENCE_FOURNISSEUR_CDE'],
                        'Article en réception automatique ?'    => $ligne['ART_RECEPTION_AUTOMATIQUE_CDE'],
                        'Périodicité'                           => $ligne['ART_PERIODICITE_CONTRAT'],
                        'Article en non réceptionnable ?'       => $ligne['ART_RECEPTION_AUTOMATIQUE_CDE'],
                        
                        'Code Nature de dépense'                => $ligne['SCA_CODE_CENTRE_ANALYSE'],
                        'Libellé Nature de dépense'             => $ligne['SCA_DESIGNATION_CENTRE_ANALYSE'],
                        'Code sous famille'                     => $ligne['DOC_CODE_SOUS_FAMILLE'],
                        'Libellé sous famille'                  => $ligne['SF_DESIGNATION'],
                        'Code famille achat'                    => $ligne['FA_CODE_FAMILLE'],
                        'Libellé famille achat'                 => $ligne['FA_DESIGNATION'],
                        'Unité'                                 => $ligne['DOC_UNITE_ARTICLE'],
                        'CENTRE EMISSION'                       => $ligne['DOC_CODE_CE_CDE'],
                        'CENTRE LIVRAISON'                      => $ligne['DOC_CODE_CL_CDE'],
                        'Numéro de DA'                          => $ligne['DOC_NUMERO_DA'],
                        'Numéro de ligne'                       => $ligne['DOC_NUMERO_LIGNE_DA'],
                        'Numéro avenant BDC'                    => $ligne['DOC_AVENANT'],
                        'Motif avenant BDC'                         => $ligne['DOC_MOTIF_AVENANT_CDE'],
                        'Code accord-cadre'                     => $ligne['DOC_CODE_ACCORD_CADRE'],
                        'Accord-cadre'                          => $ligne['ACC_LIBELLE'],
                        'Date début contrat'                    => $ligne['ACC_DATE_DEB'],
                        'Date fin de contrat'                   => $ligne['ACC_DATE_FIN'],
                    ];
                }
                
                \Helpers\ExportTo\Outils::gestionEmailAsync2(
                    'reporting_conso_bdc_'.date('Ymd'),
                    $export,
                    $this->JWTKEY,
                    $this->router,
                    $this->getTranslationService(),
                    $entete
                );
        
                return 'ok';
            }
        }
        
        $periodes = new Periodes($this->pdo);
        $periodes = $periodes->fetchAll([], ['tri_CODE_PER' => 'desc']);
        
        foreach ($periodes as $value) {
            $periode[$value['CODE_PER']] = $value['LIBELLE'];
        }
        
        /* Filtre avancées */
        $filtreAvance = new Generator($post);
        $filtreAvance->setFiltre('DOC_DATE_CREATION_CDE', 'date', 'Date création');
        $filtreAvance->setFiltre('DOC_DATE_LIVRAISON', 'date', 'Date livr. prev.');
        
        
        return $this->renderer->render('@specifique118/Reporting/tableauReportingConsoBDC', [
            'menuActive' => 'EtatStatistique',
            'listePeriode' => $periode,
            'post' => $post,
            'tableau' => $tableau??[],
            'listeStatut' => $listeStatut??[],
            'initFiltreAvance'  => $filtreAvance->getInit(),
            'filtreAvance'      => $filtreAvance->getFiltres(),
        ]);
    }
    
    public function listeSIAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        $listeSI = $tabReport->listeSIOXADW($post);

        $paginator = new Paginator();
        $infoPagination = $paginator->generate($listeSI, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeSI', [
            'infoPagination' => $infoPagination,
            'listeSI' => $listeSI??[],
            'post' => $post
        ]);
    }
    
    public function listeNatureAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listeNature = $tabReport->listeNature($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($listeNature, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeNature', [
            'infoPagination' => $infoPagination,
            'listeNature' => $listeNature??[],
            'post' => $post
        ]);
    }
    
    public function listePoleAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listePole = $tabReport->listePole($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($listePole, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listePole', [
            'infoPagination' => $infoPagination,
            'listePole' => $listePole??[],
            'post' => $post
        ]);
    }
    
    public function listePrestationAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listePresta = $tabReport->listePrestation($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($listePresta, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listePrestation', [
            'infoPagination' => $infoPagination,
            'listePresta' => $listePresta??[],
            'post' => $post
        ]);
    }
    
    public function listeSignataireAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $listeSignataire = $tabReport->listeSignataire($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($listeSignataire, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeSignataire', [
            'infoPagination' => $infoPagination,
            'listeSignataire' => $listeSignataire??[],
            'post' => $post
        ]);
    }
    
    public function listeAcheteursAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $liste = $tabReport->listeAcheteurs($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($liste, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeAcheteurs', [
            'infoPagination' => $infoPagination,
            'liste' => $liste??[],
            'post' => $post
        ]);
    }
    
    public function listeFamillesAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $liste = $tabReport->listeFamilles($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($liste, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeFamilles', [
            'infoPagination' => $infoPagination,
            'liste' => $liste??[],
            'post' => $post
        ]);
    }
    
    public function listeSousFamillesAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $liste = $tabReport->listeSousFamilles($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($liste, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeSousFamilles', [
            'infoPagination' => $infoPagination,
            'liste' => $liste??[],
            'post' => $post
        ]);
    }
    
    public function listeFournisseursAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $tabReport = new TableauReporting($this->pdoOxaDw, $this->pdo);
        
        $liste = $tabReport->listeFournisseurs($post);
        
        $paginator = new Paginator();
        
        $infoPagination = $paginator->generate($liste, 8, $post, $this->renderer);
        
        return $this->renderer->render('@specifique118/Reporting/listeFournisseurs', [
            'infoPagination' => $infoPagination,
            'liste' => $liste??[],
            'post' => $post
        ]);
    }
}
