%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/main/lib/numerator/service/ |
Current File : /home/bitrix/www/bitrix/modules/main/lib/numerator/service/numeratorrequestmanager.php |
<?php namespace Bitrix\Main\Numerator\Service; use Bitrix\Main\Entity\ReferenceField; use Bitrix\Main\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Numerator\Generator\SequentNumberGenerator; use Bitrix\Main\Numerator\Model\NumeratorSequenceTable; use Bitrix\Main\Numerator\Model\NumeratorTable; use Bitrix\Main\Numerator\Numerator; use Bitrix\Main\Result; /** * Class NumeratorRequestManager * @package Bitrix\Main\Numerator\Model */ class NumeratorRequestManager { /*** @var \Bitrix\Main\HttpRequest */ private $request; /** * NumeratorRequestManager constructor. * @param \Bitrix\Main\HttpRequest $request */ public function __construct($request) { $this->request = $request; } /** * @return \Bitrix\Main\Entity\AddResult|\Bitrix\Main\Entity\UpdateResult|Result * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\NotImplementedException * @throws \Bitrix\Main\ObjectException * @throws \Bitrix\Main\ObjectPropertyException * @throws \Bitrix\Main\SystemException */ public function saveFromRequest() { $numeratorConfig = $this->request->getPost(Numerator::getType()); $id = $numeratorConfig ['id']; if ($id) { $result = $this->updateNextSequentialNumber($id); if ($result->isSuccess()) { $result =Numerator::update($id, $this->request->getPostList()->toArray()); } } else { $numerator = Numerator::create(); $result = $numerator->setConfig($this->request->getPostList()->toArray()); if ($result->isSuccess()) { $result = $numerator->save(); } } return $result; } /** * @param $id * @return Result * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ObjectPropertyException * @throws \Bitrix\Main\SystemException */ private function updateNextSequentialNumber($id) { $sequenceConfig = $this->request->getPost(SequentNumberGenerator::getType()); $result = new Result(); if ($sequenceConfig !== null && is_array($sequenceConfig) && array_key_exists('nextNumberForSequence', $sequenceConfig) && $sequenceConfig['nextNumberForSequence']) { $nextNumber = $sequenceConfig['nextNumberForSequence']; if (is_numeric($nextNumber)) { $sequence = NumeratorTable::query() ->registerRuntimeField('', new ReferenceField( 'ref', NumeratorSequenceTable::class, ['=this.ID' => 'ref.NUMERATOR_ID'] ) ) ->addSelect(('ID')) ->addSelect('ref.NEXT_NUMBER', 'NEXT_NUMBER') ->addSelect('ref.TEXT_KEY', 'TEXT_KEY') ->where('ID', $id) ->exec() ->fetchAll(); if ($sequence && count($sequence) == 1) { $dbNextNumber = $sequence[0]['NEXT_NUMBER']; if ((int)$nextNumber <= (int)$dbNextNumber) { return $result->addError(new Error(Loc::getMessage('MAIN_NUMERATOR_EDIT_ERROR_NUMBER_LESS'))); } $numerator = Numerator::load($id); if ($numerator) { $res = $numerator->setNextSequentialNumber($nextNumber, $dbNextNumber, $sequence[0]['TEXT_KEY']); if (!$res->isSuccess()) { $errors = $res->getErrors(); return $result->addError($errors[0]); } } } } else { return $result->addError(new Error(Loc::getMessage('MAIN_NUMERATOR_EDIT_ERROR_NUMBER_NOT_NUMERIC'))); } } return $result; } }