<?php
namespace App\Controller\Articles;
use App\Entity\Articles\Article;
use App\Entity\Articles\ConditionAchat;
use App\Entity\Fournisseurs\Fournisseur;
use App\Form\Articles\ConditionAchatType;
use App\Form\Articles\SupprimerConditionAchatType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Articles\ArticleService;
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\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ConditionAchatController extends AbstractController
{
/**
* @Route("/article/achat/prix/{id}/{fournisseur}", name="dtc_condition_achat_prix_fournisseur")
*/
public function getPrixArticleConditionAchatAction(Fournisseur $fournisseur, Article $article, $quantite)
{
$prix = "";
$reference = "";
$delai = '';
foreach ($article->getConditionsAchat() as $c) {
//echo "<div>TEST ==> ".$fournisseur->getId()." ::: </div>";
if ($fournisseur->getId() == $c->getFournisseur()->getId()) {
$prix = $c->getPrixAchatNet();
$prix = number_format($prix, 2, '.', ' ');
$prix .= " €";
$reference = $c->getReferenceFournisseur();
$delai = $c->getDelai();
}
}
return new JsonResponse([
'prix' => $prix,
'reference' => $reference,
'delai' => $delai,
'conditionnement' => $conditionnement,
],
200,
['Content-Type' => 'application/json']);
}
/**
* @Route("/condition-achat/nouveau/{id}/{type}", name="dtc_condition_achat_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, ArticleService $articleService, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Nouvelle condition d'achat");
$repo_objet = $em->getRepository(Article::class);
$get = $request->query->all();
$conditionAchat = new ConditionAchat();
$objet = $repo_objet->find($id);
if (is_object($objet)) {
$conditionAchat->setArticle($objet);
$conditionAchat->setLibelle($objet->getLibelle());
}
$user = $this->getUser();
$conditionAchat->setUtilisateur($user);
$form = $this->createForm(ConditionAchatType::class, $conditionAchat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
//Calcul du prix achat net
if ( ! $conditionAchat->getPrixNet()) {
$prixAchatNet = $conditionAchat->getPrixAchatBrut() * (1 - ($conditionAchat->getTauxRemise() / 100)) * (1 - ($conditionAchat->getTauxRemiseSupplementaire() / 100));
$coefficient = $conditionAchat->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $conditionAchat->getFraisAnnexes();
$conditionAchat->setPrixAchatNet($prixAchatNet);
}
//Calcul du coefficient
/*
if($prixAchatNet > 0){
$coefficient = $conditionAchat->getPrixAchatBrut() / $prixAchatNet;
$conditionAchat->setCoefficient($coefficient);
}
*
*/
if ($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$objet = $repo_objet->find($id);
if (is_object($objet)) {
$conditionAchat->setArticle($objet);
if ($conditionAchat->getDefaut() == true) {
if (count($objet->getConditionsAchat()) > 0) {
foreach ($objet->getConditionsAchat() as $condition) {
if ($condition->getDefaut() == 1) {
$condition->setDefaut(false);
$em->persist($condition);
}
}
}
$conditionAchat->setDefaut(true);
//Mise à jour de l'article
//$objet->setPrixBase($prixAchatNet);
/*
if($objet->getMajPrix() == 1)
$articleService->majEnFonctionDuPrixAchat($objet, $conditionAchat->getPrixAchatBrut());
*/
}
}
$url = $this->generateUrl('dtc_article_modifier', ['id' => $objet->getId(), 'tab' => 'conditions']);
}
$em->persist($conditionAchat);
//$em->persist($objet);
$em->flush();
if ($type == 'article') {
$em->refresh($conditionAchat);
$message_historique = [];
$message_historique["titre"] = "Création d'une nouvelle condition d'achat pour le fournisseur ".$conditionAchat->getFournisseur()->getLibelle();
$message_historique["message"] = $conditionAchat->getReferenceFournisseur()." (id : ".$conditionAchat->getId().")";
$articleService->creerHistorique($objet, 'defaut', $message_historique);
}
if (is_object($conditionAchat->getArticle())) {
$articleService->majEnFonctionDuPrixAchat($conditionAchat->getArticle());
$articleService->setFournisseurDefaut($conditionAchat->getArticle());
}
//$articleService->setFournisseurDefaut($objet);
$articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
$retour = ['rendu' => '', 'valide' => '1', 'url' => $url];
if (array_key_exists('table', $get) && $get["table"] != "") {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $get["table"];
if ($type == 'article' && is_object($objet)) {
$em->refresh($objet);
$retour['prixBase'] = $objet->getPrixBase();
}
return new Response(json_encode($retour));
} else {
$this->addFlash('notice', 'Condition d\'achat ajoutée avec succès !');
return new Response(json_encode($retour));
}
} else {
$errors = $validator->validate($conditionAchat);
$rendu = $this->renderView(
'Articles/ConditionAchat/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'conditionAchat' => $conditionAchat]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Articles/ConditionAchat/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'conditionAchat' => $conditionAchat]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Articles/ConditionAchat/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/condition-achat/modifier/{objet}/{id}/{type}", name="dtc_condition_achat_modifier")
*/
public function modifierAction(Request $request, ConditionAchat $objet, $id, $type, EntityManagerInterface $em, ArticleService $articleService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$conditionAchat = $objet;
$titre_modal = $translator->trans("Modifier la condition d'achat");
$get = $request->query->all();
$user = $this->getUser();
$conditionAchat->setUtilisateur($user);
$form = $this->createForm(ConditionAchatType::class, $conditionAchat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, ConditionAchat::class);
/*
if(!$droit) {
$rendu = $this->renderView('Articles/ConditionAchat/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
*/
if ($form->isValid()) {
if ( ! $conditionAchat->getPrixNet()) {
$prixAchatNet = $conditionAchat->getPrixAchatBrut() * (1 - ($conditionAchat->getTauxRemise() / 100)) * (1 - ($conditionAchat->getTauxRemiseSupplementaire() / 100));
$coefficient = $conditionAchat->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $conditionAchat->getFraisAnnexes();
$conditionAchat->setPrixAchatNet($prixAchatNet);
}
/*
if($prixAchatNet > 0){
$coefficient = $conditionAchat->getPrixAchatBrut() / $prixAchatNet;
$conditionAchat->setCoefficient($coefficient);
}
*
*/
if ($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$article = $repo_objet->find($id);
if (is_object($article)) {
$conditionAchat->setArticle($article);
if ($conditionAchat->getDefaut() == true) {
if (count($article->getConditionsAchat()) > 0) {
foreach ($article->getConditionsAchat() as $condition) {
if ($condition->getDefaut() == 1) {
$condition->setDefaut(false);
$em->persist($condition);
}
}
}
$conditionAchat->setDefaut(true);
//Mise à jour de l'article
//$article->setPrixBase($prixAchatNet);
/*
if($article->getMajPrix() == 1)
$articleService->majEnFonctionDuPrixAchat($article, $conditionAchat->getPrixAchatBrut());
*/
}
}
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'conditions']);
}
if ($type == 'fournisseur') {
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $id, 'tab' => 'conditions']);
}
if ($type == 'commandeFournisseur') {
$url = $this->generateUrl('dtc_commande_fournisseur_modifier', ['id' => $id]);
}
$em->persist($conditionAchat);
$em->flush();
if ($type == 'article') {
$em->refresh($conditionAchat);
$message_historique = [];
$message_historique["titre"] = "Modification d'une condition d'achat pour le fournisseur ".$conditionAchat->getFournisseur()->getLibelle();
$message_historique["message"] = $conditionAchat->getReferenceFournisseur()." (id : ".$conditionAchat->getId().")";
$articleService->creerHistorique($objet->getArticle(), 'defaut', $message_historique);
}
if (is_object($conditionAchat->getArticle())) {
$articleService->majEnFonctionDuPrixAchat($conditionAchat->getArticle());
$articleService->setFournisseurDefaut($conditionAchat->getArticle());
}
$articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
$retour = ['rendu' => '', 'valide' => '1', 'url' => $url];
if (array_key_exists('table', $get) && $get["table"] != "") {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $get["table"];
if ($type == 'article' && is_object($article)) {
$em->refresh($article);
$retour['prixBase'] = $article->getPrixBase();
}
return new JsonResponse($retour);
} else {
$this->addFlash('notice', 'Condition d\'achat modifiée avec succès !');
return new JsonResponse($retour);
}
} else {
$errors = $validator->validate($conditionAchat);
$rendu = $this->renderView(
'Articles/ConditionAchat/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'conditionAchat' => $conditionAchat]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Articles/ConditionAchat/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'conditionAchat' => $conditionAchat]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/condition-achat/supprimer/{objet}/{id}/{type}", name="dtc_condition_achat_supprimer")
*/
public function supprimerAction(Request $request, ConditionAchat $objet, $id, $type, EntityManagerInterface $em, ArticleService $articleService,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$conditionAchat = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$get = $request->query->all();
$user = $this->getUser();
$form = $this->createForm(SupprimerConditionAchatType::class, $conditionAchat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$article = $conditionAchat->getArticle();
$em->remove($conditionAchat);
$em->flush();
if (is_object($article)) {
$articleService->majEnFonctionDuPrixAchat($article);
$articleService->setFournisseurDefaut($article);
}
$url = "";
if ($type == 'article') {
$url = $this->generateUrl('dtc_article_modifier', ['id' => $id, 'tab' => 'conditions']);
}
$retour = ['rendu' => '', 'valide' => '1', 'url' => $url];
$articleService->majrefAppelFourSurArticle($conditionAchat->getArticle()->getId());
if (array_key_exists('table', $get) && $get["table"] != "") {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $get["table"];
if (is_object($article)) {
$em->refresh($article);
$retour['prixBase'] = $article->getPrixBase();
}
return new JsonResponse($retour);
} else {
$this->addFlash('notice', 'Condition d\'achat supprimée avec succès !');
return new JsonResponse($retour);
}
} else {
$errors = $validator->validate($conditionAchat);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/condition-achat/charger-tableau/{id}/{type}", name="dtc_condition_achat_charger_tableau")
* @Route("/condition/charger-tableau/{id}/{type}", name="dtc_condition_charger_tableau")
*/
public function chargerTableauAction(Request $request, $id = "0", $type = "a")
{
$rendu = $this->renderView('Articles/ConditionAchat/charger_tableau.html.twig', ["id" => $id, "type" => $type]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/condition-achat", name="dtc_condition_achat_liste")
*/
public function listerAction(Request $request, $id = "0", $type = "a", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [0], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [1], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id", "targets" => [2], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id ", "targets" => [3], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-right", "targets" => [4], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [5], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [6], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [7], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [8], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-right", "targets" => [9], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [10], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-right", "targets" => [11], "visible" => true];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [12], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "searchable" => false, "className" => " colonne_id text-center", "targets" => [13], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "searchable" => false, "className" => " colonne_id text-center", "targets" => [14], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "searchable" => false, "className" => " colonne_id text-center", "targets" => [15], "visible" => true];
$modal = $request->query->get('modal');
$articleId = $request->query->get('id');
$qte = $request->query->get('qte');
if ($type == "article") {
$repo_objet = $em->getRepository(Article::class);
}
if ($type == "fournisseur") {
$repo_objet = $em->getRepository(Fournisseur::class);
}
$objet = $repo_objet->find($id);
if ($articleId != '') {
$article = $repo_objet->find($articleId);
if ($modal == 1 && is_object($article)) {
$titre_modal = 'Conditions d\'achat';
$this->datatableArticle($article, $type, $datatable, $translator);
$rendu = $this->renderView(
'Articles/ConditionAchat/lister.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $articleId, "type" => $type, 'qte' => $qte]
);
//$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
if (is_object($objet)) {
if ($type == "article") {
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id text-center", "targets" => [0], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [1], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id", "targets" => [2], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id", "targets" => [3], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-right", "targets" => [4], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [5], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [6], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [7], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [8], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-right", "targets" => [9], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-right", "targets" => [10], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-right", "targets" => [11], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-left", "targets" => [12], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-center", "targets" => [13], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-center", "targets" => [14], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-center", "targets" => [15], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export text-center", "targets" => [16], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export", "targets text-center" => [17], "visible" => true];
$tableau_class_cellule[] = ["orderable" => true, "className" => "colonne_id visible_export", "targets text-center" => [18], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id visible_export ", "targets" => [19], "visible" => true];
$this->datatableArticle($objet, $type, $datatable, $translator);
} elseif ($type == "fournisseur") {
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id", "targets" => [0], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id", "targets" => [1], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id", "targets" => [2], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [3], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [4], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [5], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [6], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-right", "targets" => [7], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [8], "visible" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export colonne_id text-center", "targets" => [9], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id visible_export text-right", "targets" => [10], "visible" => true];
$this->datatableFournisseur($objet, $type, $datatable, $translator);
}
return $this->render('Articles/ConditionAchat/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
} else {
$this->datatable($datatable, $translator);
return $this->render('Articles/ConditionAchat/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
}
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setDatatableId('dta-condition-achat')
->setEntity(ConditionAchat::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
//$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setRenderers(
[
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_garantie_modifier',
//'supprimer_route' => 'dtc_garantie_supprimer',
'entite' => 'garantie',
'objet' => ConditionAchat::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 4]);
return $datatable;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableFournisseur($objet, $type = "", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-condition-achat-fournisseur')
->setEntity(ConditionAchat::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'a.reference',
$translator->trans("Réf fourn") => 'x.referenceFournisseur',
$translator->trans("Libellé") => 'a.libelle',
$translator->trans("Qté mini cond") => 'x.quantite',
$translator->trans("Qté mini art") => 'a.seuilMiniCommandeFournisseur',
$translator->trans("Qté maxi art") => 'a.seuilMaxiCommandeFournisseur',
$translator->trans("Conditionnement") => 'x.conditionnement',
$translator->trans("Prix achat brut") => 'x.prixAchatBrut',
$translator->trans("Tx remise") => 'x.tauxRemise',
$translator->trans("Tx remise suppl.") => 'x.tauxRemiseSupplementaire',
$translator->trans("Prix achat net") => 'x.prixAchatNet',
//$translator->trans("Fournisseur") => 'f.libelle',
//$translator->trans("Devise") => "d.name",
$translator->trans("Défaut") => 'x.defaut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.devise', 'd', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'x.fournisseur = :objet',
['objet' => $objet]
)
->setRenderers(
[
/*
1 => array(
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => array(
'edit_route' => 'dtc_article_modifier',
'id' => '',
'type' => $type,
//'entite' => 'article',
//'objet' => "DTCArticlesBundle:Article",
'typeDocument' => 'article'
),
),
*
*/
2 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_condition_achat_modifier',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'garantie',
'objet' => ConditionAchat::class,
'affichage' => 'item',
],
],
7 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'arrondi' => 3,
'afficher_total' => false,
],
],
10 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'arrondi' => 3,
'afficher_total' => false,
],
],
11 => [
'view' => 'FO/DataTable/booleen.html.twig',
],
12 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_condition_achat_modifier',
'supprimer_route' => 'dtc_condition_achat_supprimer',
'id' => $objet->getId(),
'type' => $type,
'table' => "dta-condition-achat",
'entite' => 'garantie',
'objet' => ConditionAchat::class
,
'width_modal' => 800,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
//->setFilteringType(array(2 => 'f',3 => 'e'))
->setSearchFields([1, 2, 3, 6, 7, 8, 9, 10]);
return $datatable;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableArticle($objet, $type = "", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-condition-achat')
->setEntity(ConditionAchat::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date de màj") => 'x.dateMaj',
$translator->trans("màj prix") => 'x.dateMajPrix',
$translator->trans("Fournisseur") => 'f.libelle',
$translator->trans("Réf fourn.") => 'x.referenceFournisseur',
$translator->trans("Prix base") => 'x.prixAchatBrut',
$translator->trans("Remise") => 'x.tauxRemise',
$translator->trans("Remise suppl.") => 'x.tauxRemiseSupplementaire',
$translator->trans("Frais annexes") => 'x.fraisAnnexes',
$translator->trans("Coeff.") => 'x.coefficient',
$translator->trans("Px achat net(devise)") => 'x.prixAchatNet',
$translator->trans("Devise") => "d.name",
$translator->trans("Prix achat net(€)") => 'x.prixAchatNet',
$translator->trans("Unité d'achat") => 'u.libelle',
$translator->trans("CC") => 'x.coefficientConditionnement',
$translator->trans("Qté mini") => 'x.quantite',
$translator->trans("Cond.") => 'x.conditionnement',
$translator->trans("Délai") => 'x.delai',
$translator->trans("Défaut") => 'x.defaut',
$translator->trans("Prix net") => 'x.prixNet',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('f.devise', 'd', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.uniteMesure', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setWhere(
'x.article = :objet',
['objet' => $objet]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/date.html.twig',
],
1 => [
'view' => 'FO/DataTable/datetime.html.twig',
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_fournisseur_modifier',
'typeDocument' => 'fournisseur',
'target' => '_blank',
],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['arrondi' => 3, "afficher_total" => false],
],
8 => [
'view' => 'FO/DataTable/num2chiffres.html.twig',
],
9 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['arrondi' => 3, "afficher_total" => false],
],
11 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'conversion' => '*',
'forceEuro' => 1,
'arrondi' => 3,
"afficher_total" => false,
],
],
17 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_condition_achat_statut',
],
],
18 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
19 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_condition_achat_modifier',
'supprimer_route' => 'dtc_condition_achat_supprimer',
'id' => $objet->getId(),
'type' => $type,
'table' => "dta-condition-achat",
'entite' => 'garantie',
'objet' => ConditionAchat::class
,
'width_modal' => 800,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)//->setSearchFields(array(1,2))
;
return $datatable;
}
/**
* @Route("/condition-achat/grid/{id}/{type}", name="dtc_condition_achat_liste_grid")
*/
public function gridAction($id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == "article") {
$repo_objet = $em->getRepository(Article::class);
} elseif ($type == "fournisseur") {
$repo_objet = $em->getRepository(Fournisseur::class);
}
$objet = $repo_objet->find($id);
if (is_object($objet) and $type == "article") {
return $this->datatableArticle($objet, $type, $datatable, $translator)->execute();
} elseif (is_object($objet) and $type == "fournisseur") {
return $this->datatableFournisseur($objet, $type, $datatable, $translator)->execute();
} else {
return $this->datatable($datatable, $translator)->execute();
}
}
/**
* @Route("/condition-achat/statut/{id}", name="dtc_condition_achat_statut")
*/
public function changeStatutAction(ConditionAchat $conditionAchat, EntityManagerInterface $em, ArticleService $articleService)
{
if ($conditionAchat->getDefaut() == 1) {
$conditionAchat->setDefaut(false);
} else {
//Changer le statut de toutes les conditions d'achat de l'article
$article = $conditionAchat->getArticle();
$conditionsAchat = $article->getConditionsAchat();
foreach ($conditionsAchat as $condition) {
if ($condition->getDefaut() == 1) {
$condition->setDefaut(false);
$em->persist($condition);
}
}
//Changer le statut de cette condition d'achat
$conditionAchat->setDefaut(true);
$em->flush();
//Modifier le fournisseur par défaut
$fournisseur = $conditionAchat->getFournisseur();
$article->setFournisseurDefaut($fournisseur);
$em->persist($article);
//Modifier l'article
if ($article->getMajPrix() == 1) {
$articleService->majEnFonctionDuPrixAchat($article, $conditionAchat->getPrixAchatBrut());
}
}
$em->persist($conditionAchat);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1', 'multiple' => '1'], 200, $headers);
}
/**
* @Route("/condition-achat/choix-auto/{fournisseur}/{article}/{quantite}", name="dtc_condition_achat_choix_auto")
*/
public function choixAutoAction($fournisseur, $article, $quantite, EntityManagerInterface $em)
{
$retour = [];
$conditionsAchat = $em->getRepository(ConditionAchat::class)->findBy([
'article' => $article,
'fournisseur' => $fournisseur,
]);
$conditionAchatActuelle = null;
$conditionAchatQteSuperieure = null;
if (count($conditionsAchat)) {
foreach ($conditionsAchat as $conditionAchat) {
$quantiteCondHa = floatval($conditionAchat->getQuantite());
if ( ! empty(floatval($conditionAchat->getCoefficientConditionnement()))) {
$quantiteCondHa = $quantiteCondHa * floatval($conditionAchat->getCoefficientConditionnement());
}
if (floatval($quantite) >= $quantiteCondHa) {
if ($conditionAchatActuelle == null) {
$conditionAchatActuelle = $conditionAchat;
}
if (floatval($conditionAchatActuelle->getprixAchatNet()) > floatval($conditionAchat->getprixAchatNet())) {
$conditionAchatActuelle = $conditionAchat;
}
}
if (floatval($quantite) < $quantiteCondHa) {
if ($conditionAchatQteSuperieure == null) {
$conditionAchatQteSuperieure = $conditionAchat;
}
$quantiteCondHaQteSuperieure = floatval($conditionAchatQteSuperieure->getQuantite());
if ( ! empty(floatval($conditionAchatQteSuperieure->getCoefficientConditionnement()))) {
$quantiteCondHaQteSuperieure = $quantiteCondHaQteSuperieure * floatval($conditionAchatQteSuperieure->getCoefficientConditionnement());
}
if ($quantiteCondHaQteSuperieure > $quantiteCondHa) {
$conditionAchatQteSuperieure = $conditionAchat;
}
}
}
}
/*
$retour = array(
'conditionAchatActuelle' => $conditionAchatActuelle,
'conditionAchatQteSuperieure' => $conditionAchatQteSuperieure,
);
*/
if (is_object($conditionAchatActuelle)) {
$retour['conditionAchatActuelle'] = [
'id' => $conditionAchatActuelle->getId(),
'prixAchatBrut' => $conditionAchatActuelle->getPrixAchatBrut(),
'remise' => floatval($conditionAchatActuelle->getRemise()),
'remiseSupplementaire' => floatval($conditionAchatActuelle->getRemiseSupplementaire()),
'referenceFournisseur' => $conditionAchatActuelle->getReferenceFournisseur(),
'libelle' => $conditionAchatActuelle->getLibelle(),
//'coefficientConditionnement' => floatval($conditionAchatActuelle->getCoefficientConditionnement()),
//'conditionnement' => floatval($conditionAchatActuelle->getConditionnement()),
'fraisAnnexes' => floatval($conditionAchatActuelle->getFraisAnnexes()),
'delai' => $conditionAchatActuelle->getDelai(),
'referenceFournisseur' => $conditionAchatActuelle->getReferenceFournisseur(),
'prixAchatNet' => $conditionAchatActuelle->getPrixAchatNet(),
];
if (in_array($conditionAchatActuelle->getCoefficientConditionnement(), ['', 0])) {
$retour['conditionAchatActuelle']['coefficientConditionnement'] = 1;
} else {
$retour['conditionAchatActuelle']['coefficientConditionnement'] = floatval($conditionAchatActuelle->getCoefficientConditionnement());
}
if (in_array($conditionAchatActuelle->getConditionnement(), ['', 0])) {
$retour['conditionAchatActuelle']['conditionnement'] = 1;
} else {
$retour['conditionAchatActuelle']['conditionnement'] = floatval($conditionAchatActuelle->getConditionnement());
}
}
if (is_object($conditionAchatQteSuperieure)) {
$retour['conditionAchatQteSuperieure'] = [
'id' => $conditionAchatQteSuperieure->getId(),
'prix' => $conditionAchatQteSuperieure->getPrixAchatNet(),
'quantite' => $conditionAchatQteSuperieure->getQuantite(),
];
}
return new JsonResponse($retour);
}
}