<?php
namespace App\Controller\Articles;
use App\Entity\Articles\Article;
use App\Entity\Articles\ArticleComposant;
use App\Entity\Articles\ConditionAchat;
use App\Entity\Articles\MouvementStock;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Form\Articles\MouvementStockSimplifieType;
use App\Service\Articles\ArticleService;
use App\Service\Articles\MouvementStockService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class MouvementStockSimplifieController extends AbstractController
{
/**
* @Route("/mouvement-stock-simplifie", name="dtc_mouvement_stock_simplifie_scan")
*/
public function scanAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$repo_article = $em->getRepository(Article::class);
$errors = [];
//25112020
if($request->isMethod('POST')) {
$bp = '';
$scan = trim($request->request->get('scan'));
if($scan != '')
{
//$article_obj = $repo_article->findOneBy(array("reference"=>$scan));
$article_obj = $em->getRepository(Article::class)->getArticleParReferenceV2($scan);
}
if(is_object($article_obj))
{
return $this->redirectToRoute('dtc_mouvement_stock_simplifie', ["id" =>$article_obj->getId()]);
}
else {
$route = $this->generateUrl('dtc_mouvement_stock_simplifie_scan', []);
$message = '<br/>Article introuvable ! <br/> Vous allez être automatiquement redirigé dans 5 secondes. <br/> <div style="text-align:center;margin-top:5px;"><a id="lien_suivant" href="'.$route.'">Ne pas attendre</a></div>';
$this->addFlash( 'warning',$translator->trans($message));
//$this->addFlash('notice',$translator->trans('Aucun BP à emballer!'));
return $this->redirectToRoute('dtcfo_interface_simplifie_validation', ["type" =>"scanArticle",]);
}
}
else
{
return $this->render('Articles/MouvementStockSimplifie/scan.html.twig', []);
}
return $this->render('Articles/MouvementStockSimplifie/scan.html.twig', ["errors" =>$errors]);
}
/**
* @Route("/mouvement-stock-simplifie/{id}", name="dtc_mouvement_stock_simplifie")
*/
public function ajouterAction(Request $request, Article $article, $modal='', EntityManagerInterface $em, ArticleService $articleService, MouvementStockService $mouvementStockService, TranslatorInterface $translator, ValidatorInterface $validator) {
//$modal = $request->query->get('modal');
$user = $this->getUser();
$ms = new MouvementStock();
$ms->setArticle($article);
$ms->setUtilisateur($user);
$form = $this->createForm(MouvementStockSimplifieType::class, $ms);
$errors = "";
$pump2 = $em->getRepository(Article::class)->getPumpR($article->getId());
if($pump2 == 0) $pump2 = $articleService->getPrixAchatNetEuro($article->getId());
$cpump2 = $em->getRepository(Article::class)->getPumpC($article->getId());
//graphiques
$variationsStock = $em->getRepository(MouvementStock::class)->getVariationsStockParMois($article->getId(), 12);
$variationsPump = $em->getRepository(MouvementStock::class)->getVariationsPumpParMois($article->getId(), 12);
$variationsCpump = $em->getRepository(MouvementStock::class)->getVariationsCpumpParMois($article->getId(), 12);
$repoArticleCommande = $em->getRepository(ArticleCommande::class);
$ralClient = $repoArticleCommande->getRalClient($article);
$total_devise = $repoArticleCommande->getDevisArticle($article);
//reservations de stock
$repo_article_composant = $em->getRepository(ArticleComposant::class);
//$composants = $repo_article_composant->findByArticle($article);
$composants = $repo_article_composant->getComposantsComposeVirtuel($article)->getQuery()->getResult();
$reservations = $repoArticleCommande->getRalClientEtCmdAssociees($article, $composants);
$reservationsFabrications = $repoArticleCommande->getReservationsFabrications($article, $composants);
//\Doctrine\Common\Util\Debug::dump($reservations);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$dernierMouvement = $em->getRepository(MouvementStock::class)->findOneBy(['article' =>$article], ['id' => 'DESC']);
$dernierMouvementDate = $em->getRepository(MouvementStock::class)->getDernierMouvementDateHeure($article->getId(),$ms->getDateMvt());
//$prixUnitaire = $dernierMouvementDate["pump"];
//$stockValorisation = $dernierMouvementDate["stock"];
$dernierMouvement= $em->getRepository(MouvementStock::class)->find($dernierMouvementDate["id"]);
if(is_object($dernierMouvement)) {
//$ms->setPrixAchat($dernierMouvement->getPrixAchat());
$prixRegulation = 0;
if($dernierMouvement->getCpump() != NULL && $dernierMouvement->getCpump() != "") {
$prixRegulation = $dernierMouvement->getCpump();
}
else if($dernierMouvement->getAnnexe() != NULL && $dernierMouvement->getAnnexe() != "") {
$prixRegulation = $dernierMouvement->getAnnexe();
}
else {
$repo_condha =$em->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" =>$article, "defaut" =>1]);
if(is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if($condHa->getCoefficientConditionnement() != 0) $prix = $prix / $condHa->getCoefficientConditionnement();
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if(is_object($fournisseur)) $devise = $fournisseur->getDevise();
if(is_object($devise) && $devise->getTauxChange() != 0) $tauxChange = $devise->getTauxChange();
$prix = $prix * $tauxChange;
$prixRegulation = $prix;
}
else {
$condHa = $repo_condha->findOneBy(["article" =>$article]);
if(is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if($condHa->getCoefficientConditionnement() != 0) $prix = $prix / $condHa->getCoefficientConditionnement();
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if(is_object($fournisseur)) $devise = $fournisseur->getDevise();
if(is_object($devise) && $devise->getTauxChange() != 0) $tauxChange = $devise->getTauxChange();
$prix = $prix * $tauxChange;
$prixRegulation = $prix;
}
}
}
//$ms->setPrixAchat($dernierMouvement->getPrixAchat());
//$ms->setPrixSansRemise($dernierMouvement->getPrixSansRemise());
$ms->setPrixAchat($prixRegulation);
$ms->setPrixSansRemise($prixRegulation);
//$ms->setRemise($dernierMouvement->getRemise());
//$ms->setRemiseSuppl($dernierMouvement->getRemiseSuppl());
}
//echo $user->getEmail();
$ms->setUtilisateur($user);
$mouvementStockService->sauvegarder($ms, $article,"regulation");
$route = "";
$route = $this->generateUrl('dtc_mouvement_stock_simplifie_scan', []);
$message = '<br/>Mise à jour du stock réalisé avec succès ! <br/> Vous allez être automatiquement redirigé dans 5 secondes. <br/> <div style="text-align:center;margin-top:5px;"><a id="lien_suivant" href="'.$route.'">Ne pas attendre</a></div>';
$this->addFlash( 'notice',$translator->trans($message));
return $this->redirectToRoute('dtcfo_interface_simplifie_validation', ["type" =>"emballage"]);
//return $this->redirectToRoute('dtc_article_modifier',array('id' => $article->getId(), 'pump2' => $pump2, 'tab' => 'stocks', 'variationsStock' => $variationsStock, 'variationsPump' => $variationsPump));
//return $this->redirectToRoute('dtc_article_modifier',array('id' => $article->getId(), 'tab' => 'stocks'));
}
else {
$errors = $validator->validate($ms);
//return $this->redirectToRoute('dtc_article_modifier',array('id' => $article->getId(),'forms'=>$form,'tab'=>'stocks', 'pump2' => $pump2, 'variationsStock' => $variationsStock, 'variationsPump' => $variationsPump, 'variationsCpump' => $variationsCpump));
}
}
return $this->render('Articles/MouvementStockSimplifie/ajouter.html.twig', [
'form' => $form->createView(),
'errors'=>$errors,
'article'=>$article,
'pump2' => $pump2,
'variationsStock' => $variationsStock,
'variationsPump' => $variationsPump,
'variationsCpump' => $variationsCpump,
'ralClient'=>$ralClient,
'reservations'=>$reservations,
'reservationsFabrications' => $reservationsFabrications,
'modal' => $modal,
'total_devise'=>$total_devise,
'composants' => $composants
]);
}
}