diff --git a/core/class/declarationtva.class.php b/core/class/declarationtva.class.php index ac9f361..c1c95c8 100644 --- a/core/class/declarationtva.class.php +++ b/core/class/declarationtva.class.php @@ -855,4 +855,95 @@ class DeclarationTVA return $this->calculateCA3Amounts($declaration_id, $period); } + + /** + * Get detailed account breakdown for a specific CA-3 line + * + * @param int $declaration_id Declaration ID + * @param string $ca3_line CA-3 line code (e.g., 'A1', '08', '09', etc.) + * @return array Detailed breakdown with accounts and amounts + */ + public function getCA3LineDetails($declaration_id, $ca3_line) + { + // Get declaration dates + $sql = "SELECT start_date, end_date FROM " . MAIN_DB_PREFIX . "declarationtva_declarations + WHERE rowid = " . (int)$declaration_id . " AND entity = " . $this->entity; + + $result = $this->db->query($sql); + if (!$result || $this->db->num_rows($result) == 0) { + return array(); + } + + $obj = $this->db->fetch_object($result); + $start_date = $obj->start_date; + $end_date = $obj->end_date; + + // Get account mappings for this CA-3 line + $mappings = $this->getAccountMappings(); + $line_mappings = array(); + + // Find mappings for this specific line + foreach ($mappings as $mapping) { + if ($mapping['ca3_line'] == $ca3_line) { + $line_mappings[] = $mapping; + } + } + + $details = array(); + $total_base = 0; + $total_vat = 0; + $total_amount = 0; + + // Process each mapped account + foreach ($line_mappings as $mapping) { + $account_code = $mapping['account_code']; + $account_label = $mapping['account_label']; + + // Get account amounts for this period + $amounts = $this->getAccountAmounts($account_code, $start_date, $end_date); + + $account_detail = array( + 'account_code' => $account_code, + 'account_label' => $account_label, + 'base_amount' => $amounts['base_amount'], + 'vat_amount' => $amounts['vat_amount'], + 'total_amount' => $amounts['total_amount'], + 'mapping_type' => $mapping['ca3_line'] // Will be 'A1', '08_BASE', '08_VAT', etc. + ); + + $details[] = $account_detail; + + // Accumulate totals + $total_base += $amounts['base_amount']; + $total_vat += $amounts['vat_amount']; + $total_amount += $amounts['total_amount']; + } + + // Get the calculated line total from CA-3 lines table + $sql_line = "SELECT base_amount, vat_amount, total_amount, line_label + FROM " . MAIN_DB_PREFIX . "declarationtva_ca3_lines + WHERE declaration_id = " . (int)$declaration_id . " + AND ca3_line = '" . $this->db->escape($ca3_line) . "'"; + + $result_line = $this->db->query($sql_line); + $calculated_line = null; + if ($result_line && $this->db->num_rows($result_line) > 0) { + $calculated_line = $this->db->fetch_object($result_line); + } + + return array( + 'ca3_line' => $ca3_line, + 'declaration_id' => $declaration_id, + 'start_date' => $start_date, + 'end_date' => $end_date, + 'account_details' => $details, + 'calculated_line' => $calculated_line, + 'totals' => array( + 'base_amount' => $total_base, + 'vat_amount' => $total_vat, + 'total_amount' => $total_amount + ), + 'account_count' => count($details) + ); + } } diff --git a/declarationtva_line_details.php b/declarationtva_line_details.php new file mode 100644 index 0000000..96118c2 --- /dev/null +++ b/declarationtva_line_details.php @@ -0,0 +1,183 @@ +hasRight("declarationtva", "declarationtva", "read")) { + accessforbidden(); +} + +// Get parameters +$declaration_id = GETPOST('declaration_id', 'int'); +$ca3_line = GETPOST('ca3_line', 'alpha'); + +// Validate parameters +if (empty($declaration_id) || empty($ca3_line)) { + setEventMessages($langs->trans("ErrorMissingParameters"), null, 'errors'); + header("Location: declarationtvaindex.php"); + exit; +} + +// Initialize objects +$declarationtva = new DeclarationTVA($db); +$config = new DeclarationTVA_Config($db); + +// Get declaration info +if (!$declarationtva->fetch($declaration_id)) { + setEventMessages($langs->trans("DeclarationNotFound"), null, 'errors'); + header("Location: declarationtvaindex.php"); + exit; +} + +// Get detailed breakdown +$line_details = $declarationtva->getCA3LineDetails($declaration_id, $ca3_line); + +if (empty($line_details)) { + setEventMessages($langs->trans("NoDataFoundForLine"), null, 'errors'); + header("Location: declarationtva_view.php?id=" . $declaration_id); + exit; +} + +// Get CA-3 line definition +$ca3_definitions = $config->getCA3LineDefinitions(); +$line_definition = isset($ca3_definitions[$ca3_line]) ? $ca3_definitions[$ca3_line] : null; + +// Page title +$title = $langs->trans("CA3LineDetails") . " - " . $ca3_line; +if ($line_definition) { + $title .= " - " . $line_definition['label']; +} + +// Load page header +llxHeader('', $title); + +// Page header +print load_fiche_titre($title, '', 'fa-list-alt'); + +// Breadcrumb +print '
'; +print '' . $langs->trans("BackToList") . ''; +print '' . $langs->trans("BackToDeclaration") . ''; +print '
'; + +// Declaration info +print '
'; +print '
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +if ($line_definition) { + print ''; + print ''; + print ''; + print ''; +} +print '
' . $langs->trans("DeclarationInfo") . '
' . $langs->trans("DeclarationNumber") . '' . $declarationtva->declaration_number . '
' . $langs->trans("Period") . '' . dol_print_date($declarationtva->start_date, 'day') . ' - ' . dol_print_date($declarationtva->end_date, 'day') . '
' . $langs->trans("CA3Line") . '' . $ca3_line . '
' . $langs->trans("Description") . '' . $line_definition['label'] . '
'; +print '
'; + +print '
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +if ($line_details['calculated_line']) { + print ''; + print ''; + print ''; + print ''; +} +print '
' . $langs->trans("LineSummary") . '
' . $langs->trans("AccountCount") . '' . $line_details['account_count'] . '
' . $langs->trans("CalculatedTotal") . '' . price($line_details['calculated_line']->total_amount) . '
'; +print '
'; +print '
'; + +// Account details table +print '
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +$total_base = 0; +$total_vat = 0; +$total_amount = 0; + +foreach ($line_details['account_details'] as $account) { + $total_base += $account['base_amount']; + $total_vat += $account['vat_amount']; + $total_amount += $account['total_amount']; + + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; +} + +// Totals row +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +print '
' . $langs->trans("AccountCode") . '' . $langs->trans("AccountLabel") . '' . $langs->trans("BaseAmount") . '' . $langs->trans("VATAmount") . '' . $langs->trans("TotalAmount") . '' . $langs->trans("MappingType") . '
' . $account['account_code'] . '' . $account['account_label'] . '' . price($account['base_amount']) . '' . price($account['vat_amount']) . '' . price($account['total_amount']) . '' . $account['mapping_type'] . '
' . $langs->trans("Total") . '' . price($total_base) . '' . price($total_vat) . '' . price($total_amount) . '
'; +print '
'; + +// Additional info if calculated line exists +if ($line_details['calculated_line']) { + print '
'; + print '' . $langs->trans("Note") . ': '; + print $langs->trans("CalculatedLineNote"); + if (!empty($line_details['calculated_line']->line_label)) { + print '
' . $line_details['calculated_line']->line_label . ''; + } + print '
'; +} + +// Close page +llxFooter(); +?> diff --git a/declarationtva_view.php b/declarationtva_view.php index 19c6340..b930447 100644 --- a/declarationtva_view.php +++ b/declarationtva_view.php @@ -173,7 +173,7 @@ foreach ($section_a_lines as $line) { $data = isset($ca3_data[$line]) ? $ca3_data[$line] : array('line_label' => '', 'vat_amount' => 0); $description = isset($ca3_definitions[$line]) ? $ca3_definitions[$line]['label'] : $data['line_label']; print ''; - print '' . $line . ''; + print '' . $line . ''; print '' . $description . ''; print '' . formatAmountWithOriginal($data['vat_amount'], $data['line_label']) . ''; print ''; @@ -201,7 +201,7 @@ foreach ($base_vat_lines as $line) { $data = isset($ca3_data[$line]) ? $ca3_data[$line] : array('line_label' => '', 'base_amount' => 0, 'vat_amount' => 0); $description = isset($ca3_definitions[$line]) ? $ca3_definitions[$line]['label'] : $data['line_label']; print ''; - print '' . $line . ''; + print '' . $line . ''; print '' . $description . ''; print '' . formatAmountWithOriginal($data['base_amount'], $data['line_label'], 'base') . ''; print '' . formatAmountWithOriginal($data['vat_amount'], $data['line_label']) . ''; @@ -226,7 +226,7 @@ print ''; $data = isset($ca3_data['17']) ? $ca3_data['17'] : array('line_label' => '', 'vat_amount' => 0); $description = isset($ca3_definitions['17']) ? $ca3_definitions['17']['label'] : $data['line_label']; print ''; -print '17'; +print '17'; print '' . $description . ''; print '' . formatAmountWithOriginal($data['vat_amount'], $data['line_label']) . ''; print ''; @@ -247,7 +247,7 @@ foreach ($section_c_lines as $line) { $data = isset($ca3_data[$line]) ? $ca3_data[$line] : array('line_label' => '', 'vat_amount' => 0); $description = isset($ca3_definitions[$line]) ? $ca3_definitions[$line]['label'] : $data['line_label']; print ''; - print '' . $line . ''; + print '' . $line . ''; print '' . $description . ''; print '' . formatAmountWithOriginal($data['vat_amount'], $data['line_label']) . ''; print ''; @@ -284,7 +284,7 @@ foreach ($section_d_lines as $line) { } print ''; - print '' . $line . ''; + print '' . $line . ''; print '' . $description . ''; print '' . formatAmount($data['vat_amount']) . ''; print ''; diff --git a/langs/en_US/declarationtva.lang b/langs/en_US/declarationtva.lang index ef7beda..6485d2c 100644 --- a/langs/en_US/declarationtva.lang +++ b/langs/en_US/declarationtva.lang @@ -441,3 +441,19 @@ BaseAmount = Base Amount VATAmount = VAT Amount TotalAmount = Total Amount BaseHTAndVATByRate = Base HT and VAT by Rate + +# Detailed view translations +CA3LineDetails = CA-3 Line Details +BackToDeclaration = Back to Declaration +DeclarationInfo = Declaration Information +LineSummary = Line Summary +AccountCount = Account Count +CalculatedTotal = Calculated Total +AccountCode = Account Code +AccountLabel = Account Label +MappingType = Mapping Type +Total = Total +Note = Note +CalculatedLineNote = This line shows the detail of accounts used to calculate the CA-3 line. Amounts may differ slightly from the calculated total due to rounding. +ErrorMissingParameters = Missing parameters +NoDataFoundForLine = No data found for this line diff --git a/langs/fr_FR/declarationtva.lang b/langs/fr_FR/declarationtva.lang index 621fae1..070d83b 100644 --- a/langs/fr_FR/declarationtva.lang +++ b/langs/fr_FR/declarationtva.lang @@ -430,3 +430,19 @@ BaseAmount = Base hors taxe VATAmount = Taxe due TotalAmount = Montant Total BaseHTAndVATByRate = Base HT et TVA par taux + +# Detailed view translations +CA3LineDetails = Détails de la ligne CA-3 +BackToDeclaration = Retour à la déclaration +DeclarationInfo = Informations de la déclaration +LineSummary = Résumé de la ligne +AccountCount = Nombre de comptes +CalculatedTotal = Total calculé +AccountCode = Code compte +AccountLabel = Libellé compte +MappingType = Type de mapping +Total = Total +Note = Note +CalculatedLineNote = Cette ligne montre le détail des comptes utilisés pour calculer la ligne CA-3. Les montants peuvent différer légèrement du total calculé en raison des arrondis. +ErrorMissingParameters = Paramètres manquants +NoDataFoundForLine = Aucune donnée trouvée pour cette ligne