%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/importcriterion.php |
<?php
namespace Bitrix\Sale\Exchange\OneC;
use Bitrix\Main;
use Bitrix\Sale;
use Bitrix\Sale\Exchange;
class ImportCriterionBase
implements Exchange\ICriterion
{
use Exchange\BaseTrait;
protected $entity = null;
/**
* @return null|Sale\Internals\CollectableEntity $entity
*/
public function getEntity()
{
return $this->entity;
}
/**
* @param $entity
*/
public function setEntity($entity = null)
{
$this->entity = $entity;
}
/**
* @param $entityTypeId
* @param $entity
* @return static
* @throws Main\ArgumentException
* @throws Main\NotImplementedException
*/
public static function getCurrent($entityTypeId, $entity)
{
if(!Exchange\EntityType::IsDefined($entityTypeId))
{
throw new Main\ArgumentOutOfRangeException('Is not defined', Exchange\EntityType::FIRST, Exchange\EntityType::LAST);
}
/** @var ImportCriterionBase $criterion */
$criterion = new static();
$criterion->setEntity($entity);
return $criterion;
}
/**
* @param array $fields
* @return bool
*/
public function equals(array $fields)
{
return true;
}
protected function getParentTypeId()
{
return Exchange\EntityType::ORDER;
}
protected function getShipmentTypeId()
{
return Exchange\EntityType::SHIPMENT;
}
}
class ImportCriterionOneCCml2 extends ImportCriterionBase
{
/**
* @param array $fields
* @return bool
*/
public function equals(array $fields)
{
/** @var Sale\Internals\CollectableEntity $entity */
$entity = $this->getEntity();
if(empty($entity))
{
return true;
}
if(($entity->getField('VERSION_1C') != $fields['VERSION_1C']) ||
(strlen($entity->getField('VERSION_1C'))<=0 || strlen($fields['VERSION_1C'])<=0)
)
{
return true;
}
return false;
}
}
class CriterionOrder extends ImportCriterionOneCCml2
implements Exchange\ICriterionOrder
{
/**
* @param Sale\BasketItem $basketItem
* @param array $fields
* @return bool
*/
public function equalsBasketItemTax(Sale\BasketItem $basketItem, array $fields)
{
if($fields['TAX']['VAT_RATE'] != $basketItem->getVatRate() &&
($fields['TAX']['VAT_INCLUDED']<>'Y' && $fields['PRICE']<>$basketItem->getPrice())
)
{
return true;
}
return false;
}
/**
* @param Sale\BasketItem $basketItem
* @param array $fields
* @return bool
*/
public function equalsBasketItem(Sale\BasketItem $basketItem, array $fields)
{
if($fields['QUANTITY'] != $basketItem->getQuantity() ||
$fields['PRICE'] != $basketItem->getPrice() ||
$fields['VAT_RATE'] != $basketItem->getVatRate() ||
$fields['DISCOUNT_PRICE'] != $basketItem->getDiscountPrice())
{
return true;
}
return false;
}
/**
* @param Sale\BasketItem $basketItem
* @param array $fields
* @return bool
*/
public function equalsBasketItemDiscount(Sale\BasketItem $basketItem, array $fields)
{
if($fields['DISCOUNT']['PRICE'] != $basketItem->getDiscountPrice() && intval($fields['DISCOUNT']['PRICE'])>0)
{
return true;
}
return false;
}
/**
* @param Sale\Order|null $entity
* @throws Main\ArgumentException
*/
public function setEntity($entity = null)
{
if(!empty($entity) && !($entity instanceof Sale\Order))
throw new Main\ArgumentException("Entity must be instanceof Order");
parent::setEntity($entity);
}
}
class CriterionShipment extends ImportCriterionOneCCml2
{
/**
* @param Sale\Shipment $entity
* @throws Main\ArgumentException
*/
public function setEntity($entity = null)
{
if(!empty($entity) && !($entity instanceof Sale\Shipment))
throw new Main\ArgumentException("Entity must be instanceof Shipment");
parent::setEntity($entity);
}
/**
* @param array $fields
* @return bool
*/
public function equals(array $fields)
{
/** @var Sale\Shipment $entity */
$entity = $this->getEntity();
if(empty($entity))
{
return true;
}
$bBasketItemsMatch = true;
$basketItemsIndexList = array();
$fieldsItemsIndexList = array();
/** @var Exchange\Entity\OrderImport $parentImport */
$parentImport = $this->entityFactoryCreate($this->getParentTypeId());
/** @var Exchange\Entity\ShipmentImport $shipmentImport */
$shipmentImport = $this->entityFactoryCreate($this->getShipmentTypeId());
$basketItems = $parentImport::getGroupItemsBasketFields($fields['ITEMS']);
if(count($basketItems)<=0)
{
return true;
}
/** @var Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $entity->getCollection();
$order = $shipmentCollection->getOrder();
$basket = $order->getBasket();
/** @var Sale\BasketItem $basketItem */
foreach ($basket as $basketItem)
{
if($entity->isExistBasketItem($basketItem))
{
$quantity = $entity->getBasketItemQuantity($basketItem);
if($quantity>0)
{
$basketItemsIndexList[$basketItem->getId()] = $quantity;
}
}
}
foreach($basketItems as $items)
{
foreach($items as $productXML_ID => $item)
{
if($basketItem = $parentImport::getBasketItemByItem($basket, $item))
{
$fieldsItemsIndexList[$basketItem->getId()] = $item['QUANTITY'];
}
}
}
if(count($basketItemsIndexList)<>count($fieldsItemsIndexList))
{
$bBasketItemsMatch = false;
}
else
{
foreach ($basketItemsIndexList as $basketId=>$quantity)
{
if(isset($fieldsItemsIndexList[$basketId]) && $fieldsItemsIndexList[$basketId] == $quantity)
unset($fieldsItemsIndexList[$basketId]);
}
if(count($fieldsItemsIndexList)>0)
$bBasketItemsMatch = false;
}
$itemDeliveryService = $shipmentImport::getFieldsDeliveryService($fields);
if($bBasketItemsMatch &&
($entity->isShipped()? $fields['DEDUCTED']=='Y':true) &&
$entity->getPrice() == $itemDeliveryService['PRICE']
)
{
return false;
}
else
{
return true;
}
}
}
class CriterionShipmentInvoice extends CriterionShipment
{
protected function getParentTypeId()
{
return Exchange\EntityType::INVOICE;
}
protected function getShipmentTypeId()
{
return Exchange\EntityType::INVOICE_SHIPMENT;
}
}
class CriterionPayment extends ImportCriterionOneCCml2
{
/**
* @param Sale\Payment|null $entity
* @throws Main\ArgumentException
*/
public function setEntity($entity = null)
{
if(!empty($entity) && !($entity instanceof Sale\Payment))
throw new Main\ArgumentException("Entity must be instanceof Payment");
parent::setEntity($entity);
}
/**
* @param array $fields
* @return bool
*/
public function equals(array $fields)
{
/** @var Sale\Payment $entity */
$entity = $this->getEntity();
if(empty($entity))
{
return true;
}
if(($entity->isPaid()? $fields['PAID']=='Y':true) &&
$entity->getSum() == $fields['SUM']
)
{
return false;
}
else
{
return true;
}
}
}
/**
* Class CriterionProfile
* @package Bitrix\Sale\Exchange\OneC
* @deprecated
*/
class CriterionProfile extends ImportCriterionOneCCml2
{
/**
* @param array $fields
* @return bool
*/
public function equals(array $fields)
{
$entity = $this->getEntity();
if(empty($entity))
{
return true;
}
if(($entity->getField('USER_PROFILE_VERSION') != $fields['VERSION_1C']) ||
(strlen($entity->getField('USER_PROFILE_VERSION'))<=0 || strlen($fields['VERSION_1C'])<=0)
)
{
return true;
}
return false;
}
/**
* @param Exchange\ProfileImport|null $entity
* @throws Main\ArgumentException
*/
public function setEntity($entity = null)
{
if(!empty($entity) && !($entity instanceof Exchange\ProfileImport))
throw new Main\ArgumentException("Entity must be instanceof ProfileImport");
parent::setEntity($entity);
}
}