<?php

namespace Modules\ProjetAchat\Controller;

use Skeleton\Controller\Controller;
use Helpers\Ariane\Ariane;
use Helpers\Trad\Trad;
use Entity\Model\DoaStruct;
use Helpers\Validator\Validator;
use GuzzleHttp\Psr7\Response;
use Modules\ProjetAchat\Repository\BibliothequeDonnee;
use Entity\Model\DoaData;
use Helpers\Outil\Sql;
use Modules\ProjetAchat\Service\ChampService;
use Modules\ProjetAchat\Service\HeritageService;
use Modules\ProjetAchat\Service\BibliothequeService;
use Modules\ProjetAchat\Repository\Champ;
use Modules\GlobalApplication\Repository\BddObjects;
use Helpers\ChampsSupplementaire\ChampSupp;
use Modules\ProjetAchat\Service\ModeleProjetService;

class ChampsController extends Controller
{
    public function createEditAction() : string
    {
        $typeObjet = $this->request->getAttribute('typeObjet');
        $idObjet = $this->request->getAttribute('idObjet');
        $idDonnee = $this->request->getAttribute('idDonnee');
        $idChamp = $this->request->getAttribute('idChamp');

        $trad = $this->getTranslationService();
        
        $bibliothequeRepo = new BibliothequeDonnee($this->pdo);
        $bddObjectRepo = new BddObjects($this->pdo);
        $doaStruct = new DoaStruct($this->pdo);
        $champRepo = new Champ($this->pdo);
        $infoDonnee = $doaStruct->find($idDonnee);
        
        $listeTypeData = [
            'A' => $trad->t('Alpha'),
            'L' => $trad->t('Logique'),
            'T' => $trad->t('Montant'),
            'N' => $trad->t('Numérique'),
            'D' => $trad->t('Date'),
            'H' => $trad->t('Heure'),
            'F' => $trad->t('Fichier'),
            'C' => $trad->t('Calculé')
        ];
        
        $listeFormat['CHAMPS'] = $trad->t('Champ simple');
        $listeFormat['LINK'] = $trad->t('Lié à une table') ;

        if ($infoDonnee['OBJET']) {
            $listeFormat['LINKOBJ'] = $trad->t('Lié à la table').' '.$infoDonnee['OBJET'];
            
            $champSupp = new ChampSupp($this->pdo);
            if ($champSupp->tsDonExist($infoDonnee['OBJET'])) {
                $listeDataObjetDonnee = ['CODEDICO' => 'CODEDICO', 'LIB01DICO' => 'LIB01DICO'];
            } else {
                $listeDataObjetTMP = $bddObjectRepo->getListeDataObjet($infoDonnee['OBJET']);
                foreach ($listeDataObjetTMP as $objet) {
                    $listeDataObjetDonnee[$objet['BDD_COL']] = $objet['BDD_COL'];
                }

                /** @phpstan-ignore-next-line */
                if ($infoDonnee['OBJET']=='FOURNISS' && Sql::boolSql($infoDonnee['MULTIPLE'])) {
                    $listeDataObjetTMP = $bddObjectRepo->getListeDataObjet('AO_FOUR');
                    foreach ($listeDataObjetTMP as $objet) {
                        $listeDataObjetDonnee['AO_FOUR.'.$objet['BDD_COL']] = 'AO_FOUR.'.$objet['BDD_COL'];
                    }
                }
            }
        }
        
        $listeObjetTMP = $bibliothequeRepo->getListeObjet();
        foreach ($listeObjetTMP as $objet) {
            $listeObjet[$objet['BDD_TABLE']] = $objet['LIBELLE'];
        }
        
        $listInput = $champRepo->listInputCalculated($typeObjet, $idObjet, $idDonnee);
        
        if ($idChamp) {
            Ariane::generate(2, $trad->t('Modification champ sur Donnée'));
            $doaData = new DoaData($this->pdo);
            $champ = $doaData->find($idChamp, [], [], $this->pdo::FETCH_ASSOC);

            $champ['LIE_A_OBJET'] = Sql::boolSql($champ['LIE_A_OBJET']);
            $champ['DATA_LIE_A_OBJ'] = Sql::boolSql($champ['DATA_LIE_A_OBJ']);
            $champ['ID_OBJET_DATA'] = Sql::boolSql($champ['ID_OBJET_DATA']);
            $champ['N_NEGATIF_AUTO'] = Sql::boolSql($champ['N_NEGATIF_AUTO']);
            $champ['FIC_GENERE'] = Sql::boolSql($champ['FIC_GENERE']);
            
            if ($champ['LIE_A_OBJET']) {
                $champ['FORMAT'] = 'LINKOBJ';
            } elseif ($champ['DATA_LIE_A_OBJ']) {
                $champ['FORMAT'] = 'LINK';
                $uniqueKey = $champ['CHAMP_OBJET_DATA'];

                if (!sql::boolSql($champ['ID_OBJET_DATA'])) {
                    $listeDataObjetTMP = $bddObjectRepo->getListeDataObjet($champ['OBJET_DATA']);
                    foreach ($listeDataObjetTMP as $objet) {
                        $listeDataObjet[$objet['BDD_COL']] = $objet['BDD_COL'];
                    }

                    $objetExit = $bibliothequeRepo->objetExist($typeObjet, $idObjet, $idDonnee, $champ['OBJET_DATA']);
                    foreach ($objetExit as $objet) {
                        $listeObjetLie[$objet['ID_DATA']] = $objet['NOM_DATA'];
                    }
                }
            } else {
                $champ['FORMAT'] = 'CHAMPS';
            }
        } else {
            $champ['MNT_DEVISE'] = $_SESSION['parametrage']['DEVISE_BASE'];
            Ariane::generate(2, $trad->t('Ajout champ sur Donnée'));
        }
        
        return $this->renderer->render('@projetAchat/champs/creation', [
            'menuActive'            => 'ProjetAchat',
            'infoDonnee'            => $infoDonnee,
            
            'listeTypeData'         => $listeTypeData,
            'listeFormat'           => $listeFormat,
            'idDonnee'              => $idDonnee,
            'typeObjet'             => $typeObjet,
            'idObjet'               => $idObjet,
            'idChamp'               => $idChamp??null,
            'listeObjet'            => $listeObjet,
            'mode'                  => $idChamp? 'edit':'create',
            'value'                 => $champ,
            'UniqueKey'             => $uniqueKey??'',
            'listeDataObjet'        => $listeDataObjet??[],
            'listeObjetLie'         => $listeObjetLie??[],
            'listeDataObjetDonnee'  => $listeDataObjetDonnee??[],
            'listeInput'            => $listInput,
        ]);
    }
    
    public function ajaxObjetLieAction() : string
    {
        $typeObjet = $this->request->getAttribute('typeObjet');
        $idObjet = $this->request->getAttribute('idObjet');
        $idDonnee = $this->request->getAttribute('idDonnee');
        $post = $this->request->getParsedBody();
        
        /*$doaStruct = new DoaStruct($this->pdo);
        $infoDonnee = $doaStruct->find($idDonnee, ['MULTIPLE']);*/

        
        /*$tableJointe['AO_FOUR'] = [
            'NO_AO' => 'OTHER_CHPS',
            'CODE_FOU' => 'FOURNISS.CODE'
        ];*/
        
        $bibliothequeRepo = new BibliothequeDonnee($this->pdo);
        $bddObjectRepo = new BddObjects($this->pdo);
        $champSupp = new ChampSupp($this->pdo);
        
        $listeObjetTMP = $bibliothequeRepo->getListeObjet();
        foreach ($listeObjetTMP as $objet) {
            $listeObjet[$objet['BDD_TABLE']] = $objet['LIBELLE'];
        }
        
        $objetData = BibliothequeService::getObjectDataSysteme($post['OBJET_DATA']);
        
        if ($csType = $champSupp->tsDonExist($post['OBJET_DATA'])) {
            if (Sql::boolSql($csType['TBLSECTO'])) {
                $UniqueKey = 'COD_STE|CODEDICO';
            } else {
                $UniqueKey = 'CODEDICO';
            }
            
            $listeDataObjet = [
                'CODEDICO' => 'CODEDICO',
                'LIB01DICO' => 'LIB01DICO',
            ];
        } else {
            $listeDataObjetTMP = $bddObjectRepo->getListeDataObjet($objetData);
            foreach ($listeDataObjetTMP as $objet) {
                $listeDataObjet[$objet['BDD_COL']] = $objet['BDD_COL'];
            }
                        
            $UniqueKeyTMP = $bddObjectRepo->getUniqueKeyObjet($objetData);
            
            $UniqueKey = '';
            foreach ($UniqueKeyTMP as $key) {
                $UniqueKey .= ($UniqueKey == '' ? '' : '|') . $key['BDD_COL'];
            }
        }

        $objetExit = $bibliothequeRepo->objetExist($typeObjet, $idObjet, $idDonnee, $post['OBJET_DATA']);
        
        if (!$objetExit) {
            $post['CHAMP_OBJET_DATA'] = $UniqueKey;
            $post['ID_OBJET_DATA'] = true;
        } else {
            foreach ($objetExit as $objet) {
                $listeObjetLie[$objet['ID_DATA']] = $objet['NOM_DATA'];
            }
        }

        return $this->renderer->render('@projetAchat/champs/ajaxObjetLie', [
            
            'value'             => $post,
            'idDonnee'          => $idDonnee,
            'typeObjet'         => $typeObjet,
            'idObjet'           => $idObjet,
            'listeObjet'        => $listeObjet,
            'listeDataObjet'    => $listeDataObjet??[],
            'objetExit'         => $objetExit,
            'listeObjetLie'     => $listeObjetLie??null,
            'UniqueKey'         => $UniqueKey,
        ]);
    }
    
    /**
     * @return Response|string
     */
    public function validationAction()
    {
        $typeObjet = $this->request->getAttribute('typeObjet');
        $idObjet = $this->request->getAttribute('idObjet');
        $idDonnee = $this->request->getAttribute('idDonnee');
        $idChamp = $this->request->getAttribute('idChamp');

        if ('B' === $typeObjet) {
            $nextPath = $this->router->generateUri('ProjetAchat.BibliothequeDonnee.index');
        } else {
            $nextPath = $this->router->generateUri('ProjetAchat.ModeleProjet.details', ['typeObjet' => $typeObjet, 'idObjet' => $idObjet]);
        }

        $doaData = new DoaData($this->pdo);
        $bibliotheque = new BibliothequeDonnee($this->pdo);
        $champRepo = new Champ($this->pdo);
        $champs = [];
        
        $doaStruct = new DoaStruct($this->pdo);
        $infoDonnee = $doaStruct->find($idDonnee);
        
        $champs['TYPE_OBJET'] = $typeObjet;
        $champs['ID_OBJET'] = $idObjet;
        $champs['ID_DONNEE'] = $idDonnee;

        $post = $this->request->getParsedBody();
        $validator = $this->createValidator();
        $trad = $this->getTranslationService();
        
        if ($post) {
            $champOld = null;
            if ($idChamp) {
                $champOld = $doaData->find($idChamp);
            }
            
            /* Contrôle des champs commun */
            $validator->isStringAvecEspace($trad->t('Nom'), $post['NOM_DATA'], 1, 60);
            
            if ($champOld && $champOld['NOM_DATA']!=$post['NOM_DATA']) {
                $validator->isTrue($bibliotheque->valeurChampsExiste($typeObjet, $idObjet, $idDonnee, 'NOM_DATA', $post['NOM_DATA']), $trad->t('Le champ NOM existe déjà pour cette donnée.'));
            }
            
            $validator->isFalse($post['FORMAT'], $trad->t('Vous devez sélectionner un type pour le champ.'));
            $validator->isStringSansEspace($trad->t('Nom de la balise pour fusion de données'), $post['TAG_MERGE'], 0, 30);
            $validator->isStringSansEspace($trad->t('Nom du champ dans la base infocentre'), $post['NOMSQLDW'], 0, 30);
            if ($post['TAG_MERGE'] && (($champOld && $champOld['TAG_MERGE']!=$post['TAG_MERGE']) || !$champOld )) {
                $validator->isTrue($bibliotheque->valeurChampsExiste($typeObjet, $idObjet, $idDonnee, 'TAG_MERGE', $post['TAG_MERGE']), $trad->t('Le champ nom de la balise pour fusion de données existe déjà pour cette donnée.'));
            }
            if ($post['NOMSQLDW'] && (($champOld && $champOld['NOMSQLDW']!=$post['NOMSQLDW']) || !$champOld )) {
                $validator->isTrue($bibliotheque->valeurChampsExiste($typeObjet, $idObjet, $idDonnee, 'NOMSQLDW', $post['NOMSQLDW']), $trad->t('Le champ nom du champ dans la base infocentre existe déjà pour cette donnée.'));
            }
            
            $validator->isFalse(
                preg_match('/^[a-zA-Z0-9_]*$/', $post['NOMSQLDW']),
                Trad::strBuild(
                    $trad->t('Le champ @1@ ne peut contenir que les caractères suivants 0-9, A-Z, et « _ ».'),
                    $trad->t('Nom du champ dans la base infocentre')
                )
            );
            
            
            $champs['NOM_DATA'] = $post['NOM_DATA'];
            $champs['TAG_MERGE'] = $post['TAG_MERGE'];
            $champs['NOMSQLDW'] = $post['NOMSQLDW'];

            if ($post['FORMAT'] == 'CHAMPS') {
                $champs['numerique_FIC_GENERE'] = '0x46';
                $champs['ID_FORMAT'] = '';
                $champs['MNT_DEVISE'] = '';
                $champs['A_LONG'] = '';
                $champs['numerique_N_NEGATIF_AUTO'] = '0x46';
                $champs['N_PARTIE_ENT'] = '';
                $champs['N_PARTIE_DEC'] = '';
                
                $validator->isFalse($post['TYPE_DATA'], $trad->t('Vous devez sélectionner un format pour le champ.'));
                
                $champs['TYPE_DATA'] = $post['TYPE_DATA'];

                if ($post['TYPE_DATA']=='A') {
                    $post['A_LONG'] = $post['A_LONG']??'';
                    $validator->isInteger($trad->t('Longueur'), $post['A_LONG'], 1, 3000, true);
                    $champs['A_LONG'] = $post['A_LONG'];
                } elseif ($post['TYPE_DATA']=='N') {
                    $validator->isCheck($post['N_NEGATIF_AUTO']);
                    $validator->isInteger($trad->t('Longeur partie entière'), $post['N_PARTIE_ENT'], 1, 15, true);
                    $validator->isInteger($trad->t('Longueur partie décimale'), $post['N_PARTIE_DEC'], 0, 5, true);
                    
                    if ($post['N_PARTIE_DEC'] == '') {
                        $post['N_PARTIE_DEC'] = 0;
                    }
                    
                    $champs['numerique_N_NEGATIF_AUTO'] = Sql::setBoolSql($post['N_NEGATIF_AUTO']);
                    $champs['N_PARTIE_ENT'] = $post['N_PARTIE_ENT'];
                    $champs['N_PARTIE_DEC'] = $post['N_PARTIE_DEC'];
                } elseif ($post['TYPE_DATA']=='T') {
                    $validator->zoom('Devise', $post['MNT_DEVISE'], $trad->t('Devise'), $this->pdo);
                    
                    $champs['MNT_DEVISE'] = $post['MNT_DEVISE'];
                } elseif ($post['TYPE_DATA']=='F') {
                    $validator->isCheck($post['FIC_GENERE']);
                    
                    $post['TAG_MERGE'] = '';
                    $champs['numerique_FIC_GENERE'] = Sql::setBoolSql($post['FIC_GENERE']);
                    
                    if (sql::toBool($champs['numerique_FIC_GENERE'])) {
                        $validator->zoom('DoarBFmtDoc', $post['ID_FORMAT'], $trad->t('Maquette'), $this->pdo);
                        $champs['ID_FORMAT'] = $post['ID_FORMAT'];
                    }
                } elseif ($post['TYPE_DATA']=='C') {
                    $champs['EXP_CALCUL'] = $post['EXP_CALCUL'];
                    $champs['numerique_ERREUR_CALCUL'] = '0x46';
                    
                    $expCalcul = $post['EXP_CALCUL'];
                    $validator->isStringAvecEspace($trad->t('Expression du calcul'), $expCalcul, 1, 3000);
                    
                    $listInputTmp = $champRepo->listInputCalculated($typeObjet, $idObjet, $idDonnee);
                   
                    foreach ($listInputTmp as $input) {
                        $expCalcul = str_replace('['.$input['TYPE_DATA'].'_'.$input['ID'].']', 1, $expCalcul);
                    }

                    $expression = '#^(\(|)[1-9]([\.\,]{1}[1-9]|)[+\-\*/]{1}[1-9]([\.\,]{1}[1-9]|)(\)|)(.[+\-\*/]|)*$#';
                    if (preg_match($expression, $expCalcul)) {
                        try {
                            eval("\$resultat = {$expCalcul};");
                        } catch (\ParseError $p) {
                            $validator->setError($trad->t('L\'expression de calcul n\'est pas correcte.'));
                        }
                    } else {
                        $validator->setError($trad->t('L\'expression de calcul n\'est pas correcte.'));
                    }
                }
            } elseif ($post['FORMAT'] == 'LINK') {
                $validator->isFalse(($post['OBJET_DATA']??''), $trad->t('Vous devez sélectionner une table pour le champ.'));
                $validator->isCheck($post['ID_OBJET_DATA']);
                
                $champs['OBJET_DATA'] = $post['OBJET_DATA']??'';
                if ($post['ID_OBJET_DATA']) {
                    $validator->isFalse(($post['CHAMP_OBJET_DATA_UNIQUE']??''), $trad->t('Vous devez sélectionner un champ de la table pour le champ.'));
                    $champs['ID_DATA_LIEE'] = '';
                    $champs['numerique_ID_OBJET_DATA'] = '0x54';
                    $champs['CHAMP_OBJET_DATA'] = $post['CHAMP_OBJET_DATA_UNIQUE']??'';
                } else {
                    $validator->isFalse(($post['CHAMP_OBJET_DATA']??''), $trad->t('Vous devez sélectionner un champ de la table pour le champ.'));
                    $champs['ID_DATA_LIEE'] = $post['ID_DATA_LIEE'];
                    $champs['CHAMP_OBJET_DATA'] = $post['CHAMP_OBJET_DATA']??'';
                }

                $champs['numerique_DATA_LIE_A_OBJ'] = '0x54';
            } elseif ($post['FORMAT'] == 'LINKOBJ') {
                $validator->isFalse(($post['OBJET']??''), $trad->t('Vous devez sélectionner une table pour le champ.'));
                
                $champs['OBJET'] = $post['OBJET'];
                $champs['numerique_LIE_A_OBJET'] = '0x54';
            }

            if ($validator->isValid()) {
                if ($idChamp) {
                    $commentaire = trad::strBuild(('Modification du champ : @1@.'), $post['NOM_DATA']);
                } else {
                    $commentaire = trad::strBuild(('Ajout du champ : @1@.'), $post['NOM_DATA']);
                }
                
                ModeleProjetService::updateDoaEvent($this->pdo, $idObjet, $typeObjet, $commentaire);
                
                if ($idChamp) {
                    $doaData->update($champs, $idChamp);
                } else {
                    $maxOrder = $bibliotheque->maxOrderChamps($typeObjet, $idObjet, $idDonnee);
                    $champs['NUM_ORDRE'] = intval($maxOrder['NUM_ORDRE'])+1;
                    
                    $doaData->insert($champs);
                }
                
                if ($idChamp && $bibliotheque->champUtilise($idChamp)) {
                    return new Response(200, [
                    ], $this->renderer->render('@popup-erreur/confirmationMultiSuppression', [
                        'message' => $trad->t('Souhaitez-vous que les modifications de la bibliothèque soient répercutées ?'),
                        'div'     => 'redirection',
                        'pathURL' => $this->router->generateUri('ProjetAchat.Champs.updateHeritage', ['idChamp' => $idChamp]),
                        'dataUpdate' => json_encode($champs),
                        'form'    => '',
                        'nextPath' => $nextPath,
                        'postPath' => "{'onglet' : 'data','id' : '".$infoDonnee['ID_CAT']."'}",
                    ]));
                } else {
                    return new Response(443, [
                        
                    ], (string) \json_encode([
                        'statut' => 'O',
                        'path' => $nextPath,
                        'post' => ['onglet' => 'data','id'  => $infoDonnee['ID_CAT']]
                    ]));
                }
            } else {
                return $this->renderer->render('@popup-erreur/ErreurCreation', [
                    'ErreurValid' => $validator->getError(),
                ]);
            }
        }

        return new response(200);
    }
    
    public function deleteAction()
    {
        $idChamp = $this->request->getAttribute('idChamp');
        $trad = $this->getTranslationService();
        
        $bibliotheque = new BibliothequeDonnee($this->pdo);
        $infoChamp = $bibliotheque->getInfoChamps($idChamp);
        
        if ($bibliotheque->champUtilise($idChamp)) {
            return new Response(443, [
            ], $this->renderer->render('@popup-erreur/confirmationMultiSuppression', [
                'message' => $trad->t('Souhaitez-vous que les modifications de la bibliothèque soient répercutées ?'),
                'div'     => 'detailRefresh',
                'pathURL' => $this->router->generateUri('ProjetAchat.Champs.deleteHeritage', ['idChamp' => $idChamp]),
                'form'    => '',
                'nextPath' => $this->router->generateUri('ProjetAchat.BibliothequeDonnee.ajaxDetailCategorie', [
                    'idCategorie'   => $infoChamp['ID_CAT'],
                    'idObjet'       => $infoChamp['ID_OBJET'],
                    'typeObjet'     => $infoChamp['TYPE_OBJET']
                ])
            ]));
        } else {
            $commentaire = trad::strBuild(('Suppression du champ : @1@.'), $infoChamp['NOM_DATA']);
            
            $champService = new ChampService($this->pdo);
            $champService->supprimerData($idChamp, $infoChamp['TYPE_OBJET'], $infoChamp['ID_OBJET']);
            
            ModeleProjetService::updateDoaEvent($this->pdo, $infoChamp['ID_OBJET'], $infoChamp['TYPE_OBJET'], $commentaire);
            
            return new Response(200, [
                
            ], (string) \json_encode([
                'path' => $this->router->generateUri('ProjetAchat.BibliothequeDonnee.ajaxDetailCategorie', ['idCategorie' => $infoChamp['ID_CAT'], 'idObjet' => $infoChamp['ID_OBJET'], 'typeObjet' => $infoChamp['TYPE_OBJET']]),
            ]));
        }
    }
    
    public function deleteHeritageAction() : string
    {
        $idChamp = $this->request->getAttribute('idChamp');
        $post = $this->request->getParsedBody();
        $trad = $this->getTranslationService();
        
        $postHeritage = null;
        
        if ($post['del_TemplatesOnly'] == 'true') {
            $postHeritage = 1;
        } elseif ($post['del_foldersInProgress'] == 'true') {
            $postHeritage = 0;
        } else {
            $postHeritage = 2;
        }
        
        $bibliotheque = new BibliothequeDonnee($this->pdo);
        $infoChamp = $bibliotheque->getInfoChamps($idChamp);
        
        $commentaire = trad::strBuild(('Suppression du champ : @1@.'), $infoChamp['NOM_DATA']);
        
        $champService = new ChampService($this->pdo);
        $champService->supprimerData($idChamp, $infoChamp['TYPE_OBJET'], $infoChamp['ID_OBJET'], $postHeritage);
        
        ModeleProjetService::updateDoaEvent($this->pdo, $infoChamp['ID_OBJET'], $infoChamp['TYPE_OBJET'], $commentaire);

        return '';
    }
    
    public function updateHeritageAction() : string
    {
        $idChamp = $this->request->getAttribute('idChamp');
        $post = $this->request->getParsedBody();
        
        $postHeritage = null;
        
        if ($post['del_TemplatesOnly'] == 'true') {
            $postHeritage = 1;
        } elseif ($post['del_foldersInProgress'] == 'true') {
            $postHeritage = 0;
        } else {
            $postHeritage = 2;
        }
        
        $bibliotheque = new BibliothequeDonnee($this->pdo);
        $infoChamp = $bibliotheque->getInfoChamps($idChamp);

        $doaData = new DoaData($this->pdo);
        $infoChampUpdate = $doaData->find($idChamp, ['NOM_DATA' ,'LIE_A_OBJET', 'OBJET', 'FLAG_ID_OBJET', 'DATA_LIE_A_OBJ', 'OBJET_DATA', 'ID_OBJET_DATA' ,'ID_DATA_LIEE', 'CHAMP_OBJET_DATA', 'TYPE_DATA', 'A_LONG', 'N_NEGATIF_AUTO', 'N_PARTIE_ENT', 'N_PARTIE_DEC', 'MNT_DEVISE', 'FIC_GENERE', 'ID_FORMAT', 'TAG_MERGE', 'NOMSQLDW', 'ERREUR_CALCUL', 'EXP_CALCUL'], [], $this->pdo::FETCH_ASSOC);

        $infoChampUpdate['FLAG_ID_OBJET'] = Sql::toBool($infoChampUpdate['FLAG_ID_OBJET']);
        $infoChampUpdate['LIE_A_OBJET'] = Sql::toBool($infoChampUpdate['LIE_A_OBJET']);
        $infoChampUpdate['DATA_LIE_A_OBJ'] = Sql::toBool($infoChampUpdate['DATA_LIE_A_OBJ']);
        $infoChampUpdate['ID_OBJET_DATA'] = Sql::toBool($infoChampUpdate['ID_OBJET_DATA']);
        $infoChampUpdate['N_NEGATIF_AUTO'] = Sql::toBool($infoChampUpdate['N_NEGATIF_AUTO']);
        $infoChampUpdate['FIC_GENERE'] = Sql::toBool($infoChampUpdate['FIC_GENERE']);
        $infoChampUpdate['ERREUR_CALCUL'] = Sql::toBool($infoChampUpdate['ERREUR_CALCUL']);
        
        $dataService = new HeritageService($this->pdo);
        $dataService->editionHeritage($infoChamp['TYPE_OBJET'], $infoChamp['ID_OBJET'], $infoChamp['ID_DONNEE'], $idChamp, $infoChampUpdate, $postHeritage);
        
        return '';
    }
    
    public function briserHeritageAction()
    {
        $typeObjet = $this->request->getAttribute('typeObjet');
        $idObjet = $this->request->getAttribute('idObjet');
        $idDonnee = $this->request->getAttribute('idDonnee');
        $idChamp = $this->request->getAttribute('idChamp');
        
        $bibliotheque = new BibliothequeDonnee($this->pdo);
        $infoChamp = $bibliotheque->getInfoChamps($idChamp);
        
        $dataRepo = new Champ($this->pdo);
        $dataRepo->champBriserHeritage($typeObjet, $idObjet, $idDonnee, $idChamp);
        
        return new Response(200, [
            
        ], (string) \json_encode([
            'path' => $this->router->generateUri('ProjetAchat.BibliothequeDonnee.ajaxDetailCategorie', ['idCategorie' => $infoChamp['ID_CAT'], 'idObjet' => $idObjet, 'typeObjet' => $typeObjet]),
        ]));
    }
}
