Beispiel #1
0
 /**
  * 2016-07-27
  * Цель плагина — добавление возможности отключения необходимости платёжного адреса.
  * Это будет использоваться моими платёжными модулями.
  * Помимо этого плагина для данной функциональности нужны ещё 2:
  * @see \Df\Customer\Plugin\Model\Address\AbstractAddress
  * @see \Df\Sales\Plugin\Model\Order\Address\Validator
  *
  * @see \Magento\Customer\Model\ResourceModel\AddressRepository::save()
  * @param Sb $sb
  * @param \Closure $proceed
  * @param AI|CDA $address
  * @return AI
  * @throws InputException
  */
 public function aroundSave(Sb $sb, \Closure $proceed, AI $address)
 {
     /** @var AI $result */
     /**
      * 2016-07-27
      * Адрес приобретает тип, только когда используется при оформлении заказа.
      * Пока же адрес просто принадлежит покупателю
      * @see \Magento\Customer\Model\Data\Address
      * @see \Magento\Customer\Api\Data\AddressInterface
      * а не используется в контексте оформления заказа, то такой адрес ещё типа не имеет,
      * и в будущем, в зависимости от контекста,
      * может использоваться и как адрес доставки, и как платёжный адрес.
      *
      * По этой причине мы не вызываем здесь @see df_address_is_billing()
      * В то же время, мы попадаем сюда при оформлении заказа,
      * поэтому мы не можем проводить валидацию адреса,
      * если необходимость платёжного адреса отключена администратором.
      * Поэтому ветка S::disabled() нужна.
      */
     if (!S::disabled()) {
         $result = $proceed($address);
     } else {
         /** @var Customer $customer */
         $customer = df_customer_get($address->getCustomerId());
         /** @var Address $addressM */
         $addressM = null;
         if ($address->getId()) {
             $addressM = df_address_registry()->retrieve($address->getId());
         }
         if ($addressM) {
             $addressM->updateData($address);
         } else {
             $addressM = df_om()->create(Address::class);
             $addressM->updateData($address);
             $addressM->setCustomer($customer);
         }
         // 2016-07-27
         // Вот здесь в ядре валидация, а мы её пропускаем.
         $addressM->save();
         // Clean up the customer registry since the Address save has side effect on customer:
         // \Magento\Customer\Model\ResourceModel\Address::_afterSave
         df_customer_registry()->remove($address->getCustomerId());
         df_address_registry()->push($addressM);
         $customer->getAddressesCollection()->clear();
         $result = $addressM->getDataModel();
     }
     return $result;
 }
Beispiel #2
0
 /**
  * 2016-07-18
  * @return mixed|null
  * @throws CouldNotSaveException
  */
 private function _place()
 {
     /** @var IQM|QM $qm */
     $qm = df_o(IQM::class);
     /** @var mixed $result */
     try {
         BillingAddress::disable(!$this->ss()->askForBillingAddress());
         try {
             /** @var int $orderId */
             $orderId = $qm->placeOrder($this->quoteId());
         } finally {
             BillingAddress::restore();
         }
         $result = df_order($orderId)->getPayment()->getAdditionalInformation(PlaceOrder::DATA);
     } catch (\Exception $e) {
         throw new CouldNotSaveException(__($this->message($e)), $e);
     }
     return $result;
 }
Beispiel #3
0
 /**
  * 2016-07-27
  * Цель плагина — добавление возможности отключения необходимости платёжного адреса.
  * Это будет использоваться моими платёжными модулями.
  * Помимо этого плагина для данной функциональности нужны ещё 2:
  * @see \Df\Customer\Plugin\Model\ResourceModel\AddressRepository
  * @see \Df\Sales\Plugin\Model\Order\Address\Validator
  *
  * @see \Magento\Customer\Model\Address\AbstractAddress::validate()
  * @param Sb $sb
  * @param \Closure $proceed
  * @return bool|string[]
  */
 public function aroundValidate(Sb $sb, \Closure $proceed)
 {
     return S::disabled() && df_address_is_billing($sb) ? true : $proceed();
 }
Beispiel #4
0
 /**
  * 2016-07-27
  * Цель плагина — добавление возможности отключения необходимости платёжного адреса.
  * Это будет использоваться моими платёжными модулями.
  * Помимо этого плагина для данной функциональности нужны ещё 2:
  * @see \Df\Customer\Plugin\Model\Address\AbstractAddress
  * @see \Df\Customer\Plugin\Model\ResourceModel\AddressRepository
  *
  * @see \Magento\Sales\Model\Order\Address\Validator::validate()
  * @param Sb $sb
  * @param \Closure $proceed
  * @param Address $address
  * @return string[]
  */
 public function aroundValidate(Sb $sb, \Closure $proceed, Address $address)
 {
     return S::disabled() && df_address_is_billing($address) ? [] : $proceed($address);
 }