/** * @param string $parentName - parent identifier * @param string $translationSource * @param array $data - GROUP => () * @return bool - true on success or false on failure * @throws SystemException */ static function install($parentName, $translationSource, array $data) { $error = false; // load person types $persons = array(); $result = PersonTypeTable::getList(array('select' => array('ID'))); while ($row = $result->fetch()) { $persons[$row['ID']] = true; } // load person domains $personsDomains = array(); $result = BusinessValuePersonDomainTable::getList(array('select' => array('PERSON_TYPE_ID', 'DOMAIN'))); while ($row = $result->fetch()) { $personsDomains[$row['PERSON_TYPE_ID']] = $row['DOMAIN']; } // install person domains if (is_array($data['PERSON_DOMAIN'])) { foreach ($data['PERSON_DOMAIN'] as $personId => $domain) { if (!$persons[$personId]) { throw new SystemException("invalid person type `{$personId}`", 0, __FILE__, __LINE__); } switch ($domain) { case self::COMMON_DOMAIN: case self::INDIVIDUAL_DOMAIN: case self::ENTITY_DOMAIN: break; default: throw new SystemException("invalid domain: {$domain}", 0, __FILE__, __LINE__); } if (!$personsDomains[$personId]) { if (BusinessValuePersonDomainTable::add(array('PERSON_TYPE_ID' => $personId, 'DOMAIN' => $domain))->isSuccess()) { $personsDomains[$personId] = $domain; } else { $error = true; } } } } $personsDomainsWithCommon = array(self::COMMON_PERSON_ID => self::COMMON_DOMAIN) + $personsDomains; // load groups $groups = array(); $result = BusinessValueGroupTable::getList(array('select' => array('NAME', 'ID'))); while ($row = $result->fetch()) { $groups[$row['NAME']] = $row['ID']; } // install new groups if (is_array($data['GROUPS'])) { foreach ($data['GROUPS'] as $groupName => $group) { if (!$groups[$groupName]) { if (!is_string($groupName)) { throw new SystemException("invalid group name", 0, __FILE__, __LINE__); } if (!is_array($group)) { throw new SystemException("invalid group", 0, __FILE__, __LINE__); } $result = BusinessValueGroupTable::add(array('NAME' => $groupName, 'SORT' => $group['SORT'])); if ($result->isSuccess()) { $groups[$groupName] = $result->getId(); } else { $error = true; } } } } // install codes if (is_array($data['CODES'])) { // get parent id, install parent if not exists if ($row = BusinessValueParentTable::getList(array('select' => array('ID'), 'filter' => array('=NAME' => $parentName)))->fetch()) { $parentId = $row['ID']; } else { $result = BusinessValueParentTable::add(array('NAME' => $parentName, 'LANG_SRC' => $translationSource)); if ($result->isSuccess()) { $parentId = $result->getId(); } else { return false; } } // load codes $codes = array(); $result = BusinessValueCodeTable::getList(array('select' => array('ID', 'NAME'))); while ($row = $result->fetch()) { $codes[$row['NAME']] = $row['ID']; } // load value maps $valueMaps = array(); $result = BusinessValueTable::getList(array('select' => array('CODE_ID', 'PERSON_TYPE_ID'))); while ($row = $result->fetch()) { $valueMaps[$row['CODE_ID']][$row['PERSON_TYPE_ID']] = true; } // load parent codes $parentCodes = array(); $result = BusinessValueCodeParentTable::getList(array('select' => array('CODE_ID'), 'filter' => array('=PARENT_ID' => $parentId))); while ($row = $result->fetch()) { $parentCodes[$row['CODE_ID']] = true; } // install: groups, codes, parent codes foreach ($data['CODES'] as $codeName => $code) { if (!is_string($codeName)) { throw new SystemException("invalid code name", 0, __FILE__, __LINE__); } if (!is_array($code)) { throw new SystemException("invalid code", 0, __FILE__, __LINE__); } // get group id, install group if not exists $groupId = null; if (($groupName = $code['GROUP']) && !($groupId = $groups[$groupName])) { $result = BusinessValueGroupTable::add(array('NAME' => $groupName)); if ($result->isSuccess()) { $groups[$groupName] = $groupId = $result->getId(); } else { $error = true; } } // get code domain switch ($domain = $code['DOMAIN']) { case self::COMMON_DOMAIN: case self::INDIVIDUAL_DOMAIN: case self::ENTITY_DOMAIN: break; default: throw new SystemException("invalid domain: {$domain}", 0, __FILE__, __LINE__); } // get code id, install code if not exists if (!($codeId = $codes[$codeName])) { $result = BusinessValueCodeTable::add(array('NAME' => $codeName, 'DOMAIN' => $domain, 'GROUP_ID' => $groupId, 'SORT' => $code['SORT'])); if ($result->isSuccess()) { $codeId = $result->getId(); $codes[$codeName] = $codeId; } else { $error = true; continue; } } // install value maps if not exist if (is_array($code['MAP'])) { foreach ($code['MAP'] as $personId => $map) { if (!is_array($map) || count($map) != 2) { throw new SystemException("invalid map: " . print_r($map, true), 0, __FILE__, __LINE__); } if ($domain === self::COMMON_DOMAIN) { if (!$personsDomainsWithCommon[$personId]) { throw new SystemException("invalid person type id `{$personId}`", 0, __FILE__, __LINE__); } } else { if ($domain !== $personsDomains[$personId]) { throw new SystemException("invalid person type id `{$personId}`", 0, __FILE__, __LINE__); } } if (!isset($valueMaps[$codeId][$personId])) { if (BusinessValueTable::add(array('PERSON_TYPE_ID' => $personId, 'CODE_ID' => $codeId, 'ENTITY' => $map[0], 'ITEM' => $map[1]))->isSuccess()) { $valueMaps[$codeId][$personId] = true; } else { $error = true; } } } } // install code parent if not exists if (!$parentCodes[$codeId]) { if (BusinessValueCodeParentTable::add(array('CODE_ID' => $codeId, 'PARENT_ID' => $parentId))->isSuccess()) { $parentCodes[$codeId] = true; } else { $error = true; } } } } return !$error; }
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php'; $readOnly = $APPLICATION->GetGroupRight('sale') < 'W'; if ($readOnly) { $APPLICATION->AuthForm(GetMessage('ACCESS_DENIED')); } require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/sale/prolog.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/sale/include.php'; use Bitrix\Sale\BusinessValue, Bitrix\Sale\Internals\Input, Bitrix\Sale\Internals\OrderPropsTable, Bitrix\Sale\Internals\BusinessValueTable, Bitrix\Sale\Internals\BusinessValueCodeTable, Bitrix\Sale\Internals\BusinessValueGroupTable, Bitrix\Sale\Internals\BusinessValueParentTable, Bitrix\Sale\Internals\BusinessValuePersonDomainTable, Bitrix\Sale\Internals\PersonTypeTable, Bitrix\Sale\Internals\CompanyTable, Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); $errors = array(); $domains = array(BusinessValue::COMMON_DOMAIN => Loc::getMessage('BIZVAL_DOMAIN_COMMON'), BusinessValue::INDIVIDUAL_DOMAIN => Loc::getMessage('BIZVAL_DOMAIN_INDIVIDUAL'), BusinessValue::ENTITY_DOMAIN => Loc::getMessage('BIZVAL_DOMAIN_ENTITY')); // load person types $persons = array(); $result = PersonTypeTable::getList(array('select' => array('ID', 'NAME', 'LID'), 'order' => array('LID', 'SORT', 'NAME'))); while ($row = $result->fetch()) { $persons[$row['ID']] = htmlspecialcharsbx($row['NAME'] . ' (' . $row['LID'] . ')'); } $personsWithCommon = array(BusinessValue::COMMON_PERSON_ID => Loc::getMessage('BIZVAL_DOMAIN_COMMON')) + $persons; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 1. PERSON DOMAINS /////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // load person domains $personsDomains = array(); $result = BusinessValuePersonDomainTable::getList(array('select' => array('PERSON_TYPE_ID', 'DOMAIN'))); while ($row = $result->fetch()) { $personsDomains[$row['PERSON_TYPE_ID']] = $row['DOMAIN']; } // person domain input $personDomainInput = array('TYPE' => 'ENUM', 'OPTIONS' => array('' => Loc::getMessage('BIZVAL_DOMAIN_NONE'), BusinessValue::INDIVIDUAL_DOMAIN => Loc::getMessage('BIZVAL_DOMAIN_INDIVIDUAL'), BusinessValue::ENTITY_DOMAIN => Loc::getMessage('BIZVAL_DOMAIN_ENTITY')));
/** * @param array $filter * @return array * @throws \Bitrix\Main\ArgumentException */ protected static function loadFromDb(array $filter) { $res = PersonTypeTable::getList($filter)->fetchAll(); return $res; }
?> ><?php echo Loc::getMessage("SALE_NO"); ?> </option> </select> </td> </tr> <tr> <td><?php echo Loc::getMessage("SALE_F_PAY_SYSTEM"); ?> :</td> <td> <?php $ptRes = Sale\Internals\PersonTypeTable::getList(array('order' => array("SORT" => "ASC", "NAME" => "ASC"))); $personTypes = array(); while ($personType = $ptRes->fetch()) { $personTypes[$personType['ID']] = $personType; } ?> <select name="filter_pay_system[]" multiple size="3"> <option value=""><?php echo GetMessage("SALE_F_ALL"); ?> </option> <?php $res = \Bitrix\Sale\PaySystem\Manager::getList(array('select' => array('ID', 'NAME'), 'filter' => array('ACTIVE' => 'Y'), 'order' => array("SORT" => "ASC", "NAME" => "ASC"))); $paySystemList = array(); while ($paySystem = $res->fetch()) { $paySystemList[$paySystem['ID']]['NAME'] = $paySystem['NAME'];