%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/importcollision.php |
<?php namespace Bitrix\Sale\Exchange\OneC; use Bitrix\Main\ArgumentException; use Bitrix\Main\ArgumentOutOfRangeException; use Bitrix\Main\NotImplementedException; use Bitrix\Sale\Exchange\Entity\EntityImport; use Bitrix\Sale\Exchange\Entity\OrderImport; use Bitrix\Sale\Exchange\Entity\PaymentImport; use Bitrix\Sale\Exchange\Entity\ShipmentImport; use Bitrix\Sale\Exchange\EntityCollisionType; use Bitrix\Sale\Exchange\EntityType; use Bitrix\Sale\Exchange\ICollision; use Bitrix\Sale\Exchange\ImportBase; use Bitrix\Sale\Exchange\ProfileImport; use Bitrix\Sale\Internals\Entity; use Bitrix\Sale\Order; use Bitrix\Sale\Payment; use Bitrix\Sale\Result; use Bitrix\Sale\Shipment; class ImportCollision implements ICollision { protected $entityTypeId = EntityType::UNDEFINED; protected $typeId = null; protected $entity = null; protected $message = null; /** * @param $entityTypeId * @param $typeId * @param Entity $entity * @param null $message * @throws ArgumentOutOfRangeException * @throws NotImplementedException */ public function addItem($entityTypeId, $typeId, Entity $entity, $message=null) { if(!is_int($entityTypeId)) { $entityTypeId = (int)$entityTypeId; } if(!EntityType::IsDefined($entityTypeId)) { throw new ArgumentOutOfRangeException('Is not defined', EntityType::FIRST, EntityType::LAST); } if(!is_int($typeId)) { $typeId = (int)$typeId; } if(!EntityCollisionType::isDefined($typeId)) { throw new ArgumentOutOfRangeException('Is not defined', EntityCollisionType::First, EntityCollisionType::Last); } $this->setEntity($entity); $this->entityTypeId = $entityTypeId; $this->typeId = $typeId; $this->message = $message; } /** * @param $entityTypeId * @return self * @throws ArgumentOutOfRangeException */ public static function getCurrent($entityTypeId) { if(!EntityType::IsDefined($entityTypeId)) { throw new ArgumentOutOfRangeException('Is not defined', EntityType::FIRST, EntityType::LAST); } $criterion = new static(); return $criterion; } /** * @return mixed */ public function getEntity() { return $this->entity; } /** * @return int */ public function getTypeId() { return $this->typeId; } /** * @return string */ public function getMessage() { return $this->message; } /** * @return string */ public function getTypeName() { return EntityCollisionType::resolveName($this->typeId); } /** * @param Entity $entity */ public function setEntity(Entity $entity) { $this->entity = $entity; } /** * @param EntityImport $item * @return Result * @throws ArgumentException */ public function setCollision(EntityImport $item) { /** @var Order|Payment|Shipment $entity */ $entity = $item->getEntity(); if(!empty($entity)) { $types = $this->getCollision($item); if(count($types)>0) { foreach ($types as $typeId) { $item->setCollisions($typeId, $entity); } } } return new Result(); } /** * @param EntityImport $item * @return array */ public function getCollision(EntityImport $item) { return array(); } /** * Resolve import collisions * @param EntityImport $item * @return Result */ public function resolve(ImportBase $item) { return new Result(); } } class CollisionOrder extends ImportCollision { /** * @param OrderImport $item * @return Result * @throws ArgumentException */ public function resolve(ImportBase $item) { if(!($item instanceof OrderImport)) throw new ArgumentException("Item must be instanceof OrderImport"); $this->setCollision($item); return new Result(); } /** * @param EntityImport $item * @return array */ public function getCollision(EntityImport $item) { $result = array(); /** @var ImportSettings $settings */ $settings = $item->getSettings(); /** @var Order $order */ $order = $item->getEntity(); if(!empty($order)) { $collisionTypes = $settings->getCollisionResolve($item->getOwnerTypeId()); if(is_array($collisionTypes)) { foreach ($collisionTypes as $collisionType) { switch($collisionType) { case EntityCollisionType::OrderFinalStatusName: if($order->getField('STATUS_ID') == $settings->finalStatusIdFor($item->getOwnerTypeId())) $result[] = EntityCollisionType::resolveID($collisionType); break; case EntityCollisionType::OrderIsPayedName: if($order->isPaid()) $result[] = EntityCollisionType::resolveID($collisionType); break; case EntityCollisionType::OrderIsShippedName: if($order->isShipped()) $result[] = EntityCollisionType::resolveID($collisionType); break; } } } } return $result; } } class CollisionPayment extends ImportCollision { /** * Resolve import collisions * @param PaymentImport $item * @return Result */ public function resolve(ImportBase $item) { if(!($item instanceof PaymentImport)) throw new ArgumentException("Item must be instanceof PaymentImport"); $this->setCollision($item); return new Result(); } /** * @param EntityImport $item * @return array */ public function getCollision(EntityImport $item) { $result = array(); /** @var Payment $payment */ $payment = $item->getEntity(); if(!empty($payment)) { if($payment->isPaid()) $result[] = EntityCollisionType::PaymentIsPayed; } return $result; } } class CollisionShipment extends ImportCollision { /** * Resolve import collisions * @param ShipmentImport $item * @return Result */ public function resolve(ImportBase $item) { if(!($item instanceof ShipmentImport)) throw new ArgumentException("Item must be instanceof ShipmentImport"); $this->setCollision($item); return new Result(); } /** * @param EntityImport $item * @return array */ public function getCollision(EntityImport $item) { $result = array(); /** @var Shipment $shipment */ $shipment = $item->getEntity(); if(!empty($shipment)) { if($shipment->isShipped()) $result[] = EntityCollisionType::ShipmentIsShipped; } return $result; } } class CollisionProfile extends ImportCollision { /** * Resolve import collisions * @param ProfileImport $item * @return Result * @deprecated */ public function resolve(ImportBase $item) { if(!($item instanceof ProfileImport)) throw new ArgumentException("Item must be instanceof ProfileImport"); return new Result(); } }