hasRight("declarationtva", "declarationtva", "read")) { http_response_code(403); echo "Access denied"; exit; } // Get parameters $declaration_id = GETPOST('declaration_id', 'int'); $ca3_line = GETPOST('ca3_line', 'alpha'); // Validate parameters if (empty($declaration_id) || empty($ca3_line)) { echo '
' . $langs->trans("ErrorMissingParameters") . '
'; exit; } // Initialize objects $declarationtva = new DeclarationTVA($db); $config = new DeclarationTVA_Config($db); // Get declaration info if (!$declarationtva->fetch($declaration_id)) { echo '
' . $langs->trans("DeclarationNotFound") . '
'; exit; } // Get detailed breakdown $line_details = $declarationtva->getCA3LineDetails($declaration_id, $ca3_line); if (empty($line_details)) { echo '
' . $langs->trans("NoDataFoundForLine") . '
'; exit; } if (empty($line_details['account_details'])) { echo '
' . $langs->trans("NoDataFoundForLine") . '
'; exit; } // Get CA-3 line definition $ca3_definitions = $config->getCA3LineDefinitions(); $line_definition = isset($ca3_definitions[$ca3_line]) ? $ca3_definitions[$ca3_line] : null; // Group accounts by type for lines 08, 09, 9B $base_accounts = array(); $vat_accounts = array(); $other_accounts = array(); foreach ($line_details['account_details'] as $account) { if (strpos($account['mapping_type'], '_BASE') !== false) { $base_accounts[] = $account; } elseif (strpos($account['mapping_type'], '_VAT') !== false) { $vat_accounts[] = $account; } else { $other_accounts[] = $account; } } // Display account details table echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $total_base_base = 0; $total_vat_base = 0; $total_amount_base = 0; $total_base_vat = 0; $total_vat_vat = 0; $total_amount_vat = 0; $total_base_other = 0; $total_vat_other = 0; $total_amount_other = 0; // Display BASE accounts first (if any) if (!empty($base_accounts)) { echo ''; echo ''; echo ''; foreach ($base_accounts as $account) { $total_base_base += $account['base_amount']; $total_vat_base += $account['vat_amount']; $total_amount_base += $account['total_amount']; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } // Subtotal for BASE accounts echo ''; echo ''; echo ''; echo ''; echo ''; } // Display VAT accounts second (if any) if (!empty($vat_accounts)) { echo ''; echo ''; echo ''; foreach ($vat_accounts as $account) { $total_base_vat += $account['base_amount']; $total_vat_vat += $account['vat_amount']; $total_amount_vat += $account['total_amount']; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } // Subtotal for VAT accounts echo ''; echo ''; echo ''; echo ''; echo ''; } // Display other accounts (normal lines) foreach ($other_accounts as $account) { $total_base_other += $account['base_amount']; $total_vat_other += $account['vat_amount']; $total_amount_other += $account['total_amount']; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } // Final totals row $final_total_vat = $total_vat_base + $total_vat_vat + $total_vat_other; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $langs->trans("AccountCode") . '' . $langs->trans("AccountLabel") . '' . $langs->trans("Amount") . '' . $langs->trans("MappingType") . '
' . $langs->trans("BaseAccounts") . '
' . $account['account_code'] . '' . $account['account_label'] . '' . price($account['base_amount']) . '' . $account['mapping_type'] . '
' . $langs->trans("SubtotalBaseAccounts") . '' . price($total_base_base) . '
' . $langs->trans("VATAccounts") . '
' . $account['account_code'] . '' . $account['account_label'] . '' . price($account['vat_amount']) . '' . $account['mapping_type'] . '
' . $langs->trans("SubtotalVATAccounts") . '' . price($total_vat_vat) . '
' . $account['account_code'] . '' . $account['account_label'] . '' . price($account['vat_amount']) . '' . $account['mapping_type'] . '
' . $langs->trans("GrandTotal") . '' . price($final_total_vat) . '
'; // Additional info if calculated line exists if ($line_details['calculated_line']) { echo '
'; echo '' . $langs->trans("Note") . ': '; echo $langs->trans("CalculatedLineNote"); if (!empty($line_details['calculated_line']->line_label)) { echo '
' . $line_details['calculated_line']->line_label . ''; } echo '
'; } // Summary info echo '
'; echo '' . $langs->trans("Summary") . ': '; echo $langs->trans("AccountCount") . ': ' . $line_details['account_count'] . ' | '; echo $langs->trans("Period") . ': ' . dol_print_date($line_details['start_date'], 'day') . ' - ' . dol_print_date($line_details['end_date'], 'day'); echo '
'; ?>