예제 #1
0
파일: CartStrategy.php 프로젝트: dairdr/crm
 /**
  * {@inheritdoc}
  */
 public function process($newEntity)
 {
     $oid = $newEntity->getOriginId();
     /** @var Cart $newEntity */
     /** @var Cart $existingEntity */
     $existingEntity = $this->getEntityByCriteria(['originId' => $oid, 'channel' => $newEntity->getChannel()], $newEntity);
     if ($existingEntity) {
         $this->strategyHelper->importEntity($existingEntity, $newEntity, ['id', 'store', 'status', 'cartItems', 'customer', 'relatedCalls', 'relatedEmails', 'shippingAddress', 'billingAddress', 'workflowItem', 'workflowStep', 'owner']);
         $this->removeErrorMessage($existingEntity);
     } else {
         $hasContactInfo = $newEntity->getBillingAddress() && $newEntity->getBillingAddress()->getPhone() || $newEntity->getEmail();
         if (!$newEntity->getItemsCount()) {
             $this->context->incrementErrorEntriesCount();
             $this->logger->debug(sprintf('Cart ID: %d was skipped because it does not have items', $oid));
             return false;
         } elseif (!$hasContactInfo) {
             $this->context->incrementErrorEntriesCount();
             $this->logger->debug(sprintf('Cart ID: %d was skipped because lack of contact info', $oid));
             return false;
         }
         $existingEntity = $newEntity;
         // populate owner only for newly created entities
         $this->defaultOwnerHelper->populateChannelOwner($newEntity, $newEntity->getChannel());
     }
     $this->updateCartStatus($existingEntity, $newEntity->getStatus());
     if (!$existingEntity->getStore() || !$existingEntity->getStore()->getId()) {
         $existingEntity->setStore($this->storeStrategy->process($newEntity->getStore()));
     }
     $newEntity->getCustomer()->setChannel($newEntity->getChannel());
     $this->updateCustomer($existingEntity, $newEntity->getCustomer())->updateAddresses($existingEntity, $newEntity)->updateCartItems($existingEntity, $newEntity->getCartItems());
     return $this->validateAndUpdateContext($existingEntity);
 }
예제 #2
0
 /**
  * @param Order $entity
  */
 protected function processStore(Order $entity)
 {
     $entity->setStore($this->storeStrategy->process($entity->getStore()));
 }