Your IP : 3.148.192.32


Current Path : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/rpa/lib/scenario/
Upload File :
Current File : /var/www/axolotl/data/www/kirov.axolotls.ru/bitrix/modules/rpa/lib/scenario/defaultstages.php

<?php

namespace Bitrix\Rpa\Scenario;

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Result;
use Bitrix\Main\Security\Random;
use Bitrix\Rpa\Controller\Stage;
use Bitrix\Rpa\Model\StageToStageTable;
use Bitrix\Rpa\Model\Type;
use Bitrix\Rpa\Scenario;

class DefaultStages extends Scenario
{
	protected $type;

	public function __construct(Type $type)
	{
		$this->type = $type;
	}

	protected function getDefaultStagesData(): array
	{
		return [
			[
				'name' => Loc::getMessage('RPA_SCENARIO_DEFAULT_STAGES_FIRST'),
				'color' => '22B9FF',
			],
			[
				'name' => Loc::getMessage('RPA_SCENARIO_DEFAULT_STAGES_CHIEF_APPROVAL'),
				'color' => '88B9FF',
			],
			[
				'name' => Loc::getMessage('RPA_SCENARIO_DEFAULT_STAGES_ACCOUNTANT_APPROVAL'),
				'color' => '10e5fc',
			],
			[
				'name' => Loc::getMessage('RPA_SCENARIO_DEFAULT_STAGES_SUCCESS'),
				'color' => '00ff00',
				'semantic' => \Bitrix\Rpa\Model\Stage::SEMANTIC_SUCCESS,
			],
			[
				'name' => Loc::getMessage('RPA_SCENARIO_DEFAULT_STAGES_FAIL'),
				'color' => 'ff0000',
				'semantic' => \Bitrix\Rpa\Model\Stage::SEMANTIC_FAIL,
			],
		];
	}

	public function play(): Result
	{
		$result = new Result();

		$stages = $this->type->getStages();
		if($stages->count() > 0)
		{
			return $result;
		}

		$defaultStagesData = $this->getDefaultStagesData();
		$resultData = [
			'eventIds' => [],
		];

		$sort = Stage::SORT_STEP;
		foreach($defaultStagesData as $fields)
		{
			$controller = new Stage();
			$stage = $this->type->createStage();
			$fields['sort'] = $sort;
			$eventId = Random::getString(6);
			$controller->updateAction($stage, $fields, $eventId);
			$resultData['eventIds'][] = $eventId;
			if($controller->getErrors())
			{
				$result->addErrors($controller->getErrors());
			}
			else
			{
				$stages->add($stage);
				$resultData['defaultStages'][] = $stage;
			}

			$sort += Stage::SORT_STEP;
		}

		if($result->isSuccess())
		{
			$allowResult = $this->allowMovingToFinalStages();
			if(!$allowResult->isSuccess())
			{
				$result->addErrors($allowResult->getErrors());
			}
		}

		$result->setData($resultData);

		return $result;
	}

	protected function allowMovingToFinalStages(): Result
	{
		$result = new Result();

		$firstStage = $this->type->getFirstStage();
		$successStage = $this->type->getSuccessStage();
		$failStages = $this->type->getFailStages();
		if($firstStage && $successStage)
		{
			$addResult = StageToStageTable::add([
				'STAGE_ID' => $firstStage->getId(),
				'STAGE_TO_ID' => $successStage->getId()
			]);
			if(!$addResult->isSuccess())
			{
				$result->addErrors($addResult->getErrors());
			}
		}
		if($firstStage)
		{
			foreach($failStages as $failStage)
			{
				$addResult = StageToStageTable::add([
					'STAGE_ID' => $firstStage->getId(),
					'STAGE_TO_ID' => $failStage->getId()
				]);
				if(!$addResult->isSuccess())
				{
					$result->addErrors($addResult->getErrors());
				}
			}
		}

		return $result;
	}
}