Entity\DataManager для b_sale_order
Как таблицу заказов перевести на ORM В7 для замены неуклюжего CSaleOrder::GetList()
, плюс пользовательские поля? Ниже - вариант решения.
- request.php
namespace Vendor\Dealer\Orm\Request; use \Bitrix\Main\Entity; /* "Заявка с сайта". То, что обычно делается через `CSaleOrder::GetList`, но последний имеет ограничения, нельзя сделать LOGIC ... OR и выбрать по условию "или" */ class RequestTable extends Entity\DataManager { public static function getTableName() { return 'b_sale_order'; } public static function getMap() { return [ new Entity\IntegerField('ID', ['primary' => true]), // совпадает с ACCOUNT_NUMBER new Entity\StringField('LID', ['size' => 2]), new Entity\StringField('STATUS_ID', ['size' => 1]), new Entity\DatetimeField('DATE_STATUS'), new Entity\FloatField('PRICE'), new Entity\FloatField('TAX_VALUE'), new Entity\IntegerField('USER_ID'), new Entity\ReferenceField( 'USER', 'Bitrix\Main\UserTable', ['=this.USER_ID' => 'ref.ID'] ), new Entity\DatetimeField('DATE_INSERT'), new Entity\StringField('USER_DESCRIPTION', ['size' => 250]), new Entity\BooleanField('UPDATED_1C', ['values' => ['N', 'Y'], 'default_value' => 'N']), new Entity\BooleanField('RESERVED', ['values' => ['N', 'Y'], 'default_value' => 'N']), /* Дополнительные "внешние" свойства заказа Указывать в виде ID оказалось быстрее, чем по коду `CODE` */ // NUMBER_1C new Entity\ReferenceField( 'PROP_NUMBER_1C', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 29), ] ), new Entity\ExpressionField('NUMBER_1C', '%s', 'PROP_NUMBER_1C.VALUE'), // PARTNER new Entity\ReferenceField( 'PROP_PARTNER', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 7), ] ), new Entity\ExpressionField('PARTNER', '%s', 'PROP_PARTNER.VALUE'), // NUMBER - номер заказа по вашей нумерации new Entity\ReferenceField( 'PROP_CUST_NUMBER', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 9), ] ), new Entity\ExpressionField('CUST_NUMBER', '%s', 'PROP_CUST_NUMBER.VALUE'), // DATE - дата заказа по вашей нумерации new Entity\ReferenceField( 'PROP_CUST_DATE', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 10), ] ), new Entity\ExpressionField('CUST_DATE', '%s', 'PROP_CUST_DATE.VALUE'), // TECH_REQUEST new Entity\ReferenceField( 'PROP_TECH_REQUEST', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 20), ] ), new Entity\ExpressionField('TECH_REQUEST', '%s', 'PROP_TECH_REQUEST.VALUE'), // ORDER_GUID new Entity\ReferenceField( 'PROP_ORDER_GUID', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 21), ] ), new Entity\ExpressionField('ORDER_GUID', '%s', 'PROP_ORDER_GUID.VALUE'), // EXPRESS_ORDER new Entity\ReferenceField( 'PROP_EXPRESS_ORDER', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 24), ] ), new Entity\ExpressionField('EXPRESS_ORDER', '%s', 'PROP_EXPRESS_ORDER.VALUE'), // NS_REQUEST new Entity\ReferenceField( 'PROP_NS_REQUEST', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 32), ] ), new Entity\ExpressionField('NS_REQUEST', '%s', 'PROP_NS_REQUEST.VALUE'), // NS_REQUEST - Заявка для удовлетворения НС new Entity\ReferenceField( 'PROP_NS_REQUEST', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 32), ] ), new Entity\ExpressionField('NS_REQUEST', '%s', 'PROP_NS_REQUEST.VALUE'), // URLISO_PLATELCHIK_NAME new Entity\ReferenceField( 'PROP_URLISO_PLATELCHIK_NAME', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 14), ] ), new Entity\ExpressionField('URLISO_PLATELCHIK', '%s', 'PROP_URLISO_PLATELCHIK_NAME.VALUE'), // URLISO_GRUZOPOL_NAME new Entity\ReferenceField( 'PROP_URLISO_GRUZOPOL_NAME', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 16), ] ), new Entity\ExpressionField('URLISO_GRUZOPOL', '%s', 'PROP_URLISO_GRUZOPOL_NAME.VALUE'), // INVOICE new Entity\ReferenceField( 'PROP_INVOICE', 'Vendor\Dealer\Orm\Request\RequestPropsTable', [ '=this.ID' => 'ref.ORDER_ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 27), ] ), new Entity\ExpressionField('INVOICE', '%s', 'PROP_INVOICE.VALUE'), ]; } }
- requestprops.php
// Свойства заказа namespace Vendor\Dealer\Orm\Request; use \Bitrix\Main\Entity; class RequestPropsTable extends Entity\DataManager { public static function getTableName() { return 'b_sale_order_props_value'; } public static function getMap() { return [ new Entity\IntegerField('ID', ['primary' => true]), new Entity\IntegerField('ORDER_ID'), new Entity\IntegerField('ORDER_PROPS_ID'), new Entity\StringField('NAME'), new Entity\StringField('VALUE'), new Entity\StringField('CODE'), ]; } }