getAccountingSettings($businessId); return ! empty($settings['journal_approval_required']); } public function initialStatus(int $businessId): string { return $this->requiresApproval($businessId) ? 'pending' : 'approved'; } public function approve(AccountingAccTransMapping $mapping, int $userId): AccountingAccTransMapping { if ($mapping->approval_status === 'approved') { return $mapping; } $mapping->approval_status = 'approved'; $mapping->approved_by = $userId; $mapping->approved_at = now(); $mapping->save(); app(FinancialPostingService::class)->postPendingJournalLines($mapping); return $mapping; } public function reject(AccountingAccTransMapping $mapping, int $userId): AccountingAccTransMapping { $mapping->approval_status = 'rejected'; $mapping->approved_by = $userId; $mapping->approved_at = now(); $mapping->save(); \Modules\Accounting\Entities\AccountingPostingLog::where('acc_trans_mapping_id', $mapping->id) ->where('status', 'pending') ->update(['status' => 'rejected', 'error_message' => 'Rejected by user '.$userId]); return $mapping; } public function isPostable(AccountingAccTransMapping $mapping): bool { return in_array($mapping->approval_status ?? 'approved', ['approved'], true); } }