<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Articles\Article;
use App\Entity\Articles\Type;
use App\Entity\Etiquettes\Etiquette;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\Fabrication;
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\Library\Datatable\Util\Datatable;
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 FabricationSimplifieController extends AbstractController
{
/**
* @Route("/fabrication-simplifie/liste", name="dtc_fabrication_simplifie_liste")
*/
public function listerAction(Request $request, $fabricationParente = '', $fabricationMultiple = '', $prestation = '', $commandeFournisseur = '', EntityManagerInterface $em,
Datatable $datatable, TranslatorInterface $translator
) {
$this->datatable($request, $datatable, $translator);
$tableauClassColonne = [];
$tableauClassColonne = [];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [1], "visible" => true, "orderable" => false];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [2], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [3], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [4], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [5], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [6], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [7], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-center", "targets" => [8], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-left", "targets" => [9], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [10], "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');
//if($fabricable == 1) $fabricable = 0; else $fabricable = 1;
$repo_article = $em->getRepository(Article::class);
$repo_type_article = $em->getRepository(Type::class);
if ($fabricationParente != '' || $fabricationMultiple != '' || $prestation != '' || $commandeFournisseur != '') {
$template = 'GestionComerciale/FabricationSimplifie/lister-datatable.html.twig';
} else {
$template = 'GestionComerciale/FabricationSimplifie/lister.html.twig';
}
return $this->render($template, [
'tableauClassColonne' => $tableauClassColonne,
'fabricationParente' => $fabricationParente,
'fabricationMultiple' => $fabricationMultiple,
'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(),
]);
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/fabrication-simplifie/grid", name="dtc_fabrication_simplifie_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');
return $this->datatable(
$request,
$datatable,
$translator,
$fabricationParente,
$fabricationMultiple,
$prestationId,
$prestation,
$commandeFournisseur,
$ref_bloquante,
$fabricable,
$type
)->execute();
}
/**
* 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 = ''
) {
$get = $request->query->all();
//print_r($get);
$parameters = [];
$datatable->setEntity(Fabrication::class, "f")
->setFields(
[
$translator->trans("Actions") => 'f.id',
$translator->trans("Date de fabrication") => 'f.dateFabrication',
$translator->trans("Réf") => "f.reference",
$translator->trans("Réf article") => "a.reference",
$translator->trans("Libellé") => "a.libelle",
$translator->trans("Refs bloquantes") => "a.id",
$translator->trans("RàF") => "a.id",
$translator->trans("Qté fabricable") => "f.quantiteFabriquable",
$translator->trans("Statut") => 's.libelle',
$translator->trans("Atelier") => 'at.libelle',
"_identifier_" => 'f.id',
]
)
//->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.statutFabrication', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.article', 'a', \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)
->addJoin('f.atelier', 'at', \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_reception',
//'supprimer_route' => 'dtc_fabrication_supprimer',
'objet' => Fabrication::class,
'fabrication' => true,
'commandeFournisseur' => $commandeFournisseur,
'fabricationMultiple' => $fabricationMultiple,
],
],
1 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_simplifie_reception', 'nouvelOnglet' => false],
],
5 => [
'view' => 'FO/DataTable/refs_bloquantes.html.twig',
'params' => ['lien' => false],
],
6 => [
'view' => 'FO/DataTable/raf-of.html.twig',
],
/*
2 => array(
'view' => 'FOBundle:DataTable:date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
),
3 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array('edit_route'=>'dtc_fabrication_simplifie_reception'),
),
8 => array(
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => array('class'=>'text-center'),
),
9 => array(
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => array('class'=>'text-center'),
),
*/
]
)
->setSearch(true)
//->setSearchFields(array(3,4,5,7,8,9,10,11))
->setSearchFields([])
->setOrder('f.dateFabrication', 'ASC')
->setMultiple(
[
'reception-multiple' => [
'title' => 'Réception multiple',
'route' => 'dtc_fabrication_reception_multiple',
],
'ordre-prestation' => [
'title' => 'Créer un ordre de prestation',
'route' => 'dtc_fabrication_prestation_ajouter',
],
]
);
$where = 's.ordre IN (2,3)';
//$parametres['article']= 'test';
if (array_key_exists('atelier', $get) && $get["atelier"] != "") {
if ($get["atelier"] == "0") {
$where .= ' AND at.id is NULL';
} else {
$where .= ' AND at.id = :atelier';
$parameters['atelier'] = $get["atelier"];
}
} else {
$where .= ' AND at.id IS NULL';
}
if ($fabricable != '') {
$where .= ' AND f.fabriquable = 2';
}
if ($type != '') {
$where .= ' AND t.id = :type';
$parameters['type'] = $type;
}
if ($ref_bloquante != "") {
//print_r($param['article']);
$datatable->addJoin('f.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac.article', 'aca', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND aca.id = :ref_bloquante";
$parameters['ref_bloquante'] = $ref_bloquante;
}
if ($fabricationParente != '') {
$datatable->addJoin('f.fabricationParente', 'fp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where = 'fp.id = '.$fabricationParente;
}
if ($fabricationMultiple != '') {
//$datatable->addJoin('f.fabricationMultiple', 'fm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where = 'fm.id = '.$fabricationMultiple;
}
if ($commandeFournisseur != '') {
$datatable->addJoin('f.commandeFournisseur', 'cf', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$ordre = '';
$where = 's.ordre IN (1,2,3,4) AND cf.id = '.$commandeFournisseur;
}
if ($prestationId != '') {
$datatable->addJoin('f.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('ac.article', 'aca', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where = 's.ordre IN (1,2,3) AND aca.id = '.$prestationId;
}
if ($prestation != '') {
$where = 's.ordre IN (1,2,3) AND f.prestation = '.$prestation;
}
//print_r($where.' / '.$parameters['article']);
if ($where != '') {
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
/**
* @Route("/fabrication-simplifie/reception/{id}", name="dtc_fabrication_simplifie_reception")
*/
public function receptionnerAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, TranslatorInterface $translator, FabricationService $fabricationService)
{
$pid = getmypid();
$user = $this->getUser();
//$fabrication->setUtilisateur($user);
$errors = "";
$repo_utilisateur = $em->getRepository(Utilisateur::class);
$repo_commande = $em->getRepository(Commande::class);
$utilisateurs = $repo_utilisateur->findAll();
if ($request->isMethod('POST')) {
$post = $request->request->all();
$articles = [
'ids' => $request->request->get('ids'),
'commentaires' => $request->request->get('commentaires'),
'qtes' => $request->request->get('qtes'),
'qtesCmdes' => $request->request->get('qtesCmdes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'typesMvt' => $request->request->get('typesMvt'),
'emplacement' => $request->request->get('emplacement'),
];
$valeurs = [
"articles" => $articles,
'niveauUn' => $request->request->get('niveauUn'),
'niveauDeux' => $request->request->get('niveauDeux'),
'niveauTrois' => $request->request->get('niveauTrois'),
'niveauQuatre' => $request->request->get('niveauQuatre'),
];
$equipier = $repo_utilisateur->find($request->request->get('equipier'));
//Tester si la fabrication a été modifiée à la réception
// Si la fabrication a été modifiée on crée une nouvelle fabrication correspondant à cette réception et on modifie la réception existante
$newFabrication = false;
foreach ($fabrication->getArticleCommande() as $ac) {
$articleId = $ac->getArticle()->getId();
if ( ! in_array($articleId, $articles['ids'])) {
$newFabrication = true;
}
}
if ($newFabrication == true) {
//Création de la nouvelle fabrication
$valeurs['receptionnee'] = true;
$newFabrication = $fabricationService->modifierFabricationEtCreerNewFabrication($fabrication, $articles, $equipier);
$this->addFlash('notice', $translator->trans('Nouvel ordre de fabrication créé !'));
$url = $this->generateUrl('dtc_fabrication_modifier', ["id" => $newFabrication->getId(), 'tabs' => '#fabrications']);
//$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId(), 'tabs'=>'#fabrications'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$fabricationService->creerMvtStock($fabrication, $valeurs, '', $equipier);
//echo 'test';
//$this->addFlash('notice', 'Réception de la fabrication '.$fabrication->getReference().' réalisée avec succès !' );
$url = $this->generateUrl('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
if ($request->query->get('commandeFournisseur') != '') {
$url = $this->generateUrl('dtc_commande_fournisseur_modifier', ["id" => $request->query->get('commandeFournisseur'), 'tabs' => '#fabrications']);
} elseif ($request->query->get('fabricationMultiple') != '') {
$url = $this->generateUrl('dtc_fabrication_multiple_modifier', ["id" => $request->query->get('fabricationMultiple'), 'tabs' => '#fabrications']);
}
//$url = $this->generateUrl('dtc_fabrication_simplifie_liste',array());
$url = $this->generateUrl('dtcfo_interface_simplifie_validation', []);
$route = $this->generateUrl('dtc_fabrication_simplifie_liste', []);
$message = '<br/>Fabrication réceptionné avec succès ! <br/> Vous allez être automatiquement redirigé dans 5 secondes. <br/> <div style="text-align:center;margin-top:5px;"><a id="lien_suivant" href="'.$route.'">Ne pas attendre</a></div>';
$this->addFlash('notice', $translator->trans($message));
// TODO refactor commande
// $builder = new ProcessBuilder();
// $builder->setArguments(['php', '../app/console', 'articlesComposesModifierCondHa:maj']);
// $builder->getProcess()->start();
//exit;
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
}
$etiquettes = $repo_commande = $em->getRepository(Etiquette::class)->findAll();
$titre_modal = $translator->trans('Voulez-vous générer les mouvements de stock ?');
return $this->render(
'GestionComerciale/FabricationSimplifie/reception.html.twig',
['pid' => $pid, 'errors' => $errors, 'fabrication' => $fabrication, 'user' => $user, 'utilisateurs' => $utilisateurs, 'etiquettes' => $etiquettes]
);//'form' => $form->createView(),
//$rendu = $this->renderView('GestionComerciale/FabricationSimplifie/reception.html.twig', array('errors'=>$errors,'fabrication'=>$fabrication,'user'=>$user, 'utilisateurs'=>$utilisateurs, 'etiquettes'=>$etiquettes));//'form' => $form->createView(),
//return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
/**
* @Route("", name="")
*/
public function ____receptionnerEmplacementAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
//$emplacement = $objet;
$titre_modal = $translator->trans("Ou allez-vous déposer la marchandise fabriquée ?");
$get = $request->query->all();
$user = $this->getUser();
//$rendu = $this->renderView('Rangements/Rangement/ajouter.html.twig', array('fabrication' => $fabrication));
$rendu = $this->renderView('GestionComerciale/FabricationSimplifie/reception-emplacement.html.twig', ['fabrication' => $fabrication]);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
/**
* @Route("/fabrication-simplifie-emplacement/reception/{id}", name="dtc_fabrication_simplifie_reception_emplacement")
*/
public function receptionnerEmplacementAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, TranslatorInterface $translator)
{
$titre_modal = $translator->trans("Ou allez-vous déposer la marchandise fabriquée ?");
$get = $request->query->all();
$user = $this->getUser();
$codeBarre = trim($request->request->get('codeBarre'));
if ($request->isMethod('post')) {
if ( ! empty($request->request->get('codeBarre'))) {
$niveau = 1;
$emplacement = $em->getRepository(NiveauUn::class)->findOneBy(['codeBarres' => $codeBarre]);
if ( ! is_object($emplacement)) {
$emplacement = $em->getRepository(NiveauDeux::class)->findOneBy(['codeBarres' => $codeBarre]);
$niveau++;
}
if ( ! is_object($emplacement)) {
$emplacement = $em->getRepository(NiveauTrois::class)->findOneBy(['codeBarres' => $codeBarre]);
$niveau++;
}
if ( ! is_object($emplacement)) {
$emplacement = $em->getRepository(NiveauQuatre::class)->findOneBy(['codeBarres' => $codeBarre]);
$niveau++;
}
if (is_object($emplacement)) {
$donneesEmplacement = [
'niveauUn' => '',
'niveauDeux' => '',
'niveauTrois' => '',
'niveauQuatre' => '',
];
if ($niveau == 1) {
$donneesEmplacement['niveauUn'] = $emplacement->getId();
}
if ($niveau == 2) {
if (is_object($emplacement->getNiveauUn())) {
$donneesEmplacement['niveauUn'] = $emplacement->getNiveauUn()->getId();
}
$donneesEmplacement['niveauDeux'] = $emplacement->getId();
}
if ($niveau == 3) {
if (is_object($emplacement->getNiveauUn())) {
$donneesEmplacement['niveauUn'] = $emplacement->getNiveauUn()->getId();
}
if (is_object($emplacement->getNiveauDeux())) {
$donneesEmplacement['niveauDeux'] = $emplacement->getNiveauDeux()->getId();
}
$donneesEmplacement['niveauTrois'] = $emplacement->getId();
}
if ($niveau == 4) {
if (is_object($emplacement->getNiveauUn())) {
$donneesEmplacement['niveauUn'] = $emplacement->getNiveauUn()->getId();
}
if (is_object($emplacement->getNiveauDeux())) {
$donneesEmplacement['niveauDeux'] = $emplacement->getNiveauDeux()->getId();
}
if (is_object($emplacement->getNiveauTrois())) {
$donneesEmplacement['niveauTrois'] = $emplacement->getNiveauTrois()->getId();
}
$donneesEmplacement['niveauQuatre'] = $emplacement->getId();
}
return new JsonResponse(
[
'rendu' => '',
'valide' => '0',
'url' => '',
'titre' => '',
'type' => 'callBackEmplacementFabrication',
'emplacement' => $donneesEmplacement,
]
);
}
}
$this->addFlash('warning', 'Emplacement non reconnu ('.$request->request->get('codeBarre').').');
}
$rendu = $this->renderView('GestionComerciale/FabricationSimplifie/reception-emplacement.html.twig', ['fabrication' => $fabrication]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}