Files
streamline-emr/docker/statistics/Modules/Finance/Http/Controllers/FinanceController.php
T
2025-03-31 03:46:05 +03:00

78 lines
4.2 KiB
PHP
Executable File

<?php
namespace Modules\Finance\Http\Controllers;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class FinanceController extends Controller
{
public function index()
{
return view('finance::finance.index');
}
public function incoming_opd_payments(Request $request): View
{
$clinic_id = $request->clinic_id;
$search_by = $request->search_by;
$patient_categories = DB::table('patient_categories')->pluck("name", "id");
$filters = [];
if($search_by == 0){
$start_date = Carbon::now()->startOfDay()->toDateTimeString();
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
} elseif ($search_by == 1) {
$start_date = Carbon::now()->subDay()->startOfDay()->toDateTimeString();
$end_date = Carbon::now()->subDay()->endOfDay()->toDateTimeString();
} elseif ($search_by == 2) {
$start_date = Carbon::parse($request->reg_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->reg_date)->endOfDay()->toDateTimeString();
} elseif ($search_by ==3) {
// custom date range
$start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
} else {
$start_date = Carbon::now()->toDateTimeString();
$end_date = Carbon::now()->toDateTimeString();
}
if ($clinic_id != 0) {
$filters[] = ['patient_episodes.clinic_id', '=', $clinic_id];
}
if (is_numeric($request->patient_number)) {
$filters[] = ['patient_episodes.patient_id', '=', $request->patient_number];
$start_date = Carbon::now()->startOfCentury()->toDateTimeString();
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
}
$patient_episodes = DB::table('patient_episodes')
->leftJoin('patients', 'patients.id', '=', 'patient_episodes.patient_id')
->leftJoin('treatments', 'treatments.episode_id', '=', 'patient_episodes.id')
->leftJoin('ordered_procedures', 'ordered_procedures.episode_id', '=', 'patient_episodes.id')
->leftJoin('ordered_investigations', 'ordered_investigations.episode_id', '=', 'patient_episodes.id')
->leftJoin('ordered_sundries', 'ordered_sundries.episode_id', '=', 'patient_episodes.id')
->leftJoin('ordered_services', 'ordered_services.episode_id', '=', 'patient_episodes.id')
->where($filters)
->groupBy('patient_episodes.id')
->whereBetween('patient_episodes.created_at', [$start_date, $end_date])
->select('patient_episodes.id as episode_id', 'patient_episodes.patient_id', 'patients.first_name', 'patients.last_name', 'patients.date_of_birth', 'patients.number',
'patients.phone', 'patients.category_id',
'treatments.id as treatment_id', 'treatments.payment_status as treatment_payment_status', 'treatments.inpatient_bill_generated as treatment_is_inpatient',
'ordered_procedures.id as procedure_id', 'ordered_procedures.payment_status as procedures_payment_status', 'ordered_procedures.inpatient_bill_generated as procedures_is_inpatient',
'ordered_investigations.id as investigation_id', 'ordered_investigations.payment_status as investigation_payment_status', 'ordered_investigations.inpatient_bill_generated as invs_is_inpatient',
'ordered_sundries.id as sundries_id', 'ordered_sundries.payment_status as sundries_payment_status', 'ordered_sundries.inpatient_bill_generated as sundry_is_inpatient',
'ordered_services.id as service_id', 'ordered_services.payment_status as service_payment_status', 'ordered_services.inpatient_bill_generated as service_is_inpatient')
->get();
$clinics = DB::table("clinics")->whereNull("deleted_at")->orderBy("name")->pluck("name", "id")->toArray();
$clinics = [0 => 'OPD'] + ['' => '- select -'] + $clinics;
return view('finance::finance.incoming_opd_payments', compact('patient_categories', 'clinics', 'patient_episodes'));
}
}