|
Привет, товарищи. Создаю заказ, таким вот образом: Скрытый текст |
---|
[CODE]$dbBasketItems = CSaleBasket::GetList( array( 'DATE_INSERT' => 'ASC', "NAME" => "ASC", "ID" => "ASC" ), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array("ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE", "CATALOG_XML_ID", "PRODUCT_XML_ID", "SUBSCRIBE", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS") ); while ($arItems = $dbBasketItems->GetNext()) { $arItems['QUANTITY'] = $arParams['QUANTITY_FLOAT'] == 'Y' ? number_format(DoubleVal($arItems['QUANTITY']), 2, '.', '') : IntVal($arItems['QUANTITY']);
$arItems["PROPS"] = Array(); if(in_array("PROPS", $arParams["COLUMNS_LIST"])) { $dbProp = CSaleBasket::GetPropsList(Array("SORT" => "ASC", "ID" => "ASC"), Array("BASKET_ID" => $arItems["ID"], "!CODE" => array("CATALOG.XML_ID", "PRODUCT.XML_ID"))); while($arProp = $dbProp -> GetNext()) $arItems["PROPS"][] = $arProp; }
$arItems["PRICE_VAT_VALUE"] = (($arItems["PRICE"] / ($arItems["VAT_RATE"] +1)) * $arItems["VAT_RATE"]); $arItems["PRICE_FORMATED"] = SaleFormatCurrency($arItems["PRICE"], $arItems["CURRENCY"]); $arItems["WEIGHT"] = DoubleVal($arItems["WEIGHT"]); $arItems["WEIGHT_FORMATED"] = roundEx(DoubleVal($arItems["WEIGHT"]/$arParams["WEIGHT_KOEF"]), SALE_VALUE_PRECISION)." ".$arParams["WEIGHT_UNIT"];
if ($arItems["DELAY"] == "N" && $arItems["CAN_BUY"] == "Y") { $allSum += ($arItems["PRICE"] * $arItems["QUANTITY"]); $allWeight += ($arItems["WEIGHT"] * $arItems["QUANTITY"]); $allVATSum += roundEx($arItems["PRICE_VAT_VALUE"] * $arItems["QUANTITY"], SALE_VALUE_PRECISION); }
if ($arItems["DELAY"] == "N" && $arItems["CAN_BUY"] == "Y") { $bShowReady = True; if(DoubleVal($arItems["DISCOUNT_PRICE"]) > 0) { $arItems["DISCOUNT_PRICE_PERCENT"] = $arItems["DISCOUNT_PRICE"]*100 / ($arItems["DISCOUNT_PRICE"] + $arItems["PRICE"]); $arItems["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arItems["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION)."%"; $DISCOUNT_PRICE_ALL += $arItems["DISCOUNT_PRICE"] * $arItems["QUANTITY"]; } $arResult["ITEMS"]["AnDelCanBuy"][] = $arItems; } elseif ($arItems["DELAY"] == "Y" && $arItems["CAN_BUY"] == "Y") { $bShowDelay = True; $arResult["ITEMS"]["DelDelCanBuy"][] = $arItems; } elseif ($arItems["CAN_BUY"] == "N" && $arItems["SUBSCRIBE"] == "Y") { $bShowSubscribe = True; $arResult["ITEMS"]["ProdSubscribe"][] = $arItems; } else { $bShowNotAvail = True; $arResult["ITEMS"]["nAnCanBuy"][] = $arItems; }
$arBasketItems[] = $arItems; } $arOrder = array( 'SITE_ID' => SITE_ID, 'USER_ID' => $user['ID'], 'ORDER_PRICE' => $allSum, 'ORDER_WEIGHT' => $allWeight, 'BASKET_ITEMS' => $arResult["ITEMS"]["AnDelCanBuy"] );
$arOptions = array( 'COUNT_DISCOUNT_4_ALL_QUANTITY' => 'Y', );
$arErrors = array();
// Discount CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors, $dVal);
$allSum = 0; $allWeight = 0; $allVATSum = 0; $DISCOUNT_PRICE_ALL = 0; foreach ($arOrder['BASKET_ITEMS'] as &$arOneItem) { $allSum += ($arOneItem["PRICE"] * $arOneItem["QUANTITY"]); $arOneItem["PRICE_FORMATED"] = SaleFormatCurrency($arOneItem["PRICE"], $arOneItem["CURRENCY"]); $arOneItem["DISCOUNT_PRICE_PERCENT"] = $arOneItem["DISCOUNT_PRICE"]*100 / ($arOneItem["DISCOUNT_PRICE"] + $arOneItem["PRICE"]); $arOneItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arOneItem["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION)."%"; $DISCOUNT_PRICE_ALL += $arOneItem["DISCOUNT_PRICE"] * $arOneItem["QUANTITY"]; } if (isset($arOneItem)) unset($arOneItem);
$order_price = $arOrder['ORDER_PRICE'];
$arFields = array( 'LID' => 's1', 'PERSON_TYPE_ID' => 1, 'STATUS_ID' => 'N', 'PRICE' => $order_price, 'CURRENCY' => 'UAH', 'USER_ID' => $user['ID'], 'PAY_SYSTEM_ID' => 1, 'DELIVERY_ID' => 1, 'NOT_SEND_SMS' => false );
$ORDER_ID = CSaleOrder::Add($arFields); $ORDER_ID = IntVal($ORDER_ID);
$rsOrderProp = CSaleOrderProps::GetList(array(), array('CODE' => 'PHONE', 'PERSON_TYPE_ID' => $arFields['PERSON_TYPE_ID'])); if($arOrderProp = $rsOrderProp->Fetch()){ CSaleOrderPropsValue::Add(array('ORDER_ID' => $ORDER_ID, 'ORDER_PROPS_ID' => $arOrderProp['ID'], 'NAME' => $arOrderProp['NAME'], 'VALUE' => $phone, 'CODE' => $arOrderProp['CODE'] )); } if ($user['LAST_NAME'] || $user['SECOND_NAME']) { $rsOrderProp = CSaleOrderProps::GetList(array(), array('CODE' => 'FIO', 'PERSON_TYPE_ID' => $arFields['PERSON_TYPE_ID'])); if($arOrderProp = $rsOrderProp->Fetch()){ CSaleOrderPropsValue::Add(array('ORDER_ID' => $ORDER_ID, 'ORDER_PROPS_ID' => $arOrderProp['ID'], 'NAME' => $arOrderProp['NAME'], 'VALUE' => $user['NAME'] . ' ' . $user['LAST_NAME'], 'CODE' => $arOrderProp['CODE'] )); } }
CSaleBasket::OrderBasket($ORDER_ID, CSaleBasket::GetBasketUserID(), SITE_ID); [/CODE] |
И все вроде бы хорошо, только вот скидка как-то не так считается. Нормальный заказ по итогу в админке видно так: [IMG]http://cdn.joxi.ru/uploads/prod/2014/06/04/23d/28c/fcf28bc46d3b3b16031f8ae4a64dcc1b19ba64b8.jpg[/IMG] Мой же видно без скидок: [IMG]http://cdn.joxi.ru/uploads/prod/2014/06/04/652/24c/0e3467216ff4e4f3b53d6b6bd5237cdcc6493c77.jpg[/IMG] Подскажите, пожалуйста где и что я потерял? Или сделал не правильно?
|