403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/storedocumenttable.php
<?php
namespace Bitrix\Catalog;

use Bitrix\Main\Entity\ReferenceField;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main;
use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\ORM\Fields\BooleanField;
use Bitrix\Main\ORM\Fields\DatetimeField;
use Bitrix\Main\ORM\Fields\EnumField;
use Bitrix\Main\ORM\Fields\FloatField;
use Bitrix\Main\ORM\Fields\IntegerField;
use Bitrix\Main\ORM\Fields\StringField;
use Bitrix\Main\ORM\Fields\Validators\LengthValidator;
use Bitrix\Main\ORM\Query\Join;
use Bitrix\Main\UserTable;

/**
 * Class StoreDocumentTable
 *
 * Fields:
 * <ul>
 * <li> ID int mandatory
 * <li> TITLE string(255) optional
 * <li> DOC_TYPE string(1) mandatory
 * <li> DOC_NUMBER string(64) optional
 * <li> SITE_ID string(2) optional
 * <li> CONTRACTOR_ID int optional
 * <li> DATE_MODIFY datetime optional
 * <li> DATE_CREATE datetime optional
 * <li> CREATED_BY int optional
 * <li> MODIFIED_BY int optional
 * <li> RESPONSIBLE_ID int optional
 * <li> CURRENCY string(3) optional
 * <li> STATUS bool ('N', 'Y') optional default 'N'
 * <li> WAS_CANCELLED bool ('N', 'Y') optional default 'N'
 * <li> DATE_STATUS datetime optional
 * <li> DATE_DOCUMENT datetime optional
 * <li> STATUS_BY int optional
 * <li> TOTAL double optional
 * <li> COMMENTARY string(1000) optional
 * <li> ITEMS_ORDER_DATE datetime optional
 * <li> ITEMS_RECEIVED_DATE datetime optional
 * <li> CONTRACTOR reference to {@link \Bitrix\Catalog\ContractorTable}
 * </ul>
 *
 * @package Bitrix\Catalog
 *
 * DO NOT WRITE ANYTHING BELOW THIS
 *
 * <<< ORMENTITYANNOTATION
 * @method static EO_StoreDocument_Query query()
 * @method static EO_StoreDocument_Result getByPrimary($primary, array $parameters = [])
 * @method static EO_StoreDocument_Result getById($id)
 * @method static EO_StoreDocument_Result getList(array $parameters = [])
 * @method static EO_StoreDocument_Entity getEntity()
 * @method static \Bitrix\Catalog\EO_StoreDocument createObject($setDefaultValues = true)
 * @method static \Bitrix\Catalog\EO_StoreDocument_Collection createCollection()
 * @method static \Bitrix\Catalog\EO_StoreDocument wakeUpObject($row)
 * @method static \Bitrix\Catalog\EO_StoreDocument_Collection wakeUpCollection($rows)
 */

class StoreDocumentTable extends DataManager
{
	public const TYPE_ARRIVAL = 'A';
	public const TYPE_STORE_ADJUSTMENT = 'S';
	public const TYPE_MOVING = 'M';
	public const TYPE_RETURN = 'R';
	public const TYPE_DEDUCT = 'D';
	public const TYPE_UNDO_RESERVE = 'U';
	public const TYPE_SALES_ORDERS = 'W';
	//public const TYPE_INVENTORY = 'I';

	public const STATUS_CONDUCTED = 'Y';
	public const STATUS_DRAFT = 'N';
	public const STATUS_CANCELLED = 'C';

	/**
	 * Returns DB table name for entity.
	 *
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_catalog_store_docs';
	}

	/**
	 * Returns entity map definition.
	 *
	 * @return array
	 */
	public static function getMap()
	{
		return [
			'ID' => new IntegerField(
				'ID',
				[
					'primary' => true,
					'autocomplete' => true,
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_ID_FIELD'),
				]
			),
			'TITLE' => new StringField(
				'TITLE',
				[
					'validation' => [__CLASS__, 'validateTitle'],
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_TITLE_FIELD')
				]
			),
			'DOC_TYPE' => new EnumField(
				'DOC_TYPE',
				[
					'required' => true,
					'values' => static::getTypeList(),
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DOC_TYPE_FIELD'),
				]
			),
			'DOC_NUMBER' => new StringField(
				'DOC_NUMBER',
				[
					'validation' => [__CLASS__, 'validateDocNumber'],
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DOC_NUMBER_FIELD'),
				]
			),
			'SITE_ID' => new StringField(
				'SITE_ID',
				[
					'validation' => [__CLASS__, 'validateSiteId'],
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_SITE_ID_FIELD'),
				]
			),
			'CONTRACTOR' => new Main\ORM\Fields\Relations\Reference(
				'CONTRACTOR',
				ContractorTable::class,
				Main\ORM\Query\Join::on('this.CONTRACTOR_ID', 'ref.ID')
			),
			'CONTRACTOR_ID' => new IntegerField(
				'CONTRACTOR_ID',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_CONTRACTOR_ID_FIELD'),
				]
			),
			'DATE_MODIFY' => new DatetimeField(
				'DATE_MODIFY',
				[
					'default_value' => function()
						{
							return new Main\Type\DateTime();
						},
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DATE_MODIFY_FIELD'),
				]
			),
			'DATE_CREATE' => new DatetimeField(
				'DATE_CREATE',
				[
					'default_value' => function()
					{
						return new Main\Type\DateTime();
					},
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DATE_CREATE_FIELD'),
				]
			),
			'CREATED_BY' => new IntegerField(
				'CREATED_BY',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_CREATED_BY_FIELD'),
				]
			),
			'CREATED_BY_USER' => new Main\ORM\Fields\Relations\Reference(
				'CREATED_BY_USER',
				UserTable::class,
				Main\ORM\Query\Join::on('this.CREATED_BY', 'ref.ID')
			),
			'MODIFIED_BY' => new IntegerField(
				'MODIFIED_BY',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_MODIFIED_BY_FIELD'),
				]
			),
			'MODIFIED_BY_USER' => new Main\ORM\Fields\Relations\Reference(
				'MODIFIED_BY_USER',
				UserTable::class,
				Main\ORM\Query\Join::on('this.MODIFIED_BY', 'ref.ID')
			),
			'RESPONSIBLE_ID' => new IntegerField(
				'RESPONSIBLE_ID',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_RESPONSIBLE_ID_FIELD')
				]
			),
			'RESPONSIBLE' => new Main\ORM\Fields\Relations\Reference(
				'RESPONSIBLE',
				UserTable::class,
				Main\ORM\Query\Join::on('this.RESPONSIBLE_ID', 'ref.ID')
			),
			'CURRENCY' => new StringField(
				'CURRENCY',
				[
					'validation' => [__CLASS__, 'validateCurrency'],
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_CURRENCY_FIELD'),
				]
			),
			'STATUS' => new BooleanField(
				'STATUS',
				[
					'values' => ['N', 'Y'],
					'default' => 'N',
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_STATUS_FIELD'),
				]
			),
			'WAS_CANCELLED' => new BooleanField(
				'WAS_CANCELLED',
				[
					'values' => array('N', 'Y'),
					'default' => 'N',
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_WAS_CANCELLED_FIELD'),
				]
			),
			'DATE_STATUS' => new DatetimeField(
				'DATE_STATUS',
				[
					'default_value' => null,
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DATE_STATUS_FIELD'),
				]
			),
			'DATE_DOCUMENT' => new DatetimeField(
				'DATE_DOCUMENT',
				[
					'default_value' => function()
					{
						return new Main\Type\DateTime();
					},
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_DATE_DOCUMENT_FIELD'),
				]
			),
			'STATUS_BY' => new IntegerField(
				'STATUS_BY',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_STATUS_BY_FIELD'),
				]
			),
			'STATUS_BY_USER' => new Main\ORM\Fields\Relations\Reference(
				'STATUS_BY_USER',
				UserTable::class,
				Main\ORM\Query\Join::on('this.STATUS_BY', 'ref.ID')
			),
			'TOTAL' => new FloatField(
				'TOTAL',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_TOTAL_FIELD'),
				]
			),
			'COMMENTARY' => new StringField(
				'COMMENTARY',
				[
					'validation' => [__CLASS__, 'validateCommentary'],
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_COMMENTARY_FIELD'),
				]
			),
			'ITEMS_ORDER_DATE' => new DatetimeField(
				'ITEMS_ORDER_DATE',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_ITEMS_ORDER_DATE_FIELD')
				]
			),
			'ITEMS_RECEIVED_DATE' => new DatetimeField(
				'ITEMS_RECEIVED_DATE',
				[
					'title' => Loc::getMessage('INVENTORY_DOCUMENT_ENTITY_ITEMS_RECEIVED_DATE_FIELD')
				]
			),
			'ELEMENTS' => (new Main\ORM\Fields\Relations\OneToMany(
				'ELEMENTS',
				StoreDocumentElementTable::class,
				'DOCUMENT'
			))->configureJoinType('left'),
		];
	}

	/**
	 * Returns validators for DOC_NUMBER field.
	 *
	 * @return array
	 */
	public static function validateDocNumber(): array
	{
		return [
			new LengthValidator(null, 64),
		];
	}

	/**
	 * Returns validators for TITLE field.
	 *
	 * @return array
	 */
	public static function validateTitle()
	{
		return [
			new LengthValidator(null, 255),
		];
	}

	/**
	 * Returns validators for SITE_ID field.
	 *
	 * @return array
	 */
	public static function validateSiteId(): array
	{
		return [
			new LengthValidator(null, 2),
		];
	}

	/**
	 * Returns validators for CURRENCY field.
	 *
	 * @return array
	 */
	public static function validateCurrency(): array
	{
		return [
			new LengthValidator(3, 3),
		];
	}

	/**
	 * Returns validators for COMMENTARY field.
	 *
	 * @return array
	 */
	public static function validateCommentary(): array
	{
		return [
			new LengthValidator(null, 1000),
		];
	}

	public static function getTypeList(bool $description = false): array
	{
		if ($description)
		{
			return [
				self::TYPE_ARRIVAL => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_ARRIVAL'),
				self::TYPE_STORE_ADJUSTMENT => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_STORE_ADJUSTMENT'),
				self::TYPE_MOVING => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_MOVING'),
				self::TYPE_RETURN => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_RETURN'),
				self::TYPE_DEDUCT => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_DEDUCT'),
				self::TYPE_UNDO_RESERVE => Loc::getMessage('INVENTORY_DOCUMENT_TYPE_UNDO_RESERVE'),
			];
		}
		else
		{
			return [
				self::TYPE_ARRIVAL,
				self::TYPE_STORE_ADJUSTMENT,
				self::TYPE_MOVING,
				self::TYPE_RETURN,
				self::TYPE_DEDUCT,
				self::TYPE_UNDO_RESERVE,
			];
		}
	}

	public static function getStatusList(): array
	{
		return [
			self::STATUS_CONDUCTED => Loc::getMessage('INVENTORY_DOCUMENT_STATUS_CONDUCTED'),
			self::STATUS_DRAFT => Loc::getMessage('INVENTORY_DOCUMENT_STATUS_DRAFT'),
			self::STATUS_CANCELLED => Loc::getMessage('INVENTORY_DOCUMENT_STATUS_CANCELLED'),
		];
	}

	public static function getStatusName(string $status): ?string
	{
		$statusList = static::getStatusList();

		return $statusList[$status] ?? null;
	}

	public static function getOrmFilterByStatus(string $status): ?array
	{
		switch ($status)
		{
			case self::STATUS_CONDUCTED:
				$result = [
					'=STATUS' => 'Y',
				];
				break;
			case self::STATUS_DRAFT:
				$result = [
					'=STATUS' => 'N',
					'=WAS_CANCELLED' => 'N',
				];
				break;
			case self::STATUS_CANCELLED:
				$result = [
					'=STATUS' => 'N',
					'=WAS_CANCELLED' => 'Y',
				];
				break;
			default:
				$result = null;
				break;
		}

		return $result;
	}

	/*
	 * The following methods are used to select the documents that include a particular product/set of products.
	 * They are to be used with the \Bitrix\Main\ORM\Query\Query object (i.e. not with getList).
	 *
	 * Example:
	 * $docs = Catalog\StoreDocumentTable::query()->setSelect(['ID'])->withProduct($productId)->fetchAll();
	 */

	public static function withProduct(Main\ORM\Query\Query $query, $productId)
	{
		$productId = (int)$productId;
		if ($productId <= 0)
		{
			return;
		}

		$query->registerRuntimeField(
			new ReferenceField(
				'FILTER_ELEMENT_DOC_ID',
				StoreDocumentElementTable::getEntity(),
				Join::on('ref.DOC_ID', 'this.ID')->where('ref.ELEMENT_ID', $productId),
				['join_type' => 'INNER']
			)
		);

		$query->addGroup('ID');
	}

	public static function withProductList(Main\ORM\Query\Query $query, array $productIds)
	{
		Main\Type\Collection::normalizeArrayValuesByInt($productIds);
		if (empty($productIds))
		{
			return;
		}

		$query->registerRuntimeField(
			new ReferenceField(
				'FILTER_ELEMENT_DOC_ID',
				StoreDocumentElementTable::getEntity(),
				Join::on('ref.DOC_ID', 'this.ID')->whereIn('ref.ELEMENT_ID', $productIds),
				['join_type' => 'INNER']
			)
		);

		$query->addGroup('ID');
	}

	public static function withStore(Main\ORM\Query\Query $query, $storeId)
	{
		$storeId = (int)$storeId;
		if ($storeId <= 0)
		{
			return;
		}

		$filter = new Main\ORM\Query\Filter\ConditionTree();
		$filter
			->logic('or')
			->where('ref.STORE_FROM', $storeId)
			->where('ref.STORE_TO', $storeId)
		;
		$query->registerRuntimeField(
			new ReferenceField(
				'FILTER_STORE_DOC_ID',
				StoreDocumentElementTable::getEntity(),
				Join::on('ref.DOC_ID', 'this.ID')->where($filter),
				['join_type' => 'INNER']
			)
		);

		$query->addGroup('ID');
	}

	public static function withStoreList(Main\ORM\Query\Query $query, array $storeIds)
	{
		Main\Type\Collection::normalizeArrayValuesByInt($storeIds);
		if (empty($storeIds))
		{
			return;
		}

		$filter = new Main\ORM\Query\Filter\ConditionTree();
		$filter
			->logic('or')
			->whereIn('ref.STORE_FROM', $storeIds)
			->whereIn('ref.STORE_TO', $storeIds)
		;
		$query->registerRuntimeField(
			new ReferenceField(
				'FILTER_STORE_DOC_ID',
				StoreDocumentElementTable::getEntity(),
				Join::on('ref.DOC_ID', 'this.ID')->where($filter),
				['join_type' => 'INNER']
			)
		);

		$query->addGroup('ID');
	}

	public static function withStoreFromList(Main\ORM\Query\Query $query, array $storeIds)
	{
		static::addSingleStoreFilterToQuery($query, 'STORE_FROM', $storeIds);
	}

	public static function withStoreToList(Main\ORM\Query\Query $query, array $storeIds)
	{
		static::addSingleStoreFilterToQuery($query, 'STORE_TO', $storeIds);
	}

	protected static function addSingleStoreFilterToQuery(Main\ORM\Query\Query $query, string $fieldName, array $storeIds): void
	{
		Main\Type\Collection::normalizeArrayValuesByInt($storeIds);
		if (empty($storeIds))
		{
			return;
		}

		$filter = new Main\ORM\Query\Filter\ConditionTree();
		$filter
			->whereIn('ref.' . $fieldName, $storeIds)
		;
		$query->registerRuntimeField(
			new ReferenceField(
				'FILTER_' . $fieldName . '_DOC_ID',
				StoreDocumentElementTable::getEntity(),
				Join::on('ref.DOC_ID', 'this.ID')->where($filter),
				['join_type' => 'INNER']
			)
		);
		$query->addGroup('ID');
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit