src/Controller/ApiChronoController.php line 112
<?phpnamespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\Request;use Doctrine\ORM\EntityManagerInterface;use App\Repository\CommandeRepository;use App\Repository\ChronoPrixRepository;use App\Repository\ProduitRepository;use App\Entity\Pays;use App\Entity\TarifEuropeClassic;use App\Entity\TarifMondeExpress;use App\Entity\TarifFranceMetropolitaine;use App\Repository\TarifEuropeClassicRepository;use App\Repository\TarifMondeExpressRepository;use App\Repository\TarifFranceMetropolitaineRepository;#[Route('/api', name: 'api_')]class ApiChronoController extends AbstractController{#[Route('/chrono/get/{codePostal}/{ville}', name: '_chrono')]public function index($codePostal, $ville): Response{//$user = $this->getUser();//$getCodePostal = $user->getAdresseLivraison()->getCodePostal();//$getVille = $user->getAdresseLivraison()->getVille();// Récupérer les point relais de Chronopost par rapport à l'adresse de l'utilisateur$accountNumber = '19869502';//$contrat = 'Contrat TEST';$password = '255562';$client = new \SoapClient('https://www.chronopost.fr/recherchebt-ws-cxf/PointRelaisServiceWS?wsdl', array('trace' => 1));// Paramètres de recherche pour les points relais$params = array('accountNumber' => $accountNumber,'password' => $password,'zipCode' => $codePostal, // Code postal'city' => $ville, // Ville'countryCode' => 'FR', // Code pays (ISO 3166-1 alpha-2)'type' => 'P', // Type de point relais (A = tous les points relais, B = points relais Chronopost, C = points relais Chronopost Express) P = point relais'productCode' => '04', // Code produit (01 = Chrono 13, 02 = Chrono 18, 03 = Chrono Relais, 04 = Chrono Classic)'service' => 'T', // Type de service (T = tous les services, D = Chrono 13, R = Chrono 18, S = Chrono Relais, L = Chrono Classic)'weight' => 2000, // Poids du colis (en grammes)'shippingDate' => date('d/m/Y'), // Date d'expédition (format : jj/mm/aaaa)'maxPointChronopost' => 5, // Nombre maximum de points relais Chronopost'maxDistanceSearch' => 10000, // Distance de recherche (en mètres)'holidayTolerant' => 1, // Tolerance aux jours fériés (0 = non, 1 = oui));try {$response = $client->recherchePointChronopostInter($params);// Récupération des points relais$data = $response->return->listePointRelais;$getPointRelais = [];foreach ($data as $key => $pointRelais) {if ($pointRelais->actif){$getPointRelais[$key]['adresse'] = $pointRelais->adresse1;$getPointRelais[$key]['code_pays'] = $pointRelais->codePays;$getPointRelais[$key]['code_postal'] = $pointRelais->codePostal;$getPointRelais[$key]['latitude'] = $pointRelais->coordGeolocalisationLatitude;$getPointRelais[$key]['longitude'] = $pointRelais->coordGeolocalisationLongitude;$getPointRelais[$key]['distance'] = $pointRelais->distanceEnMetre;$getPointRelais[$key]['identifiant'] = $pointRelais->identifiant;$getPointRelais[$key]['localite'] = $pointRelais->localite;$getPointRelais[$key]['nom'] = $pointRelais->nom;$getPointRelais[$key]['urlGoogleMaps'] = $pointRelais->urlGoogleMaps;$getPointRelais[$key]['liste_horaires'] = $pointRelais->listeHoraireOuverture;}};} catch (\SoapFault $e) {// Gestion des erreursecho "Erreur : " . $e->getMessage();}return $this->json(['message' => ' get chrono relais','data' => $getPointRelais,], 200);}#[Route('/chrono/price/{produit}/{quantite}', name: '_chrono_price')]public function chronoPrice(string $produit, int $quantite, ChronoPrixRepository $ChronoPrixRepository): Response{$getPrice = $ChronoPrixRepository->getPrix($quantite, $produit);return $this->json(['message' => ' get chrono price','data' => $getPrice,'test' => $quantite,'test2' => $produit,], 200);}#[Route('/chrono/poids/{produit}/{quantite}', name: '_chrono_price_poids')]public function chronoPricePays(string $produit, int $quantite,ProduitRepository $produitRepository ): Response{$produit = $produitRepository->findOneBy(['nom' => $produit]);if (!$produit) {return $this->json(['message' => 'Produit non trouvé',], 404);}$poids = $produit->getPoids();$poidsTotal = $poids * $quantite;return $this->json(['message' => 'Poids du produit récupéré avec succès','data' => ['poids' => $poids,'poidsTotal' => $poidsTotal,],], 200);}#[Route('/chrono/prix/{poids}/{pays}', name: 'chrono_prix_poids_pays')]public function chronoPrixPoidsPays(float $poids, string $pays, EntityManagerInterface $em): Response{// Convertir 20Kg en gramme$limitePoidsRelais = 20000; // 20kg * 1000// Initialisation des variables de prix$prixLivraisonMaison = null;$prixLivraisonRelais = null;if (strtolower($pays) === 'france') {$tarifFranceRepository = $em->getRepository(TarifFranceMetropolitaine::class);// Convertir le poids en grammes en kilogrammes pour la comparaison dans la méthode findTarifByPoids$poidsEnKilogrammes = $poids / 1000;// Recherche du tarif pour la livraison en relais si le poids est dans la limiteif ($poids <= $limitePoidsRelais) {$tarifRelais = $tarifFranceRepository->findTarifByPoids($poidsEnKilogrammes, 'CRELAIS');$prixLivraisonRelais = $tarifRelais !== null ? $tarifRelais : null;}// Recherche du tarif pour la livraison à domicile$tarifDomicile = $tarifFranceRepository->findTarifByPoids($poidsEnKilogrammes, 'C13');$prixLivraisonMaison = $tarifDomicile !== null ? $tarifDomicile : null;} else {$paysEntity = $em->getRepository(Pays::class)->findOneBy(['nom' => strtoupper($pays)]);if ($paysEntity) {$zone = $paysEntity->getZone();if ($zone >= 1 && $zone <= 4) {$tarifRepository = $em->getRepository(TarifEuropeClassic::class);} elseif ($zone >= 5 && $zone <= 9) {$tarifRepository = $em->getRepository(TarifMondeExpress::class);} else {// Gestion des zones non couvertes$tarifRepository = null;}if ($tarifRepository) {$prixLivraisonMaison = $tarifRepository->findTarifByPoids($zone, $poids);}}}return $this->json(['message' => 'Prix de livraison basé sur le poids et le pays','data' => ['poids' => $poids,'pays' => $pays,'prixLivraisonMaison' => $prixLivraisonMaison,'prixLivraisonRelais' => $prixLivraisonRelais,],], 200);}}