Files
votianng/html/service/price_request.php
2026-03-29 10:34:57 +02:00

345 lines
14 KiB
PHP

<?php
/*=======================================================================
*
* price_request.php
*
* Autor: Marc Vollmann
*
=======================================================================*/
include_once ("../include/mcglobal.inc.php");
include_once ("../include/caglobal.inc.php"); // For pricing and invoice-text only
// include_once ('../include/email/htmlMimeMail.php');
include_once ("../include/services_func.inc.php");
include_once ("../include/inc_parseXML.inc.php");
// include_once ("../include/inc_mtf_func.inc.php");
// include_once ("../include/inc_customer.inc.php");
// include_once ("../include/inc_job.inc.php");
// include_once ("../include/inc_vehicle.inc.php");
// include_once ("../include/inc_disposition.inc.php");
// include_once ("../include/inc_disposition_DEV.inc.php");
// include_once ("../geo/geocode.inc.php");
// Write logdata into log file
$currentTime = getDateTime("0");
$currentDate = getDateTime("3");
$debug = false;
$debugOut = "";
// $priceReq = file_get_contents('php://input');
// Check HTTP-Parameters
getSecHttpVars("1",array("f_act", "priceReq", "selectedLanguage"));
if ($priceReq == "") :
if (isset($argv[1])) :
$priceReq = $argv[1];
endif;
endif;
function priceRequestLogFile ($msg, $logLevel = 0) {
XMLRequestLogFile($msg, $logLevel, $logFile = "priceReq.log");
}
function getPrice_MC($zipcode1, $zipcode2, $cs_invmode = -1, $fuel_markup, $vht_id, $jb_ordertime, $hq_id) {
global $db;
if (strlen($zipcode1) == 5 && strlen($zipcode2) == 5 && is_numeric($zipcode1) && is_numeric($zipcode2)):
if ($cs_invmode > -1):
$cs_id = $cs_invmode * -1;
else:
$cs_id = 0;
endif;
// $cs_id decides about invmode
// if 0, then default invmode from hq_id is taken
// for Berlin, $cs_id directly takes invmode in negative form (in order to distinguish from ordinary cs_id, that always are postive)
// Grundpreis
// Servicetype-Name (Fahrrad etc.)
$srvt_name = $db->getOne(
"SELECT mt_value FROM metatype WHERE mt_sort = '$vht_id' AND mt_type = 'vehicletype'");
list ($grundpreis, $fd, $fpm, $customer_specific) =
saveServiceCosts("Grundpreis", $srvt_name, $hq_id, $cs_id, 0 /* $jb_id */, 0, $jb_ordertime, 0 /* count */, 1 /* $costsplit_count */, 1 /* $getPriceOnly */, false /* $jb_cash */, "0" /* $csc_id_payer */, 0 /* $jb_storno */, false /* zipcode1 */, false /* zipcode2 */, false, $fuel_markup, $vht_id);
//$fullPrice += $fp * ((100-$fd)/100);
//$discount_sign = ($fd > 0 || $customer_specific || $discount_sign == "*" ? "*" : "");
// PLZ-Preis
list ($plzpreis, $fd, $fpm, $customer_specific) =
saveServiceCosts($zipcode1, $zipcode2, $hq_id, $cs_id, 0 /* $jb_id */, 0, $jb_ordertime, 0 /* count */, 1 /* $costsplit_count */, 1 /* $getPriceOnly */, false /* $jb_cash */, "0" /* $csc_id_payer */, 0 /* $jb_storno */, false /* zipcode1 */, false /* zipcode2 */, true, $fuel_markup, $vht_id);
//$fullPrice += $fp * ((100-$fd)/100);
//$discount_sign = ($fd > 0 || $customer_specific || $discount_sign == "*" ? "*" : "");
else:
$zipcode1 = "";
$zipcode2 = "";
$grundpreis = 0;
$plzpreis = 0;
endif;
return array($grundpreis, $plzpreis);
}
$priceReq = urldecode($priceReq);
$priceReq = str_replace("'", "", $priceReq);
$priceReq = mcEncode($priceReq);
$priceReq = str_replace("'", "", $priceReq);
// echo $priceReq . "<br><br>";
priceRequestLogFile($currentTime);
priceRequestLogFile($priceReq);
if ($selectedLanguage == "" || !is_numeric($selectedLanguage)) : $selectedLanguage = "1"; endif; // Default in English
$languageSelected = $selectedLanguage;
getLanguage(__FILE__);
getCurrentScript(__FILE__);
$err = array();
$priceResponse = "";
$xmlPrice = "";
// ---------------------------------------------------------------------------
// GLOBAL MODE OF USAGE
$globalParUseRelatedCustomer = getParameterValue("0", "GLOBAL_USE_RELATED_CUSTOMER", "0");
// *** Parse request ***
$priceArray = xml2array($priceReq);
if ($debug) :
print_r($priceArray); echo "<br><br><br>";
endif;
// *** Convert result array to usable parameters ***
// Authentication data
$csEid = convertSpecial($priceArray["xml"]["costs"]["auth"]["customer"]);
$csId = getFieldValueFromId("customer","cs_eid",$csEid,"cs_id");
$usrAccount = convertSpecial($priceArray["xml"]["costs"]["auth"]["account"]);
$usrPassword = convertSpecial($priceArray["xml"]["costs"]["auth"]["password"]);
$sessionId = convertSpecial($priceArray["xml"]["costs"]["auth"]["session_id"]);
// Optional customer group data (needed to find e.g. an article price automatically). Has to be set explicitly, because a customer could belong to more groups !!!!
$csGroupId = convertSpecial($priceArray["xml"]["costs"]["auth"]["group_no"]);
$csGroupName = convertSpecial($priceArray["xml"]["costs"]["auth"]["group_name"]);
if ($csGroupId != "" && is_numeric($csGroupId)) :
$csGroupName = getFieldValueFromId("groups","grp_id",$csGroupId,"grp_name");
elseif ($csGroupName != "") :
$csGroupId = getFieldValueFromId("groups","grp_name",$csGroupName,"grp_id");
endif;
// Reset customer group data if it could not be identified
if ($csGroupId == "" || $csGroupName == "") :
$csGroupId = "";
$csGroupName = "";
endif;
$debugOut .= "usrAccount: " . $usrAccount . "<br>\n";
$debugOut .= "usrPassword: " . $usrPassword . "<br>\n";
$debugOut .= "sessionId: " . $sessionId . "<br>\n";
if (checkRequestAuthenticationData($usrAccount, $usrPassword, $sessionId, $csId)) :
$debugOut .= "Authentication okay!<br><br>\n";
// Data
$hqId = getFieldValueFromId("customer","cs_id",$csId,"hq_id");
$cscName = convertSpecial($priceArray["xml"]["costs"]["auth"]["costcenter_name"]);
$cscId = "";
if ($cscName != "") :
$cscId = getFieldValueFromClause("costcenter","csc_id","cs_id = '" . $csId . "' AND csc_name = '" . $cscName . "'");
endif;
if ($cscId == "" || !is_numeric($cscId)) :
$cscId = getFieldValueFromClause("costcenter","csc_id","cs_id = '" . $csId . "' AND isnull(csc_pre_id)"); // Root costcenter
endif;
// Get job or costs data
$operation = convertSpecial($priceArray["xml"]["costs"]["operation"]);
$serviceFunction = convertSpecial($priceArray["xml"]["costs"]["service_function"]);
$debugOn = convertSpecial($priceArray["xml"]["costs"]["debug_on"]);
$vhtId = convertSpecial($priceArray["xml"]["costs"]["vehicle_type_id"]);
$zipcodeFrom = convertSpecial($priceArray["xml"]["costs"]["zipcode_from"]);
$zipcodeTo = convertSpecial($priceArray["xml"]["costs"]["zipcode_to"]);
$day = convertSpecial($priceArray["xml"]["costs"]["day"]);
$month = convertSpecial($priceArray["xml"]["costs"]["month"]);
$year = convertSpecial($priceArray["xml"]["costs"]["year"]);
$priceMode = convertSpecial($priceArray["xml"]["costs"]["price_mode"]);
$debugOut .= "operation: " . $operation . "<br>\n";
$debugOut .= "serviceFunction: " . $serviceFunction . "<br>\n";
$debugOut .= "vhtId: " . $vhtId . "<br>\n";
$debugOut .= "zipcodeFrom: " . $zipcodeFrom . "<br>\n";
$debugOut .= "zipcodeTo: " . $zipcodeTo . "<br>\n";
$debugOut .= "day: " . $day . "<br>\n";
$debugOut .= "month: " . $month . "<br>\n";
$debugOut .= "year: " . $year . "<br>\n";
$debugOut .= "priceMode: " . $priceMode . "<br>\n";
// Init
$currentTimestamp = getDateTime("0");
$currentDay = getDateTime("3"); // "Y-m-d"
$currentTime = getDateTime("4"); // Current time ("H:i:s")
$currYear = getDateTime("year"); // Current year
// Check <day>, <month> and <year> here
// ...
$cDateTime = $currentTimestamp;
$retVal = 0;
$retVal_1 = 0;
$retVal_2 = 0;
if ($serviceFunction == "") : $serviceFunction = "default"; endif;
$zipcodeFrom = pad($zipcodeFrom, 5);
$zipcodeTo = pad($zipcodeTo, 5);
if ($priceMode == "") : $priceMode = "1"; endif;
if (!$debug && $debugOn == "ON" || $debugOn == "YES") :
$debug = true;
endif;
if ($operation == "SET") :
// TO BE DONE!
else :
if ($serviceFunction == "default" || $serviceFunction == "zipcode") :
// Get IDs from zipcodes
// $srvpIdFrom = getFieldValueFromId("phoenix.serviceplz", "srvp_plz", $zipcodeFrom, "srvp_id");
// $srvpIdTo = getFieldValueFromId("phoenix.serviceplz", "srvp_plz", $zipcodeTo, "srvp_id");
// $retVal_1 = getZipcodeServiceValues($srvpIdFrom, $srvpIdTo, $csId, $hqId, $cDateTime, $priceMode, $vhtId);
$csInvMode = getFieldValueFromId("phoenix.customer", "cs_id", $csId, "cs_invmode");
$fuelMarkup = 0;
// if ($srvpIdFrom != "" && $srvpIdTo != "") :
if ($zipcodeFrom != "" && $zipcodeTo != "") :
$mode = "1";
$retArr = getPrice_MC($zipcodeFrom, $zipcodeTo, $csInvMode, $fuelMarkup, $vhtId, $cDateTime, $hqId);
$retVal_1 = $retArr[0];
$retVal_2 = $retArr[1];
if (is_numeric($retVal_1) && is_numeric($retVal_2)):
$retVal = $retVal_1 + $retVal_2;
endif;
/*
$retVal = getZipCodeServiceValuesWrapper($srvpIdFrom, $srvpIdTo, $csId, $hqId, $cDateTime, $mode, $vhtId);
if ($retVal == "0") :
$retVal = getZipCodeServiceValuesWrapper($srvpIdFrom, $srvpIdTo, $csId, $hqId, $cDateTime, $mode);
if ($retVal == "0") :
$retVal = getZipCodeServiceValuesWrapper($srvpIdFrom, $srvpIdTo, "0", $hqId, $cDateTime, $mode, $vhtId);
if ($retVal == "0") :
$retVal = getZipCodeServiceValuesWrapper($srvpIdFrom, $srvpIdTo, "0", $hqId, $cDateTime, $mode);
endif;
endif;
endif;
*/
endif;
endif;
// Check for ERRORS
if ($retVal != "") :
$xmlPrice .= "<costs>";
$xmlPrice .= "<date>" . substr($cDateTime, 0, 10) . "</date>";
$xmlPrice .= "<vehicle_type_id>" . $vhtId . "</vehicle_type_id>";
$xmlPrice .= "<zipcode_from>" . $zipcodeFrom . "</zipcode_from>";
$xmlPrice .= "<zipcode_to>" . $zipcodeTo . "</zipcode_to>";
$xmlPrice .= "<price_mode>" . $priceMode . "</price_mode>";
$xmlPrice .= "<price_value_1>" . $retVal_1 . "</price_value_1>";
$xmlPrice .= "<price_value_2>" . $retVal_2 . "</price_value_2>";
$xmlPrice .= "<price_value_sum>" . $retVal . "</price_value_sum>";
$xmlPrice .= "</costs>";
else :
$err[] = array("103", getLngt("Kein Preis!"));
endif;
$debugOut .= "<br><br>xmlPrice: " . $xmlPrice . "<br>\n";
endif;
else :
// Authentication data not ok
$err[] = array("101", getLngt("Die Authentifizierungsdaten sind nicht in Ordnung."));
endif;
// print_r($err);
// Check existence of at least one error
$errLen = count($err);
// Output
$priceResponse .= "<xml>";
if ($errLen > 0) :
priceRequestLogFile("ERRORS", 1);
$priceResponse .= "<state>NOT OK</state>";
$priceResponse .= "<errors>";
for ($i = 0; $i < $errLen; $i++) :
$priceResponse .= "<error>";
$priceResponse .= "<err_no>" . $err[$i][0] . "</err_no>";
$priceResponse .= "<err_desc><![CDATA[" . mcEncode($err[$i][1]) . "]]></err_desc>";
$priceResponse .= "</error>";
if ($debug) :
$priceResponse .= "<debug>" . $debugOut . "</debug>";
endif;
priceRequestLogFile($err[$i][0] . " : " . mcEncode($err[$i][1]), 1);
endfor;
$priceResponse .= "</errors>";
else :
$priceResponse .= "<state>OK</state>" . $xmlPrice;
if ($debug) :
$priceResponse .= "<debug>" . $debugOut . "</debug>";
endif;
endif;
$priceResponse .= "</xml>";
// Log entries
priceRequestLogFile($priceResponse); // Write response into log
priceRequestLogFile("___________________________________________________________________________________");
// Return output
echo $priceResponse;
/*
// REQUEST
<xml>
<costs> // Preisanfrage
<auth> // Identifikation des Kunden
<customer>...</customer> // Kundennummer (EID) {"STBxxxxxx", ...} => csc_id_payer
<account>...</account> // Eingetragener Benutzer für den Kunden => cs.cs_admin => emp.emp_id => emp.usr_id => usr.usr_id => usr.usr_account
<password>...</password> // Passwort für den Benutzer => usr.usr_password
<session_id>...</session_id> // Zusätzliche Session-ID, die mit dem Kunden ausgehandelt wurde [mandatory]
<costcenter_name>...</costcenter_name> // Kostenstellenname {"abcd", "efgh", ...} => Mapping csc_id [optional]
<group_no>...</group_no> // Nummer der Kundengruppe (Bei einer automatischen Preisfindung muss entweder <group_no> oder <group_name> gesetzt sein)
<group_name>...</group_name> // Name der Kundengruppe (Bei einer automatischen Preisfindung muss entweder <group_name> oder <group_no> gesetzt sein)
</auth>
<debug_on>...</debug_on> // Activates debug output ("ON" or "YES")
<operation>GET|SET</operation> // Operation (GET or SET costs(s), default is "GET" if emty tag)
<service_function>...</service_function> // Leer <=> Preisermittlung nach Kundeneinstellungen | "zipcode" <=> PLZ-Preis | ....
<vehicle_type_id>...</vehicle_type_id> // ID des Fahrzeugtyps
<zipcode_from>...</zipcode_from> // Start-PLZ
<zipcode_to>...</zipcode_to> // Ziel-PLZ
<day>...</day> // Tag
<month>...</month> // Monat
<year>...</year> // Jahr
<price_mode>...</price_mode> // Preismodus (Leer oder "1" = Preis | "0" = Rabatt)
</costs>
</xml>
// RESPONSE for GET
<xml>
<state>OK</state>
<costs>
<date>....</date> // Angefordeter Tag
<vehicle_type_id>....</vehicle_type_id> // ID des Fahrzeugtyps
<zipcode_from>....</zipcode_from> // Start-PLZ
<zipcode_to>....</zipcode_to> // Ziel-PLZ
<price_mode>....</price_mode> // Preismodus (Leer oder "1" = Preis | "0" = Rabatt)
<price_value>....</price_value> // Preis
</costs>
</xml>
*/
?>