mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
593 lines
28 KiB
PHP
Executable File
593 lines
28 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\PatientDiscounts\Http\Controllers;
|
|
|
|
use Barryvdh\Snappy\Facades\SnappyPdf;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Modules\PatientFinance\Http\Controllers\PatientFinanceController;
|
|
use Streamline\Models\ChartOfAccount;
|
|
use Streamline\Models\HospitalInformation;
|
|
use Streamline\Models\Patient;
|
|
use Streamline\Models\PatientAccountConsumption;
|
|
use Streamline\Models\PatientAccountsDeposit;
|
|
use Streamline\Models\PatientAccountsRefund;
|
|
use Streamline\Models\PatientPaymentMethod;
|
|
use Streamline\Models\TrackReceipt;
|
|
|
|
class PatientAccountsController extends Controller {
|
|
|
|
public function 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;
|
|
|
|
$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', '<i>© ' . date('Y') . ' Stre@mline</i>');
|
|
|
|
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 .= '<option value="' . $key . '">' . $value . '</option>';
|
|
}
|
|
|
|
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', '<i>© ' . date('Y') . ' Stre@mline</i>');
|
|
|
|
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'));
|
|
}
|
|
}
|