0) || (isset($_copy_jobs_flag_ori) && $_copy_jobs_flag_ori == true)): $_tour_table = $dbh_tr; else: $_tour_table = "tour_backup"; endif; // Tour-Daten holen $sqlquery = "SELECT csc_id, tr_comp, tr_person, tr_remark, tr_hsno, ad_id, tr_status, tr_ware_from_to, tr_commission_no, tr_mediationarea_id, tr_status, tr_sign, tr_signname, tr_finishtime, tr_id " . "FROM $_tour_table WHERE jb_id = '$jb_id' AND tr_sort = '$tr_sort'"; // $result = $db->dbQ($sqlquery); $result = $db->query($sqlquery); if ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): $csc_id = $row["csc_id"]; $tr_comp = $row["tr_comp"]; $tr_person = $row["tr_person"]; $tr_remark = $row["tr_remark"]; $tr_hsno = $row["tr_hsno"]; $tr_status = $row["tr_status"]; $tr_ware_from_to = $row["tr_ware_from_to"]; $tr_commission_no = $row["tr_commission_no"]; $tr_mediationarea_id = $row["tr_mediationarea_id"]; $tr_status = $row["tr_status"]; $tr_sign = $row["tr_sign"]; $tr_signname = $row["tr_signname"]; $tr_finishtime = $row["tr_finishtime"]; $tr_id = $row["tr_id"]; $ad_id = $row["ad_id"]; endif; // $row = $db->getRow($sqlquery); // if (DB::isError($row)) reportDie ("$PHP_SELF: '$sqlquery'" . $row->getMessage()); // Adress-Daten holen list($ad_street, $ad_zipcode, $ad_city, $ad_country) = getFieldsValueFromId("address", "ad_id", $ad_id, array("ad_street", "ad_zipcode", "ad_city", "ad_country")); // if (!(isset($_copy_jobs_flag) && $_copy_jobs_flag == true)): // else: $tr_comp = my_str_check($tr_comp); $tr_person = my_str_check($tr_person); $ad_street = my_str_check($ad_street); $tr_hsno = my_str_check($tr_hsno); $ad_zipcode = my_str_check($ad_zipcode); $ad_city = my_str_check($ad_city); $ad_country = my_str_check($ad_country); $tr_remark = my_str_check($tr_remark); $tr_mediationarea_id = my_str_check($tr_mediationarea_id); $tr_sign = my_str_check($tr_sign); // endif; return(array($csc_id, $tr_comp, $tr_person, $ad_street, $tr_hsno, $ad_zipcode, $ad_city, $ad_country, $tr_remark, $tr_status, $tr_ware_from_to, $tr_commission_no, $tr_mediationarea_id, $tr_status, $tr_sign, $tr_signname, $tr_finishtime, $tr_id)); } function getJobChildren($jb_id, $dbh_jb, $no_dates = "false") { global $db, $phpVersion; $tmp_add_jb_ids = ""; $tmp_add_sids = ""; $tmp_add_prices = ""; $jb_totalprice = ""; // Alle Unteraufträge dieses Auftrages finden $sqlquery = "SELECT jb_id, cr_sid, jb_fixprice FROM $dbh_jb WHERE jb_id_parent = '$jb_id'"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // Der Unterauftrag hat noch einen eigenen Unterauftrag (Gegenbeleg) $sqlquery = "SELECT jb_id FROM $dbh_jb WHERE jb_id_parent = '" . $row['jb_id'] . "'"; // $result = $db->dbQ($sqlquery); $result = $db->query($sqlquery); // $rowSub = $result->fetch_assoc(); $rowSub = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow()); // Daten zusammenstellen, die an den Calculator durchgereicht werden if ($tmp_add_jb_ids != "") $tmp_add_jb_ids .= "¹"; if ($no_dates != "true") // in dem Fall "true" wird eine Konserve geladen, die natürlich mit leeren Jobnummern erstellt werden muss! $tmp_add_jb_ids .= $row['jb_id'] . "²" . $rowSub["jb_id"]; if ($tmp_add_sids != "") $tmp_add_sids .= "¹"; $tmp_add_sids .= $row['cr_sid']; $jb_fixprice = $row['jb_fixprice']; if ($jb_fixprice == 0) $jb_fixprice = ""; if ($jb_fixprice != 0) $jb_fixprice = str_replace(".", ",", sprintf("%01.2f", $jb_fixprice)); if ($tmp_add_prices != "") $tmp_add_prices .= "¹"; $tmp_add_prices .= $jb_fixprice; endwhile; $res->free(); return(array($tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices)); } function updateJobChildren($jb_id, $jb_finishtime, $cr_id, $cr_sid) { global $db, $phpVersion; // Alle Unteraufträge dieses Auftrages finden die Gegenbelege anpassen $sqlquery = "SELECT jb_id, cr_sid FROM job WHERE jb_id_parent = '$jb_id'"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // Der Unterauftrag hat noch einen eigenen Unterauftrag (Gegenbeleg) $sqlquery = "SELECT jb_id FROM job WHERE jb_id_parent = '" . $row['jb_id'] . "'"; $rowSub = $db->getRow($sqlquery); if (DB::isError($rowSub)) reportDie ("$PHP_SELF: '$sqlquery'" . $rowSub->getMessage()); // beim gefundenen Job das Fahrzeug ändern ... updateStmt("job", "jb_id", $rowSub['jb_id'], array("cr_id", $cr_id, "cr_sid", $cr_sid, "jb_finishtime", $jb_finishtime)); endwhile; $res->free(); } function deleteJobChildren($jb_id) { global $db, $phpVersion; if (existsEntry("job", array("jb_id", $jb_id))) { // Alle Unteraufträge dieses Auftrages finden und löschen $sqlquery = "SELECT jb_id FROM job WHERE jb_id_parent = '$jb_id'"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // Der Unterauftrag hat noch einen eigenen Unterauftrag (Gegenbeleg) $sqlquery = "SELECT jb_id FROM job WHERE jb_id_parent = '" . $row['jb_id'] . "'"; $rowSub = $db->getRow($sqlquery); if (DB::isError($rowSub)) reportDie ("$PHP_SELF: '$sqlquery'" . $rowSub->getMessage()); // die beiden gefunden Jobs löschen ... deleteStmt("job", "jb_id = " . $row['jb_id']); deleteStmt("tourservice", "jb_id = " . $row['jb_id'] ); deleteStmt("tour", "jb_id = " . $row['jb_id'] ); deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $row['jb_id'] . " AND gdc_gen_fieldname = 'jb_toll'"); deleteStmt("job", "jb_id = " . $rowSub['jb_id']); deleteStmt("tourservice", "jb_id = " . $rowSub['jb_id']); deleteStmt("tour", "jb_id = " . $rowSub['jb_id']); deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $rowSub['jb_id'] . " AND gdc_gen_fieldname = 'jb_toll'"); endwhile; $res->free(); } } function copyTourData($jb_id, $jb_id_target) { global $db; $i = 1; do { if (existsEntry("tour", array("jb_id", $jb_id, "tr_sort", $i))): $tourFound = 1; $sqlquery = "SELECT csc_id, tr_comp, tr_person, tr_phone, tr_remark, tr_hsno, ad_id, tr_status, tr_ware_from_to, tr_commission_no, tr_mediationarea_id " . "FROM tour WHERE jb_id = '$jb_id' AND tr_sort = '$i'"; $row = $db->getRow($sqlquery); if (DB::isError($row)) reportDie ("$PHP_SELF: '$sqlquery'" . $row->getMessage()); if (existsEntry("tour", array("jb_id", $jb_id_target, "tr_sort", $i))): deleteStmt("tour", "jb_id = $jb_id_target AND tr_sort = $i" . $tmp_add_jb_idsArr[$i]); endif; insertStmt("tour", array("jb_id", $jb_id_target, "tr_sort", $i, "csc_id", $row["csc_id"], "tr_comp", my_str_check($row["tr_comp"]), "tr_person", my_str_check($row["tr_person"]), "tr_phone", my_str_check($row["tr_phone"]), "tr_remark", my_str_check($row["tr_remark"]), "tr_hsno", my_str_check($row["tr_hsno"]), "tr_status", "1", "tr_ware_from_to", $row["tr_ware_from_to"], "tr_commission_no", my_str_check($row["tr_commission_no"]), "tr_mediationarea_id", $row["tr_mediationarea_id"], "ad_id", $row["ad_id"])); else: $tourFound = 0; endif; $i++; } while ($tourFound == 1); } function saveJobChildren($jb_id, $jb_dataArr, $tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices, $jb_markup, $tmp_discount_rate, $jb_serviceprice) { global $db, $hq_id; if (getParameterValue("0", "INV_CHILDREN_DISCOUNT", $hq_id) != "1") $tmp_discount_rate = 0; $tmp_add_jb_idsArr = array_filter(explode("¹", $tmp_add_jb_ids)); $maxcount = count($tmp_add_jb_idsArr); $tmp_add_sidsArr = array_filter(explode("¹", $tmp_add_sids)); if (count($tmp_add_sidsArr) > $maxcount) $maxcount = count($tmp_add_sidsArr); $tmp_add_pricesArr = array_filter(explode("¹", $tmp_add_prices)); if (count($tmp_add_pricesArr) > $maxcount) $maxcount = count($tmp_add_pricesArr); $jobHasChildren = false; if ($maxcount > 0): // die Datumse... $jb_ordertime = getFieldValueFromId("job", "jb_id", $jb_id, "jb_ordertime"); $jb_taketime = getFieldValueFromId("job", "jb_id", $jb_id, "jb_taketime"); $jb_finishtime = getFieldValueFromId("job", "jb_id", $jb_id, "jb_finishtime"); $jb_invtext_cr = getFieldValueFromId("job", "jb_id", $jb_id, "jb_invtext_cr"); $hq_id = getFieldValueFromId("job", "jb_id", $jb_id, "hq_id"); $today = getdate(); $jb_booktime = $today['year'] . "-" . $today['mon'] . "-" . $today['mday'] . " " . $today['hours'] . ":" . $today['minutes'] . ":" . $today['seconds']; $formattedLine = "Unternehmerverrechnung zu Auftrag Nr. " . $jb_id; while (strlen($formattedLine) < getParameterValue("0", "INV_MAXCOLS_EXPORT", $hq_id)): $formattedLine .= " "; endwhile; // Rechnungste der Unteraufträge, Datumse hinzufügen array_push ($jb_dataArr, "jb_invtext", $formattedLine . "\n" . (getParameterValue("0", "INV_CHILD_NOFREETEXT", $hq_id) == '1' ? my_str_check($jb_invtext_cr) : ""), "jb_ordertime", $jb_ordertime, "jb_taketime", $jb_taketime, "jb_finishtime", $jb_finishtime, "jb_booktime", $jb_booktime); // Daten des Hauptunternehmers für Belastungen $main_cr_sid = getFieldValueFromId("job", "jb_id", $jb_id, "cr_sid"); $main_cr_id = getFieldValueFromId("job", "jb_id", $jb_id, "cr_id"); // Der Komplettbetrag der Maut wird (vorerst) nur für den ersten Child-Auftrag gespeichert $jb_toll = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $jb_id . " AND gdc_gen_fieldname = 'jb_toll'"); for ($i = 0; $i < $maxcount; $i++): // jb_id für Beleg und Gegenbeleg extrahieren $tmp_add_jb_idsSubArr = array_filter(explode("²", $tmp_add_jb_idsArr[$i])); // Preis formatieren $tmp_add_pricesArr[$i] = (float) str_replace(",", ".", $tmp_add_pricesArr[$i]); // get cr_id from cr_sid $tmp_cr_id = getFieldValueFromId("couriervehicle", "crvh_sid", $tmp_add_sidsArr[$i], "cr_id"); $jb_subtotal = round($tmp_add_pricesArr[$i] * (1 - ($tmp_discount_rate / 100)), 2); $jb_totalprice = round($jb_subtotal * (1 + ($jb_markup / 100)), 2); $jb_subtotal += $jb_serviceprice; $jb_totalprice += $jb_serviceprice; $jb_cr_price_sum += $jb_totalprice; // prepare data for positive and negative jobs $tmp_jb_dataArr1 = array_merge($jb_dataArr, array("csc_id_payer", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "jb_totalprice", $jb_totalprice, "jb_cr_price", $jb_totalprice, "jb_fixprice", $tmp_add_pricesArr[$i], "jb_subtotalprice", $jb_subtotal, "jb_serviceprice", $jb_serviceprice, "jb_markup", $jb_markup, "cr_id", $tmp_cr_id, "cr_sid", $tmp_add_sidsArr[$i], "cr_id_order", $tmp_cr_id, "jb_id_parent", $jb_id, "jb_createtime", date("Y-m-d H:i:s"))); $tmp_jb_dataArr2 = array_merge($jb_dataArr, array("csc_id_payer", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "jb_totalprice", ($jb_totalprice * -1), "jb_cr_price", ($jb_totalprice * -1), "jb_fixprice", ($tmp_add_pricesArr[$i] * -1), "jb_subtotalprice", ($jb_subtotal * -1), "jb_serviceprice", ($jb_serviceprice * -1), "jb_markup", $jb_markup, "cr_id", $main_cr_id, "cr_sid", $main_cr_sid, "cr_id_order", $main_cr_id, "jb_createtime", date("Y-m-d H:i:s"))); $tmp_tourservice_dataArr1 = array("csc_id", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "tr_sort", "0", "srv_id", "0", "trs_srv_name", "Fixpreis", "srvt_id", "0", "trs_srvt_name", "", "trs_price", round($tmp_add_pricesArr[$i] * (1 + ($jb_markup / 100)), 2), "trs_discount", $tmp_discount_rate); $tmp_tourservice_dataArr2 = array("csc_id", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "tr_sort", "0", "srv_id", "0", "trs_srv_name", "Fixpreis", "srvt_id", "0", "trs_srvt_name", "", "trs_price", (round($tmp_add_pricesArr[$i] * (1 + ($jb_markup / 100)), 2) * -1), "trs_discount", $tmp_discount_rate); $tmp_tourservice_dataArr11 = array(); $tmp_tourservice_dataArr21 = array(); if ($jb_serviceprice > 0) { $tmp_tourservice_dataArr11 = array("csc_id", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "tr_sort", "0", "srv_id", "0", "trs_srv_name", "Servicepreis", "srvt_id", "0", "trs_srvt_name", "", "trs_price", $jb_serviceprice, "trs_discount", $tmp_discount_rate); $tmp_tourservice_dataArr21 = array("csc_id", getParameterValue("0", "CSC_ID_PAYER_CALCULATOR", $hq_id), "tr_sort", "0", "srv_id", "0", "trs_srv_name", "Servicepreis", "srvt_id", "0", "trs_srvt_name", "", "trs_price", ($jb_serviceprice * -1), "trs_discount", $tmp_discount_rate); } // write / update / delete jobs if ($tmp_add_jb_idsArr[$i] == "" && $tmp_add_sidsArr[$i] != ""): // neuer Kinder-Job -> neuer Auftrag // Gutschrift beim Sub-Unternehmer insertStmt("job", $tmp_jb_dataArr1); $jbIdNew = getLastInsertId(); array_push ($tmp_tourservice_dataArr1, "jb_id", $jbIdNew); insertStmt("tourservice", $tmp_tourservice_dataArr1); if (count($tmp_tourservice_dataArr11) > 0) { array_push ($tmp_tourservice_dataArr11, "jb_id", $jbIdNew); insertStmt("tourservice", $tmp_tourservice_dataArr11); } copyTourData($jb_id, $jbIdNew); if ($i == 0 && $jb_toll != ""): insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jbIdNew, "gdc_gen_fieldname", "jb_toll", "gdc_content", trim($jb_toll), "gdc_context", '')); endif; // Belastung beim Haupt-Unternehmer array_push ($tmp_jb_dataArr2, "jb_id_parent", $jbIdNew); insertStmt("job", $tmp_jb_dataArr2); $jbIdNew = getLastInsertId(); array_push ($tmp_tourservice_dataArr2, "jb_id", $jbIdNew); insertStmt("tourservice", $tmp_tourservice_dataArr2); if (count($tmp_tourservice_dataArr12) > 0) { array_push ($tmp_tourservice_dataArr12, "jb_id", $jbIdNew); insertStmt("tourservice", $tmp_tourservice_dataArr12); } copyTourData($jb_id, $jbIdNew); if ($i == 0 && $jb_toll != ""): insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jbIdNew, "gdc_gen_fieldname", "jb_toll", "gdc_content", trim($jb_toll) * -1, "gdc_context", '')); endif; // und merken $jobHasChildren = true; endif; if ($tmp_add_jb_idsArr[$i] != "" && $tmp_add_sidsArr[$i] == ""): // alter Kinder-Job wurde gelöscht -> Auftrag löschen // Gutschrift löschen deleteStmt("job", "jb_id = " . $tmp_add_jb_idsSubArr[0]); deleteStmt("tourservice", "jb_id = " . $tmp_add_jb_idsSubArr[0]); deleteStmt("tour", "jb_id = " . $tmp_add_jb_idsSubArr[0]); deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $tmp_add_jb_idsSubArr[0] . " AND gdc_gen_fieldname = 'jb_toll'"); // Belastung löschen deleteStmt("job", "jb_id = " . $tmp_add_jb_idsSubArr[1]); deleteStmt("tourservice", "jb_id = " . $tmp_add_jb_idsSubArr[1]); deleteStmt("tour", "jb_id = " . $tmp_add_jb_idsSubArr[1]); deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $tmp_add_jb_idsSubArr[1] . " AND gdc_gen_fieldname = 'jb_toll'"); endif; if ($tmp_add_jb_idsArr[$i] != "" && $tmp_add_sidsArr[$i] != ""): // alter Kinder-Job, könnte aber geändert worden sein -> Auftrag updaten // Gutschrift updaten updateStmt("job", "jb_id", $tmp_add_jb_idsSubArr[0], $tmp_jb_dataArr1); updateStmt("tourservice", "jb_id", $tmp_add_jb_idsSubArr[0], $tmp_tourservice_dataArr1, "trs_srv_name = 'Fixpreis'"); deleteStmt("tourservice", "jb_id = " . $tmp_add_jb_idsSubArr[0] . " AND trs_srv_name = 'Servicepreis'"); if (count($tmp_tourservice_dataArr11) > 0) { array_push ($tmp_tourservice_dataArr11, "jb_id", $tmp_add_jb_idsSubArr[0]); insertStmt("tourservice", $tmp_tourservice_dataArr11); } copyTourData($jb_id, $tmp_add_jb_idsSubArr[0]); // 31.08.2021: Ein updateStmt auf jb_toll reicht nicht, wenn es jb_toll noch gar nicht gab! // Deshalb erst löschen (falls doch schon da), dann neu anlegen deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $tmp_add_jb_idsSubArr[0] . " AND gdc_gen_fieldname = 'jb_toll'"); if ($i == 0 && $jb_toll != ""): insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $tmp_add_jb_idsSubArr[0], "gdc_gen_fieldname", "jb_toll", "gdc_content", trim($jb_toll), "gdc_context", '')); endif; // updateStmt("genericdatacontainer", "gdc_obj_id", $tmp_add_jb_idsSubArr[0], array("gdc_content", trim($jb_toll)) ,"gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_toll'"); // Belastung updaten updateStmt("job", "jb_id", $tmp_add_jb_idsSubArr[1], $tmp_jb_dataArr2); updateStmt("tourservice", "jb_id", $tmp_add_jb_idsSubArr[1], $tmp_tourservice_dataArr2, "trs_srv_name = 'Fixpreis'"); deleteStmt("tourservice", "jb_id = " . $tmp_add_jb_idsSubArr[1] . " AND trs_srv_name = 'Servicepreis'"); if (count($tmp_tourservice_dataArr21) > 0) { array_push ($tmp_tourservice_dataArr21, "jb_id", $tmp_add_jb_idsSubArr[2]); insertStmt("tourservice", $tmp_tourservice_dataArr21); } copyTourData($jb_id, $tmp_add_jb_idsSubArr[1]); updateStmt("genericdatacontainer", "gdc_obj_id", $tmp_add_jb_idsSubArr[1], array("gdc_content", trim($jb_toll) * -1) ,"gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_toll'"); // und merken $jobHasChildren = true; endif; endfor; endif; // Wert "-1" in Feld "jb_id_parent" schreiben, damit die Anzeige in den Auftragslisten vereinfacht wird if ($jobHasChildren) updateStmt("job", "jb_id", $jb_id, array("jb_id_parent", -1, "jb_cr_price", $jb_cr_price_sum)); else updateStmt("job", "jb_id", $jb_id, array("jb_id_parent", 0)); } function saveJobInsurance($jb_id_ori, $csc_id_payer, $vht_id, $jb_ordertime, $jb_value_of_goods, $jb_insurance_rate, $special_case) { global $db, $hq_id, $usr_id; // $jb_id_pattern = 0; // $insurance_factor = 0; // Wenn größer als Bus, dann nicht möglich?!? // Kein Fuhrlohn? //STB972105 => getParameterValue("0", "MASK_INSURANCE_DEBITOR", $hq_id) //Konserven für //PKW (PKW / Kombi) 17623966 //Kastenwagen (Kastenwagen / Bus) 18882311 //Berechnung automatisch statt Taschenrechner // bis 9999,99 Euro = Auftragsnr. in Dispo Info if ($jb_value_of_goods == "" || $jb_value_of_goods == 0 || $jb_id_ori == "" || $jb_insurance_rate == 0) return; $jb_insurance_rates = array( 1 => array(0.070, "Warengruppe 1, innerdeutscher Transport", 0.19), // BRD Warengruppe I 2 => array(0.175, "Warengruppe 2, innerdeutscher Transport", 0.19), // BRD Warengruppe II 3 => array(0.085, "Warengruppe 1, innereuropäischer Transport", 0), // Europa ohne GUS Warengr. I 4 => array(0.200, "Warengruppe 2, innereuropäischer Transport", 0), // Europa ohne GUS Warengr. II 5 => array(0.070, "innerdeutschem Botendienst", 0.19) // PKW Botendienst BRD ); $minimum_insurance = 10; $insurance_tax = $jb_insurance_rates[$jb_insurance_rate][2]; $minimum_insurance *= (1 + $insurance_tax); $vht_id_insurance = 999; $cr_sid_insurance = getFieldValueFromId("headquarters", "hq_id", "$hq_id", "hq_mnemonic") . ($vht_id >= 7 ? "1777" : "1888"); // $cr_sid = $db->getOne("SELECT crvh_sid FROM couriervehicle, courier WHERE couriervehicle.cr_id = courier.cr_id AND hq_id = " . $hq_id . " AND (crvh_sid LIKE '%1666%' OR crvh_sid LIKE '%1555%') ORDER BY crvh_sid DESC"); $cr_id_insurance = $db->getOne("SELECT cr_id FROM couriervehicle WHERE crvh_sid = '" . $cr_sid_insurance . "'\n"); $jb_status_insurance = ($special_case == 1 ? 1 : 2); $jb_fixpriceInsurance = ceil($jb_value_of_goods / 100 * $jb_insurance_rates[$jb_insurance_rate][0] * (1 + $insurance_tax) * 100) / 100; if ($jb_fixpriceInsurance < $minimum_insurance) $jb_fixpriceInsurance = $minimum_insurance; $jb_finishtime = $db->getOne("SELECT jb_createtime FROM job WHERE jb_id = " . $jb_id_ori); insertStmt("job", array("hq_id", $hq_id, "vht_id", $vht_id_insurance, "csc_id_payer", $csc_id_payer, "jb_ordertime", $jb_ordertime, "jb_reserv", 0, "cr_id", $cr_id_insurance, "cr_sid", $cr_sid_insurance, "cr_id_order", $cr_id_insurance, "jb_cr_filter", "", "jb_cr_filter_opt", "", "jb_waitstorno", 0, "jb_taketime", $jb_finishtime, "jb_status", $jb_status_insurance, "jb_incomplete", "1", "jb_globaljob", 0, "jb_finishtime", $jb_finishtime, "emp_id", $usr_id, "jb_fixprice", $jb_fixpriceInsurance, "jb_totalprice", $jb_fixpriceInsurance, "jb_subtotalprice", $jb_fixpriceInsurance, "jb_mediationarea_id", 0, "jb_mediationarea_name", "", "jb_sales_tax_rate", 19, "jb_sales_tax_rate_sign", "V", "jb_freetext_1", "Gebuchte Transportversicherung zu Auftrag " . $jb_id_ori . " mit " . str_replace(".", ",", sprintf("%01.2f", $jb_value_of_goods)) . " EUR Warenwert bei ". $jb_insurance_rates[$jb_insurance_rate][1] . " (" . str_replace(".", ",", $jb_insurance_rates[$jb_insurance_rate][0]) ."% Prämie vom Warenwert" . ($insurance_tax > 0 ? " zzgl. " . ($insurance_tax * 100) . "% Versicherungssteuer" : "") . " - Mindestprämie " . str_replace(".", ",", sprintf("%01.2f", $minimum_insurance)) . " EUR)", "jb_freetext_2", "²²²", "jb_tourdata", ".|.|DE", "jb_createtime", date("Y-m-d H:i:s"), "jb_id_parent", 0, "jb_dispoinfo", "HV zu " . $jb_id_ori, "jb_timeunits", 2, "jb_booktime", date("Y-m-d H:i:s"))); $jbIdInsurance = getLastInsertId(); $adIdInsurance = $db->getOne("SELECT ad_id FROM address WHERE ad_street = '.' AND ad_zipcode = '.' AND ad_city = '.' AND ad_country = 'DE'"); if ($adIdInsurance == "") { insertStmt("address", array("ad_street", "Warenwert " . $jb_value_of_goods . " Euro", "ad_zipcode", ".", "ad_city", ".", "ad_country", "DE")); $adIdInsurance = getLastInsertId(); } insertStmt("tour", array("jb_id", $jbIdInsurance, "ad_id", $adIdInsurance, "tr_sort", "1", "tr_comp", "Transportzusatzversicherung", "tr_hsno", ".", "tr_person", "", "csc_id", $csc_id_payer, "tr_remark", "", "tr_status", 0, "tr_ware_from_to", 0, "tr_mediationarea_id", 0)); insertStmt("tourservice", array("jb_id", $jbIdInsurance, "csc_id", $csc_id_payer, "tr_sort", "0", "srv_id", "0", "trs_srv_name", "Fixpreis", "srvt_id", "0", "trs_srvt_name", "", "trs_price", $jb_fixpriceInsurance, "trs_discount", 0)); mk_jb_invtext_full($jbIdInsurance); // Verschiedene Sätze und Höchstgrenzen einbauen // Versicherungsdebitoren klären // Versicherungauftrag muss auch gelöscht / upgedatet werden können return $jbIdInsurance; } function getMediationarea_id($hq_id, $ad_zipcode, $ad_street, $tr_hsno) { global $db; $srvp_id = $db->getOne("SELECT srvpxa.srvp_id, srvpxa.srvpxa_mode FROM address AS ad, serviceplzaddress AS srvpxa" . " WHERE srvpxa.hq_id = '$hq_id' AND ad.ad_id = srvpxa.ad_id AND" . " ad.ad_zipcode = '$ad_zipcode' AND ad.ad_street = '$ad_street'"); if ($srvp_id == "") $srvp_id = $db->getOne("SELECT srvp_id FROM serviceplz WHERE srvp_plz = '$ad_zipcode'"); return $srvp_id; } function getCustomerCouriers($db, $cs_id) { global $phpVersion; $cr_id_order_list_customer = "var cr_id_order_list_customer=["; $sqlquery = "SELECT cr.cr_sid FROM customercourier AS cc, courier AS cr WHERE cc.cs_id = $cs_id AND cc.cscr_relation = 1 AND cc.cr_id = cr.cr_id"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $i = 0; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($i++ > 0) $cr_id_order_list_customer .= ",\n"; $cr_id_order_list_customer .= "\"" . $row["cr_sid"] . "\""; endwhile; $res->free(); $cr_id_order_list_customer .= "];\n"; return ($cr_id_order_list_customer); } function getCustomerFilters($db, $cs_id) { $cs_filter_list_customer = "var cs_filter_list_customer=["; $cs_filter_jbedit = $db->getOne("SELECT cs_filter_jbedit FROM customer WHERE cs_id = $cs_id"); if (trim($cs_filter_jbedit) != ""): $cs_filter_jbeditArr = explode(",", $cs_filter_jbedit); $i = 0; foreach ($cs_filter_jbeditArr as $cs_filter) { if (trim($cs_filter) != ""): if ($i++ > 0) $cs_filter_list_customer .= ",\n"; $cs_filter_list_customer .= "\"" . $cs_filter . "\""; endif; } endif; $cs_filter_list_customer .= "];\n"; return ($cs_filter_list_customer); } function getCustomerServices($db, $cs_id, $the_hq_id = 0) { global $hq_id, $phpVersion; // Matrix der Kunden mit speziellen Preisen $csSrvList = "cs_srv_list=[ "; $customerserviceList = array(); $customer_specific = 1; //die($the_hq_id); if ($the_hq_id == 0): //echo "SELECT count(*) FROM service AS srv WHERE srv.cs_id = '$cs_id'"; //die($cs_id); // Prüfen, ob kundenspezifische Liste leer ist; wenn ja, dann globale Zentralenmatrix holen if ($db->getOne("SELECT count(*) FROM customerservice AS csv, service AS srv WHERE csv.cs_id = '$cs_id' AND csv.srv_id = srv.srv_id") >= 1 || $db->getOne("SELECT count(*) FROM service AS srv WHERE srv.cs_id = '$cs_id'") >= 1): $sqlquery = "SELECT csv.cs_id, csv.srv_id, srv.srv_name FROM customerservice AS csv, service AS srv WHERE csv.cs_id = '$cs_id' AND csv.srv_id = srv.srv_id UNION" . " SELECT cs_id, srv_id, srv_name FROM service WHERE cs_id = '$cs_id' ORDER BY cs_id, srv_name"; else: $sqlquery = "SELECT DISTINCT srv.srv_id, srv.srv_name FROM servicehistory AS srvh, service AS srv WHERE srvh.cs_id = '0' AND srvh.srv_id = srv.srv_id AND srvh.hq_id = '$hq_id' AND srv.srv_mode = 1 ORDER BY srv.srv_name"; $customer_specific = 0; endif; else: $sqlquery = "SELECT csv.cs_id, csv.srv_id, srv.srv_name FROM customerservice AS csv, customer AS cs, service as srv, company as cmp WHERE csv.cs_id = cs.cs_id" . /* AND cs.hq_id = '$the_hq_id' */ " AND csv.srv_id = srv.srv_id AND srv.srv_name != 'DELETE' AND cs.cmp_id = cmp.cmp_id AND cmp_visible = 1 AND cmp_archived = 0 UNION" . " SELECT srv.cs_id, srv_id, srv_name FROM service AS srv, customer AS cs, company AS cmp WHERE cs.cs_id = srv.cs_id" . /* AND srv.hq_id = '$the_hq_id' */ " AND srv.srv_name != 'DELETE' AND cs.cmp_id = cmp.cmp_id AND cmp_visible = 1 AND cmp_archived = 0 ORDER BY cs_id, srv_name"; // $sqlquery = "SELECT cs_id, srv_id, cssrv_sort FROM customerservice ORDER BY cs_id, cssrv_sort"; endif; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $prev_cs_id = 0; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($customer_specific == 0) $row["cs_id"] = $cs_id; if ($prev_cs_id != $row["cs_id"]): $customerserviceList[$row["cs_id"]] = array(); $prev_cs_id = $row["cs_id"]; endif; // $srv_name = getFieldValueFromId("service", "srv_id", $row["srv_id"], "srv_name"); array_push ($customerserviceList[$row["cs_id"]], array($row["srv_id"], trim($row["srv_name"]))); $csSrvList .= "[\"" . $row["cs_id"] . "\", \"" . trim($row["srv_name"]) . "\"],\n"; endwhile; $res->free(); $csSrvList = substr($csSrvList, 0, -2) . "];\n"; if ($csSrvList == "cs_srv_list=[];\n"): $csSrvtList = "cs_srvt_list=[];\n"; $csPriceList = "cs_price_list=[];\n"; $csCalcMandList = "cs_calc_mand_list=[];\n"; $setCalcButtonClassName = "if (typeof(parent.job_options.document.tourOptions.calcButton) != 'undefined')\n" . " parent.job_options.document.tourOptions.calcButton.className = 'commission_no_disabled';\n"; else: $csSrvtList = "cs_srvt_list=[ "; $customerservicetypeList = array(); if ($the_hq_id == 0): if ($customer_specific == 1): $sqlquery = "SELECT csvt.cs_id, csvt.srvt_id, srvt.srvt_name FROM customerservicetype AS csvt, servicetype AS srvt WHERE csvt.cs_id = '$cs_id' AND csvt.srvt_id = srvt.srvt_id UNION ALL " . "SELECT cs_id, srvt_id, srvt_name FROM servicetype WHERE cs_id = '$cs_id' ORDER BY cs_id, srvt_name"; else: $sqlquery = "SELECT DISTINCT srvt.srvt_id, srvt.srvt_name FROM servicehistory AS srvh, servicetype AS srvt WHERE srvh.cs_id = '0' AND srvh.srvt_id = srvt.srvt_id AND srvh.hq_id = '$hq_id ' AND srvt.srvt_mode = '1' ORDER BY srvt.srvt_name"; endif; else: $sqlquery = "SELECT csvt.cs_id, csvt.srvt_id, srvt.srvt_name FROM customerservicetype AS csvt, customer AS cs, servicetype AS srvt, company AS cmp WHERE csvt.cs_id = cs.cs_id" . /* AND cs.hq_id = '$the_hq_id' */ " AND csvt.srvt_id = srvt.srvt_id AND srvt.srvt_name != 'DELETE' AND cs.cmp_id = cmp.cmp_id AND cmp_visible = 1 AND cmp_archived = 0 UNION" . " SELECT srvt.cs_id, srvt_id, srvt_name FROM servicetype AS srvt, customer AS cs, company AS cmp WHERE cs.cs_id = srvt.cs_id" . /* AND srvt.hq_id = '$the_hq_id' */ " AND srvt.srvt_name != 'DELETE' AND cs.cmp_id = cmp.cmp_id AND cmp_visible = 1 AND cmp_archived = 0 ORDER BY cs_id, srvt_name"; // $sqlquery = "SELECT cs_id, srvt_id, cssrvt_sort FROM customerservicetype ORDER BY cs_id, cssrvt_sort"; endif; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $prev_cs_id = 0; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($customer_specific == 0) $row["cs_id"] = $cs_id; if ($prev_cs_id != $row["cs_id"]): $customerservicetypeList[$row["cs_id"]] = array(); $prev_cs_id = $row["cs_id"]; endif; // $srvt_name = getFieldValueFromId("servicetype", "srvt_id", $row["srvt_id"], "srvt_name"); array_push ($customerservicetypeList[$row["cs_id"]], array($row["srvt_id"], trim($row["srvt_name"]))); $csSrvtList .= "[\"" . $row["cs_id"] . "\", \"" . trim($row["srvt_name"]) . "\"],\n"; endwhile; $res->free(); $csSrvtList = substr($csSrvtList, 0, -2) . "];\n"; if ($the_hq_id == 0): $currentHqId = $hq_id; $constHqId = getParameterValue("0", "MANDATOR_SERVICE2_ENABLED", $hq_id); else: $currentHqId = $the_hq_id; $constHqId = getParameterValue("0", "MANDATOR_SERVICE2_ENABLED", $the_hq_id); endif; if ($constHqId == "" || $constHqId == "0") : $currentHqId = "0"; endif; $csPriceList = "cs_price_list=[ "; $i = 0; $today = getdate(); $nowtime = $today['year'] . "-" . $today['mon'] . "-" . $today['mday'] . " " . $today['hours'] . ":" . $today['minutes'] . ":" . $today['seconds']; $csCalcMandList = "cs_calc_mand_list=[ "; //echo "customerserviceList:\n" . var_export($customerserviceList, true) . "\n"; //echo "customerservicetypeList:\n" . var_export($customerservicetypeList, true) . "\n"; foreach($customerserviceList as $key_cs_id => $val_srv_id_arr) { foreach($val_srv_id_arr as $val_srv_id) { //echo "customerservicetypeList[$key_cs_id]:\n" . var_export($customerservicetypeList[$key_cs_id], true) . "\n"; // if (isset($customerservicetypeList[$key_cs_id])): foreach($customerservicetypeList[$key_cs_id] as $val_srvt_id) { $currentHqId = $db->getOne("SELECT hq_id FROM customer WHERE cs_id = " . $key_cs_id); if ($customer_specific == 1) $tmpPriceArr = getServiceValues($val_srv_id[0], $val_srvt_id[0], $key_cs_id, $currentHqId, $nowtime, 3); else $tmpPriceArr = getServiceValues($val_srv_id[0], $val_srvt_id[0], 0, $currentHqId, $nowtime, 3); $tmpPrice = $tmpPriceArr[0]; $tmpCrPrice = $tmpPriceArr[1]; $tmpPrice = sprintf("%01.2f", $tmpPrice); // if (!($customer_specific == 0 && $tmpPrice != "0.00")) $csPriceList .= "[\"" . $key_cs_id . "\", \"" . $val_srv_id[1] . "\", \"" . $val_srvt_id[1] . "\", \"" . $tmpPrice . "\", \"" . $tmpCrPrice ."\"],\n"; } // endif; } $csCalcMandList .= "[\"" . $key_cs_id . "\", \"" . getParameterValue("0", "CUSTOMER_MASK_CALCULATOR_USAGE_ONLY_" . $key_cs_id, "0") . "\"],\n"; //$csCalcMandList .= "\n// " . $db->getOne("SELECT par_value FROM parameter WHERE par_key = 'CUSTOMER_MASK_CALCULATOR_USAGE_ONLY_" . $key_cs_id . "'"); } $csPriceList = substr($csPriceList, 0, -2) . "];\n"; $csCalcMandList = substr($csCalcMandList, 0, -2) . "];\n"; // Wenn Sondervereinbarungen vorhanden, dann rot anmalen! $setCalcButtonClassName = "if (typeof(parent.job_options.document.tourOptions.calcButton) != 'undefined')\n" . " parent.job_options.document.tourOptions.calcButton.className = 'commission_no_enabled';\n"; endif; if ($the_hq_id == 0): // return ("parent.job_options." . $csSrvList . "parent.job_options." . $csSrvtList . "parent.job_options." . $csPriceList . $setCalcButtonClassName); return ("parent.job_options." . $csSrvList . "parent.job_options." . $csSrvtList . "parent.job_options." . $csPriceList . "parent.job_options." . $csCalcMandList . $setCalcButtonClassName . "if (parent.job_options.jb_markup_overwrite == 1) parent.job_options.checkFixprice(0);\n"); else: return ("var " . $csSrvList . "var " . $csSrvtList . "var " . $csPriceList . "var " . $csCalcMandList); endif; } function setJavascriptOpenerFormVals($frameIdx, $formIdx, $elemList, $opener = "opener.") { $retStr = ""; foreach($elemList as $key => $val) $retStr .= "if (typeof($opener" . "parent.$frameIdx.document.$formIdx.$key) != 'undefined')\n" . " " . $opener . "parent.$frameIdx.document.$formIdx.$key.value = \"$val\";\n"; return $retStr; } function setJavascriptOpenerDisabled($frameIdx, $formIdx, $elemIdx, $falseOrTrue, $opener = "opener.") { return ( "if (typeof($opener" . "parent.$frameIdx.document.$formIdx.$elemIdx) != 'undefined')\n" . " " . $opener . "parent.$frameIdx.document.$formIdx.$elemIdx.disabled" . " = $falseOrTrue;\n" ); } function setJavascriptOpenerChecked($frameIdx, $formIdx, $elemIdx, $falseOrTrue, $opener = "opener.") { return ( "if (typeof($opener" . "parent.$frameIdx.document.$formIdx.$elemIdx) != 'undefined')\n" . " " . $opener . "parent.$frameIdx.document.$formIdx.$elemIdx.checked" . " = $falseOrTrue;\n" ); } function setJavascriptOpenerJobList($tourNo, $jobList) { $retStr = ""; foreach($jobList as $key => $val) $retStr .= "opener.setJobList($tourNo, $key, \"$val\");\n"; return $retStr; } function javascriptOpenerRefreshAndClose($noCurTourNo = 0) { /* Nicht Hansetrans return( "opener.setCurTourNo(curTourNo);\n" . "opener.parent.frames[" . JOB_TOUR . "].document.forms[" . TOURFORM . "].elements[" . VON_CSC_ID . "].focus();\n" . "opener.parent.frames[" . JOB_OPTIONS . "].isCurrentlySubmitting = false;\n" . "opener.checkSendTour();\n" . "self.close();\n" ); */ return( (($noCurTourNo == 0) ? "opener.setCurTourNo(curTourNo);\n" : "") . "opener.parent.job_tour.document.tourForm.vonFirmaButton.focus();\n" . "opener.parent.job_options.isCurrentlySubmitting = false;\n" . (($noCurTourNo == 0) ? "opener.checkSendTour();\n" : ""). "self.close();\n" ); } function javascriptAdd_cs_eid($csc_id, $prefix = "") { global $db; if ($csc_id == "") return ""; // die cs_eid ist wichtig zur Festellung, ob eine Kostenstelle als Bezahler gewählt werden kann! $cs_eid = $db->getOne( "SELECT cs.cs_eid from customer AS cs, costcenter AS csc" . " WHERE cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'"); $csc_is_extern = $db->getOne("SELECT csc_is_extern from costcenter WHERE csc_id = '$csc_id'"); // Kommissionsnummer ja/nein wird gleich mitgespeichert! if ((trim($cs_eid) != "" && $cs_eid != "0") /* && $csc_is_extern != 1 */): //die ("löpt"); if (!(strpos(strtoupper($db->getOne("SELECT csc_path from costcenter WHERE csc_id = $csc_id")), "//EXTERN//") === FALSE)) $cs_eid = ""; $cs_id = getFieldValueFromId("costcenter", "csc_id", $csc_id, "cs_id"); return $prefix . "add_cs_eid($csc_id, '$cs_eid', " . my_str_check($db->getOne("SELECT cs_commission_no from customer WHERE cs_id = " . $cs_id)) . ", '" . my_str_check($db->getOne( "SELECT cmp.cmp_comp FROM company AS cmp, customer AS cs, costcenter AS csc" . " WHERE cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'")) . "', " . my_str_check($db->getOne( "SELECT cmp.cmp_authenticated FROM company AS cmp, customer AS cs, costcenter AS csc" . " WHERE cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'")) . ", '" . my_str_check($db->getOne( "SELECT cmp.cmp_remark FROM company AS cmp, customer AS cs, costcenter AS csc" . " WHERE cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'")) . "', " . $db->getOne("SELECT cs_jobbatch from customer WHERE cs_id = " . $cs_id) . ", " . $db->getOne("SELECT cs_discount from customer WHERE cs_id = " . $cs_id) . ", '" . $db->getOne("SELECT cs_filter from customer WHERE cs_id = " . $cs_id) . "', " . my_str_check($db->getOne( "SELECT cmp.tx_id FROM company AS cmp, customer AS cs, costcenter AS csc" . " WHERE cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'")) . ", '" . my_str_check($db->getOne("SELECT csc_name from costcenter WHERE csc_id = $csc_id")) . "', " . $csc_is_extern . ", " . $cs_id . ", " . $db->getOne("SELECT cs_fixprice_discount from customer WHERE cs_id = " . $cs_id) . ", " . $db->getOne("SELECT cs_prov from customer WHERE cs_id = " . $cs_id) . ", '" . my_str_check($db->getOne( "SELECT cmp.cmp_stax_idno FROM company AS cmp, customer AS cs, costcenter AS csc" . " WHERE cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id AND csc.csc_id = '$csc_id'")) . "', '" . $db->getOne("SELECT par_value FROM parameter WHERE par_key = 'MASK_COMM_PREFIX_" . $cs_id . "'") . "', " . $db->getOne("SELECT cs_jb_jam_waittime from customer WHERE cs_id = " . $cs_id) . ", " . $db->getOne("SELECT cs_tracking from customer WHERE cs_id = " . $cs_id) . ", '" . $db->getOne("SELECT usr_inv_email from customer, employee, user WHERE cs_id = " . $cs_id . " AND customer.cs_admin = employee.emp_id AND employee.usr_id = user.usr_id") . "', '" . $db->getOne("SELECT par_value FROM parameter WHERE par_key = 'CUSTOMER_MASK_JB_INCOMPLETE_" . $cs_id . "'") . "', " . $db->getOne("SELECT cs_invmode from customer WHERE cs_id = " . $cs_id) . ");\n"; endif; //die ("löpt nich: $cs_eid, $csc_is_extern"); return ""; } function javascriptImpressumWindow() { return "function mkImpressumPopupWin()\n" . "{\n" . " var widthPopupWin = 250;\n" . " var heightPopupWin = 310;\n" . " var leftPopupWin = (screen.width / 2) - (widthPopupWin / 2) - 12;\n" . " var topPopupWin = (screen.height / 2) - (heightPopupWin / 2) - 50;\n" . " var popupWin;\n" . "\n" . " popupWin=window.open(\"../admin/impressum.html\", \"\",\n" . " \"dependent=yes,width=\" + widthPopupWin + \",height=\" + heightPopupWin +\n" . " \",left=\" + leftPopupWin + \",top=\" + topPopupWin);\n" . "}\n"; } function getValsFromDate($dateVal) { // "2003-01-16 18:40:23" return(array( (is_numeric(substr($dateVal, 0, 4)) ? substr($dateVal, 0, 4) : 0), (is_numeric(substr($dateVal, 5, 2)) ? substr($dateVal, 5, 2) : 0), (is_numeric(substr($dateVal, 8, 2)) ? substr($dateVal, 8, 2) : 0), (is_numeric(substr($dateVal, 11, 2)) ? substr($dateVal, 11, 2) : 0), (is_numeric(substr($dateVal, 14, 2)) ? substr($dateVal, 14, 2) : 0), (is_numeric(substr($dateVal, 17, 2)) ? substr($dateVal, 17, 2) : 0) )); } //function my_datum_zeit_format_timestamp($var_date) //{ // return substr($var_date, 6, 2) . "." . substr($var_date, 4, 2) . "." . substr($var_date, 0, 4) . // " " . substr($var_date, 8, 2) . ":" . substr($var_date, 10, 2); //} function my_datum_zeit_format_datetime($var_date, $nbsp = " ") { return substr($var_date, 8, 2) . "." . substr($var_date, 5, 2) . "." . substr($var_date, 0, 4) . $nbsp . substr($var_date, 11, 2) . ":" . substr($var_date, 14, 2); } function mkLineBreaks($text, $colsMax, $linesMax, $is_http = false) { global $hq_id; $text = trim($text); $text = str_replace("\r", '', $text); // Leerzeilen entfernen while (!(strpos($text, "\n\n") === false)) $text = str_replace("\n\n", "\n", $text); $text = str_replace("\n", '; ', $text); $formattedLines = ""; $formattedLine = ""; $nextWord = ""; for ($i = 0; $i < $linesMax; $i++): $formattedLine = $nextWord . ($nextWord == " " || $formattedLine == "" ? "" : " "); for ($j = 0; $j < $colsMax; $j++): if (!(strpos($text, " ") === false)): if (substr($text, 0, 1) == " "): $nextWord = " "; $text = substr($text, 1); else: $nextWord = substr($text, 0, strpos($text, " ")); $text = substr(stristr($text, " "), 1); endif; else: $nextWord = $text; $text = ""; endif; if ($nextWord == "" && $text == "") break; if (strlen($formattedLine . $nextWord) <= $colsMax): $formattedLine .= $nextWord; if (strlen($formattedLine . " ") <= $colsMax & $nextWord != " "): $formattedLine .= " "; endif; else: break; endif; endfor; while (strlen($formattedLine) < getParameterValue("0", "INV_MAXCOLS_EXPORT", $hq_id)): $formattedLine .= " "; endwhile; $formattedLines .= (($formattedLines != "" && $formattedLine != "") ? "\n" : "") . $formattedLine; if ($nextWord == "" && $text == "") break; endfor; if (!($nextWord == "" && $text == "")) writeLog_("../log/caglobal_", " Text in `mkLineBreaks` truncated: \$nextWord = '$nextWord', \$text == '$text' (THIS SHOULD NOT BE POSSIBLE!!!)"); if (!$is_http) $formattedLines = str_replace('\'', '\\\'', $formattedLines); return $formattedLines; } function mkLineBreaksWithBreaks($text, $colsMax, $linesMax, $is_http = false, $do_log = false) { global $hq_id; $lines = explode("\n", $text); $formattedText = ""; foreach ($lines as $line) { // Leerzeilen auslassen, wenn Bemerkungstext gedruckt wird (z. Zt. nur in Bremen) if (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "0" || (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "1" && trim($line) != "")) $formattedText .= mkLineBreaks($line, $colsMax, $linesMax, $is_http) . "\n"; } $lines = explode("\n", $formattedText); $formattedText = ""; for ($i = 0; $i < $linesMax; $i++) { $formattedText .= (isset($lines[$i]) ? $lines[$i] : "") . "\n"; } if (count($lines) > $linesMax): // writeLog_("../log/caglobal_", " Text in `mkLineBreaksWithBreaks` truncated:"); // for ($i = $linesMax - 1; $i < count($lines); $i++) { // writeLog_("../log/caglobal_", "--- " . $lines[$i]); // } if ($do_log == true) writeLog_("../log/caglobal_", "*** In order to preserve information, newlines have been replaced by semicolons!"); $formattedText = mkLineBreaks($text, $colsMax, $linesMax, $is_http) . "\n"; endif; return $formattedText; } function padRight($aString, $len) { while (strlen($aString) < $len) $aString .= " "; return $aString; } function padLeft($aString, $len) { while (strlen($aString) < $len) $aString = " " . $aString; return $aString; } function mk_jb_invtext($jb_id, $do_log = false, $tmp_add_srvs = "", $tmp_add_srvts = "", $tmp_add_mult = "", $tmp_add_mult_price = "", $tmp_add_sids = "", $tmp_add_prices = "") { global $PHP_SELF, $db, $hq_id, $jb_toll, $jb_hiddenFreetext_1, $phpVersion; // if ($jb_id = "killMe") // return; // Einbeziehung der Einträge aus dem Calculator $real_jb_freetext_2 = $tmp_add_srvs . "²" . $tmp_add_srvts . "²" . $tmp_add_mult . "²" . $tmp_add_mult_price; $tmp_special_jb_invtext = ""; $tmp_add_srvsArr = explode("¹", $tmp_add_srvs); $tmp_add_srvtsArr = explode("¹", $tmp_add_srvts); $tmp_add_multArr = explode("¹", $tmp_add_mult); //print_r($tmp_add_srvsArr); echo "
\n"; //print_r($tmp_add_srvtsArr); echo "
\n"; //print_r($tmp_add_multArr); echo "
\n"; $maxLenMult = 0; for ($i = 0; $i < count($tmp_add_multArr); $i++) if (strlen($tmp_add_multArr[$i]) > $maxLenMult) $maxLenMult = strlen($tmp_add_multArr[$i]); $tmp_add_mult_priceArr = explode("¹", $tmp_add_mult_price); //print_r($tmp_add_mult_priceArr); echo "
\n"; $maxLenPrice = 0; for ($i = 0; $i < count($tmp_add_mult_priceArr); $i++) if (strlen($tmp_add_mult_priceArr[$i]) > $maxLenPrice) $maxLenPrice = strlen($tmp_add_mult_priceArr[$i]); deleteStmt("jobcalculator", "jb_id = '$jb_id'"); $db->query("DELETE FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 11 AND jbprc_remark = 'c'"); for ($i = 0; $i < count($tmp_add_srvsArr); $i++) if (trim($tmp_add_mult_priceArr[$i]) != "") { // echo $tmp_add_mult_priceArr[$i] . " / " . str_replace(",", ".", $tmp_add_multArr[$i]) . " = " . ($tmp_add_mult_priceArr[$i] / str_replace(",", ".", $tmp_add_multArr[$i])) . "
\n"; $tmp_special_jb_invtext .= padRight($tmp_add_multArr[$i] . "x", $maxLenMult + 2) . padRight( trim($tmp_add_srvsArr[$i]) . (trim($tmp_add_srvtsArr[$i]) != "" ? " " . $tmp_add_srvtsArr[$i] : "") . str_replace(".", ",", " (" . sprintf("%01.2f", ((float) str_replace(",", ".", $tmp_add_mult_priceArr[$i]) / (float) str_replace(",", ".", $tmp_add_multArr[$i]))) . ")") , getParameterValue("0", "INV_MAXCOLS", $hq_id) - ($maxLenMult + 2) - ($maxLenPrice + 4) - 2) . ": " . padLeft($tmp_add_mult_priceArr[$i], $maxLenPrice) . " EUR\n"; insertStmt("jobcalculator", array("jb_id", $jb_id, "jbc_amount", $tmp_add_multArr[$i] ,"srv_name", $tmp_add_srvsArr[$i], "srvt_name", trim($tmp_add_srvtsArr[$i]), "jbc_price", sprintf("%01.2f", ((float) str_replace(",", ".", $tmp_add_mult_priceArr[$i]) / (float) str_replace(",", ".", $tmp_add_multArr[$i]))), "jbc_totalprice", str_replace(",", ".", $tmp_add_mult_priceArr[$i]))); //print_r ( array("jb_id", $jb_id, "jbc_amount", $tmp_add_multArr[$i] ,"srv_name", $tmp_add_srvsArr[$i], "srvt_name", $tmp_add_srvtsArr[$i], "jbc_price", // sprintf("%01.2f", (str_replace(",", ".", $tmp_add_mult_priceArr[$i]) / str_replace(",", ".", $tmp_add_multArr[$i]))), "jbc_totalprice", str_replace(",", ".", $tmp_add_mult_priceArr[$i]))); if (trim($tmp_add_srvtsArr[$i]) == "Kilometer") { $db->query("DELETE FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 11"); writeLog_("../log/caglobal_", "[INSERT INTO jobprice (jb_id, mt_sort, jbprc_price, jbprc_remark) VALUES (" . $jb_id . ", 11, " . $tmp_add_multArr[$i] . ", 'c')]"); $db->query("INSERT INTO jobprice (jb_id, mt_sort, jbprc_price, jbprc_remark) VALUES (" . $jb_id . ", 11, " . $tmp_add_multArr[$i] . ", 'c')"); } } // 2018-05-28: STB912838 und STB974019 // 2025-06-18: PZM ($cs_invmode == 0) $cs_id = getFieldValueFromId("costcenter", "csc_id", getFieldValueFromId("job", "jb_id", $jb_id, "csc_id_payer"), "cs_id"); $cs_invmode = getFieldValueFromId("customer", "cs_id", $cs_id, "cs_invmode"); if (getParameterValue("0", "MASK_INVOICE_SHOW_SERVICES_" . $cs_id, "0") == "1" || $cs_invmode == 0): $dbh_jb = "job"; $dbh_trs = "tourservice"; $costArr = getJobCosts(array("jb_id" => $jb_id, "cnt_costsplit" => 1)); writeLog_("../log/caglobal_", "\$jb_id = " . $jb_id); writeLog_("../log/caglobal_", "\$costArr = " . json_encode($costArr)); $is_minimum = false; for ($i = 0; $i < count($costArr) - 1; $i++) { if ($cs_invmode == 0) { if (!(strpos($costArr[$i][0], "*") === false)) { $tmp_cost = explode("*", $costArr[$i][0]); $pos = strpos($tmp_cost[0], "km"); $km = (float) trim(str_replace(",", ".", substr($tmp_cost[0], 0, $pos))); $tmp_cost[1] = str_replace(" ", "", $tmp_cost[1]); $pos = strpos($tmp_cost[1], chr(128)); $eur = (float) trim(str_replace(",", ".", substr($tmp_cost[1], 0, $pos))); $costArr[$i][1] = round($km * $eur, 2); } else { if (!(strpos($costArr[$i][0], "pro") === false)) { $tmp_cost = explode("pro", $costArr[$i][0]); $pos = strpos($tmp_cost[0], chr(128)); $eur = (float) trim(str_replace(",", ".", substr($tmp_cost[0], 0, $pos))); $tmp_cost[1] = str_replace(" ", "", $tmp_cost[1]); $pos = strpos($tmp_cost[1], "weitere"); $cnt = (int) trim(str_replace(",", ".", substr($tmp_cost[1], 0, $pos))); $costArr[$i][1] = $cnt * $eur; } else { if (!(strpos($costArr[$i][0], "Aufschlag") === false)) { $tmp_cost = explode(" ", $costArr[$i][0]); $pos = strpos($tmp_cost[count($tmp_cost) - 2], chr(128)); $eur = (float) trim(str_replace(",", ".", substr($tmp_cost[count($tmp_cost) - 2], 0, $pos))); $costArr[$i][1] = $eur; } else { if (substr($costArr[$i][0], 0 , strlen("Fixpreis ")) != "Fixpreis " && substr($costArr[$i][0], 0, strlen("Servicepreis ")) != "Servicepreis ") { $pos = strpos($costArr[$i][0], chr(128)); $eur = (float) trim(str_replace(",", ".", substr($costArr[$i][0], 0, $pos))); $costArr[$i][1] = $eur; } else { if (substr($costArr[$i][0], 0, strlen("Fixpreis [M]")) == "Fixpreis [M]") { $costArr[$i][0] = substr($costArr[$i][0], strlen("Fixpreis [M]" . " ")); $costArr[$i][1] = $db->getOne("SELECT jb_fixprice FROM job WHERE jb_id = " . $jb_id); $is_minimum = true; } } } } } $costArr[$i][0] = str_replace("Bus", "Transporter", str_replace("km", " km", str_replace(chr(128), " EUR", str_replace(" " . chr(128), " EUR", str_replace(" z", "", $costArr[$i][0]))))); } if (!($cs_invmode == 0 && (substr($costArr[$i][0], 0 , strlen("Fixpreis ")) == "Fixpreis " || substr($costArr[$i][0], 0, strlen("Servicepreis ")) == "Servicepreis "))) { if (getParameterValue("0", "MASK_INVOICE_SHOW_SERVICES_" . $cs_id, "0") == "1" || ($cs_invmode == 0 && (!$is_minimum || substr($costArr[$i][0], 0, strlen("Mindestpreis")) == "Mindestpreis"))) { $tmp_special_jb_invtext .= trim(str_replace(" ", " ", $costArr[$i][0])) . ": " . padLeft(str_replace(".", ",", sprintf("%01.2f", trim($costArr[$i][1]))) . " EUR", getParameterValue("0", "INV_MAXCOLS", $hq_id) - strlen(trim(str_replace(" ", " ", $costArr[$i][0])). ": ")) . "\n"; } } } writeLog_("../log/caglobal_", "\$costArr = " . json_encode($costArr)); endif; $tmp_special_sids_jb_invtext = ""; if (getParameterValue("0", "MASK_INVOICE_SHOW_SIDS", $hq_id) == 1): // Einbeziehung der Unternehmerverrechnung aus dem Calculator // $tmp_add_jb_idsArr = explode("¹", $tmp_add_jb_ids); // $maxcount = count($tmp_add_jb_idsArr); $tmp_add_sidsArr = explode("¹", $tmp_add_sids); // if (count($tmp_add_sidsArr) > $maxcount) $maxcount = count($tmp_add_sidsArr); // $tmp_add_pricesArr = explode("¹", $tmp_add_prices); // if (count($tmp_add_pricesArr) > $maxcount) // $maxcount = count($tmp_add_pricesArr); if ($maxcount > 0 && $tmp_add_sidsArr[0] != ""): if ($maxcount == 1): $tmp_special_sids_jb_invtext = "Ausführendes Fahrzeug: "; else: $tmp_special_sids_jb_invtext = "Ausführende Fahrzeuge: "; endif; $ltrim_mask = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $tmp_special_sids_jb_invtext .= substr(ltrim($tmp_add_sidsArr[0], $ltrim_mask), 1); for ($i = 1; $i < $maxcount; $i++): $tmp_special_sids_jb_invtext .= ", " . substr(ltrim($tmp_add_sidsArr[$i], $ltrim_mask), 1); endfor; $tmp_special_sids_jb_invtext .= "\n"; endif; endif; //echo "$tmp_special_sids_jb_invtext
"; $sqlquery = "SELECT DISTINCT job.jb_id, job.jb_freetext_1, job.vht_id, job.emp_id, tour.csc_id, tour.tr_sort, tour.tr_comp, tour.tr_person, tour.tr_remark, " . "tour.ad_id, tour.tr_hsno, tour.tr_ware_from_to, tour.tr_commission_no FROM job, tour " . "WHERE job.jb_id = tour.jb_id AND job.hq_id = '$hq_id' AND job.jb_id = $jb_id AND ((job.jb_storno != 3 AND job.jb_storno != 4) OR jb_storno IS NULL) " . "ORDER BY job.jb_id, tour.tr_sort"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); // Bei Listenkunden besteht der Rechnungste nur aus freetext_1 und Kommissionsnummern und Calculatoreinträgen!!! // Dies gilt ab 12.12.05 auch für alle Aufträge, die über die Auftragslistenerfassung eingegeben wurden (d.h. auch wenn Kunde eigentlich kein Listenkunde ist) // Erweiterung am 24.05.2006: Wenn die Kostenstelle in INV_CSC_ID_NOAUTO als erste Etappenstelle eingestellt // Erweiterung am 19.10.2006: Wenn der Kunde in cs_invtext_mode Häkchen hat $csc_id_payer = getFieldValueFromId("job", "jb_id", $jb_id, "csc_id_payer"); $cs_id = getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id"); // Erweiterung am 26.01.2007: INV_CSC_ID_NOAUTO kann jetzt mehr als nur eine Kostenstelle enthalten $inv_csc_id_noauto_arr = explode("|", getParameterValue("0", "INV_CSC_ID_NOAUTO", $hq_id)); if ($inv_csc_id_noauto_arr === false) $inv_csc_id_noauto_arr = array(); $csc_id_first = $db->getOne("SELECT csc_id from tour WHERE jb_id = $jb_id AND tr_sort = 1"); $noauto_text = false; foreach ($inv_csc_id_noauto_arr as $val) if ($csc_id_first == $val) $noauto_text = true; writeLog_("../log/caglobal_", "\$csc_id_payer: $csc_id_payer, \$cs_id: $cs_id, \$jb_id: $jb_id"); writeLog_("../log/caglobal_", " \$db->getOne(\"SELECT cs_jobbatch from customer WHERE cs_id = $cs_id\"): "); writeLog_("../log/caglobal_", $db->getOne("SELECT cs_jobbatch from customer WHERE cs_id = $cs_id")); writeLog_("../log/caglobal_", ", \$db->getOne(\"SELECT jb_id from jobbatchlist WHERE jb_id = $jb_id\"): "); writeLog_("../log/caglobal_", $db->getOne("SELECT jb_id from jobbatchlist WHERE jb_id = $jb_id")); if ($db->getOne("SELECT cs_jobbatch from customer WHERE cs_id = $cs_id") == 1 || $db->getOne("SELECT jb_id from jobbatchlist WHERE jb_id = $jb_id") == $jb_id || $noauto_text || $db->getOne("SELECT cs_invtext_mode from customer WHERE cs_id = $cs_id") == 1): while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($row["tr_sort"] == 1): $jb_freetext_1 = $row["jb_freetext_1"]; if (trim($jb_freetext_1) != "" && substr($jb_freetext_1, -1) != "\n") $jb_freetext_1 .= "\n"; $jb_invtext = $jb_freetext_1; if (trim($jb_toll) != "") $jb_invtext .= "Maut: " . str_replace(".", ",", $jb_toll) . " EUR\n"; endif; if (trim($row["tr_commission_no"]) != "") $jb_invtext .= "# " . $row["tr_commission_no"] . "\n"; endwhile; $jb_invtext_cr = $jb_invtext; if (trim($jb_hiddenFreetext_1) != "" && substr($jb_hiddenFreetext_1, -1) != "\n") $jb_hiddenFreetext_1 .= "\n"; $jb_invtext .= $jb_hiddenFreetext_1 . trim($tmp_special_jb_invtext); $jb_markup = $db->getOne("SELECT jb_markup FROM job WHERE jb_id = '$jb_id'"); $jb_fixprice = $db->getOne("SELECT jb_fixprice FROM job WHERE jb_id = '$jb_id'"); $jb_serviceprice = $db->getOne("SELECT jb_serviceprice FROM job WHERE jb_id = '$jb_id'"); $jb_invtext .= checkDiscountStr($jb_id, $jb_markup, $jb_fixprice, $jb_serviceprice); if (getParameterValue("0", "INV_SHOW_MARKUP_BATCH", $hq_id) == "1"): if ((getParameterValue("0", "INV_PRINT_SRVPRICE", $hq_id) == "1" || getParameterValue("0", "INV_PRINT_SRVPRICE_" . $cs_id, "0") == "1") && $jb_serviceprice <> 0): $euro_sign = "EUR"; if (getParameterValue("0", "INV_USE_EURO_SIGN", $hq_id) == "1") $euro_sign = chr(128); $jb_invtext .= "\nServicepreis " . str_replace(".", ",", sprintf("%01.2f", $jb_serviceprice)) . " " . $euro_sign; endif; // $jb_invtext .= mkMarkupStr($jb_markup, $jb_id); endif; $jb_invtext = mkLineBreaksWithBreaks($jb_invtext, getParameterValue("0", "INV_MAXCOLS", $hq_id), getParameterValue("0", "INV_MAXLINES", $hq_id), false, $do_log); writeLog_("../log/caglobal_", "\$jb_invtext: $jb_invtext, \$jb_id: $jb_id"); $db->query("UPDATE job SET jb_invtext = '$jb_invtext' WHERE jb_id = '" . $jb_id . "'"); if (getParameterValue("0", "INV_JB_INVOICE_CR", $hq_id) == "1"): $jb_invtext_cr = mkLineBreaksWithBreaks($jb_invtext_cr, getParameterValue("0", "INV_MAXCOLS", $hq_id), getParameterValue("0", "INV_MAXLINES", $hq_id), false, $do_log); $db->query("UPDATE job SET jb_invtext_cr = '$jb_invtext_cr' WHERE jb_id = '" . $jb_id . "'"); endif; $db->query("UPDATE job SET jb_freetext_2 = '$real_jb_freetext_2' WHERE jb_id = '" . $jb_id . "'"); else: $i = 0; $prev_job_id = 0; $prev_tr_remark = ""; $prev_emp_id = ""; $prev_vht_id = ""; $prev_jb_freetext_1 = ""; $csc_name = ""; $jb_orderer = $db->getOne("SELECT jb_orderer FROM job WHERE jb_id = " . $jb_id); $jb_invtext = ""; if (trim($jb_orderer) != "") $jb_invtext = "Besteller/in: " . $jb_orderer . "\n"; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // $prev_csc_name = $csc_name; $prev_emp_id = $row["emp_id"]; $prev_vht_id = $row["vht_id"]; $prev_jb_freetext_1 = $row["jb_freetext_1"]; // current costcenter is payer? // if ($row["csc_id"] == $row["csc_id_payer"]): // $csc_name = "Ihnen"; // else: // $csc_name = $row["csc_name"]; $csc_name = $row["tr_comp"]; if (trim($csc_name) == ".") $csc_name = ""; if (trim($row["tr_person"]) != "" && trim($row["tr_person"]) != ".") $csc_name .= ($csc_name != "" ? ", " : "") . $row["tr_person"]; // Die Adressen der Empfänger werden jetzt auch angezeigt list($ad_street, $ad_zipcode, $ad_city) = getFieldsValueFromId("address", "ad_id", $row["ad_id"], array("ad_street", "ad_zipcode", "ad_city")); if (trim($ad_street) == ".") $ad_street = ""; if (trim($ad_zipcode) == ".") $ad_zipcode = ""; if (trim($ad_city) == ".") $ad_city = ""; $tr_hsno = $row["tr_hsno"]; if (trim($tr_hsno) == ".") $tr_hsno = ""; // Kommissionsnummer if (trim($row["tr_commission_no"]) != "") $csc_name .= ", (Kom. " . $row["tr_commission_no"] . ")"; // endif; if ($row["tr_sort"] == 1): // end of previous job? if ($prev_job_id <> 0): // echo "
$prev_job_id:
" . nl2br($jb_invtext) . "\n
" . nl2br($prev_tr_remark) . "\n
"; // echo nl2br($jb_invtext) . "\n
"; save_jb_invtext($prev_job_id, $jb_invtext, $prev_emp_id, $prev_vht_id, $prev_tr_remark, $prev_jb_freetext_1, $do_log, $real_jb_freetext_2, $tmp_special_jb_invtext); endif; $prev_job_id = $row["jb_id"]; $prev_tr_remark = $row["tr_remark"]; if (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "1"): // z. Zt. nur in Bremen $jb_invtext .= $tmp_special_sids_jb_invtext . "Abs.: $csc_name" . ($csc_name != "" ? ", " : "") . "$ad_street $tr_hsno" . ($ad_street . $tr_hsno != "" ? ", " : "") . "$ad_zipcode $ad_city"; else: $jb_invtext .= $tmp_special_sids_jb_invtext . get_tr_ware_from_to_text($row["tr_ware_from_to"], 1) . ": $csc_name" . ($csc_name != "" ? ", " : "") . "$ad_street $tr_hsno" . ($ad_street . $tr_hsno != "" ? ", " : "") . "$ad_zipcode $ad_city"; endif; elseif ($row["tr_sort"] == 2): if ((($csc_name != "" || $ad_street != "" || $tr_hsno != "" || $ad_zipcode != "" || $ad_city != "") || getParameterValue("0", "INV_PRINT_REMARK", $hq_id) != "1") && trim($row["tr_comp"]) != ""): if (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "1"): // z. Zt. nur in Bremen $jb_invtext .= ", Empf.: $csc_name" . ($csc_name != "" ? ", " : "") . "$ad_street $tr_hsno" . ($ad_street . $tr_hsno != "" ? ", " : "") . "$ad_zipcode $ad_city"; else: $jb_invtext .= "\n" . get_tr_ware_from_to_text($row["tr_ware_from_to"], 2) . ": $csc_name" . ($csc_name != "" ? ", " : "") . "$ad_street $tr_hsno" . ($ad_street . $tr_hsno != "" ? ", " : "") . "$ad_zipcode $ad_city"; endif; endif; else: if ((($csc_name != "" || $ad_street != "" || $tr_hsno != "" || $ad_zipcode != "" || $ad_city != "") || getParameterValue("0", "INV_PRINT_REMARK", $hq_id) != "1") && trim($row["tr_comp"]) != ""): if (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "1"): // z. Zt. nur in Bremen $jb_invtext .= ", Empf.: $csc_name in $ad_zipcode $ad_city"; else: $jb_invtext .= "\n" . get_tr_ware_from_to_text($row["tr_ware_from_to"], 2) . ": $csc_name" . ($csc_name != "" ? ", " : "") . "$ad_street $tr_hsno" . ($ad_street . $tr_hsno != "" ? ", " : "") . "$ad_zipcode $ad_city"; endif; endif; // $jb_invtext .= ", Abs. $prev_csc_name, Empf. $csc_name"; endif; endwhile; if ($prev_job_id <> 0): // echo "
$prev_job_id:
" . nl2br($jb_invtext) . "\n
" . nl2br($prev_tr_remark) . "\n
"; save_jb_invtext($prev_job_id, $jb_invtext, $prev_emp_id, $prev_vht_id, $prev_tr_remark, $prev_jb_freetext_1, $do_log, $real_jb_freetext_2, $tmp_special_jb_invtext); endif; endif; $res->free(); } function mk_jb_invtext_full($jb_id) { global $db, $hq_id, $jb_toll, $jb_hiddenFreetext_1, $phpVersion; $sqlquery = "SELECT DISTINCT job.jb_id, job.hq_id, job.jb_finishtime, job.jb_freetext_2, job.jb_cr_price FROM job WHERE jb_id = " . $jb_id; //writeLog_("../log/check_cr_agio_", "Querying for finished jobs to rebuild `jb_invtext` [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): $hq_id = $row["hq_id"]; // writeLog_("../log/check_cr_agio_", "Writing new invoice text in job " . $row["jb_id"] . " (jb_cr_price: '" . $row["jb_cr_price"] . "', jb_finishtime: '". $row["jb_finishtime"] . "', \$jb_finishtime_start: '$jb_finishtime_start', \$jb_finishtime_today = '$jb_finishtime_today', memory_get_usage() = " . memory_get_usage() . ")"); $jb_cr_price_total = $row["jb_cr_price"]; $jb_hiddenFreetext_1 = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $row["jb_id"] . " AND gdc_gen_fieldname = 'jb_hiddenFreetext_1'"); $jb_cr_serviceprice = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $row["jb_id"] . " AND gdc_gen_fieldname = 'jb_cr_serviceprice'"); // Sondervereinbarungen holen!!! $tmp_freetext_2Arr = explode("²", $row["jb_freetext_2"]); // Unteraufträge holen! list ($tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices) = getJobChildren($row["jb_id"], "job", "false"); $jb_toll = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $row["jb_id"] . " AND gdc_gen_fieldname = 'jb_toll'"); mk_jb_invtext($row["jb_id"], true, $tmp_freetext_2Arr[0], $tmp_freetext_2Arr[1], $tmp_freetext_2Arr[2], $tmp_freetext_2Arr[3], $tmp_add_sids, $tmp_add_prices); endwhile; $res->free(); } function get_tr_ware_from_to_text($tr_ware_from_to, $position) { if ($tr_ware_from_to == 1 || ($tr_ware_from_to == 0 && $position == 1)) return "Abholung"; if ($tr_ware_from_to == 2 || ($tr_ware_from_to == 0 && $position == 2)) return "Anlieferung"; if ($tr_ware_from_to == 3) return "Anlieferung und Abholung"; } function save_jb_invtext($prev_job_id, $jb_invtext, $prev_emp_id, $prev_vht_id, $prev_tr_remark, $prev_jb_freetext_1, $do_log = false, $real_jb_freetext_2 = "", $tmp_special_jb_invtext = "") { global $db, $hq_id, $jb_toll, $jb_hiddenFreetext_1, $jb_cr_price_total, $jb_cr_serviceprice; // Bemerkung übernehmen (nur ween getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == 1) if (getParameterValue("0", "INV_PRINT_REMARK", $hq_id) == "1"): // z. Zt. nur in Bremen if (trim($prev_tr_remark) != "") $jb_invtext = $jb_invtext . "\n" . $prev_tr_remark; endif; // freien Rechnungstext samt Fahrzeugangabe und Mitarbeiter-Kürzel übernehmen $ma_name = ""; if ($prev_emp_id != "" && $prev_emp_id != 0) $ma_name = substr(getFieldValueFromId("user", "usr_id", $prev_emp_id, "usr_firstname"), 0, 1) . substr(getFieldValueFromId("user", "usr_id", $prev_emp_id, "usr_name"), 0, 1); if (trim($prev_jb_freetext_1) != "" && substr($prev_jb_freetext_1, -1) != "\n") $prev_jb_freetext_1 .= "\n"; // "(mit Service)" ausblenden $metatype_string = ""; $metatype_string_cont = ""; if (!($prev_vht_id == 999 && (getParameterValue("0", "INV_PRINT_METATYPE_SERVICE", $hq_id) == "1"))): $metatype_string = "(" . $db->getOne("SELECT mt_value FROM metatype WHERE mt_sort = '" . $prev_vht_id . "' AND mt_type = 'vehicletype'") . ")"; $metatype_string = str_replace("Bus", "Transporter", $metatype_string); $metatype_string_cont = ", "; endif; if (trim($jb_hiddenFreetext_1) != "" && substr($jb_hiddenFreetext_1, -1) != "\n") $jb_hiddenFreetext_1 .= "\n"; $jb_freetext_2 = $prev_jb_freetext_1 . $jb_hiddenFreetext_1 . $tmp_special_jb_invtext . $metatype_string . ($ma_name != "" ? $metatype_string_cont . "MA: " . $ma_name : ""); $jb_freetext_2_cr = $jb_freetext_2; $euro_sign = "EUR"; if (getParameterValue("0", "INV_USE_EURO_SIGN", $hq_id) == "1") $euro_sign = chr(128); if (getParameterValue("0", "INV_JB_INVOICE_CR", $hq_id) == "1"): $jb_freetext_2_cr = $prev_jb_freetext_1 . (getParameterValue("0", "MASK_CR_PRICE_MODE", $hq_id) == "1" && strtotime(getParameterValue("0", "MASK_CR_PRICE_MODE_DATE", $hq_id)) <= strtotime(getFieldValueFromId("job", "jb_id", $prev_job_id, "jb_ordertime")) ? // "Frachtvergütung: " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_total - $jb_cr_serviceprice)) . " " . $euro_sign . "\n" . ($jb_cr_serviceprice > 0 ? "Servicevergütung: " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_serviceprice)) . " " . $euro_sign . "\n" : "") : "") . $metatype_string . ($ma_name != "" && getParameterValue("0", "MASK_CR_PRICE_MODE", $hq_id) != "1" ? $metatype_string_cont . "MA: " . $ma_name : ""); endif; $jb_markup = $db->getOne("SELECT jb_markup FROM job WHERE jb_id = '$prev_job_id'"); $jb_fixprice = $db->getOne("SELECT jb_fixprice FROM job WHERE jb_id = '$prev_job_id'"); $jb_serviceprice = $db->getOne("SELECT jb_serviceprice FROM job WHERE jb_id = '$prev_job_id'"); $jb_freetext_2 .= checkDiscountStr($prev_job_id, $jb_markup, $jb_fixprice, $jb_serviceprice); if (getParameterValue("0", "INV_JB_INVOICE_CR", $hq_id) != "1"): $jb_freetext_2_cr = $jb_freetext_2; endif; if ((getParameterValue("0", "INV_PRINT_SRVPRICE", $hq_id) == "1" || getParameterValue("0", "INV_PRINT_SRVPRICE_" . getFieldValueFromId("costcenter", "csc_id", getFieldValueFromId("job", "jb_id", $prev_job_id, "csc_id_payer"), "cs_id"), "0") == "1") && $jb_serviceprice <> 0): $jb_freetext_2 .= "\nServicepreis " . str_replace(".", ",", sprintf("%01.2f", $jb_serviceprice)) . " " . $euro_sign; endif; $toll_text = ""; if (trim($jb_toll) != "") $toll_text = "\nMaut: " . str_replace(".", ",", $jb_toll) . " EUR"; // if (getParameterValue("0", "MASK_MARKUP_MODE", $hq_id) == "1" || getParameterValue("0", "MASK_ADD_TO_REMARK", $hq_id) == "1"): // $markup_text = ""; // if ($jb_markup <> 0): // $markup_text = mkMarkupStr($jb_markup, $prev_job_id); // endif; // if (getParameterValue("0", "MASK_ADD_TO_REMARK", $hq_id) == "1"): // 23.02.2026: MASK_ADD_TO_REMARK gibt es nicht mehr! Code wird also niemals ausgeführt // // Name und Telefonnummer des Erfassers für Bemerkung // $usr_name_remark = getFieldValueFromId("user", "usr_id", $prev_emp_id, "usr_firstname") . " " . // getFieldValueFromId("user", "usr_id", $prev_emp_id, "usr_name") . " (" . // getFieldValueFromId("user", "usr_id", $prev_emp_id, "usr_phone") . ")"; // $tr_remark = $db->getOne("SELECT tr_remark from tour WHERE jb_id = '$prev_job_id' AND tr_sort = 1"); // // Wenn Name und Telefonnummer des Erfassers noch nicht oder // // nicht mehr vorhanden, dann hier ergänzen // // Aber erst einmal entfernen, falls vorhanden // $tr_remark = str_replace("|$usr_name_remark|", "", $tr_remark); // // Ebenso // if (!(strpos($tr_remark, "|Treibstoffzuschlag") === false)): // $tr_remark = substr($tr_remark, strpos($tr_remark, "|") + 1); // $tr_remark = substr($tr_remark, strpos($tr_remark, "|") + 2); // endif; // $tr_remark = trim($tr_remark); // // jetzt ist die Bemerkung wieder clean und die Angaben können ergänzt werden // $tr_remark = "|" . $usr_name_remark . "|\n|" . substr($markup_text, 1) . "|\n" . $tr_remark; // updateStmt("tour", "jb_id", $prev_job_id, array("tr_remark", $tr_remark) ,"tr_sort = 1"); // endif; // if (getParameterValue("0", "MASK_MARKUP_MODE", $hq_id) == "1"): // $jb_freetext_2 .= $markup_text; // if (getParameterValue("0", "INV_JB_INVOICE_CR", $hq_id) != "1"): // $jb_freetext_2_cr = $jb_freetext_2; // endif; // endif; // endif; //echo nl2br($jb_freetext_2) . "\n
\n
"; $jb_invtext_cr = $jb_invtext . "\n" . $jb_freetext_2_cr; $jb_invtext = $jb_invtext . "\n" . $jb_freetext_2 . (isset($cost_text) ? $cost_text : "") . $toll_text; $co2e = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $prev_job_id . " AND mt_sort = 12"); if ($co2e != "" && $co2e > 0) $jb_invtext .= "\nDie CO2E-Emission nach Well-to-Wheel-Methode für diesen Transport beträgt " . str_replace(".", ",", sprintf("%01.2f", $co2e)) . " kg"; // Prüfen, ob Kommissionsnummer für Rechnung übernommen werden muss //echo "*** vorher: ****
" . nl2br($jb_invtext) . "\n
\n
"; $jb_invtext = mkLineBreaksWithBreaks($jb_invtext, getParameterValue("0", "INV_MAXCOLS", $hq_id), getParameterValue("0", "INV_MAXLINES", $hq_id), false, $do_log); $jb_invtext_cr = mkLineBreaksWithBreaks($jb_invtext_cr, getParameterValue("0", "INV_MAXCOLS", $hq_id), getParameterValue("0", "INV_MAXLINES", $hq_id), false, $do_log); //echo "*** nachher: ****
" . nl2br($jb_invtext) . "\n
\n
"; $db->query("UPDATE job SET jb_invtext = '$jb_invtext' WHERE jb_id = '" . $prev_job_id . "'"); if (getParameterValue("0", "INV_JB_INVOICE_CR", $hq_id) == "1"): $db->query("UPDATE job SET jb_invtext_cr = '$jb_invtext_cr' WHERE jb_id = '" . $prev_job_id . "'"); endif; $db->query("UPDATE job SET jb_freetext_2 = '$real_jb_freetext_2' WHERE jb_id = '" . $prev_job_id . "'"); } function checkDiscountStr($jb_id, $jb_markup, $jb_fixprice, $jb_serviceprice) { global $db, $hq_id, $phpVersion; $euro_sign = "EUR"; // https://www.gerd-riesselmann.net/webentwicklung/utf-8-latin1-aka-iso-8859-1-und-das-euro-zeichen/ if (getParameterValue("0", "INV_USE_EURO_SIGN", $hq_id) == "1") $euro_sign = chr(128); $discount_text = ""; // $full_price = 0; $full_price_without_service = 0; $full_price_without_markup_and_service = 0; $full_price_without_service_with_self_service_discount = 0; $discount_price = 0; $the_discount = 0; $serviceprice_discount = 0; $self_service_discount = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 13"); $self_service_discount = (float) $self_service_discount; $sqlquery = "SELECT trs_discount, trs_price, trs_srv_name FROM tourservice WHERE jb_id = '$jb_id'"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($row["trs_discount"] != 0): if ($discount_text == "" && getParameterValue("0", "INV_PRINT_DISCOUNT", $hq_id) == "1"): $discount_text = "\nRabatt " . str_replace(".", ",", sprintf("%01.2f", $row["trs_discount"])) . "%"; $the_discount = $row["trs_discount"]; endif; $the_markup = $jb_markup; if ($row["trs_srv_name"] == 'Servicepreis'): $the_markup = 0; $serviceprice_discount = 1; endif; $discount_price += round($row['trs_price'] * ((100 + $row["trs_discount"]) / 100), 2); endif; if ($row["trs_srv_name"] != 'Servicepreis') { $full_price_without_markup_and_service += round(round($row['trs_price'] / ((100 - $self_service_discount) / 100), 2) / (1 + ($jb_markup / 100)), 2); $full_price_without_service += round($row['trs_price'] / ((100 - $self_service_discount) / 100), 2); $full_price_without_service_with_self_service_discount += $row['trs_price']; } // $full_price += $row['trs_price']; endwhile; $res->free(); if ($self_service_discount > 0) { $full_price_without_service = $db->getOne("SELECT jbprc_remark FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 13"); $full_price_without_markup_and_service = round($full_price_without_service / (1 + ($jb_markup / 100)), 2); $discount_text = "\nSelbsterfasserrabatt " . str_replace(".", ",", sprintf("%01.2f", $self_service_discount)) . "% auf " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_service)) . " " . $euro_sign . " = " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_service_with_self_service_discount - $full_price_without_service, 2)) . " " . $euro_sign . $discount_text; } //echo $self_service_discount . "
\n"; //echo $jb_markup . "
\n"; //echo $full_price_without_markup_and_service . "
\n"; //echo $full_price_without_service . "
\n"; //echo $full_price_without_service_with_self_service_discount . "
\n"; //die(); if ($the_discount != 0 && getParameterValue("0", "INV_PRINT_DISCOUNT", $hq_id) == "1") { $discount_text .= " auf " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_service_with_self_service_discount)) . " " . $euro_sign . " = " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_service_with_self_service_discount - $discount_price)) . " " . $euro_sign; } if ($jb_markup <> 0 && getParameterValue("0", "MASK_MARKUP_MODE", $hq_id) == "1"): // $markup_price = $db->getOne("SELECT jb_subtotalprice - jb_serviceprice FROM job WHERE jb_id = " . $jb_id); // $totalprice = $db->getOne("SELECT jb_totalprice - jb_serviceprice FROM job WHERE jb_id = " . $jb_id); $discount_text = "\nTreibstoffzuschlag " . str_replace(".", ",", sprintf("%01.2f", $jb_markup)) . "%" . " auf " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_markup_and_service)) . " " . $euro_sign . " = " . str_replace(".", ",", sprintf("%01.2f", $full_price_without_service - $full_price_without_markup_and_service)) . " " . $euro_sign . $discount_text; endif; // if ($discount_text != ""): // // wenn Festpreis vorhanden, dann wg. Rundungs-Dramen lieber den nehmen, anstatt zurückzurechnen; // // nur im Fall der PLZ-, Bereichspreise etc. wird zurückgerechnet // if ($jb_fixprice <> 0): // $full_price = $jb_fixprice + ($serviceprice_discount * $jb_serviceprice); //// $discount_price = $full_price * (1 - ($the_discount / 100)); // endif; // return ($discount_text . " auf " . str_replace(".", ",", sprintf("%01.2f", $full_price)) . " " . $euro_sign . " = " . str_replace(".", ",", sprintf("%01.2f", $full_price - round($full_price * (1 - $the_discount / 100), 2))) . " " . $euro_sign . $self_service_discount_text); // endif; // return $self_service_discount_text; // return ""; return $discount_text; } //function mkMarkupStr($jb_markup, $jb_id) //{ // global $db; // // $markup_text = ""; // if ($jb_markup <> 0): // $markup_price = $db->getOne("SELECT jb_subtotalprice - jb_serviceprice FROM job WHERE jb_id = " . $jb_id); // $totalprice = $db->getOne("SELECT jb_totalprice - jb_serviceprice FROM job WHERE jb_id = " . $jb_id); // $markup_text = "\nTreibstoffzuschlag " . str_replace(".", ",", sprintf("%01.2f", $jb_markup)) . "%" . // " auf " . str_replace(".", ",", sprintf("%01.2f", $markup_price)) . " EUR = " . str_replace(".", ",", sprintf("%01.2f", $totalprice - $markup_price)) . " EUR"; // endif; // return $markup_text; //} // this function is needed for import only // Sericeprice and full Addresses (Berlin) are not considered function mk_jb_price_old($jb_id) { global $db, $phpVersion; $fullPrice = 0; $jb_subtotal = 0; $sqlquery = "SELECT hq_id, vht_id, jb_ordertime, csc_id_payer, csc_id_payer_cash FROM job WHERE jb_id = $jb_id"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow()); $res->free(); $csc_id_payer = $row['csc_id_payer']; $jb_cash = false; if ($csc_id_payer == CSC_ID_PAYER_CASH): $csc_id_payer = $csc_id_payer_cash; $jb_cash = true; endif; $cs_id = getFieldValueFromId("costcenter", "csc_id", "$csc_id_payer", "cs_id"); $srvt_name = $db->getOne("SELECT mt_value FROM metatype WHERE mt_sort = '" . $row["vht_id"] . "' AND mt_type = 'vehicletype'"); $jb_markup = getFuelMarkup($srvt_name, $cs_id, $row['hq_id'], $row['jb_ordertime']); list ($fp, $fd, $fpm, $customer_specific, $special_address) = saveServiceCosts("Grundpreis", $srvt_name, $row['hq_id'], $cs_id, $jb_id, 0, $jb_ordertime, 0, 1, 0, $jb_cash, $csc_id_payer, 0, false, false, false, $jb_markup, $row["vht_id"]); $fullPrice += round($fp * ((100-$fd)/100), 2); $jb_subtotal += round($fpm * ((100-$fd)/100), 2); $ad_id1 = ""; $ad_id2 = ""; $jb_tourdata1 = ""; $jb_tourdata2 = ""; $jb_tourdata3 = ""; $sqlquery = "SELECT address.ad_id, ad_zipcode, ad_city, tr_sort FROM address, tour WHERE jb_id = $jb_id AND address.ad_id = tour.ad_id"; $res1 = $db->query($sqlquery); if (DB::isError($res1)) reportDie ("$PHP_SELF: '$sqlquery': " . $res1->getMessage()); while ($row1 = ($phpVersion >= "8.0" ? $res1->fetch_assoc() : $res1->fetchRow())): $ad_id1 = $ad_id2; $ad_id2 = $row1['ad_id']; if ($row1['tr_sort'] > 1): list ($fp, $fd, $fpm, $customer_specific, $special_address) = saveServiceCosts($ad_id1, $ad_id2, $row['hq_id'], $cs_id, $jb_id, $row['tr_sort'], $jb_ordertime, 0, 1, 0, $jb_cash, $csc_id_payer, 0, false, false, false, $jb_markup, $row["vht_id"]); $fullPrice += round($fp * ((100-$fd)/100), 2); $jb_subtotal += round($fpm * ((100-$fd)/100), 2); endif; $jb_tourdata1 .= ($jb_tourdata1 == "" ? "" : ";") . $row1['ad_zipcode']; $jb_tourdata2 .= ($jb_tourdata2 == "" ? "" : ";") . $row1['ad_city']; // $jb_tourdata3 .= ($jb_tourdata3 == "" ? "" : ";") . (trim($jobList[$i][JL_AD_COUNTRY]) == "" ? "DE" : $jobList[$i][JL_AD_COUNTRY]); endwhile; $res1->free(); updateStmt("job", "jb_id", $jb_id, array( "jb_totalprice", $fullPrice, "jb_subtotalprice", $jb_subtotal, "jb_markup", $jb_markup, "jb_tourdata", $jb_tourdata1 . "|" . $jb_tourdata2 . "|" . $jb_tourdata3)); } if (!defined("MASK_CR_PRICE_MODE")) { define("MASK_CR_PRICE_MODE", "1"); } define("JB_CR_MARKUP", "1"); define("JB_CR_FIXPRICE", "2"); define("JB_CR_FIXSERVICEPRICE", "3"); define("JB_CR_SERVICEPRICE", "4"); define("JB_CR_PROV", "5"); define("JB_CR_SERVICE_PROV", "6"); define("JB_CR_AGIO", "7"); define("JB_MARKUP_MAN", "8"); define("JB_CR_MARKUP_MAN", "9"); define("JB_CR_SUBTOTAL", "10"); // $mode = 0 -> normaler Modus (Schnittstellenaufträge), sonst Neuberechnung von nach dem alten Schema gespeicherten Aufträgen function mk_jb_price($jb_id, $mode = 0) { global $db, $hq_id, $phpVersion; // getServiceVehicleTypeMappingId() needs global hq_id $csc_id_payer_cashArr = array(); $sqlquery = "SELECT hq_id, par_value FROM parameter WHERE par_key = 'CSC_ID_PAYER_CASH' ORDER BY hq_id"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): $csc_id_payer_cashArr[] = $row['par_value']; endwhile; $res->free(); writeLog_("../log/caglobal_", "mk_jb_price: \$jb_id = " . $jb_id . ", \$mode = " . $mode); $fullPrice = 0.00; $jb_subtotal = 0.00; $jb_totalprice = 0.00; // $fullCrPrice = 0.00; $jb_cr_subtotal = 0.00; $getPriceOnly = 1; $jb_cr_price = 0.00; $tmp_discount_rate = 0.00; // $grundpreis = 0.00; // $cr_grundpreis = 0.00; $jb_cr_markup = 0.00; $jb_cr_fixprice = 0.00; $jb_cr_fixserviceprice = 0.00; $jb_cr_serviceprice = 0.00; $jb_cr_price_rate = 0.00; $jb_cr_serviceprice_rate = 0.00; $jb_cr_agio = 0.00; $sqlquery = "SELECT hq_id, vht_id, jb_ordertime, csc_id_payer, csc_id_payer_cash, jb_markup, jb_cr_price, jb_fixprice, jb_cr_subprice, jb_serviceprice, cr_id, jb_createtime, jb_subtotalprice, jb_totalprice FROM job WHERE jb_id = " . $jb_id; $res = $db->query($sqlquery); if (DB::isError($res1)) reportDie ("$PHP_SELF: '$sqlquery': " . $res1->getMessage()); if (!($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow()))) return; $res->free; // getServiceVehicleTypeMappingId() needs global hq_id $hq_id = $row["hq_id"]; // $_CSC_ID_PAYER_CASH_ = getParameterValue("0", "CSC_ID_PAYER_CASH", $row['hq_id']); //echo $row['hq_id'] . ", " . $_CSC_ID_PAYER_CASH_ . "\n"; // $_MASK_CASH_PAYER_SELECT_ = getParameterValue("0", "MASK_CASH_PAYER_SELECT", $row['hq_id']); $csc_id_payer = $row['csc_id_payer']; $jb_cash = false; // if ($csc_id_payer == $_CSC_ID_PAYER_CASH_): if (in_array($csc_id_payer, $csc_id_payer_cashArr)): if ($row["csc_id_payer_cash"] != 0) $csc_id_payer = $row["csc_id_payer_cash"]; $jb_cash = true; // else: // return; endif; $cs_id = getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id"); // Listenkunden werden nicht bearbeitet if ($db->getOne("SELECT cs_jobbatch from customer WHERE cs_id = " . $cs_id) == 1) { // myWriteLog("*** Listenkundenauftrag wurde ignoriert *** " . "\$jb_id = " . $jb_id . ", \$row[\"hq_id\"] = " . $row["hq_id"] . ", \$row[\"jb_ordertime\"] = " . $row["jb_ordertime"]); return; } $srvt_name = $db->getOne("SELECT mt_value FROM metatype WHERE mt_sort = '" . $row['vht_id'] . "' AND mt_type = 'vehicletype'"); if (MASK_CR_PRICE_MODE == "1") { // TSZ für Frachtvergütung über Schnittstelle ist immer der Default (über die Schnittstelle ist jb_cr_markup in jobprice nicht definiert), ansonsten kann er in der jobprice hinterlegt sein $jb_cr_markup = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort IN (" . JB_CR_MARKUP . ", " . JB_CR_MARKUP_MAN . ")"); if ($jb_cr_markup == "") { // kein Eintrag für $jb_cr_markup = nehme Default $jb_cr_markup = getFuelMarkupCr($srvt_name, $cs_id, $row['hq_id'], $row['jb_ordertime']); } if ($mode == 0) { // TSZ für Auftragspreis ist Default, manueller Kurier-TSZ, manuelle Frachtvergütung und manuelle Servicevergütung sind über Schnittstelle nicht vorgesehen $jb_markup = getFuelMarkup($srvt_name, $cs_id, $row['hq_id'], $row['jb_ordertime']); // $jb_cr_fixprice // Für den Fall, dass folgende Werte zukünftig über die Schnittstelle kommen // $jb_cr_markup = $db->getOne("SELECT jbprc_price FROM jobprice WHERE mt_sort IN (1,9)"); // $jb_cr_fixprice = $db->getOne("SELECT jbprc_price FROM jobprice WHERE mt_sort = 2"); // $jb_cr_fixserviceprice = $db->getOne("SELECT jbprc_price FROM jobprice WHERE mt_sort = 3"); } else { // TSZ für Auftragspreis, Manuelle Frachtvergütung und manuelle Servicevergütung sind im Auftrag hinterlegt $jb_markup = $row['jb_markup']; $jb_cr_fixprice = $row['jb_cr_subprice']; $jb_cr_fixserviceprice = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $jb_id . " AND gdc_gen_fieldname = 'jb_cr_serviceprice'"); } } $real_jb_cr_price = $row["jb_cr_price"]; //echo $srvt_name. ", " .$row['hq_id']. ", " .$cs_id. ", " .$jb_id. ", " ."0". ", " .$row['jb_ordertime']. ", " ."0". ", " ."1". ", " .$getPriceOnly. ", " .$jb_cash. ", " .$csc_id_payer. ", " ."0". ", " ."false". ", " ."false". ", " ."false". ", " . $jb_markup. ", " .$row['vht_id'] . "\n"; list ($fp, $fd, $fpm, $final_cr_price, $final_cr_discount, $final_cr_price_markup, $customer_specific, $special_address, $validfrom) = saveServiceCosts("Grundpreis", $srvt_name, $row['hq_id'], $cs_id, $jb_id, 0, $row['jb_ordertime'], 0, 1, $getPriceOnly, $jb_cash, $csc_id_payer, 0, false, false, false, $jb_markup, $jb_cr_markup, $row['vht_id']); //echo "$fp, $fd, $fpm, $final_cr_price, $final_cr_discount, $final_cr_price_markup, $customer_specific, $special_address, $validfrom\n"; $fullPrice += round($fp * ((100-$fd)/100), 2); $jb_subtotal += round($fpm * ((100-$fd)/100), 2); $jb_cr_subtotal += round($final_cr_price_markup * ((100-$fd)/100), 2); $fullCrPrice += round($final_cr_price * ((100-$fd)/100), 2); $ad_id1 = ""; $ad_id2 = ""; $zipcode1 = false; $zipcode2 = false; $jb_tourdata1 = ""; $jb_tourdata2 = ""; $jb_tourdata3 = ""; $sqlquery = "SELECT address.ad_id, ad_country, ad_zipcode, ad_city, tr_sort, tr_hsno, tr_mediationarea_id FROM address, tour WHERE jb_id = " . $jb_id . " AND address.ad_id = tour.ad_id"; $res1 = $db->query($sqlquery); if (DB::isError($res1)) reportDie ("$PHP_SELF: '$sqlquery': " . $res1->getMessage()); while ($row1 = ($phpVersion >= "8.0" ? $res1->fetch_assoc() : $res1->fetchRow())): $ad_id1 = $ad_id2; $zipcode1 = $zipcode2; $ad_id2 = $row1['ad_id'] . "³" . $row1["tr_hsno"]; $zipcode2 = false; if ($row1["tr_mediationarea_id"] != 0): $ad_id2 = $row1["tr_mediationarea_id"]; $zipcode2 = true; endif; if ($row1['tr_sort'] > 1): //echo $jb_id . ", " . $ad_id1 . ", " . $ad_id2 . ", " . $srvt_name. ", " .$row['hq_id']. ", " .$cs_id. ", " .$jb_id. ", " ."0". ", " .$row['jb_ordertime']. ", " ."0". ", " ."1". ", " .$getPriceOnly. ", " .$jb_cash. ", " .$csc_id_payer. ", " ."0". ", " ."false". ", " ."false". ", " ."false". ", " . $jb_markup. ", " .$row['vht_id'] . "\n"; //myWriteLog("$ad_id1, $ad_id2, " . $row['hq_id'] . ", $cs_id, $jb_id, " . $row1['tr_sort'] . ", " . $row['jb_ordertime'] . ", 0, 1, $getPriceOnly, $jb_cash, $csc_id_payer, 0, $zipcode1, $zipcode2, false, $jb_markup, " . $row['vht_id']); list ($fp, $fd, $fpm, $final_cr_price, $final_cr_discount, $final_cr_price_markup, $customer_specific, $special_address, $validfrom) = saveServiceCosts($ad_id1, $ad_id2, $row['hq_id'], $cs_id, $jb_id, $row1['tr_sort'], $row['jb_ordertime'], 0, 1, $getPriceOnly, $jb_cash, $csc_id_payer, 0, $zipcode1, $zipcode2, false, $jb_markup, $jb_cr_markup, $row['vht_id']); //myWriteLog("$fp, $fd, $fpm, $final_cr_price, $final_cr_discount, $final_cr_price_markup, $customer_specific, $special_address, $validfrom"); $fullPrice += round($fp * ((100-$fd)/100), 2); $jb_subtotal += round($fpm * ((100-$fd)/100), 2); //myWriteLog("\$fullPrice = " . $fullPrice); $jb_cr_subtotal += round($final_cr_price_markup * ((100-$fd)/100), 2); $fullCrPrice += round($final_cr_price * ((100-$fd)/100), 2); // $jb_cr_price_rate = round((1 - ($final_cr_price / $fp)) * 100, 2); //myWriteLog("\$jb_cr_price_rate = " . $jb_cr_price_rate . ", \$final_cr_price = " . $final_cr_price . ", \$fp = " . $fp); // if (round($jb_cr_price_rate) - round($jb_cr_price_rate, 2) < 0.07) // $jb_cr_price_rate = round($jb_cr_price_rate); //myWriteLog("\$jb_cr_price_rate = " . $jb_cr_price_rate); //myWriteLog("Station " . $row1['tr_sort'] . ": " . round($fp * ((100-$fd)/100), 2) . " (ohne TSZ: " . round($fpm * ((100-$fd)/100), 2) . "), " . $fd); //myWriteLog("Station " . $row1['tr_sort'] . " Cr: " . round($final_cr_price * ((100-$fd)/100), 2) . " (ohne TSZ: " . round($final_cr_price_markup * ((100-$fd)/100), 2) . "), " . $fd); endif; $jb_tourdata1 .= ($jb_tourdata1 == "" ? "" : ";") . $row1['ad_zipcode']; $jb_tourdata2 .= ($jb_tourdata2 == "" ? "" : ";") . $row1['ad_city']; $jb_tourdata3 .= ($jb_tourdata3 == "" ? "" : ";") . $row1['ad_country']; endwhile; $res1->free(); $jb_cr_price = $jb_cr_fixprice; //echo $jb_cr_price . "\n"; if ($row['jb_fixprice'] == 0): $jb_totalprice = $fullPrice; if ($jb_cr_price == 0 && MASK_CR_PRICE_MODE == "1"): $jb_cr_price = $jb_cr_subtotal; $jb_cr_price_total = $fullCrPrice; $jb_cr_price_rate = get_cr_price_rate($row['hq_id'], $cs_id, $row['jb_ordertime'], $vhtSrvt_name, $row['vht_id']); endif; else: // Festpreis-Discount wird bei Schnittstellenaufträgen nicht berücksichtigt if ($mode != 0) $tmp_discount_rate = $db->getOne("SELECT trs_discount FROM tourservice WHERE jb_id = " . $jb_id . " AND trs_srv_name = 'Fixpreis'"); $jb_subtotal = round($row['jb_fixprice'] * (1 - ($tmp_discount_rate / 100)), 2); $jb_totalprice = round($jb_subtotal * (1 + ($jb_markup / 100)), 2); if (MASK_CR_PRICE_MODE == "1") { if ($jb_cr_price == 0) { if ($real_jb_cr_price == $row["jb_totalprice"]) { // Stuttgart hatte anfangs keinen Kurierabschlag definiert $jb_cr_price_rate = 0; $jb_cr_price = $jb_subtotal; } else { list($jb_cr_price, $jb_cr_price_rate) = getCr_price_global($jb_subtotal, $row['hq_id'], $cs_id, $row['jb_ordertime'], $vhtSrvt_name, $row['vht_id']); } //echo $jb_subtotal . ", " . $jb_cr_price . ", " . $jb_cr_price_rate . "\n"; } $jb_cr_price_total = round($jb_cr_price * (1 + ($jb_cr_markup / 100)), 2); } endif; $jb_subtotalprice += $row['jb_serviceprice']; $jb_totalprice += $row['jb_serviceprice']; if (MASK_CR_PRICE_MODE == "1") { if ($jb_cr_fixserviceprice == 0 && $row["jb_serviceprice"] > 0) list($jb_cr_serviceprice, $jb_cr_serviceprice_rate) = getCr_price_global($row["jb_serviceprice"], $row['hq_id'], $cs_id, $row['jb_ordertime'], $vhtSrvt_name, $row['vht_id']); } if (MASK_CR_PRICE_MODE == "1" && strtotime(MASK_CR_PRICE_MODE_DATE) <= strtotime($row['jb_ordertime'])) { if ($cs_id != "" && $cs_id != 0) { if ($row['cr_id'] != "" && $row['cr_id'] != 0) { $jb_cr_agio = $db->getOne("SELECT cscr_prov FROM customercourier WHERE cs_id = " . $cs_id . " AND cr_id = " . $row['cr_id']); if ($jb_cr_agio == "") $jb_cr_agio = 0; } } else { myWriteLog(""); writeLog_("../log/caglobal_", "mk_jb_price: *** ERROR: \$cs_id not defined ***"); } $jb_cr_price += ($jb_cr_serviceprice + $jb_cr_fixserviceprice); $jb_cr_price_total = round($jb_cr_price_total * (1 + ($jb_cr_agio / 100)), 2) + $jb_cr_serviceprice + $jb_cr_fixserviceprice; } if ($mode == 0) { writeLog_("../log/caglobal_", "mk_jb_price: " . json_encode(array( "jb_totalprice", $jb_totalprice, "jb_subtotalprice", $jb_subtotal, "jb_cr_price", $jb_cr_price_total, "jb_markup", $jb_markup, "jb_tourdata", $jb_tourdata1 . "|" . $jb_tourdata2 . "|" . $jb_tourdata3))); updateStmt("job", "jb_id", $jb_id, array( "jb_totalprice", $jb_totalprice, "jb_subtotalprice", $jb_subtotal, "jb_cr_price", $jb_cr_price_total, "jb_markup", $jb_markup, "jb_tourdata", $jb_tourdata1 . "|" . $jb_tourdata2 . "|" . $jb_tourdata3)); $insert_clause = /*($jb_cr_markup > 0 ?*/ "(" . $jb_id . ", " . JB_CR_MARKUP . ", " . $jb_cr_markup . "), " /*: "")*/ . // ($jb_cr_fixprice > 0 ? "(" . $jb_id . ", " . JB_CR_FIXPRICE . ", " . $jb_cr_fixprice . "), " : "") . // ($jb_cr_fixserviceprice > 0 ? "(" . $jb_id . ", " . JB_CR_FIXSERVICEPRICE . ", " . $jb_cr_fixserviceprice . "), " : "") . // ($jb_cr_serviceprice > 0 ? "(" . $jb_id . ", " . JB_CR_SERVICEPRICE . ", " . $jb_cr_serviceprice . "), " : "") . ($jb_cr_price_rate > 0 ? "(" . $jb_id . ", " . JB_CR_PROV . ", " . $jb_cr_price_rate . "), " : "") . // ($jb_cr_serviceprice_rate > 0 ? "(" . $jb_id . "," . JB_CR_SERVICE_PROV . ", " . $jb_cr_serviceprice_rate . "), " : "") . // ($jb_cr_agio > 0 ? "(" . $jb_id . "," . JB_CR_AGIO . ", " . $jb_cr_agio . "), " : "") . ($jb_cr_price > 0 ? "(" . $jb_id . ", " . JB_CR_SUBTOTAL . ", " . $jb_cr_price . "), " : ""); $sqlquery = "DELETE FROM jobprice WHERE jb_id = " . $jb_id; writeLog_("../log/caglobal_", "mk_jb_price: [" . $sqlquery . "]"); $db->query($sqlquery); $sqlquery = "INSERT INTO jobprice (jb_id, mt_sort, jbprc_price) VALUES " . substr($insert_clause, 0, strlen($insert_clause) - 2); writeLog_("../log/caglobal_", "mk_jb_price: [" . $sqlquery . "]"); $db->query($sqlquery); } else { echo "\$jb_id = " . $jb_id . "\n"; if (round($row['jb_subtotalprice'], 2) != round($jb_subtotal, 2) || round($row['jb_totalprice'], 2) != round($jb_totalprice, 2) || round($db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_SUBTOTAL), 2) != round($jb_cr_price, 2) || round($row['jb_cr_price'], 2) != round($jb_cr_price_total, 2)) { echo "\$row['hq_id'] = " . $row['hq_id'] . ", \$row['jb_ordertime'] = " . $row['jb_ordertime'] . "\n"; // echo "\$row['vht_id'] = " . $row['vht_id'] . "\n"; // echo "\$row['csc_id_payer'] = " . $row['csc_id_payer'] . "\n"; // echo "\$row['csc_id_payer_cash'] = " . $row['csc_id_payer_cash'] . "\n"; // echo "\$row['jb_createtime'] = " . $row['jb_createtime'] . "\n"; if ($row['jb_markup'] != 0) echo "\$row['jb_markup'] = " . $row['jb_markup'] . "\n"; if ($row['jb_fixprice'] != 0) echo "\$row['jb_fixprice'] = " . $row['jb_fixprice'] . "\n"; if ($row['jb_cr_subprice'] != 0) echo "\$row['jb_cr_subprice'] = " . $row['jb_cr_subprice'] . " ( = \$jb_cr_fixprice)\n"; if ($row['jb_serviceprice'] != 0) echo "\$row['jb_serviceprice'] = " . $row['jb_serviceprice'] . "\n"; $jbprc_jb_cr_markup = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_MARKUP); if ($jbprc_jb_cr_markup != "" && $jbprc_jb_cr_markup != 0) echo "JB_CR_MARKUP = " . $jbprc_jb_cr_markup . "\n"; $jbprc_jb_cr_fixprice = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_FIXPRICE); if ($jbprc_jb_cr_fixprice != "" && $jbprc_jb_cr_fixprice != 0) echo "JB_CR_FIXPRICE = " . $jbprc_jb_cr_fixprice . "\n"; $jbprc_jb_cr_fixserviceprice = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_FIXSERVICEPRICE); if ($jbprc_jb_cr_fixserviceprice != "" && $jbprc_jb_cr_fixserviceprice != 0) echo "JB_CR_FIXSERVICEPRICE = " . $jbprc_jb_cr_fixserviceprice . "\n"; $jbprc_jb_cr_serviceprice = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_SERVICEPRICE); if ($jbprc_jb_cr_serviceprice != "" && $jbprc_jb_cr_serviceprice != 0) echo "JB_CR_SERVICEPRICE = " . $jbprc_jb_cr_serviceprice . "\n"; $jbprc_jb_cr_prov = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_PROV); if ($jbprc_jb_cr_prov != "" && $jbprc_jb_cr_prov != 0) echo "JB_CR_PROV = " . $jbprc_jb_cr_prov . "\n"; // echo "\$jb_cr_price_rate = " . $jb_cr_price_rate . "\n"; $jbprc_jb_cr_service_prov = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_SERVICE_PROV); if ($jbprc_jb_cr_service_prov != "" && $jbprc_jb_cr_service_prov != 0) echo "JB_CR_SERVICE_PROV = " . $jbprc_jb_cr_service_prov . "\n"; // echo "\$jb_cr_serviceprice_rate = " . $jb_cr_serviceprice_rate . "\n"; $jbprc_jb_cr_agio = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_AGIO); if ($jbprc_jb_cr_agio != "" && $jbprc_jb_cr_agio != 0) echo "JB_CR_AGIO = " . $jbprc_jb_cr_agio . "\n"; // echo "\$jb_cr_agio = " . $jb_cr_agio . "\n"; $jbprc_jb_markup_man = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_MARKUP_MAN); if ($jbprc_jb_markup_man != "" && $jbprc_jb_markup_man != 0) echo "JB_MARKUP_MAN = " . $jbprc_jb_markup_man . "\n"; $jbprc_jb_cr_markup_man = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_MARKUP_MAN); if ($jbprc_jb_cr_markup_man != "" && $jbprc_jb_cr_markup_man != 0) echo "JB_CR_MARKUP_MAN = " . $jbprc_jb_cr_markup_man . "\n"; $jbprc_jb_cr_subtotal = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_SUBTOTAL); if ($jbprc_jb_cr_subtotal != "" && $jbprc_jb_cr_subtotal != 0) echo "JB_CR_SUBTOTAL = " . $jbprc_jb_cr_subtotal . "\n"; if (round($jbprc_jb_cr_subtotal, 2) != round($jb_cr_price, 2)) // repairing a previous bug echo ($jbprc_jb_cr_subtotal != "" ? "UPDATE jobprice SET jbprc_price = " . $jb_cr_price . " WHERE jb_id = " . $jb_id . " AND mt_sort = " . JB_CR_SUBTOTAL . " AND jbprc_price = " . $jbprc_jb_cr_subtotal : "INSERT INTO jobprice (jb_id, mt_sort, jbprc_price) VALUES " . "(" . $jb_id . ", " . JB_CR_SUBTOTAL . ", " . $jb_cr_price . ")") . ";\n"; echo "\$row['jb_subtotalprice'] = " . $row['jb_subtotalprice'] . ", \$jb_subtotal = " . $jb_subtotal . "\n"; echo "\$row['jb_totalprice'] = " . $row['jb_totalprice'] . ", \$jb_totalprice = " . $jb_totalprice . "\n"; echo "jb_cr_subtotal (mt_sort = " . JB_CR_SUBTOTAL . ") = " . $jbprc_jb_cr_subtotal . ", \$jb_cr_subtotal = " . $jb_cr_price . "\n"; echo "\$row['jb_cr_price'] = " . $row['jb_cr_price'] . ", \$jb_cr_price_total = " . $jb_cr_price_total . "\n"; } } } function mk_jb_cr_price_text($jb_cr_price_tmpArr, $f_jb_id, $jb_cr_price_tmp_time, $jb_km_unrounded) { global $db; $tsz_string = " (inkl. " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$cr_fuel_markup"])) . "% TSZ)"; return "Stand: " . substr($jb_cr_price_tmp_time, 8, 2) . "." . substr($jb_cr_price_tmp_time, 5, 2) . "." . substr($jb_cr_price_tmp_time, 0, 4) . " " . substr($jb_cr_price_tmp_time, 10, 9) . " Uhr\n" . "Fahrer: " . $jb_cr_price_tmpArr["\$cr_sid"] . "\n" . "Fahrzeug: " . $jb_cr_price_tmpArr["\$cr_vehicle"] . "\n" . "Standort: " . $jb_cr_price_tmpArr["\$current_location"] . " (" . $jb_cr_price_tmpArr["\$cr_gps_lat"] . ", " . $jb_cr_price_tmpArr["\$cr_gps_long"] . ")" . "\n" . ($jb_cr_price_tmpArr["\$cr_is_occupied"] != 1 ? "Anfahrt min.: " . $jb_cr_price_tmpArr["\$starting_min"] : "Aktueller Auftrag: " . $jb_cr_price_tmpArr["\$jb_id_occupied"]) . "\n" . ($jb_cr_price_tmpArr["\$cr_is_occupied"] != 1 ? "KM zur Start-PLZ: " . $jb_cr_price_tmpArr["\$starting_km"] : "Ziel-PLZ: " . $jb_cr_price_tmpArr["\$cur_zipcode_occupied"]) . "\n" . ($jb_cr_price_tmpArr["\$is_desiredzipcode"] != 1 ? "Heimat-PLZ: " : "Wunsch-PLZ: ") . $jb_cr_price_tmpArr["\$cr_homezipcode"] . " (" . $jb_cr_price_tmpArr["\$home_gps_lat"] . ", " . $jb_cr_price_tmpArr["\$home_gps_long"] . ")" . "\n" . (isset($jb_cr_price_tmpArr["\$ending_km"]) ? "KM zur " . ($jb_cr_price_tmpArr["\$is_desiredzipcode"] != 1 ? "Heimat-PLZ" : "Wunsch-PLZ") . ": " . $jb_cr_price_tmpArr["\$ending_km"] . "\n" : ""). "Frachtvergütung: " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$jb_cr_price"])) . " " . chr(128) . $tsz_string . "\n\n" . (getParameterValue("0", "BWV_CR_PRICE_RETOUR", "0") == "1" ? "Vergütung nur Hinfahrt:\n Grundpreis " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$basic_cr_price"])) . " " . chr(128) . " und " . round($jb_cr_price_tmpArr["\$starting_m"] / 1000 + $jb_km_unrounded) . " Km zu " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$cr_price_per_km_rund"])) . " " . chr(128) . " = " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$jb_cr_price_one_way"])) . " " . chr(128) . $tsz_string . "\n" : "") . "Vergütung nach Rundkilometern:\n Grundpreis " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$basic_cr_price"])) . " " . chr(128) . " und " . $jb_cr_price_tmpArr["\$round_km"] . " Km zu " . $jb_cr_price_tmpArr["\$cr_price_per_km_rund"] . " " . chr(128) . " = " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$cr_price_longhaul_rund"])) . " " . chr(128) . $tsz_string . "\n" . "Vergütung nach Lastkilometern (PZM):\n " /* . str_replace(".", ",", sprintf("%01.2f", round($db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $f_jb_id . " AND mt_sort = 11"), 2))) . " Km zu " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$cr_price_per_km_last"])) . " " . chr(128) . " = " */ . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_tmpArr["\$cr_price_longhaul_last"])) . " " . chr(128) . $tsz_string . "\n"; } // Prüfen, ob das jb_incomplete-Flag gesetzt werden muss // $default = 1 erzwingt das Setzen des jb_incomplete-Flags function check_jb_incomplete($jb_id, $default = 0) { global $PHP_SELF, $db, $usr_id, $phpVersion; // 1. Kriterium: Plz-Preis/Fixpreis fehlt bzw ist Null $sqlquery = "SELECT trs_srv_name, trs_price, trs_discount FROM tourservice WHERE jb_id = '$jb_id' AND trs_srvt_name != 'z'"; // writeLog_("../log/caglobal_", "\$sqlquery = " . $sqlquery); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $significant_price = 0; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // writeLog_("../log/caglobal_", "\$row = " . json_encode($row)); if (strpos($row['trs_srv_name'], "Grundpreis") === false): // Grundpreis wird ignoriert if ($row['trs_price'] < 0.02 && $row['trs_price'] > -0.02): // 29.06.2018: Ein einziger 0-Preis (oder 0,01 € ab 01.11.2018) muss jb_incomplete setzen; $significant_price = 0; writeLog_("../log/caglobal_", "\$significant_price = " . $significant_price); break; endif; $significant_price += ($row['trs_price'] * ((100 - $row['trs_discount']) / 100)); endif; endwhile; $res->free(); // 2. Kriterium: Kommissionsnummer erforderlich, aber keine gesetzt $cs_commission_no_ok = true; $csc_id_payer = getFieldValueFromId("job", "jb_id", $jb_id, "csc_id_payer"); $cs_commission_no = $db->getOne("SELECT cs_commission_no from customer WHERE cs_id = " . getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id")); if ($cs_commission_no == 1 && // Neu ab 31.01.2020: Fehlende Kommissionsnummer führt nicht mehr zu jb_incomplete, wenn vom Kunden eingegeben getFieldValueFromId("user", "usr_id", $usr_id, "usr_type") != 2): $cs_commission_no_ok = false; // Ab 01.12.2025: jb_commission_no statt tr_commission_no // if ($db->getOne("SELECT COUNT(tr_commission_no) FROM tour WHERE jb_id = '$jb_id' AND (TRIM(tr_commission_no) != '' AND tr_commission_no IS NOT NULL)") > 0): if ($db->getOne("SELECT TRIM(jb_commission_no) FROM job WHERE jb_id = '$jb_id'") != ""): $cs_commission_no_ok = true; endif; endif; //echo "|$cs_commission_no_ok|
\n"; // 3. Kriterium: 18.03.2024: co2e ist erforderlich (cmp_sustainability_email ist gesetzt), aber nicht vorhanden $cmp_sustainability_email_ok = true; $cs_id = getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id"); //echo "|\$cs_id=$cs_id|
\n"; $cmp_sustainability_email = $db->getOne("SELECT cmp_sustainability_email from company WHERE cmp_id = " . $db->getOne("SELECT cmp_id from customer WHERE cs_id = " . $cs_id)); writeLog_("../log/caglobal_", "\$jb_id = $jb_id, \$cs_id = $cs_id, \$cmp_sustainability_email = |$cmp_sustainability_email|"); if ($cmp_sustainability_email == ""): $cs_id_parent = getFieldValueFromId("customer", "cs_id", $cs_id, "cs_id_parent"); //echo "|\$cs_id_parent=$cs_id_parent|
\n"; if ($cs_id_parent != 0): $cmp_sustainability_email = $db->getOne("SELECT cmp_sustainability_email from company WHERE cmp_id = " . $db->getOne("SELECT cmp_id from customer WHERE cs_id = " . $cs_id_parent)); writeLog_("../log/caglobal_", "\$jb_id = $jb_id, \$cs_id_parent = $cs_id_parent, \$cmp_sustainability_email = |$cmp_sustainability_email|"); endif; endif; if ($cmp_sustainability_email != ""): $jb_status = $db->getOne("SELECT jb_status FROM job WHERE jb_id = " . $jb_id); if ($jb_status == 2): $cmp_sustainability_email_ok = false; $co2e = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 12"); if ($co2e != "" && $co2e > 0): $cmp_sustainability_email_ok = true; endif; writeLog_("../log/caglobal_", "\$jb_id = $jb_id, \$jb_status = $jb_status, \$co2e = $co2e, \$cmp_sustainability_email_ok = |$cmp_sustainability_email_ok|"); endif; endif; //echo "|$cmp_sustainability_email_ok|
\n"; // Nun schaun mer mal, ob das jb_incomplete-Flag gesetzt oder gelöscht werden muss if ($significant_price == 0 || $cs_commission_no_ok == false || $cmp_sustainability_email_ok == false || $default == 1): $tmpArr = array("jb_incomplete", 1); else: $tmpArr = array("jb_incomplete", 0); endif; // Neu ab 23.01.2013: Grundpreis nullen wenn usr_type = 2 und entfernungsabhängige Preiskomponente fehlt if ($significant_price == 0 && getFieldValueFromId("user", "usr_id", $usr_id, "usr_type") == 2): updateStmt("tourservice", "jb_id", $jb_id, array("trs_price", 0), "trs_srv_name = 'Grundpreis'"); array_push ($tmpArr, "jb_totalprice", 0, "jb_subtotalprice", 0); endif; writeLog_("../log/caglobal_", "\$jb_id = $jb_id, \$tmpArr = " . json_encode($tmpArr)); updateStmt("job", "jb_id", $jb_id, $tmpArr); // Unteraufträge beachten!!! list ($tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices) = getJobChildren($jb_id, "job", false); $tmp_add_jb_idsArr = explode("¹", $tmp_add_jb_ids); for ($i = 0; $i < count($tmp_add_jb_idsArr); $i++): // jb_id für Beleg und Gegenbeleg extrahieren $tmp_add_jb_idsSubArr = explode("²", $tmp_add_jb_idsArr[$i]); // incomplete-flag schreiben if ($tmp_add_jb_idsArr[$i] != ""): // echo $tmp_add_jb_idsSubArr[0] . "
"; updateStmt("job", "jb_id", $tmp_add_jb_idsSubArr[0], $tmpArr); // echo $tmp_add_jb_idsSubArr[1] . "
"; updateStmt("job", "jb_id", $tmp_add_jb_idsSubArr[1], $tmpArr); endif; endfor; // die(); } function check_jb_serviceprice($jb_id, $hq_id, $jb_ordertime) { global $db; if (getParameterValue("0", "MASK_SERVICE_PRICE_STREET", $hq_id) != "") { $maskServicePriceStreetArr = explode(",", getParameterValue("0", "MASK_SERVICE_PRICE_STREET", $hq_id)); $msps_ad_zipcode = $maskServicePriceStreetArr[0]; $msps_ad_street = $maskServicePriceStreetArr[1]; $msps_ad_street_no_oddArr = explode("-", $maskServicePriceStreetArr[2]); $msps_ad_street_no_odd_from = $msps_ad_street_no_oddArr[0]; $msps_ad_street_no_odd_to = $msps_ad_street_no_oddArr[1]; $msps_ad_street_no_evenArr = explode("-", $maskServicePriceStreetArr[3]); $msps_ad_street_no_even_from = $msps_ad_street_no_evenArr[0]; $msps_ad_street_no_even_to = $msps_ad_street_no_evenArr[1]; $msps_ad_street_no_valid_from = $maskServicePriceStreetArr[4]; $msps_ad_street_no_valid_to = $maskServicePriceStreetArr[5]; $msps_ad_street_no_price = $maskServicePriceStreetArr[6]; if (strtotime(substr($jb_ordertime, 0, 10)) >= strtotime($msps_ad_street_no_valid_from) && strtotime(substr($jb_ordertime, 0, 10)) <= strtotime($msps_ad_street_no_valid_to)) { $i = 1; do { // gespeicherte Tour-Daten holen if (existsEntry("tour", array("jb_id", $jb_id, "tr_sort", $i))){ $tourFound = 1; list($csc_id, $tr_comp, $tr_person, $ad_street, $tr_hsno, $ad_zipcode, $ad_city, $ad_country, $tr_remark, $tr_status, $tr_ware_from_to, $tr_commission_no, $tr_mediationarea_id, $tr_status, $tr_sign, $tr_signname, $tr_finishtime, $tr_id) = getTourData($jb_id, $i); $tr_hsno_ori = $tr_hsno; $tr_hsno = ereg_replace("[^[:digit:]+]","-", str_replace(" ", "", trim($tr_hsno))); if (!(strpos($tr_hsno, "-") === FALSE)) : $tr_hsno = substr($tr_hsno, 0, strpos($tr_hsno, "-")); endif; //if ($msps_ad_zipcode == $ad_zipcode && $msps_ad_street == substr($ad_street, 0, strlen($msps_ad_street))) // echo $msps_ad_zipcode . " " . $ad_zipcode . " " . $msps_ad_street . " " . substr($ad_street, 0, strlen($msps_ad_street)) . " " . $tr_hsno_ori . "\n" . // $msps_ad_street_no_even_from . " " . $tr_hsno . " " . $msps_ad_street_no_even_to . " " . $tr_hsno . "\n" . // $msps_ad_street_no_odd_from . " " . $tr_hsno . " " . $msps_ad_street_no_odd_to . " " . $tr_hsno . "\n"; if ($msps_ad_zipcode == $ad_zipcode && $msps_ad_street == substr($ad_street, 0, strlen($msps_ad_street)) && (($msps_ad_street_no_even_from <= $tr_hsno && $msps_ad_street_no_even_to >= $tr_hsno) || ($msps_ad_street_no_odd_from <= $tr_hsno && $msps_ad_street_no_odd_to >= $tr_hsno))) { $jb_serviceprice = $db->getOne("SELECT jb_serviceprice FROM job WHERE jb_id = " . $jb_id); $jb_totalprice = $db->getOne("SELECT jb_totalprice FROM job WHERE jb_id = " . $jb_id); $jb_subtotalprice = $db->getOne("SELECT jb_subtotalprice FROM job WHERE jb_id = " . $jb_id); $jb_serviceprice += $msps_ad_street_no_price; $jb_totalprice += $msps_ad_street_no_price; $jb_subtotalprice += $msps_ad_street_no_price; //echo $jb_serviceprice . " " . $jb_totalprice . " " . $jb_subtotalprice . "\n"; writeLog_("../log/caglobal_", "Automatic servicetime added: \$jb_id = $jb_id, \$jb_ordertime = $jb_ordertime, \$jb_serviceprice = $jb_serviceprice"); updateStmt("job", "jb_id", $jb_id, array("jb_serviceprice", $jb_serviceprice, "jb_totalprice", $jb_totalprice, "jb_subtotalprice", $jb_subtotalprice)); deleteStmt("tourservice", "jb_id = " . $jb_id . " AND trs_srv_name = 'Servicepreis'"); $csc_id_payer = $db->getOne("SELECT csc_id_payer FROM job WHERE jb_id = " . $jb_id); $tmpArr = array("jb_id", $jb_id, "tr_sort", 0, "srv_id", 0, "trs_srv_name", "Servicepreis", "srvt_id", 0, "trs_srvt_name", "", "trs_price", $jb_serviceprice, "trs_discount", 0, "csc_id", $csc_id_payer); insertStmt("tourservice", $tmpArr); } } else { $tourFound = 0; } $i++; } while ($tourFound == 1); } } } function mkCsc_id_start($csc_id_start) { global $db, $hq_id, $phpVersion; if (trim($csc_id_start) == "" || $csc_id_start == 0) return ""; $sqlquery = "SELECT csc2.csc_id, csc2.csc_name, cs.cs_id, cs.cs_eid, cs.csc_id_payer, cs.cs_commission_no," . " cmp.cmp_id, cmp.cmp_comp, cmp.cmp_comp2, cmp.cmp_authenticated, cmp.cmp_remark, cmp.cmp_match, cmp.tx_id, " . " cscad.ad_id, cscad.cscad_comp, cscad.cscad_comp2, cscad.cscad_hsno," . " cscad.cscad_remark, cscad.cscad_person, cscad.cscad_phone," . " ad.ad_street, ad.ad_zipcode, ad.ad_city, ad.ad_country " . " FROM company AS cmp, customer AS cs, costcenter AS csc, costcenter AS csc2, costcenteraddress AS cscad, address AS ad " . " WHERE csc.csc_id = $csc_id_start AND cs.hq_id = '$hq_id' AND cmp.cmp_id = cs.cmp_id AND cs.cs_id = csc.cs_id " . " AND csc2.csc_id = csc.csc_id AND csc2.csc_is_extern = '0' AND csc2.csc_id = cscad.csc_id AND cscad.adt_id = '4' AND cscad.ad_id = ad.ad_id"; $result = $db->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): $csc_id_payer_comp = ""; if ($row["csc_id_payer"] != "" && $row["csc_id_payer"] != 0) $csc_id_payer_comp = $db->getOne("SELECT cmp_comp FROM company, customer, costcenter WHERE company.cmp_id = customer.cmp_id AND customer.cs_id = costcenter.cs_id AND costcenter.csc_id = " . $row["csc_id_payer"]); $csc_id_start_js_code = " setJobList(0, jl_csc_id, " . $row["csc_id"] . ");\n" . " setJobList(0, jl_tr_comp, '" . my_str_check($row["cscad_comp"]) . "');\n" . " setJobList(0, jl_tr_person, '" . my_str_check($row["cscad_person"]) . "');\n" . " setJobList(0, jl_ad_street, '" . my_str_check($row["ad_street"]) . "');\n" . " setJobList(0, jl_tr_hsno, '" . my_str_check($row["cscad_hsno"]) . "');\n" . " setJobList(0, jl_ad_zipcode, '" . $row["ad_zipcode"] . "');\n" . " setJobList(0, jl_ad_city, '" . my_str_check($row["ad_city"]) . "');\n" . " setJobList(0, jl_ad_country, '" . my_str_check($row["ad_country"]) . "');\n" . " setJobList(0, jl_tr_remark, '" . my_str_check($row["cscad_remark"]) . "');\n" . " setJobList(0, jl_csc_id_payer, \"false\");\n" . " setJobList(0, jl_hide_tr_remark, \"true\");\n" . " if ('" . my_str_check($row["csc_id_payer"]) . "' != '')\n" . " {\n" . " setCsc_id_payer('" . my_str_check($row["csc_id_payer"]) . "', '" . my_str_check($csc_id_payer_comp) . "');\n" . " parent.job_options.document.tourOptions.payer_is_default.value = \"true\";\n" . " }\n" . " if (" . $row["tx_id"] . " != \"\" && " . $row["tx_id"] . " != 0)\n" . " {\n" . " checkJb_sales_tax_rate_sign(" . $row["tx_id"] . ");\n" . " }\n" . " if ('" . $row["cs_eid"] . "' != \"\" && '" . $row["cs_eid"] . "' != 0)\n" . " {\n" . javascriptAdd_cs_eid($row['csc_id'], "") . " }\n" . " parent.job_tour.document.tourForm.elements[nach_fields[jl_tr_comp]].focus();\n" . " self.setTimeout(\"refreshFormFields()\", 100);\n" . " self.setTimeout(\"resetSignificantPriceValues()\", 150);\n" . " self.setTimeout(\"checkSendTour()\", 200);\n"; if (DB::isError($result)) reportDie ("$PHP_SELF: " . $result->getMessage()); endwhile; $result->free(); return $csc_id_start_js_code; } function getAreaName($zipcode, $type = 0) { global $db, $hq_id; $strStart = ""; $strMid = " ("; $strEnd = ")"; if ($type == 1): $strStart = "("; $strMid = " "; $strEnd = ")"; endif; if (strlen($zipcode) == 5 && is_numeric($zipcode)): return ( $strStart . $db->getOne( "SELECT srvpa.srvpa_name " . "FROM serviceplz AS srvp, serviceplzareamapping AS srvpam, serviceplzarea AS srvpa " . "WHERE srvp.srvp_plz = $zipcode AND srvp.srvp_id = srvpam.srvp_id AND srvpa.hq_id = '$hq_id' AND srvpam.srvpa_id = srvpa.srvpa_id") . $strMid . $db->getOne( "SELECT srvpa.srvpa_longname " . "FROM serviceplz AS srvp, serviceplzareamapping AS srvpam, serviceplzarea AS srvpa " . "WHERE srvp.srvp_plz = $zipcode AND srvp.srvp_id = srvpam.srvp_id AND srvpa.hq_id = '$hq_id' AND srvpam.srvpa_id = srvpa.srvpa_id") . $strEnd); else: return ""; endif; } // Feststellen, ob ein Auftrag ursprünglich als Nacherfassung eingegeben wurde function job_was_afterwards($jb_id) { global $db; if ($db->getOne( "SELECT COUNT(*) FROM phoenix_log.log AS lg WHERE lg.jb_id = $jb_id AND (lg.logo_id = 1 OR lg.logo_id = 25) AND LEFT(lg.logo_description, 13) = 'Nacherfassung'") >= 1) return true; // Jobs aus Listenerfassung berücksichtigen! if ($db->getOne( "SELECT COUNT(*) FROM jobbatchlist AS jbl WHERE jbl.jb_id = $jb_id") >= 1) return true; return false; } /* // Kommissionsnummer für den Export in jb_invtext kopieren function copy_commission_no($jb_id) { global $PHP_SELF, $db, $phpVersion; // Kommissionsnummer finden $commission_no_all = ""; */ /* $csc_id_payer = getFieldValueFromId("job", "jb_id", $jb_id, "csc_id_payer"); */ // Kommissionsnummer nur dann suchen und exportieren, wenn das entsprechende Flag beim Payer gesetzt ist // --> macht irgendwie keinen Sinn; wenn schon da, dann auch ausgeben... egal, wie dahin gekommen... /* $cs_commission_no = $db->getOne("SELECT cs_commission_no from customer WHERE cs_id = " . getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id")); if ($cs_commission_no == 1): */ /* $sqlquery = "SELECT tr_commission_no FROM tour WHERE jb_id = '$jb_id' AND (tr_commission_no != '' AND tr_commission_no IS NOT NULL)"; $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); $commission_no_all = ""; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($row['tr_commission_no'] != ""): $commission_no_all = $commission_no_all . ($commission_no_all != "" ? ", " : "Kommission: ") . $row['tr_commission_no'] . "\n"; endif; endwhile; $res->free(); if ($commission_no_all != ""): // $jb_invtext = $db->getOne("SELECT jb_invtext from job WHERE jb_id = '" . $jb_id . "'"); // $jb_invtext .= $commission_no_all; // $tmpArr = array("jb_invtext", $jb_invtext); // updateStmt("job", "jb_id", $jb_id, $tmpArr); return ("\n" . $commission_no_all); endif; */ /* endif; */ /* return ""; } */ function getNextOrderDate($jahr, $monat, $tag, $jb_permanent, $jb_permanent2, $doLog = false, $endejahr = 2038, $endemonat = 1, $endetag = 1) { // include_once("../include/calendar.inc.php"); $tempDate = array($jahr, sprintf("%d", $monat), sprintf("%d", $tag)); $tempDateMonth = array($jahr, sprintf("%d", $monat)); switch ($jb_permanent) { // die ersten drei Fälle werden gleich behandelt, da es hier nur auf den Wert in jb_permanent2 ankommt case 1: // werktags case 2: // werktags mit Samstag case 3: // täglich case 9: // feiertags if ($jb_permanent2 != "0000000" || $jb_permanent != 9) { do { $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); // Nummer des nächgsten Wochentages ermitteln $dayNo = date("w", mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0])); // Nummer umrechnen, damit mit dem Wert in jb_permanent2 verglichen werden kann // date() : Montag = 1, Dienstag = 2, ..., Samstag = 6, Sonntag = 0 // jb_permanent2: Montag = 0, Dienstag = 1, ..., Samstag = 5, Sonntag = 6 if ($dayNo == 0): $dayNo = 6; else: $dayNo -= 1; endif; if ($doLog) writeLog_("../log/check_jb_permanent_standing_", " next date: " . $tempDate[0] . "-" . $tempDate[1] . "-" . $tempDate[2] . ", dayNo: $dayNo"); // Überprüfen, ob der nächste Wochentag in jb_permanent2 vorhanden ist $jb_permanent_ok = false; if (substr($jb_permanent2, $dayNo, 1) == "1") $jb_permanent_ok = true; } while ((isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "" || !$jb_permanent_ok) /* && (mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]) <= mktime(0, 0, 0, $endemonat, $endetag, $endejahr))*/); } if ($jb_permanent == 9) { $jb_permanent2_tempDate = $tempDate; $tempDate = array($jahr, sprintf("%d", $monat), sprintf("%d", $tag)); do { $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); } while (!(isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") && mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]) <= mktime(0, 0, 0, $endemonat, $endetag, $endejahr)); if ($doLog) writeLog_("../log/check_jb_permanent_standing_", " next date from \$jb_permanent == 9: " . $tempDate[0] . "-" . $tempDate[1] . "-" . $tempDate[2]); //print_r($jb_permanent2_tempDate); //echo mktime(0, 0, 0, $jb_permanent2_tempDate[1], $jb_permanent2_tempDate[2], $jb_permanent2_tempDate[0]) . "\n"; //print_r($tempDate); //echo mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]) . "\n"; if ($jb_permanent2 != "0000000" && mktime(0, 0, 0, $jb_permanent2_tempDate[1], $jb_permanent2_tempDate[2], $jb_permanent2_tempDate[0]) < mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0])) { $tempDate = $jb_permanent2_tempDate; } if ($doLog) writeLog_("../log/check_jb_permanent_standing_", " resulting date with \$jb_permanent == 9: " . $tempDate[0] . "-" . $tempDate[1] . "-" . $tempDate[2]); } break; case 4: // wöchentlich $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 7); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; case 5: // vierzehntägig $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 14); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; case 6: // monatlich $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 1); $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; if ($tempDate[2] > daysPerMonth($tempDateMonth[0], $tempDateMonth[1])) $tempDate[2] = daysPerMonth($tempDateMonth[0], $tempDateMonth[1]); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; case 7: // monatlich zum Monatsende $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 1); $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; $tempDate[2] = daysPerMonth($tempDateMonth[0], $tempDateMonth[1]); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], -1); break; case 8: // vierzehntätig zum Monatsende (15. und 31.) if ($tempDate[2] < 20): // nächster Termin ist Monatsende desselben Monats // wie monatlich zum Monatsende $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; $tempDate[2] = daysPerMonth($tempDateMonth[0], $tempDateMonth[1]); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], -1); break; else: // nächster Termin ist der 15. des nächsten Monats $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 1); $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; $tempDate[2] = 15; while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], -1); break; endif; case 10: // vierzehntätig zum Monatsanfang (16. und 1.) if ($tempDate[2] < 16): // nächster Termin ist der 16. desselben Monats $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; $tempDate[2] = 16; while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; else: // nächster Termin ist der 1. des nächsten Monats $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 1); $tempDate[0] = $tempDateMonth[0]; $tempDate[1] = $tempDateMonth[1]; $tempDate[2] = 1; while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; endif; case 11: // vierwöchentlich $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 28); while (isPublicHoliday($tempDate[0], $tempDate[1], $tempDate[2], $doLog) != "") $tempDate = addDaysComplete($tempDate[0], $tempDate[1], $tempDate[2], 1); break; // case 9: // quartalsweise // do // $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 3); // while (isPublicHoliday($tempDateMonth[0], $tempDateMonth[1], $tempDate[2], $doLog) != ""); // $tempDate[0] = $tempDateMonth[0]; // $tempDate[1] = $tempDateMonth[1]; // break; // case 10: // halbjährlich // do // $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 6); // while (isPublicHoliday($tempDateMonth[0], $tempDateMonth[1], $tempDate[2], $doLog) != ""); // $tempDate[0] = $tempDateMonth[0]; // $tempDate[1] = $tempDateMonth[1]; // break; // case 11: // jährlich // do // $tempDateMonth = addMonths($tempDateMonth[0], $tempDateMonth[1], 12); // while (isPublicHoliday($tempDateMonth[0], $tempDateMonth[1], $tempDate[2], $doLog) != ""); // $tempDate[0] = $tempDateMonth[0]; // $tempDate[1] = $tempDateMonth[1]; } return $tempDate; } function isPublicHoliday($year, $month, $day, $doLog = false) { global $ph; for ($i = 0; $i < count($ph); $i++): if ($ph[$i][0] == $year && $ph[$i][1] == $month && $ph[$i][2] == $day): if ($doLog) writeLog_("../log/check_jb_permanent_standing_", " isPublicHoliday($year, $month, $day) = true"); return true; endif; endfor; if ($doLog) writeLog_("../log/check_jb_permanent_standing_", " isPublicHoliday($year, $month, $day) = false"); return false; } $timeofday1 = array(); function trace_execution_time_start() { global $timeofday1; $timeofday1[] = gettimeofday(); //echo $timeofday1["sec"] . "." . sprintf("%06d", $timeofday1["usec"]) . "
"; } function trace_execution_time_stop($msg = "") { global $timeofday1; $tod1 = $timeofday1; $timeofday2 = gettimeofday(); $tod1_pop = array_pop($tod1); //echo $timeofday2["sec"] . "." . sprintf("%06d", $timeofday2["usec"]) . "
"; return $msg . "[" . (($timeofday2["usec"] >= $tod1_pop["usec"]) ? ($timeofday2["sec"] - $tod1_pop["sec"]) : ($timeofday2["sec"] - $tod1_pop["sec"] - 1)) . "." . (($timeofday2["usec"] >= $tod1_pop["usec"]) ? (sprintf("%03d", floor(($timeofday2["usec"] - $tod1_pop["usec"]) / 1000))) : (sprintf("%03d", floor((1000000 + $timeofday2["usec"] - $tod1_pop["usec"]) / 1000)))) . " sec]"; } function writeLog_($logfilename, $log_text) { // echo "[" . date("Y-m-d H:i:s O") . "] " . $log_text . "\n"; $today = getdate(); $fileHandle = @fopen($logfilename . $today['year'] . sprintf("%02d", $today['mon']) . ".log", 'a'); if (!$fileHandle) { $fileHandle = @fopen($logfilename . $today['year'] . sprintf("%02d", $today['mon']) . ".web.log", 'a'); } @fwrite($fileHandle, "[" . date("Y-m-d H:i:s") . "] " . $log_text . "\n"); @fclose($fileHandle); return; } ?>