<?php
namespace App\Controller;
use App\Controller\commandeClient\traits\AjaxContent\ParametrageTrait;
use App\Controller\commandeClient\traits\methodePost\InsertTrait;
use App\Form\ccQuick\CCQuickFormType;
use App\Form\commandeClient\ExpeditionFormType;
use App\Repository\administration\MemoParametreRepository;
use App\Repository\administration\PasserelisteRepository;
use App\Repository\administration\PasserelisteUtilisateurSocieteRepository;
use App\Repository\administration\PucesGprsRevendeurRepository;
use App\Repository\administration\ReferentielRepository;
use App\Repository\administration\UtilisateurSocieteRepository;
use App\Repository\administration\UtilisateursRepository;
use App\Repository\administration\ValidateurRepository;
use App\Repository\commandeClient\CommandeClientEnAttenteRepository;
use App\Repository\commandeClient\CommandeClientEquipeRepository;
use App\Repository\commandeClient\CommandeClientEtatRepository;
use App\Repository\commandeClient\CommandeClientListeStatutRepository;
use App\Repository\commandeClient\CommandeClientPieceJointeRepository;
use App\Repository\commandeClient\CommandeClientReferenceRepository;
use App\Repository\commandeClient\CommandeClientRepository;
use App\Repository\commandeClient\CommandeClientTypeCommandeRepository;
use App\Repository\commandeClient\CommandeClientTypeDateExpeditionRepository;
use App\Repository\commandeClient\ConstructeurIngenicoAxisRepository;
use App\Repository\commandeClient\LogicielRepository;
use App\Repository\commandeClient\ProtocoleLiaisonCaisseRepository;
use App\Repository\commandeClient\ReferentielTypeParametrageRepository;
use App\Repository\commandeClient\TypeContratOptionRepository;
use App\Repository\commandeClient\TypeContratRepository;
use App\Repository\commandeClient\VitesseRepository;
use App\Repository\fonctions\InformationsAdresseRepository;
use App\Repository\fonctions\TimeZoneRepository;
use App\Repository\sav\EtatMaterielRepository;
use App\Repository\stock\StockLibelleRepository;
use App\Repository\Transporteur\ExpeditionRepository;
use App\Repository\Transporteur\SuiviColisColorRepository;
use App\Repository\Transporteur\SuiviColisRepository;
use App\Repository\Transporteur\TransportComptesRepository;
use App\Repository\Transporteur\TransporteurRepository;
use App\Repository\Utilisateur\UtilisateurSocieteImageRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Helpers\Helpers;
use Symfony\Contracts\Translation\TranslatorInterface;
class HomeController extends AbstractController
{
use ParametrageTrait;
use InsertTrait;
/**
* @Route("/")
*/
public function indexNoLocale()
{
return $this->redirectToRoute('index',['_locale' => 'fr']);
}
/**
* @Route("/{_locale<%app.supported_locales%>}/", name="index")
* @return Response
*/
public function index(Request $request, Helpers $helpers, TranslatorInterface $translator, UtilisateursRepository $utilisateurRepo, ReferentielRepository $referentielRepo,
ReferentielTypeParametrageRepository $referentielTypeParametrageRepo, PasserelisteRepository $passerelisteRepo, ConstructeurIngenicoAxisRepository $constructeurIngenicoAxisRepo,
ProtocoleLiaisonCaisseRepository $protocoleLiaisonCaisseRepo, VitesseRepository $vitesseRepo, LogicielRepository $logicielRepo,
MemoParametreRepository $memoParametreRepo, PasserelisteUtilisateurSocieteRepository $passerelistesUtilisateurSocieteRepo,
UtilisateurSocieteRepository $utilisateurSocieteRepo, PucesGprsRevendeurRepository $pucesGprsRevendeurRepo, TimeZoneRepository $timeZoneRepo, EntityManagerInterface $em,
Filesystem $filesystem, CommandeClientPieceJointeRepository $commandeClientPieceJointRepo, CommandeClientEnAttenteRepository $commandeEnAttenteRepo,
InformationsAdresseRepository $informationsAdresseRepo, TypeContratRepository $typeContratRepo, UtilisateurSocieteImageRepository $utilisateurSocieteImageRepo, TransporteurRepository $transporteurRepo,
CommandeClientTypeDateExpeditionRepository $commandeClientTypeDateExpeditionRepo, CommandeClientEtatRepository $commandeClientEtatRepo, CommandeClientEquipeRepository $commandeClientEquipeRepo, CommandeClientTypeCommandeRepository $commandeClientTypeCommandeRepo, StockLibelleRepository $stockLibelleRepo,
EtatMaterielRepository $etatMaterielRepo, UtilisateursRepository $utilisateursRepo, ValidateurRepository $validateurRepo, CommandeClientListeStatutRepository $CommandeClientListeStatutRepo, CommandeClientReferenceRepository $commandeClientReferenceRepo, ExpeditionRepository $expeditionRepo, TypeContratOptionRepository $typeContratOptionRepo,
CommandeClientRepository $commandeClientRepo, SuiviColisRepository $suiviColisRepo, SuiviColisColorRepository $suiviColisColorRepository,
TransportComptesRepository $transportComptesRepo
)
{
$currentUser = $utilisateurRepo->findOneByIdUtilisateur($this->getUser()->getIdUtilisateur());
$currentSosciety = $currentUser->getFkUtilisateurSociete()->getSociete();
$rechercheData = $helpers->getRechercheClient('PLANET MONETIC', $currentSosciety, '', '', '', '', '', '', '', true);
//La aprtie livraison
$dataLivraison = [];
if(!empty($rechercheData['data']) && !empty($rechercheData['data'][0])) {
$dataLivraison = $rechercheData['data'][0];
$dataLivraison['livraison_societe'] = $rechercheData['data'][0]['nom_cli'];
$dataLivraison['livraison_adresse'] = $rechercheData['data'][0]['adresse'];
$dataLivraison['livraison_code_postal'] = $rechercheData['data'][0]['cp'];
$dataLivraison['livraison_ville'] = $rechercheData['data'][0]['ville'];
$dataLivraison['livraison_telephone'] = $rechercheData['data'][0]['cus_telephone'];
$dataLivraison['livraison_contact'] = trim($rechercheData['data'][0]['Contact']);
$dataLivraison['livraison_mail'] = $rechercheData['data'][0]['cus_email'];
$dateSouhaite = date('Y-m-d', strtotime(date("Y-m-d") . ' +1 day'));
$dataLivraison['livraison_dateSouhaite'] = $dateSouhaite;
$dataLivraison['transporteur'] = 0;
$dataLivraison['livraison_commentaire'] = '';
$dataLivraison['livraison_etiquette_a_coller'] = '';
}
$formCCQuick = $this->createForm(CCQuickFormType::class, []);
$formCCQuick->handleRequest($request);
$formCCQuickView = $formCCQuick->createView();
if ($request->isXmlHttpRequest()) {
$post = [];
$postData = $request->request->get('post');
$recupPost = explode('&', $postData);
if (is_array($recupPost)) {
foreach ($recupPost as $key => $value) {
$explode = explode('=', $value);
$post[$explode[0]] = $explode[1];
}
}
//Step-2
if($post['ajax_type'] == 'mat_list') {
$matCCQuickList = $referentielRepo->getMatsEligibleCcQuick();
$matsList = [];
foreach ($matCCQuickList as $matItem) {
$type = strtoupper($matItem['type']);
$matItemEncode = json_encode($matItem);
if ($type == "PUCE") {
$matsList['puce'][] = $matItemEncode;
}
elseif ($type == "PRESTATION") {
$matsList['prestation'][] = $matItemEncode;
}
elseif ($type != "PRESTATION" && $type != "PUCE") {
$matsList['materiel'][] = $matItemEncode;
}
}
return new JsonResponse(['no_toastr|ajaxmateriels|' . json_encode($matsList, true)]);
}
//Step-3
else if($post['ajax_type'] == 'params') {
$listProduitsParametrable = $referentielTypeParametrageRepo->getProduitsParametrableId();
$fromCc = 'quick-cc';
$post['societe'] = strtoupper($currentSosciety);
$post['paramValues'] = '';
$post['ajax_type'] = 'parametrage';
$params = $this->parametrageTrait($helpers, $translator, $post, null, $referentielTypeParametrageRepo, $passerelisteRepo, $referentielRepo, $constructeurIngenicoAxisRepo, $protocoleLiaisonCaisseRepo, $vitesseRepo, $logicielRepo, $memoParametreRepo, $passerelistesUtilisateurSocieteRepo, $utilisateurSocieteRepo, $pucesGprsRevendeurRepo, $timeZoneRepo, [], [], false, false, $listProduitsParametrable, $fromCc);
return $params;
}
else if($post['ajax_type'] == 'getConfirmInfos') {
$panierJsonParsed = json_decode($post['panier_json'], true);
$desiredValue = current(array_diff_key($panierJsonParsed, ['613_Neuf' => '']));
$panierItem = json_decode($desiredValue, true);
$codeArticle = '';
$tarifTotal = 0;
if(!empty($panierItem['ref_id'])) {
$ref = $referentielRepo->findOneByIdReferentiel($panierItem['ref_id']);
$codeArticle = $ref->getCodeArticle();
$tarifParCli = $helpers->getTarif($ref->getUtilisateurSocieteId()->getCodeClient(), $ref->getCodeArticle());
$tarifParCli = reset($tarifParCli);
$tarifItem = $tarifParCli;
$tarifTotal = $tarifParCli * $panierItem['qte'];
//Si on a AssociƩ frais de port
$post['booool'] = $ref->isFeeAssociate();
if($ref->isFeeAssociate()) {
$fee = $helpers->getTarif('CLI6377', 'PORT');
$tarifTotal += $fee['PORT'];
$post['fee'] = $fee['PORT'];
}
}
$post['tarifTotal'] = $tarifTotal;
$post['tarifItem'] = $tarifItem;
return new JsonResponse(['no_toastr||' . json_encode($post, true)]);
}
}
else if($request->isMethod('POST')) {
$facturation = [
'facturation_code_client' => $this->getUser()->getFkUtilisateurSociete()->getCodeClient(),
'facturation_societe_interne' => '',
'facturation_ref_interne' => '',
'facturation_societe' => !empty($request->get('expedition_form')['livraison_societe']) ? $request->get('expedition_form')['livraison_societe'] : $dataLivraison['livraison_societe'],
'facturation_adresse' => !empty($request->get('expedition_form')['livraison_adresse']) ? $request->get('expedition_form')['livraison_adresse'] : $dataLivraison['livraison_adresse'],
'facturation_code_postale' => !empty($request->get('expedition_form')['livraison_code_postal']) ? $request->get('expedition_form')['livraison_code_postal'] : $dataLivraison['livraison_code_postal'],
'facturation_ville' => !empty($request->get('expedition_form')['livraison_ville']) ? $request->get('expedition_form')['livraison_ville'] : $dataLivraison['livraison_ville'],
'facturation_telephone' => !empty($request->get('expedition_form')['livraison_telephone']) ? $request->get('expedition_form')['livraison_telephone'] : $dataLivraison['livraison_telephone'],
'facturation_contact' => !empty($request->get('expedition_form')['livraison_contact']) ? $request->get('expedition_form')['livraison_contact'] : $dataLivraison['livraison_contact'],
'facturation_mail' => !empty($request->get('expedition_form')['livraison_mail']) ? $request->get('expedition_form')['livraison_mail'] : $dataLivraison['livraison_mail'],
];
$request->request->set('facturation_form', $facturation);
$request->request->set('facturation_form_facturation_type_de_contrat', 4); // 'facturation_form_facturation_type_de_contrat' => '4' // Vente
$request->request->set('expedition_type', "1");
$request->request->set('transporteur', "0");
return $this->insertTrait($helpers, $translator, $request, $em, $filesystem, $commandeClientPieceJointRepo, $referentielTypeParametrageRepo, $commandeEnAttenteRepo, $informationsAdresseRepo, $typeContratRepo, $utilisateurSocieteRepo, $utilisateurSocieteImageRepo, $transporteurRepo,
$commandeClientTypeDateExpeditionRepo, $commandeClientEtatRepo, $commandeClientEquipeRepo, $commandeClientTypeCommandeRepo, $referentielRepo, $stockLibelleRepo,
$etatMaterielRepo, $utilisateursRepo, $validateurRepo, $CommandeClientListeStatutRepo, $commandeClientReferenceRepo, $expeditionRepo, $typeContratOptionRepo, null, $passerelisteRepo, $commandeClientRepo, $suiviColisRepo, $suiviColisColorRepository,
$timeZoneRepo, $transportComptesRepo, '$id_commande_attente',false, '$societeId', false, false, true);
}
$addMatCCQuickPopupContent = $this->render('cc_quick/includes/cc_quick_qty_popup.html.twig', [
'formCCQuick' => $formCCQuickView
])->getContent();
$livraisonFichiersEnAttente['livraison_fichiers'] = [];
$formExpedition = $this->createForm(ExpeditionFormType::class, [
'commandeClientEnAttenteData' => [],
'dataLivraison' => $dataLivraison
]);
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
'viewQuickCc' => $currentUser->getViewQuickCc(),
'formExpedition' => $formExpedition->createView(),
'formCCQuick' => $formCCQuickView,
'matsList' => [],
'addMatCCQuickPopupContent' => $addMatCCQuickPopupContent,
'livraisonFichiersEnAttente' => $livraisonFichiersEnAttente,
'logiciels' => $logicielRepo->recLesLogiciels('l.idLogiciel, l.nom')
]);
}
}