Advertisement
Greenice

Yii2 Model Example

Jan 31st, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.64 KB | None | 0 0
  1. <?php
  2.  
  3. class Order extends CommonOrder
  4. {
  5.     const GUEST_CHECKOUT       = 'guest';
  6.     const GUEST_CHECKOUT_VALUE = 1;
  7.     const TRANSPORTATION_ON = 'on';
  8.    
  9.     public $terms = false;
  10.  
  11.     public static function model($className = __CLASS__)
  12.     {
  13.         return parent::model($className);
  14.     }
  15.  
  16.     public static function loadOrderFromCart(Cart $cart, $guestCheckout = false)
  17.     {
  18.         /** @var $order Order */
  19.  
  20.         if ($guestCheckout) {
  21.             $order = new Order(self::GUEST_CHECKOUT);
  22.             $order->guest = self::GUEST_CHECKOUT_VALUE;
  23.         } else {
  24.             $order = new Order();
  25.         }
  26.  
  27.         if($cart->hasDiscount()) {
  28.             $orderDiscount = $cart->getOrderDiscount();
  29.             if(null != $orderDiscount) {
  30.                 $order->setOrderDiscount($orderDiscount);
  31.                 if($order->isDeferredPayment()) {
  32.                     $order->payment_option = app()->settings->get('order', 'retailerInstantPayment');
  33.                 }
  34.             }
  35.         }
  36.        
  37.         $order->order_experience_giftpackage_code_id = $cart->order_experience_giftpackage_code_id;
  38.  
  39.         /* Load Customer Info  */
  40.         if (null == $order->customer) {
  41.             if (Yii::app()->user->getState('scope') == User::SCOPE_EMPLOYEE) {
  42.                 $driverBuyer = $cart->findDriverBuyerExperience();
  43.                 if ($driverBuyer) {
  44.                      $customer = Customer::model()->find('email = :email', array(
  45.                         ':email' => $driverBuyer->getEmail()
  46.                     ));
  47.                     if ($customer) {
  48.                         $order->customer = $customer;
  49.                         $order->customer_id = $customer->id;
  50.                         $retailerRepresentative = RetailerRepresentative::model()->getRepresentativeByCustomerId($customer->id);
  51.                         if ($retailerRepresentative) {
  52.                             $order->orderoccasion_id = app()->settings->get('order', 'retailerOccasionDefault');
  53.                            $order->orderhearaboutus_id = $retailerRepresentative->retailer->orderhearaboutus_id;
  54.                         } else {
  55.                             $order->orderhearaboutus_id = $order->getLastOrderHearAboutUs($customer->id);
  56.                             $order->orderoccasion_id = $order->getLastOrderOccasion($customer->id);
  57.                         }
  58.                     }
  59.                    
  60.                 }
  61.             } else {
  62.                 $order->loadCustomer();
  63.             }
  64.         }
  65.        
  66.         /* Load OrderExperiences with OrderDrivingExperiences */
  67.         $orderExperience = array();
  68.         foreach ($cart->cartExperiences as $cartExperience) {
  69.             $orderExperience         = OrderExperience::createFromCartExperience($cartExperience, $order);
  70.             $order->orderExperiences = array_merge($order->orderExperiences, $orderExperience);
  71.             if ($orderExperience->parent_id) {
  72.                 $order->parent_id = $orderExperience->parent->order_id;
  73.             }
  74.         }
  75.        
  76.         return $order;
  77.     }
  78.  
  79.     public function init()
  80.     {
  81.         if ($this->isNewRecord) {
  82.             $this->purchased_date = date('Y-m-d');
  83.             $this->purchased_time = date('H:i:s');
  84.             $this->commercial_type_id = CommercialType::COMMERCIAL_WEBSITE;
  85.             if (Yii::app()->user->getState('scope') == User::SCOPE_EMPLOYEE) {
  86.                 $this->orderbookinglocation_id = OrderBookingLocation::LOCATION_CSR_ID;
  87.                 $employee = Employee::model()->find('user_id = :user_id', array(
  88.                     ':user_id' => Yii::app()->user->getId()
  89.                 ));
  90.                 $this->commercial_id = $employee ? $employee->id : null;
  91.                 $this->commercial_type_id = $employee ? $employee->commercial_type_id : null;
  92.             } else if(app()->browser->isMobile()) {
  93.                 $this->orderbookinglocation_id = OrderBookingLocation::LOCATION_MOBILE_ID;
  94.             } else {
  95.                 $this->orderbookinglocation_id = app()->getModule('order')->getConfig('bookingLocationDefault');
  96.             }
  97.            
  98.             $this->orderstatus_id          = app()->getModule('order')->getConfig('orderStatusDefault');
  99.             $this->ip_address              = app()->request->getUserHostAddress();
  100.             $this->ordercustomertype_id    = OrderCustomerType::TYPE_INDIVIDUAL;
  101.  
  102.             /* Totals defaults */
  103.             $this->subtotal = 0;
  104.             $this->discount = 0;
  105.             $this->tax      = 0;
  106.             $this->total    = 0;
  107.  
  108.             if (!app()->user->getIsGuest()) {
  109.                 if (Yii::app()->user->getState('scope') != User::SCOPE_EMPLOYEE) {
  110.                     $customer = $this->getCurrentCustomer();
  111.                     if (null != $customer) {
  112.                         $this->orderhearaboutus_id = $this->getLastOrderHearAboutUs($customer->id);
  113.                         $this->orderoccasion_id = $this->getLastOrderOccasion($customer->id);
  114.                     }
  115.                 }        
  116.                
  117.             }
  118.         }
  119.     }
  120.  
  121.     public function rules()
  122.     {
  123.         return array(
  124.             array('orderstatus_id, purchased_date, purchased_time, payment_option, ordercustomertype_id, subtotal, total, commercial_type_id', 'required'),
  125.             array('orderstatus_id, orderbookinglocation_id, ordercustomertype_id, commercial_id, customer_id, shippingmethodoption_id, orderdiscount_id', 'numerical', 'integerOnly' => true, 'message' => t('Please select a value for {attribute}.')),
  126.             array('shippingmethodoption_id', 'shippingOption'),
  127.             array('discount_code', 'length', 'max' => 50),
  128.             array('shipping_method, shipping_option_name', 'length', 'max' => 255),
  129.             array('shipping_option_days, payment_option', 'length', 'max' => 100),
  130.             array('shipping_option_price, ip_address, subtotal, discount, tax, total', 'length', 'max' => 15),
  131.             array('guest', 'length', 'max' => 1),
  132.             array('comments, purchasing_gift, shipping_address_different, orderhearaboutus_id, orderoccasion_id', 'safe'),
  133.             array('id, orderstatus_id, orderbookinglocation_id, orderhearaboutus_id, orderoccasion_id, purchased_date, purchased_time,  commercial_id, commercial_type_id, customer_id, shippingmethodoption_id, shipping_method, shipping_option_name, shipping_option_days, shipping_option_price, comments, ip_address, guest, payment_option, orderdiscount_id, subtotal, discount, tax, total', 'safe', 'on' => 'search'),
  134.             array('commercial_type_id', 'validCommercialType'),
  135.             array('commercial_id', 'validCommercialId'),
  136.             array('orderdiscount_id', 'validOrderDiscount'),
  137.             array('orderdiscount_id', 'discountApplied'),
  138.             array('terms', 'required', 'requiredValue' => 1, 'message' => 'You should agree to Terms & Conditions')
  139.         );
  140.     }
  141.  
  142.     public function discountApplied($attribute, $params)
  143.     {
  144.         /** @var $orderDiscount OrderDiscount */
  145.         /** @var $retailerRepresentative RetailerRepresentative */
  146.  
  147.         $orderDiscount = OrderDiscount::model()->findByPk($this->$attribute);
  148.  
  149.         if($orderDiscount == null){
  150.             $retailerRepresentative = RetailerRepresentative::model()->findByAttributes(array('customer_id' => $this->customer_id));
  151.  
  152.             if( ($retailerRepresentative != null) && !$retailerRepresentative->isFromCompanyRetailer() ){
  153.  
  154.                 $this->addError($attribute, Yii::t('Orders and carts','Please apply your retailer code'));
  155.  
  156.             }
  157.         }
  158.  
  159.     }
  160.  
  161.     /**
  162.      * @return array of behaviors
  163.      */
  164.     public function behaviors()
  165.     {
  166.         return CMap::mergeArray(parent::behaviors(), array(
  167.             'ExLinkableBehavior' => array(
  168.                 'class' => 'ExLinkableBehavior',
  169.                 'baseRoute' => '/order/order',
  170.                 'viewRoute' => '/order/order/view/id',
  171.             ),
  172.             'ExWhenWhoBehavior' => array(
  173.                 'class' => 'ExWhenWhoBehavior',
  174.                 'setUpdateOnCreate' => true,
  175.             )
  176.         ));
  177.     }
  178.  
  179.     /**
  180.      * @return array customized attribute labels (name=>label)
  181.      */
  182.     public function attributeLabels()
  183.     {
  184.         return CMap::mergeArray(parent::attributeLabels(), array(
  185.             'orderstatus_id' => Yii::t('Orders and carts','Status'),
  186.             'orderhearaboutus_id' => Yii::t('Orders and carts','How did you find us?'),
  187.             'orderoccasion_id' => Yii::t('Orders and carts','What\'s the Occasion?'),
  188.             'orderbookinglocation_id' => Yii::t('Orders and carts','Booking from'),
  189.             'shippingmethodoption_id' => Yii::t('Orders and carts','Delivery Option'),
  190.             'purchasing_gift' => Yii::t('Orders and carts','Are you purchasing this as a gift?'),
  191.             'shipping_address_different' => Yii::t('Orders and carts','Click here if delivery address is different '),
  192.             'id' => Yii::t('Orders and carts','Reference'),
  193.         ));
  194.     }
  195.  
  196.     public function checkout()
  197.     {
  198.  
  199.         $this->setShippingOptions();
  200.  
  201.         /* Save the order */
  202.         return $this->save(false);
  203.     }
  204.    
  205.     public function getContentIds()
  206.     {
  207.         $ids = array();
  208.         foreach ($this->orderExperiences as $experience) {
  209.             if ($experience->giftpackage_id) {
  210.                 $ids[] = 'giftpackage-' . $experience->giftpackage_id;
  211.             } else {
  212.                 foreach ($experience->orderDrivingExperiences as $drivingExperience) {
  213.                    $ids[] = 'vehiclemodel-' . $drivingExperience->getVehicleModel()->id;
  214.                 }
  215.             }
  216.             foreach ($experience->orderExperienceAddons as $experienceAddon) {
  217.                 $ids[] = 'addon-' . $experienceAddon->addon_id;
  218.             }
  219.         }
  220.         return json_encode($ids);
  221.     }
  222.    
  223.     public static function geOrderInfo($id)
  224.     {
  225.         $model = self::model()->findByPk($id);
  226.         if ($model) {
  227.             $data = $model->getAttributes();
  228.             $data['customer'] = $model->customer->getAttributes();
  229.             $data['billing'] = $model->orderContacts[1]->getAttributes();
  230.             $data['orderExperiences'] = array();
  231.             $data['saved'] = $model->getSavedAmount();
  232.             $data['reference'] = $model->getReference();
  233.             foreach ($model->orderExperiences as $key => $experience) {
  234.                 $data['orderExperiences'][$key] = $experience->getAttributes();
  235.                 $data['orderExperiences'][$key]['student'] = $experience->student;
  236.                 $data['orderExperiences'][$key]['track'] = $experience->track->name;
  237.                 $data['orderExperiences'][$key]['date'] = $experience->trackdatesession_id ? $experience->trackDate->date : null;
  238.                 $data['orderExperiences'][$key]['session'] = $experience->trackdatesession_id ? $experience->trackDateSession->from : null;
  239.                 $data['orderExperiences'][$key]['location'] = $experience->pickuplocation_id ? $experience->pickupLocation->name : null;
  240.                 $data['orderExperiences'][$key]['transportationTime'] = $experience->location_time_entry_id ? $experience->transportationTime->title : null;
  241.                 if ($experience->giftpackage_id) {
  242.                     $data['orderExperiences'][$key]['giftPackage'] = $experience->giftPackage->getAttributes();
  243.                     $data['orderExperiences'][$key]['giftPackage']['image'] = $experience->giftPackage->getImagePath('main');
  244.                 } else {
  245.                     $data['orderExperiences'][$key]['giftPackage'] = null;
  246.                 }
  247.                 $data['orderExperiences'][$key]['experienceAddons'] = array();
  248.                 foreach ($experience->getOrderExperienceAddons() as $i => $addonExperience) {
  249.                     $data['orderExperiences'][$key]['experienceAddons'][$i] = $addonExperience->getAttributes();
  250.                     $data['orderExperiences'][$key]['experienceAddons'][$i]['addon'] = $addonExperience->addon->getAttributes();
  251.                     $data['orderExperiences'][$key]['experienceAddons'][$i]['price'] = $addonExperience->getPrice();
  252.                     $data['orderExperiences'][$key]['experienceAddons'][$i]['addon']['image'] = $addonExperience->addon->getImagePath('thumbnail');
  253.                 }
  254.                 $data['orderExperiences'][$key]['drivingExperiences'] = array();
  255.                 foreach ($experience->drivingExperiences as $j => $drivingExperience) {
  256.                     $data['orderExperiences'][$key]['drivingExperiences'][$j] = $drivingExperience->getAttributes();
  257.                     $data['orderExperiences'][$key]['drivingExperiences'][$j]['trackVehicleCategory'] = $drivingExperience->trackvehicle->trackvehiclecategory->name;
  258.                     $data['orderExperiences'][$key]['drivingExperiences'][$j]['freeLaps'] = $drivingExperience->getFreeLaps();
  259.                     $vehicleModel = $drivingExperience->getVehicleModel();
  260.                     $data['orderExperiences'][$key]['drivingExperiences'][$j]['vehicleModel'] = array(
  261.                         'name' => $vehicleModel->vehiclemake->name . ' ' . ($vehicleModel->vs_name ? $vehicleModel->vs_name : $vehicleModel->name),
  262.                         'image' => $vehicleModel->getImagePath('vegassupercars_main')
  263.                     );
  264.                     $data['orderExperiences'][$key]['drivingExperiences'][$j]['total'] = $drivingExperience->getTotal();
  265.                     $data['orderExperiences'][$key]['drivingExperiences'][$j]['unit'] = $drivingExperience->trackvehicle->getBookingUnit($drivingExperience->laps);
  266.                 }
  267.             }
  268.             return $data;
  269.         }
  270.         return null;
  271.     }
  272.  
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement