subtotaltitle/ajax/mass_delete.php

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]);