Пример #1
0
    function ExportOrders2Xml($arFilter = array(), $nTopCount = 0, $currency = "", $crmMode = false, $time_limit = 0, $version = false, $arOptions = array())
    {
        self::setVersionSchema($version);
        self::setCrmMode($crmMode);
        self::setCurrencySchema($currency);
        $count = false;
        if (IntVal($nTopCount) > 0) {
            $count = array("nTopCount" => $nTopCount);
        }
        $end_time = self::getEndTime($time_limit);
        if (IntVal($time_limit) > 0) {
            $lastOrderPrefix = self::getOrderPrefix();
            if (self::$crmMode) {
                $lastOrderPrefix = md5(serialize($arFilter));
                if (!empty($_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix]) && IntVal($nTopCount) > 0) {
                    $count["nTopCount"] = $count["nTopCount"] + count($_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix]);
                }
            } else {
                if (IntVal($_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix]) > 0) {
                    $arFilter["<ID"] = $_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix];
                }
            }
        }
        self::$arResultStat = array("ORDERS" => 0, "CONTACTS" => 0, "COMPANIES" => 0);
        $bExportFromCrm = self::isExportFromCRM($arOptions);
        //$paySystems = self::getSalePaySystem();
        //$delivery = self::getSaleDelivery();
        $arStore = self::getCatalogStore();
        $arMeasures = self::getCatalogMeasure();
        self::setCatalogMeasure($arMeasures);
        $arAgent = self::getSaleExport();
        if (self::$crmMode) {
            self::setXmlEncoding("UTF-8");
            $arCharSets = self::getSite();
        }
        echo self::getXmlRootName();
        ?>

<<?php 
        echo CSaleExport::getTagName("SALE_EXPORT_COM_INFORMATION");
        ?>
 <?php 
        echo self::getCmrXmlRootNameParams();
        ?>
><?php 
        $arOrder = array("ID" => "DESC");
        if (self::$crmMode) {
            $arOrder = array("DATE_UPDATE" => "ASC");
        }
        $arSelect = array("ID", "LID", "PERSON_TYPE_ID", "PAYED", "DATE_PAYED", "EMP_PAYED_ID", "CANCELED", "DATE_CANCELED", "EMP_CANCELED_ID", "REASON_CANCELED", "STATUS_ID", "DATE_STATUS", "PAY_VOUCHER_NUM", "PAY_VOUCHER_DATE", "EMP_STATUS_ID", "PRICE_DELIVERY", "ALLOW_DELIVERY", "DATE_ALLOW_DELIVERY", "EMP_ALLOW_DELIVERY_ID", "PRICE", "CURRENCY", "DISCOUNT_VALUE", "SUM_PAID", "USER_ID", "PAY_SYSTEM_ID", "DELIVERY_ID", "DATE_INSERT", "DATE_INSERT_FORMAT", "DATE_UPDATE", "USER_DESCRIPTION", "ADDITIONAL_INFO", "COMMENTS", "TAX_VALUE", "STAT_GID", "RECURRING_ID", "ACCOUNT_NUMBER", "SUM_PAID", "DELIVERY_DOC_DATE", "DELIVERY_DOC_NUM", "TRACKING_NUMBER", "STORE_ID", "ID_1C", "VERSION", "USER.XML_ID");
        $bCrmModuleIncluded = false;
        if ($bExportFromCrm) {
            $arSelect[] = "UF_COMPANY_ID";
            $arSelect[] = "UF_CONTACT_ID";
            if (IsModuleInstalled("crm") && CModule::IncludeModule("crm")) {
                $bCrmModuleIncluded = true;
            }
        }
        $filter = array('select' => $arSelect, 'filter' => $arFilter, 'order' => $arOrder, 'limit' => $count["nTopCount"]);
        if (!empty($arOptions['RUNTIME']) && is_array($arOptions['RUNTIME'])) {
            $filter['runtime'] = $arOptions['RUNTIME'];
        }
        $dbOrderList = \Bitrix\Sale\Internals\OrderTable::getList($filter);
        //$dbOrderList = CSaleOrder::GetList($arOrder, $arFilter, false, $count, $arSelect);
        while ($arOrder = $dbOrderList->Fetch()) {
            $order = \Bitrix\Sale\Order::load($arOrder['ID']);
            /* @var $order \Bitrix\Sale\Order*/
            $arOrder['DATE_STATUS'] = $arOrder['DATE_STATUS']->toString();
            $arOrder['DATE_INSERT'] = $arOrder['DATE_INSERT']->toString();
            $arOrder['DATE_UPDATE'] = $arOrder['DATE_UPDATE']->toString();
            foreach ($arOrder as $field => $value) {
                if (self::isFormattedDateFields('Order', $field)) {
                    $arOrder[$field] = self::getFormatDate($value);
                }
            }
            if (self::$crmMode) {
                if (self::getVersionSchema() > self::DEFAULT_VERSION && is_array($_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix]) && in_array($arOrder["ID"], $_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix]) && empty($arFilter["ID"])) {
                    continue;
                }
                ob_start();
            }
            self::$arResultStat["ORDERS"]++;
            $agentParams = array_key_exists($arOrder["PERSON_TYPE_ID"], $arAgent) ? $arAgent[$arOrder["PERSON_TYPE_ID"]] : array();
            $arResultPayment = self::getPayment($arOrder);
            $paySystems = $arResultPayment['paySystems'];
            $arPayment = $arResultPayment['payment'];
            $arResultShipment = self::getShipment($arOrder);
            $arShipment = $arResultShipment['shipment'];
            $delivery = $arResultShipment['deliveryServices'];
            self::setDeliveryAddress('');
            self::setSiteNameByOrder($arOrder);
            $saleProperties = self::getSaleProperties($order, $arOrder, $agentParams, $bExportFromCrm, $bCrmModuleIncluded, $paySystems, $delivery, $arOptions);
            $arProp = $saleProperties['arProp'];
            $agent = $saleProperties['agent'];
            $arOrderTax = CSaleExport::getOrderTax($arOrder["ID"]);
            $xmlResult['OrderTax'] = self::getXMLOrderTax($arOrderTax);
            self::setOrderSumTaxMoney(self::getOrderSumTaxMoney($arOrderTax));
            $xmlResult['Contragents'] = self::getXmlContragents($arOrder, $arProp, $agent, $bExportFromCrm ? array("EXPORT_FROM_CRM" => "Y") : array());
            $xmlResult['OrderDiscount'] = self::getXmlOrderDiscount($arOrder);
            $xmlResult['SaleStore'] = self::getXmlSaleStore($arOrder, $arStore);
            // self::getXmlSaleStoreBasket($arOrder,$arStore);
            $basketItems = self::getXmlBasketItems('Order', $arOrder, array('ORDER_ID' => $arOrder['ID']), array(), $arShipment);
            $xmlResult['BasketItems'] = $basketItems['outputXML'];
            $xmlResult['SaleProperties'] = self::getXmlSaleProperties($arOrder, $arShipment, $arPayment, $agent, $agentParams, $bExportFromCrm);
            self::OutputXmlDocument('Order', $xmlResult, $arOrder);
            if (self::getVersionSchema() >= self::PARTIAL_VERSION) {
                self::OutputXmlDocumentsByType('Payment', $xmlResult, $arOrder, $arPayment);
                self::OutputXmlDocumentsByType('Shipment', $xmlResult, $arOrder, $arShipment);
                self::OutputXmlDocumentRemove('Shipment', $arOrder);
            }
            if (self::$crmMode) {
                $c = ob_get_clean();
                $c = CharsetConverter::ConvertCharset($c, $arCharSets[$arOrder["LID"]], "utf-8");
                echo $c;
                $_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix][] = $arOrder["ID"];
            } else {
                $_SESSION["BX_CML2_EXPORT"][$lastOrderPrefix] = $arOrder["ID"];
            }
            if (self::checkTimeIsOver($time_limit, $end_time)) {
                break;
            }
        }
        ?>

	</<?php 
        echo CSaleExport::getTagName("SALE_EXPORT_COM_INFORMATION");
        ?>
><?php 
        return self::$arResultStat;
    }