diff --git a/admin/setup_mvp.php b/admin/setup_mvp.php index c952143..0588e1e 100644 --- a/admin/setup_mvp.php +++ b/admin/setup_mvp.php @@ -42,13 +42,35 @@ if ($action == 'update_mappings') { foreach ($ca3_definitions as $line => $definition) { - $account_codes = GETPOST('account_codes_' . $line, 'array'); - - // Process all lines that have form data - if (isset($_POST['account_codes_' . $line])) { - $result = $config->updateAccountMapping($line, $account_codes); - if ($result) { - $updated_count++; + // Special handling for lines 08, 09, 9B (need both base and VAT accounts) + if (in_array($line, array('08', '09', '9B'))) { + $base_account_codes = GETPOST('base_account_codes_' . $line, 'array'); + $vat_account_codes = GETPOST('vat_account_codes_' . $line, 'array'); + + // Process base accounts + if (isset($_POST['base_account_codes_' . $line])) { + $result = $config->updateAccountMapping($line . '_BASE', $base_account_codes); + if ($result) { + $updated_count++; + } + } + + // Process VAT accounts + if (isset($_POST['vat_account_codes_' . $line])) { + $result = $config->updateAccountMapping($line . '_VAT', $vat_account_codes); + if ($result) { + $updated_count++; + } + } + } else { + // Normal processing for other lines + $account_codes = GETPOST('account_codes_' . $line, 'array'); + + if (isset($_POST['account_codes_' . $line])) { + $result = $config->updateAccountMapping($line, $account_codes); + if ($result) { + $updated_count++; + } } } } @@ -157,8 +179,20 @@ foreach ($lines_by_section as $section_code => $lines) { $account_options[$account['account_number']] = $account['account_number'] . ' - ' . $account['label']; } - // Use Dolibarr's native multi-select with search functionality - print $form->multiselectarray('account_codes_' . $line, $account_options, $selected_accounts, 0, 0, '', 0, '200px'); + // Special handling for lines 08, 09, 9B (need both base and VAT accounts) + if (in_array($line, array('08', '09', '9B'))) { + print '
'; + print 'Comptes de base (ventes):
'; + print $form->multiselectarray('base_account_codes_' . $line, $account_options, $selected_accounts, 0, 0, '', 0, '200px'); + print '
'; + print '
'; + print 'Comptes de TVA:
'; + print $form->multiselectarray('vat_account_codes_' . $line, $account_options, $selected_accounts, 0, 0, '', 0, '200px'); + print '
'; + } else { + // Normal single selection for other lines + print $form->multiselectarray('account_codes_' . $line, $account_options, $selected_accounts, 0, 0, '', 0, '200px'); + } print ''; print ''; } diff --git a/core/class/declarationtva.class.php b/core/class/declarationtva.class.php index 0344e07..957745f 100644 --- a/core/class/declarationtva.class.php +++ b/core/class/declarationtva.class.php @@ -216,22 +216,43 @@ class DeclarationTVA $line_total_amount = 0; $account_labels = array(); - // Sum all accounts for this CA-3 line (if any mappings exist) - if (isset($grouped_mappings[$ca3_line])) { - error_log("DeclarationTVA: Processing CA-3 line $ca3_line with " . count($grouped_mappings[$ca3_line]) . " mapped accounts"); - foreach ($grouped_mappings[$ca3_line] as $mapping) { - error_log("DeclarationTVA: Processing account " . $mapping['account_code'] . " for line $ca3_line"); + // Special handling for lines 08, 09, 9B (need separate base and VAT accounts) + if (in_array($ca3_line, array('08', '09', '9B'))) { + // Get base accounts (sales) + $base_mappings = isset($grouped_mappings[$ca3_line . '_BASE']) ? $grouped_mappings[$ca3_line . '_BASE'] : array(); + foreach ($base_mappings as $mapping) { $amounts = $this->getAccountAmounts($mapping['account_code'], $period['start_date'], $period['end_date']); - $line_total_base += $amounts['base_amount']; - $line_total_vat += $amounts['vat_amount']; - $line_total_amount += $amounts['total_amount']; - $account_labels[] = $mapping['account_label']; - - error_log("DeclarationTVA: Account " . $mapping['account_code'] . " amounts: base=" . $amounts['base_amount'] . ", vat=" . $amounts['vat_amount']); + $account_labels[] = $mapping['account_label'] . ' (base)'; } + + // Get VAT accounts + $vat_mappings = isset($grouped_mappings[$ca3_line . '_VAT']) ? $grouped_mappings[$ca3_line . '_VAT'] : array(); + foreach ($vat_mappings as $mapping) { + $amounts = $this->getAccountAmounts($mapping['account_code'], $period['start_date'], $period['end_date']); + $line_total_vat += $amounts['vat_amount']; + $account_labels[] = $mapping['account_label'] . ' (VAT)'; + } + + $line_total_amount = $line_total_base + $line_total_vat; } else { - error_log("DeclarationTVA: No mappings found for CA-3 line $ca3_line"); + // Normal processing for other lines + if (isset($grouped_mappings[$ca3_line])) { + error_log("DeclarationTVA: Processing CA-3 line $ca3_line with " . count($grouped_mappings[$ca3_line]) . " mapped accounts"); + foreach ($grouped_mappings[$ca3_line] as $mapping) { + error_log("DeclarationTVA: Processing account " . $mapping['account_code'] . " for line $ca3_line"); + $amounts = $this->getAccountAmounts($mapping['account_code'], $period['start_date'], $period['end_date']); + + $line_total_base += $amounts['base_amount']; + $line_total_vat += $amounts['vat_amount']; + $line_total_amount += $amounts['total_amount']; + $account_labels[] = $mapping['account_label']; + + error_log("DeclarationTVA: Account " . $mapping['account_code'] . " amounts: base=" . $amounts['base_amount'] . ", vat=" . $amounts['vat_amount']); + } + } else { + error_log("DeclarationTVA: No mappings found for CA-3 line $ca3_line"); + } } // Create CA-3 line record with summed amounts (even if zero)