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)