mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
updated streamline-setup v2
This commit is contained in:
+239
@@ -0,0 +1,239 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Carbon\Carbon;
|
||||
use Streamline\Models\CommunityHealthInsurancePlan;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Streamline\Models\HospitalInformation;
|
||||
use Streamline\Models\InsuranceBenefit;
|
||||
use Streamline\Models\InsuranceBenefitItem;
|
||||
|
||||
class CommunityHealthInsurancePlanController extends Controller
|
||||
{
|
||||
public function __construct() {
|
||||
/* $this->middleware('auth');
|
||||
$this->middleware('permission:chi_plan-list', ['only' => ['index']]);
|
||||
$this->middleware('permission:chi_plan-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:chi_plan-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:chi_plan-delete', ['only' => ['destroy', 'inactive', 'activate']]); */
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
$chi_plans = CommunityHealthInsurancePlan::orderBy('name', 'asc')->paginate(50);
|
||||
|
||||
return view('insurance::chi_plan.index', compact('chi_plans'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('insurance::chi_plan.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'plan_start_date' => 'required',
|
||||
'plan_end_date' => 'required'
|
||||
]);
|
||||
|
||||
$start_date = Carbon::createFromFormat('d-m-Y', $request->plan_start_date)->toDateString();
|
||||
$end_date = Carbon::createFromFormat('d-m-Y', $request->plan_end_date)->toDateString();
|
||||
|
||||
$chi_plan = new CommunityHealthInsurancePlan;
|
||||
$chi_plan->name = $request->name;
|
||||
$chi_plan->plan_fee = $request->plan_fee;
|
||||
$chi_plan->plan_start_date = $start_date;
|
||||
$chi_plan->plan_end_date = $end_date;
|
||||
$chi_plan->member_annual_limit = $request->member_annual_limit;
|
||||
$chi_plan->family_annual_limit = $request->family_annual_limit;
|
||||
$chi_plan->is_authorized_required = $request->is_authorization_required;
|
||||
$chi_plan->membership_card_color = $request->membership_card_color;
|
||||
$chi_plan->created_by = auth()->user()->id;
|
||||
|
||||
try {
|
||||
$chi_plan->save();
|
||||
flash($request->name . " CHI plan has been created")->success();
|
||||
return redirect("/community_health_insurance_plan/");
|
||||
} catch (QueryException $e) {
|
||||
flash($request->name . " CHI plan already exists!")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function show($id) {
|
||||
$chi_plan = CommunityHealthInsurancePlan::withTrashed()->find($id);
|
||||
|
||||
$drugs = DB::table('drugs')->where('available', 1)->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
$services = DB::table('services')->where('available', 1)->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$sundries = DB::table('sundries')->where('available', 1)->pluck('name', 'id');
|
||||
|
||||
if ($chi_plan) {
|
||||
return view('insurance::chi_plan.show', compact('chi_plan', 'drugs', 'procedures', 'services', 'investigations', 'sundries'));
|
||||
}
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function edit($id) {
|
||||
$chi_plan = CommunityHealthInsurancePlan::findOrFail($id);
|
||||
|
||||
if (!$chi_plan) {
|
||||
flash()->error("CHI plan not found");
|
||||
return redirect('/community_health_insurance_plan/');
|
||||
} else {
|
||||
return view('insurance::chi_plan.edit', compact('chi_plan'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'plan_start_date' => 'required',
|
||||
'plan_end_date' => 'required'
|
||||
]);
|
||||
|
||||
$start_date = Carbon::createFromFormat('d-m-Y', $request->plan_start_date)->toDateString();
|
||||
$end_date = Carbon::createFromFormat('d-m-Y', $request->plan_end_date)->toDateString();
|
||||
|
||||
$chi_plan = CommunityHealthInsurancePlan::findOrFail($id);
|
||||
$chi_plan->name = $request->name;
|
||||
$chi_plan->plan_fee = $request->plan_fee;
|
||||
$chi_plan->plan_start_date = $start_date;
|
||||
$chi_plan->plan_end_date = $end_date;
|
||||
$chi_plan->member_annual_limit = $request->member_annual_limit;
|
||||
$chi_plan->family_annual_limit = $request->family_annual_limit;
|
||||
$chi_plan->is_authorized_required = $request->is_authorization_required;
|
||||
$chi_plan->membership_card_color = $request->membership_card_color;
|
||||
$chi_plan->created_by = auth()->user()->id;
|
||||
|
||||
try {
|
||||
$chi_plan->update();
|
||||
flash($request->name . " CHI plan has been updated")->success();
|
||||
return redirect("/community_health_insurance_plan/");
|
||||
} catch (QueryException $e) {
|
||||
flash($request->name . " CHI plan already exists!")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$chi_plan = CommunityHealthInsurancePlan::find($id);
|
||||
|
||||
if ($chi_plan->delete()){
|
||||
// remove benefits as well as the items
|
||||
InsuranceBenefit::where('plan_id', $id)->delete();
|
||||
InsuranceBenefitItem::where('plan_id', $id)->delete();
|
||||
|
||||
flash("CHI Plan has been deleted.")->success();
|
||||
return redirect('/community_health_insurance_plan/');
|
||||
} else {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function inactive() {
|
||||
$chi_plans = CommunityHealthInsurancePlan::onlyTrashed()
|
||||
->orderBy('name', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($chi_plans) < 1) {
|
||||
flash()->error("There is no inactive Plans");
|
||||
return redirect('/community_health_insurance_plan/');
|
||||
} else {
|
||||
return view('insurance::chi_plan.inactive', compact('chi_plans'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function activate($id) {
|
||||
$chi_plan = CommunityHealthInsurancePlan::withTrashed()->find($id);
|
||||
|
||||
if ($chi_plan->restore()){
|
||||
flash("Plan has been activated.")->success();
|
||||
return redirect('/community_health_insurance_plan/');
|
||||
}
|
||||
}
|
||||
|
||||
public function print($id)
|
||||
{
|
||||
$chi_plan = CommunityHealthInsurancePlan::withTrashed()->find($id);
|
||||
|
||||
$hospital_information = HospitalInformation::find(1);
|
||||
|
||||
$drugs = DB::table('drugs')->where('available', 1)->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
$services = DB::table('services')->where('available', 1)->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$sundries = DB::table('sundries')->where('available', 1)->pluck('name', 'id');
|
||||
|
||||
$data = [
|
||||
'chi_plan' => $chi_plan,
|
||||
'hospitalInfo' => $hospital_information,
|
||||
'drugs' => $drugs,
|
||||
'procedures' => $procedures,
|
||||
'services' => $services,
|
||||
'investigations' => $investigations,
|
||||
'sundries' => $sundries
|
||||
];
|
||||
|
||||
$print_footer = (!is_null($hospital_information->print_footer)) ? '     <i>' . $hospital_information->print_footer . '</i>' : '';
|
||||
|
||||
$pdf = SnappyPDF::loadView("insurance::chi_plan/print_plan_details", $data)
|
||||
->setOrientation('portrait')
|
||||
->setPaper('a4')
|
||||
->setOption('margin-bottom', 5)
|
||||
->setOption('margin-top', 5)
|
||||
->setOption('footer-html', '<i>© ' . date('Y') . ' Stre@mline</i>' . $print_footer);
|
||||
|
||||
|
||||
return $pdf->inline('C.H.I Details' . date(" d-m-y h:ia") . '.pdf');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
||||
+294
@@ -0,0 +1,294 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Streamline\Models\HeadOfFamily;
|
||||
use Streamline\Models\InsuranceMember;
|
||||
use Streamline\Models\InsuranceGroup;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Streamline\Models\Patient;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class HeadsOfFamilyController extends Controller {
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:family-head-list');
|
||||
$this->middleware('permission:family-head-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:family-head-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:family-head-delete', ['only' => ['destroy']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index() {
|
||||
$family_heads = HeadOfFamily::orderBy('id', 'asc')
|
||||
->join('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->select('insurance_heads_of_family.*', 'patients.phone', 'patients.number')->paginate(200);
|
||||
|
||||
$insurance_groups = InsuranceGroup::pluck('name', 'id');
|
||||
$full_names = HeadOfFamily::leftJoin('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " ", number) AS full_name'))
|
||||
->pluck("full_name");
|
||||
$patient_numbers = HeadOfFamily::leftJoin('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')->pluck('number');
|
||||
|
||||
return view('insurance::heads_of_family.index', compact('insurance_groups', 'family_heads', 'full_names', 'patient_numbers'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show search results when looking for a family head.
|
||||
*
|
||||
*/
|
||||
public function search(Request $request) {
|
||||
$insurance_groups = InsuranceGroup::pluck('name', 'id');
|
||||
|
||||
$criteria = '';
|
||||
$filters = [];
|
||||
|
||||
if (!empty($request->full_name)){
|
||||
$split_full_name_array = explode(' ', $request->full_name);
|
||||
|
||||
if (is_array($split_full_name_array)) {
|
||||
$first_name_from_split = $split_full_name_array[0] ?? "";
|
||||
$last_name_from_split = $split_full_name_array[1] ?? "";
|
||||
// for people with 3, 4 names make sure to get last element
|
||||
$patient_number_from_split = count($split_full_name_array) > 2 ? array_slice($split_full_name_array, -1)[0] : '';
|
||||
|
||||
//just only use the patient number from the full name submitted
|
||||
if ($patient_number_from_split != "") {
|
||||
$filters[] = ['number', 'LIKE', '%' . $patient_number_from_split . '%'];
|
||||
$criteria .= 'Number (' . $patient_number_from_split . ') ';
|
||||
} else {
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $first_name_from_split . '%'];
|
||||
$filters[] = ['last_name', 'LIKE', '%' . $last_name_from_split . '%'];
|
||||
$criteria .= 'Name (' . $request->full_name . ') ';
|
||||
}
|
||||
} else {
|
||||
//just only use the patient number from the full name submitted
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $request->full_name . '%'];
|
||||
$criteria .= 'Name (' . $request->full_name . ') ';
|
||||
}
|
||||
}
|
||||
|
||||
$family_heads_query = HeadOfFamily::query()
|
||||
->leftJoin('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->leftJoin('insurance_members', 'insurance_heads_of_family.patient_id', '=', 'insurance_members.patient_id')
|
||||
->select('insurance_heads_of_family.*', 'patients.phone', 'patients.number')
|
||||
->where($filters)->orderBy('id', 'asc');
|
||||
|
||||
if ($request->member_type == 1){
|
||||
if(!empty($criteria)) $criteria .= 'and ';
|
||||
$family_heads_query->where('insurance_members.current_insurance_end_date', '>', date('Y-m-d'));
|
||||
$criteria .= __('heads_of_family.family_heads_with_active_insurance') . ' ';
|
||||
} elseif ($request->member_type == 2) {
|
||||
if(!empty($criteria)) $criteria .= 'and ';
|
||||
$family_heads_query->whereRaw("(`insurance_members`.`current_insurance_end_date` is null or `insurance_members`.`current_insurance_end_date` <= '" . date('Y-m-d') . "')");
|
||||
$criteria .= __('heads_of_family.family_heads_with_inactive_insurance') . ' ';
|
||||
}
|
||||
$family_heads = $family_heads_query->paginate(200);
|
||||
$full_names = HeadOfFamily::leftJoin('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " ", number) AS full_name'))
|
||||
->pluck("full_name");
|
||||
|
||||
return view('insurance::heads_of_family.index', compact('insurance_groups', 'family_heads','criteria', 'full_names'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
*/
|
||||
public function store(Request $request) {}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
*/
|
||||
public function show($id) {}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
*/
|
||||
public function edit($id) {}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function update(Request $request, $id) {}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$head_of_family = HeadOfFamily::findOrFail($id);
|
||||
if(!empty($head_of_family->family_members_ids)){
|
||||
flash()->error("Families with members can not be DELETED!");
|
||||
return redirect('/heads_of_family/');
|
||||
}
|
||||
elseif($head_of_family->delete()) {
|
||||
flash("Family was successfully deleted.")->success();
|
||||
return redirect('/heads_of_family/');
|
||||
}else {
|
||||
flash()->error("Failed to delete Family!");
|
||||
return redirect('/heads_of_family/');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function inactive() {
|
||||
$family_heads = HeadOfFamily::onlyTrashed()
|
||||
->orderBy('id', 'asc')
|
||||
->join('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->select('insurance_heads_of_family.*', 'patients.phone', 'patients.number')
|
||||
->paginate(50);
|
||||
|
||||
$insurance_groups = DB::table('insurance_groups')->pluck('name', 'id');
|
||||
|
||||
$insurance_subscriptions = DB::table('insurance_subscriptions')->pluck('end_date', 'group_id');
|
||||
|
||||
if (empty($family_heads)) {
|
||||
flash()->error("There is no inactive family heads");
|
||||
return redirect('/heads_of_family/');
|
||||
} else {
|
||||
return view('insurance::heads_of_family.inactive', compact('insurance_groups', 'family_heads', 'insurance_subscriptions'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function activate($id) {
|
||||
$head_of_family = HeadOfFamily::withTrashed()->find($id);
|
||||
|
||||
//edit is_family record in insurance members table
|
||||
$insurance_member = InsuranceMember::where(['patient_id' => $head_of_family->patient_id])->first();
|
||||
|
||||
$insurance_member->is_family_head = 1;
|
||||
|
||||
$patient_id = $insurance_member->patient_id;
|
||||
$patient = Patient::find($patient_id);
|
||||
$patient->insurance_status = 1;
|
||||
$patient->save();
|
||||
|
||||
if ($head_of_family->restore() && $insurance_member->save()):
|
||||
flash("Head of Family has been activated.")->success();
|
||||
return redirect('/heads_of_family/');
|
||||
endif;
|
||||
}
|
||||
|
||||
public function view_family_members_of_head($family_head_id)
|
||||
{
|
||||
$code = '';
|
||||
$i = 1;
|
||||
$members = InsuranceMember::where(['family_id' => $family_head_id])->get();
|
||||
|
||||
$code .= '<table class="table success-table table-sm">';
|
||||
$family_total_premiums_to_pay = 0;
|
||||
$family_members_to_exclude_array = session()->has($family_head_id) ? session()->get($family_head_id) : [];
|
||||
|
||||
//check if families exist in this group
|
||||
if ($members->count() > 0) {
|
||||
$code .= '<tbody class="dynamicFamilyMembers">';
|
||||
$code .= '<tr><th>#</th><th><b>Name</b></th><th><b>Premium</b></th><th><b>Relation to head</b></th><th></th></tr>';
|
||||
|
||||
//check if a subscription has already been made to avoid duplication
|
||||
foreach ($members as $member) {
|
||||
if (!in_array($member->id, $family_members_to_exclude_array)) {
|
||||
$code .= '<tr>';
|
||||
$code .= '<td>';
|
||||
$code .= $i;
|
||||
$code .= '</td>';
|
||||
$code .= '<td>';
|
||||
$code .= insurance_flag($member->patient_id).' ('.get_name($member->patient_id, "id", "number", "patients").')';
|
||||
$code .= ($member->is_family_head == 1) ? ' <span style="color: #7b6dc7; font-weight: bolder"><strong>Family Head</strong></span>' : '';
|
||||
$code .= '</td>';
|
||||
$code .= '<td>';
|
||||
$code .= ugandan_shillings($member->premium);
|
||||
$code .= '</td>';
|
||||
$code .= '<td>';
|
||||
$code .= get_name($member->relationship_to_head, "id", "name", "family_relations");
|
||||
$code .= '</td>';
|
||||
$code .= '<td><a href="/change_family_head/'.$family_head_id.'/'.$member->id.'" onclick="return confirm(\'Are you sure you want to change the head of this family?\')">Make family head</a></td>';
|
||||
$code .= '</tr>';
|
||||
$i++;
|
||||
$family_total_premiums_to_pay += $member->premium;
|
||||
}
|
||||
}
|
||||
$code .= '<tr><td colspan="2"><b>Total</b></td><td colspan="4"><b>'.ugandan_shillings($family_total_premiums_to_pay).'</b></td><tr>';
|
||||
$code .= '<tbody>';
|
||||
}
|
||||
|
||||
$code .= '</table>';
|
||||
//$code .= '<a href="#" class="btn btn-info btn-sm btn-rounded addMemberBtn" id="'.$family_head_id.'">Add new member to this family</a>';
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function change_family_head($current_head, $member_id)
|
||||
{
|
||||
$insurance_member = InsuranceMember::where(['family_id' => $current_head, 'id' => $member_id])->orderBy('id', 'desc')->first();
|
||||
$family_head_patient_id = get_name($current_head, "id", "patient_id", "insurance_heads_of_family");
|
||||
|
||||
if ($insurance_member) {
|
||||
$head_of_family = HeadOfFamily::find($current_head);
|
||||
$patient = Patient::withTrashed()->find($insurance_member->patient_id);
|
||||
|
||||
$head_of_family->name = $patient->first_name . " " . $patient->last_name;
|
||||
$head_of_family->group_id = $insurance_member->group_id;
|
||||
$head_of_family->patient_id = $patient->id;
|
||||
$head_of_family->created_by = auth()->user()->id;
|
||||
$head_of_family->updated_by = auth()->user()->id;
|
||||
if ($head_of_family->save()) {
|
||||
$insurance_member->family_id = $head_of_family->id;
|
||||
$insurance_member->is_family_head = 1;
|
||||
$insurance_member->update();
|
||||
|
||||
//update all members related to the previous family head
|
||||
$attached_insurance_members = InsuranceMember::where(['family_id' => $current_head])->get();
|
||||
if (count($attached_insurance_members)) {
|
||||
foreach ($attached_insurance_members as $attached_member) {
|
||||
$attached_member->family_id = $head_of_family->id;
|
||||
$attached_member->is_family_head = ($attached_member->id == $member_id) ? 1 : 0;
|
||||
$attached_member->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flash(get_full_name($insurance_member->patient_id, "id", "first_name", "last_name", "patients").' has been made the head from the family of '.get_full_name($family_head_patient_id, "id", "first_name", "last_name", "patients"))->success();
|
||||
} else{
|
||||
flash('Family member could not be found')->error();
|
||||
}
|
||||
return redirect('heads_of_family');
|
||||
}
|
||||
|
||||
public function search_family_head_by_name_number(Request $request)
|
||||
{
|
||||
$data = [];
|
||||
|
||||
if ($request->has('q')) {
|
||||
$search = $request->q;
|
||||
$data = HeadOfFamily::leftJoin('patients', 'insurance_heads_of_family.patient_id', '=', 'patients.id')
|
||||
->select("patients.id", "first_name", "last_name", "number", "phone")
|
||||
->where('name', 'LIKE', "%$search%")
|
||||
->orWhere('number', 'LIKE', "%$search%")
|
||||
->get();
|
||||
}
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
}
|
||||
+679
@@ -0,0 +1,679 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Streamline\Models\CommunityHealthInsurancePlan;
|
||||
use Streamline\Models\Drug;
|
||||
use Streamline\Models\InpatientBedCategory;
|
||||
use Streamline\Models\InsuranceBenefit;
|
||||
use Streamline\Models\InsuranceBenefitItem;
|
||||
use Streamline\Models\InsuranceInpatientAccommodationRates;
|
||||
use Streamline\Models\Investigation;
|
||||
use Streamline\Models\Procedure;
|
||||
use Streamline\Models\Services;
|
||||
use Streamline\Models\Sundry;
|
||||
use Streamline\Models\Ward;
|
||||
|
||||
class InsuranceBenefitController extends Controller {
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
$insurance_benefits = InsuranceBenefit::get();
|
||||
$insurance_plans = CommunityHealthInsurancePlan::pluck('name', 'id')->toArray();
|
||||
|
||||
return view('insurance::insurance_benefits.index', compact('insurance_benefits', 'insurance_plans'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
*/
|
||||
public function create() {
|
||||
$insurance_plans = CommunityHealthInsurancePlan::pluck('name', 'id')->toArray();
|
||||
$insurance_plans = ['' => '--select--'] + $insurance_plans;
|
||||
|
||||
$wards = Ward::where('available', 1)->pluck('name', 'id')->prepend('All Wards', '0');
|
||||
|
||||
return view('insurance::insurance_benefits.create', compact('insurance_plans', 'wards'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'waiting_period' => 'required',
|
||||
'annual_member_limit' => 'required',
|
||||
'annual_family_limit' => 'required',
|
||||
'fee' => 'required',
|
||||
'plan_id' => 'required',
|
||||
]);
|
||||
|
||||
//validation passed
|
||||
$benefit = new InsuranceBenefit();
|
||||
$benefit->name = $request->name;
|
||||
$benefit->waiting_period = $request->waiting_period;
|
||||
$benefit->plan_id = $request->plan_id;
|
||||
$benefit->fee = $request->fee;
|
||||
$benefit->annual_member_limit = $request->annual_member_limit;
|
||||
$benefit->annual_family_limit = $request->annual_family_limit;
|
||||
$benefit->opd_percentage = $request->opd_percentage ?? NULL;
|
||||
$benefit->ipd_percentage = $request->ipd_percentage ?? NULL;
|
||||
$benefit->wards = $request->ward_id ? implode(",", $request->ward_id) : "0";
|
||||
$benefit->created_by = Auth::id();
|
||||
|
||||
try {
|
||||
$benefit->save();
|
||||
flash("Insurance Benefit has been created")->success();
|
||||
return redirect("/insurance_benefits/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
*/
|
||||
public function edit($id) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
$insurance_plans = CommunityHealthInsurancePlan::pluck('name', 'id')->toArray();
|
||||
$insurance_plans = ['' => '--select--'] + $insurance_plans;
|
||||
|
||||
$wards = Ward::where('available', 1)->pluck('name', 'id')->prepend('All Wards', '0');
|
||||
|
||||
return view('insurance::insurance_benefits.edit', compact('benefit', 'insurance_plans', 'wards'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'waiting_period' => 'required',
|
||||
'annual_member_limit' => 'required',
|
||||
'annual_family_limit' => 'required',
|
||||
'fee' => 'required',
|
||||
'plan_id' => 'required',
|
||||
]);
|
||||
|
||||
//validation passed
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
$benefit->name = $request->name;
|
||||
$benefit->waiting_period = $request->waiting_period;
|
||||
$benefit->plan_id = $request->plan_id;
|
||||
$benefit->fee = $request->fee;
|
||||
$benefit->annual_member_limit = $request->annual_member_limit;
|
||||
$benefit->annual_family_limit = $request->annual_family_limit;
|
||||
$benefit->opd_percentage = $request->opd_percentage ?? NULL;
|
||||
$benefit->ipd_percentage = $request->ipd_percentage ?? NULL;
|
||||
$benefit->wards = $request->ward_id ? implode(",", $request->ward_id) : "0";
|
||||
$benefit->updated_by = Auth::id();
|
||||
|
||||
try {
|
||||
$benefit->save();
|
||||
flash("Insurance Benefit has been updated")->success();
|
||||
return redirect("/insurance_benefits/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
try {
|
||||
$benefit->delete();
|
||||
|
||||
// remove the benefit items as well
|
||||
InsuranceBenefitItem::where('benefit_id', $id)->delete();
|
||||
|
||||
flash("Insurance Benefit has been deactivated")->success();
|
||||
return redirect("/insurance_benefits/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
*/
|
||||
public function inactive() {
|
||||
$insurance_benefits = InsuranceBenefit::onlyTrashed()->get();
|
||||
|
||||
$insurance_plans = CommunityHealthInsurancePlan::pluck('name', 'id')->toArray();
|
||||
$insurance_plans = ['' => '--select--'] + $insurance_plans;
|
||||
|
||||
return view('insurance::insurance_benefits.inactive', compact('insurance_benefits', 'insurance_plans'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function activate($id) {
|
||||
$benefit = InsuranceBenefit::withTrashed()->find($id);
|
||||
|
||||
try {
|
||||
$benefit->restore();
|
||||
|
||||
// restore the benefit items as well
|
||||
InsuranceBenefitItem::where('benefit_id', $id)->restore();
|
||||
|
||||
flash("Insurance Benefit has been restored")->success();
|
||||
return redirect("/insurance_benefits/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function details($id) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
$drugs = DB::table('drugs')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->pluck('name', 'id');
|
||||
$services = DB::table('services')->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$sundries = DB::table('sundries')->pluck('name', 'id');
|
||||
$bed_categories = DB::table('inpatient_bed_categories')->pluck('name', 'id');
|
||||
$benefit_drugs = DB::table('insurance_benefit_items')->where('item_type', 4)
|
||||
->where('benefit_id', $id)->get();
|
||||
$benefit_sundries = DB::table('insurance_benefit_items')->where('item_type', 5)
|
||||
->where('benefit_id', $id)->get();
|
||||
$benefit_invs = DB::table('insurance_benefit_items')->where('item_type', 3)
|
||||
->where('benefit_id', $id)->get();
|
||||
$benefit_procedures = DB::table('insurance_benefit_items')->where('item_type', 2)
|
||||
->where('benefit_id', $id)->get();
|
||||
$benefit_services = DB::table('insurance_benefit_items')->where('item_type', 1)
|
||||
->where('benefit_id', $id)->get();
|
||||
$benefit_bed_categories = InsuranceInpatientAccommodationRates::where('benefit_id', $id)->limit(5)->get();
|
||||
|
||||
return view('insurance::insurance_benefits.details', compact('benefit', 'drugs', 'procedures', 'services', 'investigations',
|
||||
'sundries', 'benefit_drugs', 'benefit_sundries', 'benefit_invs', 'benefit_procedures', 'benefit_services', 'benefit_bed_categories', 'bed_categories'));
|
||||
}
|
||||
|
||||
public function add_items($id, $item_type, Request $request) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
$insurance_benefit_item = DB::table('insurance_benefit_items')->where('benefit_id', $id)
|
||||
->where('item_type', $item_type)->first();
|
||||
$exclude_ids = $insurance_benefit_item ? explode(",", $insurance_benefit_item->item_id) : [];
|
||||
$selected_ids = $request->items_ids ?? [];
|
||||
$table_name = "";
|
||||
|
||||
if ($item_type == 1) {
|
||||
$table_name = 'services';
|
||||
} elseif ($item_type == 2) {
|
||||
$table_name = 'procedures';
|
||||
} elseif ($item_type == 3) {
|
||||
$table_name = 'investigations';
|
||||
} elseif ($item_type == 4) {
|
||||
$table_name = 'drugs';
|
||||
} elseif ($item_type == 5) {
|
||||
$table_name = 'sundries';
|
||||
}
|
||||
|
||||
if ($table_name != "") {
|
||||
$items = DB::table($table_name)->where('available', 1)->whereNotIn('id', $exclude_ids)->whereNull('deleted_at')->pluck('name', 'id');
|
||||
|
||||
if ($request->submit == "select_all_items") {
|
||||
$selected_items = DB::table($table_name)->where('available', 1)->whereNotIn('id', $exclude_ids)->whereNull('deleted_at')->get(['name', 'id', 'non_insured_price']);
|
||||
} else {
|
||||
$selected_items = DB::table($table_name)->where('available', 1)->whereIn('id', $selected_ids)->whereNull('deleted_at')->get(['name', 'id', 'non_insured_price']);
|
||||
}
|
||||
} else {
|
||||
$selected_items = [];
|
||||
$items = [];
|
||||
}
|
||||
|
||||
return view('insurance::insurance_benefits.add_items', compact('items', 'benefit', 'item_type', 'selected_items'));
|
||||
}
|
||||
|
||||
public function save_items(Request $request) {
|
||||
if (!is_array($request->item_id) || count($request->item_id) < 1) {
|
||||
flash("Please select items before continuing")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
|
||||
$benefit_id = $request->benefit_id;
|
||||
$item_type = $request->item_type;
|
||||
$items = $request->item_id;
|
||||
$co_payment = $request->co_payment;
|
||||
$ipd_co_payment = $request->ipd_co_payment;
|
||||
$capitation_fee = $request->capitation_fee;
|
||||
$annual_member_limit = $request->annual_member_limit;
|
||||
$annual_family_limit = $request->annual_family_limit;
|
||||
$authorisation = $request->authorisation;
|
||||
$apply_opd_percentage = $request->apply_opd_percentage ?? [];
|
||||
$apply_ipd_percentage = $request->apply_ipd_percentage ?? [];
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
// check if procedures for this benefit already exist
|
||||
$insurance_benefit_item = DB::table('insurance_benefit_items')->where('benefit_id', $benefit_id)
|
||||
->where('item_type', $item_type)->first();
|
||||
|
||||
if ($insurance_benefit_item) {
|
||||
$insurance_benefit_item_arr = explode(",", $insurance_benefit_item->item_id);
|
||||
$insurance_benefit_item_arr = array_merge($insurance_benefit_item_arr, $items);
|
||||
|
||||
$insurance_benefit_item = InsuranceBenefitItem::find($insurance_benefit_item->id);
|
||||
$insurance_benefit_item->item_id = implode(",", $insurance_benefit_item_arr);
|
||||
$insurance_benefit_item->updated_by = Auth::id();
|
||||
} else {
|
||||
$insurance_benefit_item = new InsuranceBenefitItem();
|
||||
$insurance_benefit_item->plan_id = get_name($benefit_id, 'id', 'plan_id', 'insurance_benefits');
|
||||
$insurance_benefit_item->benefit_id = $benefit_id;
|
||||
$insurance_benefit_item->item_type = $item_type;
|
||||
$insurance_benefit_item->item_id = implode(",", $items);
|
||||
$insurance_benefit_item->created_by = Auth::id();
|
||||
}
|
||||
|
||||
try {
|
||||
$insurance_benefit_item->save();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
flash("An error occurred. Please try again or contact Stre@mline Support")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
|
||||
for ($i = 0; $i < count($items); $i++) {
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$item = Services::find($items[$i]);
|
||||
break;
|
||||
case 2:
|
||||
$item = Procedure::find($items[$i]);
|
||||
break;
|
||||
case 3:
|
||||
$item = Investigation::find($items[$i]);
|
||||
break;
|
||||
case 4:
|
||||
$item = Drug::find($items[$i]);
|
||||
break;
|
||||
case 5:
|
||||
$item = Sundry::find($items[$i]);
|
||||
break;
|
||||
default:
|
||||
$item = false;
|
||||
}
|
||||
|
||||
if ($item) {
|
||||
$json_array = [$benefit_id => [
|
||||
"co_payment" => $co_payment[$i],
|
||||
"ipd_co_payment" => $ipd_co_payment[$i],
|
||||
"capitation_fee" => $capitation_fee[$i],
|
||||
"annual_member_limit" => $annual_member_limit[$i],
|
||||
"annual_family_limit" => $annual_family_limit[$i],
|
||||
"authorisation" => $authorisation[$i],
|
||||
"apply_opd_percentage" => (in_array($items[$i], $apply_opd_percentage) ? 1 : 0),
|
||||
"apply_ipd_percentage" => (in_array($items[$i], $apply_ipd_percentage) ? 1 : 0),
|
||||
]];
|
||||
|
||||
$insurance_benefit_details = json_decode($item->insurance_benefit_details, true) ?? [];
|
||||
$insurance_benefit_details = $insurance_benefit_details + $json_array;
|
||||
|
||||
$item->insurance_benefit_details = json_encode($insurance_benefit_details);
|
||||
|
||||
try {
|
||||
$item->save();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
flash("An error occurred. Please try again or contact Stre@mline Support")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
flash("Items have been added to the benefit")->success();
|
||||
|
||||
return redirect('/insurance_benefits/details/' . $benefit_id);
|
||||
}
|
||||
|
||||
public function view_items($id, $item_type) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$items = DB::table('services')->pluck('name', 'id');
|
||||
break;
|
||||
case 2:
|
||||
$items = DB::table('procedures')->pluck('name', 'id');
|
||||
break;
|
||||
case 3:
|
||||
$items = DB::table('investigations')->pluck('name', 'id');
|
||||
break;
|
||||
case 4:
|
||||
$items = DB::table('drugs')->pluck('name', 'id');
|
||||
break;
|
||||
case 5:
|
||||
$items = DB::table('sundries')->pluck('name', 'id');
|
||||
break;
|
||||
default:
|
||||
$items = [];
|
||||
break;
|
||||
}
|
||||
|
||||
$benefit_items = DB::table('insurance_benefit_items')->where('item_type', $item_type)
|
||||
->where('benefit_id', $id)->get();
|
||||
|
||||
return view('insurance::insurance_benefits.view_items', compact('items', 'benefit_items', 'benefit', 'item_type'));
|
||||
}
|
||||
|
||||
public function remove_item($item_id, $item_type, $benefit_id) {
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$item = Services::find($item_id);
|
||||
break;
|
||||
case 2:
|
||||
$item = Procedure::find($item_id);
|
||||
break;
|
||||
case 3:
|
||||
$item = Investigation::find($item_id);
|
||||
break;
|
||||
case 4:
|
||||
$item = Drug::find($item_id);
|
||||
break;
|
||||
case 5:
|
||||
$item = Sundry::find($item_id);
|
||||
break;
|
||||
default:
|
||||
$item = false;
|
||||
}
|
||||
|
||||
if ($item) {
|
||||
$insurance_benefit_details = json_decode($item->insurance_benefit_details, true);
|
||||
|
||||
if (isset($insurance_benefit_details[$benefit_id])) {
|
||||
unset($insurance_benefit_details[$benefit_id]);
|
||||
|
||||
$item->insurance_benefit_details = json_encode($insurance_benefit_details);
|
||||
|
||||
$benefit_items = DB::table('insurance_benefit_items')->where('item_type', $item_type)
|
||||
->where('benefit_id', $benefit_id)->first();
|
||||
$benefit_items_array = explode(",", $benefit_items->item_id);
|
||||
$benefit_items_array = array_diff($benefit_items_array, [$item_id]);
|
||||
|
||||
$insurance_benefit_item = InsuranceBenefitItem::find($benefit_items->id);
|
||||
$insurance_benefit_item->item_id = implode(",", $benefit_items_array);
|
||||
$insurance_benefit_item->updated_by = Auth::id();
|
||||
|
||||
try {
|
||||
$item->save();
|
||||
$insurance_benefit_item->save();
|
||||
|
||||
// find any tariffs and remove them as well
|
||||
DB::table('insurance_tariffs')->where('item_id', $item_id)
|
||||
->where('item_type', $item_type)->where('benefit_id', $benefit_id)->update(['deleted_at' => Carbon::now()]);
|
||||
|
||||
flash("Item has been removed from the benefit")->success();
|
||||
} catch (\Exception $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
}
|
||||
} else {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
}
|
||||
} else {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
}
|
||||
|
||||
return redirect('/insurance_benefits/view_items/' . $benefit_id . '/' . $item_type);
|
||||
}
|
||||
|
||||
public function edit_items($id, $item_type) {
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$items = DB::table('services')->pluck('name', 'id');
|
||||
break;
|
||||
case 2:
|
||||
$items = DB::table('procedures')->pluck('name', 'id');
|
||||
break;
|
||||
case 3:
|
||||
$items = DB::table('investigations')->pluck('name', 'id');
|
||||
break;
|
||||
case 4:
|
||||
$items = DB::table('drugs')->pluck('name', 'id');
|
||||
break;
|
||||
case 5:
|
||||
$items = DB::table('sundries')->where('available', 1)->pluck('name', 'id');
|
||||
break;
|
||||
default:
|
||||
$items = [];
|
||||
break;
|
||||
}
|
||||
|
||||
$benefit_items = DB::table('insurance_benefit_items')->where('item_type', $item_type)
|
||||
->where('benefit_id', $id)->get();
|
||||
|
||||
return view('insurance::insurance_benefits.edit_items', compact('items', 'benefit_items', 'benefit', 'item_type'));
|
||||
}
|
||||
|
||||
public function update_items(Request $request) {
|
||||
$benefit_id = $request->benefit_id;
|
||||
$item_type = $request->item_type;
|
||||
$items = $request->item_id;
|
||||
$co_payment = $request->co_payment;
|
||||
$ipd_co_payment = $request->ipd_co_payment;
|
||||
$capitation_fee = $request->capitation_fee;
|
||||
$annual_member_limit = $request->annual_member_limit;
|
||||
$annual_family_limit = $request->annual_family_limit;
|
||||
$authorisation = $request->authorisation;
|
||||
$apply_opd_percentage = $request->apply_opd_percentage ?? [];
|
||||
$apply_ipd_percentage = $request->apply_ipd_percentage ?? [];
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
for ($i = 0; $i < count($items); $i++) {
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$item = Services::find($items[$i]);
|
||||
break;
|
||||
case 2:
|
||||
$item = Procedure::find($items[$i]);
|
||||
break;
|
||||
case 3:
|
||||
$item = Investigation::find($items[$i]);
|
||||
break;
|
||||
case 4:
|
||||
$item = Drug::find($items[$i]);
|
||||
break;
|
||||
case 5:
|
||||
$item = Sundry::find($items[$i]);
|
||||
break;
|
||||
default:
|
||||
$item = false;
|
||||
}
|
||||
|
||||
if ($item) {
|
||||
$json_array = [
|
||||
"ipd_co_payment" => $ipd_co_payment[$i],
|
||||
"co_payment" => $co_payment[$i],
|
||||
"capitation_fee" => $capitation_fee[$i],
|
||||
"annual_member_limit" => $annual_member_limit[$i],
|
||||
"annual_family_limit" => $annual_family_limit[$i],
|
||||
"authorisation" => $authorisation[$i],
|
||||
"apply_opd_percentage" => (in_array($items[$i], $apply_opd_percentage) ? 1 : 0),
|
||||
"apply_ipd_percentage" => (in_array($items[$i], $apply_ipd_percentage) ? 1 : 0),
|
||||
];
|
||||
|
||||
$insurance_benefit_details = json_decode($item->insurance_benefit_details, true);
|
||||
$insurance_benefit_details[$benefit_id] = $json_array;
|
||||
$item->insurance_benefit_details = json_encode($insurance_benefit_details);
|
||||
|
||||
try {
|
||||
$item->save();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
flash("An error occurred. Please try again or contact Stre@mline Support")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
flash("Benefit items have been updated")->success();
|
||||
|
||||
return redirect('/insurance_benefits/details/' . $benefit_id);
|
||||
}
|
||||
|
||||
public function add_inpatient_accommodation($id, Request $request) {
|
||||
$bed_categories = InpatientBedCategory::pluck('name', 'id')->toArray();
|
||||
$bed_categories = $bed_categories + ['' => '--select--'];
|
||||
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
if ($request->bed_category) {
|
||||
$selected_bed_category = InpatientBedCategory::find($request->bed_category);
|
||||
} else {
|
||||
$selected_bed_category = false;
|
||||
}
|
||||
|
||||
return view('insurance::insurance_benefits.add_inpatient_accommodation', compact('bed_categories', 'benefit', 'id',
|
||||
'selected_bed_category'));
|
||||
}
|
||||
|
||||
public function save_inpatient_accommodation(Request $request) {
|
||||
$accommodation = new InsuranceInpatientAccommodationRates();
|
||||
|
||||
$accommodation->bed_category_id = $request->bed_category_id;
|
||||
$accommodation->benefit_id = $request->benefit_id;
|
||||
$accommodation->plan_id = $request->plan_id;
|
||||
$accommodation->cost_type = $request->cost_type;
|
||||
|
||||
$accommodation->cost_per_night = $request->cost_per_night;
|
||||
$accommodation->chi_cost_per_night = $request->chi_cost_per_night;
|
||||
$accommodation->cost_first_night = $request->cost_first_night;
|
||||
$accommodation->chi_cost_first_night = $request->chi_cost_first_night;
|
||||
$accommodation->cost_range = $request->cost_range;
|
||||
$accommodation->chi_cost_range = $request->chi_cost_range;
|
||||
$accommodation->cost_after = $request->cost_after;
|
||||
$accommodation->chi_cost_after = $request->chi_cost_after;
|
||||
|
||||
$accommodation->annual_member_limit = $request->annual_member_limit;
|
||||
$accommodation->annual_family_limit = $request->annual_family_limit;
|
||||
$accommodation->gender = $request->gender;
|
||||
$accommodation->age_limit = $request->age_limit_start . ',' . $request->age_limit_end;
|
||||
$accommodation->age_type = $request->age_type;
|
||||
$accommodation->authorisation_required = $request->authorisation;
|
||||
$accommodation->created_by = Auth::id();
|
||||
|
||||
try {
|
||||
$accommodation->save();
|
||||
flash("Accommodation has been added to benefit")->success();
|
||||
return redirect('/insurance_benefits/details/' . $request->benefit_id);
|
||||
} catch (\Exception $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function view_inpatient_accommodation($id) {
|
||||
$bed_categories = DB::table('inpatient_bed_categories')->where('available', 1)->pluck('name', 'id');
|
||||
$rates = InsuranceInpatientAccommodationRates::where('benefit_id', $id)->get();
|
||||
$benefit = InsuranceBenefit::find($id);
|
||||
|
||||
return view('insurance::insurance_benefits.view_inpatient_accommodation', compact('bed_categories', 'rates', 'benefit'));
|
||||
}
|
||||
|
||||
public function view_accommodation_details($id) {
|
||||
$rate = InsuranceInpatientAccommodationRates::find($id);
|
||||
|
||||
if ($rate) {
|
||||
$bed_category = InpatientBedCategory::find($rate->bed_category_id);
|
||||
|
||||
if ($bed_category) {
|
||||
$benefit = InsuranceBenefit::find($rate->benefit_id);
|
||||
|
||||
return view('insurance::insurance_benefits.view_accommodation_details', compact('rate', 'bed_category', 'benefit'));
|
||||
}
|
||||
}
|
||||
|
||||
flash('An error occurred!')->error();
|
||||
return redirect('/home');
|
||||
}
|
||||
|
||||
public function edit_inpatient_accommodation($id) {
|
||||
$rate = InsuranceInpatientAccommodationRates::find($id);
|
||||
$bed_category = InpatientBedCategory::find($rate->bed_category_id);
|
||||
$benefit = InsuranceBenefit::find($rate->benefit_id);
|
||||
|
||||
return view('insurance::insurance_benefits.edit_inpatient_accommodation', compact('rate', 'bed_category', 'benefit'));
|
||||
}
|
||||
|
||||
public function update_inpatient_accommodation(Request $request) {
|
||||
$accommodation = InsuranceInpatientAccommodationRates::find($request->rate_id);
|
||||
|
||||
$accommodation->cost_per_night = $request->cost_per_night;
|
||||
$accommodation->chi_cost_per_night = $request->chi_cost_per_night;
|
||||
$accommodation->cost_first_night = $request->cost_first_night;
|
||||
$accommodation->chi_cost_first_night = $request->chi_cost_first_night;
|
||||
$accommodation->cost_range = $request->cost_range;
|
||||
$accommodation->chi_cost_range = $request->chi_cost_range;
|
||||
$accommodation->cost_after = $request->cost_after;
|
||||
$accommodation->chi_cost_after = $request->chi_cost_after;
|
||||
|
||||
$accommodation->annual_member_limit = $request->annual_member_limit;
|
||||
$accommodation->annual_family_limit = $request->annual_family_limit;
|
||||
$accommodation->gender = $request->gender;
|
||||
$accommodation->age_limit = $request->age_limit_start . ',' . $request->age_limit_end;
|
||||
$accommodation->age_type = $request->age_type;
|
||||
$accommodation->authorisation_required = $request->authorisation;
|
||||
$accommodation->updated_by = Auth::id();
|
||||
|
||||
try {
|
||||
$accommodation->save();
|
||||
flash("Accommodation has been updated")->success();
|
||||
return redirect('/insurance_benefits/view_inpatient_accommodation/' . $request->benefit_id);
|
||||
} catch (\Exception $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function delete_inpatient_accommodation($id) {
|
||||
$rate = InsuranceInpatientAccommodationRates::find($id);
|
||||
|
||||
try {
|
||||
$benefit_id = $rate->benefit_id;
|
||||
|
||||
$rate->delete();
|
||||
|
||||
flash("Inpatient Accommodation has been deactivated")->success();
|
||||
return redirect('/insurance_benefits/view_inpatient_accommodation/' . $benefit_id);
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
+515
@@ -0,0 +1,515 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Streamline\Models\InsuranceClaim;
|
||||
|
||||
class InsuranceClaimsController extends Controller {
|
||||
|
||||
public function view_incoming_authorisations(Request $request) {
|
||||
$search_text = "";
|
||||
|
||||
// if patient id is active, get all records regardless of date; else search by date
|
||||
if (isset($request->patient_id) && $request->patient_id != 0) {
|
||||
$search_text .= "Patient: " . get_full_name($request->patient_id, 'id', 'first_name', 'last_name', 'patients');
|
||||
$search_text .= " (" . get_name($request->patient_id, 'id', 'number', 'patients') . ") ";
|
||||
|
||||
$claims = DB::table('insurance_claims')->join('patients', 'patients.id', '=', 'insurance_claims.patient_id')
|
||||
->where('insurance_claims.patient_id', $request->patient_id)
|
||||
->where('insurance_claims.claim_status', 1)
|
||||
->whereNull('insurance_claims.deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('insurance_claims.is_authorisation_required', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.is_item_authorisation_required)');
|
||||
})->groupBy('insurance_claims.patient_id')
|
||||
->select(['insurance_claims.*', 'patients.first_name', 'patients.last_name', 'patients.number', DB::raw('SUM(insurance_claims.primary_plan_claim_total) AS primary_plan_claim_total_sum')])
|
||||
->get();
|
||||
} else {
|
||||
switch ($request->search_date_by){
|
||||
case 'yesterday':
|
||||
$end_date = Carbon::yesterday()->endOfDay();
|
||||
$start_date = Carbon::yesterday()->startOfDay();
|
||||
$search_text .= "Yesterday ";
|
||||
break;
|
||||
case 'custom_date':
|
||||
$end_date = Carbon::parse($request->start_date)->endOfDay();
|
||||
$start_date = Carbon::parse($request->start_date)->startOfDay();
|
||||
$search_text .= "From: " . streamline_date($start_date) . " ";
|
||||
break;
|
||||
case 'custom_date_range':
|
||||
$end_date = Carbon::parse($request->end_date)->endOfDay();
|
||||
$start_date = Carbon::parse($request->start_date)->startOfDay();
|
||||
$search_text .= "From: " . streamline_date($start_date) . " to " . streamline_date($end_date) . " ";
|
||||
break;
|
||||
case 'today':
|
||||
default:
|
||||
$end_date = Carbon::today()->endOfDay();
|
||||
$start_date = Carbon::today()->startOfDay();
|
||||
$search_text .= "Today ";
|
||||
break;
|
||||
}
|
||||
|
||||
$claims = DB::table('insurance_claims')->join('patients', 'patients.id', '=', 'insurance_claims.patient_id')
|
||||
->whereBetween('insurance_claims.created_at', [$start_date, $end_date])
|
||||
->where('insurance_claims.claim_status', 1)
|
||||
->whereNull('insurance_claims.deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('insurance_claims.is_authorisation_required', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.is_item_authorisation_required)');
|
||||
})->groupBy('insurance_claims.patient_id')
|
||||
->select(['insurance_claims.*', 'patients.first_name', 'patients.last_name', 'patients.number', DB::raw('SUM(insurance_claims.primary_plan_claim_total) AS primary_plan_claim_total_sum')])
|
||||
->get();
|
||||
}
|
||||
|
||||
$insurance_plans = DB::table('community_health_insurance_plans')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_claims.view_incoming_authorisations', compact('claims', 'insurance_plans', 'search_text'));
|
||||
}
|
||||
|
||||
public function view_incoming_authorisation_details($id) {
|
||||
$claims = DB::table('insurance_claims')->where('patient_id', $id)
|
||||
->where('claim_status', 1)
|
||||
->whereNull('deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('is_authorisation_required', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,is_item_authorisation_required)');
|
||||
})
|
||||
->get();
|
||||
|
||||
$patient_details = DB::table('patients')->join('insurance_members', 'patients.id', '=', 'insurance_members.patient_id')
|
||||
->where('patients.id', $id)
|
||||
->select(['patients.*', 'insurance_members.group_id', 'insurance_members.photo as insurance_photo', 'insurance_members.family_id',
|
||||
'insurance_members.membership_start_date', 'insurance_members.member_account_number', 'insurance_members.is_family_head'])
|
||||
->first();
|
||||
|
||||
$insurance_plans = DB::table('community_health_insurance_plans')->pluck('name', 'id');
|
||||
|
||||
$benefits = DB::table('insurance_benefits')->pluck('name', 'id');
|
||||
$tariffs = DB::table('insurance_tariffs')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_claims.view_incoming_authorisation_details', compact('claims', 'tariffs', 'insurance_plans', 'benefits', 'patient_details'));
|
||||
}
|
||||
|
||||
public function authorise_item($id, $position): int {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
|
||||
if (isset($authorisations[$position])) {
|
||||
$authorisations[$position] = 0;
|
||||
$json_array = ["authorised_by" => Auth::id(), "position" => $position, "timestamp" => date('Y-m-d H:i:s')];
|
||||
|
||||
$claim->is_item_authorisation_required = implode(",", $authorisations);
|
||||
|
||||
$item_authorisation_details = json_decode($claim->item_authorisation_details, true) ?? [];
|
||||
$item_authorisation_details = $item_authorisation_details + $json_array;
|
||||
|
||||
$claim->item_authorisation_details = json_encode($item_authorisation_details);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
return 1;
|
||||
} catch (\ErrorException $exception) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public function authorise_claim($id) {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$claim->is_authorisation_required = 0;
|
||||
$claim->authorised_by = Auth::id();
|
||||
$claim->authorised_at = Carbon::now();
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
flash("Claim has been authorised successfully")->success();
|
||||
} catch (\ErrorException $exception) {
|
||||
flash("An error occurred. Claim has not been authorised")->error();
|
||||
}
|
||||
|
||||
return redirect('/insurance_claims/view_incoming_authorisation_details/' . $claim->patient_id);
|
||||
} else {
|
||||
flash("An error occurred. Claim has not been authorised")->error();
|
||||
|
||||
return redirect('/insurance_claims/view_incoming_authorisations');
|
||||
}
|
||||
}
|
||||
|
||||
public function authorise_all_claims(Request $request) {
|
||||
$claim_ids = explode(",", $request->claim_ids);
|
||||
|
||||
foreach ($claim_ids as $id) {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$claim->is_authorisation_required = 0;
|
||||
$claim->authorised_by = Auth::id();
|
||||
$claim->authorised_at = Carbon::now();
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
} catch (\ErrorException $exception) {}
|
||||
}
|
||||
}
|
||||
|
||||
flash("Claim has been authorised successfully")->success();
|
||||
|
||||
return redirect('/insurance_claims/view_incoming_authorisations');
|
||||
}
|
||||
|
||||
public function incoming_claim_adjudication_errors(Request $request) {
|
||||
$search_text = "";
|
||||
|
||||
// if patient id is active, get all records regardless of date; else search by date
|
||||
if (isset($request->patient_id) && $request->patient_id != 0) {
|
||||
$search_text .= "Patient: " . get_full_name($request->patient_id, 'id', 'first_name', 'last_name', 'patients');
|
||||
$search_text .= " (" . get_name($request->patient_id, 'id', 'number', 'patients') . ") ";
|
||||
|
||||
$claims = DB::table('insurance_claims')->join('patients', 'patients.id', '=', 'insurance_claims.patient_id')
|
||||
->where('insurance_claims.patient_id', $request->patient_id)
|
||||
->where('insurance_claims.claim_status', 1)
|
||||
->whereNull('insurance_claims.deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('insurance_claims.plan_validity_error', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_waiting_period_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.plan_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.item_limit_error)');
|
||||
})->groupBy('insurance_claims.patient_id')
|
||||
->select(['insurance_claims.*', 'patients.first_name', 'patients.last_name', 'patients.number', DB::raw('SUM(insurance_claims.primary_plan_claim_total) AS primary_plan_claim_total_sum')])
|
||||
->get();
|
||||
} else {
|
||||
switch ($request->search_date_by){
|
||||
case 'yesterday':
|
||||
$end_date = Carbon::yesterday()->endOfDay();
|
||||
$start_date = Carbon::yesterday()->startOfDay();
|
||||
$search_text .= "Yesterday ";
|
||||
break;
|
||||
case 'custom_date':
|
||||
$end_date = Carbon::parse($request->start_date)->endOfDay();
|
||||
$start_date = Carbon::parse($request->start_date)->startOfDay();
|
||||
$search_text .= "From: " . streamline_date($start_date) . " ";
|
||||
break;
|
||||
case 'custom_date_range':
|
||||
$end_date = Carbon::parse($request->end_date)->endOfDay();
|
||||
$start_date = Carbon::parse($request->start_date)->startOfDay();
|
||||
$search_text .= "From: " . streamline_date($start_date) . " to " . streamline_date($end_date) . " ";
|
||||
break;
|
||||
case 'today':
|
||||
default:
|
||||
$end_date = Carbon::today()->endOfDay();
|
||||
$start_date = Carbon::today()->startOfDay();
|
||||
$search_text .= "Today ";
|
||||
break;
|
||||
}
|
||||
|
||||
$claims = DB::table('insurance_claims')->join('patients', 'patients.id', '=', 'insurance_claims.patient_id')
|
||||
->whereBetween('insurance_claims.created_at', [$start_date, $end_date])
|
||||
->where('insurance_claims.claim_status', 1)
|
||||
->whereNull('insurance_claims.deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('insurance_claims.plan_validity_error', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_waiting_period_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.plan_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.item_limit_error)');
|
||||
})->groupBy('insurance_claims.patient_id')
|
||||
->select(['insurance_claims.*', 'patients.first_name', 'patients.last_name', 'patients.number', DB::raw('SUM(insurance_claims.primary_plan_claim_total) AS primary_plan_claim_total_sum')])
|
||||
->get();
|
||||
}
|
||||
|
||||
$insurance_plans = DB::table('community_health_insurance_plans')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_claims.incoming_claim_adjudication_errors', compact('claims', 'insurance_plans', 'search_text'));
|
||||
}
|
||||
|
||||
public function incoming_claim_adjudication_errors_details($id) {
|
||||
$claims = DB::table('insurance_claims')->where('patient_id', $id)
|
||||
->where('claim_status', 1)
|
||||
->whereNull('deleted_at')
|
||||
->where(function($query) {
|
||||
$query->where('insurance_claims.plan_validity_error', 1)
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_waiting_period_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.plan_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.benefit_limit_error)')
|
||||
->orWhereRaw('FIND_IN_SET(1,insurance_claims.item_limit_error)');
|
||||
})
|
||||
->get();
|
||||
|
||||
$patient_details = DB::table('patients')->join('insurance_members', 'patients.id', '=', 'insurance_members.patient_id')
|
||||
->where('patients.id', $id)
|
||||
->select(['patients.*', 'insurance_members.group_id', 'insurance_members.photo as insurance_photo', 'insurance_members.family_id',
|
||||
'insurance_members.membership_start_date', 'insurance_members.member_account_number', 'insurance_members.is_family_head', 'insurance_members.chi_plan'])
|
||||
->first();
|
||||
|
||||
$benefits = DB::table('insurance_benefits')->pluck('name', 'id');
|
||||
$tariffs = DB::table('insurance_tariffs')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_claims.incoming_claim_adjudication_errors_details', compact('claims', 'tariffs', 'benefits', 'patient_details'));
|
||||
}
|
||||
|
||||
public function override_plan_validity($id) {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$claim->plan_validity_error = 0;
|
||||
$claim->plan_validity_error_details = json_encode(["overridden_by" => Auth::id(), "timestamp" => date('Y-m-d H:i:s')]);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
flash("Plan validity error has been overridden")->success();
|
||||
} catch (\ErrorException $exception) {
|
||||
flash("An error occurred. Claim error has not been overridden")->error();
|
||||
}
|
||||
|
||||
return redirect('/insurance_claims/incoming_claim_adjudication_errors_details/' . $claim->patient_id);
|
||||
} else {
|
||||
flash("An error occurred. Claim was not found")->error();
|
||||
|
||||
return redirect('/insurance_claims/view_incoming_authorisations');
|
||||
}
|
||||
}
|
||||
|
||||
public function override_benefit_period($id, $position): int {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$benefit_errors = explode(",", $claim->benefit_waiting_period_error);
|
||||
|
||||
if (isset($benefit_errors[$position])) {
|
||||
$benefit_errors[$position] = 0;
|
||||
$json_array = ["overridden_by" => Auth::id(), "position" => $position, "timestamp" => date('Y-m-d H:i:s')];
|
||||
|
||||
$claim->benefit_waiting_period_error = implode(",", $benefit_errors);
|
||||
|
||||
$benefit_errors_details = (json_decode($claim->benefit_waiting_period_error_details, true) ?? []) + $json_array;
|
||||
|
||||
$claim->benefit_waiting_period_error_details = json_encode($benefit_errors_details);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
return 1;
|
||||
} catch (\ErrorException $exception) {}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function override_benefit_limit($id, $position): int {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$benefit_errors = explode(",", $claim->benefit_limit_error);
|
||||
|
||||
if (isset($benefit_errors[$position])) {
|
||||
$benefit_errors[$position] = 0;
|
||||
$json_array = ["overridden_by" => Auth::id(), "position" => $position, "timestamp" => date('Y-m-d H:i:s')];
|
||||
|
||||
$claim->benefit_limit_error = implode(",", $benefit_errors);
|
||||
|
||||
$benefit_errors_details = (json_decode($claim->benefit_limit_error_details, true) ?? []) + $json_array;
|
||||
|
||||
$claim->benefit_limit_error_details = json_encode($benefit_errors_details);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
return 1;
|
||||
} catch (\ErrorException $exception) {}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function override_item_limit($id, $position): int {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$item_errors = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (isset($item_errors[$position])) {
|
||||
$item_errors[$position] = 0;
|
||||
$json_array = ["overridden_by" => Auth::id(), "position" => $position, "timestamp" => date('Y-m-d H:i:s')];
|
||||
|
||||
$claim->item_limit_error = implode(",", $item_errors);
|
||||
|
||||
$item_errors_details = (json_decode($claim->item_limit_error_details, true) ?? []) + $json_array;
|
||||
|
||||
$claim->item_limit_error_details = json_encode($item_errors_details);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
return 1;
|
||||
} catch (\ErrorException $exception) {}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function override_plan_limit($id, $position): int {
|
||||
$claim = InsuranceClaim::find($id);
|
||||
|
||||
if ($claim) {
|
||||
$plan_errors = explode(",", $claim->plan_limit_error);
|
||||
|
||||
if (isset($plan_errors[$position])) {
|
||||
$plan_errors[$position] = 0;
|
||||
$json_array = ["overridden_by" => Auth::id(), "position" => $position, "timestamp" => date('Y-m-d H:i:s')];
|
||||
|
||||
$claim->plan_limit_error = implode(",", $plan_errors);
|
||||
$plan_errors_details = (json_decode($claim->plan_limit_error_details, true) ?? []) + $json_array;
|
||||
$claim->plan_limit_error_details = json_encode($plan_errors_details);
|
||||
|
||||
// check if the claim needs to be cleared
|
||||
if ($claim->adjudication_required == 1) {
|
||||
$item_authorisations = explode(",", $claim->is_item_authorisation_required);
|
||||
$plan_limit_error = explode(",", $claim->plan_limit_error);
|
||||
$benefit_waiting_period_error = explode(",", $claim->benefit_waiting_period_error);
|
||||
$benefit_limit_error = explode(",", $claim->benefit_limit_error);
|
||||
$item_limit_error = explode(",", $claim->item_limit_error);
|
||||
|
||||
if (!(in_array(1, $item_authorisations) || $claim->is_authorisation_required == 1 || $claim->plan_validity_error == 1 ||
|
||||
in_array(1, $benefit_waiting_period_error) || in_array(1, $plan_limit_error) ||
|
||||
in_array(1, $benefit_limit_error) || in_array(1, $item_limit_error))) {
|
||||
$claim->adjudication_required = 2;
|
||||
$claim->claim_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$claim->save();
|
||||
return 1;
|
||||
} catch (\ErrorException $exception) {}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
|
||||
class InsuranceController extends Controller {
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:insurance-home', ['only' => ['index']]);
|
||||
$this->middleware('permission:insurance-product-setup', ['only' => ['product_setup']]);
|
||||
$this->middleware('permission:insurance-scheme-administration', ['only' => ['scheme_administration']]);
|
||||
}
|
||||
|
||||
public function index() {
|
||||
return view('insurance::insurance.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the insurance scheme admin dashboard.
|
||||
*
|
||||
*/
|
||||
public function product_setup(){
|
||||
return view('insurance::insurance.product_setup');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display insurance scheme admin dashboard.
|
||||
*
|
||||
*/
|
||||
public function scheme_administration() {
|
||||
return view('insurance::insurance.scheme_administration');
|
||||
}
|
||||
|
||||
}
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Streamline\Models\Diagnosis;
|
||||
use Streamline\Models\Drug;
|
||||
use Streamline\Models\InsuranceDiseaseGroup;
|
||||
|
||||
class InsuranceDiseaseGroupsController extends Controller {
|
||||
|
||||
public function index() {
|
||||
$groups = InsuranceDiseaseGroup::get();
|
||||
|
||||
return view('insurance::insurance_disease_groups.index', compact('groups'));
|
||||
}
|
||||
|
||||
public function create() {
|
||||
$diagnoses = DB::table('diagnoses')->where('available', 1)->pluck('name', 'id');
|
||||
$drugs = DB::table('drugs')->where('available', 1)->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_disease_groups.create', compact('investigations', 'diagnoses', 'drugs', 'procedures'));
|
||||
}
|
||||
|
||||
public function store(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'diagnoses' => 'required'
|
||||
]);
|
||||
|
||||
$group = new InsuranceDiseaseGroup();
|
||||
|
||||
$group->name = $request->name;
|
||||
$group->diagnoses = implode(",", $request->diagnoses);
|
||||
$group->investigations = $request->investigations ? implode(",", $request->investigations) : '';
|
||||
$group->treatments = $request->drugs ? implode(",", $request->drugs) : '';
|
||||
$group->procedures = $request->procedures ? implode(",", $request->procedures) : '';
|
||||
$group->created_by = Auth::id();
|
||||
|
||||
try {
|
||||
$group->save();
|
||||
flash("Insurance Disease Group has been created")->success();
|
||||
return redirect("/insurance_disease_groups/index");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function edit($id) {
|
||||
$group = InsuranceDiseaseGroup::find($id);
|
||||
|
||||
$diagnoses = DB::table('diagnoses')->where('available', 1)->pluck('name', 'id');
|
||||
$drugs = DB::table('drugs')->where('available', 1)->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_disease_groups.edit', compact('group', 'diagnoses', 'drugs', 'investigations', 'procedures'));
|
||||
}
|
||||
|
||||
public function update(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'diagnoses' => 'required'
|
||||
]);
|
||||
|
||||
$group = InsuranceDiseaseGroup::find($request->id);
|
||||
|
||||
$group->name = $request->name;
|
||||
$group->diagnoses = implode(",", $request->diagnoses);
|
||||
$group->investigations = $request->investigations ? implode(",", $request->investigations) : '';
|
||||
$group->treatments = $request->drugs ? implode(",", $request->drugs) : '';
|
||||
$group->procedures = $request->procedures ? implode(",", $request->procedures) : '';
|
||||
$group->updated_by = Auth::id();
|
||||
|
||||
try {
|
||||
$group->save();
|
||||
flash("Insurance Disease Group has been updated")->success();
|
||||
return redirect("/insurance_disease_groups/index");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
*/
|
||||
public function delete($id) {
|
||||
$group = InsuranceDiseaseGroup::find($id);
|
||||
|
||||
try {
|
||||
$group->delete();
|
||||
flash("Insurance Disease Group has been deactivated")->success();
|
||||
return redirect("/insurance_disease_groups/index");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
*/
|
||||
public function inactive() {
|
||||
$groups = InsuranceDiseaseGroup::onlyTrashed()->get();
|
||||
|
||||
return view('insurance::insurance_disease_groups.inactive', compact('groups'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function restore($id) {
|
||||
$group = InsuranceDiseaseGroup::withTrashed()->find($id);
|
||||
|
||||
try {
|
||||
$group->restore();
|
||||
flash("Insurance Disease Group has been restored")->success();
|
||||
return redirect("/insurance_disease_groups/index");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function details($id) {
|
||||
$group = InsuranceDiseaseGroup::find($id);
|
||||
|
||||
$diagnoses = DB::table('diagnoses')->where('available', 1)->pluck('name', 'id');
|
||||
$drugs = DB::table('drugs')->where('available', 1)->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_disease_groups.details', compact('investigations', 'diagnoses', 'drugs', 'procedures', 'group'));
|
||||
}
|
||||
}
|
||||
+282
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Redirector;
|
||||
use Streamline\Models\InsuranceGroup;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\HeadOfFamily;
|
||||
|
||||
class InsuranceGroupController extends Controller {
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:insurance-group-list');
|
||||
$this->middleware('permission:insurance-group-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:insurance-group-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:insurance-group-delete', ['only' => ['destroy']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index() {
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->paginate(100);
|
||||
$used_groups = DB::table('insurance_members')->whereNull('deleted_at')->distinct('group_id')->pluck('group_id')->toArray();
|
||||
$insurance_groups_select = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->prepend('- Select Group -', '');
|
||||
|
||||
return view('insurance::insurance_groups.index', compact('insurance_groups', 'used_groups', 'insurance_groups_select'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create() {
|
||||
$countries = DB::table('countries')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select country of origin - ', '');
|
||||
$chi_risks = DB::table('community_health_insurance_risks')->whereNull('deleted_at')->pluck('name','id')->prepend('None', '0');
|
||||
|
||||
return view('insurance::insurance_groups.create', compact('countries', 'chi_risks'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'contact_name' => 'required',
|
||||
'contact_number' => 'required'
|
||||
]);
|
||||
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
$insurance_group = new InsuranceGroup;
|
||||
|
||||
$insurance_group->name = $request->name;
|
||||
$insurance_group->contact_name = $request->contact_name;
|
||||
$insurance_group->contact_number = $request->contact_number;
|
||||
$insurance_group->group_email = $request->group_email;
|
||||
$insurance_group->country_id = $request->country_id;
|
||||
$insurance_group->last_fees_billing_date = is_null($request->last_fees_billing_date) ? null : Carbon::createFromFormat('d-m-Y', $request->last_fees_billing_date)->toDateString();
|
||||
$insurance_group->last_fees_payment_date = is_null($request->last_fees_payment_date) ? null : Carbon::createFromFormat('d-m-Y', $request->last_fees_payment_date)->toDateString();
|
||||
$insurance_group->risk_ids = is_null($request->risk_id) ? null : implode(",", $request->risk_id);
|
||||
$insurance_group->created_by = $logged_in_user_id;
|
||||
$insurance_group->updated_by = $logged_in_user_id;
|
||||
|
||||
|
||||
if ($insurance_group->save()):
|
||||
flash($request->name . " Insurance Group has been saved")->success();
|
||||
return redirect("/insurance_groups/");
|
||||
else:
|
||||
flash("There was an error")->error();
|
||||
endif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function edit($id) {
|
||||
$insurance_group = InsuranceGroup::where(['id' => $id])->first();
|
||||
|
||||
if (!$insurance_group) {
|
||||
flash()->error("There is no such insurance group");
|
||||
return redirect('/insurance_groups/');
|
||||
} else {
|
||||
$countries = DB::table('countries')->pluck('name','id')->prepend('- Select country of origin - ', '');
|
||||
$chi_risks = DB::table('community_health_insurance_risks')->whereNull('deleted_at')->pluck('name','id')->prepend('None', '0');
|
||||
return view('insurance::insurance_groups.edit', compact('insurance_group', 'countries', 'chi_risks'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Application|\Illuminate\Foundation\Application|RedirectResponse|Redirector|void
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'contact_name' => 'required',
|
||||
'contact_number' => 'required'
|
||||
]);
|
||||
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
|
||||
$insurance_group = InsuranceGroup::find($id);
|
||||
$insurance_group->name = $request->name;
|
||||
$insurance_group->contact_name = $request->contact_name;
|
||||
$insurance_group->contact_number = $request->contact_number;
|
||||
$insurance_group->group_email = $request->group_email;
|
||||
$insurance_group->country_id = $request->country_id;
|
||||
$insurance_group->last_fees_billing_date = Carbon::createFromFormat('d-m-Y', $request->last_fees_billing_date)->toDateString();
|
||||
$insurance_group->last_fees_payment_date = Carbon::createFromFormat('d-m-Y', $request->last_fees_payment_date)->toDateString();
|
||||
$insurance_group->risk_ids = is_null($request->risk_id) ? null : implode(",", $request->risk_id);
|
||||
$insurance_group->updated_by = $logged_in_user_id;
|
||||
|
||||
if ($insurance_group->save()):
|
||||
flash($request->name . " Insurance Group has been updated")->success();
|
||||
return redirect("/insurance_groups/");
|
||||
else:
|
||||
flash("There was an error")->error();
|
||||
endif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$insurance_group = InsuranceGroup::find($id);
|
||||
|
||||
if ($insurance_group->delete()):
|
||||
flash("Insurance Group has been deleted.")->success();
|
||||
return redirect('/insurance_groups/');
|
||||
endif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
*/
|
||||
public function inactive() {
|
||||
$insurance_groups = InsuranceGroup::onlyTrashed()
|
||||
->orderBy('name', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($insurance_groups) < 1) {
|
||||
flash()->error("There is no inactive insurance group");
|
||||
return redirect('/insurance_groups/');
|
||||
} else {
|
||||
return view('insurance::insurance_groups.inactive', compact('insurance_groups'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Application|\Illuminate\Foundation\Application|Redirector|RedirectResponse|void
|
||||
*/
|
||||
public function activate($id) {
|
||||
$insurance_group = InsuranceGroup::withTrashed()->find($id);
|
||||
|
||||
if ($insurance_group->restore()):
|
||||
flash("Insurance group has been activated.")->success();
|
||||
return redirect('/insurance_groups/');
|
||||
endif;
|
||||
}
|
||||
|
||||
public function insurance_group_details($id) {
|
||||
|
||||
$insurance_members = DB::table('insurance_members')
|
||||
->where('insurance_members.group_id', $id)
|
||||
->join('insurance_heads_of_family', 'insurance_members.family_id', '=', 'insurance_heads_of_family.id')
|
||||
->join('patients', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->select('patients.first_name', 'patients.last_name', 'patients.id', 'patients.number', 'insurance_heads_of_family.name')
|
||||
->orderByDesc('insurance_members.family_id')
|
||||
->get();
|
||||
|
||||
$members_count = DB::table('insurance_members')->where('group_id', $id)->count();
|
||||
|
||||
$result = DB::table('insurance_groups')->select('name')->where('id', $id)->first();
|
||||
$group_name = $result->name;
|
||||
|
||||
// get group subscription status
|
||||
$insurance_subscriptions_details = explode("/", check_insurance_group_status($id));
|
||||
|
||||
$start_date = $insurance_subscriptions_details[1];
|
||||
$end_date = $insurance_subscriptions_details[2];
|
||||
|
||||
if ($insurance_subscriptions_details[0] == 1) {
|
||||
$insurance_status = 'Active';
|
||||
} else {
|
||||
$insurance_status = 'Inactive';
|
||||
}
|
||||
|
||||
return view('insurance::insurance_groups.insurance_group_details', compact('insurance_members', 'members_count', 'group_name', 'start_date', 'end_date', 'insurance_status', 'id'));
|
||||
}
|
||||
|
||||
public function get_families_of_group($group_id)
|
||||
{
|
||||
$group_details = InsuranceGroup::find($group_id);
|
||||
$attached_families = HeadOfFamily::where('group_id', $group_id)->get();
|
||||
$code = '';
|
||||
$code .= '<table class="table success-table table-sm">';
|
||||
$counter = 0;
|
||||
|
||||
$family_members_to_exclude_array = [];
|
||||
$all_member_ids_to_exclude = session()->has("member_ids_to_exclude") ? session()->get("member_ids_to_exclude") : [];
|
||||
$all_family_ids_to_exclude = session()->has("family_ids_to_exclude") ? session()->get("family_ids_to_exclude") : [];
|
||||
|
||||
if (count($attached_families) > 0) {
|
||||
$code .= '<tbody>';
|
||||
$code .= '<tr><th><strong>Family head</strong></th><th><strong>Members with their premiums</strong></th></tr>';
|
||||
foreach ($attached_families as $family) {
|
||||
if (!in_array( $family->id, $all_family_ids_to_exclude)) {
|
||||
$counter++;
|
||||
$family_head_name = $family->name;
|
||||
$family_members_array = explode(",", $family->family_members_ids);
|
||||
$family_premiums_array = explode(",", $family->family_member_premiums);
|
||||
|
||||
$code .= '<tr>';
|
||||
$code .= '<td><span style="color:blue; font-weight: 300">'. $counter.'. '.$family_head_name.'</span><a href="/remove_family_from_group_premium/'.$family->id.'" onclick="return confirm(\'Are you sure?\')" style="color: red"><br>Exclude this family</a></td>';
|
||||
$code .= '<td>';
|
||||
for ($i=0; $i < count($family_members_array); $i++) {
|
||||
if (!in_array($family_members_array[$i], $all_member_ids_to_exclude)) {
|
||||
$member = insurance_flag(get_name($family_members_array[$i], "id", "patient_id", "insurance_members"));
|
||||
$code .= '- '.$member.' ('.ugandan_shillings($family_premiums_array[$i]).') <a href="/remove_member_from_group_premium/'.$family->id.'/'.$family_members_array[$i].'" onclick="return confirm(\'Are you sure?\')" style="color: #bf5656">Exclude member</a><br><br>';
|
||||
} else{
|
||||
$family_members_to_exclude_array[] = $family_members_array[$i];
|
||||
}
|
||||
}
|
||||
$code .= '</td>';
|
||||
$code .= '</tr>';
|
||||
}
|
||||
}
|
||||
$code .= '</tbody>';
|
||||
}
|
||||
|
||||
$code .= '</table>';
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function searchByGroup(Request $request): RedirectResponse
|
||||
{
|
||||
if (is_numeric($request->group_id)) {
|
||||
return redirect('/insurance_groups/insurance_group_details/' . $request->group_id);
|
||||
} else {
|
||||
flash()->error("Invalid group id");
|
||||
return redirect('insurance_groups');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+978
@@ -0,0 +1,978 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Streamline\Models\District;
|
||||
use Streamline\Models\FamilyRelationship;
|
||||
use Streamline\Models\HeadOfFamily;
|
||||
use Streamline\Models\HospitalInformation;
|
||||
use Streamline\Models\InsuranceGroup;
|
||||
use Streamline\Models\InsuranceMember;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\MaritalStatus;
|
||||
use Streamline\Models\Occupation;
|
||||
use Streamline\Models\Patient;
|
||||
use Streamline\Models\PatientCategory;
|
||||
use Streamline\Models\Religion;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Streamline\Models\CommunityHealthInsurancePlan;
|
||||
use Streamline\Models\TrackReceipt;
|
||||
|
||||
class InsuranceMembersController extends Controller {
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('permission:insurance-member-list');
|
||||
$this->middleware('permission:insurance-member-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:insurance-member-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:insurance-member-delete', ['only' => ['destroy']]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
$insurance_family = HeadOfFamily::pluck('name', 'id');
|
||||
|
||||
$insurance_members = InsuranceMember::join('patients', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->select('insurance_members.*', 'patients.number', 'patients.category_id')
|
||||
->paginate(200);
|
||||
|
||||
$total_registered = DB::table('insurance_members')->whereNull('deleted_at')->get()->count();
|
||||
$total_active_insurance = DB::table('insurance_members')->whereNull('deleted_at')
|
||||
->whereRaw("(`current_insurance_end_date` > '" . date('Y-m-d') . "')")
|
||||
->get()->count();
|
||||
|
||||
$total_inactive_insurance = DB::table('insurance_members')->whereNull('deleted_at')
|
||||
->whereRaw("(`current_insurance_end_date` is null or `current_insurance_end_date` <= '" . date('Y-m-d') . "')")
|
||||
->get()->count();
|
||||
|
||||
$insurance_groups_select = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups_select;
|
||||
|
||||
$patient_categories = PatientCategory::pluck('name', 'id');
|
||||
|
||||
$insurance_groups = InsuranceGroup::pluck('name', 'id');
|
||||
|
||||
$relations = FamilyRelationship::pluck('name', 'id');
|
||||
$plans = CommunityHealthInsurancePlan::pluck('name', 'id');
|
||||
|
||||
$full_names = DB::table('patients')->whereNull('deleted_at')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name'))
|
||||
->pluck("full_name");
|
||||
|
||||
return view('insurance::insurance_members.index', compact('insurance_members', 'patient_categories', 'insurance_groups', 'insurance_family', 'total_registered', 'relations', 'insurance_groups_select',
|
||||
'plans', 'total_active_insurance', 'total_inactive_insurance', 'full_names'));
|
||||
}
|
||||
|
||||
public function insurance_card_print_index() {
|
||||
$insurance_family = DB::table('insurance_heads_of_family')->whereNull('deleted_at')
|
||||
->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$insurance_members = [];
|
||||
|
||||
$insurance_groups = DB::table('insurance_groups')->whereNull('deleted_at')
|
||||
->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups;
|
||||
$insurance_family_select = ['' => '- select -'] + $insurance_family;
|
||||
|
||||
$patient_categories = PatientCategory::pluck('name', 'id');
|
||||
|
||||
$relations = FamilyRelationship::pluck('name', 'id');
|
||||
$plans = CommunityHealthInsurancePlan::pluck('name', 'id');
|
||||
|
||||
return view ('insurance::insurance_members.insurance_card_print_index', compact('insurance_members', 'patient_categories', 'insurance_groups', 'insurance_family', 'relations', 'insurance_groups_select','insurance_family_select', 'plans'));
|
||||
}
|
||||
|
||||
public function search(Request $request){
|
||||
$insurance_family = HeadOfFamily::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$total_registered = DB::table('insurance_members')->whereNull('deleted_at')->get()->count();
|
||||
$total_active_insurance = DB::table('insurance_members')->whereNull('deleted_at')
|
||||
->whereRaw("(`current_insurance_end_date` > '" . date('Y-m-d') . "')")
|
||||
->get()->count();
|
||||
|
||||
$total_inactive_insurance = DB::table('insurance_members')->whereNull('deleted_at')
|
||||
->whereRaw("(`current_insurance_end_date` is null or `current_insurance_end_date` <= '" . date('Y-m-d') . "')")
|
||||
->get()->count();
|
||||
|
||||
$patient_categories = PatientCategory::pluck('name', 'id');
|
||||
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups;
|
||||
$insurance_family_select = ['' => '- select -'] + $insurance_family;
|
||||
|
||||
$relations = FamilyRelationship::pluck('name', 'id');
|
||||
$plans = CommunityHealthInsurancePlan::pluck('name', 'id');
|
||||
|
||||
$criteria = '';
|
||||
$filters = [];
|
||||
$full_name_search = $request->full_name;
|
||||
|
||||
if ($full_name_search) {
|
||||
$split_full_name_array = explode(' ', $full_name_search);
|
||||
|
||||
if (is_array($split_full_name_array)) {
|
||||
$first_name_from_split = $split_full_name_array[0] ?? "";
|
||||
$last_name_from_split = $split_full_name_array[1] ?? "";
|
||||
$patient_number_from_split = count($split_full_name_array) > 2 ? array_slice($split_full_name_array, -3)[0] : '';
|
||||
|
||||
//just only use the patient number from the full name submitted
|
||||
if ($patient_number_from_split != "") {
|
||||
$filters[] = ['number', 'LIKE', '%' . $patient_number_from_split . '%'];
|
||||
$criteria .= 'Number (' . $patient_number_from_split . ') ';
|
||||
} else {
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $first_name_from_split . '%'];
|
||||
$filters[] = ['last_name', 'LIKE', '%' . $last_name_from_split . '%'];
|
||||
$criteria .= 'Name (' . $full_name_search . ') ';
|
||||
}
|
||||
} else {
|
||||
//just only use the patient number from the full name submitted
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $full_name_search . '%'];
|
||||
$criteria .= 'Name (' . $full_name_search . ') ';
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->group_id) {
|
||||
$filters[] = ['insurance_members.group_id', '=', $request->group_id];
|
||||
$criteria .= 'Insurance Group ('. ($insurance_groups[$request->group_id] ?? 'N/A') .') ';
|
||||
}
|
||||
if ($request->insurance_family) {
|
||||
$filters[] = ['insurance_members.family_id', '=', $request->insurance_family];
|
||||
$criteria .= 'Family ('. ($insurance_family[$request->insurance_family] ?? 'N/A') .') ';
|
||||
}
|
||||
|
||||
$insurance_members_query = InsuranceMember::query()
|
||||
->join('patients', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->select('insurance_members.*', 'patients.number', 'patients.category_id')
|
||||
->where($filters)->orderBy('id', 'desc');
|
||||
|
||||
if ($request->member_type == 1){
|
||||
$insurance_members_query->where('insurance_members.current_insurance_end_date', '>', date('Y-m-d'));
|
||||
$criteria .= __('insurance_members.members_with_active_insurance') . ' ';
|
||||
} elseif ($request->member_type == 2) {
|
||||
$insurance_members_query->whereRaw("(`insurance_members`.`current_insurance_end_date` is null or `insurance_members`.`current_insurance_end_date` <= '" . date('Y-m-d') . "')");
|
||||
$criteria .= __('insurance_members.members_with_expired_insurance') . ' ';
|
||||
}
|
||||
|
||||
$insurance_members = $insurance_members_query->paginate(200);
|
||||
|
||||
$full_names = DB::table('patients')->whereNull('deleted_at')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name'))
|
||||
->pluck("full_name");
|
||||
|
||||
if(isset($request->is_from_card_print)) {
|
||||
return view('insurance::insurance_members.insurance_card_print_index', compact('insurance_members', 'patient_categories', 'insurance_groups', 'insurance_family', 'total_registered', 'relations', 'criteria', 'insurance_groups_select', 'plans', 'insurance_family_select', 'total_active_insurance', 'total_inactive_insurance'));
|
||||
} else {
|
||||
return view('insurance::insurance_members.index', compact('insurance_members', 'patient_categories', 'insurance_groups', 'insurance_family', 'total_registered', 'relations', 'criteria', 'insurance_groups_select', 'insurance_family_select', 'plans', 'total_active_insurance', 'total_inactive_insurance', 'full_names'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create() {
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$insurance_groups = ['' => '- select -'] + $insurance_groups;
|
||||
|
||||
$families = HeadOfFamily::orderBy('name', 'asc')->pluck('id')->toArray();
|
||||
|
||||
$relations = FamilyRelationship::orderBy('id', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$relations = ['' => '- select -'] + $relations;
|
||||
|
||||
$occupations = Occupation::orderBy('name')->pluck('name', 'id')->toArray();
|
||||
$patient_categories = PatientCategory::where('available', 1)->orderby('name')->pluck('name', 'id')->toArray();
|
||||
$districts = District::orderBy('name')->pluck('name', 'id')->toArray();
|
||||
$marital_statuses = MaritalStatus::pluck('name', 'id')->toArray();
|
||||
$religions = Religion::orderBy('name')->pluck('name', 'id')->toArray();
|
||||
$relationships = FamilyRelationship::orderBy('name')->pluck('name', 'id')->toArray();
|
||||
|
||||
$occupations = ['' => '- select -'] + $occupations;
|
||||
$districts = ['' => '- select -'] + $districts;
|
||||
$religions = ['' => '- select -'] + $religions;
|
||||
$relationships = ['' => '- select -'] + $relationships;
|
||||
$countries = DB::table('countries')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select country of origin - ', '');
|
||||
$hospital_information = HospitalInformation::first();
|
||||
$dynamic_counties = [];//DB::table('counties')->pluck('name','id')->prepend('- Select County - ', '');
|
||||
$dynamic_sub_counties = [];//DB::table('subcounties')->pluck('name','id')->prepend('- Select Sub County - ', '');
|
||||
$dynamic_parishes = []; //DB::table('parishes')->pluck('name','id')->prepend('- Select Parish - ', '');
|
||||
$person_titles = DB::table('person_titles')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Title - ', '');
|
||||
$chi_plans = DB::table('community_health_insurance_plans')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Plan - ', '');
|
||||
$chi_risks = DB::table('community_health_insurance_risks')->whereNull('deleted_at')->pluck('name','id')->prepend('None', '0');
|
||||
|
||||
return view('insurance::insurance_members.create', compact('insurance_groups', 'families', 'relations', 'dynamic_counties', 'dynamic_parishes', 'dynamic_sub_counties', 'relationships', 'religions', 'occupations', 'districts', 'marital_statuses', 'patient_categories', 'hospital_information', 'countries', 'person_titles', 'chi_plans', 'chi_risks'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
request()->validate([
|
||||
'group_id' => 'required',
|
||||
'first_name' => 'required',
|
||||
'last_name' => 'required',
|
||||
'date_of_birth' => 'required_without:age_in_years',
|
||||
'age_in_years' => 'required_without:date_of_birth',
|
||||
'marital_status' => 'required',
|
||||
'occupation' => 'required',
|
||||
'religion' => 'required',
|
||||
'patient_category' => 'required',
|
||||
'duplicate_research_id' => 'nullable|required_with:research_id|same:research_id|unique:insurance_members,research_id',
|
||||
'research_id' => 'nullable|required_with:duplicate_research_id|same:duplicate_research_id|unique:insurance_members'
|
||||
], [
|
||||
'duplicate_research_id.required_with' => 'Research ID field must be filled.',
|
||||
'duplicate_research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.required_with' => 'Research ID field must be filled.',
|
||||
'research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
'duplicate_research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
]);
|
||||
|
||||
// save the patient
|
||||
$patient = new Patient;
|
||||
$patient->first_name = $request->first_name;
|
||||
$patient->last_name = $request->last_name;
|
||||
$calculated_date_of_birth = null;
|
||||
if (is_null($request->date_of_birth)) {
|
||||
$age_in_years = $request->age_in_years;
|
||||
$calculated_dob = Carbon::now()->subYears($age_in_years);
|
||||
$calculated_date_of_birth = $calculated_dob->toDateString();
|
||||
$patient->date_of_birth = $calculated_date_of_birth;
|
||||
} else {
|
||||
$patient->date_of_birth = Carbon::createFromFormat('d/m/Y', $request->date_of_birth)->toDateString();
|
||||
}
|
||||
|
||||
$patient->marital_status = $request->marital_status;
|
||||
$patient->occupation_id = $request->occupation;
|
||||
$patient->religion_id = $request->religion;
|
||||
$patient->category_id = $request->patient_category;
|
||||
$patient->insurance_status = 1;
|
||||
$patient->citizenship = 1;
|
||||
$patient->country_id = 6; //uganda
|
||||
|
||||
// split the residence values
|
||||
$residence_array = explode(",", $request->residence);
|
||||
$patient->district_id = $residence_array[4] ?? 0;
|
||||
$patient->county_id = $residence_array[3] ?? 0;
|
||||
$patient->subcounty_id = $residence_array[2] ?? 0;
|
||||
$patient->parish_id = $residence_array[1] ?? 0;
|
||||
$patient->village_id = $residence_array[0] ?? 0;
|
||||
|
||||
$patient->gender = $request->gender;
|
||||
$patient->next_of_kin = $request->next_of_kin;
|
||||
$patient->next_of_kin_relationship = $request->next_of_kin_relationship;
|
||||
$patient->phone_of_next_of_kin = removeSpaces($request->next_of_kin_phone);
|
||||
$patient->phone = removeSpaces($request->phone);
|
||||
$patient->national_id = $request->national_id;
|
||||
$patient->phone_owner = $request->phone_owner; // problem
|
||||
$patient->hospital_contact = $request->hospital_contact;
|
||||
$patient->language = $request->language;
|
||||
$patient->lc_one = $request->lc_one;
|
||||
$patient->created_by = Auth::id();
|
||||
|
||||
if ($patient->save()){
|
||||
$prefix = DB::table('hospital_information')->where('id', 1)->value('patient_number_abbr');
|
||||
$new_id = quadLimit($patient->id);
|
||||
$patient_number = $prefix . "-" . $new_id;
|
||||
|
||||
DB::table('patients')->where('id', $new_id)->update(['number' => $patient_number]); // Updating the patient number
|
||||
|
||||
flash('Patient with patient number ' . $patient_number . ' has been successfully registered')->success();
|
||||
|
||||
// add patient to insurance
|
||||
$insurance_member = new InsuranceMember;
|
||||
|
||||
if ($request->hasFile('photo')){
|
||||
$photo = $request->file('photo');
|
||||
$photo_name = $patient->id . "." . $photo->getClientOriginalExtension();
|
||||
$destinationPath = public_path('/uploads/images/insurance_members');
|
||||
$photoPath = $destinationPath . "/" . $photo_name;
|
||||
$photo->move($destinationPath, $photoPath);
|
||||
$insurance_member->photo = $photo_name;
|
||||
} else {
|
||||
$insurance_member->photo = 'placeholder.png';
|
||||
}
|
||||
|
||||
$logged_in_user_id = Auth::id();
|
||||
|
||||
if ($request->is_family_head == 1){
|
||||
$head_of_family = new HeadOfFamily;
|
||||
$head_of_family->name = $request->first_name . " " . $request->last_name;
|
||||
$head_of_family->group_id = $request->group_id;
|
||||
$head_of_family->patient_id = $patient->id;
|
||||
$head_of_family->risk_ids = is_null($request->family_risk_id) ? null : implode(",", $request->family_risk_id);
|
||||
$head_of_family->created_by = $logged_in_user_id;
|
||||
$head_of_family->updated_by = $logged_in_user_id;
|
||||
$head_of_family->save();
|
||||
|
||||
$insurance_member->family_id = $head_of_family->id;
|
||||
} else {
|
||||
$insurance_member->family_id = $request->family_id;
|
||||
}
|
||||
|
||||
$insurance_member->group_id = $request->group_id;
|
||||
$insurance_member->relationship_to_head = $request->relationship_to_head;
|
||||
$insurance_member->patient_id = $patient->id;
|
||||
$insurance_member->is_family_head = $request->is_family_head;
|
||||
$insurance_member->title = $request->title;
|
||||
$insurance_member->premium = $request->member_premium;
|
||||
$insurance_member->chi_plan = $request->chi_plan;
|
||||
$insurance_member->other_plan = $request->other_plan;
|
||||
$insurance_member->risk_ids = is_null($request->risk_id) ? null : implode(",", $request->risk_id);
|
||||
$insurance_member->membership_start_date = is_null($request->membership_start_date) ? null : Carbon::createFromFormat('d/m/Y', $request->membership_start_date)->toDateString();
|
||||
$insurance_member->membership_registration_date = is_null($request->membership_registration_date) ? null : Carbon::createFromFormat('d/m/Y', $request->membership_registration_date)->toDateString();
|
||||
$insurance_member->social_security_number = $request->social_security_number;
|
||||
$insurance_member->research_id = $request->research_id;
|
||||
$insurance_member->next_anniversary_date = is_null($request->next_anniversary_date) ? null : Carbon::createFromFormat('d/m/Y', $request->next_anniversary_date)->toDateString();
|
||||
$insurance_member->created_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
|
||||
$insurance_member->save();
|
||||
|
||||
if ($request->has('does_member_have_existing_premium') && $request->does_member_have_existing_premium == 1 && !is_null($request->existing_premium_start_date)) {
|
||||
|
||||
$existing_premium_start_date = is_null($request->existing_premium_start_date) ? null : Carbon::createFromFormat('d/m/Y', $request->existing_premium_start_date)->toDateString();
|
||||
$existing_premium_end_date = is_null($request->existing_premium_end_date) ? null : Carbon::createFromFormat('d/m/Y', $request->existing_premium_end_date)->toDateString();
|
||||
|
||||
$insurance_member->existing_premium_start_date = $existing_premium_start_date;
|
||||
$insurance_member->existing_premium_end_date = $existing_premium_end_date;
|
||||
|
||||
$track_receipts = new TrackReceipt;
|
||||
$track_receipts->created_by = Auth::id();
|
||||
$track_receipts->reason = 'Premiums';
|
||||
$track_receipts->save();
|
||||
$receipt_number = sprintf("%04u", $track_receipts->id);
|
||||
|
||||
add_member_to_insurance_subscription($insurance_member->group_id, $insurance_member->id, $insurance_member->premium,
|
||||
$insurance_member->family_id, $existing_premium_start_date, $existing_premium_end_date, $receipt_number);
|
||||
|
||||
$insurance_member->current_insurance_end_date = $existing_premium_end_date;
|
||||
$insurance_member->current_insurance_amount_paid = $insurance_member->premium;
|
||||
}
|
||||
|
||||
$insurance_member_account = allocate_insurance_member_account_number($insurance_member->id, $insurance_member->group_id);
|
||||
$insurance_member->member_account_number = $insurance_member_account;
|
||||
$insurance_member->update();
|
||||
|
||||
//update the insurance_head_of_family table with the new member_id and their respective premium
|
||||
update_insurance_heads_of_family_record($insurance_member->family_id, $insurance_member->id, $insurance_member->premium);
|
||||
|
||||
flash("Insurance Member has been saved")->success();
|
||||
return redirect("/insurance_members/");
|
||||
} catch (QueryException $e) {
|
||||
flash("Failed to register patient. Please try again")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
} else {
|
||||
flash("Failed to register patient. Please try again")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function edit($id) {
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
|
||||
$families = HeadOfFamily::orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
|
||||
$relations = FamilyRelationship::orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
|
||||
$insurance_member = InsuranceMember::where(['id' => $id])->first();
|
||||
|
||||
$uploaded_photo = asset('uploads/images/insurance_members') . '/' . $insurance_member->photo;
|
||||
|
||||
$person_titles = DB::table('person_titles')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Title - ', '');
|
||||
$chi_plans = DB::table('community_health_insurance_plans')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Plan - ', '');
|
||||
$chi_risks = DB::table('community_health_insurance_risks')->whereNull('deleted_at')->pluck('name','id')->prepend('None', '0');
|
||||
|
||||
if (!$insurance_member) {
|
||||
flash()->error("There is no such Insurance Member");
|
||||
return redirect('/insurance_members/');
|
||||
} else {
|
||||
return view('insurance::insurance_members.edit', compact('insurance_groups', 'insurance_member', 'families', 'relations', 'uploaded_photo', 'person_titles', 'chi_plans', 'chi_risks'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
$insurance_member = InsuranceMember::find($id);
|
||||
|
||||
$logged_in_user_id = Auth::id();
|
||||
request()->validate([
|
||||
'duplicate_research_id' => 'nullable|required_with:research_id|same:research_id|unique:insurance_members,research_id,'.$id,
|
||||
'research_id' => 'nullable|required_with:research_id|same:research_id|unique:insurance_members,research_id,'.$id,
|
||||
],[
|
||||
'duplicate_research_id.required_with' => 'Research ID field must be filled.',
|
||||
'duplicate_research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.required_with' => 'Research ID field must be filled.',
|
||||
'research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
'duplicate_research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
]);
|
||||
|
||||
if ($request->hasFile('photo') && $request->file('photo') !== null) {
|
||||
$photo = $request->file('photo');
|
||||
$photo_name = $insurance_member->patient_id . "." . $photo->getClientOriginalExtension();
|
||||
$destinationPath = public_path('/uploads/images/insurance_members');
|
||||
$photoPath = $destinationPath . "/" . $photo_name;
|
||||
$photo->move($destinationPath, $photoPath);
|
||||
$insurance_member->photo = $photo_name;
|
||||
}
|
||||
|
||||
if ($request->is_family_head == 1){
|
||||
$head_of_family = HeadOfFamily::find($request->family_id);
|
||||
|
||||
if ($head_of_family) {
|
||||
$head_of_family->group_id = $request->group_id;
|
||||
$head_of_family->save();
|
||||
|
||||
// change group for the rest of the family members + themselves
|
||||
$related_members = InsuranceMember::where('family_id', $request->family_id)->update([
|
||||
"group_id" => $request->group_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$insurance_member->family_id = $request->family_id;
|
||||
$insurance_member->relationship_to_head = $request->relationship_to_head;
|
||||
$insurance_member->title = $request->title;
|
||||
$insurance_member->premium = $request->member_premium;
|
||||
$insurance_member->chi_plan = $request->chi_plan;
|
||||
$insurance_member->other_plan = $request->other_plan;
|
||||
$insurance_member->risk_ids = is_null($request->risk_id) ? null : implode(",", $request->risk_id);
|
||||
$insurance_member->membership_start_date = $request->membership_start_date;
|
||||
$insurance_member->membership_registration_date = $request->membership_registration_date;
|
||||
$insurance_member->social_security_number = $request->social_security_number;
|
||||
$insurance_member->research_id = $request->research_id;
|
||||
$insurance_member->next_anniversary_date = $request->next_anniversary_date;
|
||||
$insurance_member->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$insurance_member->save();
|
||||
|
||||
if ($request->has('does_member_have_existing_premium') && $request->does_member_have_existing_premium == 1 && !is_null($request->existing_premium_start_date)) {
|
||||
|
||||
$existing_premium_start_date = $request->existing_premium_start_date;
|
||||
$existing_premium_end_date = $request->existing_premium_end_date;
|
||||
|
||||
$insurance_member->existing_premium_start_date = $existing_premium_start_date;
|
||||
$insurance_member->existing_premium_end_date = $existing_premium_end_date;
|
||||
$insurance_member->save();
|
||||
|
||||
$track_receipts = new TrackReceipt;
|
||||
$track_receipts->created_by = Auth::id();
|
||||
$track_receipts->reason = 'Premiums';
|
||||
$track_receipts->save();
|
||||
$receipt_number = sprintf("%04u", $track_receipts->id);
|
||||
|
||||
add_member_to_insurance_subscription($insurance_member->group_id, $insurance_member->id, $insurance_member->premium,
|
||||
$insurance_member->family_id, $existing_premium_start_date, $existing_premium_end_date, $receipt_number);
|
||||
|
||||
$insurance_member->current_insurance_end_date = $existing_premium_end_date;
|
||||
$insurance_member->current_insurance_amount_paid = $insurance_member->premium;
|
||||
$insurance_member->update();
|
||||
}
|
||||
|
||||
update_insurance_heads_of_family_record($insurance_member->family_id, $insurance_member->id, $insurance_member->premium);
|
||||
|
||||
flash("Insurance Member has been updated")->success();
|
||||
return redirect("/insurance_members/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$insurance_member = InsuranceMember::find($id);
|
||||
/*
|
||||
1. double check to make sure that it is not a family head
|
||||
2. turn the patient record to insurance status = 0;
|
||||
3. remove them from the insurance_heads_of_family ie family_members_ids,family_member_premiums csv columns
|
||||
4. soft delete them from insurance_members table
|
||||
*/
|
||||
if ($insurance_member) {
|
||||
if ($insurance_member->is_family_head == 0) {
|
||||
$patient_id = $insurance_member->patient_id;
|
||||
$patient = Patient::find($patient_id);
|
||||
$patient->insurance_status = 0;
|
||||
$patient->save();
|
||||
|
||||
$family_details = HeadOfFamily::withTrashed()->find($insurance_member->family_id);
|
||||
if ($family_details) {
|
||||
$family_members_ids_array = is_null($family_details->family_members_ids) ? [] : explode(",", $family_details->family_members_ids);
|
||||
$family_member_premiums_array = is_null($family_details->family_member_premiums) ? [] : explode(",", $family_details->family_member_premiums);
|
||||
|
||||
if(array_search($insurance_member->id, $family_members_ids_array) !== false){
|
||||
$key = array_search($insurance_member->id, $family_members_ids_array);
|
||||
unset($family_members_ids_array[$key]);
|
||||
unset($family_member_premiums_array[$key]);
|
||||
//update family details after removing this member
|
||||
$family_details->family_members_ids = is_null($family_members_ids_array) ? "" : implode(",", $family_members_ids_array);
|
||||
$family_details->family_member_premiums = is_null($family_member_premiums_array) ? "" : implode(",", $family_member_premiums_array);
|
||||
$family_details->update();
|
||||
}
|
||||
}
|
||||
|
||||
if ($insurance_member->delete()):
|
||||
flash("Insurance Member ".get_full_name($patient_id, "id", "first_name", "last_name", "patients")." has been deleted from Community Health Insurance.")->success();
|
||||
return redirect('/insurance_members/');
|
||||
endif;
|
||||
}
|
||||
|
||||
flash("Insurance Member is a family head. Please make sure that the member is no longer the family head.")->info();
|
||||
return redirect('/insurance_members/');
|
||||
}
|
||||
|
||||
flash("Insurance Member could not be found.")->warning();
|
||||
return redirect('/insurance_members/');
|
||||
}
|
||||
|
||||
public function inactive() {
|
||||
$insurance_family = HeadOfFamily::pluck('name', 'id');
|
||||
|
||||
$insurance_members = InsuranceMember::onlyTrashed()
|
||||
->orderBy('id', 'desc')
|
||||
->join('patients', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->select('insurance_members.*', 'patients.number', 'patients.category_id')
|
||||
->paginate(200);
|
||||
|
||||
$insurance_groups_select = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups_select;
|
||||
|
||||
$patient_categories = PatientCategory::pluck('name', 'id');
|
||||
|
||||
$insurance_groups = InsuranceGroup::pluck('name', 'id');
|
||||
|
||||
$relations = FamilyRelationship::orderBy('id', 'asc')->pluck('name', 'id');
|
||||
|
||||
$full_names = DB::table('patients')->whereNull('deleted_at')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name'))
|
||||
->pluck("full_name");
|
||||
|
||||
return view('insurance::insurance_members.inactive', compact('insurance_members', 'patient_categories', 'full_names', 'insurance_groups', 'insurance_family', 'relations', 'insurance_groups_select'));
|
||||
}
|
||||
|
||||
public function searchInactive(Request $request){
|
||||
$insurance_family = HeadOfFamily::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$patient_categories = PatientCategory::pluck('name', 'id');
|
||||
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups;
|
||||
|
||||
$relations = FamilyRelationship::pluck('name', 'id');
|
||||
|
||||
$criteria = '';
|
||||
$filters = [];
|
||||
$full_name_search = $request->full_name;
|
||||
|
||||
if ($full_name_search) {
|
||||
$split_full_name_array = explode(' ', $full_name_search);
|
||||
|
||||
if (is_array($split_full_name_array)) {
|
||||
$first_name_from_split = $split_full_name_array[0] ?? "";
|
||||
$last_name_from_split = $split_full_name_array[1] ?? "";
|
||||
$patient_number_from_split = count($split_full_name_array) > 2 ? array_slice($split_full_name_array, -3)[0] : '';
|
||||
|
||||
//just only use the patient number from the full name submitted
|
||||
if ($patient_number_from_split != "") {
|
||||
$filters[] = ['number', 'LIKE', '%' . $patient_number_from_split . '%'];
|
||||
$criteria .= 'Number (' . $patient_number_from_split . ') ';
|
||||
} else {
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $first_name_from_split . '%'];
|
||||
$filters[] = ['last_name', 'LIKE', '%' . $last_name_from_split . '%'];
|
||||
$criteria .= 'Name (' . $full_name_search . ') ';
|
||||
}
|
||||
} else {
|
||||
//just only use the patient number from the full name submitted
|
||||
$filters[] = ['first_name', 'LIKE', '%' . $full_name_search . '%'];
|
||||
$criteria .= 'Name (' . $full_name_search . ') ';
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->patient_id != 0){
|
||||
$filters[] = ['insurance_members.patient_id', '=', $request->patient_id];
|
||||
$criteria .= 'Search by patient ';
|
||||
}
|
||||
|
||||
if ($request->group_id) {
|
||||
$filters[] = ['insurance_members.group_id', '=', $request->group_id];
|
||||
$criteria .= 'Insurance Group ('. ($insurance_groups[$request->group_id] ?? 'N/A') .') ';
|
||||
}
|
||||
|
||||
$insurance_members = InsuranceMember::onlyTrashed()
|
||||
->join('patients', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->select('insurance_members.*', 'patients.number', 'patients.category_id')
|
||||
->where($filters)
|
||||
->paginate(200);
|
||||
|
||||
$full_names = DB::table('patients')->whereNull('deleted_at')
|
||||
->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name'))
|
||||
->pluck("full_name");
|
||||
|
||||
return view('insurance::insurance_members.inactive', compact('insurance_members', 'patient_categories', 'insurance_groups', 'insurance_family', 'relations', 'insurance_groups_select', 'criteria', 'full_names'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function activate($id) {
|
||||
$insurance_member = InsuranceMember::withTrashed()->find($id);
|
||||
|
||||
$patient_id = $insurance_member->patient_id;
|
||||
$patient = Patient::find($patient_id);
|
||||
$patient->insurance_status = 1;
|
||||
$patient->save();
|
||||
|
||||
if ($insurance_member->restore()):
|
||||
flash("Insurance Member has been activated.")->success();
|
||||
return redirect('/insurance_members/');
|
||||
endif;
|
||||
}
|
||||
|
||||
public function update_patient_info($id) {
|
||||
$patient = Patient::where('patients.id', $id)
|
||||
->leftJoin('insurance_members', 'insurance_members.patient_id', '=', 'patients.id')
|
||||
->first(['patients.id', 'patients.first_name', 'patients.last_name', 'patients.phone', 'patients.next_of_kin',
|
||||
'patients.phone_of_next_of_kin', 'patients.category_id', 'patients.village_id', 'patients.gender', 'patients.date_of_birth', 'patients.number',
|
||||
'insurance_members.id as insured_id', 'insurance_members.group_id', 'insurance_members.family_id']);
|
||||
|
||||
if ($patient) {
|
||||
$first_name = title_case($patient->first_name);
|
||||
|
||||
$last_name = title_case($patient->last_name);
|
||||
|
||||
if (is_null($patient->insured_id)) {
|
||||
$code = '<p><b>Patient Names:</b> ' . $first_name . ' ' . $last_name . '</p>';
|
||||
|
||||
$code .= '<p><b>Patient Number:</b> ' . $patient->number . '</p>';
|
||||
|
||||
$code .= '<p><b>Gender:</b> ' . ($patient->gender == 1 ? "Male" : "Female"). ' <b>Date of Birth:</b> ' . streamline_date($patient->date_of_birth) . '</p>';
|
||||
|
||||
$code .= '<p><b>Phone Number:</b> ' . $patient->phone . ' <b>Next of Kin:</b> ' . $patient->next_of_kin . ' ('.$patient->phone_of_next_of_kin. ')</p>';
|
||||
|
||||
$code .= '<p><b>Patient Category:</b> ' . get_name($patient->category_id, 'id', 'name', 'patient_categories') . '</p>';
|
||||
|
||||
$code .= '<p><b>Village:</b> ' . get_name($patient->village_id, 'id', 'name', 'villages') . '</p>';
|
||||
} else {
|
||||
$code = '<h3 style="color: red"><b>' . $first_name . ' ' . $last_name . '</b> is already a C.H.I Member belonging to the family of <b>' . get_name($patient->family_id,"id", "name", "insurance_heads_of_family"). '</b> of group <b>'. get_name($patient->group_id,"id", "name", "insurance_groups").'</b></h3>';
|
||||
}
|
||||
} else {
|
||||
$code = '<h3 style="color: red"><b>Patient Not Found</b></h3>';
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function details($id) {
|
||||
|
||||
$result = InsuranceMember::where('id', $id)->first();
|
||||
|
||||
$patient_relationship = get_name($result->relationship_to_head, 'id', 'name', 'family_relations');
|
||||
|
||||
$family_id = $result->family_id;
|
||||
$research_id = $result->research_id;
|
||||
|
||||
$head_of_family_details = HeadOfFamily::find($family_id);
|
||||
$head_of_family = $head_of_family_details->name;
|
||||
|
||||
$group_id = $result->group_id;
|
||||
|
||||
$group_name = InsuranceGroup::where('id', $group_id)->value('name');
|
||||
|
||||
$start_date = DB::table('insurance_subscriptions')->where('group_id', $group_id)->value('start_date');
|
||||
|
||||
$end_date = DB::table('insurance_subscriptions')->where('group_id', $group_id)->value('end_date');
|
||||
|
||||
$member_photo = asset('uploads/images/insurance_members') . '/' . $result->photo;
|
||||
$head_photo = asset('uploads/images/insurance_members') . '/' . DB::table('insurance_members')->where('patient_id', $head_of_family_details->patient_id)->value('photo');
|
||||
|
||||
$patient_id = $result->patient_id;
|
||||
|
||||
$result2 = DB::table('patients')->where('id', $patient_id)->first();
|
||||
|
||||
$patient_number = $result2->number;
|
||||
|
||||
return view('insurance::insurance_members.details', compact('patient_number', 'patient_id', 'patient_relationship', 'research_id','head_of_family', 'group_name', 'start_date', 'end_date', 'member_photo', 'head_photo', 'group_id', 'family_id', 'id'));
|
||||
}
|
||||
|
||||
public function add_existing_patient_to_insurance(){
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$insurance_groups = ['' => '- select -'] + $insurance_groups;
|
||||
|
||||
$families = HeadOfFamily::orderBy('name', 'asc')->pluck('id')->toArray();
|
||||
|
||||
$relations = FamilyRelationship::orderBy('id', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$relations = ['' => '- select -'] + $relations;
|
||||
|
||||
$person_titles = DB::table('person_titles')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Title - ', '');
|
||||
$chi_plans = DB::table('community_health_insurance_plans')->whereNull('deleted_at')->pluck('name','id')->prepend('- Select Plan - ', '');
|
||||
$chi_risks = DB::table('community_health_insurance_risks')->whereNull('deleted_at')->pluck('name','id')->prepend('None', '0');
|
||||
|
||||
return view('insurance::insurance_members.add_existing_patient_to_insurance', compact('insurance_groups', 'families', 'relations', 'person_titles', 'chi_plans', 'chi_risks'));
|
||||
}
|
||||
|
||||
public function create_insurance_patient(Request $request){
|
||||
request()->validate([
|
||||
'group_id' => 'required',
|
||||
'patient_id' => 'required|unique:insurance_members,patient_id',
|
||||
'duplicate_research_id' => 'nullable|required_with:research_id|same:research_id|unique:insurance_members,research_id',
|
||||
'research_id' => 'nullable|required_with:duplicate_research_id|same:duplicate_research_id|unique:insurance_members'
|
||||
], [
|
||||
'duplicate_research_id.required_with' => 'Research ID field must be filled.',
|
||||
'duplicate_research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.required_with' => 'Research ID field must be filled.',
|
||||
'research_id.same' => 'Research ID values must be similar or identical.',
|
||||
'research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
'patient_id.unique' => 'Patient is already insured, please add another one.',
|
||||
'duplicate_research_id.unique' => 'Research ID already exists, please enter another one.',
|
||||
]);
|
||||
|
||||
// save the patient
|
||||
$patient = Patient::find($request->patient_id);
|
||||
$patient->insurance_status = 1;
|
||||
$patient->updated_by = Auth::id();
|
||||
$patient->save();
|
||||
|
||||
// check if member is already registered
|
||||
$member = DB::table('insurance_members')->where('patient_id', $patient->id)
|
||||
->first();
|
||||
|
||||
if ($member) {
|
||||
flash("Insurance Member already exists!")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
|
||||
// add patient to insurance
|
||||
$insurance_member = new InsuranceMember;
|
||||
|
||||
if ($request->hasFile('photo')){
|
||||
$photo = $request->file('photo');
|
||||
$photo_name = $request->patient_id . "." . $photo->getClientOriginalExtension();
|
||||
$destinationPath = public_path('/uploads/images/insurance_members');
|
||||
$photoPath = $destinationPath . "/" . $photo_name;
|
||||
$photo->move($destinationPath, $photoPath);
|
||||
$insurance_member->photo = $photo_name;
|
||||
} else {
|
||||
$insurance_member->photo = 'placeholder.png';
|
||||
}
|
||||
|
||||
$logged_in_user_id = Auth::id();
|
||||
|
||||
if ($request->is_family_head == 1){
|
||||
$head_of_family = new HeadOfFamily;
|
||||
$head_of_family->name = $patient->first_name . " " . $patient->last_name;
|
||||
$head_of_family->group_id = $request->group_id;
|
||||
$head_of_family->patient_id = $patient->id;
|
||||
$head_of_family->risk_ids = is_null($request->family_risk_id) ? null : implode(",", $request->family_risk_id);
|
||||
$head_of_family->created_by = $logged_in_user_id;
|
||||
$head_of_family->updated_by = $logged_in_user_id;
|
||||
$head_of_family->save();
|
||||
|
||||
$insurance_member->family_id = $head_of_family->id;
|
||||
} else {
|
||||
$insurance_member->family_id = $request->family_id;
|
||||
}
|
||||
|
||||
$insurance_member->group_id = $request->group_id;
|
||||
$insurance_member->relationship_to_head = $request->relationship_to_head;
|
||||
$insurance_member->patient_id = $patient->id;
|
||||
$insurance_member->is_family_head = $request->is_family_head;
|
||||
$insurance_member->title = $request->title;
|
||||
$insurance_member->premium = $request->member_premium;
|
||||
$insurance_member->chi_plan = $request->chi_plan;
|
||||
$insurance_member->other_plan = $request->other_plan;
|
||||
$insurance_member->risk_ids = is_null($request->risk_id) ? null : implode(",", $request->risk_id);
|
||||
$insurance_member->membership_start_date = is_null($request->membership_start_date) ? null : Carbon::createFromFormat('d/m/Y', $request->membership_start_date)->toDateString();
|
||||
$insurance_member->membership_registration_date = is_null($request->membership_registration_date) ? null : Carbon::createFromFormat('d/m/Y', $request->membership_registration_date)->toDateString();
|
||||
$insurance_member->social_security_number = $request->social_security_number;
|
||||
$insurance_member->research_id = $request->research_id;
|
||||
$insurance_member->next_anniversary_date = is_null($request->next_anniversary_date) ? null : Carbon::createFromFormat('d/m/Y', $request->next_anniversary_date)->toDateString();
|
||||
$insurance_member->created_by = $logged_in_user_id;
|
||||
$insurance_member->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
|
||||
$insurance_member->save();
|
||||
|
||||
if ($request->has('does_member_have_existing_premium') && $request->does_member_have_existing_premium == 1 && !is_null($request->existing_premium_start_date)) {
|
||||
|
||||
$existing_premium_start_date = is_null($request->existing_premium_start_date) ? null : Carbon::createFromFormat('d/m/Y', $request->existing_premium_start_date)->toDateString();
|
||||
$existing_premium_end_date = is_null($request->existing_premium_end_date) ? null : Carbon::createFromFormat('d/m/Y', $request->existing_premium_end_date)->toDateString();
|
||||
|
||||
$insurance_member->existing_premium_start_date = $existing_premium_start_date;
|
||||
$insurance_member->existing_premium_end_date = $existing_premium_end_date;
|
||||
|
||||
$track_receipts = new TrackReceipt;
|
||||
$track_receipts->created_by = Auth::id();
|
||||
$track_receipts->reason = 'Premiums';
|
||||
$track_receipts->save();
|
||||
$receipt_number = sprintf("%04u", $track_receipts->id);
|
||||
|
||||
add_member_to_insurance_subscription($insurance_member->group_id, $insurance_member->id, $insurance_member->premium,
|
||||
$insurance_member->family_id, $existing_premium_start_date, $existing_premium_end_date, $receipt_number);
|
||||
|
||||
$insurance_member->current_insurance_end_date = $existing_premium_end_date;
|
||||
$insurance_member->current_insurance_amount_paid = $insurance_member->premium;
|
||||
}
|
||||
|
||||
$insurance_member_account = allocate_insurance_member_account_number($insurance_member->id, $insurance_member->group_id);
|
||||
$insurance_member->member_account_number = $insurance_member_account;
|
||||
$insurance_member->update();
|
||||
|
||||
//update the insurance_head_of_family table with the new member_id and their respective premium
|
||||
update_insurance_heads_of_family_record($insurance_member->family_id, $insurance_member->id, $insurance_member->premium);
|
||||
|
||||
flash("Insurance Member has been saved")->success();
|
||||
return redirect("/insurance_members/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function pre_existing_premiums_report(Request $request)
|
||||
{
|
||||
$search_text = "";
|
||||
if($request->start_date){
|
||||
$start = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateTimeString();
|
||||
$end = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateTimeString();
|
||||
} else {
|
||||
$start = Carbon::now()->startOfDay()->toDateTimeString();
|
||||
$end = Carbon::now()->endOfDay()->toDateTimeString();
|
||||
}
|
||||
|
||||
$search_text = "Searching between " . streamline_date($start) . " and " . streamline_date($end);
|
||||
|
||||
$pre_insurance_members = InsuranceMember::whereNotNull('existing_premium_start_date')->whereBetween('created_at', [$start, $end])->get();
|
||||
|
||||
return view('insurance::insurance_members.pre_existing_premiums_report', compact('pre_insurance_members', 'search_text'));
|
||||
}
|
||||
|
||||
public function update_insurance_heads_of_family_table_with_family_details()
|
||||
{
|
||||
$group_families = HeadOfFamily::all();
|
||||
if(count($group_families) > 0){
|
||||
foreach($group_families as $family){
|
||||
$family_insurance_members = InsuranceMember::where('family_id', $family->id)->get();
|
||||
$each_member_ids_array = $each_member_premiums_array = [];
|
||||
if (count($family_insurance_members) > 0) {
|
||||
foreach ($family_insurance_members as $member) {
|
||||
$each_member_ids_array[] = $member->id;
|
||||
$each_member_premiums_array[] = $member->premium;
|
||||
}
|
||||
}
|
||||
|
||||
//update the heads of family records
|
||||
$head_of_family_record = HeadOfFamily::withTrashed()->find($family->id);
|
||||
if ($head_of_family_record) {
|
||||
$head_of_family_record->family_members_ids = implode(",", $each_member_ids_array);
|
||||
$head_of_family_record->family_member_premiums = implode(",", $each_member_premiums_array);
|
||||
$head_of_family_record->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "insurance heads of family table has been updated with family members and premiums details";
|
||||
}
|
||||
|
||||
public function get_chi_plan_amount($chi_plan_id)
|
||||
{
|
||||
$chi_plan = CommunityHealthInsurancePlan::find($chi_plan_id);
|
||||
if ($chi_plan) {
|
||||
return $chi_plan->plan_fee;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function get_family_group_id($family_id)
|
||||
{
|
||||
$insurance_heads_of_family = HeadOfFamily::find($family_id);
|
||||
if ($insurance_heads_of_family) {
|
||||
return $insurance_heads_of_family->group_id;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function print_insurance_cards(Request $request){
|
||||
$ids = $request->checked_members ?? [];
|
||||
|
||||
$insurance_members = InsuranceMember::join('patients', 'patients.id', '=', 'insurance_members.patient_id')->leftJoin('patient_categories','patient_categories.id','=','patients.category_id')
|
||||
->whereIn('insurance_members.id', $ids)->select(['insurance_members.photo', 'insurance_members.group_id', 'patients.gender', 'patients.date_of_birth', 'patients.first_name',
|
||||
'patients.number', 'patients.national_id', 'patients.village_id', 'patients.district_id', 'patients.last_name', 'insurance_members.patient_id','patient_categories.name as category_name'])->get();
|
||||
|
||||
$hospital_details = HospitalInformation::first();
|
||||
|
||||
$data = [
|
||||
'hospitalInfo' => $hospital_details,
|
||||
'insurance_members' => $insurance_members,
|
||||
];
|
||||
|
||||
$pdf = SnappyPDF::loadView('insurance::insurance_members.print_membership_cards', $data)
|
||||
->setOrientation('portrait')
|
||||
->setOption('margin-bottom', 5)
|
||||
->setOption('margin-top', 5)
|
||||
->setOption('margin-left', 5)
|
||||
->setOption('margin-right', 5);
|
||||
return $pdf->inline('CHI Cards' . date(" d-m-y h:ia") . '.pdf');
|
||||
}
|
||||
|
||||
public function search_insured_patient_by_name_or_number(Request $request) {
|
||||
$data = [];
|
||||
|
||||
if ($request->has('q')) {
|
||||
$search = $request->q;
|
||||
$data = InsuranceMember::leftjoin('patients', 'patients.id', '=', 'insurance_members.patient_id')->select("patients.id", "first_name", "last_name", "number", "phone")
|
||||
->where('last_name', 'LIKE', "%$search%")
|
||||
->orWhere('first_name', 'LIKE', "%$search%")
|
||||
->orWhere('number', 'LIKE', "%$search%")
|
||||
->get();
|
||||
}
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
}
|
||||
+1278
File diff suppressed because it is too large
Load Diff
+409
@@ -0,0 +1,409 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Streamline\Models\Drug;
|
||||
use Streamline\Models\InsuranceExpenditure;
|
||||
use Streamline\Models\InsuranceGroup;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\InsurancePremiums;
|
||||
use Streamline\Models\InsuranceSubscription;
|
||||
|
||||
class InsuranceReportsController extends Controller {
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:insurance-reports', ['only' => ['index']]);
|
||||
$this->middleware('permission:insurance-almost-expiring', ['only' => ['view_expiry_status', 'view_expiry_status_details']]);
|
||||
$this->middleware('permission:insurance-drugs-covered', ['only' => ['drugs_covered']]);
|
||||
$this->middleware('permission:expired-insurance', ['only' => ['expired_insurance', 'expired_insurance_details']]);
|
||||
$this->middleware('permission:insurance-premiums-report', ['only' => ['insurance_transactions']]);
|
||||
$this->middleware('permission:insurance-cumulative-premiums-report', ['only' => ['cumulative_premiums_report']]);
|
||||
$this->middleware('permission:insurance-income-received', ['only' => ['insurance_income_received']]);
|
||||
$this->middleware('permission:insurance-expenditure', ['only' => ['insurance_expenditure']]);
|
||||
}
|
||||
|
||||
public function index(){}
|
||||
|
||||
public function view_expiry_status(Request $request) {
|
||||
$insurance_group_options = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_group_options = ['' => '- select -'] + $insurance_group_options;
|
||||
$today = Carbon::today();
|
||||
$two_months_from_now = Carbon::now()->addMonths(2);
|
||||
if ($request->has('group_id')) {
|
||||
$insurance_groups = InsuranceGroup::orderBy('insurance_subscriptions.end_date', 'asc')
|
||||
->join('insurance_subscriptions', 'insurance_groups.id', '=', 'insurance_subscriptions.group_id')
|
||||
->select('insurance_groups.name', 'insurance_groups.id', 'insurance_subscriptions.start_date', 'insurance_subscriptions.end_date', 'insurance_subscriptions.payment_date')
|
||||
->whereBetween('insurance_subscriptions.end_date', [$today, $two_months_from_now])
|
||||
->where('insurance_subscriptions.group_id', $request->group_id)
|
||||
->get();
|
||||
} else {
|
||||
$insurance_groups = InsuranceGroup::orderBy('insurance_subscriptions.end_date', 'asc')
|
||||
->join('insurance_subscriptions', 'insurance_groups.id', '=', 'insurance_subscriptions.group_id')
|
||||
->select('insurance_groups.name', 'insurance_groups.id', 'insurance_subscriptions.start_date', 'insurance_subscriptions.end_date', 'insurance_subscriptions.payment_date')
|
||||
->whereBetween('insurance_subscriptions.end_date', [$today, $two_months_from_now])
|
||||
->get();
|
||||
}
|
||||
|
||||
$group_ids = DB::table('insurance_groups')->select('id')->distinct()->get();
|
||||
|
||||
$total_insurance = DB::table('insurance_subscriptions')->sum('amount');
|
||||
|
||||
return view('insurance::insurance_reports.view_expiry_status', compact('total_insurance', 'insurance_groups', 'group_ids', 'insurance_group_options'));
|
||||
}
|
||||
|
||||
public function view_expiry_status_details($id) {
|
||||
|
||||
$insurance_subscriptions = InsuranceSubscription::where(['group_id' => $id])->select('amount', 'start_date', 'end_date', 'payment_date')
|
||||
->orderBy('start_date', 'asc')->paginate(50);
|
||||
|
||||
$result = DB::table('insurance_groups')->select('name')->where('id', $id)->first();
|
||||
$group_name = $result->name;
|
||||
|
||||
return view('insurance::insurance_reports.view_expiry_status_details', compact('group_name', 'insurance_subscriptions'));
|
||||
}
|
||||
|
||||
public function expired_insurance() {
|
||||
$insurance_groups = InsuranceGroup::where('insurance_subscriptions.end_date', '<', date('Y-m-d'))->orderBy('insurance_subscriptions.end_date', 'desc')
|
||||
->join('insurance_subscriptions', 'insurance_groups.id', '=', 'insurance_subscriptions.group_id')
|
||||
->select('insurance_groups.*', 'insurance_subscriptions.start_date', 'insurance_subscriptions.end_date', 'insurance_subscriptions.payment_date', 'insurance_subscriptions.covered_member_ids', 'insurance_subscriptions.covered_member_premiums_paid')
|
||||
->get(50); //this is the old query. I have left if just in case
|
||||
|
||||
$insurance_premiums = DB::select("SELECT insurance_subscriptions.group_id, end_date, start_date, amount, payment_date, covered_member_ids,covered_member_premiums_paid FROM insurance_subscriptions INNER JOIN (SELECT group_id, MAX(end_date) AS max_end_date FROM insurance_subscriptions GROUP BY group_id) ms ON insurance_subscriptions.group_id = ms.group_id AND end_date = max_end_date");
|
||||
|
||||
return view('insurance::insurance_reports.expired_insurance', compact('insurance_groups', 'insurance_premiums'));
|
||||
}
|
||||
|
||||
public function expired_insurance_details($id) {
|
||||
$insurance_subscriptions = DB::table('insurance_subscriptions')->where(['group_id' => $id])
|
||||
->select('amount', 'start_date', 'end_date', 'payment_date', 'covered_member_ids')->orderBy('start_date', 'asc')->paginate(50);
|
||||
|
||||
$result = DB::table('insurance_groups')->select('name')->where('id', $id)->first();
|
||||
$group_name = $result->name;
|
||||
|
||||
return view('insurance::insurance_reports.view_expiry_status_details', compact('group_name', 'insurance_subscriptions'));
|
||||
}
|
||||
|
||||
public function insurance_transactions(Request $request) {
|
||||
|
||||
if($request->start_date){
|
||||
$start = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString();
|
||||
$end = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString();
|
||||
} else {
|
||||
$start = Carbon::now()->startOfDay()->toDateTimeString();
|
||||
$end = Carbon::now()->endOfDay()->toDateTimeString();
|
||||
}
|
||||
|
||||
$search_text = "Searching between " . streamline_date($start) . " and " . streamline_date($end);
|
||||
|
||||
$start = date("Y-m-d", strtotime($start));
|
||||
$end = date("Y-m-d", strtotime($end));
|
||||
|
||||
$insurance_transactions = DB::table('insurance_subscriptions')
|
||||
->whereBetween('payment_date', [$start, $end])->get();
|
||||
|
||||
$insurance_groups = DB::table('insurance_groups')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_reports.insurance_transactions', compact('insurance_transactions', 'start', 'end', 'search_text', 'insurance_groups'));
|
||||
}
|
||||
|
||||
public function cumulative_premiums_report(Request $request) {
|
||||
|
||||
if($request->start_date){
|
||||
$start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString();
|
||||
$end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString();
|
||||
} else {
|
||||
$start_date = Carbon::now()->startOfDay()->toDateTimeString();
|
||||
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
|
||||
}
|
||||
|
||||
$reports = DB::table('insurance_groups')
|
||||
->whereBetween('insurance_subscriptions.payment_date', [$start_date, $end_date])
|
||||
->orderBy('name', 'asc')
|
||||
->join('insurance_subscriptions', 'insurance_groups.id', '=', 'insurance_subscriptions.group_id')
|
||||
->select('insurance_groups.*', 'insurance_subscriptions.start_date', 'insurance_subscriptions.end_date', 'insurance_subscriptions.payment_date')
|
||||
->paginate(50);
|
||||
|
||||
$search_text = "Searching between " . streamline_date($start_date) . " and " . streamline_date($end_date);
|
||||
|
||||
return view('insurance::insurance_reports.cumulative_premiums_report', compact('reports', 'start_date', 'end_date', 'search_text'));
|
||||
}
|
||||
|
||||
public function group_premiums_report(Request $request) {
|
||||
$start_date = $request->start_date;
|
||||
$end_date = $request->end_date;
|
||||
$id = $request->id;
|
||||
|
||||
$group_transactions = DB::table('insurance_subscriptions')->where(['group_id' => $id])
|
||||
->whereBetween('payment_date', [$start_date, $end_date])->orderBy('payment_date', 'asc')->paginate(50);
|
||||
|
||||
$insurance_groups = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
|
||||
return view('insurance::insurance_reports.group_premiums_report', compact('group_transactions', 'insurance_groups'));
|
||||
}
|
||||
|
||||
public function insurance_income_received(Request $request) {
|
||||
|
||||
if($request->start_date){
|
||||
$start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString();
|
||||
$end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString();
|
||||
} else {
|
||||
$start_date = Carbon::now()->startOfDay()->toDateTimeString();
|
||||
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
|
||||
}
|
||||
|
||||
$premiums = 0;
|
||||
$co_payments = 0;
|
||||
|
||||
$insurance_subscriptions = DB::table('insurance_subscriptions')->whereBetween('payment_date', [$start_date, $end_date])
|
||||
->select('family_amount')->get();
|
||||
|
||||
foreach ($insurance_subscriptions as $insurance_subscription) {
|
||||
$arrayPremium = explode(",", $insurance_subscription->family_amount);
|
||||
|
||||
for ($x = 0; $x < count($arrayPremium); $x++) {
|
||||
if (is_numeric($arrayPremium[$x])){
|
||||
$premiums += $arrayPremium[$x];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*$single_group_receipts_sum = DB::table('single_group_receipts')->whereBetween('payment_date', [$start_date, $end_date])
|
||||
->sum('amount');
|
||||
$premiums += $single_group_receipts_sum;*/
|
||||
|
||||
$service_deposits = DB::table('service_deposits')->whereBetween('created_at', [$start_date, $end_date])
|
||||
->where('service_type', '=', 'Co_Payment')->select('patient_amount_paid')->get();
|
||||
|
||||
foreach ($service_deposits as $service_deposit) {
|
||||
$co_payments += $service_deposit->patient_amount_paid;
|
||||
}
|
||||
|
||||
$insurance_claims = DB::table('insurance_claims')
|
||||
->whereBetween('created_at', [$start_date, $end_date])
|
||||
->whereNotIn('claim_status', [1,4,5]) // should be adjudicated or released
|
||||
->whereNull('deleted_at')->get();
|
||||
|
||||
$expenditure_total = 0;
|
||||
|
||||
foreach ($insurance_claims as $insurance_claim) {
|
||||
$expenditure_total += $insurance_claim->primary_plan_claim_total;
|
||||
}
|
||||
|
||||
//store dates in session variable
|
||||
session()->put('start_date', $start_date);
|
||||
session()->put('end_date', $end_date);
|
||||
|
||||
$total = $premiums + $co_payments;
|
||||
|
||||
$search_text = "Searching between " . streamline_date($start_date) . " and " . streamline_date($end_date);
|
||||
|
||||
return view('insurance::insurance_reports.insurance_income_received', compact('premiums', 'co_payments', 'total', 'search_text', 'expenditure_total'));
|
||||
}
|
||||
|
||||
public function total_insurance_expenditure_redirect() {
|
||||
$start_date = session()->get('start_date');
|
||||
$end_date = session()->get('end_date');
|
||||
|
||||
$insurance_claims = DB::table('insurance_claims')
|
||||
->whereBetween('created_at', [$start_date, $end_date])
|
||||
->whereNotIn('claim_status', [1,4,5]) // should be adjudicated or released
|
||||
->whereNull('deleted_at')->get();
|
||||
|
||||
$drugs_total = 0;
|
||||
$investigations_total = 0;
|
||||
$procedures_total = 0;
|
||||
$bed_stay_total = 0;
|
||||
$sundries_total = 0;
|
||||
$services_total = 0;
|
||||
|
||||
foreach ($insurance_claims as $insurance_claim) {
|
||||
if ($insurance_claim->item_type == 1) {
|
||||
$services_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 2) {
|
||||
$procedures_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 3) {
|
||||
$investigations_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 4) {
|
||||
$drugs_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 5) {
|
||||
$sundries_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 6) {
|
||||
$bed_stay_total += $insurance_claim->primary_plan_claim_total;
|
||||
}
|
||||
}
|
||||
|
||||
$total = $drugs_total + $investigations_total + $procedures_total + $services_total + $sundries_total + $bed_stay_total;
|
||||
|
||||
$insurance_groups_select = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups_select;
|
||||
$group_id = 0;
|
||||
|
||||
return view('insurance::insurance_reports.insurance_expenditure', compact('bed_stay_total', 'drugs_total', 'investigations_total', 'procedures_total', 'total', 'sundries_total', 'start_date', 'end_date', 'services_total', 'insurance_groups_select', 'group_id'));
|
||||
}
|
||||
|
||||
public function insurance_deposit_income() {
|
||||
$start_date = session()->get('start_date');
|
||||
$end_date = session()->get('end_date');
|
||||
|
||||
$service_deposits = DB::table('service_deposits')->whereBetween('created_at', [$start_date, $end_date])
|
||||
->where('service_type', '=', 'Co_Payment')->orderBy('created_at', 'asc')->get();
|
||||
|
||||
$groups = DB::table('insurance_members')->orderBy('id', 'asc')->pluck('group_id', 'patient_id');
|
||||
|
||||
$families = DB::table('insurance_members')->orderBy('id', 'asc')->pluck('family_id', 'patient_id');
|
||||
|
||||
$search_text = "Showing details for " . streamline_date($start_date) . " to " . streamline_date($end_date);
|
||||
|
||||
return view('insurance::insurance_reports.insurance_deposit_income', compact('service_deposits', 'families', 'groups', 'search_text'));
|
||||
}
|
||||
|
||||
public function insurance_income_received_details() {
|
||||
$start_date = session()->get('start_date');
|
||||
$end_date = session()->get('end_date');
|
||||
|
||||
$insurance_subscriptions = DB::table('insurance_subscriptions')->whereBetween('payment_date', [$start_date, $end_date])
|
||||
->orderBy('payment_date', 'asc')->get();
|
||||
|
||||
$single_group_receipts = []; /*DB::table('single_group_receipts')->whereBetween('payment_date', [$start_date, $end_date])
|
||||
->get();*/
|
||||
|
||||
$search_text = "Showing details for " . streamline_date($start_date) . " to " . streamline_date($end_date);
|
||||
|
||||
return view('insurance::insurance_reports.insurance_income_received_details', compact('insurance_subscriptions', 'search_text', 'single_group_receipts'));
|
||||
}
|
||||
|
||||
public function insurance_expenditure(Request $request) {
|
||||
$start_date = Carbon::now()->startOfDay()->toDateTimeString();
|
||||
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
|
||||
$filter = [];
|
||||
$group_id = 0;
|
||||
|
||||
try {
|
||||
if($request->start_date){
|
||||
$start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString();
|
||||
$end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString();
|
||||
} elseif (!empty(session()->get('start_date'))) {
|
||||
$start_date = Carbon::createFromFormat('Y-m-d', session()->get('start_date'))->toDateString();
|
||||
$end_date = Carbon::createFromFormat('Y-m-d', session()->get('end_date'))->toDateString();
|
||||
}
|
||||
} catch (\Exception $e) {}
|
||||
|
||||
if (isset($request->group_id)) {
|
||||
$filter[] = ['group_id', '=', $request->group_id];
|
||||
$group_id = $request->group_id;
|
||||
session()->put('group_id', $request->group_id);
|
||||
}
|
||||
|
||||
$insurance_claims = DB::table('insurance_claims')
|
||||
->where($filter)
|
||||
->whereBetween('created_at', [$start_date, $end_date])
|
||||
->whereNotIn('claim_status', [1,4,5]) // should be adjudicated or released
|
||||
->whereNull('deleted_at')->get();
|
||||
|
||||
$drugs_total = 0;
|
||||
$investigations_total = 0;
|
||||
$procedures_total = 0;
|
||||
$bed_stay_total = 0;
|
||||
$sundries_total = 0;
|
||||
$services_total = 0;
|
||||
|
||||
foreach ($insurance_claims as $insurance_claim) {
|
||||
if ($insurance_claim->item_type == 1) {
|
||||
$services_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 2) {
|
||||
$procedures_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 3) {
|
||||
$investigations_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 4) {
|
||||
$drugs_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 5) {
|
||||
$sundries_total += $insurance_claim->primary_plan_claim_total;
|
||||
} elseif ($insurance_claim->item_type == 6) {
|
||||
$bed_stay_total += $insurance_claim->primary_plan_claim_total;
|
||||
}
|
||||
}
|
||||
|
||||
$total = $drugs_total + $investigations_total + $procedures_total + $services_total + $sundries_total + $bed_stay_total;
|
||||
|
||||
//store dates in session variable
|
||||
session()->put('start_date', $start_date);
|
||||
session()->put('end_date', $end_date);
|
||||
|
||||
$insurance_groups_select = InsuranceGroup::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$insurance_groups_select = ['' => '- select -'] + $insurance_groups_select;
|
||||
|
||||
return view('insurance::insurance_reports.insurance_expenditure', compact('drugs_total', 'investigations_total', 'procedures_total', 'services_total', 'total', 'sundries_total', 'start_date', 'end_date', 'bed_stay_total', 'insurance_groups_select', 'group_id'));
|
||||
}
|
||||
|
||||
public function insurance_expenditure_details($item_type) {
|
||||
//get date
|
||||
$start_date = session()->get('start_date');
|
||||
$end_date = session()->get('end_date');
|
||||
$group_id = session()->get('group_id');
|
||||
|
||||
$item_type_name = [1 => 'Services', 2 => 'Procedures', 3 => 'Investigations', 4 => 'Drugs', 5 => 'Sundries', 6 => 'Inpatient Accommodation'][$item_type] ?? "";
|
||||
if(!empty($group_id)) $insurance_claims = DB::table('insurance_claims')
|
||||
->where([['item_type', $item_type], ['group_id', $group_id]])
|
||||
->whereBetween('created_at', [$start_date, $end_date])
|
||||
->whereNotIn('claim_status', [1,4,5]) // should be adjudicated or released
|
||||
->whereNull('deleted_at')->get();
|
||||
else $insurance_claims = DB::table('insurance_claims')
|
||||
->where('item_type', $item_type)
|
||||
->whereBetween('created_at', [$start_date, $end_date])
|
||||
->whereNotIn('claim_status', [1,4,5]) // should be adjudicated or released
|
||||
->whereNull('deleted_at')->get();
|
||||
|
||||
if ($item_type == 1) {
|
||||
$items = DB::table('services')->where('available', 1)->pluck('name', 'id');
|
||||
} elseif ($item_type == 2) {
|
||||
$items = DB::table('procedures')->where('available', 1)->pluck('name', 'id');
|
||||
} elseif ($item_type == 3) {
|
||||
$items = DB::table('investigations')->pluck('name', 'id');
|
||||
} elseif ($item_type == 4) {
|
||||
$items = DB::table('drugs')->pluck('name', 'id');
|
||||
} elseif ($item_type == 5) {
|
||||
$items = DB::table('sundries')->where('available', 1)->pluck('name', 'id');
|
||||
} elseif ($item_type == 6) {
|
||||
$items = DB::table('inpatient_bed_categories')->pluck('name', 'id');
|
||||
} else {
|
||||
$items = [];
|
||||
}
|
||||
|
||||
return view('insurance::insurance_reports.insurance_expenditure_details', compact('insurance_claims', 'start_date', 'end_date', 'item_type_name', 'items', 'item_type'));
|
||||
}
|
||||
|
||||
public function expired_premiums_search(Request $request)
|
||||
{
|
||||
$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) && $search_by != "3"){
|
||||
if($search_by == "1"){
|
||||
// custom date
|
||||
$start_date_search = Carbon::parse($reg_date)->startOfDay()->toDateString();
|
||||
$end_date_search = Carbon::parse($reg_date)->endOfDay()->toDateString();
|
||||
} elseif($search_by == "2"){
|
||||
// custom date range
|
||||
$start_date_search = Carbon::parse($start_date)->startOfDay()->toDateString();
|
||||
$end_date_search = Carbon::parse($end_date)->endOfDay()->toDateString();
|
||||
} else {
|
||||
$start_date_search = Carbon::now()->subDay()->toDateString();
|
||||
$end_date_search = Carbon::now()->toDateString();
|
||||
}
|
||||
|
||||
$insurance_premiums = DB::select("SELECT insurance_subscriptions.group_id, end_date, start_date, amount, payment_date, covered_member_ids,covered_member_premiums_paid FROM insurance_subscriptions INNER JOIN (SELECT group_id, MAX(end_date) AS max_end_date FROM insurance_subscriptions GROUP BY group_id) ms ON insurance_subscriptions.group_id = ms.group_id AND end_date = max_end_date WHERE end_date BETWEEN '{$start_date_search}' AND '{$end_date_search}'");
|
||||
} else {
|
||||
$insurance_premiums = DB::select("SELECT insurance_subscriptions.group_id, end_date, start_date, amount, payment_date, covered_member_ids,covered_member_premiums_paid FROM insurance_subscriptions INNER JOIN (SELECT group_id, MAX(end_date) AS max_end_date FROM insurance_subscriptions GROUP BY group_id) ms ON insurance_subscriptions.group_id = ms.group_id AND end_date = max_end_date");
|
||||
}
|
||||
|
||||
return view('insurance::insurance_reports.expired_insurance', compact('insurance_premiums'));
|
||||
}
|
||||
|
||||
}
|
||||
+249
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Streamline\Models\InsuranceBenefit;
|
||||
use Streamline\Models\InsuranceTariff;
|
||||
|
||||
class InsuranceTariffsController extends Controller {
|
||||
|
||||
public function add_tariff($benefit_id, $item_id, $item_type) {
|
||||
$benefit = InsuranceBenefit::find($benefit_id);
|
||||
$item = false;
|
||||
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$item = DB::table('services')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 2:
|
||||
$item = DB::table('procedures')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 3:
|
||||
$item = DB::table('investigations')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 4:
|
||||
$item = DB::table('drugs')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 5:
|
||||
$item = DB::table('sundries')->where('id', $item_id)->first();
|
||||
break;
|
||||
}
|
||||
|
||||
$item_details = get_item_insurance_details($item_id, $item_type, $benefit_id);
|
||||
|
||||
$item_name = $item ? $item->name : '';
|
||||
$item_cash_price = $item ? $item->non_insured_price : 0;
|
||||
$co_payment = $item_details ? $item_details['co_payment'] : 0;
|
||||
$ipd_co_payment = $item_details ? ($item_details['ipd_co_payment'] ?? 0) : 0;
|
||||
|
||||
return view('insurance::insurance_tariffs.add_tariff', compact('benefit', 'item_type', 'item_name', 'item_id', 'item_cash_price', 'co_payment', 'ipd_co_payment'));
|
||||
}
|
||||
|
||||
public function save_tariff(Request $request) {
|
||||
request()->validate([
|
||||
'age_limit_start' => 'nullable|required_with:age_limit_end|integer',
|
||||
'age_limit_end' =>'bail|nullable|required_with:age_limit_start|integer'
|
||||
]);
|
||||
|
||||
$tariff = new InsuranceTariff();
|
||||
$tariff->benefit_id = $request->benefit_id;
|
||||
$tariff->plan_id = get_name($request->benefit_id, 'id', 'plan_id', 'insurance_benefits');
|
||||
$tariff->item_id = $request->item_id;
|
||||
$tariff->item_type = $request->item_type;
|
||||
$tariff->name = $request->tariff_name;
|
||||
$tariff->age_limit = $request->age_limit_start . ',' . $request->age_limit_end;
|
||||
$tariff->age_type = $request->age_type;
|
||||
$tariff->gender = $request->gender;
|
||||
$tariff->authorisation_required = $request->authorisation;
|
||||
$tariff->tariff_price = $request->tariff_price;
|
||||
$tariff->ipd_tariff_price = $request->ipd_tariff_price;
|
||||
$tariff->created_by = Auth::id();
|
||||
|
||||
try {
|
||||
$tariff->save();
|
||||
flash("Tariff has been added to the item")->success();
|
||||
return redirect('/insurance_benefits/view_items/' . $request->benefit_id . '/' . $request->item_type);
|
||||
} catch (\Exception $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function get_item_tariffs($benefit_id, $item_id, $item_type) {
|
||||
$tariffs = InsuranceTariff::where('benefit_id', $benefit_id)
|
||||
->where('item_id', $item_id)->where('item_type', $item_type)->get();
|
||||
$time_periods = [0 => 'Days', 1 => 'Months', 2 => 'Years'];
|
||||
$genders = [0 => 'All', 1 => 'Male', 2 => 'Female'];
|
||||
|
||||
if (count($tariffs) > 0) {
|
||||
$return_code = "<table class='table table-striped color-bordered-table success-bordered-table'>";
|
||||
$return_code .= "<thead><tr><th>" . __('insurance_benefits.tariff_name') . "</th>";
|
||||
$return_code .= "<th>" . __('insurance_benefits.gender') . "</th><th>" . __('insurance_benefits.age_limit') . "</th>";
|
||||
$return_code .= "<th>" . __('insurance_benefits.tariff_price') . "</th><th>" . __('insurance_benefits.ipd_tariff_price') . "</th><th>" . __('insurance_benefits.authorisation') . "</th>";
|
||||
$return_code .= "<th></th><th></th></tr></thead>";
|
||||
$return_code .= "</thead>";
|
||||
$return_code .= "<tbody>";
|
||||
|
||||
foreach ($tariffs as $tariff) {
|
||||
$age_limits = explode(",", $tariff->age_limit);
|
||||
$return_code .= "<tr>";
|
||||
$return_code .= "<td>" . $tariff->name . "</td>";
|
||||
$return_code .= "<td>" . ($genders[$tariff->gender] ?? 'All') . "</td>";
|
||||
$return_code .= "<td>" . ($age_limits[0] ?? "0") . ' to ' . ($age_limits[1] ?? "0") . ' ' . $time_periods[$tariff->age_type] ?? 'years' . "</td>";
|
||||
$return_code .= "<td>" . ugandan_shillings($tariff->tariff_price) . "</td>";
|
||||
$return_code .= "<td>" . ugandan_shillings($tariff->ipd_tariff_price) . "</td>";
|
||||
$return_code .= "<td>" . ($tariff->authorisation == 1 ? 'Yes' : 'No') . "</td>";
|
||||
$return_code .= "<td>" . (Auth::user()->can('insurance-tariffs-edit') ? "<a href='/insurance_tariffs/edit/" . $tariff->id . "' class='btn btn-success btn-sm btn-rounded'>Edit</a>" : "") . "</td>";
|
||||
$return_code .= "<td>" . (Auth::user()->can('insurance-tariffs-delete') ? "<a href='/insurance_tariffs/delete/" . $tariff->id . "' class='btn btn-danger btn-sm btn-rounded' onclick='return confirm(\"Are you sure?\")'>Deactivate</a>" : "") . "</td>";
|
||||
$return_code .= "</tr>";
|
||||
}
|
||||
$return_code .= "</tbody>";
|
||||
|
||||
$return_code .= "</table>";
|
||||
|
||||
return $return_code;
|
||||
} else {
|
||||
return "<h3 class='text-center'><code>No tariffs registered for this item</code></h3>";
|
||||
}
|
||||
}
|
||||
|
||||
public function edit($id) {
|
||||
$tariff = InsuranceTariff::find($id);
|
||||
$benefit = InsuranceBenefit::find($tariff->benefit_id);
|
||||
$item_id = $tariff->item_id;
|
||||
$item_type = $tariff->item_type;
|
||||
$item = false;
|
||||
|
||||
switch ($item_type) {
|
||||
case 1:
|
||||
$item = DB::table('services')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 2:
|
||||
$item = DB::table('procedures')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 3:
|
||||
$item = DB::table('investigations')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 4:
|
||||
$item = DB::table('drugs')->where('id', $item_id)->first();
|
||||
break;
|
||||
case 5:
|
||||
$item = DB::table('sundries')->where('id', $item_id)->first();
|
||||
break;
|
||||
}
|
||||
|
||||
$item_details = get_item_insurance_details($item_id, $item_type, $tariff->benefit_id);
|
||||
|
||||
$item_name = $item ? $item->name : '';
|
||||
$item_cash_price = $item ? $item->non_insured_price : 0;
|
||||
$co_payment = $item_details ? $item_details['co_payment'] : 0;
|
||||
$ipd_co_payment = $item_details ? ($item_details['ipd_co_payment'] ?? 0) : 0;
|
||||
|
||||
return view('insurance::insurance_tariffs.edit', compact('tariff', 'benefit', 'item_type', 'item_name', 'item_id', 'co_payment', 'item_cash_price', 'ipd_co_payment'));
|
||||
}
|
||||
|
||||
public function update_tariff(Request $request) {
|
||||
request()->validate([
|
||||
'age_limit_start' => 'nullable|required_with:age_limit_end|integer',
|
||||
'age_limit_end' =>'bail|nullable|required_with:age_limit_start|integer'
|
||||
]);
|
||||
$tariff = InsuranceTariff::find($request->tariff_id);
|
||||
|
||||
$tariff->name = $request->name;
|
||||
$tariff->age_limit = $request->age_limit_start . ',' . $request->age_limit_end;
|
||||
$tariff->age_type = $request->age_type;
|
||||
$tariff->gender = $request->gender;
|
||||
$tariff->authorisation_required = $request->authorisation;
|
||||
$tariff->tariff_price = $request->tariff_price;
|
||||
$tariff->ipd_tariff_price = $request->ipd_tariff_price;
|
||||
$tariff->updated_by = Auth::id();
|
||||
|
||||
try {
|
||||
$tariff->save();
|
||||
flash("Tariff has been edited")->success();
|
||||
return redirect('/insurance_benefits/view_items/' . $tariff->benefit_id . '/' . $tariff->item_type);
|
||||
} catch (\Exception $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($id) {
|
||||
$tariff = InsuranceTariff::find($id);
|
||||
|
||||
try {
|
||||
$tariff->delete();
|
||||
flash("Insurance Tariff has been deactivated")->success();
|
||||
return redirect("/insurance_benefits/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function view_tariffs(Request $request) {
|
||||
$filters = [];
|
||||
$search_text = '';
|
||||
|
||||
$services = DB::table('services')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$sundries = DB::table('sundries')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$insurance_benefits = DB::table('insurance_benefits')->whereNull('deleted_at')->pluck('name', 'id')->toArray();
|
||||
$insurance_benefits = ['' => '-- select --'] + $insurance_benefits;
|
||||
$insurance_plans = DB::table('community_health_insurance_plans')->whereNull('deleted_at')->pluck('name', 'id')->toArray();
|
||||
$insurance_plans = ['' => '-- select --'] + $insurance_plans;
|
||||
|
||||
if (!is_null($request->insurance_benefit) && is_numeric($request->insurance_benefit)) {
|
||||
$filters[] = ['benefit_id', '=', $request->insurance_benefit];
|
||||
$search_text = "Insurance Benefit: " . $insurance_benefits[$request->insurance_benefit] . " ";
|
||||
}
|
||||
|
||||
if (!is_null($request->insurance_plan) && is_numeric($request->insurance_plan)) {
|
||||
$filters[] = ['plan_id', '=', $request->insurance_plan];
|
||||
$search_text = "Insurance Plan: " . $insurance_plans[$request->insurance_plan];
|
||||
}
|
||||
|
||||
$tariffs = InsuranceTariff::where($filters)->get();
|
||||
|
||||
return view('insurance::insurance_tariffs.view_tariffs', compact('tariffs', 'services', 'procedures', 'investigations', 'drugs', 'sundries', 'insurance_benefits', 'insurance_plans', 'search_text'));
|
||||
}
|
||||
|
||||
public function view_inactive_tariffs() {
|
||||
$services = DB::table('services')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$procedures = DB::table('procedures')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$investigations = DB::table('investigations')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$sundries = DB::table('sundries')->whereNull('deleted_at')->pluck('name', 'id');
|
||||
$insurance_benefits = DB::table('insurance_benefits')->whereNull('deleted_at')->pluck('name', 'id')->toArray();
|
||||
$insurance_benefits = ['' => '-- select --'] + $insurance_benefits;
|
||||
$insurance_plans = DB::table('community_health_insurance_plans')->whereNull('deleted_at')->pluck('name', 'id')->toArray();
|
||||
$insurance_plans = ['' => '-- select --'] + $insurance_plans;
|
||||
|
||||
$tariffs = InsuranceTariff::onlyTrashed()->get();
|
||||
|
||||
if (count($tariffs) < 1) {
|
||||
flash()->error("There is no inactive tariffs");
|
||||
return redirect('/insurance_tariffs/view_tariffs');
|
||||
} else {
|
||||
return view('insurance::insurance_tariffs.view_inactive_tariffs', compact('tariffs', 'services', 'procedures', 'investigations', 'drugs', 'sundries', 'insurance_benefits', 'insurance_plans'));
|
||||
}
|
||||
}
|
||||
|
||||
public function activate_tariff($id) {
|
||||
$tariff = InsuranceTariff::withTrashed()->find($id);
|
||||
|
||||
if($tariff->restore()){
|
||||
flash("Insurance tariff has been activated.")->success();
|
||||
} else {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
}
|
||||
|
||||
return redirect('/insurance_tariffs/view_tariffs');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Streamline\Models\PersonTitle;
|
||||
|
||||
class PersonTitleController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:person-title-list', ['only' => ['index']]);
|
||||
$this->middleware('permission:person-title-detail', ['only' => ['show']]);
|
||||
$this->middleware('permission:person-title-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:person-title-edit', ['only' => ['edit', 'edit_all', 'update', 'update_all', 'updatePatientEpisode']]);
|
||||
$this->middleware('permission:person-title-delete', ['only' => ['destroy']]);
|
||||
$this->middleware('permission:person-title-status', ['only' => ['activate, inactive']]);
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
$person_titles = PersonTitle::orderBy('name', 'asc')->paginate(50);
|
||||
|
||||
return view('insurance::person_titles.index', compact('person_titles'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
*/
|
||||
public function create() {
|
||||
return view('insurance::person_titles.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
flash($string)->error();
|
||||
return back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
else {
|
||||
$person_title = new PersonTitle;
|
||||
|
||||
$person_title->name = $request->name;
|
||||
$person_title->created_by = Auth::user()->id;
|
||||
$person_title->updated_by = Auth::user()->id;
|
||||
|
||||
try {
|
||||
$person_title->save();
|
||||
flash($request->name . " person_title has been saved")->success();
|
||||
return redirect("/person_titles/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param \Streamline\person_titles $person_titles
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$person_title = PersonTitle::where(['id' => $id])->first();
|
||||
|
||||
if (!$person_title) {
|
||||
flash()->error("There is no such person title");
|
||||
return redirect('/person_titles/');
|
||||
} else {
|
||||
return view('insurance::person_titles.edit', compact('person_title'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Streamline\person_titles $person_titles
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, PersonTitle $person_titles)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
//flash($string)->error();
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
|
||||
$person_title = PersonTitle::find($request->id);
|
||||
$person_title->name = $request->name;
|
||||
$person_title->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$person_title->save();
|
||||
flash($request->name . " person title has been updated")->success();
|
||||
return redirect("/person_titles/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param \Streamline\person_titles $person_titles
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$person_title = PersonTitle::find($id);
|
||||
|
||||
if ($person_title->delete()):
|
||||
flash("person title has been deleted.")->success();
|
||||
return redirect('/person_titles/');
|
||||
endif;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
*/
|
||||
public function inactive()
|
||||
{
|
||||
$person_titles = PersonTitle::onlyTrashed()->orderBy('name', 'asc') ->paginate(50);
|
||||
|
||||
if (count($person_titles) < 1) {
|
||||
flash()->error("There is no inactive person_title");
|
||||
return redirect('/person_titles/');
|
||||
} else {
|
||||
return view('insurance::person_titles.inactive', compact('person_titles'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function activate($id)
|
||||
{
|
||||
$person_title = PersonTitle::withTrashed()->find($id);
|
||||
|
||||
if ($person_title->restore()):
|
||||
flash("Person title has been activated.")->success();
|
||||
return redirect('/person_titles/inactive');
|
||||
endif;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Insurance\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Streamline\Http\Controllers\Controller;
|
||||
use Streamline\Models\Risk;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RiskController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:insurance-risk-list', ['only' => ['index']]);
|
||||
$this->middleware('permission:insurance-risk-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:insurance-risk-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:insurance-risk-delete', ['only' => ['destroy', 'inactive', 'activate']]);
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$risks = Risk::all();
|
||||
return view('insurance::risks.index', compact('risks'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('insurance::risks.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validatedData = $request->validate([
|
||||
'code' => 'required|max:8|unique:community_health_insurance_risks',
|
||||
'name' => 'required|max:30',
|
||||
'factor' => 'required',
|
||||
'amount' => 'required'
|
||||
]);
|
||||
$validatedData['created_by'] = Auth::user()->id;
|
||||
Risk::create($validatedData);
|
||||
return redirect()->route('risks.index')->with('success','Risk created successfully.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$risk = Risk::findOrFail($id);
|
||||
return view('insurance::risks.show', compact('risk'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$risk = Risk::findOrFail($id);
|
||||
return view('insurance::risks.edit', compact('risk'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$risk = Risk::findOrFail($id);
|
||||
$validatedData = $request->validate([
|
||||
'code' => 'required|max:8|unique:community_health_insurance_risks,code,'.$id,
|
||||
'name' => 'required|max:30',
|
||||
'factor' => 'required',
|
||||
'amount' => 'required'
|
||||
]);
|
||||
$validatedData['updated_by'] = Auth::user()->id;
|
||||
$risk->update($validatedData);
|
||||
return redirect()->route('risks.index')->with('success','Risk updated successfully.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$risk = Risk::findOrFail($id);
|
||||
$risk->delete();
|
||||
|
||||
return redirect()->route('risks.index')->with('success','Risk deleted successfully');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function inactive()
|
||||
{
|
||||
$risks = Risk::onlyTrashed()->get();
|
||||
return view('insurance::risks.inactive', compact('risks'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function activate($id)
|
||||
{
|
||||
$risk = Risk::onlyTrashed()->findOrFail($id);
|
||||
|
||||
if ($risk->restore()) return redirect()->route('risks.index')->with('success','Risk Activated successfully');
|
||||
else {
|
||||
flash()->error("Budget hasn't been activated.");
|
||||
return redirect()->route('risks.inactive');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user