<?php
namespace App\Controller\Adresses;
use App\Entity\Adresses\Adresse;
use App\Entity\Articles\ArticleAutomatique;
use App\Entity\Clients\Client;
use App\Entity\Fournisseurs\Fournisseur;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Localisation\Type;
use App\Entity\Localisation\Zone;
use App\Entity\Transporteurs\Transporteur;
use App\Entity\Utilisateur\Utilisateur;
use App\Entity\Utilisateur\UtilisateurZoneGeographique;
use App\Form\Adresses\AdresseType;
use App\Form\Adresses\SupprimerAdresseType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Adresses\AdresseService;
use App\Service\Clients\ClientService;
use App\Service\Fournisseurs\FournisseurService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use DTS\eBaySDK\FileTransfer\Types\Data;
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\Security\Core\Security;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AdresseController extends AbstractController
{
/**
* @Route("/adresse/nouveau/{id}/{type}", name="dtc_adresse_ajouter")
*/
public function ajouterAction(Request $request, string $id, string $type, Security $security, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator, FournisseurService $fournisseurService, ClientService $clientService, AdresseService $adresseService
) {
$titre_modal = $translator->trans("Nouvelle adresse");
$page = $request->query->get('page');
$adresse = new Adresse();
/** @var Utilisateur $user */
$user = $security->getUser();
$adresse->setUtilisateur($user);
$get = $request->query->all();
$france = $em->getRepository(Zone::class)->find(370095);
$adresse->setPays($france);
$repo_utilisateur_zone_geographique = $em->getRepository(UtilisateurZoneGeographique::class);
$form = $this->createForm(AdresseType::class, $adresse);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$post = $request->request->all();
if ($form->isValid()) {
if ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
$adresse->setClient($objet);
$url = $this->generateUrl('dtc_client_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
} elseif ($type == 'transporteur') {
$repo_objet = $em->getRepository(Transporteur::class);
$objet = $repo_objet->find($id);
$adresse->setTransporteur($objet);
$url = $this->generateUrl('dtc_transporteur_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
$adresse->setFournisseur($objet);
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
} elseif ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$client = $objet->getClient();
$adresse->setClient($client);
$url = $this->generateUrl('dtc_client_modifier', ['id' => $client->getId(), 'tab' => 'adresses']);
}
//echo "===>";
if ( ! is_object($adresse->getPays())) {
//echo "ERREUR PAYS";
if ($post["paysSelect"] != '') {
$post["paysSelect"] = substr($post["paysSelect"], 1, -1);
$typePays = $em->getRepository(Type::class)->find(1);
$pays = new Zone();
$pays->setTitre($post["paysSelect"]);
$pays->setTitreFormat($post["paysSelect"]);
$pays->setType($typePays);
$pays->setUtilisateur($user);
$em->persist($pays);
$adresse->setPays($pays);
$post = $request->request->all();
} else {
$adresse->setPays(null);
}
} else {
$pays = $adresse->getPays();
}
if ( ! is_object($adresse->getVille())) {
if ($post["villeSelect"] != '') {
$post["villeSelect"] = substr($post["villeSelect"], 1, -1);
$post["codePostalSelect"] = substr($post["codePostalSelect"], 1, -1);
$typeVille = $em->getRepository(Type::class)->find(4);
$ville = new Zone();
$ville->setTitre($post["villeSelect"]);
$ville->setTitreFormat($post["villeSelect"]);
$ville->setCodePostal($post["codePostalSelect"]);
$ville->setType($typeVille);
if (is_object($pays)) {
$ville->setPaysId($pays);
}
$ville->setUtilisateur($user);
if ($ville->getParentId() == null and $post["dtc_adressesbundle_adresse"]['zoneLivraison'] != "") {
$zonelivraison = $post["dtc_adressesbundle_adresse"]['zoneLivraison'];
$repo_zone = $em->getRepository(Zone::class);
$newzonelivraison = $repo_zone->findOneBy(['zoneLivraison' => $zonelivraison]);
$ville->setParentId($newzonelivraison);
}
$em->persist($ville);
$adresse->setVille($ville);
$adresse->setCodePostal($ville);
$post = $request->request->all();
} else {
$adresse->setVille(null);
$adresse->setCodePostal(null);
}
} else {
$ville = $adresse->getVille();
}
//print_r($post);
// exit;
$em->persist($adresse);
$em->flush();
if ($type == 'fournisseur') {
$em->refresh($adresse);
$message_historique = [];
$message_historique["titre"] = "Création d'une nouvelle adresse";
$message_historique["message"] = $adresse->getLibelle()." (id : ".$adresse->getId().")";
$fournisseurService->creerHistorique($objet, 'defaut', $message_historique);
} elseif ($type == 'client') {
$em->refresh($adresse);
$message_historique = [];
$message_historique["titre"] = "Création d'une nouvelle adresse";
$message_historique["message"] = $adresse->getLibelle()." (id : ".$adresse->getId().")";
$clientService->creerHistorique($objet, 'defaut', $message_historique);
}
$adresseService->sauvegarderLatLngAdresse($adresse);
if (is_object($objet)) {
$this->majAdressesParDefaut($adresse, $objet, $em);
}
if ($page == 'commande' || $page == 'commandeF') {
$pays_obj = null;
$pays_id = null;
$pro = null;
$dataTva = 1;
$paysUe = "0";
if (is_object($adresse->getPays())) {
if ($adresse->getPays()->getId() != "370095" && $adresse->getPays()->getEurope()) {
$paysUe = "1";
}
if ($pro == 1 && $adresse->getPays()->getId() != "370095") {
$dataTva = 0;
}
if ($pro == 0 && $adresse->getPays()->getEurope() == false) {
$dataTva = 0;
}
$pays_obj = $adresse->getPays();
$pays_id = $adresse->getPays()->getId();
}
if (is_object($adresse->getClient()) && is_object($adresse->getClient()->getCompta()) && $adresse->getClient()->getCompta()->getTva() == 0) {
// echo "eeee";
$dataTva = 0;
}
$data_societe = "";
$data_numero = "";
$data_rue = "";
$data_complement = "";
$data_complement2 = "";
$data_cp = "";
$data_ville = "";
$data_secteur = "";
$data_secteur_libelle = "";
$data_secteur_obj = "";
$data_commercial = "";
$data_assistante_commercial = "";
$data_societe = $adresse->getSociete();
$data_numero = $adresse->getNumero();
$data_rue = $adresse->getRue();
$data_complement = $adresse->getComplement();
$data_complement_2 = $adresse->getComplement2();
if (is_object($adresse->getCodePostal())) {
$data_cp = $adresse->getCodePostal()->getCodePostal();
}
if (is_object($adresse->getVille())) {
$data_ville = $adresse->getVille()->getTitre();
}
$repo_zone = $em->getRepository(Zone::class);
if ($data_cp != "") {
$data_secteur_obj = $repo_zone->findSecteurGeograhiqueByCodePostal($data_cp, $pays_id);
//echo "XXX";
}
if ( ! is_object($data_secteur_obj) && is_object($pays_obj) && is_object($pays_obj->getSecteurGeographique())) {
$data_secteur_obj = $pays_obj;
//echo "YYYY";
}
//echo "AAAA";
if (is_object($data_secteur_obj) && is_object($data_secteur_obj->getSecteurGeographique())) {
$data_secteur = $data_secteur_obj->getSecteurGeographique()->getId();
$data_secteur_libelle = $data_secteur_obj->getSecteurGeographique()->getLibelle();
$data_assistante_commercial = $repo_utilisateur_zone_geographique->findAssistanteCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
$data_commercial = $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
}
if (is_object($data_secteur_obj) && is_object($data_secteur_obj->getSecteurGeographique())) {
$data_secteur = $data_secteur_obj->getSecteurGeographique()->getId();
$data_secteur_libelle = $data_secteur_obj->getSecteurGeographique()->getLibelle();
$data_assistante_commercial = $repo_utilisateur_zone_geographique->findAssistanteCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
$data_commercial = $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
}
$tab_rendu = [
'rendu' => '',
'valide' => '1',
'url' => '',
'type' => $request->query->get('type_adresse'),
'libelle' => $adresse->getLibelle(),
'id_adresse' => $adresse->getId(),
];
$tab_rendu['pro'] = $pro;
$tab_rendu['ue'] = $paysUe;
$tab_rendu['tva'] = $dataTva;
$tab_rendu['societe'] = $data_societe;
$tab_rendu['numero'] = $data_numero;
$tab_rendu['rue'] = $data_rue;
$tab_rendu['complement'] = $data_complement;
$tab_rendu['complement2'] = $data_complement2;
$tab_rendu['cp'] = $data_cp;
$tab_rendu['ville'] = $data_ville;
$tab_rendu['secteur'] = $data_secteur;
$tab_rendu['secteur-libelle'] = $data_secteur_libelle;
$tab_rendu['commercial'] = $data_commercial;
$tab_rendu['assistante-commercial'] = $data_assistante_commercial;
return new Response(json_encode($tab_rendu));
} else {
if (array_key_exists('table', $get) && $get["table"] != "") {
return new Response(
json_encode(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]),
200,
['Content-Type' => 'application/json']
);
} else {
$this->addFlash('notice',$translator->trans('Adresse ajoutée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
}
} else {
$errors = $validator->validate($adresse);
$rendu = $this->renderView('Adresses/Adresse/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
}
$repo_objet = $em->getRepository(Client::class);
$client = $repo_objet->find($id);
$rendu = $this->renderView('Adresses/Adresse/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'client' => $client]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Adresses/Adresse/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/adresse/modifier/{objet}/{id}/{type}", name="dtc_adresse_modifier")
*/
public function modifierAction(Request $request, Adresse $objet, $id, $type, TranslatorInterface $translator, ValidatorInterface $validator,
EntityManagerInterface $em, FournisseurService $fournisseurService, ClientService $clientService, AdresseService $adresseService
) {
$adresse = $objet;
$titre_modal = $translator->trans("Modifier adresse");
$get = $request->query->all();
/** @var Utilisateur $user */
$user = $this->getUser();
$adresse->setUtilisateur($user);
$form = $this->createForm(AdresseType::class, $adresse);
$errors = "";
$form->handleRequest($request);
$post = $request->request->all();
if ($form->isSubmitted() && $adresse->getIdPrestashop() == '') {
$droit = $this->isGranted(EntityVoter::UPDATE, Adresse::class);
if ( ! $droit) {
$rendu = $this->renderView(
'Adresses/Adresse/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
if ($form->isValid()) {
if ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
$adresse->setClient($objet);
$url = $this->generateUrl('dtc_client_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
} elseif ($type == 'transporteur') {
$repo_objet = $em->getRepository(Transporteur::class);
$objet = $repo_objet->find($id);
$adresse->setTransporteur($objet);
$url = $this->generateUrl('dtc_transporteur_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
$adresse->setFournisseur($objet);
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $objet->getId(), 'tab' => 'adresses']);
}
if ( ! is_object($adresse->getPays())) {
//echo "ERREUR PAYS";
if ($post["paysSelect"] != '') {
$post["paysSelect"] = substr($post["paysSelect"], 1, -1);
$typePays = $em->getRepository(Type::class)->find(1);
$pays = new Zone();
$pays->setTitre($post["paysSelect"]);
$pays->setTitreFormat($post["paysSelect"]);
$pays->setType($typePays);
$pays->setUtilisateur($user);
$em->persist($pays);
$adresse->setPays($pays);
$post = $request->request->all();
} else {
$adresse->setPays(null);
}
} else {
$pays = $adresse->getPays();
}
if ( ! is_object($adresse->getVille())) {
if ($post["villeSelect"] != '') {
$post["villeSelect"] = substr($post["villeSelect"], 1, -1);
$post["codePostalSelect"] = substr($post["codePostalSelect"], 1, -1);
$typeVille = $em->getRepository(Type::class)->find(4);
$ville = new Zone();
$ville->setTitre($post["villeSelect"]);
$ville->setTitreFormat($post["villeSelect"]);
$ville->setCodePostal($post["codePostalSelect"]);
$ville->setType($typeVille);
if (is_object($pays)) {
$ville->setPaysId($pays);
}
$ville->setUtilisateur($user);
$em->persist($ville);
$adresse->setVille($ville);
$adresse->setCodePostal($ville);
$post = $request->request->all();
} else {
$adresse->setVille(null);
$adresse->setCodePostal(null);
}
} else {
$ville = $adresse->getVille();
}
$em->persist($adresse);
$em->flush();
if ($type == 'fournisseur') {
$em->refresh($adresse);
$message_historique = [];
$message_historique["titre"] = "Modification d'une adresse";
$message_historique["message"] = $adresse->getLibelle()." (id : ".$adresse->getId().")";
$fournisseurService->creerHistorique($objet, 'defaut', $message_historique);
} elseif ($type == 'client') {
$em->refresh($adresse);
$message_historique = [];
$message_historique["titre"] = "Modification d'une adresse";
$message_historique["message"] = $adresse->getLibelle()." (id : ".$adresse->getId().")";
$clientService->creerHistorique($objet, 'defaut', $message_historique);
}
$adresseService->sauvegarderLatLngAdresse($adresse);
if (is_object($objet)) {
$this->majAdressesParDefaut($adresse, $objet, $em);
}
if (array_key_exists('table', $get) && $get["table"] != "") {
return new Response(
json_encode(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]),
200,
['Content-Type' => 'application/json']
);
} else {
$this->addFlash('notice',$translator->trans('Adresse modifié avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($adresse);
$rendu = $this->renderView(
'Adresses/Adresse/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'adresse' => $adresse]
);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
}
$rendu = $this->renderView(
'Adresses/Adresse/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'adresse' => $adresse]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal], 200);
}
/**
* @Route("/adresse/supprimer/{objet}/{id}/{type}", name="dtc_adresse_supprimer")
*/
public function supprimerAction(Request $request, Adresse $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$adresse = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(SupprimerAdresseType::class, $adresse);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($adresse);
$em->flush();
if ($type == 'client') {
$url = $this->generateUrl('dtc_client_modifier', ['id' => $id, 'tab' => 'adresses']);
} elseif ($type == 'transporteur') {
$url = $this->generateUrl('dtc_transporteur_modifier', ['id' => $id, 'tab' => 'adresses']);
} elseif ($type == 'fournisseur') {
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $id, 'tab' => 'adresses']);
}
if (array_key_exists('table', $get) && $get["table"] != "") {
return new Response(
json_encode(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]),
200,
['Content-Type' => 'application/json']
);
} else {
$this->addFlash('notice',$translator->trans('Adresse supprimée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($adresse);
$rendu = $this->renderView(
'FO/Supprimer/supprimer.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new Response(json_encode(['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 Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]));
}
private function datatable($objet, $type = "", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-adresses')
->setEntity(Adresse::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Numéro") => 'x.numero',
$translator->trans("Rue") => 'x.rue',
$translator->trans("Complément") => 'x.complement',
$translator->trans("Complément 2") => 'x.complement2',
$translator->trans("Code postal") => 'cp.codePostal',
$translator->trans("Ville") => 'v.titre',
$translator->trans("Pays") => 'p.titre',
$translator->trans("Facturation") => 'x.facturationDefaut',
$translator->trans("Livraison") => 'x.livraisonDefaut',
$translator->trans("Expédition Fac") => 'x.facturationExpeditionDefaut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.ville', 'v', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.codePostal', 'cp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
$type_jointure.' = :objet AND x.visible = 1',
['objet' => $objet]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/abreviation.html.twig',
'params' => [],
],
1 => [
'view' => 'FO/DataTable/abreviation.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/abreviation.html.twig',
'params' => [],
],
3 => [
'view' => 'FO/DataTable/abreviation.html.twig',
'params' => [],
],
4 => [
'view' => 'FO/DataTable/abreviation.html.twig',
'params' => [],
],
8 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
9 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
10 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
11 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_adresse_modifier',
'supprimer_route' => 'dtc_adresse_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'adresse',
'objet' => Adresse::class,
'table' => "dta-adresses",
'history' => true,
'visualiser_route' => 'dtc_adresse_visualiser_map',
],
],
/*0=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCAdressesBundle:Adresse',
'champ' => 'setLibelle',
),
),
1=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCAdressesBundle:Adresse',
'champ' => 'setNumero',
),
),
2=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCAdressesBundle:Adresse',
'champ' => 'setRue',
),
),
3=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCAdressesBundle:Adresse',
'champ' => 'setComplement',
),
),
4=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCAdressesBundle:Adresse',
'champ' => 'setComplement2',
),
),*/
]
)
->setOrder("x.id", "asc")
->setSearch(true)
->setSearchFields([]);
return $datatable;
}
/**
* @Route("/adresse/grid/{id}/{type}", name="dtc_adresse_liste_grid")
*/
public function gridAction($id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'transporteur') {
$repo_objet = $em->getRepository(Transporteur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($objet, $type, $datatable, $translator)->execute();
}
/**
* @Route("/adresse/client/{id}", name="dtc_liste_adresse_client")
*/
public function listerAdresseClientAction(Request $request, $id, EntityManagerInterface $em, ClientService $clientService)
{
$options = '';
$optionsLivraison = '';
$optionsFacturation = '';
$transporteurDefaut = '';
$optionsVehicule = '';
$ArticlesAuto = [];
$pro = "0";
$cpt = 0;
$type = $request->query->get('type');
$adresseLivraisonId = "";
$repo_client = $em->getRepository(Client::class);
$repo_adresse = $em->getRepository(Adresse::class);
$repo_commande = $em->getRepository(Commande::class);
$repo_utilisateur_zone_geographique = $em->getRepository(UtilisateurZoneGeographique::class);
$repo_zone = $em->getRepository(Zone::class);
if ($type == 'commande') {
$commande = $repo_commande->find($id);
if (is_object($commande->getAdresseLivraison())) {
$adresseLivraisonId = $commande->getAdresseLivraison()->getId();
}
$client = $commande->getClient();
} else {
$client = $repo_client->find($id);
}
$est_pro = $clientService->estPro($client);
if ($est_pro) {
$pro = "1";
}
$repoArticleAutomatique = $em->getRepository(ArticleAutomatique::class);
$ArticlesAuto = [];
if ($client->getAccepteProduitAuto() or is_null($client->getAccepteProduitAuto())) {
$ArticlesAuto = $repoArticleAutomatique->getArticlesAutomatiqueDisponible($client);
}
/*
if(is_object($client->getTypeClient())) {
if($client->getTypeClient()->getId() == "2") $pro = "1";
}
*/
$paysUe = "0";
$dataTva = 1;
$adresses = $repo_adresse->findBy(['client' => $client, 'visible' => 1]);
//foreach($client->getAdresses() as $adresse){
foreach ($adresses as $adresse) {
$selected = "";
$selectedLivraison = "";
$selectedFacturation = "";
$paysUe = "0";
$dataTva = 1;
$pays_obj = null;
$pays_id = null;
if (is_object($adresse->getPays())) {
if ($adresse->getPays()->getId() != "370095" && $adresse->getPays()->getEurope()) {
$paysUe = "1";
}
if ($pro == 1 && $adresse->getPays()->getId() != "370095") {
$dataTva = 0;
}
if ($pro == 0 && $adresse->getPays()->getEurope() == false) {
$dataTva = 0;
}
$pays_obj = $adresse->getPays();
$pays_id = $adresse->getPays()->getId();
}
//echo "BBBB ".$client->getCompta()->getId();
if (is_object($client->getCompta()) && $client->getCompta()->getTva() == 0) {
// echo "eeee";
$dataTva = 0;
}
if ($type == 'commande') {
if ($adresseLivraisonId == $adresse->getId()) {
$selected = 'selected="selected"';
}
}
if ($adresse->getLivraisonDefaut() == 1) {
$selectedLivraison = 'selected="selected"';
}
if ($adresse->getFacturationDefaut() == 1) {
$selectedFacturation = 'selected="selected"';
}
/*
if(is_object($client->)) {
}
*/
//if($cpt == 0) $selected = 'selected="selected"';
//$options .='<option '.$selected.' data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId().'">'.$adresse->getLibelle().'</option>';
$data_liv_cp = "";
$data_liv_ville = "";
$data_liv_pays = "";
$data_fac_cp = "";
$data_fac_ville = "";
$data_fac_pays = "";
$libelleAdresse = $adresse->getLibelle()." ";
//$libelleAdresse = "";
if ($adresse->getNumero() != "") {
$libelleAdresse .= $adresse->getNumero().', ';
}
if ($adresse->getRue() != "") {
$libelleAdresse .= $adresse->getRue().' ';
}
if ($adresse->getComplement() != "") {
$libelleAdresse .= $adresse->getComplement().' ';
}
if ($adresse->getComplement2() != "") {
$libelleAdresse .= $adresse->getComplement2().' ';
}
if (is_object($adresse->getCodePostal())) {
$libelleAdresse .= $adresse->getCodePostal()->getCodePostal().' ';
}
if (is_object($adresse->getVille())) {
$libelleAdresse .= $adresse->getVille()->getTitre().' ';
}
if (is_object($adresse->getPays())) {
$libelleAdresse .= $adresse->getPays()->getTitre();
}
$data_liv_societe = $adresse->getSociete();
$data_liv_numero = $adresse->getNumero();
$data_liv_rue = $adresse->getRue();
$data_liv_complement = $adresse->getComplement();
$data_liv_complement_2 = $adresse->getComplement2();
if (is_object($adresse->getCodePostal())) {
$data_liv_cp = $adresse->getCodePostal()->getCodePostal();
}
if (is_object($adresse->getVille())) {
$data_liv_ville = $adresse->getVille()->getTitre();
}
if (is_object($adresse->getPays())) {
$data_liv_pays = $adresse->getPays()->getTitre();
}
$data_fac_societe = $adresse->getSociete();
$data_fac_numero = $adresse->getNumero();
$data_fac_rue = $adresse->getRue();
$data_fac_complement = $adresse->getComplement();
$data_fac_complement_2 = $adresse->getComplement2();
if (is_object($adresse->getCodePostal())) {
$data_fac_cp = $adresse->getCodePostal()->getCodePostal();
}
if (is_object($adresse->getVille())) {
$data_fac_ville = $adresse->getVille()->getTitre();
}
if (is_object($adresse->getPays())) {
$data_fac_pays = $adresse->getPays()->getTitre();
}
$data_secteur = "";
$data_secteur_libelle = "";
$data_secteur_obj = "";
$data_commercial = "";
$data_assistante_commercial = "";
if (isset($data_fac_cp) && $data_fac_cp != "") {
$data_secteur_obj = $repo_zone->findSecteurGeograhiqueByCodePostal($data_fac_cp, $pays_id);
}
if ( ! is_object($data_secteur_obj) && is_object($pays_obj) && is_object($pays_obj->getSecteurGeographique())) {
$data_secteur_obj = $pays_obj;
//echo "AA".$data_secteur_obj->getSecteurGeographique()->getLibelle();
} else {
//echo "BB (".$data_fac_cp.") ".$data_secteur_obj->getTitre();
}
if (is_object($data_secteur_obj) && is_object($data_secteur_obj->getSecteurGeographique())) {
$data_secteur = $data_secteur_obj->getSecteurGeographique()->getId();
$data_secteur_libelle = $data_secteur_obj->getSecteurGeographique()->getLibelle();
$data_assistante_commercial = $repo_utilisateur_zone_geographique->findAssistanteCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
$data_commercial = $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
}
$options .= '<option '.$selected.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId().'">'.$libelleAdresse.'</option>';
$optionsLivraison .= '<option data-secteur-libelle="'.$data_secteur_libelle.'" data-secteur="'.$data_secteur.'" data-commercial="'.$data_commercial.'" data-assistante-commercial="'.$data_assistante_commercial.'" data-societe="'.$data_liv_societe.'" data-numero="'.$data_liv_numero.'" data-rue="'.$data_liv_rue.'" data-complement="'.$data_liv_complement.'" data-complement2="'.$data_liv_complement_2.'" data-cp="'.$data_liv_cp.'" data-ville="'.$data_liv_ville.'" data-pays="'.$data_liv_pays.'" '.$selectedLivraison.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId(
).'">'.$libelleAdresse.'</option>';
$optionsFacturation .= '<option data-secteur-libelle="'.$data_secteur_libelle.'" data-secteur="'.$data_secteur.'" data-commercial="'.$data_commercial.'" data-assistante-commercial="'.$data_assistante_commercial.'" data-societe="'.$data_fac_societe.'" data-numero="'.$data_fac_numero.'" data-rue="'.$data_fac_rue.'" data-complement="'.$data_fac_complement.'" data-complement2="'.$data_fac_complement_2.'" data-cp="'.$data_fac_cp.'" data-ville="'.$data_fac_ville.'" data-pays="'.$data_fac_pays.'" '.$selectedFacturation.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId(
).'">'.$libelleAdresse.'</option>';
//$options .='<option '.$selected.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId().'">'.$libelleAdresse.'</option>';
//$optionsLivraison .='<option '.$selectedLivraison.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId().'">'.$libelleAdresse.'</option>';
//$optionsFacturation .='<option '.$selectedFacturation.' data-tva="'.$dataTva.'" data-pro="'.$pro.'" data-ue="'.$paysUe.'" value="'.$adresse->getId().'">'.$libelleAdresse.'</option>';
$cpt++;
}
//$optionsVehicule .='<option data-km="" data-ct="" data-serie="" data-immat="" data-modele="" data-marque="" value="">Choisissez</option>';
foreach ($client->getVehiculesClient() as $vehicule) {
$selected = "";
$dataMarque = "";
$dataModele = "";
$dataLibelle = $vehicule->getLibelle();
$dataImmat = $vehicule->getImmatriculation();
$dataSerie = $vehicule->getNumSerie();
if (is_object($vehicule->getDateControleTechnique())) {
$dataCT = $vehicule->getDateControleTechnique()->format("d/m/Y");
} else {
$dataCT = "";
}
$dataKm = $vehicule->getKilometrage();
//if($cpt == 0) $selected = 'selected="selected"';
$libelleVehicule = "";
if (is_object($vehicule->getMarque())) {
$libelleVehicule .= $vehicule->getMarque()->getLibelle();
$dataMarque = $vehicule->getMarque()->getLibelle();
}
if (is_object($vehicule->getModele())) {
$libelleVehicule .= " ".$vehicule->getModele()->getLibelle();
$dataModele = $vehicule->getModele()->getLibelle();
} else {
$dataModele = $vehicule->getLibelle();
}
if ($libelleVehicule != "") {
$libelleVehicule .= " : ";
}
$libelleVehicule .= " ".$vehicule->getNumSerie();
$optionsVehicule .= '<option data-libelle="'.$dataLibelle.'" data-km="'.$dataKm.'" data-ct="'.$dataCT.'" data-serie="'.$dataSerie.'" data-immat="'.$dataImmat.'" data-modele="'.$dataModele.'" data-marque="'.$dataMarque.'" '.$selected.' value="'.$vehicule->getId(
).'">'.$dataLibelle.' ('.$dataImmat.')</option>';
$cpt++;
}
$optionsVehicule .= '<option data-km="" data-ct="" data-serie="" data-immat="" data-modele="" data-marque="" value="">Aucun</option>';
if (is_object($client->getTransporteur())) {
$transporteurDefaut = $client->getTransporteur()->getId();
}
$listeContacts = "";
$listeContacts .= '<tr class="entete-contacts">
<th>
Nom/Service
</th>
<th>
Email/Tel
</th>
</tr>';
if ($client->getEmail() != "" or $client->getTelephone() != "") {
$listeContacts .= "<tr>";
$listeContacts .= "<td>";
$listeContacts .= "</td>";
$listeContacts .= "<td>";
$listeContacts .= '<a href="mailto:'.$client->getEmail().'">'.$client->getEmail().'</a>';
if ($client->getTelephone() != "") {
$listeContacts .= ' <br/><a href="tel:'.$client->getTelephone().'">'.$client->getTelephone().'</a>';
}
$listeContacts .= "</td>";
$listeContacts .= "</tr>";
}
if (count($client->getContacts()) > 0) {
$compteur_contact = 0;
foreach ($client->getContacts() as $contact) {
$listeContacts .= "<tr>";
$listeContacts .= "<td>";
$listeContacts .= count($client->getContacts())." ".$contact->getNom()." ".$contact->getPrenom();
if ($contact->getService() != "") {
$listeContacts .= ' <br/><b>'.$contact->getService().'</b>';
}
$listeContacts .= "</td>";
$listeContacts .= "<td>";
$listeContacts .= '<a href="mailto:'.$contact->getEmail().'">'.$contact->getEmail().'</a>';
if ($contact->getTelephone() != "") {
$listeContacts .= ' <br/><a href="tel:'.$contact->getTelephone().'">'.$contact->getTelephone().'</a>';
}
$listeContacts .= "</td>";
$listeContacts .= "</tr>";
$compteur_contact++;
if ($compteur_contact > 10) {
break;
}
}
if (count($client->getContacts()) > 10) {
$plus = count($client->getContacts()) - 10;
$listeContacts .= "<tr>";
$listeContacts .= "<td colspan='2' class='text-right'>";
$url_afficher_client_contacts = $this->generateUrl('dtc_client_afficher_modal', ['id' => $client->getId(), 'tab' => 'contacts']);
$listeContacts .= "<span class='open-modal-form hand' data-width='1100' data-link='".$url_afficher_client_contacts."' data-toggle='modal' data-target='#blocModal'>+".$plus." contacts</span>";
$listeContacts .= "</td>";
$listeContacts .= "</tr>";
}
}
$referenceCommandeClientObligatoire = $client->getReferenceClientObligatoire();
return new JsonResponse(
[
'options' => $options,
'optionsVehicule' => $optionsVehicule,
'transporteurDefaut' => $transporteurDefaut,
'listeContacts' => $listeContacts,
'valide' => '0',
'referenceClientObligatoire' => $referenceCommandeClientObligatoire,
'paysUe' => $paysUe,
'pro' => $pro,
'optionsLivraison' => $optionsLivraison,
'optionsFacturation' => $optionsFacturation,
'articlesAuto' => $ArticlesAuto,
'telephone' => $client->getTelephone(),
'telephone2' => $client->getTelephone2(),
'email' => $client->getEmail(),
],
200,
['Content-Type' => 'application/json']
);
}
public function majAdressesParDefaut($adresse, $objet, EntityManagerInterface $em)
{
if (method_exists($objet, 'getAdresses') && ($adresse->getFacturationDefaut() == 1 || $adresse->getLivraisonDefaut() == 1 || $adresse->getFacturationExpeditionDefaut() == 1)) {
foreach ($objet->getAdresses() as $adress) {
if ($adresse->getFacturationDefaut() == 1 && $adresse->getId() != $adress->getId()) {
$adress->setFacturationDefaut(false);
}
if ($adresse->getLivraisonDefaut() == 1 && $adresse->getId() != $adress->getId()) {
$adress->setLivraisonDefaut(false);
}
if ($adresse->getFacturationExpeditionDefaut() == 1 && $adresse->getId() != $adress->getId()) {
$adress->setFacturationExpeditionDefaut(false);
}
$em->persist($adress);
}
$em->flush();
}
}
/**
* @Route("/adresse-map/load", name="dtc_adresse_map_load")
*/
public function mapLoadAction(Request $request, EntityManagerInterface $entityManager)
{
$donnees = $request->query->all();
$repo_adresse = $entityManager->getRepository(Adresse::class);
$adressesBrut = $repo_adresse->getAdressesMap($donnees);
$centre = ['lat' => 50.293, 'lng' => 2.7819];
$user = $this->getUser();
$adresseDepart = $repo_adresse->findOneBy(['personnel' => $user->getId(), 'depart' => true]);
if (is_object($adresseDepart)) {
$centre = ['lat' => floatval($adresseDepart->getLatitude()), 'lng' => floatval($adresseDepart->getLongitude())];
}
$adresses = [];
//$image = $this->get('templating.helper.assets')->getUrl('images/marker-test.jpg', 'DTCNoogaaBundle');
//$image = $this->get('templating.helper.assets')->getUrl('images/marker-test.jpg', 'bundles/noogaamaps/images/');
$baseurl = $request->getScheme().'://'.$request->getHttpHost().$request->getBasePath();
foreach ($adressesBrut as $adresse) {
$adresseLitterale = '';
$adresseLitterale .= $adresse['statutNote'].' ';
if ($adresse['numero'] != '') {
$adresseLitterale .= $adresse['numero'].' ';
}
if ($adresse['rue'] != '') {
$adresseLitterale .= $adresse['rue'].' ';
}
if ($adresse['complement'] != '') {
$adresseLitterale .= $adresse['complement'].' ';
}
if ($adresse['complement2'] != '') {
$adresseLitterale .= $adresse['complement2'].' ';
}
if ($adresse['code_postal']) {
$adresseLitterale .= $adresse['code_postal'].' ';
}
if ($adresse['ville']) {
$adresseLitterale .= $adresse['ville'].' ';
}
if ($adresse['statutNote'] == '') {
$icon = $baseurl.'/bundles/noogaamaps/images/marker35x35-1.png';
} else {
$icon = $baseurl.'/bundles/noogaamaps/images/marker35x35-'.$adresse['statutNote'].'.png';
}
//$icon = '';
//$icon = $baseurl.'/bundles/noogaamaps/images/marker35x35-1.png';
$adresses[] = [
'position' => [
'lat' => floatval($adresse['latitude']),
'lng' => floatval($adresse['longitude']),
],
'idClient' => $adresse['idClient'],
'idAdresse' => $adresse['id'],
'note' => $adresse['noteId'],
'icon' => $icon,
'adresseLitterale' => $adresseLitterale,
'raisonSociale' => $adresse['raisonSociale'],
'icons' => [
'spider-1' => $icon = $baseurl.'/bundles/noogaamaps/images/marker45x45-etape-1.png',
'spider-2' => $icon = $baseurl.'/bundles/noogaamaps/images/marker45x45-etape-2.png',
'spider-3' => $icon = $baseurl.'/bundles/noogaamaps/images/marker45x45-etape-3.png',
],
];
}
if (count($adressesBrut) == 1) {
$centre = ['lat' => floatval($adressesBrut[0]['latitude']), 'lng' => floatval($adressesBrut[0]['longitude'])];
}
//var adresse = {position:{lat: {{adresse.latitude}}, lng: {{adresse.longitude}}}, idClient: {{adresse.client.id}}};
$response = new JsonResponse();
$response->setData([
'adresses' => $adresses,
'centre' => $centre,
]);
return $response;
}
/**
* @Route("/adresse-map/{id}/visualiser", name="dtc_adresse_visualiser_map")
*/
public function mapVisualiserAction(Request $request, Adresse $adresse, EntityManagerInterface $em, TranslatorInterface $translator)
{
$titre_modal = $translator->trans("Visualiser l'adresse");
$mapApiKey = $this->getParameter('map_api_key');
$errors = '';
if ($request->isMethod('POST')) {
$lat = $request->request->get('lat');
$lng = $request->request->get('lng');
if ($lat != '' && $lng != '') {
$adresse->setLatitude($lat);
$adresse->setLongitude($lng);
$em->persist($adresse);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('La position a été modifiée !')
);
}
}
$rendu = $this->renderView('Adresses/Adresse/visualiser-map.html.twig', ['adresse' => $adresse, 'errors' => $errors, 'mapApiKey' => $mapApiKey]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/adresse/charger-tableau/{id}/{type}", name="dtc_adresse_charger_tableau")
*/
public function chargerTableauAction(Request $request, EntityManagerInterface $em, $id = "0", $type = "")
{
$objet = '';
if ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'transporteur') {
$repo_objet = $em->getRepository(Transporteur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
}
$rendu = $this->renderView('Adresses/Adresse/charger_tableau.html.twig', ["id" => $id, "type" => $type, "objet" => $objet]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/adresse/recherche", name="dtc_adresse_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$client = $request->query->get('client');
$repo = $em->getRepository(Adresse::class);
if (empty($request->query->get('client'))) {
$results = [];
} else {
$results = $repo->getRechercheAdresse($q, 25, ['client' => $request->query->get('client')]);
}
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
$pagination_results = $pagination->getItems();
$pagination_results_array = $pagination->getItems();
$option_placeholde = ["libelle" => "Sélectionnez", "id" => "0"];
if ($request->query->getInt('page', 1) == 1) {
array_unshift($pagination_results_array, $option_placeholde);
}
$pagination->setItems($pagination_results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
/**
* @Route("/adresse/{id}/{type}", name="dtc_adresse_liste")
*/
public function listerAction($id, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator, $type = "", $objet = "")
{
if ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'transporteur') {
$repo_objet = $em->getRepository(Transporteur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [1], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [3], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [4], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [5], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [6], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [7], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [11], "visible" => true, "orderable" => false];
$this->datatable($objet, $type, $datatable, $translator);
return $this->render('Adresses/Adresse/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
}
}