Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.98 KB | None | 0 0
  1. <?
  2. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
  3. CModule::IncludeModule("iblock");
  4. CModule::IncludeModule('sale');
  5. CModule::IncludeModule("catalog");
  6. setlocale(LC_CTYPE, "ru_RU.CP1251");
  7.  
  8. $password = '123456';
  9.  
  10. $passw = isset($_GET['password']) ? trim($_GET['password']) : null;
  11. $action = isset($_GET['action']) ? trim($_GET['action']) : null;
  12.  
  13. if ($passw != $password) die('wrong password');
  14.  
  15.  
  16. switch ($action) {
  17. case 'import_products':
  18.     import_products();
  19.     break;
  20. case 'export_products':
  21.     export_products();
  22.     break;
  23. case 'import_orders':
  24.     import_orders();
  25.     break;
  26. case 'export_orders':
  27.     export_orders();
  28.     break;
  29. default:
  30.     echo "unknown action";
  31. }
  32.  
  33.  
  34.  
  35. function import_products($add_new = true) {
  36.     //Типы цен в виде: код => ID
  37.     $price_types = array(
  38.         'Prih' => 4,
  39.         'K1' => 2,
  40.         'K2' => 3,
  41.     'K3' => 6,
  42.     'Internet' => 1,
  43.         'Special' => 5
  44.         );
  45.     $iblock_id = 6; //ID инфоблока товара
  46.     $import_columns = array(
  47.         "XML_ID",
  48.         "NAME",
  49.         "PREVIEW_TEXT"
  50.     );
  51.     foreach ($price_types as $type_id) {
  52.         $import_columns[] = "CATALOG_PRICE_".$type_id;
  53.     }
  54.     $import_columns[] = "CATALOG_QUANTITY";
  55.     $columns_values = array_flip($import_columns);
  56.  
  57.     $file = '1c_exchange/tovar.csv';
  58.     $updated = 0;
  59.     $added = 0;
  60.     if (($handle = fopen($file, "r")) !== FALSE) {
  61.         $el = new CIBlockElement;  
  62.         while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
  63.             array_walk($data, function(&$val){
  64.                 if (is_string($val))
  65.                     $val = iconv('cp1251', 'UTF-8', $val);
  66.             });
  67.             $errors = 0;
  68.             $arFilter = Array( "IBLOCK_ID"=> $iblock_id, "XML_ID"=> $data[ $columns_values["XML_ID"] ] );
  69.             $arSelect = Array("XML_ID");
  70.             $res = CIBlockElement::GetList(Array("ID" => "DESC"), $arFilter, false, false, $arSelect);
  71.  
  72.             $exist = false;
  73.             if ($product = $res->Fetch()) {
  74.                 $exist = true;
  75.                 $productID = $product['ID'];
  76.             }
  77.             //если товар найден
  78.             if ($exist) {
  79.                 $arLoadProductArray = Array(
  80.                   "NAME"           => $data[ $columns_values["NAME"] ],
  81.                   "PREVIEW_TEXT"   => $data[ $columns_values["PREVIEW_TEXT"] ]
  82.                   );
  83.                 //обновляем товар
  84.                 $res = $el->Update($productID, $arLoadProductArray);
  85.                 //обновляем количество товара
  86.                 $upd_temp = CCatalogProduct::Update(
  87.                      $productID,
  88.                      array("QUANTITY" => $data[ $columns_values["CATALOG_QUANTITY"] ])
  89.                 );
  90.                 if (!$upd_temp) $errors++;
  91.                 //обновляем цены
  92.                 foreach ($price_types as $type_id) {
  93.                     $db_res = CPrice::GetList(
  94.                             array(),
  95.                             array(
  96.                                     "PRODUCT_ID" => $productID,
  97.                                     "CATALOG_GROUP_ID" => $type_id
  98.                                 )
  99.                         );
  100.                     if ($ar_res = $db_res->Fetch())
  101.                     {
  102.                         $arFields = Array(
  103.                             "PRODUCT_ID" => $productID,
  104.                             "PRICE" => $data[ $columns_values["CATALOG_PRICE_".$type_id] ],
  105.                 "CATALOG_GROUP_ID" => $type_id,
  106.                 "CURRENCY" => "UAH",
  107.                         );
  108.                         $result = CPrice::Update($ar_res['ID'], $arFields);
  109.                         if (!$result) $errors++;
  110.                     }
  111.                 }
  112.                 if ($errors == 0) $updated++;
  113.             //если не найден и разрешено добавление новых товаров
  114.             } elseif ($add_new) {
  115.                
  116.                 $arFields["IBLOCK_ID"] = $iblock_id;
  117.                 $arFields["IBLOCK_SECTION_ID"] = false; //создаем товар в корневом разделе
  118.                 $arFields["XML_ID"] = $data[ $columns_values["XML_ID"] ];
  119.                 $arFields["NAME"] = $data[ $columns_values["NAME"] ];
  120.                 $arFields["PREVIEW_TEXT"] = $data[ $columns_values["PREVIEW_TEXT"] ];
  121.  
  122.                 $arParams = array("replace_space"=>"-","replace_other"=>"-");
  123.                 $trans = Cutil::translit($arFields["NAME"],"ru",$arParams);
  124.                 $arFields["CODE"] = $trans;
  125.  
  126.                 $productID = $el->Add($arFields);
  127.                 $add_temp = CCatalogProduct::Add(
  128.                      array(
  129.                          "ID" => $productID,
  130.                          "QUANTITY" => $data[ $columns_values["CATALOG_QUANTITY"] ]
  131.                          )
  132.                 );
  133.                 if (!$add_temp) $errors++;
  134.                 foreach ($price_types as $type_id) {
  135.                     $arFields = Array(
  136.                         "PRODUCT_ID" => $productID,
  137.                         "CATALOG_GROUP_ID" => $type_id,
  138.                         "PRICE" => $data[ $columns_values["CATALOG_PRICE_".$type_id] ],
  139.                         "CURRENCY" => "UAH"
  140.                     );
  141.                     $result = CPrice::Add($arFields);
  142.                     if (!$result) $errors++;
  143.                 }
  144.                 if ($errors == 0) $added++;
  145.             }
  146.         }
  147.         fclose($handle);
  148.         echo 'Updated products: '. $updated . '<br> Added products: ' . $added;
  149.  
  150.     } else {
  151.         echo 'Error opening file: ' . $file;
  152.     }
  153. }
  154.  
  155. function export_products() {
  156.     //Типы цен в виде: код => ID
  157.     $price_types = array(
  158.         'K2' => 1,
  159.         'special' => 2
  160.         );
  161.     $iblock_id = 6; //ID инфоблока товара
  162.  
  163.     $file = '1c_exchange/tovar_export_site2.csv';
  164.     $fp = fopen($file, 'w');
  165.  
  166.     if ($fp) {
  167.         $arSelect = Array("XML_ID", "NAME", "PREVIEW_TEXT");
  168.         foreach ($price_types as $type_id) {
  169.             $arSelect[] = "CATALOG_GROUP_".$type_id;
  170.         }
  171.  
  172.         $arFilter = Array( "IBLOCK_ID"=> $iblock_id );
  173.  
  174.         $res = CIBlockElement::GetList(Array("ID" => "DESC"), $arFilter, false, false, $arSelect);
  175.         $exported = 0;
  176.         while($ar_ob = $res->Fetch())
  177.         {
  178.             $fields = array(
  179.                 $ar_ob['XML_ID'],
  180.                 $ar_ob['NAME'],
  181.                 $ar_ob['PREVIEW_TEXT']
  182.                 );
  183.             foreach ($price_types as $type_id) {
  184.                 $fields[] = $ar_ob["CATALOG_PRICE_".$type_id];
  185.             }
  186.             $fields[] = $ar_ob["CATALOG_QUANTITY"];
  187.             array_walk_recursive($fields, function(&$var){
  188.                 if (is_string($var))
  189.                     $var = iconv('UTF-8', 'cp1251', $var);
  190.             });
  191.             fputcsv($fp, $fields, ';');
  192.             $exported++;
  193.         }
  194.         echo 'Exported products: '. $exported;
  195.     } else {
  196.         echo 'Error creating file: ' . $file;
  197.     }
  198. }
  199.  
  200. function import_orders() {
  201.     $import_columns = array(
  202.         "ID",
  203.         "PAYED",
  204.         "STATUS_ID",
  205.         "DATE_STATUS"
  206.     );
  207.     $import_columns = array_flip($import_columns);
  208.     $errors = array();
  209.     $file = '1c_exchange/orders_site2.csv';
  210.     $updated = 0;
  211.     if (($handle = fopen($file, "r")) !== FALSE) {
  212.         while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
  213.             array_walk_recursive($data, function(&$var){
  214.                 if (is_string($var))
  215.                     $var = iconv('cp1251', 'UTF-8', $var);
  216.             });
  217.             $result = false;
  218.             $arFields = array(
  219.                 "PAYED" => $data[ $import_columns["PAYED"] ],
  220.                 "STATUS_ID" => $data[ $import_columns["STATUS_ID"] ],
  221.                 "DATE_STATUS" => $data[ $import_columns["DATE_STATUS"] ],
  222.             );
  223.             $ID = $data[ $import_columns["ID"] ];
  224.  
  225.             $arOrder = CSaleOrder::GetByID($ID);
  226.             if ($arOrder) {
  227.                 $result = CSaleOrder::Update($ID, $arFields);
  228.             }
  229.            
  230.             if (!$result) {
  231.                 $errors[] = 'Error updating order #' . $ID;
  232.             } else {
  233.                 $updated++;
  234.             }
  235.         }
  236.         fclose($handle);
  237.         echo 'Updated orders: '. $updated . '<br>';
  238.         echo implode("<br>", $errors);
  239.     } else {
  240.         echo 'Error opening file: ' . $file;
  241.     }
  242. }
  243.  
  244. function export_orders() {
  245.  
  246.     $file = '1c_exchange/orders_export_site2.csv';
  247.     $fp = fopen($file, 'w');
  248.  
  249.     if ($fp) {
  250.         $db_sales = CSaleOrder::GetList();
  251.         $exported = 0;
  252.         while ($ar_sales = $db_sales->Fetch())
  253.         {
  254.             $username = $ar_sales['USER_LAST_NAME'] . ' ' . $ar_sales['USER_NAME'];
  255.  
  256.             $dbBasket = CSaleBasket::GetList(Array("ID"=>"ASC"), Array("ORDER_ID"=>$ar_sales["ID"]));
  257.             while ($ar_products = $dbBasket->Fetch())
  258.             {
  259.                 $summ = $ar_products['PRICE'] * (int)$ar_products['QUANTITY'];
  260.                 $fields = array(
  261.                     $ar_sales['ID'],
  262.                     $ar_sales['DATE_INSERT'],
  263.                     $ar_sales['USER_LOGIN'],
  264.                     $username,
  265.                     $ar_products['PRODUCT_XML_ID'],
  266.                     (int)$ar_products['QUANTITY'],
  267.                     $ar_products['NOTES'],
  268.                     $ar_products['PRICE'],
  269.                     $summ
  270.                 );
  271.                 array_walk_recursive($fields, function(&$var){
  272.                     if (is_string($var))
  273.                         $var = iconv('UTF-8', 'cp1251', $var);
  274.                 });
  275.                 fputcsv($fp, $fields, ';');
  276.             }
  277.             $exported++;
  278.         }
  279.         echo 'Exported orders: ' . $exported;
  280.     } else {
  281.         echo 'Error creating file: ' . $file;
  282.     }
  283. }
  284.  
  285. ?>
  286. <?
  287. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
  288. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement