- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/shipmentitem.php
- Класс: Bitrix\Sale\ShipmentItem
- Вызов: ShipmentItem::save
public function save()
{
$this->checkCallingContext();
$result = new Result();
$id = $this->getId();
$fields = $this->fields->getValues();
$shipment = $this->getCollection()->getShipment();
/** @var Order $order */
$order = $shipment->getCollection()->getOrder();
if ($this->isChanged())
{
/** @var Main\Entity\Event $event */
$event = new Main\Event('sale', 'OnBeforeSaleShipmentItemEntitySaved', [
'ENTITY' => $this,
'VALUES' => $this->fields->getOriginalValues()
]);
$event->send();
}
if ($id > 0)
{
$fields = $this->fields->getChangedValues();
if (!empty($fields) && is_array($fields))
{
if (!$shipment->isSystem())
{
if (isset($fields["QUANTITY"]) && (floatval($fields["QUANTITY"]) == 0))
{
return $result;
}
}
$r = $this->updateInternal($id, $fields);
if (!$r->isSuccess())
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var OrderHistory $orderHistory */
$orderHistory = $registry->getOrderHistoryClassName();
$orderHistory::addAction(
'SHIPMENT',
$order->getId(),
'SHIPMENT_ITEM_UPDATE_ERROR',
$id,
$this,
["ERROR" => $r->getErrorMessages()]
);
$result->addErrors($r->getErrors());
return $result;
}
if ($resultData = $r->getData())
$result->setData($resultData);
}
if ($order && $order->getId() > 0)
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var OrderHistory $orderHistory */
$orderHistory = $registry->getOrderHistoryClassName();
$orderHistory::collectEntityFields('SHIPMENT_ITEM_STORE', $order->getId(), $id);
}
}
else
{
$fields['ORDER_DELIVERY_ID'] = $this->getParentShipmentId();
$this->setFieldNoDemand('ORDER_DELIVERY_ID', $fields['ORDER_DELIVERY_ID']);
$fields['DATE_INSERT'] = new Main\Type\DateTime();
$this->setFieldNoDemand('DATE_INSERT', $fields['DATE_INSERT']);
$fields["BASKET_ID"] = $this->basketItem->getId();
$this->setFieldNoDemand('BASKET_ID', $fields['BASKET_ID']);
if ($fields['BASKET_ID'] <= 0)
{
return $result;
}
if (!isset($fields["QUANTITY"]) || (floatval($fields["QUANTITY"]) == 0))
{
return $result;
}
$r = $this->addInternal($fields);
if (!$r->isSuccess())
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var OrderHistory $orderHistory */
$orderHistory = $registry->getOrderHistoryClassName();
$orderHistory::addAction(
'SHIPMENT',
$order->getId(),
'SHIPMENT_ITEM_ADD_ERROR',
null,
$this,
["ERROR" => $r->getErrorMessages()]
);
$result->addErrors($r->getErrors());
return $result;
}
if ($resultData = $r->getData())
$result->setData($resultData);
$id = $r->getId();
$this->setFieldNoDemand('ID', $id);
if (!$shipment->isSystem())
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var OrderHistory $orderHistory */
$orderHistory = $registry->getOrderHistoryClassName();
$orderHistory::addAction(
'SHIPMENT',
$order->getId(),
'SHIPMENT_ITEM_BASKET_ADDED',
$shipment->getId(),
$this->basketItem,
[
'QUANTITY' => $this->getQuantity(),
]
);
}
}
if ($id > 0)
{
$result->setId($id);
}
if ($this->isChanged())
{
/** @var Main\Event $event */
$event = new Main\Event('sale', 'OnSaleShipmentItemEntitySaved', [
'ENTITY' => $this,
'VALUES' => $this->fields->getOriginalValues(),
]);
$event->send();
}
$shipmentItemStoreCollection = $this->getShipmentItemStoreCollection();
if ($shipmentItemStoreCollection)
{
$r = $shipmentItemStoreCollection->save();
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
}
if ($result->isSuccess())
{
$registry = Registry::getInstance(static::getRegistryType());
/** @var OrderHistory $orderHistory */
$orderHistory = $registry->getOrderHistoryClassName();
$orderHistory::collectEntityFields('SHIPMENT_ITEM', $order->getId(), $id);
}
return $result;
}