<?php
namespace App\Controller\Projets;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Kanban\Fiche;
use App\Entity\Projets\Domaine;
use App\Entity\Projets\ProjetDomaine;
use App\Entity\Remises\Remise;
use App\Form\Projets\DomaineModalType;
use App\Form\Projets\DomaineType;
use App\Form\Projets\SupprimerDomaineType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
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 DomaineController extends AbstractController
{
/**
* @Route("/projet/domaine/nouveau", name="dtc_projet_domaine_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouveau domaine");
$repo_domaine = $em->getRepository(Domaine::class);
$get = $request->query->all();
$domaine = new Domaine();
$parentId = $request->query->get('parent');
if ($parentId == '') {
$parentId = 1;
}//par defaut le parent est la domaine racine.
if ($parentId != '') {
$parent = $repo_domaine->find($parentId);
if (is_object($parent)) {
$titre_modal .= ' enfant de '.$parent->getLibelle().'('.$parent->getReference().')';
$domaine->setDomaineParent($parent);
}
}
$user = $this->getUser();
//$marche->setUtilisateur($user);
$form = $this->createForm(DomaineType::class, $domaine);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$url = "";
$em->persist($domaine);
$em->flush();
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Domaine ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($domaine);
$rendu = $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'domaine' => $domaine]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'domaine' => $domaine]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Articles/Marche/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/projet/domaine/modifier/{id}", name="dtc_projet_domaine_modifier")
*/
public function modifierAction(Request $request, Domaine $domaine, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Modifier domaine");
$get = $request->query->all();
$user = $this->getUser();
// $origineCommande->setUtilisateur($user);
$form = $this->createForm(DomaineType::class, $domaine);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
// TODO refactor this
$droit = $this->isGranted(EntityVoter::UPDATE, Domaine::class);
/*
if(!$droit) {
$rendu = $this->renderView('GestionComerciale/Origine/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'));
}
*/
$url = "";
if ($form->isValid()) {
$em->persist($domaine);
$em->flush();
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Domaine modifié avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($domaine);
$rendu = $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'domaine' => $domaine]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
//die;
$rendu = $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'domaine' => $domaine]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '01', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Articles/Marche/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/projet/domaine/{page}", name="dtc_projet_domaine_liste", defaults={"page":1})
*/
public function listerAction(Request $request, $page, ColonneTableauService $serviceColonneTableau, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "id")];
$tableau_class_cellule[] = [
"className" => "colonne_libelle",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "libelle"),
];
$tableau_class_cellule[] = [
"className" => "colonne_libelle",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "parent"),
];
$tableau_class_cellule[] = [
"className" => "colonne_statut",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "statut"),
];
//$this->datatable();
return $this->render('Projets/Domaine/lister.html.twig', ['name' => 'domaine', 'tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(Domaine::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Parent") => 'p.libelle',
$translator->trans("Statut Web") => 'x.statut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.domaineParent', 'p', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_projet_domaine_modifier',
],
],
3 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_projet_domaine_changer_statut',
],
],
4 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_projet_domaine_modifier',
'supprimer_route' => 'dtc_projet_domaine_supprimer',
'type' => "",
'objet' => Domaine::class,
'entite' => 'domaine',
'table' => 'dtc-domaine',
//'ajouterDomaine' => true
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_projet_domaine_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([2, 3]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/domaine/grid", name="dtc_projet_domaine_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/projet/domaine/recherche", name="dtc_projet_domaine_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$parent = $request->query->get('par');
$repo = $em->getRepository(Domaine::class);
$results = $repo->getRechercheDomaine($q, $parent);
//$results = array();
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1) /*page number*/,
10 /*limit per page*/
);
$pagination_results = $pagination->getItems();
$option_placeholde = ["libelle" => "Sélectionnez", "id" => ""];
if ($request->query->getInt('page', 1) == 1) {
array_unshift($pagination_results, $option_placeholde);
}
$pagination->setItems($pagination_results);
//dump($results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
/**
* @Route("/projet/domaine/statut/{id}", name="dtc_projet_domaine_changer_statut")
*/
public function changeStatutAction(Request $request, Domaine $domaine, EntityManagerInterface $em)
{
if ($domaine->getStatut() == 1) {
$domaine->setStatut(0);
} else {
$domaine->setStatut(1);
}
$em->persist($domaine);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1'], 200, $headers);
}
//\Doctrine\Common\Util\Debug::dump($tabDomaines);
/**
* @Route("/checkbox/projet/domaine", name="dtc_projet_domaine_checkbox")
*/
public function listerDomaineCheckboxAction(Request $request, $commande = [], EntityManagerInterface $em)
{
$id = '';
$repo_commande = $em->getRepository(Commande::class);
$repo_domaine = $em->getRepository(Domaine::class);
$repo_projet_domaine = $em->getRepository(ProjetDomaine::class);
$id = $request->query->get('id');
$url = $this->generateUrl('dtc_projet_domaine_checkbox', []);
if ($request->query->get('commande') != '') {
$commande = $repo_commande->find($request->query->get('commande'));
}
$domaines = $repo_domaine->getDomaineEnfant($id);
$tabDomaines = [];
foreach ($domaines as $c) {
$c['checked'] = 0;
$c['totalSousDomaine'] = count($repo_domaine->findBy(["domaineParent" => $c]));
$c['selection'] = 0;
if (is_object($commande) and is_object($repo_projet_domaine->findOneBy(['commande' => $commande, 'domaine' => $c]))) {
$c['checked'] = 1;
}
$tabDomaines[] = $c;
}
$domaines = $tabDomaines;
if ($request->isXmlHttpRequest()) {
$rendu = $this->renderView('Projets/Domaine/checkbox.html.twig', ['domaines' => $domaines, 'commande' => $commande, 'url' => $url, 'objet' => 'commande']);
return new JsonResponse(['rendu' => $rendu]);
}
return $this->render('Projets/Domaine/checkbox.html.twig', ['domaines' => $domaines, 'commande' => $commande, 'url' => $url, 'objet' => 'commande']);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableProduits(Datatable $datatable, TranslatorInterface $translator, $domaine)
{
$datatable
->setDatatableId('dta-produits')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Img") => 'x.reference',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Marque") => 'm.libelle',
$translator->trans("Desc courte") => 'x.descriptionCourte',
$translator->trans("Prix HT") => 'x.prixVente',
$translator->trans("Prix TTC") => 'x.prixVente',
$translator->trans("Marge") => 'x.marge',
$translator->trans("Cump") => 'x.cpump',
$translator->trans("Stock") => 'x.stock',
$translator->trans("Statut Internet") => 'x.statut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.commandeDomaine', 'ac', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setWhere(
'ac.domaine = :domaine',
['domaine' => $domaine]
)
->addJoin('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
],
],
1 => [
'view' => 'FO/DataTable/image.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
],
],
6 => [
'view' => 'FO/DataTable/prixSuivi.html.twig',
'params' => [
'surveillance' => false,
],
],
7 => [
'view' => 'FO/DataTable/prix_commande_ttc.html.twig',
],
8 => [
'view' => 'FO/DataTable/prix.html.twig',
],
9 => [
'view' => 'FO/DataTable/prix.html.twig',
],
11 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_commande_changer_statut',
],
],
12 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
'dupliquer_route' => 'dtc_commande_dupliquer',
'objet' => Commande::class,
],
],
]
)->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/domaine/produits/grid/{id}", name="dtc_projet_domaine_produits_liste_grid")
*/
public function gridProduitsAction(Request $request, Domaine $domaine, Datatable $datatable, TranslatorInterface $translator)
{
//$this->datatableProduits($domaine);
return $this->datatableProduits($datatable, $translator, $domaine)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableRemises(Datatable $datatable, TranslatorInterface $translator, $domaine)
{
$datatable
->setDatatableId('dta-remises')
->setEntity(Remise::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.remiseDomainecommande', 'rca', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setWhere(
'rca.domaine = :domaine',
['domaine' => $domaine]
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_remise_modifier',
],
],
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_remise_modifier',
'objet' => Remise::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("", name="")
*/
public function gridRemisesAction(Request $request, Domaine $domaine, Datatable $datatable, TranslatorInterface $translator)
{
//$this->datatableRemises($domaine);
return $this->datatableRemises($datatable, $translator, $domaine)->execute();
}
/**
* @Route("", name="")
*/
public function listerDomaineDossierAction(Request $request, $commandeId = '', EntityManagerInterface $em)
{
$repo_commande = $em->getRepository(Commande::class);
$repo_domaine = $em->getRepository(Domaine::class);
$repo_projet_domaine = $em->getRepository(ProjetDomaine::class);
$commande = $repo_commande->find($commandeId);
$commandeDomaines = [];
if (is_object($commande)) {
$domainesCommande = $repo_projet_domaine->findBy(['commande' => $commandeId], ['position' => 'ASC']);
foreach ($domainesCommande as $domainecommande) {
$commandeDomaines[] = $domainecommande->getDomaine()->getId();
}
}
//\Doctrine\Common\Util\Debug::dump($commandeId);
$domaines = $repo_domaine->findBy(['domaineParent' => 1], ['position' => 'ASC']);//DomaineParent
return $this->render('Projets/Domaine/lister-dossier.html.twig', [
'nbDomainesEnfant' => [],
'domaines' => $domaines,
'commande' => $commande,
'domainesCommande' => $commandeDomaines,
'mode' => '',
'move' => true,
]);
}
/**
* @Route("", name="")
*/
public function listerDomaineDossierRemiseAction(Request $request, $remise = null, EntityManagerInterface $em)
{
$repo_remise = $em->getRepository(Remise::class);
$remise = $repo_remise->find($remise);
$repo_domaine = $em->getRepository(Domaine::class);
$nbDomainesEnfant = [];
$remiseDomaines = [];
if (is_object($remise)) {
//$domainesRemise = $repo_projet_domaine->findBycommande($commandeId);
foreach ($remise->getRemiseDomainecommande() as $domaineRemise) {
$boucler = true;
$remiseDomaines[] = $domaineRemise->getDomaine()->getId();
if (is_object($domaineRemise->getDomaine()->getDomaineParent()) and $domaineRemise->getDomaine()->getDomaineParent()->getId() > 1) {
$parent = $domaineRemise->getDomaine()->getDomaineParent();
while ($boucler) {
if ( ! array_key_exists($parent->getId(), $nbDomainesEnfant)) {
$nbDomainesEnfant[$parent->getId()] = 1;
} else {
$nbDomainesEnfant[$parent->getId()]++;
}
if (is_object($parent->getDomaineParent()) and $parent->getDomaineParent()->getId() > 1) {
$parent = $parent->getDomaineParent();
} else {
$boucler = false;
}
}
}
}
}
//print_r($nbDomainesEnfant);
//\Doctrine\Common\Util\Debug::dump($commandeId);
$domaines = $repo_domaine->findBy(['domaineParent' => 1], ['libelle' => 'ASC']);//DomaineParent
return $this->render(
'Projets/Domaine/lister-dossier-remise.html.twig',
['nbDomainesEnfant' => $nbDomainesEnfant, 'domaines' => $domaines, 'remise' => $remise, 'domainesRemise' => $remiseDomaines]
);
}
/**
* @Route("", name="")
*/
public function listerDomaineDossiercommandeAction(Request $request, $id = null, $type = "commande", $mode = "", EntityManagerInterface $em)
{
//dump($commande);
$objet = null;
if ($type == 'fiche') {
$objet = $em->getRepository(Fiche::class)->find($id);
} else {
$objet = $em->getRepository(Commande::class)->find($id);
}
$repo_domaine = $em->getRepository(Domaine::class);
$repo_projet_domaine = $em->getRepository(ProjetDomaine::class);
$nbDomainesEnfant = [];
$commandeDomaines = [];
if (is_object($objet)) {
//$domainesCommande = $repo_projet_domaine->findBycommande($commandeId);
foreach ($objet->getProjetDomaines() as $domainecommande) {
if ($domainecommande->getStatut()) {
$boucler = true;
$count = 0;
//$commandeDomaines[] = $domainecommande->getDomaine()->getId();
$commandeDomaines[$domainecommande->getDomaine()->getId()] = $domainecommande;
if (is_object($domainecommande->getDomaine()->getDomaineParent()) and $domainecommande->getDomaine()->getDomaineParent()->getId() > 1) {
$parent = $domainecommande->getDomaine()->getDomaineParent();
while ($boucler) {
$count++;
if ( ! array_key_exists($parent->getId(), $nbDomainesEnfant)) {
$nbDomainesEnfant[$parent->getId()] = 1;
} else {
$nbDomainesEnfant[$parent->getId()]++;
}
if (is_object($parent->getDomaineParent()) and $parent->getDomaineParent()->getId() > 1) {
$parent = $parent->getDomaineParent();
} else {
$boucler = false;
}
if ($count > 100) {
break;
}
}
}
}
}
}
//print_r($nbDomainesEnfant);
//\Doctrine\Common\Util\Debug::dump($commandeId);
$domaines = $repo_domaine->findBy(['domaineParent' => 1], ['position' => 'ASC']);//DomaineParent
return $this->render('Projets/Domaine/lister-dossier.html.twig', [
'nbDomainesEnfant' => $nbDomainesEnfant,
'domaines' => $domaines,
'objet' => $objet,
'type' => $type,
'domainesCommande' => $commandeDomaines,
'mode' => $mode,
]);
}
/**
* @Route("/projet/domaine/supprimer/{id}", name="dtc_projet_domaine_supprimer")
*/
public function supprimerAction(Request $request, Domaine $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation.");
$user = $this->getUser();
$message = '';
$errorsSup = [];
//Verifier si la domaine a des produits
if (count($objet->getProjetDomaines()) > 0) {
$errorsSup[] = 'Le domaine n\'est pas supprimable car il est lié à des projets.';
}
//Verifier si la domaine a des domaines enfantes
if (count($objet->getDomainesEnfant()) > 0) {
//if ($message != '') $message .= ' ';
$errorsSup[] = 'Le domaine n\'est pas supprimable car il contient des domaines enfants';
}
$form = $this->createForm(SupprimerDomaineType::class, $objet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted() && count($errorsSup) == 0) {
if ($form->isValid()) {
$em->remove($objet);
$em->flush();
$this->addFlash('notice', $translator->trans('Domaine supprimé avec succès !'));
$url = $this->generateUrl('dtc_projet_domaine_liste');
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($objet);
$rendu = $this->renderView(
'Projets/Domaine/supprimer.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'errorsSup' => $errorsSup, 'message' => $message]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Projets/Domaine/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'errorsSup' => $errorsSup, 'message' => $message]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/projet/domaine/enfants", name="dtc_projet_lister_domaine_enfant_liste")
*/
public function listerDomaineEnfantListeAction(Request $request, EntityManagerInterface $em)
{
$id = $request->query->get('id');
$repo_domaine = $em->getRepository(Domaine::class);
$rendu = "";
$domaines = $repo_domaine->getDomaineEnfant($id);
$rendu .= '<option value="">Sélectionnez</option>';
foreach ($domaines as $e) {
$rendu .= '<option value="'.$e['id'].'">';
$rendu .= $e['libelle'];
$rendu .= '</option>';
}
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/projet/domaine/gerer", name="dtc_gerer_cat")
*/
public function gererDomaineAction(Request $request, EntityManagerInterface $em)
{
$repo_commande = $em->getRepository(Commande::class);
$repo_cat = $em->getRepository(Domaine::class);
$repo_cat_commande = $em->getRepository(ProjetDomaine::class);
$commandes = $repo_commande->findall();
foreach ($commandes as $commande) {
$commandeCat = $commande->getProjetDomaines();
foreach ($commandeCat as $AC) {
if ($AC->getDomaine()->getParent()->getId() == 1) {
} else {
$newAC = new ProjetDomaine();
$newAC->setcommande($commande);
$newAC->setDomaine($AC->getDomaine()->getParent());
$newAC->setPosition(0);
echo "nouvelle liasion : ";
$em->persist($newAC);
$em->flush();
}
}
}
return new Response("ok");
}
/**
* @Route("/projet/domaine/changer/positions/ajax", name="dtc_projet_domaine_change_positions")
*/
public function changerPositionsAjaxAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$repo_cat = $em->getRepository(Domaine::class);
$errors = [];
$positions = $request->request->get('positions');
//var_dump($positions);
if (count($positions)) {
foreach ($positions as $key => $position) {
$domaine = $repo_cat->find($position);
if (is_object($domaine)) {
$domaine->setPosition($key);
$em->persist($domaine);
}
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Positions modifiées avec succès !')
);
}
$rendu = $this->renderView('layout-errors.html.twig', ['errors' => $errors]);
return new JsonResponse(['rendu' => $rendu,]);
}
/**
* @Route("/projet/domaine/ajouter/modal", name="dtc_projet_domaine_ajouter_modal")
*/
public function ajouterModalAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$repo_domaine = $em->getRepository(Domaine::class);
$titre_modal = $translator->trans("Créer un nouveau domaine");
$errors = "";
$errorsSup = [];
$domaine = new Domaine;
$parentId = $request->query->get('parent');
if ($parentId == '') {
$parentId = 1;
}//par defaut le parent est la domaine racine.
if ($parentId != '') {
$parent = $repo_domaine->find($parentId);
if (is_object($parent)) {
$titre_modal .= ' enfant de '.$parent->getLibelle().'('.$parent->getReference().')';
$domaine->setDomaineParent($parent);
}
}
$user = $this->getUser();
//$domaine->setUtilisateur($user);
$form = $this->createForm(DomaineModalType::class, $domaine);
$form->handleRequest($request);
//verifier si la domaine existe
$catTmp = $repo_domaine->findBy([
'domaineParent' => $domaine->getDomaineParent(),
'reference' => $domaine->getReference(),
]);
if (count($catTmp) > 0) {
$errorsSup[] = 'Cette référence de domaine existe déjà!';
}
if ($form->isSubmitted()) {
if ($form->isValid() && count($catTmp) == 0) {
$em->persist($domaine);
$em->flush();
/*
$em->persist($domaine);
$em->flush();
*
*/
/*
$tokenP = $request->request->get('tokenPicture');
$this->addFlash(
'notice',
$$tokenP
);
$logoService->sauvegarder($domaine,'domaine',$tokenP);
*
*/
$url = $this->generateUrl('dtc_projet_domaine_liste', []);
//$url="";
$this->addFlash(
'notice',
$translator->trans('Domaine ajouté avec succès !')
);
return new JsonResponse(
['rendu' => '', 'errorsSup' => $errorsSup, 'valide' => '1', 'url' => $url, 'type' => '', 'libelle' => '']
);
} else {
$errors = $validator->validate($domaine);
}
}
$rendu = $this->renderView(
'Projets/Domaine/ajouter-modal.html.twig',
['form' => $form->createView(), 'errorsSup' => $errorsSup, 'errors' => $errors, 'domaine' => $domaine]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/associer-domaine/domaine/{domaine}/{type}/{id}/statut/{statut}", name="dtc_projet_associer_domaine_ajax")
*/
public function associerProjetDomaineAction(Request $request, Domaine $domaine, $type = 'commande', $id, $statut, EntityManagerInterface $em)
{
$repo_projet_domaine = $em->getRepository(ProjetDomaine::class);
$objet = null;
if ($type == 'fiche') {
$objet = $em->getRepository(Fiche::class)->find($id);
} else {
$objet = $em->getRepository(Commande::class)->find($id);
}
$projetDomaine = $repo_projet_domaine->findOneBy([$type => $id, 'domaine' => $domaine]);
if ($statut == 'majPourcentage') {
if ( ! is_object($projetDomaine)) {
$projetDomaine = new ProjetDomaine;
if ($type == 'fiche') {
$projetDomaine->setFiche($objet);
}
if ($type == 'commande') {
$projetDomaine->setCommande($objet);
}
$projetDomaine->setDomaine($domaine);
}
if ($request->query->get('pourcentage') != '') {
$projetDomaine->setPourcentage($request->query->get('pourcentage'));
}
$em->persist($projetDomaine);
} elseif ($statut == 'add') {
if ( ! is_object($projetDomaine)) {
$projetDomaine = new ProjetDomaine;
if ($type == 'fiche') {
$projetDomaine->setFiche($objet);
}
if ($type == 'commande') {
$projetDomaine->setCommande($objet);
}
$projetDomaine->setDomaine($domaine);
if ($request->query->get('pourcentage') != '') {
$projetDomaine->setPourcentage($request->query->get('pourcentage'));
}
}
$projetDomaine->setStatut(true);
$em->persist($projetDomaine);
} else {
if (is_object($projetDomaine)) {
$projetDomaine->setStatut(false);
//$em->remove($projetDomaine);
}
}
//$em->persist($commande);
$em->flush();
$response = new JsonResponse;
$response->setData([
//'commande'=>$projet->getId(),
'domaine' => $domaine->getId(),
'statut' => $statut,
]);
return $response;
}
}