$account_code, 'department_id' => 0, 'debit' => $debit, 'credit' => $credit, 'description' => $desc]; $total_debit += $debit; $total_credit += $credit; } if (count($lines) < 2) { $answer['message'] = 'At least two journal lines are required.'; exit(json_encode($answer)); } if (abs($total_debit - $total_credit) > 0.005) { $answer['message'] = 'Journal is not balanced. Debit ' . number_format($total_debit, 2) . ' ≠ Credit ' . number_format($total_credit, 2) . '.'; exit(json_encode($answer)); } try { $pdo2->beginTransaction(); $guard = new PostingWindowGuard($pdo1, $company_id); $gl = new GlManager($pdo2, $company_id, $guard); if ($gl_id > 0) { $gl->replaceManual($gl_id, $reference, $description, $journal_date, $period, $lines); $answer['message'] = 'Journal entry updated.'; } else { $gl_id = $gl->postManual($reference, $description, $journal_date, $period, $lines); $answer['message'] = 'Journal entry saved.'; } $pdo2->commit(); $answer['success'] = 1; $answer['gl_id'] = $gl_id; } catch (Exception $e) { if ($pdo2->inTransaction()) $pdo2->rollBack(); $answer['message'] = $e->getMessage(); } exit(json_encode($answer));