where('id', $string_array[0])->first(); $debt_payments = DB::table('debtor_payments')->whereNull('deleted_at') ->where('debt_id', $string_array[0])->get(); $patient_payment_methods = PatientPaymentMethod::pluck('name', 'id'); $patient_payment_methods_options = ""; foreach ($patient_payment_methods as $key => $value) { $patient_payment_methods_options .= ''; } $expense_accounts = ChartOfAccount::where('type', 2)->pluck('name', 'id')->prepend('-select-', '')->toArray(); return view('patient_discounts::patient_debtors.receive_debtor_payment', compact('debts', 'debt_payments', 'patient_payment_methods_options', 'expense_accounts')); } public function write_off_debts(Request $request): string { $new_receipt_number = $this->receiptService->createReceipt("Debt Plan Payment Update"); $balance = $request->amount_owed - $request->amount; $debtorPayment = $this->debtorsService->createDebtorPayment($request->debt_id, $new_receipt_number, $request->amount, Carbon::today()->toDateString(), $balance, '', $request->amount); if ($debtorPayment) { $this->debtorsService->clearDebt($request->debt_id); $message = "Payment Received Successfully"; } else { $message = "Payment Not Received"; } $payment = new Payment; $payment->item_id = ""; $payment->vendor = "N/A"; $payment->unit_cost = $request->amount; $payment->amount = $request->amount; $payment->quantity = 1; $payment->memo = $request->write_off_memo ?? "N/A"; $payment->account_balance = 0; $payment->transaction_id = $new_receipt_number; $payment->account_id = 0; $payment->created_by = Auth::id(); $payment->expense_date = now(); $payment->expense_account = $request->expense_account; $payment->save(); return $message; } public function process_debtor_payment(Request $request): View|RedirectResponse { $new_receipt_number = $this->receiptService->createReceipt('Debtor Payment'); $patient_id = $request->patient_id; $debtorPayment = $this->debtorsService->createDebtorPayment($request->debt_id, $new_receipt_number, $request->amount_paid, $request->date, $request->balance, $request->comment, 0); if ($debtorPayment) { $this->debtorsService->clearDebt($request->debt_id); record_cash_credits_to_daily_collection_account($request->amount_paid, $new_receipt_number, 'Patient Debt Payment'); flash("Payment Received Successfully")->success(); } else { flash("Payment Not Received")->error(); return back(); } $return_payment_methods = PatientFinanceController::register_payment_method($patient_id, 0, $request->original_cash_to_pay, $request->payment_method, $request->payment_methods_amount, array_fill(0, count($request->payment_methods_amount ?? []), null), array_fill(0, count($request->payment_methods_amount ?? []), 0), $new_receipt_number, 13, Auth::id(), 0); return $this->debtorPaymentReceipt($request, $new_receipt_number, $return_payment_methods); } public function debtorPaymentReceipt(Request $request, $new_receipt_number, $payment_methods): View { $patient = Patient::where(['id' => $request->patient_id])->first(); $hospital_information = HospitalInformation::first(); $compact_values = compact('hospital_information', 'request', 'new_receipt_number', 'patient', 'payment_methods'); return view('patient_discounts::patient_debtors.debtor_payment', $compact_values); } public function history_debtor_payments($debtor_id): View { $hospital_information = HospitalInformation::first(); $payments = DebtorPayment::where('debt_id', $debtor_id)->get(); $debtor = Debtor::where('id', $debtor_id)->first(); $patient_id = $debtor->patient_id; return view('patient_discounts::patient_debtors.history_debtor_payments', compact('payments', 'hospital_information', 'patient_id', 'debtor_id')); } public function reverse_debtor_payment($payment_id): RedirectResponse { $payment = DebtorPayment::find($payment_id); $amount_being_removed = $payment->amount_paid; $receipt_number = $payment->receipt_number; $this->debtorsService->reverseDebtPayment($payment_id); // reverse any patient payment methods DB::table('payment_methods_transactions') ->where('receipt_number', $receipt_number) ->delete(); record_cash_debits_to_daily_collection_account($amount_being_removed, $this->receiptService->createReceipt('N/A'), "Patient Debt Payment Cancellation"); return redirect('patient_debtors/debtors'); } public function print_debtor_receipt_pdf_details(Request $request) { $hospital_information = HospitalInformation::find(1); $data = [ 'hospital_information' => $hospital_information, 'comment' => $request->comment, 'amount_owed' => $request->amount_owed, 'amount_paid' => $request->amount_paid, 'balance' => $request->balance, 'payment_methods' => unserialize($request->payment_methods), 'receipt_number' => $request->receipt_number, 'patient_id' => $request->patient_id ]; $pdf = SnappyPDF::loadView("patient_discounts::patient_debtors.print_debtor_receipt_pdf_details", $data) ->setOrientation('portrait') ->setPaper('a4') ->setOption('margin-bottom', 5) ->setOption('margin-top', 5) ->setOption('footer-html', '© ' . date('Y') . ' Stre@mline'); return $pdf->inline('Patient Receipt' . date(" d-m-y h:ia") . '.pdf'); } public function reprint_debtor_receipt_pdf_details(Request $request) { $hospital_information = HospitalInformation::find(1); if (isset($request->is_single_print) && is_numeric($request->is_single_print) && $request->is_single_print > 0) { $debt_payments = DebtorPayment::where('id', $request->is_single_print)->get(); } else { $debt_payments = DebtorPayment::where('debt_id', $request->debt_id)->get(); } $data = [ 'hospital_information' => $hospital_information, 'debt_payments' => $debt_payments, 'patient_id' => $request->patient_id, ]; $pdf = SnappyPDF::loadView("patient_discounts::patient_debtors.reprint_debtor_receipt_pdf_details", $data) ->setOrientation('portrait') ->setPaper('a4') ->setOption('margin-bottom', 5) ->setOption('margin-top', 5) ->setOption('footer-html', '© ' . date('Y') . ' Stre@mline'); return $pdf->inline('Patient Receipt' . date(" d-m-y h:ia") . '.pdf'); } public function debtors(Request $request) { $users = User::get(); $debtors = queryDateFilter('debtors', $request); $display = dateLabelSetter($request); return view('patient_discounts::patient_debtors.debtorsReport', compact('debtors', 'display', 'users')); } public function debtors_patient_search($patient_id) { $users = User::get(); $debtors = DB::table('debtors') ->where('patient_id', $patient_id) ->whereNull('deleted_at') ->get(); $display = "Showing debt records for " . get_full_name($patient_id, 'id', 'first_name', 'last_name', 'patients') . " (" . get_name($patient_id, 'id', 'number', 'patients') . ")"; return view('patient_discounts::patient_debtors.debtorsReport', compact('debtors', 'display', 'users')); } public function receive_debt_plan_payment_staff(Request $request) { $debts = DB::table('debt_plan')->where('id', $request->debt_plan_id)->groupBy('staff_guarantor')->first(); $debt_with_balances = DB::table('debt_plan_payment_staffs')->where('debt_plan_id', $request->debt_plan_id)->get(); $expense_accounts = ChartOfAccount::where('type', 2)->pluck('name', 'id')->prepend('-select-', '')->toArray(); $users_array = $this->userService->pluckUserFullName(); return view('patient_discounts::patient_debtors.debt_plan_payments_staff', compact('debts', 'debt_with_balances', 'request', 'expense_accounts', 'users_array')); } public function process_debt_plan_payment_staff(Request $request) { $new_receipt_number = $this->receiptService->createReceipt('Debt Plan'); $payment = $this->debtPlanService->createDebtPlanPayment( $request->amount_paid, $request->balance, $request->payment_id, $request->comment, $new_receipt_number, $request->date ); if ($payment) { record_cash_credits_to_daily_collection_account($request->amount_paid, $new_receipt_number, 'Debt Plan Payment'); $this->debtPlanService->clearDebtPlan($request->payment_id, $request->amount_paid); flash("Payment Received Successfully")->success(); return $this->debtPlanPaymentReceipt($request, $new_receipt_number); } else { flash("Payment Not Received")->error(); return redirect()->back(); } } public function debtPlanPaymentReceipt(Request $request, $new_receipt_number) { $patient = Patient::where(['id' => $request->patient_id])->first(); $hospital_information = HospitalInformation::first(); $compact_values = compact('hospital_information', 'request', 'new_receipt_number', 'patient'); return view('patient_discounts::patient_debtors.debt_plan_payment', $compact_values); } public function write_off_debt_plan(Request $request): string { $receipt_number = $this->receiptService->createReceipt("Patient Debt Plan Write Off"); $today = Carbon::today()->toDateTimeString(); $payment = $this->debtPlanService->createDebtPlanPayment( $request->amount, ($request->amount_owed - $request->amount), $request->payment_id, $request->comment, $receipt_number, $today, $request->amount, ); if ($payment) { $message = "Payment Received Successfully"; $this->debtPlanService->clearDebtPlan($request->payment_id, $request->amount); $payment = new Payment; $payment->item_id = ""; $payment->vendor = "N/A"; $payment->unit_cost = $request->amount; $payment->amount = $request->amount; $payment->quantity = 1; $payment->memo = $request->write_off_memo ?? "N/A"; $payment->account_balance = 0; $payment->transaction_id = $receipt_number; $payment->account_id = 0; $payment->created_by = Auth::id(); $payment->expense_date = now(); $payment->expense_account = $request->expense_account; $payment->save(); } else { $message = "Payment Not Received"; } return $message; } public function debt_plan_payment($id) { $payment = DebtPlanPaymentStaff::where(['id' => $id])->first(); $hospital_information = HospitalInformation::first(); $compact_values = compact('hospital_information', 'payment'); return view('patient_discounts::patient_debtors.debt_plan_payment_detail', $compact_values); } public function debt_plan_receipt(Request $request) { $hospital_information = HospitalInformation::first(); $patient = Patient::where(['id' => $request->patient_id])->first(); $debt_plan = DB::table('debt_plan')->where('id', $request->debt_plan_id)->first(); return view('patient_discounts::patient_debtors.patient_debt_plan', compact('debt_plan', 'hospital_information', 'patient')); } public function staff_guarantors(Request $request) { $users = DB::table('users')->get()->toArray(); $start = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); if ($request->staff_member == "ALL STAFF") { $debts = DB::table('debt_plan')->whereBetween('created_at', [$start, $end])->get()->toArray(); } else { $debts = DB::table('debt_plan') ->where('staff_guarantor', $request->staff_member)->whereBetween('created_at', [$start, $end])->get()->toArray(); } $display = dateLabelSetter($request); return view('patient_discounts::patient_debtors.staffGuarantors', compact('users', 'debts', 'display', 'request')); } public function debt_plan_patient_search($patient_id) { $users = DB::table('users')->get()->toArray(); $debts = DebtPlan::where('patient_id', $patient_id)->get(); $display = "Showing debt plan records of " . get_full_name($patient_id, 'id', 'first_name', 'last_name', 'patients') . " (" . get_name($patient_id, 'id', 'number', 'patients') . ")"; return view('patient_discounts::patient_debtors.staffGuarantors', compact('users', 'debts', 'display')); } public function debt_plan_guarantor_agreement($id) { $debt_plan = DebtPlan::find($id); if ($debt_plan) { // just get the first person for now but would be better to list all as well as the dates $user_id = explode(",", $debt_plan->staff_guarantor)[0]; if ($debt_plan->guarantor_type == 0) { $guarantor_name = get_full_name($user_id, 'id', 'first_name', 'last_name', 'non_staff_guarantors'); } else { $guarantor_name = get_full_name($user_id, 'id', 'first_name', 'last_name', 'users'); } $amount_to_pay = $debt_plan->staff_guarantor_to_pay; $amount_owed = $debt_plan->amount_owed; $patient_names = get_full_name($debt_plan->patient_id, 'id', 'first_name', 'last_name', 'patients'); $payment_date = $debt_plan->first_installment_date; $arrangement = $debt_plan->debt_plan_arrangement; return view('patient_discounts::patient_debtors.debt_plan_guarantor_agreement', compact('amount_to_pay', 'patient_names', 'payment_date', 'arrangement', 'guarantor_name', 'amount_owed')); } else { return redirect('home'); } } }