$ar_Debug = array("TIMES"=>array(),"OTHER"=>array()); /* include service calculator functions */ require_once ( getenv("DOCUMENT_ROOT").'/bitrix/templates/work_copy/functions/service_calculator/functions.php'); CModule::IncludeModule('iblock'); if( (($programTO = intval($_REQUEST['programTO'] )) > 0) && (($chID = intval($_REQUEST["chID"]))>0) && (($toID = intval($_REQUEST["toID"]))>0) ){ ob_start(); $with_out_washing = ($_REQUEST["exclude_washing"] == "Y" )? true:false ; $works = GetTO ( $programTO, $chID, true , $with_out_washing); foreach( $works as $name => &$data ){ if ( $data["PROPERTY_J_TYPE_TO_VALUE"] == $toID ){ $data ["COST"] = calcWokrs ( $data["work"] , $programTO); $arWork = $data; } } $response = array (); $response ["title"] = getmessage("title"). ' - '. $arWork["NAME"]; $response ["table"] = DrawTO ( $arWork ); $ar_Debug["OTHER"] = ob_get_contents();
if ( ($programTO = intval($_REQUEST['programTO'] )) > 0 && ($chId = intval ( $_REQUEST['chassis'] )) > 0 && ($yw = intval ( $_REQUEST['years_of_work'] ) ) > 0 && ($ry = intval ( $_REQUEST['run_at_year'] ) ) >0 ){ $result = array (); if( $_REQUEST["chassis-type"] != "new" ){ $currentRun = intval($_REQUEST["mileage"]); } $with_out_washing = ($_REQUEST["exclude_washing"] == "Y" )? true:false ; $discount = floatval($_REQUEST["discount"]); try{ $result["TO"] = GetTO ( $programTO, $chId, true, $with_out_washing ); calcCostTOWorks( $result["TO"] ); countTO ( $result["TO"] , $yw*$ry, $currentRun ); calcByTo ( $result , $ry, $yw , $currentRun ); }catch(exception $e){ $e->getMessage(); } $result["RESULTS"]; } $path = $APPLICATION->GetDirProperty("path"); $menu_path = $_SERVER["DOCUMENT_ROOT"].$path."/menu.php"; include ( $menu_path ); ?>
/* 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)){
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; } }