<?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\GestionComerciale\StatutFabrication;
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\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 FabricationSimplifieReceptionController extends AbstractController
{
/**
* @Route("/fabrication-simplifie/fraisage/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'),
];
// dd($articles, $valeurs);
$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_fraisage_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/additive.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("/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]);
}
/**
* @Route("/fabrication-simplifie/fraisage/liste/", name="dtc_fabrication_simplifie_fraisage_liste")
*/
public function listFabricationMultipleFraisage(Request $request, $fabricationParente = '', $fabricationMultiple = '', $prestation = '', $commandeFournisseur = '',
EntityManagerInterface $em,
Datatable $datatable, TranslatorInterface $translator
) {
$this->datatableOFM($request, $datatable, $translator, Fabrication::DEDUCTIVE);
$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" => [5], "visible" => true, "orderable" => true];
$tableauClassColonne[] = ["className" => "colonne_id text-left", "targets" => [6], "visible" => true, "orderable" => true];
// $tableauClassColonne[] = ["className" => "colonne_id", "targets" => [7], "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(),
]);
}
/**
* @Route("/fabrication-simplifie/fraisage/desassemblage/recherche/", name="dtc_fabrication_simplifie_fraisage_disassembled_recherche_etiquette")
*/
public function searchFromEtiquette(Request $request, FabricationRepository $fabricationRepository
) {
$fabricationType = $request->query->getInt('step', 1);
$form = $this->createForm(SearchEtiquetteType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$etiqueetteFabrication = $data['etiquette'];
$fabrication = $fabricationRepository->searchFromEtiquette($etiqueetteFabrication, ($fabricationType === 1) ? 5 : 1);
if ($fabrication === null) {
$this->addFlash('warning', 'Aucune fabrication avec cette etiquette');
return $this->redirectToRoute('dtc_fabrication_simplifie_disassembled_recherche_etiquette', ['step' => $fabricationType]);
} else {
if ($fabricationType === 1) {
return $this->render(
'GestionComerciale/FabricationSimplifie/desassemblage.html.twig',
[
'form' => $form->createView(),
'fabrication' => $fabrication,
]
);
} else {
return $this->redirectToRoute(
'dtc_fabrication_simplifie_reception',
[
'id' => $fabrication->getId(),
]
);
}
}
}
return $this->render('GestionComerciale/FabricationSimplifie/recherche_etiquette.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/fabrication-simplifie/fraisage/desassemblage/{id}", name="dtc_fabrication_simplifie_desassemblage_fraisage")
*/
public function setFabicrationDisassembled(Request $request, Fabrication $fabrication, EntityManagerInterface $entityManager, FabricationRepository $fabricationRepository)
{
$fabrication->setStatutFabrication($entityManager->getReference(StatutFabrication::class, 9));
$entityManager->flush();
$this->addFlash('success', 'Fabrication mis a jour avec succes');
if ($fabricationRepository->getNbFabricationAdditiveNotDisasembled($fabrication->getFabricationMultiple()->getId()) === 0) {
$this->addFlash('success', 'Toutes les fabrication additives sont désassemblées');
$fabrication->getFabricationMultiple()->setStatutFabricationMultiple($entityManager->getReference(StatutFabrication::class, 8));
$entityManager->flush();
return $this->redirectToRoute('dtcfo_homepage', ['ms' => 1]);
}
return $this->redirectToRoute('dtc_fabrication_simplifie_fraisage_liste', ['fabricationMultiple' => $fabrication->getFabricationMultiple()->getId()]);
}
}