<?php
namespace App\Controller\Front;
use App\Entity\AbonnementPro;
use App\Entity\Adresse;
use App\Entity\Carrier;
use App\Entity\Cart;
use App\Entity\Customer;
use App\Entity\LanguageCountry;
use App\Entity\Orders;
use App\Entity\Stats;
use App\Entity\StuartOrder;
use App\Form\AdresseType;
use App\Services\AvisVerifiesService;
use App\Services\CartService;
use App\Services\CheckoutService;
use App\Services\CodePromos;
use App\Services\DelivreeService;
use App\Services\StuartService;
use App\Services\Exaprint;
use App\Services\FactureService;
use App\Services\Notifications;
use App\Services\ReferalCandyService;
use App\Services\Sms;
use App\Services\StripeConnect;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Environment;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use App\Services\OrderService;
use Stripe\Charge;
use Stripe\Stripe;
use App\Services\SendCloudApi;
class CheckoutController extends AbstractController
{
private $em;
private $session;
private $trans;
private $cart_service;
private $authenticationUtils;
private $checkout_service;
private $order_service;
private $codePromo_service;
private $facture_service;
private $notifications;
private $apiKeyStripe = 'sk_test_muPBfpJVwU0rJ22HYXsrRfMq00KPuYsnpR';
private $delivreeService;
private $stuartService;
private $stripeConnectService;
private $service_sms;
private $avisVerifiesService;
private $candyService;
public function __construct(
DelivreeService $delivreeService,
StuartService $stuartService,
Notifications $notifications,
FactureService $facture_service,
CodePromos $codePromo_service,
OrderService $order_service,
CheckoutService $checkout_service,
CartService $cart_service,
SessionInterface $session,
TranslatorInterface $trans,
EntityManagerInterface $em,
AuthenticationUtils $authenticationUtils,
StripeConnect $stripeConnect,
Sms $service_sms,
SendCloudApi $apiCloudSend,
AvisVerifiesService $avisVerifiesService,
Exaprint $exaprint,
ReferalCandyService $candyService,
ParameterBagInterface $params
) {
$this->em = $em;
$this->trans = $trans;
$this->session = $session;
$this->cart_service = $cart_service;
$this->checkout_service = $checkout_service;
$this->authenticationUtils = $authenticationUtils;
$this->order_service = $order_service;
$this->codePromo_service = $codePromo_service;
$this->facture_service = $facture_service;
$this->notifications = $notifications;
$this->delivreeService = $delivreeService;
$this->stuartService = $stuartService;
$this->stripeConnectService = $stripeConnect;
$this->service_sms = $service_sms;
$this->apiCloudSend = $apiCloudSend;
$this->avisVerifiesService = $avisVerifiesService;
$this->candyService = $candyService;
$this->exaprint = $exaprint;
$this->params = $params;
}
/**
* @Route("/checkout", name="checkout")
*/
public function index(Request $request): Response
{
// check paiement succeeded if erreur
if ($this->session->get('payment_intent_id')) {
$peimentIntentObject = $this->stripeConnectService->checkPayment($this->session->get('payment_intent_id'));
if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
$charge = $this->session->get('charge');
$id_order = $this->session->get('id_order');
$order = $this->em->getRepository(Orders::class)->find($id_order);
if($order) {
$fees = $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
$order->setPrixFees($fees);
$order->setChargeStripeId($charge);
$order->setIsValid(true);
$this->em->persist($order);
$this->em->flush();
}
return $this->redirectToRoute('checkout_verifie', ['tk_or' => $this->session->get('tk_or')]);
}
}
$cart = $this->cart_service->getCartCurrent();
if (!$cart || (count($cart->getCartDetail()) == 0 && !$cart->getAbonnementProCart() && count($cart->getDistributionCart())== 0)) {
return $this->redirectToRoute('accueil');
}
if($this->cart_service->isProductPoste($cart->getId())){
return $this->redirectToRoute('checkout_poste');
}
//check cartDetail dont have adresse if multilivraison
$this->cart_service->addAdresseInCartMultiLivraisonIfNotExist($cart? $cart->getId():0);
//check option liseuse selected
if(!empty($this->cart_service->checkOptionSelectReluire())){
return $this->redirectToRoute('liseuse');
}
//check cartDetail dont have adresse if multilivraison
$this->cart_service->addAdresseInCartMultiLivraisonIfNotExist($cart->getId());
//check option liseuse selected
if(!empty($this->cart_service->checkOptionSelectReluire())){
return $this->redirectToRoute('liseuse');
}
$tokenPaymentIntent = null;
$this->checkout_service->addCustomerAndAdresseToUser(); // if logged and not customer
$cart = $this->checkout_service->addCustomerAndAdresseToCartIfLogged($cart); // add to cart if logged
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
$abonnementProCart = $this->cart_service->checkAbonenementProAddCart($cart->getId());
if($cart->getPrixTtc() > 0) {
if($this->cart_service->checkIsAbonnementProCart($cart->getId())){
// $prixTtc = $abonnementProCart['prixTtc'];
$prixTtc = 0;
$tokenPaymentIntent = $this->stripeConnectService->getOrCreatePaymentIntent(($cart->getPrixTtc() - $prixTtc) * 100);
}else{
$tokenPaymentIntent = $this->stripeConnectService->getOrCreatePaymentIntent($cart->getPrixTtc() * 100);
}
}else if($cart->getAbonnementProCart()){
$tokenPaymentIntent = $this->stripeConnectService->getOrCreatePaymentIntent($cart->getPrixTtc() * 100);
}
$resultAbo = $this->cart_service->checkB2bUser($this->getUser());
$abonnement = $resultAbo['abonnement'];
$isAbonnementProInCart = $resultAbo['isAbonnementProInCart'];
if($abonnement['is_abonnemen_pro'] || $isAbonnementProInCart){
if($abonnement['is_abonnemen_pro']){
$customer = $this->em->getRepository(Customer::class)->findOneBy(['user' => $this->getUser()->getId()]);
if ($customer && $customer->getRolAbo() == Customer::role_abo_comptabilite) {
$template = 'front/b2b/access_denied.html.twig';
}else{
$template = 'front/b2b/checkout/index.html.twig';
}
}else{
$template = 'front/b2b/checkout/index.html.twig';
}
}else{
$template = 'front/checkout/index.html.twig';
}
return $this->render($template, array(
'cart' => $cart,
'token_payment' => $tokenPaymentIntent,
'last_username' => $this->authenticationUtils->getLastUsername(),
'error' => $this->authenticationUtils->getLastAuthenticationError(),
'abonnementPro' => $abonnementPro,
'abonnementProCart' => $abonnementProCart,
'checkConsommation' => $this->cart_service->checkConsommation($user,$cart),
'abonnementOrder' => $this->cart_service->checkAbonenementPro($user)
));
}
/**
* @Route("/add-code-promo/{codePromoName}", name="add_code_promo_cart",options={"expose"=true})
*/
public function addCodePromo(Request $request, $codePromoName): Response
{
$cart = $this->cart_service->getCartCurrent();
$data = $this->codePromo_service->getCodePromo($cart, $codePromoName);
$this->cart_service->updatePriceCart($cart); // update price
$response = new Response();
$response->setContent(json_encode($data));
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/remove-code-promo/{id}", name="remove_code_promo_cart",options={"expose"=true})
*/
public function removeCodePromo(Request $request, $id): Response
{
$cart = $this->cart_service->getCartCurrent();
$data = $this->codePromo_service->removeCodePromo($cart, $id);
$this->cart_service->updatePriceCart($cart); // update price
$response = new Response();
$response->setContent(json_encode($data));
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/block-livraison", name="block_livraison",options={"expose"=true})
*/
public function blockLivraison(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$dataRequest = $request->request->all();
if (isset($dataRequest['postalcode'])) {
$data['lat'] = $dataRequest['lat'];
$data['longi'] = $dataRequest['longi'];
$data['postalcode'] = $dataRequest['postalcode'];
$data['CountryLiv'] = $dataRequest['CountryLiv'];
$data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
$data['adresse'] = $dataRequest['addresseLiv'];
} else {
return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
}
if($cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$dataLivrason = $this->checkout_service->getModeLivraisonMultiple($cart, $data);
}else{
$this->cart_service->removeCarrierToCart($cart) ;
$dataLivrason = $this->checkout_service->getModeLivraison($cart, $data);
}
return $this->render('front/checkout/blockLivraison.html.twig', $dataLivrason);
}
/**
* @Route("/block-livraison-multiple", name="block_livraison_multiple",options={"expose"=true})
*/
public function blockLivraisonMultiple(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$dataRequest = $request->request->all();
if (isset($dataRequest['postalcode'])) {
$data['lat'] = $dataRequest['lat'];
$data['longi'] = $dataRequest['longi'];
$data['postalcode'] = $dataRequest['postalcode'];
$data['CountryLiv'] = $dataRequest['CountryLiv'];
$data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
$data['adresse'] = $dataRequest['addresseLiv'];
} else {
return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
}
if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$dataLivrason = $this->checkout_service->getModeLivraisonMultiple($cart, $data);
}else{
$this->cart_service->removeCarrierToCart($cart) ;
$dataLivrason = $this->checkout_service->getModeLivraison($cart, $data);
}
return $this->render('front/checkout/blockLivraison.html.twig', $dataLivrason);
}
/**
* @Route("/block-livraison-mobile-multiple", name="block_livraison_mobile_multiple",options={"expose"=true})
*/
public function blockLivraisonMobileMultiple(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$dataRequest = $request->request->all();
if (isset($dataRequest['postalcode'])) {
$data['lat'] = $dataRequest['lat'];
$data['longi'] = $dataRequest['longi'];
$data['postalcode'] = $dataRequest['postalcode'];
$data['CountryLiv'] = $dataRequest['CountryLiv'];
$data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
$data['adresse'] = $dataRequest['addresseLiv'];
} else {
return $this->render('front/checkout/blockLivraisonMobile.html.twig', array('latLongiRequired' => 1));
}
if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$dataLivrason = $this->checkout_service->getModeLivraisonMultiple($cart, $data);
}else{
$this->cart_service->removeCarrierToCart($cart) ;
$dataLivrason = $this->checkout_service->getModeLivraison($cart, $data);
}
return $this->render('front/checkout/blockLivraisonMobile.html.twig', $dataLivrason);
}
/**
* @Route("/block-recap-multiple", name="block_recap_multiple",options={"expose"=true})
*/
public function blockRecapMultiple(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$dataRequest = $request->request->all();
if (isset($dataRequest['postalcode'])) {
$data['lat'] = $dataRequest['lat'];
$data['longi'] = $dataRequest['longi'];
$data['postalcode'] = $dataRequest['postalcode'];
$data['CountryLiv'] = $dataRequest['CountryLiv'];
$data['adresse'] = $dataRequest['addresseLiv'];
} else {
return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
}
if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$dataLivrason = $this->checkout_service->getModeLivraisonMultiple($cart, $data);
}else{
$this->cart_service->removeCarrierToCart($cart) ;
$dataLivrason = $this->checkout_service->getModeLivraison($cart, $data);
}
return $this->render('front/checkout/blockRecap.html.twig', $dataLivrason);
}
/**
* @Route("/add-carrier/{id}", name="add_carrier",options={"expose"=true})
*/
public function addCarrier(Request $request, $id): Response
{
$cart = $this->cart_service->getCartCurrent();
$idsCartDetail = $request->get('idsCartDetail');
$idImprimeurCartDetail = $request->get('idImprimeurCartDetail');
$idAdresse = $request->get('idAdresse');
$abonnementPro = false;
if($cart) {
if( $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW && $id == 0){
$this->cart_service->removeCarrierToCart($cart) ;
}
if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$cart = $this->cart_service->addCarrierMutipleToCart($cart->getId(), $id,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
}else {
$cart = $this->cart_service->addCarrierToCart($cart->getId(), $id);
}
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user, $cart->getId());
}
$blockPrice = $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
'cart' => $cart,
'abonnementPro' => $abonnementPro
]);
return $blockPrice;
}
/**
* @Route("/get-date-estime", name="get_date_estime_livraison_national",options={"expose"=true})
*/
public function getDateEstimeLivraisonNational(Request $request): Response
{
$date = $this->cart_service->checkdateLivraisonNational();
$jour = '';
$mois = '';
switch ($date->format('D')){
case 'Mon':
$jour = 'Lundi';
break;
case 'Tue':
$jour = 'Mardi';
break;
case 'Wed':
$jour = 'Mercredi';
break;
case 'Thu':
$jour = 'Jeudi';
break;
case 'Fri':
$jour = 'Vendredi';
break;
case 'Sat':
$jour = 'Samedi';
break;
case 'Sun':
$jour = 'Dimanche';
break;
}
switch ($date->format('m')){
case '01':
$mois = 'Janvier';
break;
case '02':
$mois = 'Février';
break;
case '03':
$mois = 'Mars';
break;
case '04':
$mois = 'Avril';
break;
case '05':
$mois = 'Mai';
break;
case '06':
$mois = 'Juin';
break;
case '07':
$mois = 'Juillet';
break;
case '08':
$mois = 'Août';
break;
case '09':
$mois = 'Septembre';
break;
case '10':
$mois = 'Octobre';
break;
case '11':
$mois = 'Novembre';
break;
case '12':
$mois = 'Décembre';
break;
}
$response = new Response();
$response->setContent($jour.' '.$date->format('d').' '.$mois);
return $response;
}
/**
* @Route("/add-carrier-livraison-national/{id}-{typeLivraisonNational}", name="add_carrier_livraisonNational",options={"expose"=true})
*/
public function addCarrierLivraisonNational(Request $request, $id,$typeLivraisonNational): Response
{
$cart = $this->cart_service->getCartCurrent();
$idsCartDetail = $request->get('idsCartDetail');
$idImprimeurCartDetail = $request->get('idImprimeurCartDetail');
$idAdresse = $request->get('idAdresse');
if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$cart = $this->cart_service->addCarrierMultipleLivraionNationalToCart($cart->getId(), $id, $typeLivraisonNational,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
}else {
$cart = $this->cart_service->addCarrierLivraionNationalToCart($cart->getId(), $id, $typeLivraisonNational);
}
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
$blockPrice = $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
'cart' => $cart,
'abonnementPro' => $abonnementPro
]);
return $blockPrice;
}
/**
* @Route("/add-carrier-livraison-30min/{id}-{id_imprimeur}", name="add_carrier_livraison30min",options={"expose"=true})
*/
public function addCarrierLivraison30min(Request $request, $id,$id_imprimeur): Response
{
$cart = $this->cart_service->getCartCurrent();
$data = $request->request->all();
$idsCartDetail = $request->get('idsCartDetail');
$idImprimeurCartDetail = $request->get('idImprimeurCartDetail');
$idAdresse = $request->get('idAdresse');
if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
$cart = $this->cart_service->addCarrierMultipleLivraion30minToCart($cart->getId(), $id, $id_imprimeur, $data,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
}else{
$cart = $this->cart_service->addCarrierLivraion30minToCart($cart->getId(), $id, $id_imprimeur, $data);
}
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
$blockPrice = $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
'cart' => $cart,
'abonnementPro' => $abonnementPro
]);
return $blockPrice;
}
/**
* @Route("/add-carrier-livraison-30min-date/", name="add_carrier_livraison30min_date",options={"expose"=true})
*/
public function addCarrierLivraison30minDate(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$idsCartDetail = $request->get('idsCartDetail');
$date_choix = $request->get('date_choix');
$idAdresse = $request->get('idAdresse');
$this->cart_service->addCarrierLivraison30minDate($cart->getId(),$idsCartDetail,$date_choix,$idAdresse);
$response = new Response();
$response->setContent(1);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/add-carrier-livraison-30min-datetime/", name="add_carrier_livraison30min_datetime",options={"expose"=true})
*/
public function addCarrierLivraison30minDatetime(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$idsCartDetail = $request->get('idsCartDetail');
$date_choix = $request->get('date_choix');
$time = $request->get('time');
$idAdresse = $request->get('idAdresse');
$this->cart_service->addCarrierLivraison30minDatetime($cart->getId(),$idsCartDetail,$date_choix,$time,$idAdresse);
$response = new Response();
$response->setContent(1);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/add-carrier-idServicePointNationInput/{id}", name="add_carrier_idServicePointNationInput",options={"expose"=true})
*/
public function addCarrieridServicePointNationInput(Request $request, $id): Response
{
$cart = $this->cart_service->getCartCurrent();
$idsCartDetail = $request->get('idsCartDetail');
$servicePointObject = $request->get('servicePointObject');
$idAdresse = $request->get('idAdresse');
if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
$this->cart_service->addCarrierMultiplePointNationInput($cart->getId(), $id, $idsCartDetail,$servicePointObject,$idAdresse);
}
$response = new Response();
$response->setContent(1);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/checkout-panier", name="checkout_panier")
*/
public function panierBlock(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
return $this->render('front/checkout/blockPanier.html.twig', array(
'cart' => $cart,
'abonnementPro' => $abonnementPro
));
}
/**
* @Route("/checkout-panier-multiple", name="checkout_panier_multiple",options={"expose"=true})
*/
public function panierBlockMultiple(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
return $this->render('front/checkout/blockPanierMultiple.html.twig', array(
'cart' => $cart,
'abonnementPro' => $abonnementPro
));
}
/**
* @Route("/checkout-panier-multiple-mobile", name="checkout_panier_multiple_mobile",options={"expose"=true})
*/
public function panierBlockMultipleMobile(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
//check abonnementPro
$user = $this->getUser();
$abonnementPro = $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
return $this->render('front/checkout/blockPanierMultipleMobile.html.twig', array(
'cart' => $cart,
'abonnementPro' => $abonnementPro
));
}
/**
* @Route("/get-total-pay-checkout", name="get_total_pay_checkout" ,options={"expose"=true})
*/
public function getTotalPayCheckout(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$prixTotalTtc = 0;
if($cart){
$prixTotalTtc = number_format((float)$cart->getPrixTtc(),2).' €';
}
$response = new Response();
$response->setContent($prixTotalTtc);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/get-total-pay-checkout-number-stipe", name="get_total_pay_checkout_number_stipe" ,options={"expose"=true})
*/
public function getTotalPayCheckoutNumberStripe(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$prixTotalTtc = 0;
if($cart){
$prixTotalTtc = $cart->getPrixTtc() * 100;
$nb = explode('.', $prixTotalTtc);
$prixTotalTtc = $nb[0];
}
$response = new Response();
$response->setContent($prixTotalTtc);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/get-prix-economie-checkout", name="get_prix_economie_checkout" ,options={"expose"=true})
*/
public function getPrixEconomieCheckout(Request $request): Response
{
$cart = $this->cart_service->getCartCurrent();
$rep = [];
$rep['prixEconomie'] = '0 €';
$rep['pourcentageEconomie'] = '0%';
if($cart){
$user = $this->getUser();
$priceAbo = $this->cart_service->gePriceCartWithAbonnementPro( AbonnementPro::TYPE_PRO,$cart);
$prixEconomie = (float)$cart->getPrixTtc() - $priceAbo['prixTtcTotal'] ;
$pourcentageEconomie = ($prixEconomie / (float)$cart->getPrixTtc()) * 100 ;
$rep['prixEconomie'] = number_format($prixEconomie,2).' €';
$rep['pourcentageEconomie'] = number_format($pourcentageEconomie,2).'%';
}
$response = new Response();
$response->setContent(json_encode($rep));
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/checkout-post-form", name="checkout_post_form")
*/
public function postFormCheckout(Request $request){
if($request->isMethod('post')){
$rep = array(
'erreur' => '',
'redirect' => $this->generateUrl('checkout_verifie'),
'success' => false,
'paid' => false
);
$data = $this->checkout_service->postForm($request);
if(isset($data['erreur'])){
$rep['erreur'] = $data['erreur'];
}
else{
$cart = $this->cart_service->getCartCurrent();
if($cart) {
if (is_null($cart->getCarrier()) && count($cart->getCartDetail()) > 0 && $cart->getVersionCarrier() != Cart::VERSION_CARRIER_NEW) {
$rep['erreur'] = 'Erreur mode livraison !';
}
else{
$paymentIntentId = $this->session->get('payment_intent_id');
$cart->setCustomer($data['customer']);
$cart->setAdresseLivraison($data['adresseLiv']);
$cart->setAdresseFacturation($data['adresseFac']);
// $cart->setCarrier($data['carrierData']['carrier']);
if($cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
$cart->setImprimeur(null);
$cart->setDateStart(null);
$cart->setDateEnd(null);
$cart->setCarrier(null);
$cart->setTypeLivraisonNational(null);
$cart->setIdServicePointLivraison(null);
}else {
if (count($cart->getCartDetail()) > 0) {
$cart->setImprimeur($data['carrierData']['imprimeur']);
$cart->setDateStart($data['carrierData']['dateStart']);
$cart->setDateEnd($data['carrierData']['dateEnd']);
$cart->setTypeLivraisonNational($data['carrierData']['typeLivraionNation']);
$cart->setIdServicePointLivraison($data['carrierData']['idServicePointNation']);
} else {
$cart->setImprimeur(null);
$cart->setDateStart(null);
$cart->setDateEnd(null);
$cart->setCarrier(null);
}
}
$cart->setCommentaire($data['commentaire']);
if ($request->request->get('saveCard')) $cart->setIsSaveCard(true);
$this->em->persist($cart);
$this->em->flush();
$carrierDataCheck = $this->stuartService->checkMissionByCart($cart); //check carrier 30 min
if(isset($carrierDataCheck['erreur'])){
$rep['erreur'] = $carrierDataCheck['erreur'];
$response = new Response();
$response->setContent(json_encode($rep));
$response->setStatusCode(200);
return $response;
}
if ($paymentIntentId) {
$peimentIntentObject = $this->stripeConnectService->checkPayment($paymentIntentId);
if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
$rep['paid'] = true;
$rep['success'] = true;
$rep['order_id'] = $this->session->get('id_order');
$rep['tk_or'] = $this->session->get('tk_or');
}else {
// if payment without registered card Abonnement (paiement la prochaine échéance)
if ($request->request->get('paimentChoiceAbonnement') == 'stripeChoiceSaveAbonnement') {
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$this->session->set('isStripeChoiceSaveAbonnement', $idOrder);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
}
// if payment without registered card Abonnement (paiement la prochaine échéance)
else if ($request->request->get('paimentChoiceAbonnementWallet') == 'stripeChoiceSaveAbonnementWallet') {
$resultWallet = $this->cart_service->checkWalletB2bCart($cart);
if($resultWallet){
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId,true);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
}else{
$rep['erreur'] = 'Erreur portefeuille !';
}
}
// if payment with registered card
else if ($request->request->get('paimentChoice') == 'stripeChoiceSave') {
if ($this->cart_service->checkIsAbonnementProCart($cart->getId())) {
$abonnementProCart = $this->cart_service->checkAbonenementProAddCart($cart->getId());
// $prixTtc = $abonnementProCart['prixTtc'];
$prixTtc = 0;
$payment = $this->stripeConnectService->createPaymentIntentWidhRegisterCard(($cart->getPrixTtc() - $prixTtc) * 100);
} else {
$payment = $this->stripeConnectService->createPaymentIntentWidhRegisterCard($cart->getPrixTtc() * 100);
}
if (!$payment['success'] && !$payment['is_authentication']) {
$rep['erreur'] = $payment['msg'];
} else {
$paymentIntent = $payment['intent'];
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntent->id);
$this->stripeConnectService->updatePaymentIntentAfterOrder($paymentIntent->id, $idOrder);
$this->session->set('charge', $paymentIntent->id);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['is_authentication'] = $payment['is_authentication'];
$rep['intent'] = $payment['intent'];
$rep['tk_or'] = $token;
}
// if payment without registered card
} else if ($request->request->get('paimentChoice') == 'stripeChoice') {
// add order
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->stripeConnectService->updatePaymentIntentAfterOrder($paymentIntentId, $idOrder);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
} else if ($request->request->get('paimentChoice') == 'paypalChoice') {
// add order
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->stripeConnectService->updatePaymentIntentPaypalAfterOrder($paymentIntentId, $idOrder);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
$rep['charge'] = $paymentIntentId;
} else if ($request->request->get('paimentChoice') == 'googlePayChoice') {
// add order
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->stripeConnectService->updatePaymentIntentGooglePayAfterOrder($paymentIntentId, $idOrder);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
$rep['charge'] = $paymentIntentId;
} else if ($request->request->get('paimentChoice') == 'klarnaChoice') {
// add order
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->stripeConnectService->updatePaymentIntentKlarnaAfterOrder($paymentIntentId, $idOrder);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
$rep['charge'] = $paymentIntentId;
}else if ($request->request->get('paimentChoice') == 'stripeChoiceSepa') {
// add order
$token = rand(1000000000, 9999999999);
$idOrder = $this->order_service->createOrder($cart, $paymentIntentId);
$this->stripeConnectService->updatePaymentIntentSepaAfterOrder($paymentIntentId, $idOrder);
$this->session->set('charge', $paymentIntentId);
$this->session->set('id_order', $idOrder);
$this->session->set('tk_or', $token);
$rep['success'] = true;
$rep['order_id'] = $idOrder;
$rep['tk_or'] = $token;
} else {
$rep['erreur'] = 'Il faut choisir un mode de paiement !';
}
}
} else {
$rep['erreur'] = 'Erreur de paiement';
}
}
}
else {
$rep['erreur'] = 'Erreur ! votre panier est vide';
}
}
$response = new Response();
$response->setContent(json_encode($rep));
$response->setStatusCode(200);
return $response;
}
die();
}
/**
* @Route("/valide-order-intent/{idPayment}", name="valide_order_by_payment_intent" ,options={"expose"=true})
*/
public function valideOrder(Request $request,$idPayment): Response
{
$peimentIntentObject = $this->stripeConnectService->checkPayment($idPayment);
if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
$id_order = $this->session->get('id_order');
$order = $this->em->getRepository(Orders::class)->find($id_order);
if ($order) {
$order->setChargeStripeId($idPayment);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
}
}elseif($peimentIntentObject && $peimentIntentObject->status == 'processing' && $peimentIntentObject->payment_method_types[0] == 'sepa_debit' ){
$id_order = $this->session->get('id_order');
$order = $this->em->getRepository(Orders::class)->find($id_order);
if ($order) {
$order->setChargeStripeId($idPayment);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
}
}
$response = new Response();
$response->setContent(1);
$response->setStatusCode(200);
return $response;
}
/**
* @Route("/valide-order-intent-check-paypal/{idPayment}", name="valide_order_check_paypal_by_payment_intent" ,options={"expose"=true})
*/
public function checkPayPalOrder(Request $request,$idPayment): Response
{
$charge = $idPayment;
$isValid = false;
if($idPayment == $request->query->get('payment_intent')){
$peimentIntentObject = $this->stripeConnectService->checkPayment($idPayment);
if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
$id_order = $this->session->get('id_order');
$order = $this->em->getRepository(Orders::class)->find($id_order);
if ($order) {
$order->setChargeStripeId($idPayment);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
$isValid = true;
}
}
}
if($isValid){
return $this->redirectToRoute('checkout_verifie',['tk_or'=> $this->session->get('tk_or')]);
}else{
return $this->redirectToRoute('checkout_erreur');
}
}
/**
* @Route("/checkout-verifie", name="checkout_verifie")
*/
public function verifieCheckout(Request $request): Response
{
$peimentIntentObject = null;
$id_order = $this->session->get('id_order');
$order = $this->em->getRepository(Orders::class)->find($id_order);
// check paiement succeeded
if ($this->session->get('payment_intent_id')) {
$peimentIntentObject = $this->stripeConnectService->checkPayment($this->session->get('payment_intent_id'));
if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
$charge = $this->session->get('charge');
if($order) {
$fees = $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
$order->setChargeStripeId($charge);
$order->setPrixFees($fees);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
}
}elseif($peimentIntentObject && $peimentIntentObject->status == 'succeeded' && $peimentIntentObject->payment_method_types[0] == 'sepa_debit') {
$charge = $this->session->get('charge');
if($order) {
$order->setChargeStripeId($charge);
$fees = $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
$order->setPrixFees($fees);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
}
}
if($order && $order->getIsWallet()){
}else{
if($order) {
if ($order->getPrixTtc() == 0 or $peimentIntentObject->payment_method_types[0] == 'sepa_debit') {
} else {
if($this->session->get('isStripeChoiceSaveAbonnement')){
}else if(!$order->getIsValid()){
}
}
}
}
}
$charge = $this->session->get('charge');
$id_order = $this->session->get('id_order');
$tk_or = $this->session->get('tk_or');
$tk_or_get = $request->query->get('tk_or');
if($tk_or == $tk_or_get) {
if ($id_order) {
$order = $this->em->getRepository(Orders::class)->find($id_order);
if ($order) {
$cart = $this->em->getRepository(Cart::class)->findOneBy(array('token'=>$this->session->get('token_cart')));
if($this->session->get('isStripeChoiceSaveAbonnement')) {
$this->session->remove('isStripeChoiceSaveAbonnement');
}
$this->session->remove('id_order');
$this->session->remove('charge');
$this->session->remove('token_cart');
$this->session->remove('payment_intent_id');
$this->session->remove('tk_or');
$nameFacture = $this->facture_service->uploadFacture($order->getId()); //creation facture
$order->setPathFacture($nameFacture);
$order->setIsAbonnementPro($cart->getIsAbonnementPro());
$this->em->persist($order);
$this->em->flush();
$order->setChargeStripeId($charge);
$order->setIsValid(true);
$status = $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
$order->setStatus($status);
$this->em->persist($order);
$this->em->flush();
if($order->getIsSaveCard()) $this->stripeConnectService->addCustomerStripeToPaymentIntent($id_order); // save card
//api delivree
$distinctCarrierOrderDetail = $this->order_service->getDistinctCarrierOrderDetail($order);
if($order->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
if ($distinctCarrierOrderDetail) {
foreach ($distinctCarrierOrderDetail as $item){
if($item['carrier']->getNum()== Carrier::STUART){
$data = $this->stuartService->createMission($order->getId(),true,$item);
if($order->getIsMultiAdresse()){
$this->stuartService->setLienTrakingMultipleLivraison($data, $order, $item);
}else {
$this->stuartService->setLienTrakingMultiple($data, $order, $item);
}
}
if ($item['carrier']->getNum() == Carrier::J1 || $item['carrier']->getNum() == Carrier::J2) {
// send livraison national
$this->apiCloudSend->createParcelMultiple($order->getId(),$item);
}
if ($item['carrier']->getNum() == Carrier::EXAPRINT) {
foreach ($item['details'] as $value){
if($order->getIsMultiAdresse()){
$this->exaprint->createOrderInitMultiLivraison($value,$item['adresse']);
}else{
$this->exaprint->createOrderInit($value,$order->getAdresseLivraison());
}
}
}
}
}
}else {
if ($order->getCarrier()) {
if ($order->getCarrier()->getNum() == Carrier::STUART) {
$data = $this->stuartService->createMission($order->getId());
$this->stuartService->setLienTraking($data, $order);
}
if ($order->getCarrier()->getNum() == Carrier::J1 || $order->getCarrier()->getNum() == Carrier::J2) {
// send livraison national
$this->apiCloudSend->createParcel($order->getId());
}
}
}
$this->order_service->createBonDeCommandeAndFolder($order); // create bon de livraison in serveur "commande/"
if($this->params->get('str_env') == 'PROD' || $this->params->get('str_env') == 'PREPROD2') {
if ($order->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
} else {
$this->notifications->sendOrder($order->getAdresseFacturation()->getEmail(), 'Nouvelle commande Copees', $order, $nameFacture, $distinctCarrierOrderDetail); // send order to user
$this->cart_service->checkMailProAndSendMail($order,$order->getAdresseFacturation()); // send mail if adresse mail pro
if ($distinctCarrierOrderDetail) {
foreach ($distinctCarrierOrderDetail as $item) {
$this->notifications->sendOrderDetailImprimeurMultiple($item['imprimeur']->getEmailImp(), 'Nouvelle commande Copees', $order, $item); // send order detail to Imprimeur
$this->notifications->sendNotifClientImprimeurCommentaireImprimeurMultiple($item['imprimeur']->getEmailImp(), 'Nouveau commentaire sur la commande #' . $order->getId(), $order, $item); //check commentaire client imprimeur
}
// send sms
if(isset($item['adresse'])){
if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
} else {
$local = $this->notifications->user_locale(null,null,$item['adresse']);
$content = $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($item['adresse']->getLastname()) . ' ' . ucfirst($item['adresse']->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($item['adresse']->getPhone(), $content);
}
}else{
if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
} else {
$local = $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
$content = $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($order->getAdresseLivraison()->getLastname()) . ' ' . ucfirst($order->getAdresseLivraison()->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
}
}
if ($item['imprimeur']->getMobile())
$local = $this->notifications->user_locale(null,$item['imprimeur']);
$content = $this->trans->trans('La commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' vient de vous être attribué. Si vous rencontrer un problème avec lacommande n\'hésitez pas nous contacter à contact@copees.com.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($item['imprimeur']->getMobile(), $content);
}
}
} else {
$this->notifications->sendOrder($order->getAdresseFacturation()->getEmail(), 'Nouvelle commande Copees', $order, $nameFacture); // send order to user
$this->cart_service->checkMailProAndSendMail($order,$order->getAdresseFacturation()); // send mail if adresse mail pro
if ($order->getImprimeur()) {
$this->notifications->sendOrderDetailImprimeur($order->getImprimeur()->getEmailImp(), 'Nouvelle commande Copees', $order); // send order detail to Imprimeur
$this->notifications->sendNotifClientImprimeurCommentaireImprimeur($order->getImprimeur()->getEmailImp(), 'Nouveau commentaire sur la commande #' . $order->getId(), $order); //check commentaire client imprimeur
// send sms
if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
} else {
$local = $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
$content = $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($order->getAdresseLivraison()->getLastname()) . ' ' . ucfirst($order->getAdresseLivraison()->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
}
if ($order->getImprimeur()->getMobile()) {
$local = $this->notifications->user_locale(null,$order->getImprimeur());
$content = $this->trans->trans('La commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' vient de vous être attribué. Si vous rencontrer un problème avec lacommande n\'hésitez pas nous contacter à contact@copees.com.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($order->getImprimeur()->getMobile(), $content);
}
}
}
$this->avisVerifiesService->notifAvisVerifies($order->getId()); // avis verifies
$this->candyService->referalCandy($request, $order->getId()); // referal candy
if (!empty($this->order_service->checkIsExpert($order))) {
$this->notifications->sendCopeesExpert('Notification Expert Copees', $order, $this->order_service->checkIsExpert($order)); // send copees expert
}
if (!empty($this->order_service->checkIsVerification($order))) {
$this->notifications->sendCopeesVerification('Notification Demande de verification Copees', $order, $this->order_service->checkIsVerification($order)); // send copees expert
}
if ($this->order_service->checkIsDistubutionFlyer($order)) {
$this->notifications->sendCopeesNotifDistrubution('Notification distribution Copees', $order); // send copees notif distrubution flyer
}
}
if($peimentIntentObject && $peimentIntentObject->payment_method_types[0] != 'sepa_debit'){
$isSepaPay = false;
}else{
$isSepaPay = true;
}
if($order->getIsWallet()){
$this->order_service->processAbonnementProWalletAfterCheckout($order); //process Abonnement Pro wallet If exist
$this->order_service->reduireMontantWalletB2bByOrder($order);//reduire amount to wallet
}else{
$this->order_service->processAbonnementProAfterCheckout($cart,$order,true,$isSepaPay); //process Abonnement Pro If exist
}
if($peimentIntentObject && $peimentIntentObject->payment_method_types[0] != 'sepa_debit'){
$this->stripeConnectService->createRefundByPaymentIntentIfEmptyDetail($order,$cart); // refound 0.5€ if 0€ in order
}
if($this->params->get('str_env') == 'PROD' || $this->params->get('str_env') == 'PREPROD') {
$this->notifications->sendRemerciementParticipation($order->getAdresseFacturation()->getEmail(), 'Profitez de ce cadeau ! '); // send remerciement de participation
$local = $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
$content = $this->trans->trans('Copees.com, Merci pour votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans('. Témoignez maintenant et prenez vos commandes en photo pour recevoir un avoir de 10€ sur votre prochaine commande Copees dès 30 euros d\'achat https://g.page/r/CSI6L7j-RVKPEBE/review.',[],'emailAndFactureAndSms',$local);
$this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
$this->notifications->sendNotifClientImprimeurCommentaire('Nouveau commentaire sur la commande #' . $order->getId(), $order); //check commentaire client imprimeur
}
$this->order_service->affiliaTapfiliale($order); //
$this->cart_service->sendRoutineMail1($order->getCustomer()->getUser());// send mail is first order
$this->cart_service->sendRoutineMail2($order->getCustomer()->getUser());// send mail is second order
$this->cart_service->sendRoutineMail3($order->getCustomer()->getUser());// send mail is third order
$resultAbo = $this->cart_service->checkB2bUser($this->getUser());
$abonnement = $resultAbo['abonnement'];
$isAbonnementProInCart = $resultAbo['isAbonnementProInCart'];
if($abonnement['is_abonnemen_pro'] || $isAbonnementProInCart){
$template = 'front/b2b/checkout/confirme.html.twig';
}else{
$template = 'front/checkout/confirme.html.twig';
}
return $this->render($template,['id_order'=>'id_order-'.$id_order,'order'=>$order]);
} else {
return $this->redirectToRoute('accueil');
}
} else {
return $this->redirectToRoute('accueil');
}
}
return $this->redirectToRoute('accueil');
}
/**
* @Route("/checkout-erreur", name="checkout_erreur",options={"expose"=true})
*/
public function errorCheckout(Request $request): Response
{
return $this->render('front/checkout/pay-error.html.twig');
}
/**
* @Route("/get-country-code/{country}", name="get_country_code",options={"expose"=true})
*/
public function getCountry(Request $request , $country): Response
{
$countryEntity = $this->em->getRepository(LanguageCountry::class)->findOneBy(['countryName'=>$country]);
$countryCode = 0;
if($countryEntity){
$countryCode = $countryEntity->getCountryCode() ? $countryEntity->getCountryCode() : 0;
}
$response = new Response();
$response->setContent($countryCode);
$response->setStatusCode(200);
return $response;
}
}