Add balancing entry to journal table to ensure debits equal credits
- Added getBalancingEntry method to calculate balancing entry - Sums all debit amounts and subtracts all credit amounts - If result < 0: adds debit to 4456700 account - If result > 0: adds credit to 4456700 account - Added parseAmount helper method to convert formatted amounts back to floats - Journal table now automatically balances with calculated entry - Ensures proper double-entry bookkeeping in OD journal
This commit is contained in:
parent
9a14ab2318
commit
1a9e610823
@ -1862,6 +1862,12 @@ class DeclarationTVA_PDF
|
||||
$entries[] = $rounding_entry;
|
||||
}
|
||||
|
||||
// Add balancing entry to ensure debits equal credits
|
||||
$balancing_entry = $this->getBalancingEntry($declaration, $entries);
|
||||
if ($balancing_entry) {
|
||||
$entries[] = $balancing_entry;
|
||||
}
|
||||
|
||||
return $entries;
|
||||
}
|
||||
|
||||
@ -2031,4 +2037,66 @@ class DeclarationTVA_PDF
|
||||
|
||||
return $entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get balancing entry to ensure debits equal credits
|
||||
*
|
||||
* @param DeclarationTVA $declaration Declaration object
|
||||
* @param array $entries Current journal entries
|
||||
* @return array|null Journal entry
|
||||
*/
|
||||
private function getBalancingEntry($declaration, $entries)
|
||||
{
|
||||
$total_debits = 0;
|
||||
$total_credits = 0;
|
||||
|
||||
// Calculate totals from existing entries
|
||||
foreach ($entries as $entry) {
|
||||
if (!empty($entry['debit'])) {
|
||||
$total_debits += $this->parseAmount($entry['debit']);
|
||||
}
|
||||
if (!empty($entry['credit'])) {
|
||||
$total_credits += $this->parseAmount($entry['credit']);
|
||||
}
|
||||
}
|
||||
|
||||
$difference = $total_debits - $total_credits;
|
||||
|
||||
// If difference is very small (less than 0.01), no balancing entry needed
|
||||
if (abs($difference) < 0.01) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$entry = array(
|
||||
'account_code' => '4456700',
|
||||
'account_label' => 'TVA à payer',
|
||||
'entry_label' => $declaration->declaration_name,
|
||||
'debit' => '',
|
||||
'credit' => ''
|
||||
);
|
||||
|
||||
if ($difference < 0) {
|
||||
// More credits than debits, add debit to balance
|
||||
$entry['debit'] = $this->formatAmountReal(abs($difference));
|
||||
} else {
|
||||
// More debits than credits, add credit to balance
|
||||
$entry['credit'] = $this->formatAmountReal($difference);
|
||||
}
|
||||
|
||||
return $entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse amount string back to float
|
||||
*
|
||||
* @param string $amount_string Formatted amount string
|
||||
* @return float Parsed amount
|
||||
*/
|
||||
private function parseAmount($amount_string)
|
||||
{
|
||||
// Remove spaces and convert comma to dot
|
||||
$amount_string = str_replace(' ', '', $amount_string);
|
||||
$amount_string = str_replace(',', '.', $amount_string);
|
||||
return (float)$amount_string;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user