get('patient_id'); $search_by = $request->search_by; $reg_date = $request->reg_date; $start_date = $request->start_date; $end_date = $request->end_date; $patient = DB::table('patients') ->where('id', $patient_id) ->first(); if (!is_null($search_by)){ if($search_by == "0"){ // last 24 hours $start_date_search = Carbon::now()->subDay()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } elseif($search_by == "1"){ // custom date $start_date_search = Carbon::parse($reg_date)->startOfDay()->toDateTimeString(); $end_date_search = Carbon::parse($reg_date)->endOfDay()->toDateTimeString(); } elseif($search_by == "2"){ // custom date range $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date_search = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } $patient_deposits = PatientAccountsDeposit::whereBetween('deposit_date', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); $patient_refunds = PatientAccountsRefund::whereBetween('refund_date', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); $patient_consumptions = PatientAccountConsumption::whereBetween('created_at', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); return view('patient_discounts::patient_accounts.statement', compact('patient', 'search_by', 'reg_date', 'start_date', 'end_date', 'patient_deposits', 'patient_refunds', 'patient_consumptions')); } public function print_statement(Request $request) { $patient_id = session()->get('patient_id'); $search_by = $request->search_by; $reg_date = $request->reg_date; $start_date = $request->start_date; $end_date = $request->end_date; if (!is_null($search_by)){ if($search_by == "0"){ // last 24 hours $start_date_search = Carbon::now()->subDay()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } elseif($search_by == "1"){ // custom date $start_date_search = Carbon::parse($reg_date)->startOfDay()->toDateTimeString(); $end_date_search = Carbon::parse($reg_date)->endOfDay()->toDateTimeString(); } elseif($search_by == "2"){ // custom date range $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date_search = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); } $patient_deposits = PatientAccountsDeposit::whereBetween('deposit_date', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); $patient_refunds = PatientAccountsRefund::whereBetween('refund_date', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); $patient_consumptions = PatientAccountConsumption::whereBetween('created_at', [$start_date_search, $end_date_search]) ->where('patient_id', $patient_id) ->get(); $hospital_information = HospitalInformation::first(); $data = [ 'patient_consumptions' => $patient_consumptions, 'patient_refunds' => $patient_refunds, 'patient_deposits' => $patient_deposits, 'hospitalInfo' => $hospital_information, 'patient_id' => $patient_id, 'search_info' => "Patient Account details and transactions between " . streamline_date($start_date_search) . " and " . streamline_date($end_date_search) . " for " . get_full_name($patient_id, 'id', 'first_name', 'last_name', 'patients') . " (" . get_name($patient_id, 'id', 'number', 'patients') . ")" ]; $pdf = SnappyPDF::loadView("patient_discounts::patient_accounts/print_statement", $data) ->setOrientation('portrait') ->setOption('margin-bottom', 7) ->setOption('margin-top', 5) ->setOption('footer-html', '© ' . date('Y') . ' Stre@mline'); return $pdf->inline('Patient Account Statement' . date(" d-m-y h:ia") . '.pdf'); } public function make_deposit() { $patient_id = session()->get('patient_id'); $patient = DB::table('patients')->find($patient_id); $patient_payment_methods = PatientPaymentMethod::pluck('name', 'id'); $patient_payment_methods_options = ""; foreach ($patient_payment_methods as $key => $value) { $patient_payment_methods_options .= ''; } return view('patient_discounts::patient_accounts.make_deposit', compact('patient', 'patient_payment_methods_options')); } public function store_deposit(Request $request) { $patient_id = session()->get('patient_id'); $patient = DB::table('patients')->find($patient_id); $deposit_amount = $request->deposit_amount; $deposit_date = $request->deposit_date; $track_receipts = new TrackReceipt; $track_receipts->created_by = Auth::id(); $track_receipts->reason = 'Patient Account Deposit'; $track_receipts->save(); $receipt_number = sprintf("%04u", $track_receipts->id); $deposit = new PatientAccountsDeposit(); $deposit->patient_id = $patient_id; $deposit->deposit_amount = $deposit_amount; $deposit->deposit_date = Carbon::createFromFormat('d-m-Y', $deposit_date)->toDateString(); $deposit->receipt_number = $receipt_number; $deposit->created_by = Auth::id(); if ($deposit->save()) { record_cash_credits_to_daily_collection_account($deposit_amount, $receipt_number, "Patient Account Deposits"); $patient_to_update = Patient::find($patient_id); $patient_to_update->patient_account_balance = $patient_to_update->patient_account_balance + (int)$request->deposit_amount; $patient_to_update->update(); $patient_account_balance_id = get_name("patient_account_balance", "slug", "id", "chart_of_accounts"); if (is_numeric($patient_account_balance_id)) { // increase the balance on chart of accounts called "patient account deposit" $chart_of_account = ChartOfAccount::find($patient_account_balance_id); $chart_of_account->balance = $chart_of_account->balance + (int)$request->deposit_amount; $chart_of_account->update(); } else { flash('A chart of accounts is missing. Please contact Stre@mline support immediately!')->error(); } $receipt_date = date('Y-m-d h:i:s'); $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, ($request->payment_methods_amount ? count($request->payment_methods_amount) : 0), null), array_fill(0, ($request->payment_methods_amount ? count($request->payment_methods_amount) : 0), 0), $receipt_number, 15, Auth::id(), 0); flash('Patient account deposit has been updated')->success(); $description = "Amount Deposited"; if (is_cashier_receipt_type_print_html()) { return view('patient_discounts::patient_accounts.deposit_receipt',compact('deposit_amount', 'receipt_number', 'receipt_date', 'return_payment_methods', 'patient', 'deposit_date', 'description')); } else { // so we first have to set a session and then go back to the payment page // on the payment page we can then set a JS variable that can help redirect us to our pdf print session()->put('print_patient_account_receipt_pdf', 1); // since we want to reduce the amount of duplicate code, we shall send all items to one file for printing $data = [ "deposit_amount" => $deposit_amount, "receipt_number" => $receipt_number, "deposit_date" => $deposit_date, "return_payment_methods" => $return_payment_methods, "receipt_date" => $receipt_date, "patient_id" => $patient_id, "description" => $description ]; session()->put('print_patient_account_receipt_pdf_details', $data); return redirect('/patient_finance/home/'); } } else { return redirect('patient_accounts/make_deposit'); } } public function print_receipt_pdf_details() { $data = session()->get("print_patient_account_receipt_pdf_details"); // add check for when the people try to reload the page if (!$data) { return redirect('/home'); } $data['hospital_information'] = \Streamline\Models\HospitalInformation::first(); // lest i forget Thy love for me session()->forget('print_patient_account_receipt_pdf'); session()->forget('print_patient_account_receipt_pdf_details'); $pdf = SnappyPDF::loadView("patient_discounts::patient_accounts.print_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 Accounts Receipt' . date(" d-m-y h:ia") . '.pdf'); } public function refund_deposit() { $patient_id = session()->get('patient_id'); $patient = DB::table('patients')->find($patient_id); $current_balance = get_name($patient_id, 'id', 'patient_account_balance', 'patients'); $banks = DB::table('chart_of_accounts')->whereNull('deleted_at')->where('type', 4)->pluck('name', 'id')->prepend('--select--', ''); if ($current_balance > 0) { return view('patient_discounts::patient_accounts.refund_deposit', compact('current_balance', 'patient', 'banks')); } else { flash("Patient account refund can not be completed because balance is less than refund limit")->error(); return redirect('/patient_accounts/statement'); } } public function save_refund_deposit(Request $request) { $patient_id = session()->get('patient_id'); $patient = DB::table('patients')->find($patient_id); $track_receipts = new TrackReceipt; $track_receipts->created_by = Auth::id(); $track_receipts->reason = 'Patient Accounts Refund'; $track_receipts->save(); $receipt_number = sprintf("%04u", $track_receipts->id); $current_balance = $request->current_balance; $refund_amount = $request->refund_amount; $refund_date = $request->refund_date; $account_id = $request->account_id; $account_balance = $request->account_balance; $refund_reason = $request->refund_reason; if (($current_balance < $refund_amount) || ($refund_amount < 1) || ($account_balance < $refund_amount)) { flash("Please enter a valid refund amount")->error(); return redirect('/patient_accounts/refund_deposit'); } // reduce the patient's current balance by deleted amount $patient_to_update = Patient::find($patient_id); $patient_to_update->patient_account_balance = (int)$current_balance - (int)$refund_amount; $patient_to_update->update(); // decrease the balance on select account $chart_of_account = ChartOfAccount::find($account_id); $chart_of_account->balance = $chart_of_account->balance - (int)$refund_amount; $chart_of_account->update(); $account_balance_record_on_expense_date = get_latest_banking_record_based_on_transaction_date($account_id, date('Y-m-d', strtotime($refund_date))); $account_balance_on_expense_date_after_payment = ($account_balance_record_on_expense_date ? (int)$account_balance_record_on_expense_date->account_balance : 0) - $refund_amount; $last_insert_id = capture_bank_record('Patient Account Refunds', date('Y-m-d', strtotime($refund_date)), $account_id, 0, $account_balance_on_expense_date_after_payment, 0, $refund_amount, $refund_reason, $receipt_number); update_banking_record_balances(date('Y-m-d', strtotime($refund_date)), $account_id, $last_insert_id, $account_balance_on_expense_date_after_payment); $patient_account_balance_id = get_name("patient_account_balance", "slug", "id", "chart_of_accounts"); if (is_numeric($patient_account_balance_id)) { // decrease the balance on chart of accounts called "patient account deposit" $chart_of_account = ChartOfAccount::find($patient_account_balance_id); $chart_of_account->balance = $chart_of_account->balance - (int)$refund_amount; $chart_of_account->update(); } else { flash('A chart of accounts is missing. Please contact Stre@mline support immediately!')->error(); } $refund = new PatientAccountsRefund(); $refund->patient_id = $patient_id; $refund->refund_amount = $refund_amount; $refund->refund_date = Carbon::createFromFormat('d-m-Y', $refund_date)->toDateString(); $refund->refund_reason = $refund_reason; $refund->account_id = $account_id; $refund->receipt_number = $receipt_number; $refund->created_by = Auth::id(); $refund->save(); $description = "Amount Refunded"; $deposit_amount = $refund_amount; $receipt_date = date('Y-m-d h:i:s'); $deposit_date = $refund_date; $return_payment_methods = []; if (is_cashier_receipt_type_print_html()) { return view('patient_discounts::patient_accounts.deposit_receipt',compact('deposit_amount', 'receipt_number', 'receipt_date', 'return_payment_methods', 'patient', 'deposit_date', 'description')); } else { // so we first have to set a session and then go back to the payment page // on the payment page we can then set a JS variable that can help redirect us to our pdf print session()->put('print_patient_account_receipt_pdf', 1); // since we want to reduce the amount of duplicate code, we shall send all items to one file for printing $data = [ "deposit_amount" => $deposit_amount, "receipt_number" => $receipt_number, "deposit_date" => $deposit_date, "return_payment_methods" => $return_payment_methods, "receipt_date" => $receipt_date, "patient_id" => $patient_id, "description" => $description ]; session()->put('print_patient_account_receipt_pdf_details', $data); return redirect('/patient_finance/home/'); } } public function deposits_report(Request $request) { $search_by = $request->search_by; $reg_date = $request->reg_date; $start_date = $request->start_date; $end_date = $request->end_date; $filters = []; if (!is_null($search_by)){ if($search_by == "0"){ // last 24 hours $last_day = Carbon::now()->subDay(); $filters[] = ['deposit_date', '>', $last_day]; } elseif($search_by == "1"){ // custom date $start_date_search = Carbon::parse($reg_date)->toDateString(); $filters[] = ['deposit_date', '=', $start_date_search]; } elseif($search_by == "2"){ // custom date range if ($start_date == $end_date) { $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateString(); $filters[] = ['deposit_date', '=', $start_date_search]; } else { $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateString(); $end_date_search = Carbon::parse($end_date)->endOfDay()->toDateString(); $filters[] = ['deposit_date', '>', $start_date_search]; $filters[] = ['deposit_date', '<', $end_date_search]; } } else { $start_date_search = Carbon::now()->startOfDay()->toDateString(); $end_date_search = Carbon::now()->endOfDay()->toDateString(); $filters[] = ['deposit_date', '>', $start_date_search]; $filters[] = ['deposit_date', '<', $end_date_search]; } } else { $filters[] = ['deposit_date', '=', Carbon::now()->toDateString()]; } if (isset($request->patient_number)) { $filters[] = ['patient_id', '=', get_name($request->patient_number, 'number', 'id', 'patients')]; } if (isset($request->user_id)) { $filters[] = ['created_by', '=', $request->user_id]; } $patient_numbers = DB::table('patients')->orderBy('number')->distinct()->pluck('number'); $patient_deposits = PatientAccountsDeposit::where($filters)->get(); return view('patient_discounts::patient_accounts.deposits_report', compact('patient_deposits', 'reg_date', 'start_date', 'end_date', 'patient_numbers')); } public function view_details($id) { session()->put(['patient_id' => $id]); return redirect('/patient_accounts/statement'); } public function cancel_deposit($id) { $deposit = PatientAccountsDeposit::find($id); $receipt_number = $deposit->receipt_number; $patient_id = $deposit->patient_id; $deposit_amount = $deposit->deposit_amount; if ($deposit->delete()) { $patient_account_balance_id = get_name("patient_account_balance", "slug", "id", "chart_of_accounts"); if (is_numeric($patient_account_balance_id)) { // decrease the balance on chart of accounts called "patient account deposit" $chart_of_account = ChartOfAccount::find($patient_account_balance_id); $chart_of_account->balance = (int)$chart_of_account->balance - (int)$deposit_amount; $chart_of_account->update(); } else { flash('A chart of accounts is missing. Please contact Stre@mline support immediately!')->error(); } record_cash_debits_to_daily_collection_account($deposit_amount, $receipt_number, 'Cancel Patient Account Deposit'); // reduce the patient's current balance by deleted amount $patient_to_update = Patient::find($patient_id); $patient_to_update->patient_account_balance = $patient_to_update->patient_account_balance - $deposit_amount; $patient_to_update->update(); // delete the patient payment methods DB::table('payment_methods_transactions') ->where('receipt_number', $receipt_number) ->delete(); flash("Patient account deposit of " . $deposit_amount . " has been cancelled")->success(); } else { flash("Patient account deposit of " . $deposit_amount . " has not been cancelled")->error(); } return redirect('/patient_accounts/deposits_report'); } public function refunds_report(Request $request) { $search_by = $request->search_by; $reg_date = $request->reg_date; $start_date = $request->start_date; $end_date = $request->end_date; $filters = []; if (!is_null($search_by)){ if($search_by == "0"){ // last 24 hours $last_day = Carbon::now()->subDay(); array_push($filters, ['refund_date', '>', $last_day]); } elseif($search_by == "1"){ // custom date $start_date_search = Carbon::parse($reg_date)->toDateString(); array_push($filters, ['refund_date', '=', $start_date_search]); } elseif($search_by == "2"){ // custom date range if ($start_date == $end_date) { $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateString(); array_push($filters, ['refund_date', '=', $start_date_search]); } else { $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateString(); $end_date_search = Carbon::parse($end_date)->endOfDay()->toDateString(); array_push($filters, ['refund_date', '>', $start_date_search]); array_push($filters, ['refund_date', '<', $end_date_search]); } } else { $start_date_search = Carbon::now()->startOfDay()->toDateString(); $end_date_search = Carbon::now()->endOfDay()->toDateString(); array_push($filters, ['refund_date', '>', $start_date_search]); array_push($filters, ['refund_date', '<', $end_date_search]); } } else { $start_date_search = Carbon::now()->startOfDay()->toDateString(); $end_date_search = Carbon::now()->endOfDay()->toDateString(); array_push($filters, ['refund_date', '>', $start_date_search]); array_push($filters, ['refund_date', '<', $end_date_search]); } if (isset($request->patient_number)) { array_push($filters, ['patient_id', '=', get_name($request->patient_number, 'number', 'id', 'patients')]); } $patient_numbers = DB::table('patients')->orderBy('number')->distinct()->pluck('number'); $patient_refunds = PatientAccountsRefund::where($filters)->get(); return view('patient_discounts::patient_accounts.refunds_report', compact('patient_refunds', 'reg_date', 'start_date', 'end_date', 'patient_numbers')); } public function cancel_refund($id) { $refund = PatientAccountsRefund::find($id); $refund_amount = $refund->refund_amount; $account_id = $refund->account_id; $track_receipts = new TrackReceipt; $track_receipts->created_by = Auth::id(); $track_receipts->reason = 'Patient Accounts Refund'; $track_receipts->save(); $receipt_number = sprintf("%04u", $track_receipts->id); if ($refund->delete()) { // decrease the balance on select account $chart_of_account = ChartOfAccount::find($account_id); $chart_of_account->balance = $chart_of_account->balance + (int)$refund_amount; $chart_of_account->update(); $account_balance_record_on_expense_date = get_latest_banking_record_based_on_transaction_date($account_id, date('Y-m-d')); $account_balance_on_expense_date_after_payment = ($account_balance_record_on_expense_date ? (int)$account_balance_record_on_expense_date->account_balance : 0) + $refund_amount; $last_insert_id = capture_bank_record('Patient Account Refunds Cancellation', date('Y-m-d'), $account_id, 0, $account_balance_on_expense_date_after_payment, $refund_amount, 0, 'Patient Account Refunds Cancellation', $receipt_number); update_banking_record_balances(date('Y-m-d'), $account_id, $last_insert_id, $account_balance_on_expense_date_after_payment); $patient_account_balance_id = get_name("patient_account_balance", "slug", "id", "chart_of_accounts"); if (is_numeric($patient_account_balance_id)) { // increase the balance on chart of accounts called "patient account deposit" $chart_of_account = ChartOfAccount::find($patient_account_balance_id); $chart_of_account->balance = (int)$chart_of_account->balance + (int)$refund_amount; $chart_of_account->update(); } else { flash('A chart of accounts is missing. Please contact Stre@mline support immediately!')->error(); } flash("Patient account refund of " . $refund_amount . " has been cancelled")->success(); } else { flash("Patient account refund of " . $refund_amount . " has not been cancelled")->error(); } return redirect('/patient_accounts/refunds_report'); } public function consumptions_report(Request $request) { $search_by = $request->search_by; $reg_date = $request->reg_date; $start_date = $request->start_date; $end_date = $request->end_date; $filters = []; if (!is_null($search_by)){ if($search_by == "0"){ // last 24 hours $last_day = Carbon::now()->subDay(); array_push($filters, ['created_at', '>', $last_day]); } elseif($search_by == "1"){ // custom date $start_date_search = Carbon::parse($reg_date)->toDateTimeString(); array_push($filters, ['created_at', '=', $start_date_search]); } elseif($search_by == "2"){ // custom date range $start_date_search = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date_search = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date_search]); array_push($filters, ['created_at', '<', $end_date_search]); } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date_search]); array_push($filters, ['created_at', '<', $end_date_search]); } } else { $start_date_search = Carbon::now()->startOfDay()->toDateTimeString(); $end_date_search = Carbon::now()->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date_search]); array_push($filters, ['created_at', '<', $end_date_search]); } if (isset($request->patient_number)) { array_push($filters, ['patient_id', '=', get_name($request->patient_number, 'number', 'id', 'patients')]); } $patient_numbers = DB::table('patients')->orderBy('number')->distinct()->pluck('number'); $patient_consumptions = PatientAccountConsumption::where($filters)->get(); return view('patient_discounts::patient_accounts.consumptions_report', compact('patient_consumptions', 'reg_date', 'start_date', 'end_date', 'patient_numbers')); } }