Fix double-entry accounting - create separate debit and credit entries
- Create separate Bookkeeping instances for debit and credit - Follow Dolibarr pattern: one entry per debit, one per credit - Each entry has single montant with proper sens (D/C) - Separate debug logging for debit vs credit entries - Ensures proper double-entry bookkeeping structure
This commit is contained in:
parent
f2b8cbfef0
commit
097765bbf5
@ -1228,45 +1228,64 @@ class DeclarationTVA
|
||||
foreach ($entries as $entry) {
|
||||
error_log("DEBUG: Creating accounting entry for account: " . $entry['account_code'] . ", debit: " . $entry['debit'] . ", credit: " . $entry['credit']);
|
||||
|
||||
// Create new instance for each entry
|
||||
$bookkeeping = new Bookkeeping($this->db);
|
||||
|
||||
// Prepare amounts and determine debit/credit
|
||||
// Prepare amounts
|
||||
$debit_amount = !empty($entry['debit']) ? (float)$entry['debit'] : 0;
|
||||
$credit_amount = !empty($entry['credit']) ? (float)$entry['credit'] : 0;
|
||||
|
||||
// Determine the amount and direction
|
||||
// Create debit entry if amount > 0
|
||||
if ($debit_amount > 0) {
|
||||
$amount = $debit_amount;
|
||||
$sens = 'D'; // Debit
|
||||
} else {
|
||||
$amount = $credit_amount;
|
||||
$sens = 'C'; // Credit
|
||||
$debit = new Bookkeeping($this->db);
|
||||
$debit->doc_date = $declaration->end_date;
|
||||
$debit->doc_ref = $declaration->declaration_name;
|
||||
$debit->code_journal = 'OD';
|
||||
$debit->numero_compte = $entry['account_code'];
|
||||
$debit->label_compte = $entry['account_label'];
|
||||
$debit->montant = $debit_amount;
|
||||
$debit->sens = 'D';
|
||||
$debit->fk_doc = $declaration->rowid;
|
||||
$debit->fk_docdet = 0;
|
||||
$debit->societe_type = 1;
|
||||
$debit->fk_user_author = $user->id;
|
||||
$debit->code_tiers = '';
|
||||
$debit->piece_num = '';
|
||||
$debit->import_key = '';
|
||||
$debit->entity = $this->entity;
|
||||
|
||||
$result = $debit->create($user);
|
||||
error_log("DEBUG: Debit entry create result: " . ($result ? "SUCCESS" : "FAILED - " . $debit->error));
|
||||
|
||||
if (!$result) {
|
||||
$this->error = 'Failed to create debit entry: ' . $debit->error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Set all required fields for Bookkeeping class
|
||||
$bookkeeping->doc_date = $declaration->end_date;
|
||||
$bookkeeping->doc_ref = $declaration->declaration_name;
|
||||
$bookkeeping->code_journal = 'OD'; // OD journal for VAT declarations
|
||||
$bookkeeping->numero_compte = $entry['account_code'];
|
||||
$bookkeeping->label_compte = $entry['account_label'];
|
||||
$bookkeeping->montant = $amount;
|
||||
$bookkeeping->sens = $sens;
|
||||
$bookkeeping->fk_doc = $declaration->rowid;
|
||||
$bookkeeping->fk_docdet = 0;
|
||||
$bookkeeping->societe_type = 1;
|
||||
$bookkeeping->fk_user_author = $user->id;
|
||||
$bookkeeping->code_tiers = '';
|
||||
$bookkeeping->piece_num = '';
|
||||
$bookkeeping->import_key = '';
|
||||
$bookkeeping->entity = $this->entity;
|
||||
|
||||
$result = $bookkeeping->create($user);
|
||||
error_log("DEBUG: Bookkeeping create result: " . ($result ? "SUCCESS" : "FAILED - " . $bookkeeping->error));
|
||||
|
||||
if (!$result) {
|
||||
$this->error = 'Failed to create accounting entry: ' . $bookkeeping->error;
|
||||
return false;
|
||||
// Create credit entry if amount > 0
|
||||
if ($credit_amount > 0) {
|
||||
$credit = new Bookkeeping($this->db);
|
||||
$credit->doc_date = $declaration->end_date;
|
||||
$credit->doc_ref = $declaration->declaration_name;
|
||||
$credit->code_journal = 'OD';
|
||||
$credit->numero_compte = $entry['account_code'];
|
||||
$credit->label_compte = $entry['account_label'];
|
||||
$credit->montant = $credit_amount;
|
||||
$credit->sens = 'C';
|
||||
$credit->fk_doc = $declaration->rowid;
|
||||
$credit->fk_docdet = 0;
|
||||
$credit->societe_type = 1;
|
||||
$credit->fk_user_author = $user->id;
|
||||
$credit->code_tiers = '';
|
||||
$credit->piece_num = '';
|
||||
$credit->import_key = '';
|
||||
$credit->entity = $this->entity;
|
||||
|
||||
$result = $credit->create($user);
|
||||
error_log("DEBUG: Credit entry create result: " . ($result ? "SUCCESS" : "FAILED - " . $credit->error));
|
||||
|
||||
if (!$result) {
|
||||
$this->error = 'Failed to create credit entry: ' . $credit->error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user