<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Articles\Article;
use App\Entity\Articles\ArticleAfabriquer;
use App\Entity\Articles\ArticleComposant;
use App\Entity\Articles\Categorie;
use App\Entity\Articles\Marque;
use App\Entity\Articles\MouvementStock;
use App\Entity\Articles\Type;
use App\Entity\Etiquettes\Etiquette;
use App\Entity\FO\Atelier;
use App\Entity\FO\Societe;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\Fabrication;
use App\Entity\GestionComerciale\FabricationMultiple;
use App\Entity\GestionComerciale\StatutFabrication;
use App\Entity\Utilisateur\Utilisateur;
use App\Form\Articles\DefabriquerArticleType;
use App\Form\GestionComerciale\FabricationMultipleType;
use App\Form\GestionComerciale\FabricationType;
use App\Form\GestionComerciale\SupprimerFabricationMultipleType;
use App\Form\GestionComerciale\SupprimerFabricationType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Articles\ArticleService;
use App\Service\GestionComerciale\FabricationService;
use App\Service\GestionComerciale\NumerotationDocumentService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use DTS\eBaySDK\FileTransfer\Types\Data;
use Knp\Snappy\Pdf;
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\Process\Process;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class FabricationController extends AbstractController
{
/**
* @Route("/carnet-fabrication", name="dtc_carnet_fabrication_liste")
*/
public function carnetFabricationAction(Request $request, EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau, TranslatorInterface $translator,
Datatable $datatable
) {
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
// TODO Change this
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "logo"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "qteAfabriquer"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "stock"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "miniFab"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Mini fab'>Mini fab</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "miniFab"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Quantité mini'>Q mini</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [10],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMiniCommandeFournisseur"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Quantité maxi'>Q maxi</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [11],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMaxiCommandeFournisseur"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à livrer client'>Ràl C</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [12],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralC"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à livrer fournisseur'>Ràl F</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [13],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralF"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à fabriquer'>RàF</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [14],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "raf"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [15],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "marque"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [16],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "pump"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [17],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "cump"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [18],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "descCourte"),
];
//$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(13),"visible"=>true);
$categorie_enfants = [];
$categorie_enfants_enfants = [];
$repo_categorie_article = $em->getRepository(Categorie::class);
$categorie_article_racine = $repo_categorie_article->findBy(["categorieParent" => 1]);
$repo_marque_article = $em->getRepository(Marque::class);
$marque_article = $repo_marque_article->findBy([], ['libelle' => 'ASC']);
$repo_type_article = $em->getRepository(Type::class);
$type_article = $repo_type_article->findBy([], ['libelle' => 'ASC']);
$param = $request->query->all();
if (array_key_exists('categorie_article', $param) and $param["categorie_article"] > 0) {
$parent = $repo_categorie_article->find($param["categorie_article"]);
if (is_object($parent)) {
$categorie_enfants = $repo_categorie_article->findBy(["categorieParent" => $parent]);
}
}
if (array_key_exists('sous_categorie_article', $param) and $param["sous_categorie_article"] > 0) {
$parent2 = $repo_categorie_article->find($param["sous_categorie_article"]);
if (is_object($parent2)) {
$categorie_enfants_enfants = $repo_categorie_article->findBy(["categorieParent" => $parent]);
}
}
$this->datatableCarnetFabrication($request, $datatable, $translator);
return $this->render('GestionComerciale/Fabrication/carnet-fabrication.html.twig', [
'tableauClassColonne' => $tableau_class_cellule,
'parametres' => $param,
"categorie_article" => $categorie_article_racine,
"sous_categorie_article" => $categorie_enfants,
"sous_sous_categorie_article" => $categorie_enfants_enfants,
"marque" => $marque_article,
"type" => $type_article,
]);
}
/**
* @Route("", name="")
*/
public function carnetFabrication2Action(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$repoArticle = $em->getRepository(Article::class);
$articles = $repoArticle->getArticlesInternesAFabriquer();
$fabrication = new Fabrication();
$user = $this->getUser();
$fabrication->setUtilisateur($user);
$statut = $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
$fabrication->setStatutFabrication($statut);
$quantite = 1;
$fabrication->setQuantite($quantite);
$form = $this->createForm(FabricationType::class, $fabrication);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$articles = [
'articles' => $request->request->get('articles'),
'ids' => $request->request->get('ids'),
'qtes' => $request->request->get('qtes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'parents' => $request->request->get('parents'),
];
for ($i = 0; $i < count($articles['ids']); $i++) {
if ($articles['parents'][$i] == 'niveau1') {
$article = $repoArticle->find($articles['articles'][$i]);
if (is_object($article)) {
$articleCommande = new ArticleCommande();
$articleCommande->setArticle($article);
$articleCommande->setLibelle($article->getLibelle());
$articleCommande->setQuantite($articles['qtes'][$i]);
$articleCommande->setRal($articles['qtes'][$i]);
$articleCommande->setFabrication($fabrication);
$em->persist($articleCommande);
//$em->flush();
$this->enregistrerArticlesCommandeSousNiveau($articles, $articles['ids'][$i], $articleCommande, $em);
}
}
}
$em->persist($fabrication);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrication ajoutée avec succès !')
);
//\Doctrine\Common\Util\Debug::dump($idsArticle);
//return $this->redirectToRoute('dtc_carnet_fabrication_liste');
return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
}
}
return $this->render('GestionComerciale/Fabrication/carnet-fabrication2.html.twig', [
'articles' => $articles,
'form' => $form->createView(),
'quantite' => $quantite,
]);
}
/**
* @Route("/fabrication/nouvelle/", name="dtc_fabrication_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, FabricationService $fabricationService, TranslatorInterface $translator, ValidatorInterface $validator)
{
$repoArticle = $em->getRepository(Article::class);
//$articles = $repoArticle->getArticlesInternesAFabriquer();
$fabrication = new Fabrication();
$user = $this->getUser();
$fabrication->setUtilisateur($user);
$quantite = 1;
$id = $request->query->get('id');
if ($id != '') {
$article = $repoArticle->find($id);
if (is_object($article)) {
$fabrication->setArticle($article);
$quantite = $repoArticle->getQuantiteAFabriquer($article);
}
}
$fabrication->setQuantite($quantite);
$statut = $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
$fabrication->setStatutFabrication($statut);
$form = $this->createForm(FabricationType::class, $fabrication);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$articles = [
'articles' => $request->request->get('articles'),
'ids' => $request->request->get('ids'),
'qtes' => $request->request->get('qtes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'parents' => $request->request->get('parents'),
'test' => $request->query->get('ids'),
'modifies' => $request->request->get('modifies'),
'articlesComposant' => $request->request->get('articlesComposant'),
];
/*foreach ($articles['ids'] as $key => $id){
if ($request->request->get('g_'.$id) != '')
$articles['fabrications'][$key] = $request->request->get('g_'.$id);
}*/
$valeurs = ['articles' => $articles, 'valider' => $request->request->get('valider')];
//\Doctrine\Common\Util\Debug::dump($valeurs);
$fabricationService->sauvegarder($fabrication, $valeurs);
$em->persist($fabrication);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrication ajoutée avec succès !')
);
//\Doctrine\Common\Util\Debug::dump($idsArticle);
//return $this->redirectToRoute('dtc_carnet_fabrication_liste');
return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
}
}
return $this->render('GestionComerciale/Fabrication/modifier.html.twig', [
'form' => $form->createView(),
'fabrication' => $fabrication,
'errors' => $errors,
'id' => $id,
]);
}
private function enregistrerArticlesCommandeSousNiveau($articles, $parentId, $articleCommandeParent, EntityManagerInterface $em)
{
$repoArticle = $em->getRepository(Article::class);
for ($i = 0; $i < count($articles['ids']); $i++) {
//\Doctrine\Common\Util\Debug::dump($articles);
if ($articles['parents'][$i] == $parentId) {
$article = $repoArticle->find($articles['articles'][$i]);
if (is_object($article)) {
$articleCommande = new ArticleCommande();
$articleCommande->setArticle($article);
$articleCommande->setLibelle($article->getLibelle());
$articleCommande->setQuantite($articles['qtes'][$i]);
$articleCommande->setRal($articles['qtes'][$i]);
$articleCommande->setArticleCommande($articleCommandeParent);
//$articleCommande->setFabrication($fabrication);
$em->persist($articleCommande);
//$em->flush();
$this->enregistrerArticlesCommandeSousNiveau($articles, $articles['ids'][$i], $articleCommande, $em);
}
}
}
}
/**
* @Route("/fabrication/modifier/{id}", name="dtc_fabrication_modifier")
*/
public function modifierAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, FabricationService $fabricationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
$fabrication->setUtilisateur($user);
$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
$composants = $fabricationService->getArticlesCommande($fabrication);
$form = $this->createForm(FabricationType::class, $fabrication);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Fabrication::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
}
if ($form->isValid()) {
if ($request->request->get('annuler') != '') {
$fabricationService->annulerFabrication($fabrication);
$this->addFlash(
'notice',
$translator->trans('Fabrication annulée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_liste', []);
}
$articles = [
'articles' => $request->request->get('articles'),
'ids' => $request->request->get('ids'),
'idsTmp' => $request->request->get('idsTmp'),
'qtes' => $request->request->get('qtes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'parents' => $request->request->get('parents'),
'test' => $request->query->get('ids'),
'modifies' => $request->request->get('modifies'),
'articlesComposant' => $request->request->get('articlesComposant'),
];
/*
foreach ($articles['ids'] as $key => $id){
if ($request->request->get('g_'.$id) != '')
$articles['fabrications'][$key] = $request->request->get('g_'.$id);
}
*
*/
// mail('hugo@noogaa.com','test',var_dump($articles));
$valider = $request->request->get('valider');
$valeurs = ['articles' => $articles, 'valider' => $valider];
//\Doctrine\Common\Util\Debug::dump($valeurs);
$fabricationService->sauvegarder($fabrication, $valeurs);
$this->addFlash(
'notice',
$translator->trans('Fabrication sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
} else {
$errors = $validator->validate($fabrication);
}
}
//\Doctrine\Common\Util\Debug::dump($composants);
return $this->render('GestionComerciale/Fabrication/modifier.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'fabrication' => $fabrication,
//'articles'=>$articles
'composants' => $composants,
'quantiteFabricable' => $quantiteFabricable,
//'articles' => $articles,
]);
}
private function enregisterSousArticleCommande($articleCommandessFab, $articleCommande, EntityManagerInterface $em)
{
if (count($articleCommande->getArticlesCommande) > 0) {
foreach ($articleCommande->getArticlesCommande as $ssarticleCommande) {
$ssarticleCommandessFab = new ArticleCommande;
$ssarticleCommandessFab->setArticle($ssarticleCommande->getArticle());
$quantitessAC = $quantiteAC * $ssarticleCommande->getQuantite();
$ssarticleCommandessFab->setQuantite($quantiteAC);
$ssarticleCommandessFab->setArticleCommande($articleCommandessFab);
$em->persist($ssarticleCommandessFab);
}
}
}
private function creerSousFabrication($articleCommande, $quantite, EntityManagerInterface $em, NumerotationDocumentService $numerotationService)
{
$article = $articleCommande->getArticle();
$fabrication = new Fabrication;
$fabrication->setArticle($article);
$fabrication->setQuantite($articleCommande->getQuantite());
$em->persist($fabrication);
foreach ($articleCommande->getArticlesCommande() as $ssArticleCommande) {
//si compose creer une fabrication
$ssQuantite = $ssArticleCommande->getQuantite();
//$composantArticle = $composant->getArticle();
if (count($ssArticleCommande->getArticle()->getArticlesComposants()) > 0) {
$this->creerSousFabrication($ssArticleCommande, $ssQuantite, $em);
}
$articleCommandessFab = new ArticleCommande();
$articleCommandessFab->setLibelle($ssArticleCommande->getArticle()->getLibelle());
$articleCommandessFab->setArticle($ssArticleCommande->getArticle());
//$quantiteAC = $quantite * $composant->getQuantite();
$articleCommandessFab->setQuantite($ssQuantite);
$articleCommandessFab->setFabrication($fabrication);
$em->persist($articleCommandessFab);
//ajouter les sous composants de la fabrication dans la sous fabrication
//$this->enregisterSousArticleCommande($articleCommandessFab, $articleCommande);
}
//$fabrication->setReference('[BROUILLON]'.$numerotationService->generer($fabrication));
$fabrication->setReference($numerotationService->generer($fabrication));
if ($articleCommande->getGenererFabriquer() == 1) {
$repoStatutFabrication = $em->getRepository(StatutFabrication::class);
$statutFabrication = $repoStatutFabrication->findOneBy(["ordre" => "2"]);
$fabrication->setStatutFabrication($statutFabrication);
$fabrication->setReference($numerotationService->generer($fabrication));
$reserve = floatval($articleCommande->getQuantite()) + floatval($article->getStockReserve());
if (floatval($articleCommande->getQuantite()) > 0) {
$article->setStockReserve($reserve);
}
$em->persist($article);
}
$em->persist($fabrication);
$em->flush();
}
/**
* @Route("/fabrication-multiple/supprimer/{id}", name="dtc_fabrication_multiple_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(Fabrication::class);
for ($i = 0; $i < count($ids); $i++) {
$v = $repo->find($ids[$i]);
if (is_object($v)) {
$em->remove($v);
}
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrications supprimées avec succès !')
);
$url = $this->generateUrl('dtc_fabrication_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/fabrication/supprimer/{id}", name="dtc_fabrication_supprimer")
*/
public function supprimerAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, FabricationService $fabricationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerFabricationType::class, $fabrication);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$fabricationService->annulerFabrication($fabrication);
$em->remove($fabrication);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrication supprimée avec succès !')
);
$url = $this->generateUrl('dtc_fabrication_liste', []);//dtc_commande_fournisseur_liste
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($fabrication);
$rendu = $this->renderView(
'FO/Supprimer/supprimer.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $fabrication->getId(), 'type' => '']
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $fabrication->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/fabrication/liste", name="dtc_fabrication_liste")
*/
public function listerAction(Request $request, $fabricationParente = '', $fabricationMultiple = '', $prestation = '', $commandeFournisseur = '',
EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau, TranslatorInterface $translator, Datatable $datatable
) {
$this->datatable('', '', '', '', '', '', '', '', $datatable, $translator);
$tableauClassColonne = [];
$tableauClassColonne[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "date"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "dateFabrication"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referenceMultiple"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referenceArticle"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referencesBloquantes"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "quantite"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [10],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "quantiteFabricable"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [11],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "statut"),
];
//$tableauClassColonne[]=array("className"=>"visible_export colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"prestation"));
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [12],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [13],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "atelier"),
];
$tableauClassColonne[] = ["orderable" => false, "className" => "colonne_id", "targets" => [14], "visible" => true];
$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/Fabrication/lister-datatable.html.twig';
} else {
$template = 'GestionComerciale/Fabrication/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/grid", name="dtc_fabrication_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(
$fabricationParente,
$fabricationMultiple,
$prestationId,
$prestation,
$commandeFournisseur,
$ref_bloquante,
$fabricable,
$type,
$datatable,
$translator
)->execute();
}
/**
* @Route("/carnet-fabrication/grid", name="dtc_carnet_fabrication_liste_grid")
*/
public function carnetFabricationGridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableCarnetFabrication($request, $datatable, $translator)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable($fabricationParente = '', $fabricationMultiple = '', $prestationId = '', $prestation = '', $commandeFournisseur = '', $ref_bloquante = '', $fabricable = '',
$type = '', Datatable $datatable, TranslatorInterface $translator
) {
$parameters = [];
$datatable->setEntity(Fabrication::class, "f")
->setFields(
[
$translator->trans("ID") => 'f.id',
$translator->trans("Date") => 'f.date',
$translator->trans("Date de fabrication") => 'f.dateFabrication',
$translator->trans("Réf") => "f.reference",
//$translator->trans("Réf Multiple") => "fm.reference",
$translator->trans("Réf Multiple") => "fm.reference",
$translator->trans("Réf article") => "a.reference",
$translator->trans("Refs bloquantes") => "a.id",
$translator->trans("Libellé") => "a.libelle",
$translator->trans("Qté") => "f.quantite",
//$translator->trans("Quantité fabricable") => "a.id",
$translator->trans("Qté fabriquable") => "f.quantiteFabriquable",
$translator->trans("Date de fabrication") => 'f.dateFabrication',
$translator->trans("Statut") => 's.libelle',
//$translator->trans("Prestation") => 'a.id',
$translator->trans("Type d'article") => 't.libelle',
$translator->trans("Atelier") => 'at.libelle',
$translator->trans("Actions") => 'f.id',
"_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('a.atelier', 'at', \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/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_modifier'],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_modifier'],
],
4 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier', 'typeDocument' => 'OrdreFM'],
],
5 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_article_modifier', 'typeDocument' => 'article', 'target' => '_blank'],
],
6 => [
'view' => 'FO/DataTable/refs_bloquantes.html.twig',
],
7 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_article_modifier', 'typeDocument' => 'article'],
],
8 => [
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => ['class' => 'text-center'],
],
9 => [
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => ['class' => 'text-center'],
],
1 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
2 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
/*
11 => array(
'view' => 'FO/DataTable/prestation.html.twig'
),
*/
13 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_fabrication_modifier',
//'supprimer_route' => 'dtc_fabrication_supprimer',
'objet' => 'DTCGestionComercialeBundle:Fabrication',
'fabrication' => true,
'commandeFournisseur' => $commandeFournisseur,
'fabricationMultiple' => $fabricationMultiple,
],
],
]
)
->setSearch(true)
->setSearchFields([3, 4, 5, 7, 8, 9, 10, 11])
->setOrder('s.ordre', 'DESC')
->setMultiple(
[
/*
'reception-multiple' => array(
'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 (1,2,3,6,7,8,9)';
//$parametres['article']= 'test';
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;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableCarnetFabrication(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$param = $request->query->all();
$parametres = [];
$where = "";
if ( ! array_key_exists('parametres', $param)) {
$param["parametres"] = $param;
}
$datatable->setEntity(Article::class, "p")
->setFields(
[
$translator->trans("ID") => 'p.id',
$translator->trans("Img") => 'p.reference',
$translator->trans("Réf") => 'p.reference',
$translator->trans("Libelle") => 'p.libelle',
$translator->trans("Qte à Fab") => "p.id",
$translator->trans("Type") => 't.libelle',
$translator->trans("Stock") => 'p.stock',
$translator->trans("Dispo") => 'p.id',
$translator->trans("Minifab") => 'p.id',
$translator->trans("Qmini") => 'p.seuilMiniCommandeFournisseur',
$translator->trans("Qmaxi") => 'p.seuilMaxiCommandeFournisseur',
$translator->trans("Ràl C") => 'p.id',
$translator->trans("Ràl F") => 'p.ralFournisseur',
'Ràf' => 'p.id',
$translator->trans("Marque") => 'm.libelle',
$translator->trans("Pump") => 'p.pump',
$translator->trans("Cump") => 'p.cpump',
$translator->trans("Desc courte") => 'p.descriptionCourte',
//$translator->trans("Prix HT") => 'p.prixVente',
//$translator->trans("Actions") => 'p.id',
"_identifier_" => 'p.id',
]
)
//->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('p.fournisseurDefaut', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('p.articlesComposants', 'acmp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('p.type', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('p.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/image.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_article_modifier'],
],
/*3 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCArticlesBundle:Article',
'champ' => 'setLibelle',
),
),*/
/*
7 => array(
'view' => 'FO/DataTable/prixSuivi.html.twig',
'params' => array(
'surveillance' => false,
)
),
*
*/
4 => [
'view' => 'FO/DataTable/qteAfabriquer.html.twig',
],
7 => [
'view' => 'FO/DataTable/article_dispo.html.twig',
],
8 => [
'view' => 'FO/DataTable/mini_fab.html.twig',
],
11 => [
'view' => 'FO/DataTable/article_ral.html.twig',
],
13 => [
'view' => 'FO/DataTable/article_raf.html.twig',
],
15 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'afficher_total' => false,
],
],
16 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'afficher_total' => false,
],
],
/*
12=> array(
'view' => 'FO/DataTable/button.html.twig',
'params' => array(
'edit_route' => 'dtc_fabrication_ajouter',
//'dupliquer_route' => 'dtc_article_dupliquer',
'objet' => 'DTCGestionComercialeBundle:Fabrication',
'name' => '<b>FABRIQUER</b>'
),
),
*/
]
)
->setGroupBy('p.id')
->setMultiple(
[
'fabrication-multiple' => [
'title' => 'fabrication multiple',
'route' => 'dtc_fabrication_multiple_ajouter_depuis_suggestion',
],
]
)
->setSearch(true)
->setSearchFields([2, 3, 5, 14]);
//$where = '(p.stock-COALESCE(p.stockReserve,0)+COALESCE(p.ralFournisseur,0)) < p.seuilMiniCommandeFournisseur AND (p.produitInterne = 1 OR p.virtuel = 1) AND acmp.id is not null';
$where = 'p.aFabriquer = 1 AND p.nomenclatureValidee = 1';
if (array_key_exists('categorie_article', $param['parametres']) and $param['parametres']['categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat.id = ".$param['parametres']['categorie_article'];
//$qb->join('x.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$qb->join('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$where .= " AND cat.id = :categorie";
//$parametres['categorie']=$param['parametres']['categorie_article'];
if (array_key_exists('sous_categorie_article', $param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat2.id = ".$param['parametres']['sous_categorie_article'];
/*
$qb->join('x.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$qb->join('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat2.id = :categorie2";
$parametres['categorie2']=$param['parametres']['sous_categorie_article'];
*/
}
if (array_key_exists('sous_sous_categorie_article', $param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac3.categorie', 'cat3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
}
}
if (array_key_exists('marque', $param['parametres']) and $param['parametres']['marque'] != "") {
$where .= " AND m.id = ".$param['parametres']['marque'];;
}
if (array_key_exists('type', $param['parametres']) and $param['parametres']['type'] != "") {
$where .= " AND t.id = ".$param['parametres']['type'];
}
//echo "TEST ".$where;
$datatable->setWhere($where);
$datatable->setOrder('p.reference', 'ASC');
//$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
return $datatable;
}
/**
* @Route("/fabrication/article/{id}/refs-equivalentes/ajax", name="dtc_fabrication_ajax_refs_equivalentes")
*/
public function ajaxRefsEquivalentesFabricationAction(Request $request, Article $article
) {
$refs = $article->getRefsEquivalentes();
/*
$articleAExclure = $request->query->get('articleAExclure');
foreach ($refs as $key => $ref){
foreach($ref->getArticlesComposants() as $composant){
if ($this->verifierRefsEquivalentesNeContientPasArticle($composant, $article->getId()) == 'true')
unset($refs[$key]);
}
}
*
*/
$retour = $this->renderView('GestionComerciale/Fabrication/refs-equivalentes.html.twig', [
'refs' => $refs,
'quantite' => $request->query->get('quantite'),
]);
$response = new JsonResponse();
$response->setData([
'retour' => $retour,
]);
return $response;
}
/**
* @Route("/fabrication/article/{id}/refs-equivalentes-reception/ajax", name="dtc_fabrication_ajax_refs_equivalentes_reception")
*/
public function ajaxRefsEquivalentesFabricationReceptionAction(Request $request, Article $article
) {
$refs = $article->getRefsEquivalentes();
$retour = $this->renderView('GestionComerciale/Fabrication/refs-equivalentes-reception.html.twig', [
'refs' => $refs,
'quantite' => $request->query->get('quantite'),
]);
$response = new JsonResponse();
$response->setData([
'retour' => $retour,
]);
return $response;
}
private function verifierRefsEquivalentesNeContientPasArticle(ArticleComposant $composant, $article, $retour = '')
{
if ($composant->getArticle()->getId() == $article) {
//return true;
$retour = 'true';
} else {
//$retour .= 'art'.$composant->getArticle()->getId().'/';
$composants = $composant->getArticle()->getArticlesComposants();
foreach ($composants as $compo) {
$retour = $this->verifierRefsEquivalentesNeContientPasArticle($compo, $article, $retour);
}
}
//return false;
return $retour;
}
/**
* @Route("/fabrication/article/{id}/refs-equivalentes/ajax/remplacement", name="dtc_fabrication_ajax_refs_equivalentes_remplacement")
*/
public function ajaxRefsEquivalentesFabricationRemplacementAction(Request $request, Article $article)
{
//$composants = $article->getArticlesComposants();
$retour = $this->renderView('GestionComerciale/ArticleCommande/lister-avec-arbo.html.twig', [
'composants' => $article,
'quantite' => $request->query->get('quantite'),
]);
$response = new JsonResponse();
$response->setData([
'retour' => $retour,
]);
return $response;
}
/**
* @Route("/fabrication/article/{id}/refs-equivalentes-reception-toggle/ajax", name="dtc_fabrication_ajax_refs_equivalentes_reception_toggle")
*/
public function ajaxRefsEquivalentesFabricationReceptionToggleAction(Request $request, Article $article)
{
//echo "GGG";
//$composants = $article->getArticlesComposants();
$retour = $this->renderView('GestionComerciale/Fabrication/reception-toggle-equivalence.html.twig', [
'article' => $article,
'quantite' => $request->query->get('quantite'),
'quantiteCommandee' => $request->query->get('quantiteCommandee'),
'index' => $request->query->get('index'),
'multiple' => $request->query->get('multiple'),
'ral' => $request->query->get('ral'),
]);
$response = new JsonResponse();
$response->setData([
'retour' => $retour,
]);
return $response;
}
/**
* @Route("/fabrication/reception/{id}", name="dtc_fabrication_reception")
*/
public function receptionnerAction(Request $request, Fabrication $fabrication, EntityManagerInterface $em, FabricationService $fabricationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$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')) {
$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];
$equipier = $repo_utilisateur->find($request->request->get('equipier'));
//echo $equipier->getId();
//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éé !')
);
echo "<div>FIN</div>";
//exit;
$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',
$translator->trans('Mouvements de stock créés 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']);
}
$process = new Process(['php', 'bin/console', 'articlesComposesModifierCondHa:maj']);
$process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
$process->setOptions(['create_new_console' => true]);
$process->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?');
$rendu = $this->renderView(
'GestionComerciale/Fabrication/reception.html.twig',
['errors' => $errors, 'fabrication' => $fabrication, 'user' => $user, 'utilisateurs' => $utilisateurs, 'etiquettes' => $etiquettes]
);//'form' => $form->createView(),
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('GestionComerciale/CommandeFournisseur/reception.html.twig', array('form' => $form->createView(),'errors'=>$errors,'commande'=>$commande));
}
/**
* @Route("/fabrication-multiple/reception/{id}", name="dtc_fabrication_multiple_reception")
*/
public function receptionnerMultipleAction(Request $request, FabricationMultiple $fabricationMultiple, EntityManagerInterface $em,
TranslatorInterface $translator, FabricationService $fabricationService
) {
$user = $this->getUser();
//$fabrication->setUtilisateur($user);
$errors = "";
$repo_utilisateur = $em->getRepository(Utilisateur::class);
$repo_commande = $em->getRepository(Commande::class);
$repo_fabrication = $em->getRepository(Fabrication::class);
$utilisateurs = $repo_utilisateur->findAll();
if ($request->isMethod('POST')) {
$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'),
'fabrications' => $request->request->get('fabrications'),
];
//$valeurs = array("articles"=>$articles);
$equipier = $repo_utilisateur->find($request->request->get('equipier'));
//var_dump($articles);
//die;
//echo $equipier->getId();
//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éé !')
);
//echo "<div>FIN</div>";
//exit;
$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$newFabrication->getId(), 'tabs'=>'#fabrications'));
//$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId(), 'tabs'=>'#fabrications'));
return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
} else {
$fabricationService->creerMvtStock($fabrication, $valeurs, '', $equipier);
//echo 'test';
$this->addFlash(
'notice',
$translator->trans('Mouvements de stock créés avec succès !')
);
$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId()));
if($request->query->get('commandeFournisseur') != '') {
$url = $this->generateUrl('dtc_commande_fournisseur_modifier',array("id"=>$request->query->get('commandeFournisseur'), 'tabs'=>'#fabrications'));
}
else if($request->query->get('fabricationMultiple') != '') {
$url = $this->generateUrl('dtc_fabrication_multiple_modifier',array("id"=>$request->query->get('fabricationMultiple'), 'tabs'=>'#fabrications'));
}
return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
}
*
*/
//Separer les donnees par fabrication.
foreach ($articles['fabrications'] as $key => $fabricationId) {
foreach ($articles as $k => $value) {
if ($k != 'emplacement') {
$articlesByFabrication[$fabricationId][$k][] = $articles[$k][$key];
}
}
if (count($articles['emplacement']) > 0) {
foreach ($articles['emplacement'] as $emplId => $empl) {
foreach ($empl as $ke => $value) {
if ($ke == $key) {
$articlesByFabrication[$fabricationId]['emplacement'][$emplId][] = $value;
}
}
}
}
}
//var_dump($articlesByFabrication);
//die;
foreach ($articlesByFabrication as $key => $donnees) {
$fabrication = $repo_fabrication->find($key);
if (is_object($fabrication)) {
$valeurs = ["articles" => $donnees];
$fabricationService->creerMvtStock($fabrication, $valeurs, '', $equipier);
}
}
$this->addFlash(
'notice',
$translator->trans('Mouvements de stock créés avec succès !')
);
$url = $this->generateUrl('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId(), 'tabs' => '#fabrications']);
$process = new Process(['php', 'bin/console', 'articlesComposesModifierCondHa:maj']);
$process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
$process->setOptions(['create_new_console' => true]);
$process->start();
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?');
$rendu = $this->renderView(
'GestionComerciale/FabricationMultiple/reception.html.twig',
[
'errors' => $errors,
'fabricationMultiple' => $fabricationMultiple,
'user' => $user,
'utilisateurs' => $utilisateurs,
'etiquettes' => $etiquettes,
]
);//'form' => $form->createView(),
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('GestionComerciale/CommandeFournisseur/reception.html.twig', array('form' => $form->createView(),'errors'=>$errors,'commande'=>$commande));
}
/**
* @Route("/fabrication-multiple/etiquette/{id}", name="dtc_fabrication_multiple_etiquette")
*/
public function etiquetteMultipleAction(Request $request, FabricationMultiple $fabricationMultiple, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
//$fabrication->setUtilisateur($user);
$errors = "";
$repo_utilisateur = $em->getRepository(Utilisateur::class);
$repo_commande = $em->getRepository(Commande::class);
$repo_fabrication = $em->getRepository(Fabrication::class);
$utilisateurs = $repo_utilisateur->findAll();
$etiquettes = $repo_commande = $em->getRepository(Etiquette::class)->findAll();
$titre_modal = $translator->trans('Voulez-vous générer les mouvements de stock?');
$rendu = $this->renderView(
'GestionComerciale/FabricationMultiple/etiquette.html.twig',
[
'errors' => $errors,
'fabricationMultiple' => $fabricationMultiple,
'user' => $user,
'utilisateurs' => $utilisateurs,
'etiquettes' => $etiquettes,
]
);//'form' => $form->createView(),
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/of/pdf/{id}", name="dtc_fabrication_pdf")
*/
public function pdfFabricationAction(Request $request, Fabrication $fabrication, $retour = true, EntityManagerInterface $em, Pdf $snappy)
{
$societe = $em->getRepository(Societe::class)->find(1);
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
$chemin_pdf = 'PDF/OF/'.$date.'/OF-'.$fabrication->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/OrdreRep/template_pdf.html.twig',array('commande' => $ordreRepration,'societe' => $societe));
$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
$header = $this->renderView('FO/PDF/header_of_pdf.html.twig', ['societe' => $societe, 'fabrication' => $fabrication]);
//return $header;
//$snappy->setOption('page-size', 'A4');
$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
//$snappy->setOption('header-html',$footer);
$snappy->setOption('margin-bottom', "10");
//$snappy->setOption('margin-top',"2");
//$snappy->setOption('zoom', 1 );
//$snappy->setOption('dpi', 300 );
$snappy->generateFromHtml(
$this->renderView(
'GestionComerciale/Fabrication/template_pdf.html.twig',
[
'fabrication' => $fabrication,
'societe' => $societe,
'detail' => $request->query->get('detail'),
]
),
$chemin_pdf
);
if ($retour == true) {
return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
//return new RedirectResponse("/".$chemin_pdf);
}
//return new RedirectResponse("/".$chemin_pdf);
/*
return $this->render(
'GestionComerciale/Fabrication/template_pdf.html.twig',
array(
'fabrication' => $fabrication,
'societe' => $societe
)
);
*
*/
}
/**
* @Route("/of-multiple/pdf/{id}", name="dtc_fabrication_multiple_pdf")
*/
public function pdfFabricationMultipleAction(Request $request, FabricationMultiple $fabricationMultiple, $retour = true, EntityManagerInterface $em, Pdf $snappy)
{
$societe = $em->getRepository(Societe::class)->find(1);
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
$chemin_pdf = 'PDF/OFM/'.$date.'/OFM-'.$fabricationMultiple->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/OrdreRep/template_pdf.html.twig',array('commande' => $ordreRepration,'societe' => $societe));
$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe, 'masquerIncoterm' => 'true']);
//$header = $this->renderView('FO/PDF/header_of_pdf.html.twig', array('societe' => $societe,'fabrication' => $fabricationMultiple));
//return $header;
//$snappy->setOption('page-size', 'A4');
//$snappy->setOption('header-html',$header);
$snappy->setOption('footer-html', $footer);
//$snappy->setOption('header-html',$footer);
$snappy->setOption('margin-bottom', "10");
//$snappy->setOption('margin-top',"2");
//$snappy->setOption('zoom', 1 );
//$snappy->setOption('dpi', 300 );
$snappy->generateFromHtml(
$this->renderView(
'GestionComerciale/FabricationMultiple/template_pdf.html.twig',
[
'fabricationMultiple' => $fabricationMultiple,
'societe' => $societe,
'detail' => $request->query->get('detail'),
]
),
$chemin_pdf
);
if ($retour == true) {
return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
//return new RedirectResponse("/".$chemin_pdf);
}
//return new RedirectResponse("/".$chemin_pdf);
/*
return $this->render(
'GestionComerciale/Fabrication/template_pdf.html.twig',
array(
'fabrication' => $fabrication,
'societe' => $societe
)
);
*
*/
}
/**
* @Route("/of/imprimer/multiple", name="dtc_fabrication_pdf_multiple")
*/
public function imprimerMultipleAction(Request $request, EntityManagerInterface $em, Pdf $snappy)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$tableauPdf = [];
$pdfRelier = 'PDF/OF/OF-'.date('d-m-Y').'.pdf';
//$ids = array("118","101","93");
for ($i = 0; $i < count($ids); $i++) {
$repo = $em->getRepository(Fabrication::class);
$bon = $repo->find($ids[$i]);
if (is_object($bon)) {
$this->pdfFabricationAction($request, $bon, false, $em, $snappy);
$tableauPdf[] = $chemin_pdf = 'PDF/OF/OF-'.$bon->getReference().'.pdf';
}
}
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
foreach ($tableauPdf as $file) {
$cmd .= $file." ";
}
//echo "<div>".$cmd."</div>";
$result = shell_exec($cmd);
return new JsonResponse(['target' => '_blank', 'url' => '/'.$pdfRelier, 'valide' => '1']);
}
/**
* @Route("", name="")
*/
public function getQuantiteFabriquableAction(Request $request, Fabrication $fabrication, FabricationService $fabricationService)
{
$quantiteFabriquable = $fabricationService->quantiteFabricable($fabrication);
return new Response('<p class="text-center">'.$quantiteFabriquable.'</p>');
}
/**
* @Route("", name="")
*/
public function fabricationMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$repoArticle = $em->getRepository(Article::class);
$articles = $repoArticle->getArticlesInternesAFabriquer();
$fabrication = new Fabrication();
$user = $this->getUser();
$fabrication->setUtilisateur($user);
$statut = $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
$fabrication->setStatutFabrication($statut);
$quantite = 1;
$fabrication->setQuantite($quantite);
$form = $this->createForm(FabricationType::class, $fabrication);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$articles = [
'articles' => $request->request->get('articles'),
'ids' => $request->request->get('ids'),
'qtes' => $request->request->get('qtes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'parents' => $request->request->get('parents'),
];
for ($i = 0; $i < count($articles['ids']); $i++) {
if ($articles['parents'][$i] == 'niveau1') {
$article = $repoArticle->find($articles['articles'][$i]);
if (is_object($article)) {
$articleCommande = new ArticleCommande();
$articleCommande->setArticle($article);
$articleCommande->setLibelle($article->getLibelle());
$articleCommande->setQuantite($articles['qtes'][$i]);
$articleCommande->setRal($articles['qtes'][$i]);
$articleCommande->setFabrication($fabrication);
$em->persist($articleCommande);
//$em->flush();
$this->enregistrerArticlesCommandeSousNiveau($articles, $articles['ids'][$i], $articleCommande, $em);
}
}
}
$em->persist($fabrication);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrication ajoutée avec succès !')
);
//\Doctrine\Common\Util\Debug::dump($idsArticle);
//return $this->redirectToRoute('dtc_carnet_fabrication_liste');
return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
}
}
return $this->render('GestionComerciale/Fabrication/carnet-fabrication2.html.twig', [
'articles' => $articles,
'form' => $form->createView(),
'quantite' => $quantite,
]);
}
/**
* @Route("/fabrication-multiple/nouvelle/", name="dtc_fabrication_multiple_ajouter")
*/
public function ajouterMultipleAction(Request $request, EntityManagerInterface $em, FabricationService $fabricationService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
//echo "XXXXX";
set_time_limit(300);
$user = $this->getUser();
$fabricationMultiple = new FabricationMultiple;
$fabricationMultiple->setUtilisateur($user);
$fabricationMultiple->setMagasinier(null);
//$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
//$composants = $fabricationService->getArticlesCommande($fabrication);
$repoArticle = $em->getRepository(Article::class);
$data = $request->get('dataTables');
$ids = array();
if(!empty($data['actions'])) $ids = $data['actions'];
$form = $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
$errors = "";
$error = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Fabrication::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_fabrication_multiple_liste');
}
if ($form->isValid()) {
if ($request->request->get('annuler') != '') {
//$fabricationService->annulerFabrication($fabrication);
$this->addFlash(
'notice',
$translator->trans('Commande annulée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
}
/*
$articles = array(
'articles'=>$request->request->get('articles'),
'ids'=>$request->request->get('ids'),
'qtes'=>$request->request->get('qtes'),
'pumps'=>$request->request->get('pumps'),
'parents'=>$request->request->get('parents'),
'test'=>$request->query->get('ids'),
'modifies'=>$request->request->get('modifies'),
);
*
*/
$articles = [
'articles' => $request->request->all('articles'),
'ids' => $request->request->all('ids'),
'idsTmp' => $request->request->all('idsTmp'),
'qtes' => $request->request->all('qtes'),
'pumps' => $request->request->all('pumps'),
'cumps' => $request->request->all('cumps'),
'parents' => $request->request->all('parents'),
'test' => $request->query->all('ids'),
'modifies' => $request->request->all('modifies'),
'articlesComposant' => $request->request->all('articlesComposant'),
];
$fabricationsIds = $request->request->all('fabricationsIds');
$fabrications = [
'ids' => $fabricationsIds,
'quantites' => $request->request->all('fabricationsQtes'),
'generer' => [],
];
$articlesByFabrication = [];
if (count($fabricationsIds) > 0) {
foreach ($fabricationsIds as $fabricationId) {
$fabrications['generer'][] = $request->request->get('g_'.$fabricationId);
$articlesByFabrication[$fabricationId] = [
'articles' => $articles['articles'][$fabricationId],
'ids' => $articles['ids'][$fabricationId],
'idsTmp' => $articles['idsTmp'][$fabricationId],
'qtes' => $articles['qtes'][$fabricationId],
'pumps' => $articles['pumps'][$fabricationId],
'cumps' => $articles['cumps'][$fabricationId],
'parents' => $articles['parents'][$fabricationId],
'test' => $articles['ids'][$fabricationId],
'modifies' => $articles['modifies'][$fabricationId],
'articlesComposant' => $articles['articlesComposant'][$fabricationId],
];
}
foreach ($articles['idsTmp'][$fabricationId] as $key => $id) {
if ($request->request->get('g_'.$id) != '') {
$articlesByFabrication[$fabricationId]['fabrications'][$key] = $request->request->get('g_'.$id);
}
/*
$this->addFlash(
'warning',
$id
);
*
*/
}
//\Doctrine\Common\Util\Debug::dump($articlesByFabrication);
$valider = $request->request->get('valider');
$valeurs = ['articles' => $articlesByFabrication, 'valider' => $valider, 'fabrications' => $fabrications];
$fabricationService->sauvegarderFabricationMultiple($fabricationMultiple, $valeurs);
$this->addFlash(
'notice',
$translator->trans('Fabrication Multiple sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
} else {
$error = "Veuillez insérer au moins un article.";
}
} else {
$errors = $validator->validate($fabricationMultiple);
}
}
//\Doctrine\Common\Util\Debug::dump($composants);
return $this->render('GestionComerciale/FabricationMultiple/modifier.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'error' => $error,
'fabricationMultiple' => $fabricationMultiple,
//'articles'=>$articles
//'composants'=>$composants,
//'quantiteFabricable' => $quantiteFabricable,
//'articles' => $articles,
]);
}
/**
* @Route("/fabrication-multiple/liste", name="dtc_fabrication_multiple_liste")
*/
public function listerMultipleAction(Request $request, ColonneTableauService $serviceColonneTableau, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$this->datatableFabricationMultiple($request, $em, $datatable, $translator);
$tableauClassColonne = [];
$param = $request->query->all();
$statutCommande = $request->query->get('statutCommande');
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [0],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "id"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "date"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "dateFabrication"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "reference"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfs"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfsRestant"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfsReceptionnes"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "commentaire"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "equipier"),
"orderable" => true,
];
$tableauClassColonne[] = [
"className" => "visible_export colonne_id",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "statut"),
"orderable" => true,
];
$tableauClassColonne[] = ["orderable" => false, "className" => "colonne_id", "targets" => [10], "visible" => true];
return $this->render('GestionComerciale/FabricationMultiple/lister.html.twig', [
'tableauClassColonne' => $tableauClassColonne,
'statutCommande' => $statutCommande,
'statuts' => $em->getRepository(StatutFabrication::class)->findBy(['ordre' => [0, 1, 2, 3, 4, 5, 6, 7, 8,9,10,11,12]]),
'parametres' => $param,
]);
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/fabrication-multiple/grid", name="dtc_fabrication_multiple_liste_grid")
*/
public function gridMultipleAction(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableFabricationMultiple($request, $em, $datatable, $translator)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableFabricationMultiple(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$param = $request->query->all();
$datatable->setEntity(FabricationMultiple::class, "f")
->setFields(
[
$translator->trans("ID") => 'f.id',
$translator->trans("Date") => 'f.date',
$translator->trans("Date de fabrication") => 'f.dateFabrication',
$translator->trans("Réf") => "f.reference",
$translator->trans("Nb ofs") => "f.id",
$translator->trans("Nb ofs restant") => "f.id",
$translator->trans("Nb ofs réceptionnés") => "f.id",
$translator->trans("Commentaire") => "f.commentaire",
$translator->trans("Equipier") => "f.id",
'Statut' => 's.libelle',
$translator->trans("Actions") => 'f.id',
"_identifier_" => 'f.id',
]
)
//->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.statutFabricationMultiple', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.magasinier', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('f.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier'],
],
1 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
2 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier'],
],
4 => [
'view' => 'FO/DataTable/nbOfs.html.twig',
'params' => ['param' => 'total'],
],
5 => [
'view' => 'FO/DataTable/nbOfs.html.twig',
'params' => ['param' => 'restant'],
],
6 => [
'view' => 'FO/DataTable/nbOfs.html.twig',
'params' => ['param' => 'receptionne'],
],
8 => [
'view' => 'FO/DataTable/prenom_nom.html.twig',
'params' => ['typeUtilisateur' => 'magasinier'],
],
10 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_fabrication_multiple_modifier',
//'supprimer_route' => 'dtc_fabrication_multiple_supprimer',
'objet' => FabricationMultiple::class,
],
],
]
)
//->setWhere('s.ordre IN (1,2,3) AND (f.prestation = 0 or f.prestation is null)')
->setSearch(true)
->setSearchFields([0, 3, 7, 9])
->setOrder('f.id', 'DESC')
->setMultiple(
[/*
'fabrication-multiple' => array(
'title' => 'fabrication multiple',
'route' => 'dtc_fabrication_multiple_ajouter'
),
*
*/
]
);
$where = '(f.prestation = 0 or f.prestation is null)';
$parameters = [];
/*
if(is_object($request)){
$statutCommande = $request->query->get('statutCommande');
if ($statutCommande == '' || $statutCommande == '3'){
if ($where != '') $where .= ' AND ';
$where .= 's.ordre IN (:statutCommande)';
$parameters['statutCommande'] = array(1,2,3);
//$parameters['typeDocumentCommercial'] = 3;
} else {
if ($where != '') $where .= ' AND ';
$where .= 's.ordre = :statutCommande';
$parameters['statutCommande'] = $statutCommande;
//$parameters['typeDocumentCommercial'] = 3;
}
} else {
$where .= 's.ordre IN (:statutCommande)';
//$parameters['statutCommande'] = array(2,3,4);
$parameters['statutCommande'] = array(2,3);
//$parameters['typeDocumentCommercial'] = 3;
}
*/
if (array_key_exists('parametres', $param)) {
if (array_key_exists('date_debut', $param["parametres"]) and $param["parametres"]["date_debut"] != "") {
$param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_debut"]);
$param["parametres"]["date_debut"]->setTime(00, 00, 00);
$parameters["date_debut"] = $param["parametres"]["date_debut"];
if ($where != "") {
$where .= " AND ";
}
$where .= "f.dateFabrication >= :date_debut";
}
if (array_key_exists('date_fin', $param["parametres"]) and $param["parametres"]["date_fin"] != "") {
$param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_fin"]);
$param["parametres"]["date_fin"]->setTime(23, 59, 59);
$parameters["date_fin"] = $param["parametres"]["date_fin"];
if ($where != "") {
$where .= " AND ";
}
$where .= "f.dateFabrication <= :date_fin";
}
$statuts = $em->getRepository(StatutFabrication::class)->findBy(['ordre' => [0, 1, 2, 3, 4, 5, 6, 7, 8,9,10,11,12]]);
$statutIds = [];
foreach ($statuts as $statut) {
$key = $statut->getLibelleNettoye();
if (array_key_exists($key, $param["parametres"])) {
$statutIds[] = $statut->getOrdre();
}
}
//print_r($statutIds);
if (count($statutIds) > 0) {
if ($where != "") {
$where .= " AND ";
}
$where .= "s.ordre IN (:statuts)";
$parameters['statuts'] = $statutIds;
}
} else {
if ($where != "") {
$where .= " AND ";
}
$where .= 's.ordre IN (:statutCommande)';
$parameters['statutCommande'] = [2, 3];
}
if ($where != '') {
//echo $where;
$datatable->setWhere($where, $parameters);
}
// echo $where;
// print_r($parameters);
//dump($parameters);
return $datatable;
}
/**
* @Route("/fabrication-multiple-depuis-suggestion/nouvelle/", name="dtc_fabrication_multiple_ajouter_depuis_suggestion")
*/
public function ajouterMultipleDepuisSuggestionAction(Request $request, EntityManagerInterface $em, ArticleService $articleService)
{
$user = $this->getUser();
$fabricationMultiple = new FabricationMultiple;
$fabricationMultiple->setUtilisateur($user);
$date = new \DateTime();
$fabricationMultiple->setDate($date);
$repoStatutFabrication = $em->getRepository(StatutFabrication::class);
$statutFabrication = $repoStatutFabrication->findOneBy(["ordre" => "1"]);
$fabricationMultiple->setStatutFabricationMultiple($statutFabrication);
//$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
//$composants = $fabricationService->getArticlesCommande($fabrication);
$quantite = 1;
$em->persist($fabricationMultiple);
$em->flush();
$repoArticle = $em->getRepository(Article::class);
$data = $request->get('dataTables');
$ids = $data['actions'];
foreach ($ids as $id) {
$fabrication = new Fabrication();
$article = $repoArticle->find($id);
if ($article->getLibelle() == '') {
$article->setLibelle('_');
$em->persist($article);
//$em->flush();
}
$quantite = $articleService->quantiteAfabriquer($article);
$fabrication->setArticle($article);
$fabrication->setDate($date);
$fabrication->setQuantite($quantite);
$fabrication->setStatutFabrication($statutFabrication);
$fabricationMultiple->addFabrication($fabrication);
}
$em->persist($fabricationMultiple);
$em->flush();
$url = $this->generateUrl('dtc_fabrication_multiple_modifier', ['id' => $fabricationMultiple->getId()]);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/fabrication-multiple-depuis-suggestion-v2/nouvelle/", name="dtc_fabrication_multiple_ajouter_depuis_suggestion_v2")
*/
public function ajouterMultipleDepuisSuggestionV2Action(Request $request, EntityManagerInterface $em, NumerotationDocumentService $numerotationService)
{
$user = $this->getUser();
$fabricationMultiple = new FabricationMultiple;
$fabricationMultiple->setUtilisateur($user);
$date = new \DateTime();
$fabricationMultiple->setDate($date);
$repoStatutFabrication = $em->getRepository(StatutFabrication::class);
$repo_article_a_fabriquer = $em->getRepository(ArticleAfabriquer::class);
$statutFabrication = $repoStatutFabrication->findOneBy(["ordre" => "1"]);
$fabricationMultiple->setStatutFabricationMultiple($statutFabrication);
//numeroter
$fabricationMultiple->setReference($numerotationService->generer($fabricationMultiple));
//$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
//$composants = $fabricationService->getArticlesCommande($fabrication);
$quantite = 1;
$fabricationMultiple->setUtilisateur($user);
$fabricationMultiple->setMagasinier($user);
$em->persist($fabricationMultiple);
$em->flush();
$data = $request->get('dataTables');
$ids = $data['actions'];
foreach ($ids as $id) {
$fabrication = new Fabrication();
$fabrication->setUtilisateur($user);
$fabrication->setMagasinier($user);
$articleAfabriquer = $repo_article_a_fabriquer->find($id);
$article = $articleAfabriquer->getArticle();
if ($article->getLibelle() == '') {
$article->setLibelle('_');
$em->persist($article);
//$em->flush();
}
//$quantite = $articleService->quantiteAfabriquer($article);
$fabrication->setArticle($article);
$ac = $articleAfabriquer->getArticleCommande();
if (is_object($ac)) {
$fabrication->setArticleCommandeCommandeClient($ac);
$fabrication->setCommande($ac->getCommande());
}
$fabrication->setDate($date);
$fabrication->setQuantite($articleAfabriquer->getQuantite());
$fabrication->setStatutFabrication($statutFabrication);
//numeroter
$fabrication->setReference($numerotationService->generer($fabrication));
$fabrication->setFabricationMultiple($fabricationMultiple);
$em->persist($fabrication);
$em->flush();
//$fabricationMultiple->addFabrication($fabrication);
}
//$em->persist($fabricationMultiple);
//$em->flush();
$url = $this->generateUrl('dtc_fabrication_multiple_modifier', ['id' => $fabricationMultiple->getId()]);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/fabrication-multiple/modifier/{id}", name="dtc_fabrication_multiple_modifier")
*/
public function modifierMultipleAction(Request $request, FabricationMultiple $fabricationMultiple, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator, FabricationService $fabricationService
) {
set_time_limit(600);
//set_time_limit(10);
$user = $this->getUser();
$fabricationMultiple->setUtilisateur($user);
//$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
//$composants = $fabricationService->getArticlesCommande($fabrication);
$form = $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Fabrication::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
}
if ($form->isValid()) {
if ($request->request->get('annuler') != '') {
$fabricationService->annulerFabricationMultiple($fabricationMultiple);
$this->addFlash('notice', $translator->trans('Fabrication multiple annulée avec succès !'));
return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
}
$articles = [
'articles' => $request->request->get('articles'),
'ids' => $request->request->get('ids'),
'idsTmp' => $request->request->get('idsTmp'),
'qtes' => $request->request->get('qtes'),
'pumps' => $request->request->get('pumps'),
'cumps' => $request->request->get('cumps'),
'parents' => $request->request->get('parents'),
'test' => $request->query->get('ids'),
'modifies' => $request->request->get('modifies'),
'articlesComposant' => $request->request->get('articlesComposant'),
];
//\Doctrine\Common\Util\Debug::dump($articles);
//exit;
$fabricationsIds = $request->request->get('fabricationsIds');
$fabrications = [
'ids' => $fabricationsIds,
'quantites' => $request->request->get('fabricationsQtes'),
'generer' => [],
];
$articlesByFabrication = [];
foreach ($fabricationsIds as $fabricationId) {
$fabrications['generer'][] = $request->request->get('g_'.$fabricationId);
/*
$this->addFlash(
'warning',
$request->request->get('g_'.$fabricationId)
);
* *
*/
$articlesByFabrication[$fabricationId] = [
'articles' => $articles['articles'][$fabricationId],
'ids' => $articles['ids'][$fabricationId],
'idsTmp' => $articles['idsTmp'][$fabricationId],
'qtes' => $articles['qtes'][$fabricationId],
'pumps' => $articles['pumps'][$fabricationId],
'cumps' => $articles['cumps'][$fabricationId],
'parents' => $articles['parents'][$fabricationId],
'test' => $articles['ids'][$fabricationId],
'modifies' => $articles['modifies'][$fabricationId],
'articlesComposant' => $articles['articlesComposant'][$fabricationId],
];
foreach ($articles['idsTmp'][$fabricationId] as $key => $id) {
if ($request->request->get('g_'.$id) != '') {
$articlesByFabrication[$fabricationId]['fabrications'][$key] = $request->request->get('g_'.$id);
/*
$this->addFlash(
'warning',
$request->request->get('g_'.$id)
);
*/
}
}
}
// \Doctrine\Common\Util\Debug::dump($articlesByFabrication);
// exit;
$valider = $request->request->get('valider');
$valeurs = ['articles' => $articlesByFabrication, 'valider' => $valider, 'fabrications' => $fabrications];
//\Doctrine\Common\Util\Debug::dump($valeurs);
$fabricationService->sauvegarderFabricationMultiple($fabricationMultiple, $valeurs);
//var_dump('test2');die;
$this->addFlash('notice', $translator->trans('Fabrication multiple sauvegardée avec succès !'));
return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
} else {
$errors = $validator->validate($fabricationMultiple);
}
}
//\Doctrine\Common\Util\Debug::dump($composants);
return $this->render('GestionComerciale/FabricationMultiple/modifier.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'fabricationMultiple' => $fabricationMultiple,
//'articles'=>$articles
//'composants'=>$composants,
//'quantiteFabricable' => $quantiteFabricable,
//'articles' => $articles,
]);
}
/**
* @Route("/fabrication-multiple/liste-articles/{id}", name="dtc_fabrication_multiple_liste_articles")
*/
public function listerMultipleArticlesAction(Request $request, FabricationMultiple $fabricationMultiple, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator, ArticleService $articleService
) {
$aCommander = $request->query->get('aCommander');
$titre_modal = $translator->trans("Composants");
if ($aCommander) {
$titre_modal = $translator->trans("Composants à commander");
}
$user = $this->getUser();
$repoArticle = $em->getRepository(Article::class);
$repoArticleCommande = $em->getRepository(ArticleCommande::class);
$repo_fabrication = $em->getRepository(Fabrication::class);
$date = new \DateTime();
/*
$url = $this->generateUrl('dtc_fabrication_liste', array());//dtc_commande_fournisseur_liste
return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
}
else {
$errors = $validator->validate($or);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$fabrication->getId(),'type'=>''));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
}
*
*/
$donnees = [];
$composantsSansArbo = [];
$composantsAvecArbo = [];
$action = $request->query->get('export');
$handle = fopen('php://memory', 'r+');
$delimiter = ';';
$entete = ['Qte', 'Reference', 'Libelle', 'Stock', 'RaL client', 'RaL fourn.', 'Qte mini', 'Qte maxi', 'Besoin', 'Qte mini conseillee', 'Qte maxi conseillee'];
fputcsv($handle, $entete, $delimiter);
//$fabrications = $fabricationMultiple->getFabrications();
$fabrications = $repo_fabrication->findBy([
'fabricationMultiple' => $fabricationMultiple,
'sousFabrication' => null,
]);
$donnees['infos'] = [];
for ($i = 0; $i < count($fabrications); $i++) {
$fabrication = $fabrications[$i];
$article = $fabrication->getArticle();
$quantite = $fabrication->getQuantite();
//$donnees = $this->getDonneesArticle($article, $quantite, $donnees);
$articlesCommande = $repoArticleCommande->findByFabrication($fabrication);
for ($j = 0; $j < count($articlesCommande); $j++) {
$articleCommande = $articlesCommande[$j];
$articleTmp = $articleCommande->getArticle();
if ($articleTmp->getMainOeuvre() !== true) {
$quantiteTmp = $articleCommande->getQuantite();
//var_dump($articleTmp->getReference().' '.$quantiteTmp);
if ($quantite > 0) {
//$besoin = $quantite;
$besoin1 = $quantiteTmp;
$donnees['infos'][] = '- '.$articleTmp->getReference().':'.$besoin1.' -';
} else {
$besoin1 = 0;
}
$stock = $articleTmp->getStock();
$ral = $articleService->ralClient($articleTmp);
$ralF = $articleTmp->getRalFournisseur();
$besoin = $stock - $besoin1 - $ral + $ralF;
if ($besoin > 0) {
$besoin = 0;
} else {
$besoin = abs($besoin);
}
if ( ! $aCommander || ($aCommander && $besoin > 0)) {
$donnees = $this->getDonneesArticle($articleTmp, $quantiteTmp, $donnees, $besoin, $articleService);
//if ($j == 0) var_dump($donnees);
if (count($articleCommande->getArticlesCommande()) > 0) {
//var_dump('enfants '.count($articleCommande->getArticlesCommande()));
$donnees[$articleTmp->getId()]['enfants'] = 'oui';
$donnees = $this->getArticlesCommandeEnfants($articleCommande, $donnees, $besoin, $aCommander, $articleService);
}
}
}
}
}
//var_dump($donnees);
if ($action == "1") {
$count = 1;
foreach ($donnees as $donnee) {
if ($count != 1 && $donnee['enfants'] == 'non' && (($donnee['besoin'] != 0 && $aCommander == 'true') || $aCommander != 'true')) {
unset($donnee['enfants']);
fputcsv($handle, $donnee, $delimiter);
}
$count++;
}
rewind($handle);
$content = stream_get_contents($handle);
fclose($handle);
$filename = 'composans_'.$fabricationMultiple->getReference().'_'.date_format($date, 'Ymd_hms').'.csv';
//$em->flush();
return new Response($content, 200, [
'Content-Type' => 'application/force-download; charset=ISO-8859-1',
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
]);
}
$rendu = $this->renderView(
'GestionComerciale/FabricationMultiple/liste-articles.html.twig',
['fabricationMultiple' => $fabricationMultiple, 'donnees' => $donnees, 'aCommander' => $aCommander]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
private function getArticlesCommandeEnfants($articleCommande, $donnees, $besoinParent, $aCommander = null, ArticleService $articleService)
{
$articleParent = $articleCommande->getArticle();
$articlesCommandes = $articleCommande->getArticlesCommande();
for ($i = 0; $i < count($articlesCommandes); $i++) {
$ac = $articlesCommandes[$i];
$article = $ac->getArticle();
if ($article->getMainOeuvre() !== true) {
$quantite = $ac->getQuantite();
if ($besoinParent > 0) {
$besoin1 = $this->getMultiplicateurResteACommander($articleParent, $besoinParent, $articleService) * $quantite;
//$besoin = 7;
//$besoin = $donnees[$key]['stock'] - $besoin - $donnees[$key]['ral'] + $donnees[$key]['ralF'];
$donnees['infos'][] = '- '.$quantite.' -';
} else {
$besoin1 = 0;
}
$stock = $article->getStock();
$ral = $articleService->ralClient($article);
$ralF = $article->getRalFournisseur();
$besoin = $stock - $besoin1 - $ral + $ralF;
if ($besoin > 0) {
$besoin = 0;
} else {
$besoin = abs($besoin);
}
if ( ! $aCommander || ($aCommander && $besoin > 0)) {
$donnees = $this->getDonneesArticle($article, $quantite, $donnees, $besoin, $articleService);
if (count($ac->getArticlesCommande()) > 0 && $besoin > 0) {
$donnees[$article->getId()]['enfants'] = '->oui : '.count($articlesCommandes);
$donnees = $this->getArticlesCommandeEnfants($ac, $donnees, $besoin, $aCommander, $articleService);
}
}
}
}
return $donnees;
}
private function getMultiplicateurResteACommander($article, $quantite, ArticleService $articleService)
{
$stock = $article->getStock();
$ralFournisseur = $article->getRalFournisseur();
$ralClient = $articleService->ralClient($article);
$besoin = floatval($stock) - floatval($quantite) - floatval($ralClient) - floatval($ralFournisseur);
if ($besoin > 0) {
return 0;
}
$multiplicateur = abs($besoin) / $quantite;
return $multiplicateur;
}
private function getDonneesArticle($article, $quantite, $donnees, $besoin, ArticleService $articleService)
{
$key = $article->getId();
$donnees[$key]['reference'] = $article->getReference();
$donnees[$key]['libelle'] = $article->getLibelle();
$donnees[$key]['stock'] = $article->getStock();
$donnees[$key]['ral'] = $articleService->ralClient($article);
$donnees[$key]['ralF'] = $article->getRalFournisseur();
$donnees[$key]['mini'] = $article->getSeuilMiniCommandeFournisseur();
$donnees[$key]['maxi'] = $article->getSeuilMaxiCommandeFournisseur();
$donnees[$key]['nonStocke'] = $article->getNonStocke();
if (array_key_exists($key, $donnees) && array_key_exists('besoin', $donnees[$key])) {
$donnees[$key]['besoin'] += $besoin;
} else {
$donnees[$key]['besoin'] = $besoin;
}
if (array_key_exists($key, $donnees) && array_key_exists('quantite', $donnees[$key])) {
$donnees[$key]['quantite'] += $quantite;
} else {
$donnees[$key]['quantite'] = $quantite;
}
if ($donnees[$key]['mini'] != '') {
$qteConseilleeMini = $donnees[$key]['mini'] - $besoin;
if ($qteConseilleeMini > 0) {
$donnees[$key]['qteConseilleeMini'] = $qteConseilleeMini;
} else {
$donnees[$key]['qteConseilleeMini'] = '';
}
} else {
$donnees[$key]['qteConseilleeMini'] = '';
}
if ($donnees[$key]['maxi'] != '') {
$qteConseilleeMaxi = $donnees[$key]['maxi'] - $besoin;
if ($qteConseilleeMaxi > 0) {
$donnees[$key]['qteConseilleeMaxi'] = $qteConseilleeMaxi;
} else {
$donnees[$key]['qteConseilleeMaxi'] = '';
}
} else {
$donnees[$key]['qteConseilleeMaxi'] = '';
}
if ( ! array_key_exists('enfants', $donnees[$key])) {
$donnees[$key]['enfants'] = 'non';
}
return $donnees;
}
/**
* @Route("/fabrication/reception-multiple", name="dtc_fabrication_reception_multiple")
*/
public function receptionMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, FabricationService $fabricationService)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(Fabrication::class);
for ($i = 0; $i < count($ids); $i++) {
$fabrication = $repo->find($ids[$i]);
if (is_object($fabrication)) {
$fabricationService->creerMvtStock($fabrication);
}
}
//$em->flush();
$this->addFlash(
'notice',
$translator->trans('Fabrications réceptionnées avec succès ! Les mouvements de stock ont étés créés.')
);
$process = new Process(['php', 'bin/console', 'articlesComposesModifierCondHa:maj']);
$process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
$process->setOptions(['create_new_console' => true]);
$process->start();
$url = $this->generateUrl('dtc_fabrication_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/defabrication/nouvelle/", name="dtc_defabrication_ajouter")
*/
public function defabriquerAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator, FabricationService $fabricationService)
{
$repoArticle = $em->getRepository(Article::class);
$user = $this->getUser();
$mvtStock = new MouvementStock();
$date = new \DateTime();
$mvtStock->setDate($date);
$mvtStock->setDateMvt($date);
$user = $this->getUser();
$form = $this->createForm(DefabriquerArticleType::class, $mvtStock);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$fabricationService->creerMvtStockDefabrication($mvtStock, $user);
$this->addFlash(
'notice',
$translator->trans('Article défabriqué avec succès !')
);
//\Doctrine\Common\Util\Debug::dump($idsArticle);
//return $this->redirectToRoute('dtc_carnet_fabrication_liste');
return $this->redirectToRoute('dtc_defabrication_ajouter', []);
} else {
$errors = $validator->validate($mvtStock);
}
}
return $this->render('Articles/Article/defabriquer.html.twig', [
'form' => $form->createView(),
//'fabrication'=>$fabrication,
'errors' => $errors,
//'id'=>$id
]);
}
/**
* @Route("/fabrication/prestations", name="dtc_fabrication_prestations")
*/
public function listerPrestationsAction(Request $request, EntityManagerInterface $em)
{
$repo_article = $em->getRepository(Article::class);
$repo_fabrication = $em->getRepository(Fabrication::class);
$fabrications = $repo_fabrication->getFabricationsAvecPrestation()->getQuery()->getResult();
$tableauClassColonne = '';
return $this->render('GestionComerciale/Fabrication/lister-prestations.html.twig', [
'fabrications' => $fabrications,
'typePrestations' => $repo_article->findByPrestation(1),
'tableauClassColonne' => $tableauClassColonne,
]);
}
/**
* @Route("/fabrication-prestation/liste", name="dtc_fabrication_prestation_liste")
*/
public function prestationListerAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$this->datatablePrestation($datatable, $translator);
$tableauClassColonne = [];
$template = 'GestionComerciale/Fabrication/lister-prestations.html.twig';
return $this->render($template, [
'tableauClassColonne' => $tableauClassColonne,
]);
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/fabrication-prestation/grid", name="dtc_fabrication_prestation_liste_grid")
*/
public function prestationGridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatablePrestation($datatable, $translator)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatablePrestation(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(FabricationMultiple::class, "f")
->setFields(
[
$translator->trans("ID") => 'f.id',
$translator->trans("Réf") => "f.reference",
'Statut' => 's.libelle',
//$translator->trans("Réf article") => "a.reference",
//$translator->trans("Libellé") => "a.libelle",
//$translator->trans("Quantité") => "f.quantite",
//$translator->trans("Quantité fabricable") => "a.id",
//$translator->trans("Quantité fabriquable") => "f.quantiteFabriquable",
$translator->trans("Date") => 'f.date',
$translator->trans("Date de fabrication") => 'f.dateFabrication',
//$translator->trans("Statut") => 's.libelle',
$translator->trans("Actions") => 'f.id',
"_identifier_" => 'f.id',
]
)
//->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.statutFabricationMultiple', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('f.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_prestation_modifier'],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => ['edit_route' => 'dtc_fabrication_prestation_modifier'],
],
/*
4 => array(
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => array('class'=>'text-center'),
),
/*
5 => array(
'view' => 'GestionComerciale/Fabrication/quantite_controller.html.twig',
),
*
*/
/*
5 => array(
'view' => 'FO/DataTable/ajout_class.html.twig',
'params' => array('class'=>'text-center'),
),
*
*/
3 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
4 => [
'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
],
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_fabrication_prestation_modifier',
'supprimer_route' => 'dtc_fabrication_prestation_supprimer',
'objet' => FabricationMultiple::class,
],
],
]
)
->setWhere('s.ordre IN (1,2,3) AND f.prestation = 1')
->setSearch(true)
->setSearchFields([1, 2, 3, 4])
//->setOrder('s.ordre', 'DESC')
->setMultiple(
[/*
'fabrication-multiple' => array(
'title' => 'fabrication multiple',
'route' => 'dtc_fabrication_multiple_ajouter'
),
*
*/
]
);
return $datatable;
}
/**
* @Route("/fabrication-prestation/ajouter", name="dtc_fabrication_prestation_ajouter")
*/
public function fabricationPrestationAjouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(Fabrication::class);
$prestations = [];
for ($i = 0; $i < count($ids); $i++) {
$fabrication = $repo->find($ids[$i]);
if (is_object($fabrication)) {
//$articleId = $fabrication->getArticle()->getId();
$key = '';
foreach ($fabrication->getArticleCommande() as $ac) {
$article = $ac->getArticle();
if ($article->getPrestation() == 1) {
$key = $article->getId();
}
}
if ($key != '') {
/*
foreach($fabrication->getArticleCommande() as $ac){
$article = $ac->getArticle();
if($article->getPrestation() == 1){
if(array_key_exists($key, $prestations)) {
$prestations[$key]['qtePrestation'] += $ac->getQuantite();
} else {
$prestations[$key]['qtePrestation'] = $ac->getQuantite();
}
} else {
if(array_key_exists($article->getId(), $prestations[$key])) {
$prestations[$key][$article->getId()]['quantite'] += $ac->getQuantite();
} else {
$prestations[$key][$article->getId()]['article'] = $article;
$prestations[$key][$article->getId()]['quantite'] = $ac->getQuantite();
}
}
}
*
*/
$prestations[$key]['fabrications'][] = $fabrication;
}
}
}
foreach ($prestations as $prestation) {
$prestation = new FabricationMultiple;
$prestation->setPrestation(true);
foreach ($prestation['fabrications'] as $fabrication) {
$prestation->addFabricationsPrestation($fabrication);
}
$em->persist($prestation);
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Ordre de prestation ajouté avec suuccès!')
);
if (count($prestations) == 1) {
$this->addFlash(
'notice',
$translator->trans('Ordre de prestation ajouté avec suuccès!')
);
$url = $this->generateUrl('dtc_fabrication_prestation_modifier', ['id' => $prestation->getId()]);
} else {
$this->addFlash(
'notice',
$translator->trans('Ordres de prestation ajoutés avec suuccès!')
);
$url = $this->generateUrl('dtc_fabrication_prestation_liste', []);
}
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/fabrication-prestation/modifier/{id}", name="dtc_fabrication_prestation_modifier")
*/
public function modifierPrestationAction(Request $request, FabricationMultiple $fabricationMultiple, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator, FabricationService $fabricationService
) {
$user = $this->getUser();
$prestations = [];
$key = '';
foreach ($fabricationMultiple->getfabricationsPrestation() as $fabrication) {
foreach ($fabrication->getArticleCommande() as $ac) {
$article = $ac->getArticle();
if ($article->getPrestation() == 1) {
$key = $article->getId();
if ( ! array_key_exists($key, $prestations)) {
$prestations[$key] = [];
$prestations[$key]['article'] = $article;
$prestations[$key]['articles'] = [];
}
}
}
if ($key != '') {
foreach ($fabricationMultiple->getFabricationsPrestation() as $fabrication) {
foreach ($fabrication->getArticleCommande() as $ac) {
$article = $ac->getArticle();
if ($article->getPrestation() == 1) {
if (array_key_exists('qtePrestation', $prestations)) {
$prestations[$key]['qtePrestation'] += $ac->getQuantite();
} else {
$prestations[$key]['qtePrestation'] = $ac->getQuantite();
}
} else {
if (array_key_exists($article->getId(), $prestations[$key]['articles'])) {
$prestations[$key]['articles'][$article->getId()]['quantite'] += $ac->getQuantite();
} else {
$prestations[$key]['articles'][$article->getId()]['article'] = $article;
$prestations[$key]['articles'][$article->getId()]['quantite'] = $ac->getQuantite();
}
}
}
}
}
}
$form = $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, FabricationMultiple::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_fabrication_prestation_modifier', ["id" => $fabricationMultiple->getId()]);
}
if ($form->isValid()) {
if ($request->request->get('annuler') != '') {
$fabricationService->annulerFabricationPrestation($fabricationMultiple);
$this->addFlash(
'notice',
$translator->trans('Prestation annulée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
}
//$fabricationService->sauvegarderFabricationMultiple($fabricationMultiple,$valeurs);
$this->addFlash(
'notice',
$translator->trans('Prestation sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
} else {
$errors = $validator->validate($fabricationMultiple);
}
}
//\Doctrine\Common\Util\Debug::dump($composants);
return $this->render('GestionComerciale/Prestation/modifier.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'prestation' => $fabricationMultiple,
'prestations' => $prestations,
]);
}
/**
* @Route("/fabrication-prestation/supprimer/{id}", name="dtc_fabrication_prestation_supprimer")
*/
public function supprimerPrestationAction(Request $request, FabricationMultiple $prestation, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerFabricationMultipleType::class, $prestation);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
//$fabricationService->annulerFabrication($fabrication);
$em->remove($prestation);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Prestation supprimée avec succès !')
);
$url = $this->generateUrl('dtc_fabrication_prestation_liste', []);//dtc_commande_fournisseur_liste
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($prestation);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $prestation->getId(), 'type' => '']
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $prestation->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("", name="")
*/
public function listerCFAction(Request $request, $articleId, $commandeId, EntityManagerInterface $em)
{
$repo_fabrication = $em->getRepository(Fabrication::class);
$fabrications = $repo_fabrication->getFabricationsAvecPrestation($articleId, $commandeId)->getQuery()->getResult();
return $this->render('GestionComerciale/Fabrication/lister-cf.html.twig', [
'fabrications' => $fabrications,
'commandeId' => $commandeId,
]);
}
/**
* @Route("/carnet-fabrication/refresh", name="dtc_carnet_fabrication_refresh")
*/
public function carnetCommandeRefreshAction(Request $request, EntityManagerInterface $em, ArticleService $service_article)
{
$conn = $em->getConnection();
$conn->getConfiguration()->setSQLLogger(null);
$repo_commande = $em->getRepository(Commande::class);
$repo_article = $em->getRepository(Article::class);
$sql = "UPDATE article__article SET a_fabriquer = 0 WHERE a_fabriquer = 1 ";
$stmt = $conn->executeQuery($sql);
/*
$sql = "UPDATE article__article as p
SET a_fabriquer = 1
WHERE (p.stock-COALESCE(p.stock_reserve,0)+COALESCE(p.ral_fournisseur,0)) < p.seuil_commande_f_mini AND (p.produit_interne = 1 OR p.virtuel = 0)
AND
p.id IN (SELECT article_compose_id FROM article__article_composant)
";
*/
//Recuperer les produits internes (produits composes)
$produitsComposes = $repo_article->findByProduitInterne(1);
$ids = [];
foreach ($produitsComposes as $produitComposes) {
$retour = $service_article->articleAfabriquer($produitComposes);
if ($retour == 1) {
$ids[] = $produitComposes->getId();
}
}
if (count($ids)) {
$idList = implode(',', $ids);
//$output->writeln($idList);
$sql = "UPDATE article__article as p
SET a_fabriquer = 1
WHERE p.id IN (".$idList.")
";
//$stmt = $conn->prepare($sql);
//$stmt = $conn->executeQuery($sql, array('idList'=>$idList));
$stmt = $conn->executeQuery($sql);
}
//$em->flush();
$response = new JsonResponse();
$response->setData(1);
return $response;
}
/**
* @Route("/carnet-fabrication-v2/refresh", name="dtc_carnet_fabrication_refresh_v2")
*/
public function carnetCommandeRefreshV2Action(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
/*
$dir = realpath(__DIR__.'../../../../');
//dump($dir);
$process = new Process($dir, 'php app/console cron:carnetfabrication:v2');
$process->run();
*/
// Refactor Commande
$builder = new ProcessBuilder();
$builder->setArguments(['php', '../app/console', 'cron:carnetfabrication:v2']);
$builder->getProcess()->start();
$response = new JsonResponse();
$response->setData(1);
return $response;
}
/**
* @Route("/carnet-fabrication-v2", name="dtc_carnet_fabrication_liste_v2")
*/
public function carnetFabricationV2Action(Request $request, EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
// TODO refactor THIS
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [2],
"visible" => false,
];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"commande")
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "logo"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "qteAfabriquer"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "stock"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "dispo"),
];//
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Mini fab'>Mini fab</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [10],
"visible" => false,
];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"miniFab")
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Quantité mini'>Q mini</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [11],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMiniCommandeFournisseur"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Quantité maxi'>Q maxi</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [12],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMaxiCommandeFournisseur"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à livrer client'>Ràl C</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [13],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralC"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à livrer fournisseur'>Ràl F</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [14],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralF"),
];
$tableau_class_cellule[] = [
"title" => "<span data-toggle='tooltip' title='Reste à fabriquer'>RàF</span>",
"className" => "visible_export colonne_id text-center",
"targets" => [15],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "raf"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [16],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "marque"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [17],
"visible" => false,
];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"pump")
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [18],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "cump"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [19],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "descCourte"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [20],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "atelier"),
];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id off", "targets" => [21], "visible" => true];
//$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(13),"visible"=>true);
$categorie_enfants = [];
$categorie_enfants_enfants = [];
$repo_categorie_article = $em->getRepository(Categorie::class);
$categorie_article_racine = $repo_categorie_article->findBy(["categorieParent" => 1]);
$repo_marque_article = $em->getRepository(Marque::class);
$marque_article = $repo_marque_article->findBy([], ['libelle' => 'ASC']);
$repo_type_article = $em->getRepository(Type::class);
$type_article = $repo_type_article->findBy([], ['libelle' => 'ASC']);
$repo_atelier = $em->getRepository(Atelier::class);
$ateliers = $repo_atelier->findBy([], ['libelle' => 'ASC']);
$param = $request->query->all();
if (array_key_exists('categorie_article', $param) and $param["categorie_article"] > 0) {
$parent = $repo_categorie_article->find($param["categorie_article"]);
if (is_object($parent)) {
$categorie_enfants = $repo_categorie_article->findBy(["categorieParent" => $parent]);
}
}
if (array_key_exists('sous_categorie_article', $param) and $param["sous_categorie_article"] > 0) {
$parent2 = $repo_categorie_article->find($param["sous_categorie_article"]);
if (is_object($parent2)) {
$categorie_enfants_enfants = $repo_categorie_article->findBy(["categorieParent" => $parent]);
}
}
$this->datatableCarnetFabricationV2($request, $datatable, $translator);
return $this->render('GestionComerciale/Fabrication/carnet-fabrication-v2.html.twig', [
'tableauClassColonne' => $tableau_class_cellule,
'parametres' => $param,
"categorie_article" => $categorie_article_racine,
"sous_categorie_article" => $categorie_enfants,
"sous_sous_categorie_article" => $categorie_enfants_enfants,
"marque" => $marque_article,
"type" => $type_article,
"ateliers" => $ateliers,
]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableCarnetFabricationV2(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$param = $request->query->all();
$parametres = [];
$where = "";
if ( ! array_key_exists('parametres', $param)) {
$param["parametres"] = $param;
}
$datatable->setEntity(ArticleAfabriquer::class, "af")
->setFields(
[
$translator->trans("ID") => 'af.id',
$translator->trans("Commande") => 'c.reference',
$translator->trans("Img") => 'p.reference',
$translator->trans("Réf") => 'p.reference',
$translator->trans("Libelle") => 'p.libelle',
$translator->trans("Qte à Fab") => "af.quantite",
$translator->trans("Type") => 't.libelle',
$translator->trans("Stock") => 'p.stock',
$translator->trans("Dispo") => 'p.id',
$translator->trans("Minifab") => 'p.id',
$translator->trans("Qmini") => 'p.seuilMiniCommandeFournisseur',
$translator->trans("Qmaxi") => 'p.seuilMaxiCommandeFournisseur',
$translator->trans("Ràl C") => 'p.id',
$translator->trans("Ràl F") => 'p.ralFournisseur',
'Ràf' => 'p.id',
$translator->trans("Marque") => 'm.libelle',
$translator->trans("Pump") => 'p.pump',
$translator->trans("Cump") => 'p.cpump',
$translator->trans("Desc courte") => 'p.descriptionCourte',
$translator->trans("Atelier") => 'at.libelle',
//$translator->trans("Prix HT") => 'p.prixVente',
//$translator->trans("Actions") => 'p.id',
'hidden' => 'af.id',
"_identifier_" => 'af.id',
]
)
//->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('p.fournisseurDefaut', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('p.articlesComposants', 'acmp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('af.article', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('p.atelier', 'at', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('af.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('p.type', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('p.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
/*
1 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array('edit_route'=>'dtc_commande_modifier',
'typeDocument' => 'articleAfabriquerCommande'
),
),
*/
2 => [
'view' => 'FO/DataTable/image.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'typeDocument' => 'article',
],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'typeDocument' => 'article',
],
],
/*3 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCArticlesBundle:Article',
'champ' => 'setLibelle',
),
),*/
/*
7 => array(
'view' => 'FO/DataTable/prixSuivi.html.twig',
'params' => array(
'surveillance' => false,
)
),
*
*/
/*
4 => array(
'view' => 'FO/DataTable/qteAfabriquer.html.twig'
),
*/
8 => [
'view' => 'FO/DataTable/article_dispo.html.twig',
],
/*
8 => array(
'view' => 'FO/DataTable/mini_fab.html.twig'
),
*/
12 => [
'view' => 'FO/DataTable/article_ral.html.twig',
],
14 => [
'view' => 'FO/DataTable/article_raf.html.twig',
],
15 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'afficher_total' => false,
],
],
17 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'afficher_total' => false,
],
],
20 => [
'view' => 'FO/DataTable/hidden.html.twig',
'params' => [
'typeDonnees' => ['commande'],
],
],
/*
12=> array(
'view' => 'FO/DataTable/button.html.twig',
'params' => array(
'edit_route' => 'dtc_fabrication_ajouter',
//'dupliquer_route' => 'dtc_article_dupliquer',
'objet' => 'DTCGestionComercialeBundle:Fabrication',
'name' => '<b>FABRIQUER</b>'
),
),
*/
]
)
//->setGroupBy('p.id')
->setMultiple(
[
'fabrication-multiple' => [
'title' => 'fabrication multiple',
'route' => 'dtc_fabrication_multiple_ajouter_depuis_suggestion_v2',
],
]
)
->setSearch(true)
->setSearchFields([3, 4]);
//$where = '(p.stock-COALESCE(p.stockReserve,0)+COALESCE(p.ralFournisseur,0)) < p.seuilMiniCommandeFournisseur AND (p.produitInterne = 1 OR p.virtuel = 1) AND acmp.id is not null';
//$where = 'p.aFabriquer = 1 AND p.nomenclatureValidee = 1';
$where = 'p.nomenclatureValidee = 1';
if (array_key_exists('categorie_article', $param['parametres']) and $param['parametres']['categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat.id = ".$param['parametres']['categorie_article'];
//$qb->join('x.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$qb->join('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$where .= " AND cat.id = :categorie";
//$parametres['categorie']=$param['parametres']['categorie_article'];
if (array_key_exists('sous_categorie_article', $param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat2.id = ".$param['parametres']['sous_categorie_article'];
/*
$qb->join('x.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$qb->join('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat2.id = :categorie2";
$parametres['categorie2']=$param['parametres']['sous_categorie_article'];
*/
}
if (array_key_exists('sous_sous_categorie_article', $param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
$datatable->addJoin('p.articleCategorie', 'ac3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac3.categorie', 'cat3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
}
}
if (array_key_exists('marque', $param['parametres']) and $param['parametres']['marque'] != "") {
$where .= " AND m.id = ".$param['parametres']['marque'];;
}
if (array_key_exists('type', $param['parametres']) and $param['parametres']['type'] != "") {
$where .= " AND t.id = ".$param['parametres']['type'];
}
if (array_key_exists('atelier', $param['parametres']) and $param['parametres']['atelier'] != "") {
$where .= " AND at.id = ".$param['parametres']['atelier'];
}
//echo "TEST ".$where;
if ( ! empty($where)) {
$datatable->setWhere($where);
}
//$datatable->setOrder('p.reference', 'ASC');
//$datatable->setOrder('c.reference', 'ASC');
//$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
return $datatable;
}
/**
* @Route("/carnet-fabrication-v2/grid", name="dtc_carnet_fabrication_liste_grid_v2")
*/
public function carnetFabricationGridV2Action(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableCarnetFabricationV2($request, $datatable, $translator)->execute();
}
}