From 9b7c460e61a0bddabf959212fb55ad2b4aa81e1d Mon Sep 17 00:00:00 2001 From: Frank Cools Date: Thu, 2 Oct 2025 18:19:09 +0200 Subject: [PATCH] Add automatic table creation to declaration create page Database Fix: - Added automatic table creation for missing tables - Creates llx_declarationtva_declarations, llx_declarationtva_periods, llx_declarationtva_ca3_lines - Matches the same approach used in setup_mvp.php - Ensures all required tables exist before processing This fixes the 'Table doesn't exist' error when creating declarations. --- declarationtva_create.php | 67 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/declarationtva_create.php b/declarationtva_create.php index 9b9d6dc..b129714 100644 --- a/declarationtva_create.php +++ b/declarationtva_create.php @@ -31,6 +31,73 @@ if (!$user->hasRight("declarationtva", "declarationtva", "write")) { // Load language files $langs->load("declarationtva@declarationtva"); +// Ensure tables exist (create if missing) +$tables_to_check = array( + 'declarationtva_declarations', + 'declarationtva_periods', + 'declarationtva_ca3_lines' +); + +foreach ($tables_to_check as $table_name) { + $full_table_name = MAIN_DB_PREFIX . $table_name; + $check_table_sql = "SHOW TABLES LIKE '" . $full_table_name . "'"; + $table_exists = $db->query($check_table_sql); + + if (!$table_exists || $db->num_rows($table_exists) == 0) { + // Create the table based on schema + if ($table_name == 'declarationtva_declarations') { + $create_table_sql = "CREATE TABLE IF NOT EXISTS `" . $full_table_name . "` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `period_id` int(11) NOT NULL DEFAULT 0, + `declaration_number` varchar(32) NOT NULL, + `declaration_name` varchar(255) DEFAULT NULL, + `start_date` date DEFAULT NULL, + `end_date` date DEFAULT NULL, + `status` varchar(32) DEFAULT 'draft' COMMENT 'draft, validated, submitted', + `total_vat_collected` decimal(15,2) DEFAULT 0.00, + `total_vat_deductible` decimal(15,2) DEFAULT 0.00, + `net_vat_due` decimal(15,2) DEFAULT 0.00, + `vat_credit` decimal(15,2) DEFAULT 0.00, + `submission_date` datetime DEFAULT NULL, + `created_date` datetime DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_declaration_entity_number` (`entity`, `declaration_number`), + KEY `idx_period_id` (`period_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"; + } elseif ($table_name == 'declarationtva_periods') { + $create_table_sql = "CREATE TABLE IF NOT EXISTS `" . $full_table_name . "` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `entity` int(11) NOT NULL DEFAULT 1, + `period_name` varchar(32) NOT NULL COMMENT 'Q1-2024, Q2-2024, etc.', + `start_date` date NOT NULL, + `end_date` date NOT NULL, + `status` varchar(32) DEFAULT 'draft' COMMENT 'draft, validated, submitted', + `created_date` datetime DEFAULT NULL, + PRIMARY KEY (`rowid`), + UNIQUE KEY `uk_period_entity_name` (`entity`, `period_name`), + KEY `idx_period_dates` (`start_date`, `end_date`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"; + } elseif ($table_name == 'declarationtva_ca3_lines') { + $create_table_sql = "CREATE TABLE IF NOT EXISTS `" . $full_table_name . "` ( + `rowid` int(11) NOT NULL AUTO_INCREMENT, + `declaration_id` int(11) NOT NULL, + `ca3_line` varchar(8) NOT NULL, + `line_label` varchar(255) DEFAULT NULL, + `base_amount` decimal(15,2) DEFAULT 0.00, + `vat_amount` decimal(15,2) DEFAULT 0.00, + `total_amount` decimal(15,2) DEFAULT 0.00, + `created_date` datetime DEFAULT NULL, + PRIMARY KEY (`rowid`), + KEY `idx_declaration_id` (`declaration_id`), + KEY `idx_ca3_line` (`ca3_line`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"; + } + + $db->query($create_table_sql); + } +} + // Initialize objects $declarationtva = new DeclarationTVA($db, $conf->entity); $config = new DeclarationTVA_Config($db, $conf->entity);