Exemplo n.º 1
0
 /**
  * <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>";
         }
     }
Exemplo n.º 3
0
            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;