Add comprehensive error handling for validation system

- Enhanced validateDeclaration() with detailed error messages
- Added database table existence checks
- Improved saveValidatedPDF() with try-catch and better error reporting
- Enhanced linkDocumentToDeclaration() with table validation
- Updated hasValidatedDocument() to handle missing tables gracefully
- Added detailed error display in view for debugging
- Better error messages for troubleshooting validation issues
This commit is contained in:
Frank Cools 2025-10-06 17:06:36 +02:00
parent f07f6a7c28
commit 105036adc2
2 changed files with 78 additions and 26 deletions

View File

@ -999,6 +999,7 @@ class DeclarationTVA
*/ */
public function validateDeclaration($declaration_id) public function validateDeclaration($declaration_id)
{ {
// First, try to update the declaration status
$sql = "UPDATE " . MAIN_DB_PREFIX . "declarationtva_declarations $sql = "UPDATE " . MAIN_DB_PREFIX . "declarationtva_declarations
SET status = 'validated', SET status = 'validated',
validated_date = NOW(), validated_date = NOW(),
@ -1007,12 +1008,18 @@ class DeclarationTVA
AND entity = " . $this->entity; AND entity = " . $this->entity;
$result = $this->db->query($sql); $result = $this->db->query($sql);
if ($result) { if (!$result) {
return true; $this->error = "Database error updating declaration: " . $this->db->lasterror();
} else {
$this->error = $this->db->lasterror();
return false; return false;
} }
// Check if the update actually affected any rows
if ($this->db->affected_rows($result) == 0) {
$this->error = "No declaration found with ID " . $declaration_id . " or insufficient permissions";
return false;
}
return true;
} }
/** /**
@ -1026,18 +1033,26 @@ class DeclarationTVA
{ {
global $conf, $user; global $conf, $user;
// Create documents directory if it doesn't exist try {
$doc_dir = DOL_DATA_ROOT . '/declarationtva/validated/'; // Create documents directory if it doesn't exist
if (!is_dir($doc_dir)) { $doc_dir = DOL_DATA_ROOT . '/declarationtva/validated/';
dol_mkdir($doc_dir); if (!is_dir($doc_dir)) {
} if (!dol_mkdir($doc_dir)) {
$this->error = "Failed to create documents directory: " . $doc_dir;
// Generate filename return false;
$filename = 'CA3_Validated_' . $this->declaration_number . '_' . date('Y-m-d') . '.pdf'; }
$dest_path = $doc_dir . $filename; }
// Copy PDF to documents directory // Generate filename
if (copy($pdf_path, $dest_path)) { $filename = 'CA3_Validated_' . $this->declaration_number . '_' . date('Y-m-d') . '.pdf';
$dest_path = $doc_dir . $filename;
// Copy PDF to documents directory
if (!copy($pdf_path, $dest_path)) {
$this->error = "Failed to copy PDF to documents directory";
return false;
}
// Add document record to Dolibarr // Add document record to Dolibarr
require_once DOL_DOCUMENT_ROOT . '/core/class/ecmfiles.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/ecmfiles.class.php';
$ecmfile = new EcmFiles($this->db); $ecmfile = new EcmFiles($this->db);
@ -1057,13 +1072,21 @@ class DeclarationTVA
$result = $ecmfile->create($user); $result = $ecmfile->create($user);
if ($result > 0) { if ($result > 0) {
// Link document to declaration // Try to link document to declaration (this might fail if table doesn't exist)
$this->linkDocumentToDeclaration($declaration_id, $ecmfile->id); $link_result = $this->linkDocumentToDeclaration($declaration_id, $ecmfile->id);
if (!$link_result) {
// Log the error but don't fail the whole process
error_log("DeclarationTVA: Failed to link document to declaration: " . $this->error);
}
return true; return true;
} else {
$this->error = "Failed to create ECM file record: " . $ecmfile->error;
return false;
} }
} catch (Exception $e) {
$this->error = "Exception in saveValidatedPDF: " . $e->getMessage();
return false;
} }
return false;
} }
/** /**
@ -1075,11 +1098,26 @@ class DeclarationTVA
*/ */
private function linkDocumentToDeclaration($declaration_id, $document_id) private function linkDocumentToDeclaration($declaration_id, $document_id)
{ {
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "declarationtva_documents // First check if the table exists
(declaration_id, document_id, created_date) $sql_check = "SHOW TABLES LIKE '" . MAIN_DB_PREFIX . "declarationtva_documents'";
VALUES (" . (int)$declaration_id . ", " . (int)$document_id . ", NOW())"; $result_check = $this->db->query($sql_check);
return $this->db->query($sql); if (!$result_check || $this->db->num_rows($result_check) == 0) {
$this->error = "Documents table does not exist. Please run the database migration.";
return false;
}
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "declarationtva_documents
(declaration_id, document_id, created_date, entity)
VALUES (" . (int)$declaration_id . ", " . (int)$document_id . ", NOW(), " . $this->entity . ")";
$result = $this->db->query($sql);
if (!$result) {
$this->error = "Database error linking document: " . $this->db->lasterror();
return false;
}
return true;
} }
/** /**
@ -1090,6 +1128,15 @@ class DeclarationTVA
*/ */
public function hasValidatedDocument($declaration_id) public function hasValidatedDocument($declaration_id)
{ {
// First check if the table exists
$sql_check = "SHOW TABLES LIKE '" . MAIN_DB_PREFIX . "declarationtva_documents'";
$result_check = $this->db->query($sql_check);
if (!$result_check || $this->db->num_rows($result_check) == 0) {
// Table doesn't exist, so no documents
return false;
}
$sql = "SELECT COUNT(*) as count $sql = "SELECT COUNT(*) as count
FROM " . MAIN_DB_PREFIX . "declarationtva_documents dd FROM " . MAIN_DB_PREFIX . "declarationtva_documents dd
INNER JOIN " . MAIN_DB_PREFIX . "ecm_files ef ON dd.document_id = ef.rowid INNER JOIN " . MAIN_DB_PREFIX . "ecm_files ef ON dd.document_id = ef.rowid

View File

@ -110,10 +110,15 @@ if ($action == 'validate' && $token) {
$pdf_path = $pdf_generator->generateDetailedCA3PDF($id); $pdf_path = $pdf_generator->generateDetailedCA3PDF($id);
if ($pdf_path && file_exists($pdf_path)) { if ($pdf_path && file_exists($pdf_path)) {
// Save PDF to Dolibarr documents // Save PDF to Dolibarr documents
$declarationtva->saveValidatedPDF($id, $pdf_path); $save_result = $declarationtva->saveValidatedPDF($id, $pdf_path);
if (!$save_result) {
setEventMessages("Warning: Declaration validated but PDF save failed: " . $declarationtva->error, null, 'warnings');
}
} else {
setEventMessages("Warning: Declaration validated but PDF generation failed: " . $pdf_generator->error, null, 'warnings');
} }
} else { } else {
setEventMessages($langs->trans("ErrorValidatingDeclaration"), null, 'errors'); setEventMessages($langs->trans("ErrorValidatingDeclaration") . ": " . $declarationtva->error, null, 'errors');
} }
} }