Пример #1
0
 /**
  * @param Order $order
  * @param Payment $payment
  * @param $operation
  * @return Result
  * @throws \Exception
  */
 public static function createOperation(Order &$order, Payment &$payment, $operation)
 {
     $result = new Result();
     $paymentSum = $payment->getSum();
     if ($operation == self::OPERATION_DEBIT) {
         $userBudget = UserBudgetPool::getUserBudgetByOrder($order);
         if ($userBudget >= $paymentSum) {
             UserBudgetPool::addPoolItem($order, $paymentSum * -1, UserBudgetPool::BUDGET_TYPE_ORDER_PAY, $payment);
             //				$payment->setField('PAID', 'Y');
         } else {
             $result->addError(new EntityError(Loc::getMessage('ORDER_PS_INNER_ERROR_INSUFFICIENT_MONEY')));
         }
     } elseif ($operation == self::OPERATION_CREDIT) {
         UserBudgetPool::addPoolItem($order, $paymentSum, UserBudgetPool::BUDGET_TYPE_ORDER_UNPAY, $payment);
         //			$payment->setField('PAID', 'N');
     } elseif ($operation == self::OPERATION_RETURN) {
         $sumPaid = $order->getSumPaid();
         $sumTrans = UserBudgetPool::getUserBudgetTransForOrder($order);
         $finalSumPaid = $paymentSum + $sumTrans;
         if ($finalSumPaid > 0) {
             $paymentSum = $paymentSum - $finalSumPaid;
         }
         //			Internals\UserBudgetPool::addPoolItem($order->getUserId(), ( $paymentSum ), UserBudgetPool::BUDGET_TYPE_CANCEL_RETURN, $order, $payment);
         //			$payment->setField('PAID', 'N');
         $payment->setField('IS_RETURN', 'Y');
     } else {
         throw new InvalidOperationException('Wrong operation type!');
     }
     return $result;
 }
Пример #2
0
 /**
  * Adds errors from Main\Entity\Result.
  * @param Result $result Result after action in Entity.
  * @return void
  */
 public function addFromResult(Result $result)
 {
     $errors = array();
     foreach ($result->getErrorMessages() as $message) {
         $errors[] = new Error($message);
     }
     unset($message);
     $this->add($errors);
 }
Пример #3
0
 public static function checkFields(Result $result, $primary, array $data)
 {
     if ($result instanceof DeleteResult) {
         if (!ObjectPathTable::isLeaf($primary)) {
             $result->addError(new EntityError(Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_DELETE_NODE")));
         }
     }
     parent::checkFields($result, $primary, $data);
 }
Пример #4
0
 public static function checkFields(Result $result, $primary, array $data)
 {
     if ($result instanceof Entity\AddResult) {
         if (isset($data['REAL_OBJECT_ID']) && isset($data['FILE_ID']) && !empty($data['REAL_OBJECT_ID']) && !empty($data['FILE_ID']) && $data['REAL_OBJECT_ID'] != $data['ID']) {
             $field = static::getEntity()->getField('FILE_ID');
             $result->addError(new FieldError($field, Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_LINK_FILE_ID", array("#FIELD#" => $field->getTitle()))));
         }
         if (isset($data['FILE_ID']) && empty($data['REAL_OBJECT_ID']) && empty($data['FILE_ID'])) {
             $field = static::getEntity()->getField('FILE_ID');
             $result->addError(new FieldError($field, Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_REQUIRED_FILE_ID", array("#FIELD#" => $field->getTitle()))));
         }
     }
     parent::checkFields($result, $primary, $data);
 }
Пример #5
0
 public function validateValue($value, $primary, $row, Result $result)
 {
     $validators = $this->getValidators();
     foreach ($validators as $validator) {
         if (is_object($validator)) {
             $vResult = $validator->validate($value, $primary, $row, $this);
         } else {
             $vResult = call_user_func_array($validator, array($value, $primary, $row, $this));
         }
         if ($vResult !== true) {
             $result->addError(new FieldError($this, $vResult, FieldError::INVALID_VALUE));
             break;
         }
     }
 }
 /**
  * @return Main\Entity\Result
  */
 public function save()
 {
     $result = new Main\Entity\Result();
     $oldBarcodeList = array();
     $itemsFromDb = array();
     if ($this->getShipmentItem() && $this->getShipmentItem()->getId() > 0) {
         $itemsFromDbList = Internals\ShipmentItemStoreTable::getList(array("filter" => array("ORDER_DELIVERY_BASKET_ID" => $this->getShipmentItem()->getId()), "select" => array("*")));
         while ($itemsFromDbItem = $itemsFromDbList->fetch()) {
             $itemsFromDb[$itemsFromDbItem["ID"]] = true;
         }
     }
     /** @var ShipmentItemStore $shipmentItemStore */
     foreach ($this->collection as $shipmentItemStore) {
         $r = $shipmentItemStore->save();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
         }
         if (isset($itemsFromDb[$shipmentItemStore->getId()])) {
             unset($itemsFromDb[$shipmentItemStore->getId()]);
         }
     }
     foreach ($itemsFromDb as $k => $v) {
         Internals\ShipmentItemStoreTable::delete($k);
     }
     return $result;
 }
Пример #7
0
 /**
  * Checks data fields before saving to DB. Result stores in $result object
  *
  * @param Result $result
  * @param array $data
  * @param null $id
  * @throws \Exception
  */
 public static function checkFields(Result $result, $primary, array $data)
 {
     //checks required fields
     foreach (static::getEntity()->getFields() as $field) {
         if ($field instanceof ScalarField && $field->isRequired()) {
             $fieldName = $field->getName();
             if ($id === null && (!isset($data[$fieldName]) || $data[$fieldName] == '') || $id !== null && isset($data[$fieldName]) && $data[$fieldName] == '') {
                 $result->addError(new FieldError($field, getMessage("MAIN_ENTITY_FIELD_REQUIRED", array("#FIELD#" => $field->getTitle())), FieldError::EMPTY_REQUIRED));
             }
         }
     }
     // checks data - fieldname & type & strlen etc.
     foreach ($data as $k => $v) {
         if (static::getEntity()->hasField($k) && static::getEntity()->getField($k) instanceof ScalarField) {
             $field = static::getEntity()->getField($k);
         } elseif (static::getEntity()->hasUField($k)) {
             // should be continue
             // checking is inside uf manager
             $field = static::getEntity()->getUField($k);
         } else {
             throw new \Exception(sprintf('Field `%s` not found in entity when trying to query %s row.', $k, static::getEntity()->getName()));
         }
         $field->validateValue($v, $primary, $data, $result);
     }
 }
Пример #8
0
 /**
  * @return Entity\Result
  * @throws Main\ArgumentException
  * @throws Main\ObjectNotFoundException
  * @throws \Exception
  */
 public function save()
 {
     $result = new Entity\Result();
     $itemsFromDb = array();
     if ($this->getOrder()->getId() > 0) {
         $itemsFromDbList = Internals\PaymentTable::getList(array("filter" => array("ORDER_ID" => $this->getOrder()->getId()), "select" => array("ID")));
         while ($itemsFromDbItem = $itemsFromDbList->fetch()) {
             $itemsFromDb[$itemsFromDbItem["ID"]] = true;
         }
     }
     /** @var Payment $payment */
     foreach ($this->collection as $payment) {
         if ($payment->isInner() && $payment->getSum() == 0 && $payment->getId() == 0) {
             $payment->delete();
         }
     }
     /** @var Payment $payment */
     foreach ($this->collection as $payment) {
         $r = $payment->save();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
         }
         if (isset($itemsFromDb[$payment->getId()])) {
             unset($itemsFromDb[$payment->getId()]);
         }
     }
     foreach ($itemsFromDb as $k => $v) {
         Internals\PaymentTable::delete($k);
         /** @var Order $order */
         if (!($order = $this->getOrder())) {
             throw new Main\ObjectNotFoundException('Entity "Order" not found');
         }
         if ($order->getId() > 0) {
             OrderHistory::addAction('PAYMENT', $order->getId(), 'PAYMENT_REMOVE', $k);
         }
     }
     return $result;
 }
Пример #9
0
 protected function setAttributesFromResult(Result $result)
 {
     if (!$result->isSuccess()) {
         throw new ArgumentException('Result is not success');
     }
     $attributes = $result->getData();
     if ($result instanceof AddResult) {
         $attributes['ID'] = $result->getId();
     }
     return $this->setAttributes($attributes);
 }
Пример #10
0
 public static function checkFields(Result $result, $primary, array $data)
 {
     if ($result instanceof Entity\UpdateResult) {
         if (isset($data['STORAGE_ID'])) {
             $field = static::getEntity()->getField('STORAGE_ID');
             $result->addError(new Entity\FieldError($field, Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_UPDATE_STORAGE_ID", array("#FIELD#" => $field->getTitle()))));
         }
         if (isset($data['PARENT_ID'])) {
             $field = static::getEntity()->getField('PARENT_ID');
             $result->addError(new Entity\FieldError($field, Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_UPDATE_PARENT_ID", array("#FIELD#" => $field->getTitle()))));
         }
     }
     if (!empty($data['NAME']) && (!IO\Path::validateFilename($data['NAME']) || strpos($data['NAME'], '%') !== false)) {
         $field = static::getEntity()->getField('NAME');
         $result->addError(new Entity\FieldError($field, Loc::getMessage("DISK_OBJECT_ENTITY_ERROR_FIELD_NAME_HAS_INVALID_CHARS", array("#FIELD#" => $field->getTitle()))));
     }
     parent::checkFields($result, $primary, $data);
 }
Пример #11
0
 public static function checkFieldsChain(\Bitrix\Main\Entity\Result $result, $primary = null, array $fields)
 {
     $id = $primary;
     $errorList = array();
     $errorCurrentNumber = 0;
     foreach ($fields as $item) {
         $errorCurrentNumber++;
         $chainFields = array('MAILING_ID' => $id ? $id : 1, 'ID' => $item['ID'], 'REITERATE' => 'Y', 'IS_TRIGGER' => 'Y', 'EMAIL_FROM' => $item['EMAIL_FROM'], 'SUBJECT' => $item['SUBJECT'], 'MESSAGE' => $item['MESSAGE'], 'TIME_SHIFT' => intval($item['TIME_SHIFT']));
         $chainId = 0;
         if (!empty($item['ID'])) {
             $chainId = $item['ID'];
         }
         if ($chainId > 0) {
             $chain = \Bitrix\Sender\MailingChainTable::getRowById(array('ID' => $chainId));
             if ($chain && $chain['STATUS'] != \Bitrix\Sender\MailingChainTable::STATUS_WAIT) {
                 $chainFields['STATUS'] = $chain['STATUS'];
             }
         }
         if (empty($chainFields['STATUS'])) {
             $chainFields['STATUS'] = \Bitrix\Sender\MailingChainTable::STATUS_WAIT;
         }
         $chainFields['ID'] = $chainId;
         $resultItem = new \Bitrix\Main\Entity\Result();
         \Bitrix\Sender\MailingChainTable::checkFields($resultItem, null, $chainFields);
         if ($resultItem->isSuccess()) {
         } else {
             $errorList[$errorCurrentNumber] = $resultItem->getErrors();
         }
     }
     $delimiter = '';
     foreach ($errorList as $number => $errors) {
         /* @var \Bitrix\Main\Entity\FieldError[] $errors*/
         foreach ($errors as $error) {
             $result->addError(new Entity\FieldError($error->getField(), $delimiter . Loc::getMessage('SENDER_ENTITY_MAILING_CHAIN_ITEM_NUMBER') . $number . ': ' . $error->getMessage(), $error->getCode()));
             $delimiter = '';
         }
         $delimiter = "\n";
     }
     return $result;
 }
Пример #12
0
 /**
  * Builds model from \Bitrix\Main\Entity\Result.
  * @param Result $result Query result.
  * @return static
  * @throws \Bitrix\Main\ArgumentException
  */
 public static function buildFromResult(Result $result)
 {
     $data = $result->getData();
     if ($result instanceof AddResult) {
         $data['ID'] = $result->getId();
     }
     $className = static::getClassNameModel($data);
     /** @var BaseObject $model */
     $model = new $className();
     return $model->setAttributesFromResult($result);
 }
Пример #13
0
 /**
  * @param        $value
  * @param        $primary
  * @param        $row
  * @param Result $result
  *
  * @return Result
  * @throws SystemException
  */
 public function validateValue($value, $primary, $row, Result $result)
 {
     if ($value instanceof SqlExpression) {
         return $result;
     }
     $validators = $this->getValidators();
     foreach ($validators as $validator) {
         if ($validator instanceof IValidator) {
             $vResult = $validator->validate($value, $primary, $row, $this);
         } else {
             $vResult = call_user_func_array($validator, array($value, $primary, $row, $this));
         }
         if ($vResult !== true) {
             if ($vResult instanceof EntityError) {
                 $result->addError($vResult);
             } else {
                 $result->addError(new FieldError($this, $vResult, FieldError::INVALID_VALUE));
             }
         }
     }
     return $result;
 }
Пример #14
0
 /**
  * @return bool Is deletion successful?.
  */
 public function uninstall()
 {
     if ($this->isInstalled()) {
         $this->unsetActive();
         $res = TradingPlatformTable::delete($this->getId());
     } else {
         $res = new Result();
     }
     unset(self::$instances[$this->getCode()]);
     $this->isInstalled = false;
     return $res->isSuccess();
 }
Пример #15
0
 /**
  * Check data for create one or more coupons.
  *
  * @param array $data				Coupon data.
  * @param bool $newDiscount			New discount flag.
  * @return Main\Entity\Result
  */
 public static function checkPacket(array $data, $newDiscount = false)
 {
     $result = new Main\Entity\Result();
     $newDiscount = $newDiscount === true;
     if (empty($data) || !is_array($data)) {
         $result->addError(new Main\Entity\EntityError(Loc::getMessage('DISCOUNT_COUPON_PACKET_EMPTY'), 'COUPON_PACKET'));
     } else {
         if (empty($data['TYPE']) || !in_array((int) $data['TYPE'], self::getCouponTypes(false))) {
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_TYPE'), 'COUPON_PACKET'));
         }
         if (!$newDiscount && empty($data['DISCOUNT_ID'])) {
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_DISCOUNT_ID'), 'COUPON_PACKET'));
         }
         if (isset($data['ACTIVE_FROM']) && !$data['ACTIVE_FROM'] instanceof Main\Type\DateTime || isset($data['ACTIVE_TO']) && !$data['ACTIVE_TO'] instanceof Main\Type\DateTime) {
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('DISCOUNT_COUPON_VALIDATOR_PERIOD'), 'COUPON_PACKET'));
         }
     }
     return $result;
 }
Пример #16
0
 public static function checkFields(Entity\Result $result, $primary, array $data)
 {
     // check data - fieldname & type & strlen etc.
     foreach ($data as $k => $v) {
         if (!(static::getEntity()->hasField($k) && static::getEntity()->getField($k) instanceof \Bitrix\Main\Entity\ScalarField)) {
             throw new \Exception(sprintf('Field `%s` not found in entity when trying to query %s row.', $k, static::getEntity()->getName()));
         }
     }
     // check by uf manager
     $entityName = static::getEntity()->getName();
     $hlblock = HighloadBlockTable::getList(array('select' => array('ID'), 'filter' => array('=NAME' => $entityName)))->fetch();
     $fields = $GLOBALS['USER_FIELD_MANAGER']->getUserFields('HLBLOCK_' . $hlblock['ID']);
     // dear uf manager, please go f**k yourself and don't touch unchanged files
     foreach ($data as $k => $v) {
         // hide them from him
         $arUserField = $fields[$k];
         if ($arUserField["USER_TYPE"]["BASE_TYPE"] == 'file' && !is_array($v)) {
             //unset($data[$k]);
         }
     }
     if (!$GLOBALS["USER_FIELD_MANAGER"]->checkFields('HLBLOCK_' . $hlblock['ID'], null, $data)) {
         if (is_object($GLOBALS['APPLICATION']) && $GLOBALS['APPLICATION']->getException()) {
             $e = $GLOBALS['APPLICATION']->getException();
             $result->addError(new Entity\EntityError($e->getString()));
             $GLOBALS['APPLICATION']->resetException();
         } else {
             $result->addError(new Entity\EntityError("Unknown error."));
         }
     }
 }
Пример #17
0
 public function __construct()
 {
     parent::__construct();
 }
Пример #18
0
 /**
  * @return Entity\Result
  * @throws Main\ArgumentException
  * @throws Main\ArgumentNullException
  * @throws Main\ObjectNotFoundException
  */
 public function save()
 {
     $result = new Entity\Result();
     $itemsFromDb = array();
     if ($this->getOrder()->getId() > 0) {
         $itemsFromDbList = Internals\ShipmentTable::getList(array("filter" => array("ORDER_ID" => $this->getOrder()->getId()), "select" => array("ID", "DELIVERY_NAME")));
         while ($itemsFromDbItem = $itemsFromDbList->fetch()) {
             $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem;
         }
     }
     /** @var Shipment $shipment */
     foreach ($this->collection as $shipment) {
         if ($shipment->isSystem()) {
             continue;
         }
         if (($systemShipment = $this->getSystemShipment()) && $systemShipment->getId() == 0) {
             /** @var Result $r */
             $r = $this->cloneShipment($shipment, $systemShipment);
             if ($r->isSuccess()) {
                 break;
             } else {
                 $result->addErrors($r->getErrors());
             }
         }
     }
     /** @var Shipment $shipment */
     foreach ($this->collection as $shipment) {
         $r = $shipment->save();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
         }
         if (isset($itemsFromDb[$shipment->getId()])) {
             unset($itemsFromDb[$shipment->getId()]);
         }
     }
     foreach ($itemsFromDb as $k => $v) {
         Internals\ShipmentTable::deleteWithItems($k);
         /** @var Order $order */
         if (!($order = $this->getOrder())) {
             throw new Main\ObjectNotFoundException('Entity "Order" not found');
         }
         if ($order->getId() > 0) {
             OrderHistory::addAction('SHIPMENT', $order->getId(), 'SHIPMENT_REMOVED', $k, null, array('ID' => $k, 'DELIVERY_NAME' => $v['DELIVERY_NAME']));
         }
     }
     if ($this->getOrder()->getId() > 0) {
         OrderHistory::collectEntityFields('SHIPMENT', $this->getOrder()->getId());
     }
     return $result;
 }
Пример #19
0
 /**
  * @return Main\Entity\Result
  * @throws Main\ArgumentException
  * @throws Main\ArgumentNullException
  * @throws Main\ArgumentOutOfRangeException
  * @throws Main\ObjectNotFoundException
  */
 public function save()
 {
     $result = new Main\Entity\Result();
     $itemsFromDb = array();
     if ($this->getShipment()->getId() > 0) {
         $itemsFromDbList = Internals\ShipmentItemTable::getList(array("filter" => array("ORDER_DELIVERY_ID" => $this->getShipment()->getId()), "select" => array("ID", 'BASKET_ID')));
         while ($itemsFromDbItem = $itemsFromDbList->fetch()) {
             $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem;
         }
     }
     /** @var ShipmentItem $shipmentItem */
     foreach ($this->collection as $shipmentItem) {
         /** @var BasketItem $basketItem */
         if (!($basketItem = $shipmentItem->getBasketItem())) {
             throw new Main\ObjectNotFoundException('Entity "BasketItem" not found');
         }
         if ($basketItem->isBundleParent()) {
             $this->addBundleToCollection($basketItem);
         }
     }
     /** @var Shipment $shipment */
     if (!($shipment = $this->getShipment())) {
         throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
     }
     /** @var ShipmentItem $shipmentItem */
     foreach ($this->collection as $shipmentItem) {
         if ($shipment->isSystem() && $shipmentItem->getQuantity() == 0) {
             continue;
         }
         $r = $shipmentItem->save();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
         }
         if (isset($itemsFromDb[$shipmentItem->getId()])) {
             unset($itemsFromDb[$shipmentItem->getId()]);
         }
     }
     /** @var ShipmentCollection $shipmentCollection */
     if (!($shipmentCollection = $shipment->getCollection())) {
         throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found');
     }
     /** @var Order $order */
     if (!($order = $shipmentCollection->getOrder())) {
         throw new Main\ObjectNotFoundException('Entity "Order" not found');
     }
     /** @var Basket $basket */
     if (!($basket = $order->getBasket())) {
         throw new Main\ObjectNotFoundException('Entity "Basket" not found');
     }
     foreach ($itemsFromDb as $k => $v) {
         Internals\ShipmentItemTable::deleteWithItems($k);
         /** @var BasketItem $basketItem */
         if ($basketItem = $basket->getItemById($k)) {
             OrderHistory::addAction('SHIPMENT', $order->getId(), 'SHIPMENT_ITEM_BASKET_REMOVED', $shipment->getId(), null, array('NAME' => $basketItem->getField('NAME'), 'QUANTITY' => $basketItem->getQuantity(), 'PRODUCT_ID' => $basketItem->getProductId()));
         }
     }
     return $result;
 }
 /**
  * Извлечение данных для связей
  */
 protected function collectReferencesData()
 {
     $result = new Entity\Result();
     $references = $this->getReferences();
     // Извлечение данных управляемых связей
     foreach ($references as $fieldName => $reference) {
         if (array_key_exists($fieldName, $this->data)) {
             if (!is_array($this->data[$fieldName])) {
                 $result->addError(new Entity\EntityError('Связь должна быть множественным полем'));
                 return $result;
             }
             // Извлечение данных для связи
             $this->referencesData[$fieldName] = $this->data[$fieldName];
             unset($this->data[$fieldName]);
         }
     }
     return $result;
 }
Пример #21
0
 /**
  * @return Entity\Result
  */
 public function save()
 {
     $result = new Entity\Result();
     $itemsFromDb = array();
     if ($this->getOrder()->getId() > 0) {
         $itemsFromDbList = Internals\OrderPropsValueTable::getList(array("filter" => array("ORDER_ID" => $this->getOrder()->getId()), "select" => array("ID")));
         while ($itemsFromDbItem = $itemsFromDbList->fetch()) {
             $itemsFromDb[$itemsFromDbItem["ID"]] = true;
         }
     }
     /** @var PropertyValue $property */
     foreach ($this->collection as $property) {
         $r = $property->save();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
         }
         if (isset($itemsFromDb[$property->getId()])) {
             unset($itemsFromDb[$property->getId()]);
         }
     }
     foreach ($itemsFromDb as $k => $v) {
         Internals\OrderPropsValueTable::delete($k);
     }
     return $result;
 }
Пример #22
0
 public static function saveProfileData($profileId, Order $order, array $formData)
 {
     $result = new Result();
     $errors = array();
     if (!($profileName = $order->getPropertyCollection()->getProfileName())) {
         $result->addError(new EntityError(Loc::getMessage("SALE_ORDEREDIT_PROFILE_ERROR_NAME")));
         return $result;
     }
     $res = \CSaleOrderUserProps::DoSaveUserProfile($order->getUserId(), $profileId, $profileName->getValue(), $order->getPersonTypeId(), $propCollection = $formData["PROPERTIES"], $errors);
     if ($res === false) {
         if (!empty($errors)) {
             foreach ($errors as $error) {
                 $result->addError(new EntityError($error . "<br>\n"));
             }
         } else {
             $result->addError(new EntityError(Loc::getMessage("SALE_ORDEREDIT_PROFILE_ERROR_SAVE")));
         }
     }
     return $result;
 }