quivers-8.x-1.x-dev/src/EventSubscriber/OrderCompleteSubscriber.php
src/EventSubscriber/OrderCompleteSubscriber.php
<?php
namespace Drupal\quivers\EventSubscriber;
use Drupal\quivers\QuiversMiddlewareService;
use Drupal\commerce_order\Entity;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\commerce_order\Event\OrderEvent;
use Drupal\commerce_payment\Entity\Payment;
use Drupal\Core\Entity\EntityTypeInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Drupal\quivers\LogTracking;
use Drupal\quivers\QuiversService;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
* Class OrderCompleteSubscriber.
*
* @package Drupal\quivers
*/
class OrderCompleteSubscriber implements EventSubscriberInterface {
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManager
* */
protected $entityTypeManager;
// protected $quiversConfig;
/**
* The client.
*
* @var \GuzzleHttp\Client
*/
// protected $quiversMiddlewareClient;
/**
* Constructor.
*/
public function __construct(EntityTypeManager $entity_type_manager ) {
$this->entityTypeManager = $entity_type_manager;
}
public static function getSubscribedEvents() {
// The format for adding a state machine event to subscribe to is:
// {group}.{transition key}.pre_transition or {group}.{transition key}.post_transition
// depending on when you want to react.
$events = [
'commerce_order.order.paid' => ['onOrderPaid',-100],
'commerce_order.commerce_order.update' => ['onOrderUpdate' ,-100],
];
return $events;
}
// order paid code start
public function onOrderPaid(OrderEvent $event) {
// @todo Write code that will run when the subscribed event fires.
// get the current order
$order = $event->getOrder();
$status = (string) $order->getState()->value;
$payment_gateway = $order->get('payment_gateway')->entity->value;
//if payment state is completed
if($order->isPaid()) {
// apply transition to order
if($order->getState()->getId() != 'completed' && $order->getState()->getId() == 'pending') {
$order->getState()->applyTransitionById('process');
}
}
}
// order paid code end
// onUpdate code start
public function onOrderUpdate(OrderEvent $event) {
$log_tracking = \Drupal::service('quivers.log_tracking');
$order = $event->getOrder();
try{
$current_path = \Drupal::service('path.current')->getPath();
$current_site_url= \Drupal::service('path_alias.manager')->getAliasByPath($current_path);
$session = \Drupal::request()->getSession();
$default_site_Url='/checkout/'.$order->id().'/review';
if($default_site_Url==$current_site_url)
{
$order_item_taxes =$session->get('order_item_taxes');
$log_tracking->debug_mode_on(TRUE,'Default_site_url and Current_site_url','OrderCompleteSubscriber',$order->getEmail(),$order->id(),$order_item_taxes,"Url Matched,Order Item Taxes not Null");
if(empty($order_item_taxes)){
try{
$log_tracking->debug_mode_on(TRUE,'Default_site_url and Current_site_url','OrderCompleteSubscriber',$order->getEmail(),$order->id(),null,"Url Matched,Order Item Taxes Null");
$quivers_service = \Drupal::service('quivers.quivers_service');
$tax_response= $quivers_service->calculateValidateTax($order);
$log_tracking->debug_mode_on(TRUE,'calculateValidateTaxResponse','OrderCompleteSubscriber',$order->getEmail(),$order->id(),null,$tax_response);
if(empty($tax_response)){
$baseurl= \Drupal::request()->getSchemeAndHttpHost();
$response = new RedirectResponse($baseurl.'/checkout/'.$order->id().'/review');
$response->send();
$log_tracking->debug_mode_on(TRUE,'calculateValidateTaxResponse','OrderCompleteSubscriber',$order->getEmail(),$order->id(),"Tax Response from validate empty error throws",$tax_response);
\Drupal::messenger()->addMessage('Shipping Address is Not Found','error');
}
}
catch(\Exception $e){
$log_tracking->debug_mode_on(TRUE,'In Catch,Validate Fails TaxResponse ','OrderCompleteSubscriber',$order->getEmail(),$order->id(),$e->getMessage(),$tax_response);
}
}
}
}
catch(\Exception $e){
$log_tracking->debug_mode_on(TRUE,'In Catch,Tax not calculated','OrderCompleteSubscriber',$order->getEmail(),$order->id(),null,$e->getMessage());
}
try{
if($order->getTotalPaid()){
if(!empty($order->getTotalPrice())){
$getTotalPrice = $order->getTotalPrice();
$getTotalPrice = floatval(preg_replace('/[^\d\.]+/', '', $getTotalPrice ));
$total_amount =$session->get('total_amount');
$session_order_id=$session->get('order_id');
if($getTotalPrice != $total_amount && $order->id() == $session_order_id){
$order_id = $order->id();
$field = ['total_price__number'=> $total_amount ];
$query=\Drupal::database();
$data=$query->update('commerce_order')->fields($field)
->condition('order_id', $order_id )
->execute();
}
}
}
}
catch(\Exception $e){
$log_tracking->checkTotalPriceNumberUpdateStatus('Order value update fail',null,null,null,$e->getMessage());
}
}
}
