<?php
namespace App\Controller\Inventaires;
use App\Entity\Articles\Article;
use App\Entity\FO\Societe;
use App\Entity\Inventaires\ArticleInventaire;
use App\Entity\Inventaires\Inventaire;
use App\Entity\Inventaires\Type;
use App\Entity\Rangements\Emplacement;
use App\Form\Inventaires\ArticleInventaireType;
use App\Form\Inventaires\InventaireType;
use App\Form\Inventaires\SupprimerInventaireType;
use App\Form\Inventaires\ValoriserInventaireType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Articles\MouvementStockService;
use App\Service\Inventaires\InventaireService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class InventaireController extends AbstractController
{
/**
* @Route("/inventaire/nouveau", name="dtc_inventaire_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$user = $this->getUser();
$inventaire = new Inventaire();
$inventaire->setUtilisateur($user);
$form = $this->createForm(InventaireType::class, $inventaire);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($inventaire);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Inventaire ajouté avec succès !')
);
return $this->redirectToRoute('dtc_inventaire_liste');
} else {
$errors = $validator->validate($inventaire);
}
}
return $this->render('Inventaires/Inventaire/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'inventaire' => $inventaire]);
}
/**
* @Route("/inventaire/modifier/{id}", name="dtc_inventaire_modifier")
*/
public function modifierAction(Request $request, Inventaire $inventaire, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$user = $this->getUser();
$inventaire->setUtilisateur($user);
$form = $this->createForm(InventaireType::class, $inventaire);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Inventaire::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_inventaire_modifier', ["id" => $inventaire->getId()]);
}
if ($form->isValid()) {
if ($request->request->get('annuler') != '' && ! is_object($inventaire->getDateCloture())) {
$em->remove($inventaire);
$em->flush();
return $this->redirectToRoute('dtc_inventaire_liste');
}
$em->persist($inventaire);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Inventaire modifié avec succès !')
);
return $this->redirectToRoute('dtc_inventaire_modifier', ["id" => $inventaire->getId()]);
} else {
$errors = $validator->validate($inventaire);
}
}
return $this->render('Inventaires/Inventaire/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'inventaire' => $inventaire]);
}
/**
* @Route("/inventaire", name="dtc_inventaire_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
/*
$builder = new ProcessBuilder();
//$builder->setPrefix('../');
$builder->setArguments(array('php', '../app/console', 'ajouter:articleInventaire'));
$builder->getProcess()->start();
*/
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "id"),
];
$tableau_class_cellule[] = [
"className" => " visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "date"),
];
$tableau_class_cellule[] = [
"className" => " visible_export colonne_id text-center",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "dateCloture"),
];
$tableau_class_cellule[] = [
"className" => " visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "libelle"),
];
$tableau_class_cellule[] = [
"className" => " visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "type"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [6], "visible" => true];
$this->datatable($datatable, $translator);
return $this->render('Inventaires/Inventaire/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(Inventaire::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Date de clôture") => 'x.dateCloture',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Type") => 't.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.type', 't')
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_inventaire_modifier',
],
],
1 => ['view' => 'FO/DataTable/date.html.twig'],
2 => ['view' => 'FO/DataTable/date.html.twig'],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_inventaire_modifier',
'progressbar' => 1,
],
],
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_inventaire_modifier',
'objet' => Inventaire::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_inventaire_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true);
$datatable->setSearchFields([3]);
return $datatable;
}
/**
* @Route("/inventaire/grid", name="dtc_inventaire_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/inventaire/nouveau-modal", name="dtc_inventaire_ajouter_modal")
*/
public function ajouterModalAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
set_time_limit(300);
$repo_type = $em->getRepository(Type::class);
$repo_emplacement = $em->getRepository(Emplacement::class);
$repo_article = $em->getRepository(Article::class);
$user = $this->getUser();
$inventaire = new Inventaire();
$inventaire->setUtilisateur($user);
$errors = "";
$titre_modal = $translator->trans('Nouvel inventaire');
$modificationFormulaire = $request->request->get('modificationFormulaire');
$typeId = $request->request->get('dtc_inventairesbundle_inventaire', ['type'=>''])['type'];
if ($typeId != '' && $modificationFormulaire == 'true') {
$type = $repo_type->find($typeId);
if (is_object($type)) {
$inventaire->setType($type);
}
}
$form = $this->createForm(InventaireType::class, $inventaire);
if ($modificationFormulaire != 'true') {
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$inventaire->setEnCoursTraitement(1);
if (is_object($inventaire->getType()) && in_array($inventaire->getType()->getId(), [1, 3, 4])) {
$emplacement = $inventaire->getEmplacement();
if (is_object($emplacement)) {
$niveau1 = $emplacement->getNiveauUn();
if ( ! is_object($niveau1)) {
$inventaire->setEmplacement(null);
}
}
} else {
$inventaire->setEmplacement(null);
}
$em->persist($inventaire);
$em->flush();
//$builder = new ProcessBuilder();
//$builder->setPrefix('../');
//$builder->setArguments(array('php', '../app/console', 'ajouter:articleInventaire', $inventaire->getId()));
//$builder->getProcess()->start();
/*
$count = 0;
//Ajouter les articles inventaire à l'inventaire
if(is_object($inventaire->getType()) && $inventaire->getType()->getId() == 1){//par emplacement
$emplacement = $inventaire->getEmplacement();
$articles = $repo_article->getArticlesAinventorierParEmplacement($emplacement, $inventaire->getDateMouvement());
$recherche = array();
if(is_object($emplacement->getNiveauUn())) $recherche['niveauUn'] = $emplacement->getNiveauUn();
if(is_object($emplacement->getNiveauDeux())) $recherche['niveauDeux'] = $emplacement->getNiveauDeux();
if(is_object($emplacement->getNiveauTrois())) $recherche['niveauTrois'] = $emplacement->getNiveauTrois();
if(is_object($emplacement->getNiveauQuatre())) $recherche['niveauQuatre'] = $emplacement->getNiveauQuatre();
foreach($articles as $article){
//Rechercher les emplacements
$recherche['article'] = $article['id'];
$emplacements = $repo_emplacement->findBy($recherche);
foreach($emplacements as $emplacement){
$articleInventaire = new ArticleInventaire();
$articleInventaire->setArticle($emplacement->getArticle());
$articleInventaire->setEmplacement($emplacement);
$articleInventaire->setStock($emplacement->getStock());
$articleInventaire->setStockArticle($emplacement->getArticle()->getStock());
$articleInventaire->setInventaire($inventaire);
//$inventaire->addArticleInventaire($articleInventaire);
$em->persist($articleInventaire);
}
if($count > 100){
$em->flush();
$count = 0;
} else {
$count++;
}
}
} else if (is_object($inventaire->getType()) && $inventaire->getType()->getId() == 2){//sans emplacement
$articles = $repo_article->getArticlesAinventorierSansEmplacement($inventaire->getDateMouvement());
//\Doctrine\Common\Util\Debug::dump(count($articles));
foreach($articles as $article){
$objet = $repo_article->find($article['id']);
if(is_object($objet)){
$articleInventaire = new ArticleInventaire();
$articleInventaire->setArticle($objet);
$articleInventaire->setStock($objet->getStock());
$articleInventaire->setStockArticle($objet->getStock());
$articleInventaire->setInventaire($inventaire);
//$inventaire->addArticleInventaire($articleInventaire);
$em->persist($articleInventaire);
}
if($count > 100){
$em->flush();
$count = 0;
} else {
$count++;
}
}
} else if (is_object($inventaire->getType()) && $inventaire->getType()->getId() == 3){//par marque
$articles = $repo_article->getArticlesAinventorierParMarque($inventaire->getMarque()->getId(), $inventaire->getDateMouvement());
foreach($articles as $article){
$objet = $repo_article->find($article['id']);
$emplacements = $objet->getEmplacements();
if(count($emplacements) > 0){
foreach($emplacements as $emplacement){
$articleInventaire = new ArticleInventaire();
$articleInventaire->setArticle($objet);
$articleInventaire->setEmplacement($emplacement);
$articleInventaire->setStock($emplacement->getStock());
$articleInventaire->setStockArticle($objet->getStock());
$articleInventaire->setInventaire($inventaire);
//$inventaire->addArticleInventaire($articleInventaire);
$em->persist($articleInventaire);
}
} else {
$articleInventaire = new ArticleInventaire();
$articleInventaire->setArticle($objet);
$articleInventaire->setStock($objet->getStock());
$articleInventaire->setStockArticle($objet->getStock());
$articleInventaire->setInventaire($inventaire);
$em->persist($articleInventaire);
}
if($count > 100){
$em->flush();
$count = 0;
} else {
$count++;
}
}
}
$em->flush();
*
*/
$this->addFlash(
'notice',
$translator->trans('Inventaire ajouté avec succès !')
);
//$url = $this->generateUrl('dtc_inventaire_modifier', array('id'=>$inventaire->getId()));
$url = $this->generateUrl('dtc_inventaire_liste');
return new JsonResponse([
'rendu' => '',
'valide' => '1',
'url' => $url,
'titre' => '',
]);
} else {
$errors = $validator->validate($inventaire);
}
}
}
$rendu = $this->renderView('Inventaires/Inventaire/ajouter-modal.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'inventaire' => $inventaire,
]);
//return $this->render('Inventaires/Inventaire/ajouter-modal.html.twig', array('form' => $form->createView(),'errors'=>$errors,'inventaire'=>$inventaire));
return new JsonResponse(
[
'rendu' => $rendu,
'valide' => '0',
'url' => '',
'titre' => $titre_modal,
]
);
}
/**
* @Route("/inventaire/{id}/PDF/fiche-comptage", name="dtc_inventaire_pdf_fiche_comptage")
*/
public function ficheComptagePdfAction(Request $request, Inventaire $inventaire, Pdf $snappy)
{
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
//$societe = $em->getRepository('DTCFOBundle:Societe')->find(1);
$chemin_pdf = 'PDF/Inventaires/'.$date.'/inventaire-'.$inventaire->getId().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
$footer = $this->renderView('FO/PDF/footer_inventaire_pagination_pdf.html.twig', []);//'societe' => $societe
$header = $this->renderView('FO/PDF/header_inventaire_pdf.html.twig', ['inventaire' => $inventaire]);//'societe' => $societe,
$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
$snappy->setOption('margin-bottom', "10");
//$snappy->setOption('margin-top',"25");
/*
foreach($inventaire->getArticleInventaire() as $articleInventaire){
$emplacement = $articleInventaire->getEmplacement();
if(is_object($emplacement)){
$articlesParEmplacements[$emplacement->getLibelle()][] = $articleInventaire;
} else {
$reference = $articleInventaire->getArticle()->getReference();
$articlesParEmplacements[$reference][] = $articleInventaire;
}
ksort($articlesParEmplacements, SORT_FLAG_CASE);
}
*
*/
$articlesParEmplacements = $inventaire->getArticleInventaire();
// return $this->render('Inventaires/Inventaire/template_pdf_fiche_comptage.html.twig', array(
// 'inventaire' => $inventaire,
// 'articlesParEmplacements' => $articlesParEmplacements,
// ));
$snappy->generateFromHtml(
$this->renderView(
'Inventaires/Inventaire/template_pdf_fiche_comptage.html.twig',
[
'inventaire' => $inventaire,
'articlesParEmplacements' => $articlesParEmplacements,
//'societe' => $societe
]
),
$chemin_pdf
);
return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
}
/**
* @Route("/inventaire/{id}/basculer", name="dtc_inventaire_basculer")
*/
public function basculerAction(Request $request, Inventaire $inventaire, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$aiSsQte = [];
$user = $this->getUser();
$inventaire->setUtilisateur($user);
$errors = "";
$titre_modal = 'Clôturer l\'inventaire';
$form = $this->createForm(ValoriserInventaireType::class);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$inventaire->setABasculer(true);
$inventaire->setDateCloture(new \DateTime);
$em->persist($inventaire);
$em->flush();
$process = new Process(['php', 'bin/console', 'basculer:inventaire', $inventaire->getId()]);
$process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
$process->setOptions(['create_new_console' => true]);
$process->start();
$this->addFlash(
'notice',
$translator->trans('Cet inventaire est en cours de clôture. Vous serez averti dès la fin de la clôture.')
);
//sleep(5);
$url = $this->generateUrl('dtc_inventaire_modifier', ['id' => $inventaire->getId()]);
return new JsonResponse([
'rendu' => '',
'valide' => '1',
'url' => $url,
'titre' => '',
]);
} else {
$errors = $validator->validate($inventaire);
}
} else {
foreach ($inventaire->getArticleInventaire() as $articleInventaire) {
//var_dump($articleInventaire->getStockReleve());
if ($articleInventaire->getStockReleve() === null) {
/*
$this->addFlash(
'warning',
'Vous n\'avez pas renseigné de quantité pour certains articles.'.$articleInventaire->getNumerotation()
);
*
*/
$aiSsQte[] = $articleInventaire->getNumerotation();
//if(count($aiSsQte) >= 5) break;
}
}
}
$rendu = $this->renderView('Inventaires/Inventaire/basculer-modal.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'aiSsQte' => $aiSsQte,
'inventaire' => $inventaire,
]);
return new JsonResponse(
[
'rendu' => $rendu,
'valide' => '0',
'url' => '',
'titre' => $titre_modal,
]
);
}
/**
* @Route("/inventaire/{id}/ajouter-article", name="dtc_inventaire_ajouter_article")
*/
public function ajouterArticleAction(Request $request, Inventaire $inventaire, EntityManagerInterface $em, MouvementStockService $mvtStockService, ValidatorInterface $validator)
{
$repo_type = $em->getRepository(Type::class);
$repo_emplacement = $em->getRepository(Emplacement::class);
$repo_article = $em->getRepository(Article::class);
$repo_article_inventaire = $em->getRepository(ArticleInventaire::class);
$user = $this->getUser();
$articleInventaire = new ArticleInventaire();
$articleInventaire->setInventaire($inventaire);
$inventaire->setUtilisateur($user);
$errors = "";
$titre_modal = 'Ajouter un article sur l\'inventaire';
$form = $this->createForm(ArticleInventaireType::class, $articleInventaire);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$article = $articleInventaire->getArticle();
if (is_object($article)) {
if (is_object($articleInventaire->getEmplacement())) {
//Récupérer le stock de l'article au moment de l'inventaire
$stockArticle = $mvtStockService->getStockArticleAuneDate($article->getId(), '', $inventaire->getDate());
$articleInventaire->setStockArticle($stockArticle);
$emplacement = $repo_emplacement->findOneBy([
'niveauUn' => $articleInventaire->getEmplacement()->getNiveauUn(),
'niveauDeux' => $articleInventaire->getEmplacement()->getNiveauDeux(),
'niveauTrois' => $articleInventaire->getEmplacement()->getNiveauTrois(),
'niveauQuatre' => $articleInventaire->getEmplacement()->getNiveauQuatre(),
'article' => $article,
'visibilite' => true,
]);
$stockReleve = $articleInventaire->getStockReleve();
if (is_object($emplacement)) {
//Si cet article, à cet emplacement, existe déjà on ne peux pas le rajouter --> message d'erreur
$articleInventaireExistant = $repo_article_inventaire->findOneBy([
'inventaire' => $inventaire,
'article' => $article,
'emplacement' => $emplacement,
]);
if (is_object($articleInventaireExistant)) {
$errors[] = ['message' => 'Cet article est déjà présent sur l\'inventaire'];
}
//Si emplacement existe recuperer le stock de cet emplacement au moment de l'inventaire
$stock = $mvtStockService->getStockArticleAuneDate($article->getId(), $emplacement->getId(), $inventaire->getDate());
//$emplacement->setStock($stockReleve);
$em->persist($emplacement);
//Attacher l'emplacement à l'article inventaire
$articleInventaire->setEmplacement($emplacement);
} elseif (is_object($articleInventaire->getEmplacement()) && is_object($articleInventaire->getEmplacement()->getNiveauUn())) {
$emplacement = new Emplacement;
//$emplacement->setArticle($article);//La liaison à l'article se fait uniquement à la clôture de l'inventaire
$emplacement->setNiveauUn($articleInventaire->getEmplacement()->getNiveauUn());
$emplacement->setNiveauDeux($articleInventaire->getEmplacement()->getNiveauDeux());
$emplacement->setNiveauTrois($articleInventaire->getEmplacement()->getNiveauTrois());
$emplacement->setNiveauQuatre($articleInventaire->getEmplacement()->getNiveauQuatre());
$emplacement->setUtilisateur($user);
$em->persist($emplacement);
//Stock
//$stock = 0;
//$stock = $article->getStock();
$stock = $stockArticle;
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true, 'visibilite' => true]);
if ( ! is_object($emplacementPardefaut)) {
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
}
if (is_object($emplacementPardefaut)) {
//$stock = $emplacementPardefaut->getStock();
$stock = $mvtStockService->getStockArticleAuneDate($article->getId(), $emplacementPardefaut->getId(), $inventaire->getDate());;
$articleInventaire->setEmplacement($emplacementPardefaut);
} else {
$articleInventaire->setEmplacement(null);
}
//
//$emplacement->setStock($stockReleve);
//dump($emplacement);
//$articleInventaire->setEmplacement($emplacement);
$articleInventaire->setNouvelEmplacement($emplacement);
} else {
$articleInventaire->setEmplacement(null);
$stock = $stockArticle;
}
$articleInventaire->setStock($stock);
}
}
$marque = $inventaire->getMarque();
if (is_object($marque)) {
$article->setMarque($marque);
}
$em->persist($inventaire);
//numeroter l'articleInventaire
$numero = count($inventaire->getArticleInventaire());
$numero++;
$numerotation = $inventaire->getId().'-'.str_pad($numero, 6, "0", STR_PAD_LEFT);
$articleInventaire->setNumerotation($numerotation);
$em->persist($articleInventaire);
if ($errors == '') {
$em->flush();
$this->addFlash(
'notice',
'Article ajouté à l\'inventaire avec succès !'
);
//return $this->redirectToRoute('dtc_inventaire_modifier', array('id'=>$inventaire->getId()));
$url = $this->generateUrl('dtc_inventaire_modifier', ['id' => $inventaire->getId()]);
return new JsonResponse([
'rendu' => '',
'valide' => '1',
'url' => $url,
'titre' => '',
]);
}
} else {
$errors = $validator->validate($inventaire);
}
}
$rendu = $this->renderView('Inventaires/Inventaire/ajouter-article.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'inventaire' => $inventaire,
]);
//return $this->render('Inventaires/Inventaire/ajouter-modal.html.twig', array('form' => $form->createView(),'errors'=>$errors,'inventaire'=>$inventaire));
return new JsonResponse(
[
'rendu' => $rendu,
'valide' => '0',
'url' => '',
'titre' => $titre_modal,
]
);
}
/**
* @Route("/inventaire/{id}/differences", name="dtc_inventaire_differences")
*/
public function differencesAction(Request $request, Inventaire $inventaire, EntityManagerInterface $em, TranslatorInterface $translator)
{
$titre_modal = $translator->trans("Différence de stock");
$valid = '0';
if ($request->isMethod('POST')) {
$type = "valorisation";
$suffixe = "aaaa";
$param = $request->request->all();
//$param['inventaire'] = $inventaire;
//$this->pdfValorisationAction($suffixe,$param,false);
$url = $this->generateUrl('dtc_inventaire_differences_pdf', ['id' => $inventaire->getId(), 'param' => $param, 't' => time()]);
//$valid = '1';
} else {
$type = "";
$url = "";
$valid = '0';
}
$rendu = $this->renderView('Articles/Stock/valorisation.html.twig', [
'inventaire' => $inventaire,
]);
return new JsonResponse(['rendu' => $rendu, 'valide' => $valid, 'url' => $url, 'titre' => $titre_modal, 'type' => $type]);
}
/**
* @Route("/inventaire/{id}/differences/pdf", name="dtc_inventaire_differences_pdf")
*/
public function pdfDifferencesAction(Request $request, Inventaire $inventaire, $retour = true, EntityManagerInterface $em, Pdf $snappy)
{
$param = $request->query->all();
$societe = $em->getRepository(Societe::class)->find(1);
$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
//$header = $this->renderView('FO/PDF/header_bl_pdf.html.twig', array('societe' => $societe,'commande' => $bonPreparation));
$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',"10");
//$snappy->setOption('zoom', 1 );
//$snappy->setOption('dpi', 300 );
$order = $param['param']['tri'];
$articlesInventaire = $em->getRepository(ArticleInventaire::class)->getDifferences($inventaire->getId(), $order)->getQuery()->getResult();;
$chemin_pdf = 'PDF/STOCK/DIFFERENCE-INVENTAIRE'.$inventaire->getId().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
$snappy->generateFromHtml(
$this->renderView(
'Inventaires/Inventaire/difference_inventaire_template_pdf.html.twig',
[
'societe' => $societe,
'articlesInventaire' => $articlesInventaire,
'parametres' => $param['param'],
'inventaire' => $inventaire,
]
),
$chemin_pdf
);
if ($retour == true) {
return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
}
}
/**
* @Route("/inventaire/{id}/pourcentage-traitement", name="dtc_inventaire_pourcentage_traitement")
*/
public function pourcentageTraitementAction(Request $request, Inventaire $inventaire, InventaireService $service)
{
$pourcentageTraitement = $service->pourcentageTraitement($inventaire);
$response = new JsonResponse();
$response->setData([
'pourcentageTraitement' => $pourcentageTraitement,
]);
return $response;
}
/**
* @Route("/inventaire/process/lancer", name="dtc_inventaire_process_lancer")
*/
public function lancerProcessInventaireAction(Request $request)
{
/*
$builder = new ProcessBuilder();
$builder->setArguments(array('php', '../app_dev.php/app/console', 'ajouter:articleInventaire'));
$builder->getProcess()->start();
*
*/
// TODO Refactor Command
$process = new Process(['nohup php', 'bin/console', 'ajouter:articleInventaire x &']);
$process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
$process->setOptions(['create_new_console' => true]);
$process->start();
sleep(1);
//exec('nohup php ../app/console ajouter:articleInventaire &');
$response = new JsonResponse();
$response->setData([
'message' => 'lancement du process inventaire.'.$message,
]);
return $response;
}
/**
* @Route("/inventaire/{id}/supprimer", name="dtc_inventaire_supprimer")
*/
public function supprimerAction(Request $request, Inventaire $inventaire, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$message = 'Vous vous apprêtez à supprimer l\'inventaire "'.$inventaire->getLibelle().'" du '.$inventaire->getDate()->format('d/m/Y H:i').', souhaitez vous continuer ?';
$user = $this->getUser();
$nonSupprimable = false;
$errors = "";
if (is_object($inventaire->getDateCloture())) {
$errors[]['message'] = 'Cet inventaire est clôturé. Vous ne pouvez pas le supprimer!';
$nonSupprimable = true;
}
$form = $this->createForm(SupprimerInventaireType::class, $inventaire);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($inventaire);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Inventaire supprimé avec succès !')
);
$url = $this->generateUrl('dtc_inventaire_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($inventaire);
$rendu = $this->renderView(
'FO/Supprimer/supprimer.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $inventaire->getId(), 'type' => '', 'messageModal' => $message]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', [
'form' => $form->createView(),
'id' => $inventaire->getId(),
'type' => '',
'errors' => $errors,
'messageModal' => $message,
'nonSupprimable' => $nonSupprimable,
]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}