%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/main/lib/numerator/service/
Upload File :
Create Path :
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;
	}
}

Zerion Mini Shell 1.0