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());
       }
      }
    }

    

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc