/** * <p> * CREATE SALE AND CATALOG MODULES ENTITIES FOR INVOICES IN CRM VERSION 12.5.7 * <br>UPDATE ORDER OPTION IN CRM VERSION 12.5.14 * <br>CREATE 1C EXCHANGE OPTIONS DEFAULTS AND DEFAULT INVOICE EXPORT PROFILES IN CRM VERSION 12.5.17 * <br>... * </p> */ public static function installExternalEntities() { global $DB, $DBType; $errMsg = array(); // at first, check last update version if (COption::GetOptionString('crm', '~CRM_INVOICE_UF_QUOTE_ID_14_1_13', 'N') === 'Y') { return true; } if (COption::GetOptionString('crm', '~CRM_EXCH1C_BASKET_XML_IDS_14_1_9', 'N') === 'Y') { $bFieldExists = false; $obUserField = new CUserTypeEntity(); $dbRes = $obUserField->GetList(array('SORT' => 'DESC'), array('ENTITY_ID' => 'ORDER')); $maxUFSort = 0; $i = 0; while ($arUF = $dbRes->Fetch()) { if ($i++ === 0) { $maxUFSort = intval($arUF['SORT']); } if ($arUF['FIELD_NAME'] === 'UF_QUOTE_ID') { $bFieldExists = true; break; } } unset($dbRes, $arUF, $i); if (!$bFieldExists) { $arOrderUserField = array('ENTITY_ID' => 'ORDER', 'FIELD_NAME' => 'UF_QUOTE_ID', 'USER_TYPE_ID' => 'integer', 'XML_ID' => 'uf_quote_id', 'SORT' => strval($maxUFSort + 10), 'MULTIPLE' => null, 'MANDATORY' => null, 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'N', 'EDIT_IN_LIST' => 'N', 'IS_SEARCHABLE' => null, 'SETTINGS' => array('DEFAULT_VALUE' => null, 'SIZE' => '', 'ROWS' => '1', 'MIN_LENGTH' => '0', 'MAX_LENGTH' => '0', 'REGEXP' => ''), 'EDIT_FORM_LABEL' => array('ru' => '', 'en' => ''), 'LIST_COLUMN_LABEL' => array('ru' => '', 'en' => ''), 'LIST_FILTER_LABEL' => array('ru' => '', 'en' => ''), 'ERROR_MESSAGE' => array('ru' => '', 'en' => ''), 'HELP_MESSAGE' => array('ru' => '', 'en' => '')); $userFieldId = $obUserField->Add($arOrderUserField); if ($userFieldId <= 0) { $errMsg[] = str_replace("#FIELD_NAME#", $arOrderUserField['FIELD_NAME'], GetMessage('CRM_CANT_ADD_USER_FIELD')); } unset($userFieldId); } if (empty($errMsg)) { COption::SetOptionString('crm', '~CRM_INVOICE_UF_QUOTE_ID_14_1_13', 'Y'); return true; } else { $errString = implode('<br>', $errMsg); ShowError($errString); return false; } } if (COption::GetOptionString('crm', '~CRM_EXCH1C_REWRITEDEFCATGRP_12_5_20', 'N') === 'Y') { // update basket xml_id fields if ($DB->TableExists('b_sale_order') && $DB->TableExists('b_sale_basket') && $DB->TableExists('b_iblock') && $DB->TableExists('b_iblock_element')) { if ($DB->Query("SELECT RESPONSIBLE_ID FROM b_sale_order WHERE 1=0", true) && $DB->Query("SELECT CATALOG_XML_ID, PRODUCT_XML_ID FROM b_sale_basket WHERE 1=0", true) && $DB->Query("SELECT XML_ID FROM b_iblock WHERE 1=0", true) && $DB->Query("SELECT XML_ID FROM b_iblock_element WHERE 1=0", true)) { $catalogId = 0; $tmpCatalogId = intval(COption::GetOptionString('crm', 'default_product_catalog_id', '0')); if ($dbRes = $DB->Query("SELECT ID FROM b_iblock I WHERE I.ID = {$tmpCatalogId}", true)) { if ($arRes = $dbRes->Fetch()) { if ($tmpCatalogId === intval($arRes['ID'])) { $catalogId = $tmpCatalogId; } } unset($arRes); } unset($tmpCatalogId, $dbRes); if ($catalogId > 0) { $databaseType = strtoupper($DBType); $strSql = ''; switch ($databaseType) { case 'MYSQL': $strSql = "UPDATE b_sale_basket B" . PHP_EOL . " INNER JOIN b_sale_order O ON B.ORDER_ID = O.ID" . PHP_EOL . " INNER JOIN b_iblock_element IE ON B.PRODUCT_ID = IE.ID" . PHP_EOL . " INNER JOIN b_iblock I ON IE.IBLOCK_ID = I.ID" . PHP_EOL . "SET" . PHP_EOL . " B.CATALOG_XML_ID = I.XML_ID," . PHP_EOL . " B.PRODUCT_XML_ID = IE.XML_ID" . PHP_EOL . "WHERE" . PHP_EOL . " IE.IBLOCK_ID = {$catalogId}" . PHP_EOL . " AND (" . PHP_EOL . " B.PRODUCT_XML_ID IS NULL OR B.PRODUCT_XML_ID = ''" . PHP_EOL . " OR B.CATALOG_XML_ID IS NULL OR B.CATALOG_XML_ID = ''" . PHP_EOL . " )" . PHP_EOL . " AND O.RESPONSIBLE_ID IS NOT NULL"; break; case 'MSSQL': $strSql = "UPDATE B" . PHP_EOL . "SET" . PHP_EOL . " B.CATALOG_XML_ID = I.XML_ID," . PHP_EOL . " B.PRODUCT_XML_ID = IE.XML_ID" . PHP_EOL . "FROM B_SALE_BASKET B" . PHP_EOL . " INNER JOIN B_SALE_ORDER O ON B.ORDER_ID = O.ID" . PHP_EOL . " INNER JOIN B_IBLOCK_ELEMENT IE ON B.PRODUCT_ID = IE.ID" . PHP_EOL . " INNER JOIN B_IBLOCK I ON IE.IBLOCK_ID = I.ID" . PHP_EOL . "WHERE" . PHP_EOL . " IE.IBLOCK_ID = {$catalogId}" . PHP_EOL . " AND (" . PHP_EOL . " B.PRODUCT_XML_ID IS NULL OR B.PRODUCT_XML_ID = ''" . PHP_EOL . " OR B.CATALOG_XML_ID IS NULL OR B.CATALOG_XML_ID = ''" . PHP_EOL . " )" . PHP_EOL . " AND O.RESPONSIBLE_ID IS NOT NULL"; break; case 'ORACLE': $strSql = "UPDATE (" . PHP_EOL . " SELECT" . PHP_EOL . " B.ID," . PHP_EOL . " B.CATALOG_XML_ID," . PHP_EOL . " B.PRODUCT_XML_ID," . PHP_EOL . " I.XML_ID AS C_XML_ID," . PHP_EOL . " IE.XML_ID AS P_XML_ID" . PHP_EOL . " FROM B_SALE_BASKET B" . PHP_EOL . " INNER JOIN B_SALE_ORDER O ON B.ORDER_ID = O.ID" . PHP_EOL . " INNER JOIN B_IBLOCK_ELEMENT IE ON B.PRODUCT_ID = IE.ID" . PHP_EOL . " INNER JOIN B_IBLOCK I ON IE.IBLOCK_ID = I.ID" . PHP_EOL . " WHERE" . PHP_EOL . " IE.IBLOCK_ID = {$catalogId}" . PHP_EOL . " AND (" . PHP_EOL . " B.PRODUCT_XML_ID IS NULL OR B.PRODUCT_XML_ID = ''" . PHP_EOL . " OR B.CATALOG_XML_ID IS NULL OR B.CATALOG_XML_ID = ''" . PHP_EOL . " )" . PHP_EOL . " AND O.RESPONSIBLE_ID IS NOT NULL" . PHP_EOL . ") U" . PHP_EOL . "SET" . PHP_EOL . " U.CATALOG_XML_ID = U.C_XML_ID," . PHP_EOL . " U.PRODUCT_XML_ID = U.P_XML_ID"; break; } unset($databaseType); $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); unset($strSql); } } } COption::SetOptionString('crm', '~CRM_EXCH1C_BASKET_XML_IDS_14_1_9', 'Y'); $bFieldExists = false; $obUserField = new CUserTypeEntity(); $dbRes = $obUserField->GetList(array('SORT' => 'DESC'), array('ENTITY_ID' => 'ORDER')); $maxUFSort = 0; $i = 0; while ($arUF = $dbRes->Fetch()) { if ($i++ === 0) { $maxUFSort = intval($arUF['SORT']); } if ($arUF['FIELD_NAME'] === 'UF_QUOTE_ID') { $bFieldExists = true; break; } } unset($dbRes, $arUF, $i); if (!$bFieldExists) { $arOrderUserField = array('ENTITY_ID' => 'ORDER', 'FIELD_NAME' => 'UF_QUOTE_ID', 'USER_TYPE_ID' => 'integer', 'XML_ID' => 'uf_quote_id', 'SORT' => strval($maxUFSort + 10), 'MULTIPLE' => null, 'MANDATORY' => null, 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'N', 'EDIT_IN_LIST' => 'N', 'IS_SEARCHABLE' => null, 'SETTINGS' => array('DEFAULT_VALUE' => null, 'SIZE' => '', 'ROWS' => '1', 'MIN_LENGTH' => '0', 'MAX_LENGTH' => '0', 'REGEXP' => ''), 'EDIT_FORM_LABEL' => array('ru' => '', 'en' => ''), 'LIST_COLUMN_LABEL' => array('ru' => '', 'en' => ''), 'LIST_FILTER_LABEL' => array('ru' => '', 'en' => ''), 'ERROR_MESSAGE' => array('ru' => '', 'en' => ''), 'HELP_MESSAGE' => array('ru' => '', 'en' => '')); unset($maxUFSort); $userFieldId = $obUserField->Add($arOrderUserField); if ($userFieldId <= 0) { $errMsg[] = str_replace("#FIELD_NAME#", $arOrderUserField['FIELD_NAME'], GetMessage('CRM_CANT_ADD_USER_FIELD')); } unset($userFieldId, $obUserField, $arOrderUserField); } if (empty($errMsg)) { COption::SetOptionString('crm', '~CRM_INVOICE_UF_QUOTE_ID_14_1_13', 'Y'); return true; } else { $errString = implode('<br>', $errMsg); ShowError($errString); return false; } } if (COption::GetOptionString('crm', '~CRM_INVOICE_DISABLE_SALE_EVENTS_12_5_19', 'N') === 'Y') { if (!CModule::IncludeModule('catalog')) { return false; } $arBaseCatalogGroup = CCatalogGroup::GetBaseGroup(); $priceTypeId = intval($arBaseCatalogGroup['ID']); COption::SetOptionInt('crm', 'selected_catalog_group_id', $priceTypeId); unset($arBaseCatalogGroup, $priceTypeId); COption::SetOptionString('crm', '~CRM_EXCH1C_REWRITEDEFCATGRP_12_5_20', 'Y'); LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam()); return true; } if (COption::GetOptionString('crm', '~CRM_INVOICE_EXCH1C_UPDATE_12_5_17', 'N') === 'Y') { $pref = COption::GetOptionString('sale', '1C_SALE_ACCOUNT_NUMBER_SHOP_PREFIX', ''); if (strlen(strval($pref)) < 1) { COption::SetOptionString('sale', '1C_SALE_ACCOUNT_NUMBER_SHOP_PREFIX', 'CRM_'); } COption::SetOptionString('crm', '~CRM_INVOICE_EXCH1C_UPDATE_12_5_19', 'Y'); self::installDisableSaleEvents(); COption::SetOptionString('crm', '~CRM_INVOICE_DISABLE_SALE_EVENTS_12_5_19', 'Y'); if (!CModule::IncludeModule('catalog')) { return false; } $arBaseCatalogGroup = CCatalogGroup::GetBaseGroup(); $priceTypeId = intval($arBaseCatalogGroup['ID']); COption::SetOptionInt('crm', 'selected_catalog_group_id', $priceTypeId); unset($arBaseCatalogGroup, $priceTypeId); COption::SetOptionString('crm', '~CRM_EXCH1C_REWRITEDEFCATGRP_12_5_20', 'Y'); LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam()); return true; } if (COption::GetOptionString('crm', '~CRM_INVOICE_INSTALL_12_5_7', 'N') === 'Y') { // fix 40279 if (COption::GetOptionString('crm', '~CRM_INVOICE_UPDATE_12_5_14', 'N') !== 'Y') { try { if (CModule::IncludeModule('sale')) { global $DB; if ($DB->TableExists('b_sale_order_props') && class_exists('CSaleOrderProps')) { $arPropsFilter = array('TYPE' => 'LOCATION', 'REQUIED' => 'Y', 'USER_PROPS' => 'Y', 'IS_LOCATION' => 'Y', 'IS_EMAIL' => 'N', 'IS_PROFILE_NAME' => 'N', 'IS_PAYER' => 'N', 'CODE' => 'LOCATION'); // update properties $dbOrderProps = CSaleOrderProps::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arPropsFilter, false, false, array('ID', 'IS_LOCATION4TAX')); if ($dbOrderProps !== false) { while ($arOrderProp = $dbOrderProps->Fetch()) { if ($arOrderProp['IS_LOCATION4TAX'] !== 'Y') { CSaleOrderProps::Update($arOrderProp['ID'], array('IS_LOCATION4TAX' => 'Y')); } } COption::SetOptionString('crm', '~CRM_INVOICE_UPDATE_12_5_14', 'Y'); } } } } catch (Exception $e) { } } if (COption::GetOptionString('crm', '~CRM_INVOICE_UPDATE_12_5_14', 'N') === 'Y') { if (COption::GetOptionString('crm', '~CRM_INVOICE_EXCH1C_UPDATE_12_5_17', 'N') !== 'Y') { if (CModule::IncludeModule('catalog') && CModule::IncludeModule('sale') && CModule::IncludeModule('iblock')) { try { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/crm/install/exch1c.php"; } catch (Exception $e) { $errMsg[] = $e->getMessage(); } if (empty($errMsg)) { COption::SetOptionString('crm', '~CRM_INVOICE_EXCH1C_UPDATE_12_5_17', 'Y'); COption::SetOptionString('sale', '1C_SALE_ACCOUNT_NUMBER_SHOP_PREFIX', 'CRM_'); COption::SetOptionString('crm', '~CRM_INVOICE_EXCH1C_UPDATE_12_5_19', 'Y'); self::installDisableSaleEvents(); COption::SetOptionString('crm', '~CRM_INVOICE_DISABLE_SALE_EVENTS_12_5_19', 'Y'); if (!CModule::IncludeModule('catalog')) { return false; } $arBaseCatalogGroup = CCatalogGroup::GetBaseGroup(); $priceTypeId = intval($arBaseCatalogGroup['ID']); COption::SetOptionInt('crm', 'selected_catalog_group_id', $priceTypeId); unset($arBaseCatalogGroup, $priceTypeId); COption::SetOptionString('crm', '~CRM_EXCH1C_REWRITEDEFCATGRP_12_5_20', 'Y'); LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam()); return true; } else { $errString = implode('<br>', $errMsg); ShowError($errString); return false; } } } else { return true; } } return false; } try { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/crm/install/sale_link.php"; } catch (Exception $e) { $errMsg[] = $e->getMessage(); } if (empty($errMsg)) { COption::SetOptionString('crm', '~CRM_INVOICE_INSTALL_12_5_7', 'Y'); LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam()); return true; } else { $errString = implode('<br>', $errMsg); ShowError($errString); return false; } }
$IS_FILTERED = "N"; $IS_ZIP = "N"; } $SORT = IntVal($SORT); if ($SORT <= 0) { $SORT = 100; } $PROPS_GROUP_ID = IntVal($PROPS_GROUP_ID); if ($PROPS_GROUP_ID <= 0) { $strError .= GetMessage("ERROR_NO_GROUP") . "<br>"; } if (strlen($strError) <= 0) { unset($arFields); $arFields = array("PERSON_TYPE_ID" => $PERSON_TYPE_ID, "NAME" => $NAME, "TYPE" => $TYPE, "REQUIED" => $REQUIED, "DEFAULT_VALUE" => $DEFAULT_VALUE, "SORT" => $SORT, "CODE" => strlen($CODE) <= 0 ? False : $CODE, "USER_PROPS" => $USER_PROPS, "IS_LOCATION" => $IS_LOCATION, "IS_LOCATION4TAX" => $IS_LOCATION4TAX, "PROPS_GROUP_ID" => $PROPS_GROUP_ID, "SIZE1" => $SIZE1, "SIZE2" => $SIZE2, "DESCRIPTION" => $DESCRIPTION, "IS_EMAIL" => $IS_EMAIL, "IS_PROFILE_NAME" => $IS_PROFILE_NAME, "IS_PAYER" => $IS_PAYER, "IS_FILTERED" => $IS_FILTERED, "IS_ZIP" => $IS_ZIP, "ACTIVE" => $ACTIVE, "UTIL" => $UTIL, "INPUT_FIELD_LOCATION" => $INPUT_FIELD_LOCATION); if ($ID > 0) { if (!CSaleOrderProps::Update($ID, $arFields)) { $strError .= GetMessage("ERROR_EDIT_PROP") . "<br>"; } if (strlen($strError) <= 0) { //$db_order_props_tmp = CSaleOrderPropsValue::GetList(($b="NAME"), ($o="ASC"), Array("ORDER_PROPS_ID"=>$ID)); $db_order_props_tmp = CSaleOrderPropsValue::GetList($b = "ID", $o = "ASC", array("ORDER_PROPS_ID" => $ID, "!CODE" => strlen($CODE) <= 0 ? False : $CODE)); while ($ar_order_props_tmp = $db_order_props_tmp->Fetch()) { CSaleOrderPropsValue::Update($ar_order_props_tmp["ID"], array("CODE" => strlen($CODE) <= 0 ? False : $CODE)); } } } else { $ID = CSaleOrderProps::Add($arFields); if ($ID <= 0) { $strError .= GetMessage("ERROR_ADD_PROP") . "<br>"; } }
COption::SetOptionString($moduleID, "match_id_".$person_type_id."_gp_order_id_0", "ORDER_PROP_".$ID); } } if($properties){ foreach ($properties as $person_type_id => $pt_props) { if (!isset($person_type_id_option_value) || empty($person_type_id_option_value)) { COption::SetOptionString($moduleID, "person_type_id", $person_type_id); $person_type_id_option_value = $person_type_id; } if (array_key_exists($person_type_id, $person_type_gp_special_props) && is_array($person_type_gp_special_props[$person_type_id])) { if(is_array($person_type_gp_special_props[$person_type_id])){ foreach ($person_type_gp_special_props[$person_type_id] as $gp_special_prop_code => $gp_special_prop) { if ($gp_special_prop['ACTIVE'] != 'Y') { CSaleOrderProps::Update($gp_special_prop['ID'], array("ACTIVE" => "Y")); } $gp_special_props_set_list[] = $gp_special_prop_code; } } } if(is_array($gp_special_props_code_list)){ foreach ($gp_special_props_code_list as $gp_special_code) { $j = 0; foreach($gp_special_props_set_list as $gp_spec){ if($gp_special_code == $gp_spec){ $j = 1; } } if($j == 0){ $pt_props[$gp_special_code] = 0;