1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
propertyvalue.php
См. документацию.
1<?php
2
3namespace Bitrix\Sale\Controller;
4
5use Bitrix\Main\DB\SqlExpression;
6use Bitrix\Main\Engine\AutoWire\ExactParameter;
7use Bitrix\Main\Engine\Response\DataType\Page;
8use Bitrix\Main\Entity\ExpressionField;
9use Bitrix\Main\Error;
10use Bitrix\Sale;
11use Bitrix\Main\UI\PageNavigation;
12use Bitrix\Sale\Result;
13
15{
16
17 public function getPrimaryAutoWiredParameter()
18 {
19 return new ExactParameter(
20 Sale\PropertyValue::class,
21 'propertyValue',
22 function($className, $id)
23 {
25
27 $propertyValueClass = $registry->getPropertyValueClassName();
28
29 $r = $propertyValueClass::getList([
30 'select'=>['ORDER_ID'],
31 'filter'=>['ID'=>$id]
32 ]);
33
34 if ($row = $r->fetch())
35 {
37 $orderClass = $registry->getOrderClassName();
38
39 $propertyValue = $orderClass::load($row['ORDER_ID'])
40 ->getPropertyCollection()
41 ->getItemById($id);
43 {
44 return $propertyValue;
45 }
46 }
47 else
48 {
49 $this->addError(new Error('property value is not exists', 201040400001));
50 }
51
52 return null;
53 }
54 );
55 }
56
57 //region Actions
58 public function getFieldsAction()
59 {
60 $view = $this->getViewManager()
61 ->getView($this);
62
63 return ['PROPERTY_VALUE'=>$view->prepareFieldInfos(
64 $view->getFields()
65 )];
66 }
67
68 public function modifyAction(array $fields)
69 {
70 $builder = $this->getBuilder();
71 $builder->buildEntityProperties($fields);
72
73 if($builder->getErrorsContainer()->getErrorCollection()->count()>0)
74 {
75 $this->addErrors($builder->getErrorsContainer()->getErrors());
76 return null;
77 }
78
79 $order = $builder->getOrder();
80
81 $r = $order->save();
82 if(!$r->isSuccess())
83 {
84 $this->addErrors($r->getErrors());
85 return null;
86 }
87
88 return ['PROPERTY_VALUES'=>$this->toArray($order)['ORDER']['PROPERTY_VALUES']];
89 }
90
92 {
93 $r = $propertyValue->delete();
94 if($r->isSuccess())
95 {
97 ->getCollection()
98 ->getOrder()
99 ->save();
100 }
101
102 if(!$r->isSuccess())
103 $this->addErrors($r->getErrors());
104
105 return $r->isSuccess();
106 }
107
109 {
110 return ['PROPERTY_VALUE'=>$this->getItem($propertyValue)];
111 }
112
113 public function listAction(PageNavigation $pageNavigation, array $select = [], array $filter = [], array $order = []): Page
114 {
115 $select = empty($select) ? ['*'] : $select;
116 $order = empty($order) ? ['ID'=>'ASC'] : $order;
117 $runtime = [
118 new \Bitrix\Main\Entity\ReferenceField(
119 'ORDER_PROPS',
120 '\Bitrix\Sale\Internals\OrderPropsTable',
121 [
122 '=this.ORDER_PROPS_ID' => 'ref.ID',
123 '=ref.ENTITY_TYPE' => new SqlExpression('?s', Sale\Registry::ENTITY_ORDER),
124 ],
125 ['join_type' => 'INNER']
126 )
127 ];
128
129 $propertyValues = \Bitrix\Sale\PropertyValue::getList(
130 [
131 'select' => $select,
132 'filter' => $filter,
133 'order' => $order,
134 'offset' => $pageNavigation->getOffset(),
135 'limit' => $pageNavigation->getLimit(),
136 'runtime' => $runtime,
137 ]
138 )->fetchAll();
139
140 return new Page('PROPERTY_VALUES', $propertyValues, function() use ($select, $filter, $runtime)
141 {
143 'select' => ['CNT'],
144 'filter' => $filter,
145 'runtime' => [new ExpressionField('CNT', 'COUNT(ID)')]
146 ])->fetch()['CNT'];
147 });
148 }
149 //end region
150
152 {
153 return current(
154 array_filter(
156 ->getCollection()
157 ->toArray(),
158 function ($item) use ($propertyValue){
159 if($propertyValue->getPropertyId() == $item['ORDER_PROPS_ID'])
160 {
161 return $item;
162 }
163 }
164 )
165 );
166 }
167
168 static public function prepareFields($fields)
169 {
170 $data = null;
171
172 if(isset($fields['PROPERTY_VALUES']))
173 {
174 foreach($fields['PROPERTY_VALUES'] as $field)
175 {
176 $data[$field['ORDER_PROPS_ID']]=$field['VALUE'];
177 }
178 }
179 return is_array($data)?['PROPERTIES'=>$data]:[];
180 }
181
182 protected function checkModifyPermissionEntity()
183 {
184 $r = new Result();
185
186 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
187 if ($saleModulePermissions < "W")
188 {
189 $r->addError(new Error('Access Denied', 200040300020));
190 }
191 return $r;
192 }
193
194 protected function checkReadPermissionEntity()
195 {
196 $r = new Result();
197
198 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
199 if ($saleModulePermissions == "D")
200 {
201 $r->addError(new Error('Access Denied', 200040300010));
202 }
203 return $r;
204 }
205
206 protected function checkPermissionEntity($name, $arguments=[])
207 {
208 $name = mb_strtolower($name);
209
210 if($name == 'modify')
211 {
212 $r = $this->checkModifyPermissionEntity();
213 }
214 else
215 {
216 $r = parent::checkPermissionEntity($name);
217 }
218 return $r;
219 }
220}
static getList(array $parameters)
Определения entity.php:78
Определения error.php:15
toArray(\Bitrix\Sale\Order $order, array $fields=[])
Определения controllerbase.php:108
getBuilder(SettingsContainer $settings=null)
Определения controllerbase.php:52
getItem(Sale\PropertyValue $propertyValue, array $fields=[])
Определения propertyvalue.php:151
static prepareFields($fields)
Определения propertyvalue.php:168
modifyAction(array $fields)
Определения propertyvalue.php:68
deleteAction(Sale\PropertyValue $propertyValue)
Определения propertyvalue.php:91
getAction(Sale\PropertyValue $propertyValue)
Определения propertyvalue.php:108
listAction(PageNavigation $pageNavigation, array $select=[], array $filter=[], array $order=[])
Определения propertyvalue.php:113
checkPermissionEntity($name, $arguments=[])
Определения propertyvalue.php:206
static getInstance($type)
Определения registry.php:183
const ENTITY_ORDER
Определения registry.php:20
const REGISTRY_TYPE_ORDER
Определения registry.php:16
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr ><?endif?><? $propertyIndex=0;foreach( $arGlobalProperties as $propertyCode=> $propertyValue
Определения file_new.php:729
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$select
Определения iblock_catalog_list.php:194
$filter
Определения iblock_catalog_list.php:54
$name
Определения menu_edit.php:35
Определения aliases.php:54
$order
Определения payment.php:8
$saleModulePermissions
Определения tools.php:21
$fields
Определения yandex_run.php:501