<?php
namespace App\Flexy\FrontBundle\Controller;
use App\Entity\App\Flexy\ShopBundle\Entity\Chronodyali\StatusTrackingOrder;
use App\Service\GenerateTokenChronoDialiService;
use App\Flexy\FrontBundle\Repository\ProductFrontRepository;
use App\Flexy\ProductBundle\Repository\ProductRepository;
use App\Flexy\ShopBundle\Entity\Customer\Customer;
use App\Flexy\ShopBundle\Entity\Order\Order;
use App\Flexy\ShopBundle\Entity\Order\OrderItem;
use App\Flexy\ShopBundle\Entity\Product\ProductShop;
use App\Flexy\ShopBundle\Entity\Shipping\City;
use App\Flexy\ShopBundle\Entity\Chronodyali\CustomerChronoCustomer;
use App\Flexy\ShopBundle\Entity\Chronodyali\data;
use App\Flexy\ShopBundle\Entity\Chronodyali\Address;
use App\Flexy\ShopBundle\Entity\Chronodyali\CustomerChrono;
use App\Flexy\ShopBundle\Entity\Chronodyali\DeliveryTimeslot;
use App\Flexy\ShopBundle\Entity\Chronodyali\Dimension;
use App\Flexy\ShopBundle\Entity\Chronodyali\StatusTrackingChrono;
use App\Flexy\ShopBundle\Entity\Chronodyali\Item;
use App\Flexy\ShopBundle\Entity\Chronodyali\ParcelJob;
use App\Flexy\ShopBundle\Entity\Chronodyali\PickupTimeslot;
use App\Flexy\ShopBundle\Entity\Chronodyali\ReferenceOrder;
use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Flexy\ShopBundle\Repository\Payment\PaymentMethodRepository;
use App\Flexy\ShopBundle\Repository\Shipping\CityRepository;
use App\Flexy\ShopBundle\Repository\Chronodyali\TransportTarifRepository;
use App\Repository\Flexy\ShopBundle\Entity\Customer\CustomerAddressRepository;
use App\Repository\Flexy\ShopBundle\Entity\Shipping\DepartementRepository;
use Symfony\Component\HttpFoundation\Request;
use App\Flexy\ShopBundle\Repository\Order\OrderRepository;
use App\Flexy\ShopBundle\Repository\VendorRepository;
use App\Flexy\ShopBundle\Repository\Order\AccessTokenExpirationRepository;
use CMI\CmiClient;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
#[Route('/shop/checkout')]
class CheckoutController extends AbstractController
{
#[Route('/', name: 'checkout')]
public function cart(
PaymentMethodRepository $paymentMethodRepository,
CustomerRepository $customerRepository,
TransportTarifRepository $transportTarifRepository,
OrderRepository $orderRepository,
CityRepository $cityRepository,
GenerateTokenChronoDialiService $token,
AccessTokenExpirationRepository $accessTokenExpirationRepository
): Response
{
$hasAccess = $this->isGranted('ROLE_CUSTOMER');
if(!$hasAccess){
return $this->redirectToRoute("login_register");
}
$currentUser = $this->getUser();
$customer = $customerRepository->findOneBy(["user"=>$currentUser]);
$cities = $cityRepository->findAll();
$transport= $transportTarifRepository->findAll();
// $token->generateTokenChronoDiali(); hire ici j'ai désactiver le generation de token
//dd($token);
/*if(count($accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0))){
$accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0);
$values = $accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0);
dd($values[0]->getToken());
}else{
$token->generateTokenChronoDiali();
}*/
$paymentMethods = $paymentMethodRepository->findBy(["isEnabled"=>true]);
return $this->render('@Flexy\FrontBundle/templates/checkout/checkout.html.twig',[
"paymentMethods"=>$paymentMethods,
"customer"=>$customer,
"cities"=> $cities,
"transport"=>$transport,
]);
}
#[Route('/cmi/cmipaiement', name:'cmipaiement')]
public function cmi(
Request $request,
PaymentMethodRepository $paymentMethodRepository,
ProductFrontRepository $productFrontRepository,
CustomerRepository $customerRepository,
CustomerAddressRepository $customerAddressRepository,
DepartementRepository $departementRepository
): Response
{
$firstName = $request->request->get("firstName");
$lastName = $request->request->get("lastName");
$address = $request->request->get("address");
$companyName = $request->request->get("companyName");
//$departement = $departementRepository->find((int)$request->request->get("department"))->getName();
$city = $request->request->get("city");
$tel = $request->request->get("tel");
$postcode = $request->request->get("postcode");
$email = $request->request->get("email");
$amountToPay = $request->request->get("amount");
$orderid = $request->request->get("orderid");
$id = $request->request->get("id");
$delivery = $request->request->get("delivery");
$adressCollectes = $request->request->get("adressCollectes");
$weight = $request->request->get("weight");
$base_url = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath().'/shop/checkout';
/*$base_url="http://omall.fibysen.com/shop/checkout";
$base_url="http://localhost:8000/shop/checkout";*/
$client = new CmiClient([
'storekey' => 'Omall2022', // STOREKEY
'clientid' => '600003088', // CLIENTID
'oid' => $orderid."/".$id, // COMMAND ID IT MUST BE UNIQUE
'shopurl' => $base_url, // SHOP URL FOR REDIRECTION
'okUrl' => $base_url.'/okFail', // REDIRECTION AFTER SUCCEFFUL PAYMENT
'failUrl' => $base_url.'/okFail', // REDIRECTION AFTER FAILED PAYMENT
'email' => $email, // YOUR EMAIL APPEAR IN CMI PLATEFORM
'BillToName' => $firstName.' '.$lastName, // YOUR NAME APPEAR IN CMI PLATEFORM
'BillToCompany' => $companyName , // YOUR COMPANY NAME APPEAR IN CMI PLATEFORM
'BillToStreet12' => $address."/livraison:".$delivery."/collect:".$adressCollectes , // YOUR ADDRESS APPEAR IN CMI PLATEFORM NOT REQUIRED
'BillToCity' => $city, // YOUR CITY APPEAR IN CMI PLATEFORM NOT REQUIRED
'BillToStateProv' => $address, // YOUR STATE APPEAR IN CMI PLATEFORM NOT REQUIRED
'BillToPostalCode' => 'Code postal : '.$postcode , // YOUR POSTAL CODE APPEAR IN CMI PLATEFORM NOT REQUIRED
'BillToCountry' => '504'."/poids:".$weight, // YOUR COUNTRY APPEAR IN CMI PLATEFORM NOT REQUIRED (504=MA)
'tel' => $tel, // YOUR PHONE APPEAR IN CMI PLATEFORM NOT REQUIRED
'amount' => $amountToPay, // RETRIEVE AMOUNT WITH METHOD POST
'CallbackURL' => $base_url.'/callback', // CALLBACK
'AutoRedirect' => 'true'
]);
// OPTIONAL ATTRIBUTES
// $client->lang = 'ar'; // CHANGE LANG PAGE
//$client->AutoRedirect = 'true'; // REDIRECT THE CUSTOMER AUTOMATICALY BACK TO THE MERCHANT's WEB SITE WHEN TRANSACION IS ACCEPTED
//dd($client);
$client->redirect_post(); // CREATE INPUTS HIDDEN, GENERATE A VALID HASH AND MAKE REDIRECT POST TO CMI
/*$paymentMethods = $paymentMethodRepository->findBy(["isEnabled"=>true]);*/
}
#[Route('/chronodyali', name: 'chronodyali')]
public function insertDataInNinjaVan( Request $request,
OrderRepository $orderRepository,
AccessTokenExpirationRepository $accessTokenExpirationRepository
): Response
{
//$allOrders = $this->dataRepository->findAll();
/*$mapedArray = array_map(function ($object) {
return $object->getRequestedTrackingNumber();
}, $allOrders);*/
//dd($mapedArray);
$ch = curl_init();
$time = new \DateTime();
$entityManager = $this->getDoctrine()->getManager();
$addressFrom = new Address();
$addressFrom->setAddress1("rue nador impasse 69")
->setAddress2("x")
->setArea("x")
->setcity("Casablanca")
->setState("x")
->setAddressType("x")
->setCountry("MA")
->setPostcode("20000");
$entityManager->persist($addressFrom);
$addressTo = new Address();
$addressTo->setAddress1("Jalan PJU 8/8")
->setAddress2("")
->setArea("Damansara Perdana")
->setcity("Petaling Jaya")
->setState("x")
->setAddressType("office")
->setCountry("MA")
->setPostcode("20000");
$entityManager->persist($addressTo);
$from = new CustomerChrono();
$from->setName("DP IMMO, OMALL")
->setPhoneNumber("+212 623 321 345")
->setEmail("contact.info@o-mall.ma")
->setAddress($addressTo);
$entityManager->persist($from);
$to = new CustomerChrono();
$to->setName("najib ")
->setPhoneNumber("+60138201527")
->setEmail("benkirane.doe@gmail.com")
->setAddress($addressTo);
$entityManager->persist($to);
$timeSlot = new PickupTimeslot();
$timeSlot->setStartTime("09:00")
->setEndTime("12:00")
->setTimezone("Africa/Casablanca");
$entityManager->persist($timeSlot);
$deliveryTimeSlot = new DeliveryTimeslot();
$deliveryTimeSlot->setStartTime("09:00")
->setEndTime("12:00")
->setTimezone("Africa/Casablanca");
$entityManager->persist($deliveryTimeSlot);
$dimension = new Dimension();
$parcelJob = new ParcelJob();
$parcelJob->setIsPickupRequired(true)
->setPickupAddressId("9905505")
//->setCacheOnDelivery($order->node->shippingInfo->codValue)
->setPickupServiceType("Scheduled")
->setPickupServiceLevel("Standard")
->setPickupDate($time->format('Y-m-d'))
->setPickupTimeslot($timeSlot)
->setPickupInstructions("pick up with care")
->setDeliveryInstructions("If recipient is not around, leave parcel in power riser")
->setDeliveryStartDate($time->format('Y-m-d'))
->setDeliveryTimeslot($deliveryTimeSlot)
->setDimensions($dimension);
$entityManager->persist($parcelJob);
$dimension->setWeight(1.5);
$entityManager->persist($dimension);
// = new \DateTime($order->node->shippingInfo->prefferedDeliveryDate);
$reference = new ReferenceOrder();
$reference->setMerchantOrderNumber("SHIP-1234-56789");
$data = new data();
//if ($order->node->fulfillmentOrderColisRecords->edgeCount > 0) {
//foreach ($order->node->fulfillmentOrderColisRecords->edges as $package) {
$data->setServiceType("Parcel")
->setServiceLevel("Nextday")
->setRequestedTrackingNumber("TSST598267878")
->setReference($reference)
->setForm($from)
->setTo($to)
->setParcelJob($parcelJob);
$entityManager->persist($reference);
// }
// if (!in_array($package->node->trackingNumber, $mapedArray)) {
$entityManager->persist($data);
// }
//}
//$entityManager->flush();
$trk="TSST598267580";
$jsonString =' {
"service_type": "Parcel",
"service_level": "Nextday",
"requested_tracking_number": "'.$trk.'",
"reference": {
"merchant_order_number": "SHIP-1234-56789"
},
"from": {
"name": "DP IMMO, OMALL",
"phone_number": "+212 623 321 345",
"email": "contact.info@o-mall.ma",
"address": {
"address1": "123 Rue sokrate",
"address2": "",
"area": "Taman Sri Delima",
"city": "Casablanca",
"state": "Casablanca - Anfa",
"address_type": "office",
"country": "MA",
"postcode": "20000"
}
},
"to": {
"name": "Jane Doe",
"phone_number": "+60103067174",
"email": "jane.doe@gmail.com",
"address": {
"address1": "Jalan PJU 8/8",
"address2": "",
"area": "Damansara Perdana",
"city": "Petaling Jaya",
"state": "Selangor",
"address_type": "home",
"country": "MA",
"postcode": "20000"
}
},
"parcel_job": {
"is_pickup_required": true,
"pickup_address_id": "65431",
"pickup_service_type": "Scheduled",
"pickup_service_level": "Standard",
"pickup_date": "'.$time->format('Y-m-d').'",
"pickup_timeslot": {
"start_time": "09:00",
"end_time": "18:00",
"timezone": "Africa/Casablanca"
},
"pickup_instructions": "Pickup with care!",
"delivery_instructions": "If recipient is not around, leave parcel in power riser.",
"delivery_start_date": "'.$time->format('Y-m-d').'",
"delivery_timeslot": {
"start_time": "09:00",
"end_time": "12:00",
"timezone": "Africa/Casablanca"
},
"dimensions": {
"weight": 1.5
} ,
"items": [
{
"item_description": "Sample description",
"quantity": 1,
"is_dangerous_good": false
}
]
}
}';
$jayParsedAry = json_encode($jsonString);
$tokenRepository = $accessTokenExpirationRepository->findAll()[0];
curl_setopt($ch, CURLOPT_URL, "https://api.chronodiali.ma/ma/4.1/orders");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'User-Agent: PHP Script',
'Content-Type: application/json;charset=utf-8',
'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
]
);
$response = curl_exec($ch);
$decodedResponse = json_decode($response,true);
curl_close($ch);
// dd($decodedResponse["error"]['title']);
// dd($decodedResponse);
// die();
}
#[Route('/webhooks', name: 'webhooks')]
public function webhookschronodyali(
Request $request,
EntityManagerInterface $em,
OrderRepository $orderRepository,
AccessTokenExpirationRepository $accessTokenExpirationRepository,
SerializerInterface $serializerInterface
): JsonResponse
{
//$jsonString = json_decode($request->getContent(), true);
/* dd($jsonString);
$jsonString =' {
"shipper_id": "Parcel",
"status": "Pending Pickup",
"shipper_re_no": "123344",
"tracking_re_no": "123344",
"shipper_order_ref_no": "123344",
"timestamp": "2021-03-01T07:00:00+0700",
"id":"dcfea1-3445-535-7dj",
"tracking_id":"TSST598267185"
}'; */
// $jayParsedAry = json_encode($jsonString);
$decodedResponse = json_decode($request->getContent(),true);
$id_order= explode("TSST598267",$decodedResponse["tracking_id"]);
$order_id = ltrim($id_order[1], "0");
if($decodedResponse["status"]== "Pending Pickup") {
$status= "En attente de collecte";
}else if($decodedResponse["status"]== "Successful Pickup") {
$status= "Collecte réussie";
}else if($decodedResponse["status"]== "Completed") {
$status= "Livré";
}else if($decodedResponse["status"]== "Successful Delivery") {
$status= "Livraison réussie";
}else if($decodedResponse["status"]== "Pending Reschedule") {
$status= "En attente de reprogrammation";
}else if($decodedResponse["status"]== "On Vehicle For Delivery") {
$status= "En cours de livraison";
}else if($decodedResponse["status"]== "Returned To Sender") {
$status= "Retourné à l'expéditeur";
}else if($decodedResponse["status"]== "Cancelled") {
$status= "Annulé";
}else if($decodedResponse["status"]== "Arrived At Sorting Hub") {
$status= "Arrivé au centre de tri";
}else if($decodedResponse["status"]== "En Route To Sorting Hub") {
$status= "En cours d'acheminement";
}else if($decodedResponse["status"]== "Return To Sender Triggered") {
$status= "Retour à l'expéditeur déclenché";
}else if($decodedResponse["status"]== "Pickup Fail") {
$status= "Echec à la collecte";
}
$order = $orderRepository->UpdateStatusOrder($status,$order_id);
$entityManager = $this->getDoctrine()->getManager();
$datenow = new \DateTime();
// $date = $datenow->format('Y-m-d');
$statustrackingorder = new StatusTrackingChrono();
$statustrackingorder->setIdOrder($order_id)
->setStatus($decodedResponse["status"])
//->setDateInsert($datenow->format('Y-m-d'))
->setTimestamp($decodedResponse["timestamp"])
->setTrackingId($decodedResponse["tracking_id"]);
$entityManager->persist($statustrackingorder);
$entityManager->flush();
//return dd($order);
$data = $serializerInterface->serialize($order,'json');
// $response->headers->set('Content-Type', 'application/json');
return new JsonResponse($data, Response::HTTP_OK, [] , true);
}
#[Route('/okFail', name: 'ok_Fail')]
public function okFail(
Request $request,
OrderRepository $orderRepository,
AccessTokenExpirationRepository $accessTokenExpirationRepository
): Response
{
$data = $request->request->all();
$tracking="";
$delivery = $request->request->get('BillToStreet12');
$order = $request->request->get('ReturnOid');
$poid = $request->request->get('BillToCountry');
$weight=explode("/poids:", $poid);
//dd($weight[1]);
$valueDelivery=explode("/livraison:", $delivery);
$id = explode("/", $order);
$value=explode("/collect:", $valueDelivery[1]);
$Delivery =$value[0];
$adressCollectes=$value[1];
$TransId = $request->request->get('TransId');
$response = $request->request->get('Response');
$email = $request->request->get('email');
$ammount = $request->request->get('amount');
$date_transation = $request->request->get('EXTRA_TRXDATE');
$oid = $request->request->get('oid');
if($response == "Approved"){
$order = $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
$order->setStatusPayment($response);
$order->setTransationId($TransId);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($order);
$entityManager->flush();
if($Delivery == "chronodyali"){
$order = $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
$order->setStatus("En attente de collecte");
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($order);
$entityManager->flush();
$poids=0;
$adress = explode("|", $adressCollectes);
foreach($adress as $i =>$key) {
if(count($adress) > 1) {
$poids=($weight[1]/2);
}else{
$poids=$weight[1];
}
$ch = curl_init();
$time = new \DateTime();
$trk="TSST598267".$i.$id[1];
$jsonString =' {
"service_type": "Parcel",
"service_level": "Nextday",
"requested_tracking_number": "'.$trk.'",
"reference": {
"merchant_order_number": "SHIP-1234-56789"
},
"from": {
"name": "DP IMMO, OMALL",
"phone_number": "+212 623 321 345",
"email": "contact.info@o-mall.ma",
"address": {
"address1":"'.$key.'",
"address2": "",
"area": "Taman Sri Delima",
"city": "",
"state": "",
"address_type": "office",
"country": "MA",
"postcode": "20000"
}
},
"to": {
"name": "'.$request->request->get('BillToName').'",
"phone_number": "'.$request->request->get('tel').'",
"email": "'.$request->request->get('email').'",
"address": {
"address1": "'.$valueDelivery[0].'",
"address2": "",
"area": "Damansara Perdana",
"city": "'.$request->request->get('BillToCity').'",
"state": "'.$request->request->get('BillToCity').'",
"address_type": "home",
"country": "MA",
"postcode": "20000"
}
},
"parcel_job": {
"is_pickup_required": true,
"pickup_address_id": "65431",
"pickup_service_type": "Scheduled",
"pickup_service_level": "Standard",
"pickup_date": "'.$time->format('Y-m-d').'",
"pickup_timeslot": {
"start_time": "09:00",
"end_time": "18:00",
"timezone": "Africa/Casablanca"
},
"pickup_instructions": "Pickup with care!",
"delivery_instructions": "If recipient is not around, leave parcel in power riser.",
"delivery_start_date": "'.$time->format('Y-m-d').'",
"delivery_timeslot": {
"start_time": "09:00",
"end_time": "12:00",
"timezone": "Africa/Casablanca"
},
"dimensions": {
"weight": "'.$poids.'"
} ,
"items": [
{
"item_description": "Sample description",
"quantity": 1,
"is_dangerous_good": false
}
]
}
}';
$jayParsedAry = json_encode($jsonString);
$tokenRepository = $accessTokenExpirationRepository->findAll()[0];
curl_setopt($ch, CURLOPT_URL, "https://api.chronodiali.ma/ma/4.1/orders");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'User-Agent: PHP Script',
'Content-Type: application/json;charset=utf-8',
'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
]
);
$response = curl_exec($ch);
$decodedResponse = json_decode($response,true);
curl_close($ch);
}
//dd($decodedResponse);
// dd($decodedResponse["requested_tracking_number"]);
if($Delivery == "chronodyali"){
$tracking=$decodedResponse["requested_tracking_number"];
}
}
$transport = (new \Swift_SmtpTransport('omav2.heberdomaine.net', 465, 'ssl'))
->setUsername('devomall@fibysen.com')
->setPassword('devomall2022')
;
$mailer = new \Swift_Mailer($transport);
$message = (new \Swift_Message("Validation de la commande"))
->setFrom(['contact@omall.ma'=>"O'Mall"])
->setTo([$request->request->get('email')=>"Une commande a été payer de la plate forme omall"])
->setBody(
$this->renderView(
'@Flexy/FrontBundle/templates/registration/mail_chronovendor.html.twig',
[
"commande"=>$request->request->get('ReturnOid'),
"TransId"=>$request->request->get('TransId'),
]
),
'text/html'
);
$mailer->send($message);
return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentResult.html.twig',[
"TransId"=>$TransId,
"order"=>$oid,
"email"=>$email,
"ammount"=> $ammount,
"TransDate" => $date_transation,
"chronodyali"=> $tracking,
]);
}else{
//dd($order);
$order = $request->request->get('oid');
$id = explode("/", $order);
$order = $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($order);
$entityManager->flush();
return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentErreur.html.twig',[
]);
}
//dd($data);
}
#[Route('/send-mail-offer', name: 'send_mail')]
public function sendmailoffer(
Request $request,
\Swift_Mailer $mailer
): Response
{
$message = (new \Swift_Message("Merci ! Votre réservation à l'établissement O'mall est confirmée"))
->setFrom(['contact@omall.ma'=>"O'Mall"])
->setTo(["najib.benkirane@gmail.com"=>"Reservation Service O'Mall"])
->setBody(
$this->renderView(
'@Flexy/FrontBundle/templates/registration/mail_chronovendor.html.twig',
[
"commande"=>"CMD220500030",
]
),
'text/html'
);
$mailer->send($message);
return $this->redirectToRoute('front_home');
}
#[Route('/confirm/ajax', name: 'confirm_checkout_ajax')]
public function confirmChcekout(
Request $request,
PaymentMethodRepository $paymentMethodRepository,
ProductFrontRepository $productFrontRepository,
CustomerRepository $customerRepository,
CustomerAddressRepository $customerAddressRepository,
DepartementRepository $departementRepository,
AccessTokenExpirationRepository $accessTokenExpirationRepository,
VendorRepository $vendorRepository,
\Swift_Mailer $mailer
): Response
{
$currentUser = $this->getUser();
if($currentUser){
$customer = $customerRepository->findOneBy(["user"=>$currentUser]);
if(!$customer){
$customer = new Customer();
}
}
$adressCollectes = $request->query->get("adressCollectes");
$delivery = $request->query->get("delivery");
$firstName = $request->query->get("firstName");
$lastName = $request->query->get("lastName");
$companyName = $request->query->get("companyName");
$address = $request->query->get("address");
$city = $request->query->get("city");
$departement = $departementRepository->find((int)$request->query->get("department"))->getName();
$postcode = $request->query->get("postcode");
$email = $request->query->get("email");
$tel = $request->query->get("tel");
$comment = $request->query->get("comment");
$amount = $request->query->get("amount");
$weight = $request->query->get("weight");
$priceWeight = $request->query->get("priceWeight");
$vendeur = $request->query->get("vendeur");
$order = new Order();
if($request->query->get("customerAdresseShipping")){
$customerAddress = $customerAddressRepository->find((int)$request->query->get("customerAdresseShipping"));
if($customerAddress){
$firstName = $customerAddress->getCustomer()->getFirstName();
$lastName = $customerAddress->getCustomer()->getLastName();
$companyName = $customerAddress->getCompanyName();
$address = $customerAddress->getAddress();
$city = $customerAddress->getCity();
$departement = $customerAddress->getDepartement();
$postcode = $customerAddress->getPostCode();
if(!$email){
$email = $customerAddress->getCustomer()->getEmail();
}
if($customerAddress->getEmail()){
$email = $customerAddress->getEmail();
}
$email = $email ;
$tel = $customerAddress->getPhone();
}
}
if($request->query->get("isBilling") and $request->query->get("isBilling")=="on"){
if($request->query->get("customerAdresseBilling")){
$customerAddressBilling = $customerAddressRepository->find((int)$request->query->get("customerAdresseBilling"));
if($customerAddress){
$firstNameBilling = $customerAddressBilling->getCustomer()->getFirstName();
$lastNameBilling = $customerAddressBilling->getCustomer()->getLastName();
$companyNameBilling = $customerAddressBilling->getCompanyName();
$addressBilling = $customerAddressBilling->getAddress();
$cityBilling = $customerAddressBilling->getCity();
$departementBilling = $customerAddressBilling->getDepartement();
$postcodeBilling = $customerAddressBilling->getPostCode();
if(!$email){
$email = $customerAddress->getCustomer()->getEmail();
}
if($customerAddress->getEmail()){
$email = $customerAddress->getEmail();
}
$emailBilling = $email ;
$telBilling = $customerAddressBilling->getPhone();
}
//Billing : BySamir
//Il manque la creation de facturation dans l'order
}
}
$order->setFirstName($firstName);
$order->setLastName($lastName);
$order->setCompanyName($companyName);
$order->setAddress($address);
$order->setCity($city);
$order->setCountry("Maroc");
$order->setDepartment($departement);
$order->setPostcode($postcode);
$order->setEmail($email);
$order->setTel($tel);
$order->setWeight($weight);
$order->setPriceWeight($priceWeight);
$order->setComment($comment);
foreach((array)$request->query->get("orderItems") as $singleOrderItem){
$orderItem = new OrderItem();
$product = $productFrontRepository->find((int)$singleOrderItem["id"]);
// TODO BySamir : Check if product in DB
// TODO BySamir : Check if stock existe
// TODO BySamir : Else redirection to message
if($product){
$orderItem->setProduct($product);
$orderItem->setPrice($product->getPrice());
$orderItem->setQuantity($singleOrderItem["quantity"]);
$order->addOrderItem($orderItem);
}
}
$customer->setFirstName($firstName);
$customer->setLastName($lastName);
$customer->setAddress($address);
$customer->setEmail($email);
$customer->setCompanyName($companyName);
$customer->setPhone($tel);
$order->setCustomer($customer);
$em = $this->getDoctrine()->getManager();
$em->persist($order);
$em->flush();
/* hire */
if($vendeur != ""){
$vendeurs = explode(",", $vendeur);
$data_vendor=array_filter($vendeurs);
foreach($data_vendor as $i =>$key) {
$vendor = $vendorRepository->findBy(["id"=>$data_vendor]);
$transport = (new \Swift_SmtpTransport('omav2.heberdomaine.net', 465, 'ssl'))
->setUsername('devomall@fibysen.com')
->setPassword('devomall2022')
;
$mailer = new \Swift_Mailer($transport);
$message = (new \Swift_Message("Service Omall"))
->setFrom(['contact@omall.ma'=>"O'Mall"])
->setTo([$vendor[$i]->getEmail()=>"Une commande a été payer de la plate forme omall"])
->setBody(
$this->renderView(
'@Flexy/FrontBundle/templates/registration/mail_vendorOffer.html.twig',
[
"commande"=>"CMD221000".$order->getId(),
]
),
'text/html'
);
$mailer->send($message);
}
}
$paymentMethods = $paymentMethodRepository->findBy(["isEnabled"=>true]);
$paymentMethod = $request->query->get("paymentMethod");
if($paymentMethod == "1" or $paymentMethod == "2"){
$order = $this->getDoctrine()->getRepository(Order::class)->find($order);
if($paymentMethod == "1"){
$order->setStatusPayment("PAL");
}else{
$order->setStatusPayment("VB");
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($order);
$entityManager->flush();
$adress = explode("|", $adressCollectes);
foreach($adress as $i =>$key) {
if(count($adress) > 1) {
$poids=($weight/2);
}else{
$poids=$weight;
}
$time = new \DateTime();
$ch = curl_init();
$trk="TSST598267".$i.$order->getId();
$jsonString =' {
"service_type": "Parcel",
"service_level": "Nextday",
"requested_tracking_number": "'.$trk.'",
"reference": {
"merchant_order_number": "SHIP-1234-56789"
},
"from": {
"name": "DP IMMO, OMALL",
"phone_number": "+212 623 321 345",
"email": "contact.info@o-mall.ma",
"address": {
"address1":"'.$key.'",
"address2": "",
"area": "Taman Sri Delima",
"city": "",
"state": "",
"address_type": "office",
"country": "MA",
"postcode": "20000"
}
},
"to": {
"name": "'.$firstName.' '.$lastName.'",
"phone_number": "'.$tel.'",
"email": "'.$email.'",
"address": {
"address1": "'.$address.'",
"address2": "",
"area": "Damansara Perdana",
"city": "'.$city.'",
"state": "'.$departement.'",
"address_type": "home",
"country": "MA",
"postcode": "20000"
}
},
"parcel_job": {
"is_pickup_required": true,
"pickup_address_id": "65431",
"pickup_service_type": "Scheduled",
"pickup_service_level": "Standard",
"pickup_date": "'.$time->format('Y-m-d').'",
"pickup_timeslot": {
"start_time": "09:00",
"end_time": "18:00",
"timezone": "Africa/Casablanca"
},
"pickup_instructions": "Pickup with care!",
"delivery_instructions": "If recipient is not around, leave parcel in power riser.",
"delivery_start_date": "'.$time->format('Y-m-d').'",
"delivery_timeslot": {
"start_time": "09:00",
"end_time": "12:00",
"timezone": "Africa/Casablanca"
},
"dimensions": {
"weight": "'.$poids.'"
} ,
"items": [
{
"item_description": "Sample description",
"quantity": 1,
"is_dangerous_good": false
}
]
}
}';
$jayParsedAry = json_encode($jsonString);
$tokenRepository = $accessTokenExpirationRepository->findAll()[0];
curl_setopt($ch, CURLOPT_URL, "https://api.chronodiali.ma/ma/4.1/orders");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'User-Agent: PHP Script',
'Content-Type: application/json;charset=utf-8',
'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
]
);
$response = curl_exec($ch);
$decodedResponse = json_decode($response,true);
curl_close($ch);
}
//dd($decodedResponse);
// dd($decodedResponse["requested_tracking_number"]);
$tracking="";
$tracking=$decodedResponse["requested_tracking_number"];
return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentResultNoPay.html.twig',[
"chronodyali"=>$tracking,
"order"=>$order->getId(),
"amount"=>$amount,
"email"=>$email,
]);
} else {
return $this->render('@Flexy\FrontBundle/templates/checkout/payment.html.twig',[
"order"=>$order,
"amount"=>$amount,
"delivery"=>$delivery,
"adressCollectes"=>$adressCollectes,
"weight"=>$weight,
]);
}
}
#[Route('/departements/ajax', name: 'departements_ajax')]
public function ajaxDeparatements(Request $request,CityRepository $cityRepository){
//cityID
$cityParam = $request->query->get("city");
$city = $cityRepository->findOneBy(["name"=>$cityParam]);
if(!$city){
$city = $cityRepository->find((int)$cityParam);
}
$departemets = [];
if($city){
$departemets = $city->getDepartements();
}
return $this->render("@Flexy/FrontBundle/templates/checkout/ajax/_departementsResult.html.twig",[
"departements"=>$departemets
]);
}
}