14 Bitrix\Main\Entity\Result,
18Loc::loadMessages(__FILE__);
23 public static function GetByID($statusId, $languageId = LANGUAGE_ID,
$type =
null)
36 'LID' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.LID',
37 'NAME' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME',
38 'DESCRIPTION' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.DESCRIPTION'
42 '=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => $languageId,
47 if (
$type !==
null && in_array(
$type, $allowTypes))
52 return StatusTable::getList(
$filter)->fetch();
55 public static function GetLangByID($statusId, $languageId = LANGUAGE_ID)
57 return StatusLangTable::getList(
array(
58 'select' =>
array(
'*'),
59 'filter' =>
array(
'=STATUS_ID' => $statusId,
'=LID' => $languageId),
74 if (!is_array($arOrder) && !is_array(
$arFilter))
76 $arOrder = strval($arOrder);
87 $arGroupBy = strval($arGroupBy);
93 $arSelectFields =
array(
"ID",
"SORT",
"LID",
"NAME",
"DESCRIPTION");
96 if (! in_array(
'TYPE', $arSelectFields))
101 'LID' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.LID',
102 'NAME' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME',
103 'DESCRIPTION' =>
'Bitrix\Sale\Internals\StatusLangTable:STATUS.DESCRIPTION',
104 'GROUP_ID' =>
'Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.GROUP_ID',
107 $taskIdName =
'Bitrix\Sale\Internals\StatusGroupTaskTable:STATUS.TASK_ID';
114 return $query->exec()->getSelectedRowsCount();
131 $taskIdName =
'TASK_ID';
138 return $query->exec()->getSelectedRowsCount();
147 private static $statusFields, $langFields, $taskFields;
160 if((
is_set(
$arFields,
"ID") && !preg_match(
"#[A-Za-z]#i",
$arFields[
"ID"])) || ($statusId <>
'' && !preg_match(
"#[A-Za-z]#i", $statusId)))
168 if (! self::$statusFields)
170 self::$statusFields = StatusTable::getEntity()->getScalarFields();
171 self::$langFields = StatusLangTable::getEntity()->getScalarFields();
172 self::$taskFields = StatusGroupTaskTable::getEntity()->getScalarFields();
180 StatusTable::checkFields(
$result,
null, array_intersect_key(
$arFields, self::$statusFields));
186 StatusTable::checkFields(
$result, $statusId, array_intersect_key(array_diff_key(
$arFields,
array(
'ID'=>1)), self::$statusFields));
196 'select' =>
array(
'LID'),
197 'filter' =>
array(
'=ACTIVE' =>
'Y')
202 if (
$data[
'NAME'] && in_array(
$data[
'LID'], $availableLanguages))
203 StatusLangTable::checkFields(
$result,
null,
array(
'STATUS_ID' => $statusId) + array_intersect_key(
$data, self::$langFields));
212 private static function addLanguagesBy($statusId,
array $rows)
214 foreach (
$rows as $row)
215 StatusLangTable::add(
array(
'STATUS_ID' => $statusId) + array_intersect_key($row, self::$langFields));
218 private static function addTasksBy($statusId,
array $rows)
220 foreach (
$rows as $row)
221 StatusGroupTaskTable::add(
array(
222 'STATUS_ID' => $statusId,
225 ) + array_intersect_key($row, self::$taskFields));
230 if (! self::CheckFields(
'ADD',
$arFields))
235 foreach (
GetModuleEvents(
"sale",
"OnBeforeStatusAdd",
true) as $arEvent)
242 self::addLanguagesBy($statusId,
$arFields[
'LANG']);
245 self::addTasksBy($statusId,
$arFields[
'PERMS']);
258 if (! self::CheckFields(
'UPDATE',
$arFields, $statusId))
261 foreach (
GetModuleEvents(
"sale",
"OnBeforeStatusUpdate",
true) as $arEvent)
270 self::addLanguagesBy($statusId,
$arFields[
'LANG']);
276 self::addTasksBy($statusId,
$arFields[
'PERMS']);
294 $statusId =
$DB->ForSql($statusId, 2);
296 if (OrderTable::getList(
array(
297 'filter' =>
array(
'=STATUS_ID' => $statusId),
305 if (OrderArchiveTable::getList(
array(
306 'filter' =>
array(
'=STATUS_ID' => $statusId),
314 foreach (
GetModuleEvents(
"sale",
"OnBeforeStatusDelete",
true) as $arEvent)
323 return StatusTable::delete($statusId)->isSuccess();
336 if ( $statusData = self::GetByID(
$ID, LANGUAGE_ID))
338 $eventType->Delete(
"SALE_STATUS_CHANGED_".
$ID);
341 $dbSiteList = CSite::GetList();
347 $dbEventType = $eventType->GetList(
349 "EVENT_NAME" =>
"SALE_STATUS_CHANGED_".
$ID,
353 if (!($arEventType = $dbEventType->Fetch()))
356 $str .=
"#ORDER_ID# - ".Loc::getMessage(
"SKGS_ORDER_ID",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
357 $str .=
"#ORDER_DATE# - ".Loc::getMessage(
"SKGS_ORDER_DATE",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
358 $str .=
"#ORDER_STATUS# - ".Loc::getMessage(
"SKGS_ORDER_STATUS",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
360 $eventTypeName =
Loc::getMessage(
"SKGS_CHANGING_STATUS_TO",
null,
$arSiteList[
"LANGUAGE_ID"]).
" \"".$arStatusLang[
"NAME"].
"\"";
364 $eventTypeName =
Loc::getMessage(
"SKGS_CHANGING_SHIPMENT_STATUS_TO",
null,
$arSiteList[
"LANGUAGE_ID"]).
" \"".$arStatusLang[
"NAME"].
"\"";
366 $str .=
"#SHIPMENT_ID# - ".\Bitrix\Main\Localization\Loc::getMessage(
"SKGS_SHIPMENT_ID",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
367 $str .=
"#SHIPMENT_DATE# - ".\Bitrix\Main\Localization\Loc::getMessage(
"SKGS_SHIPMENT_DATE",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
368 $str .=
"#SHIPMENT_STATUS# - ".\Bitrix\Main\Localization\Loc::getMessage(
"SKGS_SHIPMENT_STATUS",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
371 $str .=
"#EMAIL# - ".Loc::getMessage(
"SKGS_ORDER_EMAIL",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
372 $str .=
"#ORDER_DESCRIPTION# - ".Loc::getMessage(
"SKGS_STATUS_DESCR",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
373 $str .=
"#TEXT# - ".Loc::getMessage(
"SKGS_STATUS_TEXT",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
374 $str .=
"#SALE_EMAIL# - ".Loc::getMessage(
"SKGS_SALE_EMAIL",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
375 $str .=
"#ORDER_PUBLIC_URL# - ".Loc::getMessage(
"SKGS_ORDER_PUBLIC_LINK",
null,
$arSiteList[
"LANGUAGE_ID"]).
"\n";
377 $eventTypeID = $eventType->Add(
380 "EVENT_NAME" =>
"SALE_STATUS_CHANGED_".
$ID,
381 "NAME" => $eventTypeName,
382 "DESCRIPTION" =>
$str
387 $dbEventMessage = $eventMessage->GetList(
391 "EVENT_NAME" =>
"SALE_STATUS_CHANGED_".
$ID,
395 if (!($arEventMessage = $dbEventMessage->Fetch()))
402 $message .=
"------------------------------------------\n\n";
412 $message .=
"------------------------------------------\n\n";
416 $message .=
"#ORDER_DESCRIPTION#\n";
424 "EVENT_NAME" =>
"SALE_STATUS_CHANGED_".
$ID,
426 "EMAIL_FROM" =>
"#SALE_EMAIL#",
427 "EMAIL_TO" =>
"#EMAIL#",
428 "SUBJECT" => $subject,
430 "BODY_TYPE" =>
"text"
432 $eventMessageID = $eventMessage->Add(
$arFields);
447 static $lazy =
array(
448 'PERM_VIEW' =>
'sale_status_view',
449 'PERM_CANCEL' =>
'sale_status_cancel',
450 'PERM_MARK' =>
'sale_status_mark',
451 'PERM_DELIVERY' =>
'sale_status_delivery',
452 'PERM_DEDUCTION' =>
'sale_status_deduction',
453 'PERM_PAYMENT' =>
'sale_status_payment',
454 'PERM_STATUS' =>
'sale_status_to',
455 'PERM_UPDATE' =>
'sale_status_update',
456 'PERM_DELETE' =>
'sale_status_delete',
457 'PERM_STATUS_FROM' =>
'sale_status_from',
462 private static function field(
$name,
array $field)
464 $field[
'NAME'] =
$name;
465 $field[
'MODULE_ID'] =
'sale';
466 $field[
'BINDING'] =
'status';
475 $permissions =
array();
476 foreach (self::perms2opers() as
$perm => $oper)
478 $result = OperationTable::add(self::field($oper,
array()));
482 $errors .=
'cannot add operation: '.$oper.
"\n".implode(
"\n",
$result->getErrorMessages()).
"\n\n";
498 $tasks[
self::addTask(self::field(
'sale_status_all',
array(
'SYS' =>
'Y',
'LETTER' =>
'X')), $permissions)] = array_values($permissions);
507 while ($row =
$result->fetch())
513 'STATUS_ID' => $row[
'STATUS_ID'],
514 'GROUP_ID' => $row[
'GROUP_ID'],
515 'TASK_ID' => $taskId,
517 if (!
$res->isSuccess())
518 $errors .=
'cannot add status: '.$row[
'STATUS_ID'].
', group: '.$row[
'GROUP_ID'].
', task: '.$taskId.
"\n".implode(
"\n",
$res->getErrorMessages()).
"\n\n";
532 $permissions = array_values(array_intersect_key($permissions, array_intersect(
$data,
array(
'Y'))));
533 if (! $taskId = array_search($permissions, $tasks))
535 $taskId =
self::addTask(self::field(
'sale_status_custom'.(
count($tasks) + 1),
array(
'SYS' =>
'N')), $permissions);
536 $tasks[$taskId] = $permissions;
544 $result = TaskTable::add($field);
546 throw new SystemException(
'cannot add task: '.$field[
'NAME'].
"\n".implode(
"\n",
$result->getErrorMessages()).
"\n\n", 0, __FILE__, __LINE__);
551 foreach ($permissions as $operId)
554 'TASK_ID' => $taskId,
555 'OPERATION_ID' => $operId,
558 $errors .=
'cannot add task: '.$taskId.
', operation: '.$operId.
"\n".implode(
"\n",
$result->getErrorMessages()).
"\n\n";
570 static $lazy =
array();
574 'select' =>
array(
'ID',
'NAME'),
575 'filter' =>
array(
'=MODULE_ID' =>
'sale',
'=BINDING' =>
'status'),
578 $operations =
array();
579 while ($row =
$result->fetch())
580 $operations[$row[
'NAME']] = $row[
'ID'];
582 foreach (self::perms2opers() as
$perm => $oper)
583 $lazy[
$perm] = $operations[$oper];
594 'FIELD' =>
'SSGT.GROUP_ID',
595 'FROM' =>
'INNER JOIN b_sale_status_group_task SSGT ON (SSGT.STATUS_ID = '.$statusIdName.
')',
597 foreach (self::permissions() as
$name => $id)
600 'FIELD' => self::permExpression(
'SSGT.TASK_ID', $id),
601 'FROM' =>
'INNER JOIN b_sale_status_group_task SSGT ON (SSGT.STATUS_ID = '.$statusIdName.
')'
607 return 'CASE WHEN EXISTS('.
608 'SELECT 1 FROM b_task_operation SSTO WHERE SSTO.TASK_ID = '.$taskIdName.
' AND SSTO.OPERATION_ID = '.$operationId.
609 ') THEN "Y" ELSE "N" END';
614 foreach (self::permissions() as
$name => $id)
616 'expression' =>
array(self::permExpression(
'%s', $id), $taskIdName),
624 $select =
$query->allSelected()
626 : array_intersect_key(self::permissions(),
$query->getSelect());
630 $query->setSelect(array_diff_key(
$query->getSelect(), $select));
631 $query->addAlias(
'TASK_ID', $taskIdName);
632 $query->addAliasSelect(
'TASK_ID');
633 $result->addFetchAdapter(
new self($select));
645 'OPERATION' =>
'Bitrix\Main\TaskOperationTable:TASK.OPERATION_ID',
648 '=MODULE_ID' =>
'sale',
649 '=BINDING' =>
'status',
652 'Bitrix\Main\TaskOperationTable:TASK.OPERATION_ID' =>
'ASC',
658 while ($row =
$result->fetch())
660 if (!isset($tasks[$row[
'TASK']]))
662 $tasks[$row[
'TASK']] = [];
664 if ($row[
'OPERATION'])
666 $tasks[$row[
'TASK']][] = $row[
'OPERATION'];
685 $tasks = $this->tasks;
686 $taskId = $row[
'TASK_ID'];
688 $operations = $tasks[$taskId] ?? [];
689 if (!is_array($operations))
696 $row[
$perm] = $taskId
697 ? (in_array($operId, $operations) ?
'Y' :
'N')
701 unset($row[
'TASK_ID']);
static getConnection($name="")
static get($moduleId, $name, $default="", $siteId=false)
static loadLanguageFile($file, $language=null, $normalize=true)
static getMessage($code, $replace=null, $language=null)
static getList(array $parameters=array())
static deleteByStatus($statusId)
static deleteByStatus($statusId)
static update($primary, array $data)
static addTask(array $field, array $permissions)
static getTaskId(array $data, array $permissions, array &$tasks)
static addFieldsTo(array &$fields, $statusIdName, $prefix)
static addAliasesTo(Compatible\AliasedQuery $query, $taskIdName)
static getTasksOperations()
static permExpression($taskIdName, $operationId)
static adaptResult(Compatible\CDBResult $result, Compatible\OrderQuery $query, $taskIdName)
static Update($statusId, $arFields)
static GetLangByID($statusId, $languageId=LANGUAGE_ID)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetPermissionsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetByID($statusId, $languageId=LANGUAGE_ID, $type=null)
static CheckFields($ACTION, &$arFields, $statusId='')
static CreateMailTemplate($ID)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
$GLOBALS['____1690880296']
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"