Guest User

Untitled

a guest
Nov 29th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.69 KB | None | 0 0
  1. <?php
  2. require_once($_SERVER['DOCUMENT_ROOT']. "/bitrix/modules/main/include/prolog_before.php");
  3.  
  4. // добавление заказа в один клик, только по имени и телефону
  5. CModule::IncludeModule("sale");
  6. CModule::IncludeModule("catalog");
  7.  
  8. if(!empty($_REQUEST['name']) && !empty($_REQUEST['phone']))
  9. {
  10. $name = $_REQUEST['name'];
  11. $phone = $_REQUEST['phone'];
  12.  
  13. if(!empty($_REQUEST['oneProduct']) && $_REQUEST['oneProduct'] == 'Y' && !empty($_REQUEST['productId']))
  14. {
  15. // заказ в один клик только одного товара
  16. // --- очистка корзины
  17. CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
  18. // --- создание пустого заказа
  19. $orderId = makeOrder($name,$phone);
  20. // --- добавление товара к заказу
  21. addProdToOrder($item['PRODUCT_ID'],$orderId, $item['QUANTITY']);
  22. // --- оформление заказа всей корзины (с одним товаром)
  23. $orderId = makeOrder();
  24. if($orderId)
  25. echo json_encode(array('success'=>'ok', 'order_id'=>$orderId));
  26. else
  27. echo json_encode(array('error'=>'Y'));
  28.  
  29. }
  30. elseif(!empty($_REQUEST['bascetOrder']))
  31. {
  32. // заказ в один клик всей корзины
  33. // --- оформление заказа всей корзины (с одним товаром)
  34. $orderId = makeOrder($name,$phone);
  35. // --- достать товары текущей корзины
  36. $basecetItems = getBasketProducts();
  37. // --- добавить их в заказ
  38. foreach ($basecetItems as $key => $item)
  39. {
  40. addProdToOrder($item['PRODUCT_ID'],$orderId, $item['QUANTITY']);
  41. }
  42. // --- обновляем параметры заказа цена/скидка
  43. $strOrderList = '';
  44. updateOrderParams($orderId,$strOrderList);
  45. sendNotification($name,$phone, $strOrderList, $orderId);
  46.  
  47. if($orderId)
  48. {
  49. echo json_encode(array('success'=>'ok', 'order_id'=>$orderId));
  50. // --- очистка корзины
  51. CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
  52. }
  53. else
  54. echo json_encode(array('error'=>'Y'));
  55. }
  56. else
  57. {
  58. echo json_encode(array('error'=>'Y'));
  59. }
  60. }
  61. else
  62. echo json_encode(array('error'=>'Не все поля заполнены'));
  63.  
  64.  
  65.  
  66. // FUNCTIONS
  67. /**
  68. * Создает пустой заказ
  69. */
  70. function makeOrder($name,$phone)
  71. {
  72. global $USER;
  73. $arFields = array(
  74. "LID" => "s1",
  75. "PERSON_TYPE_ID" => 1,
  76. "PAYED" => "N",
  77. "CANCELED" => "N",
  78. "STATUS_ID" => "N",
  79. "PRICE" => 0,
  80. "CURRENCY" => "RUB",
  81. "USER_ID" => 1,
  82. "PAY_SYSTEM_ID" => 1,
  83. "PRICE_DELIVERY" => 0,
  84. "DELIVERY_ID" => 2,
  85. "DISCOUNT_VALUE" => 0,
  86. "TAX_VALUE" => 0,
  87. "USER_DESCRIPTION" => "Заказ в Один клик"
  88. );
  89.  
  90. // add Guest ID
  91. if (CModule::IncludeModule("statistic"))
  92. $arFields["STAT_GID"] = CStatistic::GetEventParam();
  93.  
  94. $ord = new CSaleOrder();
  95. $ORDER_ID = $ord->Add($arFields);
  96. if($ORDER_ID)
  97. {
  98. $arFields = array("ORDER_ID" => $ORDER_ID, "ORDER_PROPS_ID" => 1, "NAME" => "ФИО", "CODE" => "NAME", "VALUE" => $name );
  99. CSaleOrderPropsValue::Add($arFields);
  100. $arFields = array("ORDER_ID" => $ORDER_ID, "ORDER_PROPS_ID" => 3, "NAME" => "ФИО", "CODE" => "NAME", "VALUE" => $phone );
  101. CSaleOrderPropsValue::Add($arFields);
  102.  
  103. return $ORDER_ID;
  104. }
  105. else
  106. echo json_encode(array('error'=>$ord->LAST_ERROR));
  107. }
  108.  
  109. function getBasketProducts()
  110. {
  111. $arID = array();
  112. $arBasketItems = array();
  113.  
  114. $dbBasketItems = CSaleBasket::GetList(
  115. array("NAME" => "ASC", "ID" => "ASC"),
  116. array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"),
  117. false,
  118. false,
  119. array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "PRODUCT_PROVIDER_CLASS")
  120. );
  121. while ($arItems = $dbBasketItems->Fetch())
  122. {
  123. if ('' != $arItems['PRODUCT_PROVIDER_CLASS'] || '' != $arItems["CALLBACK_FUNC"])
  124. {
  125. CSaleBasket::UpdatePrice(
  126. $arItems["ID"],
  127. $arItems["CALLBACK_FUNC"],
  128. $arItems["MODULE"],
  129. $arItems["PRODUCT_ID"],
  130. $arItems["QUANTITY"],
  131. "N",
  132. $arItems["PRODUCT_PROVIDER_CLASS"]
  133. );
  134. $arID[] = $arItems["ID"];
  135. }
  136. }
  137. if(!empty($arID))
  138. {
  139. $dbBasketItems = CSaleBasket::GetList(
  140. array("NAME" => "ASC", "ID" => "ASC"),
  141. array("ID" => $arID, "ORDER_ID" => "NULL"),
  142. false,
  143. false,
  144. array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "WEIGHT", "PRODUCT_PROVIDER_CLASS", "NAME")
  145. );
  146. while ($arItems = $dbBasketItems->Fetch())
  147. {
  148. $arBasketItems[] = $arItems;
  149. }
  150. }
  151. return $arBasketItems;
  152.  
  153. }
  154.  
  155. function addProdToOrder($productID,$orderID, $quantity=1,$weight='не задан')
  156. {
  157. $basket_props = array( array("NAME" => "Вес", "CODE" => "MASSA", "VALUE" => $weight));
  158. if (!Add2BasketByProductID($productID, $quantity, array('ORDER_ID' => $orderID, ), $basket_props))
  159. {
  160. $return['msg'] = 'Ошибка добавления товара в заказ';
  161. $fail = true;
  162. }
  163. }
  164.  
  165. function updateOrderParams($orderId, &$strOrderList)
  166. {
  167. $dbBasketItems = CSaleBasket::GetList(
  168. array("NAME" => "ASC", "ID" => "ASC"),
  169. array("LID" => SITE_ID, "ORDER_ID" => $orderId),
  170. false, false,
  171. array("ID", "NAME", "QUANTITY", "CURRENCY", "CAN_BUY", "PRICE", "WEIGHT", "DISCOUNT_PRICE")
  172. );
  173. $summ = $weight = 0;
  174. $strOrderList = "";
  175. $arBasket = array();
  176. while ($arBasketItems = $dbBasketItems->GetNext())
  177. {
  178. $strOrderList .= $arBasketItems["NAME"] . " - " . $arBasketItems["QUANTITY"] . " шт на " . SaleFormatCurrency($arBasketItems["PRICE"] * $arBasketItems["QUANTITY"], $arBasketItems["CURRENCY"]);
  179. $strOrderList .= "\n";
  180. $summ += roundEx($arBasketItems["PRICE"], SALE_VALUE_PRECISION) * DoubleVal($arBasketItems["QUANTITY"]);
  181. $weight += doubleval($arBasketItems['WEIGHT']);
  182. $arBasket[] = $arBasketItems;
  183. }
  184. $arOrderForDiscount = array(
  185. 'SITE_ID' => SITE_ID,
  186. 'USER_ID' => $user_id,
  187. 'ORDER_PRICE' => $summ,
  188. 'ORDER_WEIGHT' => $weight,
  189. 'BASKET_ITEMS' => $arBasket,
  190. );
  191. $arDiscountOptions = array();
  192. $arDiscountErrors = array();
  193. CSaleDiscount::DoProcessOrder($arOrderForDiscount, $arDiscountOptions, $arDiscountErrors);
  194.  
  195. $arOrderForDiscount['PRICE_BEFORE'] = $summ;
  196. $arOrderForDiscount['PRICE'] = $arOrderForDiscount['ORDER_PRICE'];
  197. $arOrderForDiscount['WEIGHT'] = $arOrderForDiscount['ORDER_WEIGHT'];
  198.  
  199. if (!CSaleOrder::Update($ORDER_ID, $arOrderForDiscount))
  200. {
  201. $return['msg'] = 'Ошибка расчета цены заказа.';
  202. $fail = true;
  203. }
  204.  
  205. }
  206.  
  207. function sendNotification($name,$phone, $orderList, $ordrId)
  208. {
  209. $arEventFields = Array(
  210. "AUTHOR_NAME" => $name,
  211. "AUTHOR_PHONE" => $phone,
  212. "ELEMENTS" => $orderList,
  213. "ORDERID" => $ordrId,
  214. "SUMM" => ''
  215. );
  216. CEvent::SendImmediate("NEW_ONE_CLICK_ORDER", "s1", $arEventFields);
  217. }
Add Comment
Please, Sign In to add comment