static function getMap(): array
{
return [
'ID' => new MainEntityIntegerField(
'ID',
[
'primary' => true,
'title' => Loc::getMessage('PRODUCT_ENTITY_ID_FIELD'),
]
),
'QUANTITY' => new MainEntityFloatField(
'QUANTITY',
[
'default_value' => 0,
'title' => Loc::getMessage('PRODUCT_ENTITY_QUANTITY_FIELD'),
]
),
'QUANTITY_TRACE' => new MainEntityEnumField(
'QUANTITY_TRACE',
[
'values' => [
self::STATUS_DEFAULT,
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_DEFAULT,
'fetch_data_modification' => [__CLASS__, 'modifyQuantityTrace'],
'title' => Loc::getMessage('PRODUCT_ENTITY_QUANTITY_TRACE_FIELD'),
]
),
'QUANTITY_TRACE_ORIG' => new MainEntityExpressionField(
'QUANTITY_TRACE_ORIG',
'%s',
'QUANTITY_TRACE',
[
'data_type' => 'string',
]
),
'WEIGHT' => new MainEntityFloatField(
'WEIGHT',
[
'default_value' => 0,
'title' => Loc::getMessage('PRODUCT_ENTITY_WEIGHT_FIELD'),
]
),
'TIMESTAMP_X' => new MainEntityDatetimeField(
'TIMESTAMP_X',
[
'default_value' => function()
{
return new MainTypeDateTime();
},
'title' => Loc::getMessage('PRODUCT_ENTITY_TIMESTAMP_X_FIELD'),
]
),
'PRICE_TYPE' => new MainEntityEnumField(
'PRICE_TYPE',
[
'values' => self::getPaymentTypes(false),
'default_value' => self::PAYMENT_TYPE_SINGLE,
'title' => Loc::getMessage('PRODUCT_ENTITY_PRICE_TYPE_FIELD'),
]
),
'RECUR_SCHEME_LENGTH' => new MainEntityIntegerField(
'RECUR_SCHEME_LENGTH',
[
'default_value' => 0,
'title' => Loc::getMessage('PRODUCT_ENTITY_RECUR_SCHEME_LENGTH_FIELD'),
]
),
'RECUR_SCHEME_TYPE' => new MainEntityEnumField(
'RECUR_SCHEME_TYPE',
[
'values' => self::getPaymentPeriods(false),
'default_value' => self::PAYMENT_PERIOD_DAY,
'title' => Loc::getMessage('PRODUCT_ENTITY_RECUR_SCHEME_TYPE_FIELD'),
]
),
'TRIAL_PRICE_ID' => new MainEntityIntegerField(
'TRIAL_PRICE_ID',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_TRIAL_PRICE_ID_FIELD'),
]
),
'WITHOUT_ORDER' => new MainEntityBooleanField(
'WITHOUT_ORDER',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_NO,
'title' => Loc::getMessage('PRODUCT_ENTITY_WITHOUT_ORDER_FIELD'),
]
),
'SELECT_BEST_PRICE' => new MainEntityBooleanField(
'SELECT_BEST_PRICE',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_YES,
]
),
'VAT_ID' => new MainEntityIntegerField(
'VAT_ID',
[
'default_value' => 0,
'title' => Loc::getMessage('PRODUCT_ENTITY_VAT_ID_FIELD'),
]
),
'VAT_INCLUDED' => new MainEntityBooleanField(
'VAT_INCLUDED',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_NO,
'title' => Loc::getMessage('PRODUCT_ENTITY_VAT_INCLUDED_FIELD'),
]
),
'CAN_BUY_ZERO' => new MainEntityEnumField(
'CAN_BUY_ZERO',
[
'values' => [
self::STATUS_DEFAULT,
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_DEFAULT,
'fetch_data_modification' => [__CLASS__, 'modifyCanBuyZero'],
'title' => Loc::getMessage('PRODUCT_ENTITY_CAN_BUY_ZERO_FIELD'),
]
),
'CAN_BUY_ZERO_ORIG' => new MainEntityExpressionField(
'CAN_BUY_ZERO_ORIG',
'%s',
'CAN_BUY_ZERO',
[
'data_type' => 'string',
]
),
'NEGATIVE_AMOUNT_TRACE' => new MainEntityEnumField(
'NEGATIVE_AMOUNT_TRACE',
[
'values' => [
self::STATUS_DEFAULT,
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_DEFAULT,
'fetch_data_modification' => [__CLASS__, 'modifyNegativeAmountTrace'],
'title' => Loc::getMessage('PRODUCT_ENTITY_NEGATIVE_AMOUNT_TRACE_FIELD'),
]
),
'NEGATIVE_AMOUNT_TRACE_ORIG' => new MainEntityExpressionField(
'NEGATIVE_AMOUNT_TRACE_ORIG',
'%s',
'NEGATIVE_AMOUNT_TRACE',
[
'data_type' => 'string',
]
),
'TMP_ID' => New MainEntityStringField(
'TMP_ID',
[
'validation' => [__CLASS__, 'validateTmpId'],
'title' => Loc::getMessage('PRODUCT_ENTITY_TMP_ID_FIELD'),
]
),
'PURCHASING_PRICE' => new MainEntityFloatField(
'PURCHASING_PRICE',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_PURCHASING_PRICE_FIELD'),
]
),
'PURCHASING_CURRENCY' => new MainEntityStringField(
'PURCHASING_CURRENCY',
[
'validation' => [__CLASS__, 'validatePurchasingCurrency'],
'title' => Loc::getMessage('PRODUCT_ENTITY_PURCHASING_CURRENCY_FIELD'),
]
),
'BARCODE_MULTI' => new MainEntityBooleanField(
'BARCODE_MULTI',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_NO,
'title' => Loc::getMessage('PRODUCT_ENTITY_BARCODE_MULTI_FIELD'),
]
),
'QUANTITY_RESERVED' => new MainEntityFloatField(
'QUANTITY_RESERVED',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_QUANTITY_RESERVED_FIELD'),
]
),
'SUBSCRIBE' => new MainEntityEnumField(
'SUBSCRIBE',
[
'values' => [
self::STATUS_DEFAULT,
self::STATUS_NO,
self::STATUS_YES,
],
'default_value' => self::STATUS_DEFAULT,
'fetch_data_modification' => [__CLASS__, 'modifySubscribe'],
'title' => Loc::getMessage('PRODUCT_ENTITY_SUBSCRIBE_FIELD'),
]
),
'SUBSCRIBE_ORIG' => new MainEntityExpressionField(
'SUBSCRIBE_ORIG',
'%s',
'SUBSCRIBE',
[
'data_type' => 'string',
]
),
'WIDTH' => new MainEntityFloatField(
'WIDTH',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_WIDTH_FIELD'),
]
),
'LENGTH' => new MainEntityFloatField(
'LENGTH',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_LENGTH_FIELD'),
]
),
'HEIGHT' => new MainEntityFloatField(
'HEIGHT',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_HEIGHT_FIELD'),
]
),
'MEASURE' => new MainEntityIntegerField(
'MEASURE',
[
'title' => Loc::getMessage('PRODUCT_ENTITY_MEASURE_FIELD'),
]
),
'TYPE' => new MainEntityEnumField(
'TYPE',
[
'values' => [
self::TYPE_PRODUCT,
self::TYPE_SET,
self::TYPE_SKU,
self::TYPE_OFFER,
self::TYPE_FREE_OFFER,
self::TYPE_EMPTY_SKU,
self::TYPE_SERVICE,
],
'default_value' => self::TYPE_PRODUCT,
'title' => Loc::getMessage('PRODUCT_ENTITY_TYPE_FIELD'),
]
),
'AVAILABLE' => new MainEntityBooleanField(
'AVAILABLE',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'title' => Loc::getMessage('PRODUCT_ENTITY_AVAILABLE_FIELD'),
]
),
'BUNDLE' => new MainEntityBooleanField(
'BUNDLE',
[
'values' => [
self::STATUS_NO,
self::STATUS_YES,
],
'title' => Loc::getMessage('PRODUCT_ENTITY_BUNDLE_FIELD'),
]
),
'IBLOCK_ELEMENT' => new MainEntityReferenceField(
'IBLOCK_ELEMENT',
'BitrixIblockElement',
[
'=this.ID' => 'ref.ID',
],
[
'join_type' => 'LEFT',
]
),
'TRIAL_IBLOCK_ELEMENT' => new MainEntityReferenceField(
'TRIAL_IBLOCK_ELEMENT',
'BitrixIblockElement',
[
'=this.TRIAL_PRICE_ID' => 'ref.ID',
],
[
'join_type' => 'LEFT',
]
),
'TRIAL_PRODUCT' => new MainEntityReferenceField(
'TRIAL_PRODUCT',
'BitrixCatalogProduct',
[
'=this.TRIAL_PRICE_ID' => 'ref.ID',
],
[
'join_type' => 'LEFT',
]
)
];
}