static function getMap(): array
{
$fieldRepository = ServiceLocator::getInstance()->get('crm.model.fieldRepository');
return [
(new IntegerField('ID'))
->configurePrimary()
->configureAutocomplete(),
(new IntegerField('OWNER_ID'))
->configureRequired(),
(new StringField('OWNER_TYPE'))
->configureRequired()
->configureSize(3),
(new Reference(
'OWNER',
DealTable::class,
Join::on('this.OWNER_ID', 'ref.ID')
)),
(new Reference(
'DEAL_OWNER',
DealTable::class,
Join::on('this.OWNER_ID', 'ref.ID')
->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Deal)
)),
(new Reference(
'LEAD_OWNER',
LeadTable::class,
Join::on('this.OWNER_ID', 'ref.ID')
->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Lead)
)),
(new Reference(
'QUOTE_OWNER',
QuoteTable::class,
Join::on('this.OWNER_ID', 'ref.ID')
->where('this.OWNER_TYPE', \CCrmOwnerTypeAbbr::Quote)
)),
(new IntegerField('PRODUCT_ID'))
->configureRequired()
->configureDefaultValue(0),
(new StringField('PRODUCT_NAME'))
->configureSize(256)
->configureDefaultValue(''),
(new Reference(
'IBLOCK_ELEMENT',
IBlockElementProxyTable::class,
Join::on('this.PRODUCT_ID', 'ref.ID')
)),
(new Reference(
'IBLOCK_ELEMENT_GRC',
IBlockElementGrcProxyTable::class,
Join::on('this.PRODUCT_ID', 'ref.ID')
)),
(new ExpressionField(
'CP_PRODUCT_NAME',
'CASE WHEN %s IS NOT NULL AND %s != \'\' THEN %s ELSE %s END',
['PRODUCT_NAME', 'PRODUCT_NAME', 'PRODUCT_NAME', 'IBLOCK_ELEMENT.NAME']
))
->configureValueType(StringField::class),
(new FloatField('PRICE'))
->configureRequired()
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('PRICE_ACCOUNT'))
->configureRequired()
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('PRICE_EXCLUSIVE'))
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('PRICE_NETTO'))
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('PRICE_BRUTTO'))
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('QUANTITY'))
->configureRequired()
->configureScale(4)
->configureDefaultValue(1),
(new ExpressionField(
'SUM_ACCOUNT',
'%s * %s',
['PRICE_ACCOUNT', 'QUANTITY']
))
->configureValueType(FloatField::class),
(new IntegerField('DISCOUNT_TYPE_ID'))
->configureDefaultValue(Discount::UNDEFINED),
(new FloatField('DISCOUNT_RATE'))
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('DISCOUNT_SUM'))
->configureScale(2)
->configureDefaultValue(0.00),
(new FloatField('TAX_RATE'))
->configureScale(2)
->configureNullable(),
(new BooleanField('TAX_INCLUDED'))
->configureStorageValues('N', 'Y')
->configureDefaultValue(false),
(new BooleanField('CUSTOMIZED'))
->configureStorageValues('N', 'Y')
->configureDefaultValue(true),
(new IntegerField('MEASURE_CODE'))
->configureDefaultValue(0),
(new StringField('MEASURE_NAME'))
->configureSize(50)
->configureDefaultValue(''),
(new IntegerField('SORT'))
->configureDefaultValue(0),
(new StringField('XML_ID'))
->configureDefaultValue(''),
(new IntegerField('TYPE'))
->configureDefaultValue(ProductType::TYPE_PRODUCT)
->configureRequired()
->addValidator([static::class, 'validateSupportedProductType']),
$fieldRepository->getProductRowReservation(),
];
}