Beispiel #1
0
/*
			if ($mass['status']!=25 && is_numeric($mass["millage"]))
				$ERRORS[]="Пробег выставляется только при статусе 'Пройден'";
			if ($mass['status']==25 && !is_numeric($mass["millage"]))
				$ERRORS[]="При статусе 'Пройден' необходимо указывать пробег";
			if ($mass['status']==25 && intval($mass["millage"])<0)
				$ERRORS[]="Пробег должен быть болше 0";
*/

			require( $_SERVER["DOCUMENT_ROOT"]."/service/calculator/function2.php" ); 
			
			$with_out_washing = true;
			if ( $_POST["wash"] == "Y" )
				$with_out_washing = false;
			$result["TO"] = GetTO(intval($_POST["shassi_id"])."", true, $with_out_washing );
			calcCostTOWorks( $result["TO"] );



			$cost=0;
			foreach ($result["TO"] as $to)
				if ($to["PROPERTY_J_TYPE_TO_VALUE"]==$_POST["type_to"])
				{
					$cost=$to["COST"];
					$new_name=$to["NAME"];
				}
			if ($cost<=0)
				$ERRORS[]="Ошибка расчёта стоимости";
			
			if (empty($ERRORS)){
				$result["enter"]="YES";
 function CreateTO($arFields)
 {
     $no_errors = array();
     // prepare params
     $arProps = self::GetProperties();
     $arFields = self::PrepareProperties($arFields);
     // Мойка - cntrct_washing - ID 87
     // изначально стоимость мойки включена в расчет
     $with_out_washing = false;
     if ($arFields["PROPERTY_VALUES"][87][0] == 24) {
         // ENUM ID- 23, XML_ID - Y
         // ENUM ID- 24, XML_ID - N
         $with_out_washing = true;
     }
     // Начальный пробег - cntrct_valid_from_mileage - id 80
     //		$cntrct_valid_from_mileage = intval( current($arFields["PROPERTY_VALUES"][80]) );
     $cntrct_valid_from_mileage = intval($arFields["PROPERTY_VALUES"][80]);
     //	Годовой пробег - cntrct_year_mileage - id 89
     $cntrct_year_mileage = intval($arFields["PROPERTY_VALUES"][89]);
     // Срок действия - cntrct_validity - ID 90
     //				$mass_valid = $arProps["cntrct_validity"]["ENUM_VALUES_LIST"];
     $arCntrctValidity = $arProps["cntrct_validity"]["ENUM_VALUES_LIST"];
     $period = 0;
     $arEnumItem = $arCntrctValidity[current($arFields["PROPERTY_VALUES"][90])];
     if (!empty($arEnumItem)) {
         $cntrct_validity = intval($arEnumItem["XML_ID"] / 12);
     }
     $final_mileage = $cntrct_valid_from_mileage + $cntrct_validity * $cntrct_year_mileage;
     /* подготавливаю данные по т/с и стоимости ТО */
     $arTO = array();
     $arSkVehicle = array();
     foreach ($arFields["PROPERTY_VALUES"][86] as $SK_VEHICLE_ID) {
         // $SK_VEHICLE_ID - ID элемента ИБлока "Транспортное средство" SK_VEHICLE
         $arSelect = array("IBLOCK_ID", "ID", "PROPERTY_*");
         $arFilter = array("IBLOCK_ID" => IBLOCK_SK_CHASSIS_ID, "ID" => $SK_VEHICLE_ID);
         $res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
         while ($ob = $res->GetNextElement()) {
             $arShassi = $ob->GetFields();
             $arShassi["PROPERTIES"] = $ob->GetProperties();
         }
         $arSkVehicle[$SK_VEHICLE_ID] = $arShassi;
     }
     $arShassi = current($arSkVehicle);
     self::ReportLog("" . __METHOD__ . " line: " . __LINE__ . " ID: " . $arFields["ID"], array($arSkVehicle, $arShassi));
     $include_file = getenv("DOCUMENT_ROOT") . '/bitrix/templates/work_copy/functions/service_calculator/functions.php';
     include_once $include_file;
     $arTO["TO"] = GetTO(intval($arShassi["PROPERTIES"]["vhcl_type"]["VALUE"]), true, $with_out_washing);
     calcCostTOWorks($arTO["TO"]);
     // подготовка параметров, для расчета величины "пробега" и типа ТО
     $min = false;
     $HasSingleTO = false;
     $IndexSingleTO = false;
     $SingleTOMelleage = false;
     $SingleTOShift = false;
     foreach ($arTO["TO"] as $ToIndex => $ToData) {
         /* межсервисный интервал */
         if (($min == false || $min > $ToData["PROPERTY_TO_MILEAGE_VALUE"]) && $ToData["PROPERTY_TO_ONCE_ENUM_ID"] != 5) {
             // $ToData["PROPERTY_TO_ONCE_ENUM_ID"]  == 5 ;// XML_ID - Y , VALUE - Да
             // $ToData["PROPERTY_TO_ONCE_ENUM_ID"]  == 6 ;// XML_ID - Y , VALUE - Да
             $min = $ToData["PROPERTY_TO_MILEAGE_VALUE"];
             $minIndex = $ToIndex;
             $ServiceIntervals = $ToData["PROPERTY_TO_MILEAGE_VALUE"];
         }
         if ($ToData["PROPERTY_TO_ONCE_ENUM_ID"] == 5) {
             $HasSingleTO = true;
             $IndexSingleTO = $ToIndex;
             $SingleTOMelleage = $ToData["PROPERTY_TO_MILEAGE_VALUE"];
             // $ToData["PROPERTY_TO_SHIFT_ENUM_ID"] == 37 ;// XML_ID - Y , VALUE - Да
             // $ToData["PROPERTY_TO_SHIFT_ENUM_ID"] == 38 ;// XML_ID - N , VALUE - Нет
             $SingleTOShift = $ToData["PROPERTY_TO_SHIFT_ENUM_ID"] == 37 ? true : false;
         }
     }
     /* пытаюсь расчитать величина пробега для Тех. осмотров */
     $current_mileage = $cntrct_valid_from_mileage;
     if ($HasSingleTO) {
         if ($SingleTOShift) {
             $TOMileages = self::calculateToRangesWithShift($current_mileage, $final_mileage, $arTO["TO"], $ServiceIntervals, $IndexSingleTO, $SingleTOMelleage);
         } else {
             $TOMileages = self::calculateToRangesWithOutShift($current_mileage, $final_mileage, $arTO["TO"], $ServiceIntervals, $IndexSingleTO, $SingleTOMelleage);
         }
     } else {
         $TOMileages = self::calculateToRangesSimple($current_mileage, $final_mileage, $arTO["TO"], $ServiceIntervals);
     }
     if (empty($TOMileages)) {
         $no_errors[] = "Не удалось произвести расчет работ по указанным условиям договора : \n" . $arProps["cntrct_valid_from_mileage"]["NAME"] . " - " . $cntrct_valid_from_mileage . "\n" . $arProps["cntrct_year_mileage"]["NAME"] . " - " . $cntrct_year_mileage . "\n" . $arProps["cntrct_validity"]["NAME"] . " - " . $arEnumItem["VALUE"];
     }
     //		self::ReportLog ( "". __METHOD__ ." line: ".__LINE__ ." ID: ".$arFields["ID"] , array( "current_mileage" => $current_mileage , "final_mileage"=>$final_mileage, "arTO" => $arTO["TO"] , "ServiceIntervals" => ServiceIntervals, "IndexSingleTO" => IndexSingleTO, "SingleTOMelleage" => $SingleTOMelleage );
     self::ReportLog("" . __METHOD__ . " line: " . __LINE__ . " ID: " . $arFields["ID"], array("arSkVehicle" => count($arSkVehicle), "TOMileages" => count($TOMileages), "no_errors" => $no_errors, "arProps" => $arProps));
     foreach ($arSkVehicle as $SK_VEHICLE_ID => $SkVehicleData) {
         foreach ($TOMileages as $MILEAGE => $ToData) {
             $arFilterTo = array("IBLOCK_ID" => IBLOCK_SK_TO_ID, "PROPERTY_TO_SK_ID" => $arFields["ID"], "PROPERTY_TO_TC_ID" => $SK_VEHICLE_ID, "PROPERTY_TO_MILEAGE_PLAN" => $MILEAGE, "PROPERTY_TO_TYPE_TO" => $ToData["PROPERTY_J_TYPE_TO_VALUE"]);
             $res = CIBlockElement::GetList(array(), $arFilterTo, false, false, array("IBLOCK_ID", "ID"));
             AddMessage2Log("{$toLog}", "FilterTo\n " . __METHOD__ . " line: " . __LINE__, array("FILTER" => $arFilterTo, "result" => $res->SelectedRowsCount()));
             if ($res->SelectedRowsCount() > 0) {
                 ob_start();
                 echo 'Запись для данных параметров уже создана. :#';
                 print_r($res->SelectedRowsCount());
                 print_r($arFilterTo);
                 print_r($ToData);
                 $toLog = ob_get_contents();
                 ob_end_clean();
                 AddMessage2Log("{$toLog}", "\n " . __FILE__ . " line : " . __METHOD__ . " line: " . __LINE__);
                 $no_errors[] = 'Запись для данных параметров уже создана.';
             } else {
                 global $USER;
                 $el = new CIBlockElement();
                 $PROP = array();
                 $PROP[99] = $arFields["ID"];
                 // to_sk_id			- Сервисный контракт
                 $PROP[100] = $SK_VEHICLE_ID;
                 // to_tc_id			- Транспортное средство
                 $PROP[101] = $MILEAGE;
                 // to_mileage_plan	- Пробег
                 $PROP[103] = $ToData["COST"];
                 // to_price 		- Итого
                 $PROP[104] = 27;
                 // to_status		- Статус
                 $PROP[105] = $arFields["PROPERTY_VALUES"][84];
                 // to_status		- Статус
                 $PROP[123] = $ToData["PROPERTY_J_TYPE_TO_VALUE"];
                 // to_type_to		- Тип ТО
                 $arLoadProductArray = array("MODIFIED_BY" => $USER->GetID(), "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => IBLOCK_SK_TO_ID, "PROPERTY_VALUES" => $PROP, "NAME" => $arFields["NAME"] . " " . strtoupper($SkVehicleData["VALUE"]), "ACTIVE" => "Y");
                 try {
                     if (!($PRODUCT_ID = $el->Add($arLoadProductArray))) {
                         ob_start();
                         print_r($arLoadProductArray);
                         print_r($arFields);
                         print_r($arFields["PROPERTY_VALUES"][84]);
                         print_r($el->LAST_ERROR);
                         $toLog = ob_get_contents();
                         ob_end_clean();
                         AddMessage2Log("{$toLog}", "throw Exception\n " . __FILE__ . " line : " . __METHOD__ . " line: " . __LINE__);
                         $no_errors[] = 'Не удалось создать запись ТО : ' . $el->LAST_ERROR;
                     }
                 } catch (Exception $e) {
                     $no_errors[] = $e->getMessage();
                     //						self::ReportLog ( "".__METHOD__." line: ".__LINE__, $e->getMessage(), true);
                 }
             }
         }
         self::ReportLog("" . __METHOD__ . " line: " . __LINE__, $no_errors, true);
     }
     if (!empty($no_errors)) {
         return $no_errors;
     } else {
         return true;
     }
 }