Improve balancing entry with real account descriptions and separate rounding
- Added getAccountLabel method to fetch real account descriptions from chart of accounts - Balancing entry now uses real account description for 4456700 - Balancing amounts are now rounded (no decimals) - Added getBalancingRoundingEntry method for separate rounding line - Rounding difference goes to 658000 (debit) or 758000 (credit) with real descriptions - Improved double-entry bookkeeping with proper account labels and rounding
This commit is contained in:
parent
1a9e610823
commit
4f82e24e29
@ -1866,6 +1866,12 @@ class DeclarationTVA_PDF
|
|||||||
$balancing_entry = $this->getBalancingEntry($declaration, $entries);
|
$balancing_entry = $this->getBalancingEntry($declaration, $entries);
|
||||||
if ($balancing_entry) {
|
if ($balancing_entry) {
|
||||||
$entries[] = $balancing_entry;
|
$entries[] = $balancing_entry;
|
||||||
|
|
||||||
|
// Add rounding entry for the balancing difference
|
||||||
|
$balancing_rounding_entry = $this->getBalancingRoundingEntry($declaration, $entries);
|
||||||
|
if ($balancing_rounding_entry) {
|
||||||
|
$entries[] = $balancing_rounding_entry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $entries;
|
return $entries;
|
||||||
@ -2067,9 +2073,12 @@ class DeclarationTVA_PDF
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get real account description for 4456700
|
||||||
|
$account_label = $this->getAccountLabel('4456700');
|
||||||
|
|
||||||
$entry = array(
|
$entry = array(
|
||||||
'account_code' => '4456700',
|
'account_code' => '4456700',
|
||||||
'account_label' => 'TVA à payer',
|
'account_label' => $account_label,
|
||||||
'entry_label' => $declaration->declaration_name,
|
'entry_label' => $declaration->declaration_name,
|
||||||
'debit' => '',
|
'debit' => '',
|
||||||
'credit' => ''
|
'credit' => ''
|
||||||
@ -2077,10 +2086,10 @@ class DeclarationTVA_PDF
|
|||||||
|
|
||||||
if ($difference < 0) {
|
if ($difference < 0) {
|
||||||
// More credits than debits, add debit to balance
|
// More credits than debits, add debit to balance
|
||||||
$entry['debit'] = $this->formatAmountReal(abs($difference));
|
$entry['debit'] = $this->formatAmount(round(abs($difference)));
|
||||||
} else {
|
} else {
|
||||||
// More debits than credits, add credit to balance
|
// More debits than credits, add credit to balance
|
||||||
$entry['credit'] = $this->formatAmountReal($difference);
|
$entry['credit'] = $this->formatAmount(round($difference));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $entry;
|
return $entry;
|
||||||
@ -2099,4 +2108,93 @@ class DeclarationTVA_PDF
|
|||||||
$amount_string = str_replace(',', '.', $amount_string);
|
$amount_string = str_replace(',', '.', $amount_string);
|
||||||
return (float)$amount_string;
|
return (float)$amount_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get account label from chart of accounts
|
||||||
|
*
|
||||||
|
* @param string $account_code Account code
|
||||||
|
* @return string Account label
|
||||||
|
*/
|
||||||
|
private function getAccountLabel($account_code)
|
||||||
|
{
|
||||||
|
$sql = "SELECT label FROM " . MAIN_DB_PREFIX . "accounting_account
|
||||||
|
WHERE account_number = '" . $this->db->escape($account_code) . "'
|
||||||
|
AND entity = " . $this->entity . "
|
||||||
|
AND active = 1
|
||||||
|
LIMIT 1";
|
||||||
|
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if ($result && $this->db->num_rows($result) > 0) {
|
||||||
|
$obj = $this->db->fetch_object($result);
|
||||||
|
return $obj->label;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback to default labels
|
||||||
|
switch ($account_code) {
|
||||||
|
case '4456700':
|
||||||
|
return 'TVA à payer';
|
||||||
|
case '658000':
|
||||||
|
return 'Charges exceptionnelles';
|
||||||
|
case '758000':
|
||||||
|
return 'Produits exceptionnels';
|
||||||
|
default:
|
||||||
|
return 'Compte ' . $account_code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get balancing rounding entry for the difference between real and rounded amounts
|
||||||
|
*
|
||||||
|
* @param DeclarationTVA $declaration Declaration object
|
||||||
|
* @param array $entries Current journal entries
|
||||||
|
* @return array|null Journal entry
|
||||||
|
*/
|
||||||
|
private function getBalancingRoundingEntry($declaration, $entries)
|
||||||
|
{
|
||||||
|
$total_debits = 0;
|
||||||
|
$total_credits = 0;
|
||||||
|
$total_debits_rounded = 0;
|
||||||
|
$total_credits_rounded = 0;
|
||||||
|
|
||||||
|
// Calculate totals from existing entries (real values)
|
||||||
|
foreach ($entries as $entry) {
|
||||||
|
if (!empty($entry['debit'])) {
|
||||||
|
$total_debits += $this->parseAmount($entry['debit']);
|
||||||
|
$total_debits_rounded += round($this->parseAmount($entry['debit']));
|
||||||
|
}
|
||||||
|
if (!empty($entry['credit'])) {
|
||||||
|
$total_credits += $this->parseAmount($entry['credit']);
|
||||||
|
$total_credits_rounded += round($this->parseAmount($entry['credit']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$real_difference = $total_debits - $total_credits;
|
||||||
|
$rounded_difference = $total_debits_rounded - $total_credits_rounded;
|
||||||
|
$rounding_diff = $real_difference - $rounded_difference;
|
||||||
|
|
||||||
|
// If rounding difference is very small, no entry needed
|
||||||
|
if (abs($rounding_diff) < 0.01) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$entry = array(
|
||||||
|
'account_code' => '',
|
||||||
|
'account_label' => '',
|
||||||
|
'entry_label' => $declaration->declaration_name,
|
||||||
|
'debit' => '',
|
||||||
|
'credit' => ''
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($rounding_diff < 0) {
|
||||||
|
$entry['account_code'] = '658000';
|
||||||
|
$entry['account_label'] = $this->getAccountLabel('658000');
|
||||||
|
$entry['debit'] = $this->formatAmountReal(abs($rounding_diff));
|
||||||
|
} else {
|
||||||
|
$entry['account_code'] = '758000';
|
||||||
|
$entry['account_label'] = $this->getAccountLabel('758000');
|
||||||
|
$entry['credit'] = $this->formatAmountReal($rounding_diff);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $entry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user