false, 'error' => 'Missing parameters']); exit; } // Hole die richtigen Tabellennamen fuer diesen Dokumenttyp $tables = DocumentTypeHelper::getTableNames($docType); if (!$tables) { echo json_encode(['success' => false, 'error' => 'Invalid document type']); exit; } // Pruefe Dokumentstatus $object = DocumentTypeHelper::loadDocument($docType, $document_id, $db); if (!$object) { echo json_encode(['success' => false, 'error' => 'Dokument nicht gefunden']); exit; } $isDraft = DocumentTypeHelper::isDraft($object, $docType); if (!$isDraft) { echo json_encode(['success' => false, 'error' => 'Dokument ist nicht im Entwurf']); exit; } subtotaltitle_debug_log('Massenloeschung: ' . count($line_ids) . ' Zeilen, docType=' . $docType); $db->begin(); $deleted = 0; foreach ($line_ids as $line_id) { $line_id = (int)$line_id; // Aus Detail-Tabelle loeschen $sql = "DELETE FROM ".MAIN_DB_PREFIX.$tables['lines_table']." WHERE rowid = ".$line_id; if ($db->query($sql)) { $deleted++; subtotaltitle_debug_log('Zeile geloescht: ' . $line_id); } // Aus Manager-Tabelle loeschen $sql_manager = "DELETE FROM ".MAIN_DB_PREFIX."facture_lines_manager WHERE ".$tables['fk_line']." = ".$line_id; $db->query($sql_manager); } // Summen neu berechnen $object->update_price(1); // line_order neu durchnummerieren $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture_lines_manager"; $sql .= " WHERE ".$tables['fk_parent']." = ".(int)$document_id; $sql .= " AND document_type = '".$db->escape($docType)."'"; $sql .= " ORDER BY line_order"; $resql = $db->query($sql); $new_order = 1; while ($obj = $db->fetch_object($resql)) { $sql_upd = "UPDATE ".MAIN_DB_PREFIX."facture_lines_manager SET line_order = ".$new_order." WHERE rowid = ".(int)$obj->rowid; $db->query($sql_upd); $new_order++; } // rang synchronisieren $sql = "SELECT ".$tables['fk_line']." as detail_id FROM ".MAIN_DB_PREFIX."facture_lines_manager"; $sql .= " WHERE ".$tables['fk_parent']." = ".(int)$document_id; $sql .= " AND document_type = '".$db->escape($docType)."'"; $sql .= " AND ".$tables['fk_line']." IS NOT NULL"; $sql .= " ORDER BY line_order"; $resql = $db->query($sql); $rang = 1; while ($obj = $db->fetch_object($resql)) { if ($obj->detail_id) { $sql_upd = "UPDATE ".MAIN_DB_PREFIX.$tables['lines_table']." SET rang = ".$rang." WHERE rowid = ".(int)$obj->detail_id; $db->query($sql_upd); $rang++; } } $db->commit(); subtotaltitle_debug_log('Massenloeschung abgeschlossen: ' . $deleted . ' von ' . count($line_ids)); echo json_encode(['success' => true, 'deleted' => $deleted]);