Korusol
8/29/2016 - 7:06 PM

Bitrix.Скрипты миграций: добавление свойств заказа

Bitrix.Скрипты миграций: добавление свойств заказа

//<?php

/**
 * @doc CSaleOrderProps::Add() https://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderprops/csaleorderprops__add.b64a5ac9.php
 */

/** @var CMain $APPLICATION */


// Data
$propsData = array(
    array(
        "PERSON_TYPE_ID" => 1,
        "PROPS_GROUP_ID" => 7,
        "NAME" => "FUserId",
        "CODE" => "FUSER_ID",
        "TYPE" => "TEXT",
        "REQUIED" => "N",
        "UTIL" => "Y",
        "IS_FILTERED" => "Y",
        "SORT" => 900,
    )
);


// Logic
function oGetMessage($key, $fields)
{
    $messages = array(
        'SALE_ORDER_PROP_MESSAGE_UPDATE' => 'Свойство заказа «#NAME#» [#ID#] успешно обновлено',
        'SALE_ORDER_PROP_MESSAGE_UPDATE_ERROR' => 'Ошибка обновления свойства заказа «#NAME#» [#ID#]: #ERROR#',
        'SALE_ORDER_PROP_MESSAGE_UPDATE_EXISTS' => 'Свойство заказа «#NAME#» уже существует. Пожалуйста, обновите его вручную. Информация о нём:<br><pre>#PROP_INFO#</pre>',

        'SALE_ORDER_PROP_MESSAGE_ADDED' => 'Свойство заказа «#NAME#» [#ID#] успешно добавлено',
        'SALE_ORDER_PROP_MESSAGE_ADDED_ERROR' => 'Ошибка добавления свойства заказа «#NAME#»: #ERROR#',
    );
    return isset($messages[$key])
        ? str_replace(array_keys($fields), array_values($fields), $messages[$key])
        : '';
}

global $DB;

$DB->StartTransaction();

try {

    $DB->Commit();

    $info = array();

    if (CModule::IncludeModule('sale')) {

        foreach ($propsData as $propData) {

            $propIterator = CSaleOrderProps::GetList(
                array(),
                array(
                    'PERSON_TYPE_ID' => $propData['PERSON_TYPE_ID'],
                    'CODE' => $propData['CODE'],
                )
            );
            if ($prop = $propIterator->Fetch()) {
                throw new \Bitrix\Main\SystemException(oGetMessage('SALE_ORDER_PROP_MESSAGE_UPDATE_EXISTS', array(
                    '#NAME#' => $propData['NAME'],
                    '#PROP_INFO#' => var_export($prop, true),
                )));
            } else {
                if ($result = CSaleOrderProps::Add($propData)) {
                    $info[] = oGetMessage('SALE_ORDER_PROP_MESSAGE_ADDED', array(
                        '#NAME#' => $propData['NAME'],
                        '#ID#' => $result,
                    ));
                } else {
                    $error = '';
                    if ($ex = $APPLICATION->GetException()) {
                        $error = $ex->GetString();
                    }

                    throw new \Bitrix\Main\SystemException(oGetMessage('SALE_ORDER_PROP_MESSAGE_ADDED_ERROR', array(
                        '#NAME#' => $propData['NAME'],
                        '#ERROR#' => $error,
                    )));
                }
            }

        }

    }

    echo implode("<br>\n", $info);

} catch (\Bitrix\Main\SystemException $e) {

    $DB->Rollback();

    echo sprintf("%s<br>\n%s",
        $e->getMessage(),
        implode("<br>\n", $info)
    );

}