Debug Netto STZ für Auftrag #".$order_id."";
// 1. Auftrag und Kunde prüfen
$sqlOrder = "SELECT c.rowid, c.ref, c.fk_soc, s.nom as customer_name FROM ".MAIN_DB_PREFIX."commande c";
$sqlOrder .= " LEFT JOIN ".MAIN_DB_PREFIX."societe s ON s.rowid = c.fk_soc";
$sqlOrder .= " WHERE c.rowid = ".((int)$order_id);
$resqlOrder = $db->query($sqlOrder);
$order = $db->fetch_object($resqlOrder);
echo "
Auftrag
";
echo "Ref: ".$order->ref."\nKunde: ".$order->customer_name." (ID: ".$order->fk_soc.")
";
// 2. Standard-Leistung des Kunden
$sqlService = "SELECT stundenzettel_default_service FROM ".MAIN_DB_PREFIX."societe_extrafields WHERE fk_object = ".((int)$order->fk_soc);
$resqlService = $db->query($sqlService);
$serviceObj = $db->fetch_object($resqlService);
$defaultServiceId = $serviceObj ? (int)$serviceObj->stundenzettel_default_service : 0;
echo "Standard-Leistung beim Kunden
";
if ($defaultServiceId > 0) {
$sqlProd = "SELECT rowid, ref, label, price FROM ".MAIN_DB_PREFIX."product WHERE rowid = ".((int)$defaultServiceId);
$resqlProd = $db->query($sqlProd);
$prod = $db->fetch_object($resqlProd);
echo "Service ID: ".$defaultServiceId."\nRef: ".$prod->ref."\nLabel: ".$prod->label."\nPreis: ".price($prod->price)." EUR
";
// Kundenspezifischer Preis?
$priceInfo = getCustomerPrice($db, $defaultServiceId, $order->fk_soc);
echo "Effektiver Preis (mit Kundenpreis): ".price($priceInfo['price'])." EUR";
echo " (".($priceInfo['is_customer_price'] ? "Kundenpreis" : "Standardpreis").")";
} else {
echo "KEINE Standard-Leistung beim Kunden hinterlegt!
";
}
// 3. Stundenzettel des Auftrags
echo "Stundenzettel des Auftrags
";
$sqlStz = "SELECT s.rowid, s.ref, s.status, s.hourly_rate, s.hourly_rate_is_custom,";
$sqlStz .= " (SELECT SUM(duration) FROM ".MAIN_DB_PREFIX."stundenzettel_leistung WHERE fk_stundenzettel = s.rowid) as total_minutes";
$sqlStz .= " FROM ".MAIN_DB_PREFIX."stundenzettel s";
$sqlStz .= " WHERE s.fk_commande = ".((int)$order_id);
$resqlStz = $db->query($sqlStz);
echo "";
echo "| ID | Ref | Status | Leistungen |
";
$totalNetto = 0;
while ($stz = $db->fetch_object($resqlStz)) {
$statusText = ($stz->status == 0) ? 'Entwurf' : 'Freigegeben';
// Leistungen dieses Stundenzettels laden
$sqlLeist = "SELECT l.duration, l.fk_product, l.description, p.ref as product_ref, p.label as product_label, p.price as product_price";
$sqlLeist .= " FROM ".MAIN_DB_PREFIX."stundenzettel_leistung l";
$sqlLeist .= " LEFT JOIN ".MAIN_DB_PREFIX."product p ON p.rowid = l.fk_product";
$sqlLeist .= " WHERE l.fk_stundenzettel = ".((int)$stz->rowid);
$resqlLeist = $db->query($sqlLeist);
$leistungenHtml = "";
$leistungenHtml .= "| Dauer | Leistung | Preis | Berechnung |
";
$stzSubtotal = 0;
while ($leist = $db->fetch_object($resqlLeist)) {
$hours = $leist->duration / 60;
$hourlyRate = 0;
$rateSource = "KEINER!";
if ($leist->fk_product > 0) {
$priceInfo = getCustomerPrice($db, $leist->fk_product, $order->fk_soc);
$hourlyRate = $priceInfo['price'];
$rateSource = $leist->product_ref." - ".$leist->product_label;
if ($priceInfo['is_customer_price']) {
$rateSource .= " (Kundenpreis)";
}
} elseif ($stz->hourly_rate > 0) {
$hourlyRate = (float)$stz->hourly_rate;
$rateSource = "Stundenzettel-Rate";
} elseif ($defaultServiceId > 0) {
$priceInfo = getCustomerPrice($db, $defaultServiceId, $order->fk_soc);
$hourlyRate = $priceInfo['price'];
$rateSource = "Kunden-Standard";
}
$subtotal = ($stz->status >= 1) ? ($hourlyRate * $hours) : 0;
if ($stz->status >= 1) {
$stzSubtotal += $subtotal;
}
$calcText = ($stz->status >= 1)
? price($hourlyRate)." x ".$hours."h = ".price($subtotal).""
: "Nicht freigegeben";
$leistungenHtml .= "";
$leistungenHtml .= "| ".$hours."h | ";
$leistungenHtml .= "".$rateSource." | ";
$leistungenHtml .= "".price($hourlyRate)." EUR | ";
$leistungenHtml .= "".$calcText." | ";
$leistungenHtml .= "
";
}
$leistungenHtml .= "| Summe: | ".price($stzSubtotal)." EUR |
";
$leistungenHtml .= "
";
$totalNetto += $stzSubtotal;
echo "";
echo "| ".$stz->rowid." | ";
echo "".$stz->ref." | ";
echo "".$statusText." | ";
echo "".$leistungenHtml." | ";
echo "
";
}
echo "
";
echo "Ergebnis
";
echo "Berechneter Netto STZ: ".price($totalNetto)." EUR
";
// 4. Aktueller Wert in der Datenbank
$sqlCurrent = "SELECT stundenzettel_netto FROM ".MAIN_DB_PREFIX."commande_extrafields WHERE fk_object = ".((int)$order_id);
$resqlCurrent = $db->query($sqlCurrent);
$current = $db->fetch_object($resqlCurrent);
$currentValue = $current ? $current->stundenzettel_netto : "NICHT GESETZT";
echo "Aktueller Wert in DB: ".($currentValue !== "NICHT GESETZT" ? price($currentValue)." EUR" : $currentValue)."
";
echo "
Jetzt neu berechnen und speichern
";
if (GETPOST('update', 'int')) {
$result = updateOrderNettoSTZ($db, $order_id);
echo "Berechnung durchgeführt! Ergebnis: ".price($result)." EUR
";
echo "Seite neu laden
";
}