96 lines
3.1 KiB
PHP
Executable file
96 lines
3.1 KiB
PHP
Executable file
<?php
|
|
define('NOTOKENRENEWAL', 1);
|
|
require '../../../main.inc.php';
|
|
require_once __DIR__.'/../lib/subtotaltitle.lib.php';
|
|
require_once __DIR__.'/../class/DocumentTypeHelper.class.php';
|
|
|
|
$line_ids_json = GETPOST('line_ids', 'alpha');
|
|
$document_id = GETPOST('facture_id', 'int'); // Kompatibilitaet: facture_id wird auch fuer andere Typen verwendet
|
|
$docType = GETPOST('document_type', 'alpha');
|
|
|
|
$line_ids = json_decode($line_ids_json, true);
|
|
|
|
if (!is_array($line_ids) || count($line_ids) == 0 || !$document_id) {
|
|
echo json_encode(['success' => 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]);
|