<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Articles\Article;
use App\Entity\Articles\Type;
use App\Entity\Etiquettes\Etiquette;
use App\Model\Rangements\StatutCaisse;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\Fabrication;
use App\Entity\GestionComerciale\FabricationMultiple;
use App\Entity\GestionComerciale\StatutFabrication;
use App\Entity\Rangements\Caisse;
use App\Entity\Rangements\NiveauDeux;
use App\Entity\Rangements\NiveauQuatre;
use App\Entity\Rangements\NiveauTrois;
use App\Entity\Rangements\NiveauUn;
use App\Entity\Utilisateur\Utilisateur;
use App\Form\Fabrication\SearchEtiquetteType;
use App\Library\Datatable\Util\Datatable;
use App\Repository\GestionComerciale\FabricationRepository;
use App\Service\GestionComerciale\CommandeService;
use App\Service\GestionComerciale\FabricationService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Validator\ViolationMapper\ViolationMapper;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class OfATrierController extends AbstractController
{
/**
* @Route("/fabrication-simplifie/of-trier/liste", name="dtc_fabrication_simplifie_of_trier_liste")
*/
public function listeAction(Request $request, $fabricationParente = '', $fabricationMultiple = '', $prestation = '', $commandeFournisseur = '', EntityManagerInterface $em,
Datatable $datatable, TranslatorInterface $translator, FabricationService $fabricationService
) {
$this->datatable($request, $datatable, $translator);
$tableauClassColonne = [];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [1], "visible" => true, "orderable" => false];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [4], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [9], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [10], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [12], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [14], "visible" => true, "orderable" => false];
$prestationId = $request->query->get('prestationId');
$ref_bloquante = $request->query->get('ref_bloquante');
$ref_bloquante_label = $request->query->get('ref_bloquante_label');
$fabricable = $request->query->get('fabricable');
$type = $request->query->get('type');
$fabricationMultiple = $request->query->get('fabricationMultiple');
$repo_article = $em->getRepository(Article::class);
$repo_type_article = $em->getRepository(Type::class);
$repo_fabrication_multiple = $em->getRepository(FabricationMultiple::class);
$template = 'GestionComerciale/OfATrier/lister.html.twig';
return $this->render($template, [
'tableauClassColonne' => $tableauClassColonne,
'fabricationParente' => $fabricationParente,
'fabricationMultiple' => $fabricationMultiple,
'fabricationMultipleEntity' => (is_numeric($fabricationMultiple)) ? $repo_fabrication_multiple->find($fabricationMultiple) : null,
'typePrestations' => $repo_article->findBy(['prestation' => 1], ['libelle' => 'ASC']),
'prestationId' => $prestationId,
'prestation' => $prestation,
'commandeFournisseur' => $commandeFournisseur,
'ref_bloquante' => $ref_bloquante,
'ref_bloquante_label' => $ref_bloquante_label,
'fabricable' => $fabricable,
'type' => $type,
'typesArticle' => $repo_type_article->findAll(),
]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Request $request, Datatable $datatable, TranslatorInterface $translator, $fabricationParente = '', $fabricationMultiple = '', $prestationId = '',
$prestation = '', $commandeFournisseur = '', $ref_bloquante = '', $fabricable = '',
$type = '', $typeFabrication = ''
) {
$get = $request->query->all();
//print_r($get);
$parameters = [];
$datatable->setEntity(Fabrication::class, "f")
->setFields(
[
$translator->trans("Actions") => 'f.id',
$translator->trans("ID") => 'f.id',
$translator->trans("Réf") => 'f.reference',
$translator->trans("Date") => 'f.dateFabrication',
$translator->trans("Commande") => 'c.reference',
$translator->trans("Client") => 'clt.nom',
$translator->trans("Libellé") => "a.libelle",
$translator->trans("Réf article") => "a.reference",
$translator->trans("Teinte") => "a.id",
$translator->trans("NBE") => "a.id",
$translator->trans("NBET") => "a.id",
$translator->trans("TRP") => "tr.libelle",
$translator->trans("COMM CLIENT") => "c.commentaire",
$translator->trans("FLAG") => "f.fabricationEtiquette",
$translator->trans("Statut") => 's.libelle',
$translator->trans("STL") => 'fi.id',
"_identifier_" => 'f.id',
]
)
->addJoin('f.statutFabrication', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.articleCommandeCommandeClient', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.transporteur', 'tr', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.client', 'clt', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('ac.fichier', 'fi', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.fabricationMultiple', 'fm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('a.type', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/actions-interface-simplifie.html.twig',
'params' => [
'afficher_icone_reception' => false,
//'edit_route' => 'dtc_fabrication_simplifie_fraisage_reception',
//'supprimer_route' => 'dtc_fabrication_supprimer',
'objet' => Fabrication::class,
'fabrication' => true,
'afficher_icone_anomalie_of' => true,
'table' => 'dta-of',
],
],
3 => [
'view' => 'FO/DataTable/date.html.twig',//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
9 => [
'view' => 'FO/DataTable/article_attribute.html.twig',
'params' => ['article_id' => 'a.id', 'attribute_libelle' =>'NBE'],
],
10 => [
'view' => 'FO/DataTable/article_attribute.html.twig',
'params' => ['article_id' => 'a.id', 'attribute_libelle' =>'NBET'],
],
15 => [
'view' => 'FO/DataTable/article_commande_file.html.twig',
],
]
)
->setSearch(true)
->setSearchFields([])
->setOrder('f.dateFabrication', 'ASC')
->setMultiple(
[
'fabriquer' => [
'title' => 'Creer une fabrication',
'route' => 'dtc_fabrication_fraisage_simplifie_liste',
],
]
);
$where = 's.id = 3 and ac.id is not null';
//$parametres['article']= 'test';
//$where .= ' AND f.typeFabrication = :typeFabrication';
//$parameters['typeFabrication'] = Fabrication::DEDUCTIVE;
if ($fabricationMultiple != '') {
//$datatable->addJoin('f.fabricationMultiple', 'fm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= ' AND fm.id = '.$fabricationMultiple;
}
if ($where != '') {
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
/**
* @Route("/fabrication-simplifie/of-trier/grid", name="dtc_fabrication_simplifie_of_trier_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$fabricationParente = $request->query->get('fabricationParente');
$fabricationMultiple = $request->query->get('fabricationMultiple');
$prestationId = $request->query->get('prestationId');
$prestation = $request->query->get('prestation');
$commandeFournisseur = $request->query->get('commandeFournisseur');
$ref_bloquante = $request->query->get('ref_bloquante');
$fabricable = $request->query->get('fabricable');
$type = $request->query->get('type');
$typeFabrication = $request->query->get('typeFabrication');
return $this->datatable(
$request,
$datatable,
$translator,
$fabricationParente,
$fabricationMultiple,
$prestationId,
$prestation,
$commandeFournisseur,
$ref_bloquante,
$fabricable,
$type,
$typeFabrication
)->execute();
}
/**
* @Route("/fabrication-simplifie/of-trier/scan", name="dtc_fabrication_simplifie_of_trier_scan")
*/
public function scanFlagElement(Request $request,EntityManagerInterface $em, CommandeService $commandeService) {
$titre_modal = "Affectation d'une boîte";
$repo_fabrication = $em->getRepository(Fabrication::class);
$repo_statut_fabrication = $em->getRepository(StatutFabrication::class);
$repo_caisse = $em->getRepository(Caisse::class);
$caisseObj = NULL;
$errors = [];
if ($request->isMethod('POST')) {
$post = $request->request->all();
$caisse_obj = $repo_caisse->findOneBy(array("ean"=>trim($post["caisse"])));
if(!is_object($caisse_obj)) {
$errors[]=array("message"=>"Boîte introuvable");
$flag = trim($post["flag"]);
$ofFlag = $repo_fabrication->searchFromEtiquette($flag,$statutFabrication=3);
}
else {
$ofObj = $repo_fabrication->find($post["OfId"]);
//Vérifier que la caisse est libre
$caisseLibre = $repo_fabrication->caisseEstLibre($caisse_obj,$ofObj);
if(!$caisseLibre) {
$errors[]=array("message"=>"La boîte ".$caisse_obj->getLibelle()." n'est pas libre.");
$flag = trim($post["flag"]);
$ofFlag = $repo_fabrication->searchFromEtiquette($flag,$statutFabrication=3);
}
else {
if(is_object($caisse_obj->getRaisonAnomalie())) {
$errors[]=array("message"=>"La boîte ".$caisse_obj->getLibelle()." n'est pas libre, elle est en anomalie.");
$flag = trim($post["flag"]);
$ofFlag = $repo_fabrication->searchFromEtiquette($flag,$statutFabrication=3);
}
else {
$url = "";
$statut_obj = $repo_statut_fabrication->find(11);
$ofObj->setStatutFabrication($statut_obj);
$ofObj->setCaisse($caisse_obj);
$caisse_obj->setStatutCaisse(StatutCaisse::OCCUPE);
$caisse_obj->setClient($ofObj->getArticleCommandeCommandeClient()->getCommande()->getClient());
$em->persist($ofObj);
$em->persist($caisse_obj);
$em->flush();
$donnees=[];
$donnees["message"]=" : BOITE ".$caisse_obj->getLibelle()." ".$ofObj->getReference()." ".$ofObj->getArticleCommandeCommandeClient()->getReference()." (id:".$ofObj->getArticleCommandeCommandeClient()->getId().")";
$commandeService->creerHistorique($ofObj->getArticleCommandeCommandeClient()->getCommande(), 'trie_element',$donnees);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => "dta-of"],
200,
['Content-Type' => 'application/json']);
}
}
}
}
else {
$flag = trim($request->query->get('flag'));
$ofFlag = $repo_fabrication->searchFromEtiquette($flag,$statutFabrication=3);
if(is_null($ofFlag)) {
$errors = "Impossible de trouver le flag : ".$flag;
$rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ["errors"=>$errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
else if(is_object($ofFlag->getArticleCommandeCommandeClient()) && ($ofFlag->getArticleCommandeCommandeClient()->isBloquer()))
{
$errors = "Cette ligne est bloquée.";
$rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ["errors"=>$errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
else if(is_object($ofFlag->getArticleCommandeCommandeClient()) && ($ofFlag->getArticleCommandeCommandeClient()->getCommande()->getABloquer()))
{
$errors = "Cette commande est bloquée.";
$rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ["errors"=>$errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
else {
$caisse_a_utiliser = $repo_fabrication->searchCaisseFabrication($ofFlag);
if(!is_null($caisse_a_utiliser)) {
$caisseObj = $repo_caisse->find($caisse_a_utiliser);
if(is_object($caisseObj->getRaisonAnomalie())) {
$caisseObj = NULL;
}
}
}
}
$rendu = $this->renderView('GestionComerciale/OfATrier/affectation-boite.html.twig', ["errors"=>$errors,"flag"=>$flag,"of"=>$ofFlag,"caisse"=>$caisseObj]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}