resolved conflicts

This commit is contained in:
2025-03-31 03:46:05 +03:00
6454 changed files with 1520539 additions and 9 deletions
@@ -0,0 +1,13 @@
<?php
namespace Modules\WardManagement\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;
}
@@ -0,0 +1,174 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Streamline\Models\HmisWard;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class HmisWardController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('permission:hmis-ward-list', ['only' => ['index', 'select']]);
$this->middleware('permission:hmis-ward-create', ['only' => ['create', 'store']]);
$this->middleware('permission:hmis-ward-edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:hmis-ward-delete', ['only' => ['destroy', 'inactive', 'activate']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$wards = HmisWard::orderBy('name', 'asc')->paginate(50);
return view('ward_management::hmis_wards.index', compact('wards'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('ward_management::hmis_wards.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|string|max:255|unique:hmis_wards',
'slug' => 'required|string|max:255|unique:hmis_wards',
]);
if ($validator->fails()) {
$string = "";
foreach ($validator->errors()->getMessages() as $item) {
$string .= "{$item[0]}<br>";
}
flash($string)->error();
return back()->withErrors($validator)->withInput();
} else {
$ward = new HmisWard;
$ward->name = $request->name;
$ward->slug = $request->slug;
$ward->created_by = auth()->user()->id;
$ward->save();
flash($request->name . " Hmis Ward has been created")->success();
return redirect("/hmis_wards/");
}
}
/**
* 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)
{
$ward = HmisWard::findOrFail($id);
return view('ward_management::hmis_wards.edit', compact('ward'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255|unique:hmis_wards,name,'.$id,
'slug' => 'required|string|max:255|unique:hmis_wards,slug,'.$id,
]);
if ($validator->fails()) {
$string = "";
foreach ($validator->errors()->getMessages() as $item) {
$string .= "{$item[0]}<br>";
}
flash($string)->error();
return back()->withErrors($validator)->withInput();
} else {
$ward = HmisWard::find($id);
$ward->name = $request->name;
$ward->slug = $request->slug;
$ward->updated_by = auth()->user()->id;
$ward->save();
flash($request->name . " Hmis Ward has been updated")->success();
return redirect("/hmis_wards/");
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$ward = HmisWard::findOrFail($id);
if ($ward->delete()) {
flash("Hmis Ward has been deleted.")->success();
return redirect('/hmis_wards/');
}
}
/**
* Display a listing of the inactive resource(s).
*
* @return \Illuminate\Http\Response
*/
public function inactive()
{
$wards = HmisWard::onlyTrashed()->orderBy('created_at', 'desc')->paginate(50);
return view('ward_management::hmis_wards.inactive', compact('wards'));
}
/**
* Activate the specified resource in storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function activate($id)
{
$ward = HmisWard::onlyTrashed()->findOrFail($id);
if ($ward->restore()) {
flash("Hmis Ward has been activated.")->success();
return redirect('/hmis_wards/');
} else {
flash()->error("Hmis Ward hasn't been activated.");
return redirect()->route('hmis_wards.inactive');
}
}
}
@@ -0,0 +1,88 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Streamline\Models\InpatientInfo;
use Carbon\Carbon;
use Streamline\Models\Ward;
class InpatientBillsController extends Controller {
public function __construct() {
$this->middleware('auth');
$this->middleware('permission:incoming-inpatient-bills', ['only' => ['incoming_inpatient_bills']]);
}
public function incoming_inpatient_bills(Request $request) {
$filters = [];
if ($request->search_by == 1) {
$end = Carbon::yesterday()->endOfDay()->toDateTimeString();
$start = Carbon::yesterday()->startOfDay()->toDateTimeString();
$search_text = " Yesterday";
} else if ($request->search_by == 2) {
$end = Carbon::parse($request->reg_date)->endOfDay()->toDateTimeString();
$start = Carbon::parse($request->reg_date)->startOfDay()->toDateTimeString();
$search_text = " On: " . streamline_date($request->reg_date);
} else if ($request->search_by == 3) {
$end = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
$start = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$search_text = " Between: " . streamline_date($request->start_date) . " And " . streamline_date($request->end_date);
} else {
$end = Carbon::today()->endOfDay()->toDateTimeString();
$start = Carbon::today()->startOfDay()->toDateTimeString();
$search_text = " Today";
}
if(isset($request->ward_id) && $request->ward_id != 0){
$filters[] = ['inpatient_info.ward_id', '=', $request->ward_id];
}
if ($request->inpatient_status == 1) {
// patient still admitted in date range
$search_text = "Patients Still Admitted" . $search_text;
$inpatients_info = DB::table('inpatient_info')
->where('inpatient_info.discharged_on', '>', $end)
->OrWhereNull('inpatient_info.discharged_on')
->where('inpatient_info.admitted_on', '<', $end)
->join('patients', 'inpatient_info.patient_id', '=', 'patients.id')
->join('inpatient_bills', 'inpatient_info.id', '=', 'inpatient_bills.inpatient_info_id')
->select('inpatient_info.*', 'patients.category_id as patients_category_id', 'patients.number as patients_number',
'inpatient_bills.amount_to_pay as bills_amount_to_pay', 'inpatient_bills.invoices_amount as bills_invoices_amount', 'inpatient_bills.created_by as bills_created_by',
'inpatient_bills.updated_by as bills_updated_by', 'inpatient_bills.original_bill as bills_original_bill', 'inpatient_bills.amount_paid as bills_amount_paid')
->paginate(200);
} else {
if ($request->inpatient_status == 2) {
// patient discharge in data range
$filters[] = ['inpatient_info.discharged_on', '>', $start];
$filters[] = ['inpatient_info.discharged_on', '<', $end];
$filters[] = ['inpatient_info.discharged', '=', 1];
$search_text = "Patients Discharged" . $search_text;
} else {
// all patients
$filters[] = ['inpatient_info.created_at', '>', $start];
$filters[] = ['inpatient_info.created_at', '<', $end];
$search_text = "Patients Admitted" . $search_text;
}
$inpatients_info = DB::table('inpatient_info')
->where($filters)
->join('patients', 'inpatient_info.patient_id', '=', 'patients.id')
->join('inpatient_bills', 'inpatient_info.id', '=', 'inpatient_bills.inpatient_info_id')
->select('inpatient_info.*', 'patients.category_id as patients_category_id', 'patients.number as patients_number',
'inpatient_bills.amount_to_pay as bills_amount_to_pay', 'inpatient_bills.invoices_amount as bills_invoices_amount', 'inpatient_bills.created_by as bills_created_by',
'inpatient_bills.updated_by as bills_updated_by', 'inpatient_bills.original_bill as bills_original_bill', 'inpatient_bills.amount_paid as bills_amount_paid')
->paginate(200);
}
$patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id')->toArray();
$wards = DB::table('wards')->where('available', 1)->pluck('name', 'id')->toArray();
$wards = ['' => '- select -', '0' => 'All wards'] + $wards;
$inpatient_status = [0 => "All Patients", 1 => "Still Admitted", 2 => "Discharged"];
return view('ward_management::inpatient.incoming_bills',compact('inpatients_info','wards','inpatient_status', 'search_text', 'patient_categories'));
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,301 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Illuminate\Database\QueryException;
use Illuminate\Foundation\Application;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
use Modules\Cancer\Http\Controllers\CancerProtocolController;
use Modules\ClinicalData\Services\Drugs\DrugFormsService;
use Modules\ClinicalData\Services\Drugs\DrugRoutesService;
use Modules\ClinicalData\Services\Drugs\DrugsService;
use Modules\ClinicalData\Services\Drugs\DrugUnitsService;
use Modules\WardManagement\Services\TreatmentSheetService;
use Streamline\Models\OrderedCancerProtocols;
use Streamline\Models\Patient;
use Streamline\Models\TreatmentSheetDispensations;
use Streamline\Models\User;
use Streamline\Models\WardTreatment;
use Streamline\Models\WardTreatmentDispensation;
use Streamline\Services\UserService;
use Streamline\Services\WardManagement\WardTreatmentDispensationService;
class TreatmentSheetController extends Controller
{
public function __construct(
protected TreatmentSheetService $treatmentSheetService,
protected DrugsService $drugsService,
protected DrugRoutesService $drugRoutesService,
protected DrugUnitsService $drugUnitsService,
protected UserService $userService,
protected DrugFormsService $drugFormsService,
protected WardTreatmentDispensationService $dispensationService
) {
$this->middleware('auth');
}
public function viewTreatmentSheet(): View|RedirectResponse
{
$patient_id = session()->get('patient_id');
$episode_id = session()->get('episode_id');
$inpatient_info = DB::table('inpatient_info')->where('episode_id', $episode_id)->first();
if ($inpatient_info) {
$ward_id = $inpatient_info->ward_id;
} else {
return redirect('home');
}
$patient = Patient::find($patient_id);
$ordered_cancer_protocols = DB::table('ordered_cancer_protocols')
->whereNull('deleted_at')->where('episode_id', $episode_id)->get();
$drugs = $this->drugsService->pluckAvailableDrugs('name');
$drug_with_units = $this->drugsService->pluckAvailableDrugs('unit_id');
$drug_units = $this->drugUnitsService->pluckAvailableDrugUnits('name');
$drug_routes = $this->drugRoutesService->pluckAvailableDrugRoutes('name');
$drug_with_forms = $this->drugsService->pluckAvailableDrugs('form_id');
$drug_forms = $this->drugFormsService->pluckAvailableDrugForms('name');
$factors = CancerProtocolController::$factors;
$ward_prescriptions = WardTreatment::where('episode_id', $episode_id)->get();
$users_array = $this->userService->pluckUserFullName();
$users_array = ['' => '- select -'] + $users_array;
return view('ward_management::inpatient.treatment_sheet_view', compact('patient', 'episode_id', 'patient_id', 'inpatient_info',
'ordered_cancer_protocols', 'drugs', 'drug_with_units', 'drug_units', 'drug_routes', 'factors', 'ward_prescriptions', 'users_array',
'ward_id', 'drug_forms', 'drug_with_forms'));
}
public function saveTreatmentSheet(Request $request) {
$pre_chemo_given_on = $request->pre_chemo_given_on ?? [];
$pre_chemo_tracker_num = $request->pre_chemo_tracker_num ?? [];
$pre_chemo_given_by = $request->pre_chemo_given_by ?? [];
$pre_chemo_quantity_given = $request->pre_chemo_quantity_given ?? [];
$pre_chemo_order_id = $request->pre_chemo_order_id ?? [];
$chemo_given_on = $request->chemo_given_on ?? [];
$chemo_tracker_num = $request->chemo_tracker_num ?? [];
$chemo_given_by = $request->chemo_given_by ?? [];
$chemo_quantity_given = $request->chemo_quantity_given ?? [];
$chemo_order_id = $request->chemo_order_id ?? [];
$post_chemo_given_on = $request->post_chemo_given_on ?? [];
$post_chemo_tracker_num = $request->post_chemo_tracker_num ?? [];
$post_chemo_given_by = $request->post_chemo_given_by ?? [];
$post_chemo_quantity_given = $request->post_chemo_quantity_given ?? [];
$post_chemo_order_id = $request->post_chemo_order_id ?? [];
$patient_id = $request->patient_id;
$episode_id = $request->episode_id;
$ward_id = $request->ward_id;
$grouped_items = [];
$duration_counter = 0;
for ($x = 0; $x < count($pre_chemo_order_id); $x++) {
if (isset($pre_chemo_given_by[$x]) && isset($pre_chemo_given_on[$x]) && $pre_chemo_quantity_given[$x] > 0) {
$grouped_items[$pre_chemo_order_id[$x]]['pre_chemo'][$pre_chemo_tracker_num[$x]] = [
"pre_chemo_given_on" => $pre_chemo_given_on[$x],
"pre_chemo_given_by" => $pre_chemo_given_by[$x],
"pre_chemo_quantity_given" => $pre_chemo_quantity_given[$x]
];
}
}
for ($x = 0; $x < count($chemo_order_id); $x++) {
if (isset($chemo_given_by[$x]) && isset($chemo_given_on[$x]) && $chemo_quantity_given[$x] > 0) {
$grouped_items[$chemo_order_id[$x]]['chemo'][$chemo_tracker_num[$x]] = [
"chemo_given_on" => $chemo_given_on[$x],
"chemo_given_by" => $chemo_given_by[$x],
"chemo_quantity_given" => $chemo_quantity_given[$x]
];
}
}
for ($x = 0; $x < count($post_chemo_order_id); $x++) {
if (isset($post_chemo_given_by[$x]) && isset($post_chemo_given_on[$x]) && $post_chemo_quantity_given[$x] > 0) {
$grouped_items[$post_chemo_order_id[$x]]['post_chemo'][$post_chemo_tracker_num[$x]] = [
"post_chemo_given_on" => $post_chemo_given_on[$x],
"post_chemo_given_by" => $post_chemo_given_by[$x],
"post_chemo_quantity_given" => $post_chemo_quantity_given[$x]
];
}
}
foreach ($grouped_items as $key => $grouped_item) {
$ordered_protocol = OrderedCancerProtocols::find($key);
if ($ordered_protocol) {
$pre_chemo_drugs = json_decode($ordered_protocol->pre_chemo_drugs, true);
for($x = 0; $x < count($pre_chemo_drugs); $x++) {
for($i = 0; $i < count($pre_chemo_drugs[$x]['dose']); $i++) {
for($p = 0; $p < count($pre_chemo_drugs[$x]['dose'][$i]['duration']); $p++) {
if (isset($grouped_item['pre_chemo']) && isset($grouped_item['pre_chemo'][$duration_counter])) {
$pre_chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_by'] = $grouped_item['pre_chemo'][$duration_counter]['pre_chemo_given_by'];
$pre_chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_on'] = $grouped_item['pre_chemo'][$duration_counter]['pre_chemo_given_on'];
$pre_chemo_drugs[$x]['dose'][$i]['duration'][$p]['quantity_given'] = $grouped_item['pre_chemo'][$duration_counter]['pre_chemo_quantity_given'];
$this->dispensationService->saveDispensation($patient_id, $episode_id, $pre_chemo_drugs[$x]['drug_id'], $grouped_item['pre_chemo'][$duration_counter]['pre_chemo_quantity_given'], 0, $ward_id);
$ordered_protocol->pre_chemo_status = 1;
}
$duration_counter++;
}
}
}
$ordered_protocol->pre_chemo_drugs = json_encode($pre_chemo_drugs);
$chemo_drugs = json_decode($ordered_protocol->chemo_drugs, true);
for($x = 0; $x < count($chemo_drugs); $x++) {
for($i = 0; $i < count($chemo_drugs[$x]['dose']); $i++) {
for($p = 0; $p < count($chemo_drugs[$x]['dose'][$i]['duration']); $p++) {
if (isset($grouped_item['chemo']) && isset($grouped_item['chemo'][$duration_counter])) {
$chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_by'] = $grouped_item['chemo'][$duration_counter]['chemo_given_by'];
$chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_on'] = $grouped_item['chemo'][$duration_counter]['chemo_given_on'];
$chemo_drugs[$x]['dose'][$i]['duration'][$p]['quantity_given'] = $grouped_item['chemo'][$duration_counter]['chemo_quantity_given'];
$this->dispensationService->saveDispensation($patient_id, $episode_id, $chemo_drugs[$x]['drug_id'], $grouped_item['chemo'][$duration_counter]['chemo_quantity_given'], 0, $ward_id);
$ordered_protocol->chemo_status = 1;
}
$duration_counter++;
}
}
}
$ordered_protocol->chemo_drugs = json_encode($chemo_drugs);
$post_chemo_drugs = json_decode($ordered_protocol->post_chemo_drugs, true);
for($x = 0; $x < count($post_chemo_drugs); $x++) {
for($i = 0; $i < count($post_chemo_drugs[$x]['dose']); $i++) {
for($p = 0; $p < count($post_chemo_drugs[$x]['dose'][$i]['duration']); $p++) {
if (isset($grouped_item['post_chemo']) && isset($grouped_item['post_chemo'][$duration_counter])) {
$post_chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_by'] = $grouped_item['post_chemo'][$duration_counter]['post_chemo_given_by'];
$post_chemo_drugs[$x]['dose'][$i]['duration'][$p]['given_on'] = $grouped_item['post_chemo'][$duration_counter]['post_chemo_given_on'];
$post_chemo_drugs[$x]['dose'][$i]['duration'][$p]['quantity_given'] = $grouped_item['post_chemo'][$duration_counter]['post_chemo_quantity_given'];
$this->dispensationService->saveDispensation($patient_id, $episode_id, $post_chemo_drugs[$x]['drug_id'], $grouped_item['post_chemo'][$duration_counter]['post_chemo_quantity_given'], 0, $ward_id);
$ordered_protocol->post_chemo_status = 1;
}
$duration_counter++;
}
}
}
$ordered_protocol->post_chemo_drugs = json_encode($post_chemo_drugs);
try {
$ordered_protocol->save();
} catch (QueryException $e) {
return 0;
}
}
}
// handle the rest of the treatments
$opd_given_by = $request->opd_given_by ?? [];
$opd_given_on = $request->opd_given_on ?? [];
$opd_order_number = $request->opd_order_number ?? [];
$opd_ward_treatment_id = $request->opd_ward_treatment_id ?? [];
$opd_drug_id = $request->opd_drug_id ?? [];
$opd_quantity_given = $request->opd_quantity_given ?? [];
for ($x = 0; $x < count($opd_given_by); $x++) {
if (isset($opd_given_by[$x]) && isset($opd_given_on[$x])) {
$dispensations = new TreatmentSheetDispensations();
$dispensations->patient_id = $patient_id;
$dispensations->episode_id = $episode_id;
$dispensations->ward_treatment_id = $opd_ward_treatment_id[$x];
$dispensations->order_number = $opd_order_number[$x];
$dispensations->drug_id = $opd_drug_id[$x];
$dispensations->quantity_given = $opd_quantity_given[$x];
$dispensations->given_by = $opd_given_by[$x];
$dispensations->given_on = $opd_given_on[$x];
$dispensations->created_by = Auth::id();
$dispensations->save();
$this->dispensationService->saveDispensation($patient_id, $episode_id, $opd_drug_id[$x], $opd_quantity_given[$x], 0, $ward_id);
}
}
if (session()->has('treatment_sheet_route')) {
$treatment_sheet_route = session()->get('treatment_sheet_route');
session()->forget('treatment_sheet_route');
return $treatment_sheet_route;
} else {
return "self";
}
}
public function printTreatmentSheet($episode_id)
{
$ordered_cancer_protocols = DB::table('ordered_cancer_protocols')
->whereNull('deleted_at')->where('episode_id', $episode_id)->get();
$ward_prescriptions = WardTreatment::where('episode_id', $episode_id)->get();
$drugs = $this->drugsService->pluckAvailableDrugs('name');
$drug_with_units = $this->drugsService->pluckAvailableDrugs('unit_id');
$drug_units = $this->drugUnitsService->pluckAvailableDrugUnits('name');
$drug_routes = $this->drugRoutesService->pluckAvailableDrugRoutes('name');
$factors = CancerProtocolController::$factors;
$inpatient_info = DB::table('inpatient_info')->where('episode_id', $episode_id)->first();
if ($inpatient_info) {
$patient_id = $inpatient_info->patient_id;
$ward_id = $inpatient_info->ward_id;
$admitted_on = $inpatient_info->admitted_on;
} else {
return redirect('home');
}
$patient = Patient::find($patient_id);
$users_array = $this->userService->pluckUserFullName();
$users_array = ['' => '- select -'] + $users_array;
$data = [
"patient" => $patient,
"users_array" => $users_array,
"ordered_cancer_protocols" => $ordered_cancer_protocols,
"ward_prescriptions" => $ward_prescriptions,
"factors" => $factors,
"drug_routes" => $drug_routes,
"drug_with_units" => $drug_with_units,
"drug_units" => $drug_units,
"drugs" => $drugs,
"ward_id" => $ward_id,
"admitted_on" => $admitted_on,
];
$pdf = SnappyPDF::loadView('ward_management::inpatient/print_treatment_sheet', $data)
->setOrientation('portrait')
->setOption('margin-bottom', 7)
->setOption('margin-top', 5)
->setOption('footer-html', '<i>Stre@mline</i>');
return $pdf->inline('Inpatient Bill' . date(" d-m-y h:ia") . '.pdf');
}
public function redirectBack(): RedirectResponse
{
$treatment_sheet_route = session()->get('treatment_sheet_route');
session()->forget('treatment_sheet_route');
if ($treatment_sheet_route === "ward_home") {
return redirect('/wards/select');
} else {
return redirect('/patient_episodes');
}
}
}
@@ -0,0 +1,540 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Carbon\Carbon;
use Illuminate\Database\Query\Builder;
use Illuminate\Http\Request;
use Streamline\Models\ChartOfAccount;
use Streamline\Models\StreamlineSetupStep;
use Streamline\Models\Ward;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\QueryException;
use Streamline\Models\InpatientInfo;
use Streamline\Models\Patient;
use Streamline\Models\PatientEpisode;
use Streamline\Models\WardStock;
use Streamline\Models\HmisWard;
use Streamline\Models\WardStockReconciliation;
use Streamline\Services\StreamlineSetupServiceInterface;
class WardController extends Controller {
public function __construct(
protected StreamlineSetupServiceInterface $setupService
) {
$this->middleware('auth');
$this->middleware('permission:ward-list', ['only' => ['index', 'select']]);
$this->middleware('permission:ward-create', ['only' => ['create', 'store']]);
$this->middleware('permission:ward-edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:ward-delete', ['only' => ['destroy', 'inactive', 'activate']]);
}
public static $ward_types = ['maternity' => 'Maternity Ward', 'theatre' => 'Theatre Ward', 'psychiatric'=>'Psychiatric ward','emergency'=>'Emergency ward'];
/**
* Display a listing of the resource.
*/
public function index()
{
$wards = DB::table('wards')->leftJoin('hmis_wards', 'hmis_wards.id', '=', 'wards.hmis_ward_id')->whereNull('wards.deleted_at')
->select('wards.*', 'hmis_wards.name as hmis_ward')->orderby('name', 'asc')->get();
$inpatient_wards = InpatientInfo::distinct('ward_id')->pluck('ward_id', 'ward_id')->toArray();
$ward_types = static::$ward_types;
return view('ward_management::wards.index', compact('wards', 'inpatient_wards', 'ward_types'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$wards = ['CHILDREN', 'MEDICAL LOWER (ISOLATION)', 'MATERNITY', 'MEDICAL UPPER', 'PSYCHIATRY Ahumuza Centre', 'REHABILITATION', 'SPECIAL CARE BABY UNIT', 'SURGICAL MALE', 'SURGICAL FEMALE', 'THEATRE', 'OPD', 'NIGHT NURSES CUPBOARD', 'DEMO TEST WARD', 'SCHOOL OF NURSING', 'GYNAECOLOGY WARD'];
$ward_types = HmisWard::all('name', 'id');
$actual_ward_types = static::$ward_types;
return view('ward_management::wards.create', compact('wards', 'ward_types', 'actual_ward_types'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//validation passed
if (isset($request->skip)&& $request->skip == 'skip') {
//update the streamline setup table with the new finished step
$this->setupService->saveStep("wards registration", 1);
return redirect("service_items/create");
} else {
$ward = new Ward;
$ward->name = $request->name;
$ward->available = $request->available;
$ward->beds = $request->beds;
$ward->hmis_ward_id = $request->type;
$ward->type = $request->ward_type;
if ($request->type == '4') $ward->slug = 'maternity';
$ward->created_by = Auth::id();
try {
if (!is_null($ward->name)) {
$ward->save();
}
if (session()->has('streamline_setup')) {
if (isset($request->other_wards)) {
$other_wards_array = $request->other_wards;
$other_beds_array = $request->other_ward_beds;
$other_ward_types_array = $request->other_ward_types;
for ($i = 0; $i < count($other_wards_array); $i++) {
$ward = new Ward;
$ward->name = $other_wards_array[$i];
$ward->beds = $other_beds_array[$i];
$ward->slug = $other_ward_types_array[$i];
$ward->created_by = Auth::id();
$ward->save();
}
}
if (isset($request->selected_wards)) {
$selected_wards_array = $request->selected_wards;
if (!empty($selected_wards_array)) {
for ($i = 0; $i < count($selected_wards_array); $i++) {
$ward = new Ward;
$ward->name = $selected_wards_array[$i];
$ward->beds = 0;
$ward->created_by = Auth::id();
$ward->save();
}
}
}
//update the streamline setup table with the new finished step
$this->setupService->saveStep("wards registration", 1);
flash("Wards have been added")->success();
return redirect("service_items/create");
}
flash($request->name . " Ward has been saved")->success();
return redirect("/wards/");
} catch (QueryException $e) {
flash("An error occurred")->error();
return back()->withInput();
}
}
}
/**
* 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)
{
$ward = Ward::where(['id' => $id])->first();
$ward_types = HmisWard::all('name', 'id')->toArray();
$actual_ward_types = static::$ward_types;
$selected_ward_type = '';
if (!$ward) {
flash()->error("Ward not found");
return redirect('/wards/');
} else {
if (!empty($ward->hmis_ward_id)) {
$hmis_ward_id = $ward->hmis_ward_id;
$other_ward_types = array_filter($ward_types, function ($item) use ($hmis_ward_id) {
return $item['id'] !== $hmis_ward_id;
});
$selected_ward_type = array_filter($ward_types, function ($item) use ($hmis_ward_id) {
return $item['id'] == $hmis_ward_id;
});
} else $other_ward_types = $ward_types;
return view('ward_management::wards.edit', compact('ward', 'other_ward_types', 'selected_ward_type', 'actual_ward_types'));
}
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
request()->validate([
'name' => 'required',
'beds' => 'required',
'type' => 'required'
]);
//validation passed
$ward = Ward::findOrFail($id);
$ward->name = $request->name;
$ward->beds = $request->beds;
$ward->available = $request->available;
$ward->hmis_ward_id = $request->type;
$ward->type = $request->ward_type;
if ($request->type == '4') $ward->slug = 'maternity';
$ward->updated_by = Auth::id();
try {
$ward->save();
flash($request->name . " Ward has been updated")->success();
return redirect("/wards/");
} catch (QueryException $e) {
flash("An error occurred")->error();
return back()->withInput();
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$ward = Ward::findOrFail($id);
if ($ward->delete()) {
flash("Ward has been deleted.")->success();
return redirect('/wards/');
}
}
/**
* Display a listing of the inactive resource(s).
*
* @return \Illuminate\Http\Response
*/
public function inactive()
{
$wards = Ward::onlyTrashed()
->orderBy('name', 'asc')
->paginate(50);
if (empty($wards)) {
flash()->error("There is no inactive ward");
return redirect('/wards/');
} else {
return view('ward_management::wards.inactive', compact('wards'));
}
}
/**
* Activate the specified resource in storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function activate($id)
{
$ward = Ward::withTrashed()->find($id);
if ($ward->restore()) :
flash("Ward has been activated.")->success();
return redirect('/wards/inactive');
endif;
}
public function select(Request $request)
{
$ward_id = $request->ward_id;
$search_by = $request->search_by;
$reg_date = $request->reg_date;
$start_date = $request->start_date;
$end_date = $request->end_date;
$patient_id = $request->patient_id;
if (!isset($ward_id) && !isset($search_by)) {
$ward_id = session()->get('ward_id');
$search_by = session()->get('search_by');
$reg_date = session()->get('reg_date');
$start_date = session()->get('start_date');
$end_date = session()->get('end_date');
$patient_id = session()->get('ward_patient_id');
} else {
session()->put('ward_id', $ward_id);
session()->put('search_by', $search_by);
session()->put('reg_date', $reg_date);
session()->put('start_date', $start_date);
session()->put('end_date', $end_date);
session()->put('ward_patient_id', $patient_id);
}
$patient_id = empty($patient_id) ? false : $patient_id;
$ward_id = empty($ward_id) ? false : $ward_id;
if ($search_by === '0') {
$start_date = Carbon::today()->startOfCentury()->toDateTimeString();
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
} elseif($search_by == 2){
$start_date = Carbon::yesterday()->startOfDay()->toDateTimeString();
$end_date = Carbon::yesterday()->endOfDay()->toDateTimeString();
} elseif($search_by == 3 && !empty($reg_date)){
// custom date
$start_date = Carbon::createFromFormat('d/m/Y', $reg_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::createFromFormat('d/m/Y', $reg_date)->endOfDay()->toDateTimeString();
} elseif($search_by == 4 && !(empty($start_date) || empty($end_date))){
// custom date range
$start_date = Carbon::createFromFormat('d/m/Y', $start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::createFromFormat('d/m/Y', $end_date)->endOfDay()->toDateTimeString();
} else {
$start_date = Carbon::now()->startOfDay()->toDateTimeString();
$end_date = Carbon::now()->endOfDay()->toDateTimeString();
}
$inpatients = DB::table('inpatient_info as i')->leftJoin('patients as p', 'p.id','i.patient_id')->leftJoin('inpatient_bed_categories as b','b.id', 'i.bed_category_id')
->leftJoin('wards as w','w.id', 'i.ward_id')->leftJoin('triage as t','t.episode_id', 'i.episode_id')->leftJoin('diagnoses as d','d.id', 'i.primary_diagnosis')
->where('i.discharged', 0)
->when($ward_id, function (Builder $query, string $ward_id) {
$query->where('i.ward_id', $ward_id);
})
->when($patient_id, function (Builder $query, string $patient_id) {
$query->where('i.patient_id', $patient_id);
})
->whereBetween('i.created_at', [$start_date, $end_date])
->whereNull('p.deleted_at')
->select('i.episode_id', 'i.patient_id', 'i.id','i.bed_no','i.bed_category_id','i.admitted_on', 'i.primary_diagnosis', 'i.comments', 'i.ward_id',
'b.name as bed_category', 'p.number', 'p.gender','p.date_of_birth','w.slug', 't.severe_grade','d.name as primary_diagnosis_name')
->orderBy('i.created_at', 'desc')->get();
if (!is_null($ward_id)) {
if ($ward_id != 0) {
$search_text = get_name($ward_id, 'id', 'name', 'wards');
} else {
$search_text = 'All Wards';
}
} else {
$search_text = __('wards.no_ward_selected');
}
$search_text .= " From " . streamline_date($start_date) . " to " . streamline_date($end_date);
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck("name", "id")->toArray();
$wards = [0 => 'All Wards'] + $wards;
$wards = ['' => '- select -'] + $wards;
return view('ward_management::wards.select', compact('inpatients', 'wards', 'ward_id', 'search_text'));
}
/* submit bed category sent via ajax from the ward sheet containing patients */
public function submit_bed_category(Request $request)
{
$bed_category = $request->bed_category;
$inpatient_id = $request->inpatient_id;
$inpatient_info_collection = InpatientInfo::where(['id' => $inpatient_id])->get();
if (!is_null($inpatient_info_collection)) {
$inpatient_info = $inpatient_info_collection->first();
$inpatient_info->bed_category_id = $bed_category;
if ($inpatient_info->update()) {
return "success";
}
}
return "error";
}
/* submit bed number sent via ajax from the ward sheet containing patients */
public function submit_bed_number(Request $request)
{
$bed_number = $request->bed_no;
$inpatient_id = $request->inpatient_id;
$inpatient_info_collection = InpatientInfo::where(['id' => $inpatient_id])->get();
if (!is_null($inpatient_info_collection)) {
$inpatient_info = $inpatient_info_collection->first();
$inpatient_info->bed_no = $bed_number;
if ($inpatient_info->update()) {
return "success";
}
}
return "error";
}
/* submit ward message sent via ajax from the ward sheet containing patients */
public function submit_ward_message(Request $request)
{
$comments = $request->comment;
$patient_id = $request->patient_id;
$episode_id = $request->episode_id;
$inpatient_info_collection = InpatientInfo::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
if (!is_null($inpatient_info_collection)) {
$inpatient_info = $inpatient_info_collection->first();
$inpatient_info->comments = $comments;
if ($inpatient_info->update()) {
return "success";
}
}
return "error";
}
//set episode and patient_id for selected patient
public function route_patient_episode(Request $request)
{
$episode_id = $request->episode_id;
$patient_id = PatientEpisode::find($episode_id)->patient_id;
session()->put('episode_id', $episode_id);
session()->put('patient_id', $patient_id);
switch ($request->submit) {
case 'triage':
return redirect('/triage/');
case 'consultation':
return redirect('/consultation/route');
case 'create_anaesthetics':
return redirect('anaesthetics/create');
case 'create_surgery':
return redirect('theatre_surgery/create');
case 'anaesthetics_history':
return redirect('anaesthetics/history');
case 'surgery_index':
return redirect('theatre_surgery');
case 'inpatient_sheet':
case 'maternity_summary':
return redirect('in_patient_sheet');
case 'inpatient_billing':
return redirect('inpatient_billing');
case 'maternity_admission':
// return redirect('maternity_inpatient_sheet');
return redirect('/maternity_admission/route');
break;
case 'labour_ward_admission':
return redirect('labour_ward_admission_sheet');
break;
case 'labour_ward_admission_sheet_details':
return redirect('labour_ward_admission_sheet_details');
break;
case 'edit_labour_ward_admission_sheet':
return redirect('edit_labour_ward_admission_sheet');
break;
case 'delivery_record':
return redirect('maternity_delivery_record');
case 'treatment_sheet':
session()->put(['treatment_sheet_route' => 'ward_home']);
return redirect('treatment_sheet/view');
default:
return redirect('/patient_episodes/');
}
}
public function drugs_stock_sheet(Request $request)
{
$ward_id = null;
$ward_stock_records = [];
$ward_id = $request->ward_id;
$wards = Ward::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
if (!is_null($ward_id)) {
$ward_stock_records = WardStock::where(['ward_id' => $ward_id, 'item_type' => 1])->get();
}
return view('ward_management::wards.drugs_stock_sheet', compact('ward_stock_records', 'wards', 'ward_id'));
}
public function update_drugs_stock_sheet(Request $request)
{
$ward_id = $request->ward_id;
$batch_drugs_ids_array = $request->batch_drug_id;
$batch_watcher_ids_array = $request->item_batch_watcher_id;
$batch_numbers_array = $request->batch_number;
$batch_quantity_array = $request->batch_quantity;
$batch_unit_cost_array = $request->batch_unit_cost;
$batch_expiry_dates_array = $request->batch_expiry_date;
$batch_db_record_ids_array = $request->item_batch_watcher_id;
$stock_adjustment_chart_of_account = ChartOfAccount::where('slug', 'stock_adjustment')->first();
$affected_account_id = $stock_adjustment_chart_of_account->id;
for ($i = 0; $i < count($batch_drugs_ids_array); $i++) {
$max_stock_count_identifier = DB::table('ward_stock_reconciliations')->max('stock_count_identifier');
//enforce double entry per batch
account_for_batch_reconciliations_difference($item_type = 1, $batch_drugs_ids_array[$i], $affected_account_id, $batch_numbers_array[$i], $batch_quantity_array[$i], Carbon::now()->toDateString(), "ward", $ward_id);
reconcile_batches($item_type = 1, $batch_drugs_ids_array[$i], $batch_numbers_array[$i], $batch_quantity_array[$i], $batch_expiry_dates_array[$i], "ward", $batch_unit_cost_array[$i] ?? 0, $batch_db_record_ids_array[$i] ?? 0, $ward_id);
$physical_stock = new WardStockReconciliation;
$physical_stock->item_type = 1;
$physical_stock->item_id = $batch_drugs_ids_array[$i];
$physical_stock->physical_stock = $batch_quantity_array[$i];
$physical_stock->completion_status = 1;
$physical_stock->affected_account_id = $affected_account_id;
$physical_stock->general_comment = $request->general_comment;
$physical_stock->created_by = Auth::id();
$physical_stock->save();
//add the stock_count_identifier of the newly counted stock
$physical_stock_record_to_update = WardStockReconciliation::find($physical_stock->id);
$physical_stock_record_to_update->stock_count_identifier = $max_stock_count_identifier + 1; //increase ID by 1 for new
$physical_stock_record_to_update->update();
$drug_ward_stock = WardStock::where(['ward_id' => $ward_id, 'item_type' => 1, 'item_id' => $batch_drugs_ids_array[$i]])->first();
$drug_ward_stock->ward_item_stock = $batch_quantity_array[$i];
$drug_ward_stock->update();
}
flash("Ward stock has been updated")->success();
return redirect('ward_drugs_stock_sheet');
}
public function sundries_stock_sheet(Request $request)
{
$ward_id = null;
$ward_stock_records = [];
$ward_id = $request->ward_id;
$wards = Ward::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
if (!is_null($ward_id)) {
$ward_stock_records = WardStock::where(['ward_id' => $ward_id, 'item_type' => 2])->get();
}
return view('ward_management::wards.sundries_stock_sheet', compact('ward_stock_records', 'wards', 'ward_id'));
}
public function update_sundries_stock_sheet(Request $request)
{
$ward_id = $request->ward_id;
$sundry_ids_array = $request->sundry_id;
$quantity_array = $request->quantity;
for ($i = 0; $i < count($sundry_ids_array); $i++) {
$sundry_ward_stock = WardStock::where(['ward_id' => $ward_id, 'item_type' => 2, 'item_id' => $sundry_ids_array[$i]])->first();
$sundry_ward_stock->ward_item_stock = $quantity_array[$i];
$sundry_ward_stock->update();
}
return redirect('ward_sundries_stock_sheet');
}
public function home()
{
return view('ward_management::wards.home');
}
}
@@ -0,0 +1,436 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Streamline\Models\HospitalInformation;
use Streamline\Models\User;
use Streamline\Models\WardItemRequest;
use Illuminate\Support\Facades\DB;
use Streamline\Models\Sundry;
use Streamline\Models\Drug;
use Streamline\Models\GeneralItem;
use Streamline\Services\UserService;
class WardItemRequestController extends Controller {
protected UserService $userService;
public function __construct(
UserService $userService
) {
$this->userService = $userService;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* 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)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
/* incoming ward drug requests */
public function incoming_ward_requests(Request $request) {
$search_complete = null;
$ward_item_requests = null;
$start_date = null; $end_date = null;
if (!is_null($request->item_type)) {
$search_complete = 1;
$start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
if ($request->ward_id) {
$ward_item_requests = WardItemRequest::where('item_type', $request->item_type)->where('ward_id',$request->ward_id)->whereBetween('created_at', [$start_date, $end_date])->orderBy('created_at','desc')
->get();
} else {
$ward_item_requests = WardItemRequest::where('item_type', $request->item_type)
->whereBetween('created_at', [$start_date, $end_date])->orderBy('created_at','desc')
->get();
}
} else {
//show drug requests of last 24 hours
$last_24_hours = Carbon::now()->subDay()->toDateTimeString();
$ward_item_requests = WardItemRequest::where('created_at', '>=', $last_24_hours)->orderBy('created_at','desc')->get();
}
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
return view('ward_management::ward_item_requests.incoming_ward_requests',compact('wards','search_complete', 'ward_item_requests', 'start_date', 'end_date','wards'));
}
/* ward request form */
public function ward_item_requests(Request $request) {
$item_type = null; $ward_id = null; $drugs_requested = null; $general_items_requested = null; $sundries_requested = null;
$drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id');
$sundries = DB::table('sundries')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id');
$general_items = DB::table('general_items')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id');
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
$all_ward_item_requests = WardItemRequest::whereNull('dispensation_status')->paginate(500);
if (!is_null($request->item_type)) {
$ward_id = $request->ward;
$item_type = $request->item_type;
if($item_type == "1"){
$drugs_requested = $request->drugs_requested;
} else if($item_type == "2"){
$sundries_requested = $request->sundries_requested;
} else {
$general_items_requested = $request->general_items_requested;
}
}
return view('ward_management::ward_item_requests.ward_item_request',compact('drugs','wards','sundries', 'general_items', 'item_type','ward_id',
'drugs_requested', 'sundries_requested', 'general_items_requested', 'all_ward_item_requests'));
}
/* store ward drug requests */
public function store_ward_item_requests(Request $request) {
if (in_array(null, $request->quantity_requested)) {
flash("Please fill in the required fields")->error();
return back()->withInput();
}
$ward_drug_request = new WardItemRequest;
$ward_drug_request->ward_id = $request->ward_id;
$ward_drug_request->item_type = $request->item_type;
$ward_drug_request->item_ids = implode(",", $request->item_id);
$ward_drug_request->item_quantities = implode(",", $request->quantity_requested);
$ward_drug_request->balance_on_ward_during_request = implode(",", $request->balance_on_ward_during_request);
$ward_drug_request->balance_returned = implode(",", $request->balance_returned);
$ward_drug_request->item_unit_cost = implode(",", $request->item_unit_cost);
$ward_drug_request->order_comment = $request->order_comment;
$ward_drug_request->created_by = Auth::id();
$ward_drug_request->save();
flash('Ward request has been successfully submitted')->success();
return redirect('ward_item_requests');
}
/* show details of a ward item request */
public function ward_item_request_details(Request $request)
{
$ward_request_id = $request->ward_item_request_id;
$ward_request_details = WardItemRequest::find($ward_request_id);
$staff_array = $this->userService->pluckUserFullName();
$batches_array = [];
return view('ward_management::ward_item_requests.ward_item_request_details',compact('ward_request_details','staff_array', 'batches_array'));
}
/* store a ward item request action */
public function store_ward_item_request_details_action(Request $request)
{
$ward_request_id = $request->ward_request_id;
$approved_button = $request->approve;
$dispensed_button = $request->dispense;
$ward_request_record = WardItemRequest::find($ward_request_id);
$ward_id = $ward_request_record->ward_id;
$item_ids_array = $request->item_ids;
$dispensed_batches_array = $request->dispensed_from_batch;
$ward_request_record->item_quantities_approved = implode(",", $request->quantity_approved);
$ward_request_record->item_ids_issued_out = implode(",", $request->item_ids);
$ward_request_record->quantity_issued_out = implode(",", $request->quantity_issued_out);
if (isset($approved_button)) {
$ward_request_record->comment = $request->comment;
$ward_request_record->approved_status = 1;
$ward_request_record->approved_by = Auth::id();
$ward_request_record->approval_date = Carbon::now();
$ward_request_record->update();
flash('ward request has been approved')->success();
return redirect('incoming_ward_requests');
} elseif (isset($dispensed_button)) {
$ward_request_record->received_by = $request->received_by;
$ward_request_record->dispensation_status = 1;
$ward_request_record->dispensed_by = Auth::id();
$ward_request_record->dispensation_date = Carbon::parse($request->dispensation_date)->toDateTimeString();
$received_from_stores_or_pharmacy = $request->received_from;
$balance_returned_array = $request->balance_returned;
$item_quantities_issued_out_array = $request->quantity_issued_out;
// 1 - means received from pharmacy, 2 means received from stores so do the respective stock reduction
if ($received_from_stores_or_pharmacy == 1) {
$ward_request_record->issued_from = "pharmacy";
if ($ward_request_record->item_type == 1) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$drug = Drug::find($item_ids_array[$i]);
if ($drug && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $drug->pharmacy_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$drug->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$drug->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 1, $ward_id, null, null, null);
update_ward_stock($ward_id, 1, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_pharmacy_to_ward($item_type = 1, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id);
}
}
} elseif ($ward_request_record->item_type == 2) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$sundry = Sundry::find($item_ids_array[$i]);
if ($sundry && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $sundry->pharmacy_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$sundry->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$sundry->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 2, $ward_id, null, null, null);
update_ward_stock($ward_id, 2, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_pharmacy_to_ward($item_type = 2, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id);
}
}
} elseif ($ward_request_record->item_type == 3) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$general_item = GeneralItem::find($item_ids_array[$i]);
if ($general_item && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $general_item->pharmacy_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$general_item->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$general_item->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 3, $ward_id, null, null, null);
update_ward_stock($ward_id, 3, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_pharmacy_to_ward($item_type = 6, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id);
}
}
}
} elseif ($received_from_stores_or_pharmacy == 2) {
$ward_request_record->issued_from = "store";
if ($ward_request_record->item_type == 1) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$drug = Drug::withTrashed()->find($item_ids_array[$i]);
if ($drug && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $drug->store_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$drug->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$drug->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 1, $ward_id, null, null, null);
update_ward_stock($ward_id, 1, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_store_to_ward($item_type = 1, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id);
//cater for drug batch processing
/* $batch_number = null;
if (batch_tracking_method() == "manual") {
$batch_number = $dispensed_batches_array[$i] ?? null;
}
$item_batch_calculations = batch_calculations_for_item_based_on_fifo($item_ids_array[$i], $quantity_approved, $batch_number, $item_type = 1); */
}
}
} elseif ($ward_request_record->item_type == 2) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$sundry = Sundry::withTrashed()->find($item_ids_array[$i]);
if ($sundry && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $sundry->store_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$sundry->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$sundry->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 2, $ward_id, null, null, null);
update_ward_stock($ward_id, 2, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_store_to_ward($item_type = 2, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id);
//cater for sundries batch processing
/* $batch_number = null;
if (batch_tracking_method() == "manual") {
$batch_number = $dispensed_batches_array[$i] ?? null;
}
$item_batch_calculations = batch_calculations_for_item_based_on_fifo($item_ids_array[$i], $quantity_approved, $batch_number, $item_type = 2); */
}
}
} elseif ($ward_request_record->item_type == 3) {
for ($i=0; $i < count($item_ids_array) ; $i++) {
$general_item = GeneralItem::find($item_ids_array[$i]);
if ($general_item && !is_null($dispensed_batches_array[$i])) {
$stock_before_making_necessary_calculations = $general_item->store_stock;
$balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i];
$quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i];
$general_item->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved;
$general_item->update();
// return the drugs to pharmacy
reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 3, $ward_id, null, null, null);
update_ward_stock($ward_id, 3, $item_ids_array[$i], $item_quantities_issued_out_array[$i]);
move_batch_item_from_store_to_ward($item_type = 6, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id);
}
}
}
}
$ward_request_record->update();
flash('Items for '.get_name($ward_request_record->ward_id, "id", "name", "wards").' have been successfully dispensed')->success();
return view('ward_management::ward_item_requests.print_ward_item_request_receipt',compact('ward_request_record'));
}
}
public function show_ward_item_request_details_action(Request $request)
{
$ward_request_id = $request->ward_request_id;
$ward_request_details = WardItemRequest::find($ward_request_id);
return view('ward_management::ward_item_requests.ward_request_show',compact('ward_request_details'));
}
public function ward_item_request_edit(Request $request)
{
$ward_request_id = $request->ward_request_id;
$ward_request_details = WardItemRequest::find($ward_request_id);
$search_status = false;
return view('ward_management::ward_item_requests.ward_item_request_edit',compact('ward_request_details', 'search_status'));
}
public function edit_ward_item_request_search(Request $request)
{
$ward_request_id = $request->ward_request_id;
$ward_request_details = WardItemRequest::find($ward_request_id);
$search_status = true;
$selected_item_ids_array = $request->items_ids;
return view('ward_management::ward_item_requests.ward_item_request_edit',compact('ward_request_details', 'search_status', 'selected_item_ids_array'));
}
public function update_ward_item_requests(Request $request)
{
$ward_request_id = $request->ward_request_id;
$ward_item_request = WardItemRequest::find($ward_request_id);
$ward_item_request->item_ids = implode(",", $request->item_ids);
$ward_item_request->item_quantities = implode(",", $request->item_quantities);
$ward_item_request->balance_on_ward_during_request = implode(",", $request->balance_on_ward_during_request);
$ward_item_request->balance_returned = implode(",", $request->balance_returned);
$ward_item_request->item_unit_cost = implode(",", $request->item_unit_cost);
$ward_item_request->order_comment = $request->order_comment;
$ward_item_request->created_by = Auth::id();
$ward_item_request->save();
flash('Ward request has been successfully submitted')->success();
return redirect('ward_item_requests');
}
public function ward_item_request_delete(Request $request)
{
$ward_request_id = $request->ward_request_id;
$ward_item_request = WardItemRequest::find($ward_request_id);
$ward_item_request->delete();
flash('Ward request has been successfully deleted')->error();
return redirect('ward_item_requests');
}
public function print_ward_item_request_details($id) {
$ward_request_record = WardItemRequest::find($id);
return view('ward_management::ward_item_requests.print_ward_item_request_receipt',compact('ward_request_record'));
}
public function print_ward_item_request_details_pdf($id) {
$ward_request_record = WardItemRequest::find($id);
$hospital_information = HospitalInformation::find(1);
$data = [
'ward_request_record' => $ward_request_record,
'hospitalInfo' => $hospital_information
];
$print_footer = (!is_null($hospital_information->print_footer)) ? '&nbsp&nbsp&nbsp&nbsp&nbsp<i>' . $hospital_information->print_footer . '</i>' : '';
$pdf = SnappyPDF::loadView("ward_management::ward_item_requests/print_ward_item_request_details_pdf", $data)
->setOrientation('portrait')
->setPaper('a4')
->setOption('margin-bottom', 5)
->setOption('margin-top', 5)
->setOption('footer-html', '<i>&copy; ' . date('Y') . ' Stre@mline</i>' . $print_footer);
return $pdf->inline('Ward Item Request Details' . date(" d-m-y h:ia") . '.pdf');
}
}
@@ -0,0 +1,623 @@
<?php
namespace Modules\WardManagement\Http\Controllers;
use Illuminate\Http\Request;
use Streamline\Models\WardSundryDispensation;
use Streamline\Models\WardTreatment;
use Streamline\Models\WardTreatmentDispensation;
use Streamline\Models\WardItemRequest;
use Streamline\Models\WardDispensing;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Streamline\Models\PatientDispensing;
use Streamline\Models\Requisition;
class WardsConsumptionController extends Controller
{
/**
* Display a listing of the resource.
*
*/
public function index() {
return redirect('ward_consumption_report');
}
/*
* Details drill down for the report
*/
public function wards_consumption_details(Request $request)
{
$filters = [];
$report_by = $request->report_by;
$ward_id = $request->ward_details_for;
$drug_id = $request->drug_details_for;
$start_date = $request->start_date;
$end_date = $request->end_date;
$ward_treatment_dispensations = [];
$ward_sundry_dispensations = [];
$sundries_issued_to_ward = [];
$general_items_issued_to_ward = [];
$sundry_id = null;
$general_items_id = null;
$ward_item_request_records = [];
$general_items_item_request_records = [];
if($request->search_by_details == 0){
// last 24 hours
$last_day = Carbon::now()->subDay();
array_push($filters, ['created_at', '>', $last_day]);
} elseif($request->search_by_details == 1){
// custom date
$start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
array_push($filters, ['created_at', '>', $start_date]);
array_push($filters, ['created_at', '<', $end_date]);
} elseif($request->search_by_details == 2){
// custom date range
$start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
array_push($filters, ['created_at', '>', $start_date]);
array_push($filters, ['created_at', '<', $end_date]);
}
if ($request->report_by == 3) {
$sundry_id = $request->sundries_details_for;
$ward_item_request_records = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 2])->where($filters)->get();
}else if ($request->report_by == 4) {
$sundry_id = $request->sundries_details_for;
$ward_id = $request->ward_details_for;
//$ward_item_request_records = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 2, 'ward_id' => $ward_id])->where($filters)->get();
$ward_sundry_dispensations = WardSundryDispensation::where('ward_id', $ward_id)->where('sundry_id', $sundry_id)->where($filters)->get();
} else if ($request->report_by == 6) {
$general_items_id = $request->general_items_details_for;
$ward_id = $request->ward_details_for;
//$ward_item_request_records = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 2, 'ward_id' => $ward_id])->where($filters)->get();
$ward_general_items_dispensations = WardSundryDispensation::where('ward_id', $ward_id)->where('general_items_id', $general_items_id)->where($filters)->get();
}
else{
$ward_treatment_dispensations = WardTreatmentDispensation::where('ward_id', $ward_id)->where('drug_id', $drug_id)->where($filters)->get();
}
return view('ward_management::wards_consumption.wards_consumption_details',compact('start_date','end_date','ward_id','drug_id','ward_treatment_dispensations','sundries_issued_to_ward', 'sundry_id', 'ward_item_request_records','report_by', 'ward_sundry_dispensations'));
}
public function ward_consumption_report(Request $request) {
$search_complete = true;
$consumption_filters = $ward_item_filters = [];
$selected_drug_id = 0;
$selected_sundry_id = 0;
$selected_general_items_id = 0;
$start_date = null; $end_date = null;
$report_by = $request->report_by;
$ward_id = $request->ward_id;
$search_text = "";
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
$drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$drugs = ['' => '- select -'] + $drugs;
$sundries = DB::table('sundries')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$sundries = ['' => '- select -'] + $sundries;
$general_items = DB::table('general_items')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$general_items = ['' => '- select -'] + $general_items;
if($request->search_by == 0){
// last 24 hours
$last_day = Carbon::now()->subDay();
array_push($consumption_filters, ['created_at', '>', $last_day]);
array_push($ward_item_filters, ['dispensation_date', '>', $last_day]);
} elseif($request->search_by == 1){
// custom date
$start_date = Carbon::parse($request->reg_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->reg_date)->endOfDay()->toDateTimeString();
array_push($consumption_filters, ['created_at', '>', $start_date]);
array_push($consumption_filters, ['created_at', '<', $end_date]);
array_push($ward_item_filters, ['dispensation_date', '>', $start_date]);
array_push($ward_item_filters, ['dispensation_date', '<', $end_date]);
} elseif($request->search_by == 2){
// custom date range
$start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
$end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
array_push($consumption_filters, ['created_at', '>', $start_date]);
array_push($consumption_filters, ['created_at', '<', $end_date]);
array_push($ward_item_filters, ['dispensation_date', '>', $start_date]);
array_push($ward_item_filters, ['dispensation_date', '<', $end_date]);
}
//loop through the collections and from an array
$patient_consumptions = $item_ids = $array_of_wards_to_loop = $patient_ids = [];
$item_consumption = $item_requests = [];
if ($request->report_by == 1) {
# report by drugs consumption per ward
//$ward_prescription_results = WardTreatment::where('ward_id', $ward_id)->where($consumption_filters)->get();
$ward_treatment_dispensation_results = WardTreatmentDispensation::where('ward_id', $ward_id)->where($consumption_filters)->get();
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 1, 'ward_id' => $ward_id])->where($ward_item_filters)->get();
$ward_dispensing_results = WardDispensing::where(['ward_id'=>$ward_id])->where($consumption_filters)->get();
$results = Requisition::where($consumption_filters)->get();
foreach ($ward_dispensing_results as $ward_dispensing) {
$issued_item_ids = explode(",", $ward_dispensing->drug_id);
$issued_item_quantities = explode(",", $ward_dispensing->quantity_dispensed);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if(!in_array($issued_item_ids[$i], $item_ids)) {$item_ids[] = $issued_item_ids[$i];}
if (isset($item_consumption[$issued_item_ids[$i]])) {
$item_consumption[$issued_item_ids[$i]] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$issued_item_ids[$i]] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
}
foreach ($ward_treatment_dispensation_results as $dispensation_record) {
if(!in_array($dispensation_record->drug_id, $item_ids)) $item_ids[] = $dispensation_record->drug_id;
$patient_ids[$dispensation_record->drug_id][] = $dispensation_record->patient_id;
$episode_ids[] = ['episode_id'=>$dispensation_record->episode_id, 'patient_id'=>$dispensation_record->patient_id, 'drug_id'=>$dispensation_record->drug_id];
$patient_consumptions[$dispensation_record->drug_id] = $dispensation_record->quantity_given + ($patient_consumptions[$dispensation_record->drug_id] ?? 0);
}
foreach ($ward_item_requests_results as $ward_item_request) {
$issued_item_ids = explode(",", $ward_item_request->item_ids_issued_out);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if(!in_array($issued_item_ids[$i], $item_ids)) {$item_ids[] = $issued_item_ids[$i];}
if (isset($item_consumption[$issued_item_ids[$i]])) {
$item_consumption[$issued_item_ids[$i]] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$issued_item_ids[$i]] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
$requested_item_ids = explode(",", $ward_item_request->item_ids);
$requested_item_quantities = explode(",", $ward_item_request->item_quantities);
for ($i=0; $i < count($requested_item_ids) ; $i++) {
if(!in_array($requested_item_ids[$i], $item_ids)) {$item_ids[] = $requested_item_ids[$i];}
if (isset($item_requests[$requested_item_ids[$i]])) {
$item_requests[$requested_item_ids[$i]] += (isset($requested_item_quantities[$i]) && is_numeric($requested_item_quantities[$i])) ? $requested_item_quantities[$i] : 0;
} else {
$item_requests[$requested_item_ids[$i]] = (isset($requested_item_quantities[$i]) && is_numeric($requested_item_quantities[$i])) ? $requested_item_quantities[$i] : 0;
}
}
}
$search_text = "Results for <b>" . ($wards[$ward_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
if ($ward_id == "pharmacy") {
if (count($results) > 0) {
foreach ($results as $pharmacy_record) {
$issued_item_ids = explode(",", $pharmacy_record->item_ids_issued_out);
$issued_item_quantities = explode(",", $pharmacy_record->quantity_issued);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if(!in_array($issued_item_ids[$i], $item_ids)) {$item_ids[] = $issued_item_ids[$i];}
if (isset($item_consumption[$issued_item_ids[$i]])) {
$item_consumption[$issued_item_ids[$i]] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$issued_item_ids[$i]] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
$requested_item_ids = explode(",", $pharmacy_record->drug_id);
$requested_item_quantities = explode(",", $pharmacy_record->quantity_requested);
for ($i=0; $i < count($requested_item_ids) ; $i++) {
if(!in_array($requested_item_ids[$i], $item_ids)) {$item_ids[] = $requested_item_ids[$i];}
if (isset($item_requests[$requested_item_ids[$i]])) {
$item_requests[$requested_item_ids[$i]] += (isset($requested_item_quantities[$i]) && is_numeric($requested_item_quantities[$i])) ? $requested_item_quantities[$i] : 0;
} else {
$item_requests[$requested_item_ids[$i]] = (isset($requested_item_quantities[$i]) && is_numeric($requested_item_quantities[$i])) ? $requested_item_quantities[$i] : 0;
}
}
}
}
$search_text = "Results for <b>Pharmacy</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
}
} elseif ($request->report_by == 2) {
# report for drug
$selected_drug_id = $request->drug_id;
$ward_treatment_dispensation_results = WardTreatmentDispensation::where('ward_id', 2)->where($consumption_filters)->get();
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 1])->where($ward_item_filters)->get();
$ward_dispensing_results = WardDispensing::where($consumption_filters)->whereRaw('FIND_IN_SET(' . $selected_drug_id . ',drug_id)')->get();
$results = DB::table('requisitions')->select('*')->whereNull('deleted_at')->where('quotation_type_id', 1)->whereRaw('FIND_IN_SET(' . $selected_drug_id . ',drug_id)')->whereBetween('created_at', [$start_date, $end_date])->get();
if (count($results) > 0) {
foreach ($results as $pharmacy_record) {
$issued_item_ids = explode(",", $pharmacy_record->item_ids_issued_out);
$issued_item_quantities = explode(",", $pharmacy_record->quantity_issued);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_drug_id == $issued_item_ids[$i]) {
if(!in_array("pharmacy", $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = "pharmacy";}
if (isset($item_consumption["pharmacy"])) {
$item_consumption["pharmacy"] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption["pharmacy"] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
}
//requested ids loop
$req_item_ids = explode(",", $pharmacy_record->drug_id);
$req_item_quantities = explode(",", $pharmacy_record->quantity_requested);
for ($i=0; $i < count($req_item_ids) ; $i++) {
if ($selected_drug_id == $req_item_ids[$i]) {
if(!in_array("pharmacy", $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = "pharmacy";}
if (isset($item_requests["pharmacy"])) {
$item_requests["pharmacy"] += (isset($req_item_quantities[$i]) && is_numeric($req_item_quantities[$i])) ? $req_item_quantities[$i] : 0;
} else {
$item_requests["pharmacy"] = (isset($req_item_quantities[$i]) && is_numeric($req_item_quantities[$i])) ? $req_item_quantities[$i] : 0;
}
}
}
}
}
if (count($ward_dispensing_results) > 0) {
foreach ($ward_dispensing_results as $ward_dispensing) {
$issued_item_ids = explode(",", $ward_dispensing->drug_id);
$issued_item_quantities = explode(",", $ward_dispensing->quantity_dispensed);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_drug_id == $issued_item_ids[$i]) {
if(!in_array($ward_dispensing->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_dispensing->ward_id;}
if (isset($item_consumption[$ward_dispensing->ward_id])) {
$item_consumption[$ward_dispensing->ward_id] += is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$ward_dispensing->ward_id] = is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
}
}
}
}
}
if (count($ward_treatment_dispensation_results) > 0) {
foreach ($ward_treatment_dispensation_results as $dispensation_record) {
if ($selected_drug_id == $dispensation_record->drug_id) {
if(!in_array($dispensation_record->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $dispensation_record->ward_id;}
$patient_consumptions[$dispensation_record->ward_id] = $dispensation_record->quantity_given + ($patient_consumptions[$dispensation_record->ward_id] ?? 0);
}
$patient_ids[$dispensation_record->drug_id][] = $dispensation_record->patient_id;
}
}
if (count($ward_item_requests_results) > 0) {
foreach ($ward_item_requests_results as $ward_item_request) {
//issued out loop
$issued_item_ids = explode(",", $ward_item_request->item_ids_issued_out);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_drug_id == $issued_item_ids[$i]) {
if(!in_array($ward_item_request->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_item_request->ward_id;}
if (isset($item_consumption[$ward_item_request->ward_id])) {
$item_consumption[$ward_item_request->ward_id] += is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$ward_item_request->ward_id] = is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
}
}
}
//requested ids loop
$req_item_ids = explode(",", $ward_item_request->item_ids);
$req_item_quantities = explode(",", $ward_item_request->item_quantities);
for ($i=0; $i < count($req_item_ids) ; $i++) {
if ($selected_drug_id == $req_item_ids[$i]) {
if(!in_array($ward_item_request->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_item_request->ward_id;}
if (isset($item_requests[$ward_item_request->ward_id])) {
$item_requests[$ward_item_request->ward_id] += (isset($req_item_quantities[$i]) && is_numeric($req_item_quantities[$i])) ? $req_item_quantities[$i] : 0;
} else {
$item_requests[$ward_item_request->ward_id] = (isset($req_item_quantities[$i]) && is_numeric($req_item_quantities[$i])) ? $req_item_quantities[$i] : 0;
}
}
}
}
}
$opd_dispensations = PatientDispensing::where($consumption_filters)->get();
if (count($opd_dispensations) > 0) {
foreach ($opd_dispensations as $opd_record) {
$opd_drugs_array = explode(",", $opd_record->drugs);
$opd_quantities_array = explode(",", $opd_record->quantity_dispensed);
for ($i=0; $i < count($opd_drugs_array); $i++) {
if ($selected_drug_id == $opd_drugs_array[$i]) {
if(!in_array("pharmacy", $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = "pharmacy";}
$patient_consumptions["pharmacy"] = ($opd_quantities_array[$i] ?? 0) + ($patient_consumptions["pharmacy"] ?? 0);
}
}
}
}
$search_text = "Results for <b>" . ($drugs[$selected_drug_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
} elseif ($request->report_by == 3) {
# report for sundry
$selected_sundry_id = $request->sundry_id;
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 2])->where($ward_item_filters)->get();
$ward_sundry_dispensation_results = WardSundryDispensation::where($consumption_filters)->get();
if (count($ward_item_requests_results) > 0) {
foreach ($ward_item_requests_results as $ward_item_request) {
$issued_item_ids = explode(",", $ward_item_request->item_ids_issued_out);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_sundry_id == $issued_item_ids[$i]) {
if(!in_array($ward_item_request->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_item_request->ward_id;}
if (isset($item_consumption[$ward_item_request->ward_id])) {
$item_consumption[$ward_item_request->ward_id] += is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$ward_item_request->ward_id] = is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
}
}
}
}
}
foreach ($ward_sundry_dispensation_results as $dispensation_record) {
if ($selected_sundry_id == $dispensation_record->sundry_id) {
if(!in_array($dispensation_record->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $dispensation_record->ward_id;}
if (isset($patient_consumptions[$dispensation_record->ward_id])) {
$patient_consumptions[$dispensation_record->ward_id] += $dispensation_record->quantity_given;
} else {
$patient_consumptions[$dispensation_record->ward_id] = $dispensation_record->quantity_given;
}
$patient_ids[$dispensation_record->sundry_id][] = $dispensation_record->patient_id;
}
}
$search_text = "Results for <b>" . ($sundries[$selected_sundry_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
} elseif ($request->report_by == 4) {
# report for sundries consumption per ward
$ward_sundry_dispensation_results = WardSundryDispensation::where('ward_id', $ward_id)->where($consumption_filters)->get();
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 2, 'ward_id' => $ward_id])->where($ward_item_filters)->get();
if (count($ward_sundry_dispensation_results) > 0) {
foreach ($ward_sundry_dispensation_results as $sundry_dispensation) {
if(!in_array($sundry_dispensation->sundry_id, $item_ids)) {$item_ids[] = $sundry_dispensation->sundry_id;}
if (isset($patient_consumptions[$sundry_dispensation->sundry_id])) {
$patient_consumptions[$sundry_dispensation->sundry_id] += $sundry_dispensation->quantity_given;
} else {
$patient_consumptions[$sundry_dispensation->sundry_id] = $sundry_dispensation->quantity_given;
}
$patient_ids[$sundry_dispensation->sundry_id][] = $sundry_dispensation->patient_id;
}
}
if (count($ward_item_requests_results) > 0) {
foreach ($ward_item_requests_results as $ward_item_request) {
$issued_item_ids = explode(",", $ward_item_request->item_ids);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if(!in_array($issued_item_ids[$i], $item_ids)) {$item_ids[] = $issued_item_ids[$i];}
if (isset($item_consumption[$issued_item_ids[$i]])) {
$item_consumption[$issued_item_ids[$i]] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$issued_item_ids[$i]] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
}
}
$search_text = "Results for <b>" . ($wards[$ward_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
} elseif ($request->report_by == 5) {
# report for general items
$selected_general_items_id = $request->general_items_id;
$ward_treatment_dispensation_results = WardTreatmentDispensation::where($consumption_filters)->get();
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 1])->where($ward_item_filters)->get();
$ward_dispensing_results = WardDispensing::where($consumption_filters)->get();
$general_items_ids_array = [];
if (count($ward_dispensing_results) > 0) {
foreach ($ward_dispensing_results as $ward_dispensing) {
$issued_item_ids = explode(",", $ward_dispensing->drug_id);
$issued_item_quantities = explode(",", $ward_dispensing->quantity_dispensed);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_drug_id == $issued_item_ids[$i]) {
if(!in_array($ward_dispensing->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_dispensing->ward_id;}
if (isset($item_consumption[$ward_dispensing->ward_id])) {
$item_consumption[$ward_dispensing->ward_id] += is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$ward_dispensing->ward_id] = is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
}
}
}
}
}
if (count($ward_treatment_dispensation_results) > 0) {
foreach ($ward_treatment_dispensation_results as $dispensation_record) {
if ($selected_drug_id == $dispensation_record->drug_id) {
if(!in_array($dispensation_record->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $dispensation_record->ward_id;}
if (isset($patient_consumptions[$dispensation_record->ward_id])) {
$patient_consumptions[$dispensation_record->ward_id] += $dispensation_record->quantity_given;
} else {
$patient_consumptions[$dispensation_record->ward_id] = $dispensation_record->quantity_given;
}
}
$patient_ids[$dispensation_record->drug_id][] = $dispensation_record->patient_id;
}
}
if (count($ward_item_requests_results) > 0) {
foreach ($ward_item_requests_results as $ward_item_request) {
$issued_item_ids = explode(",", $ward_item_request->item_ids);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if ($selected_drug_id == $issued_item_ids[$i]) {
if(!in_array($ward_item_request->ward_id, $array_of_wards_to_loop)) {$array_of_wards_to_loop[] = $ward_item_request->ward_id;}
if (isset($item_consumption[$ward_item_request->ward_id])) {
$item_consumption[$ward_item_request->ward_id] += is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$ward_item_request->ward_id] = is_numeric($issued_item_quantities[$i]) ? $issued_item_quantities[$i] : 0;
}
}
}
}
}
$search_text = "Results for <b>" . ($general_items[$selected_general_items_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
} elseif ($request->report_by == 6) {
$ward_item_requests_results = WardItemRequest::where(['dispensation_status' => 1, 'item_type' => 3, 'ward_id' => $ward_id])->where($ward_item_filters)->get();
if (count($ward_item_requests_results) > 0) {
foreach ($ward_item_requests_results as $ward_item_request) {
$issued_item_ids = explode(",", $ward_item_request->item_ids);
$issued_item_quantities = explode(",", $ward_item_request->quantity_issued_out);
for ($i=0; $i < count($issued_item_ids) ; $i++) {
if(!in_array($issued_item_ids[$i], $item_ids)) {
$item_ids[] = $issued_item_ids[$i];
}
if (isset($item_consumption[$issued_item_ids[$i]])) {
$item_consumption[$issued_item_ids[$i]] += (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
} else {
$item_consumption[$issued_item_ids[$i]] = (isset($issued_item_quantities[$i]) && is_numeric($issued_item_quantities[$i])) ? $issued_item_quantities[$i] : 0;
}
}
}
}
$search_text = "Results for <b>" . ($wards[$ward_id] ?? 'N/A') . "</b> from " . streamline_date($start_date) . " to " . streamline_date($end_date);
}
return view('ward_management::wards_consumption.ward_consumption_report',compact('start_date', 'end_date', 'wards', 'drugs','patient_ids', 'sundries', 'general_items', 'search_complete', 'report_by', 'ward_id', 'item_ids',
'patient_consumptions', 'array_of_wards_to_loop', 'selected_drug_id', 'selected_sundry_id', 'selected_general_items_id', 'search_text', 'item_consumption', 'start_date', 'end_date','item_requests'));
}
public function patient_drill_down(Request $request) {
$item_id = $request->item_id;
$start_date = $request->start_date;
$end_date = $request->end_date;
$ward_id = $request->ward_id;
$wards = unserialize($request->wards);
$patient_id_array = unserialize($request->patient_ids);
$ward_name = $wards[$ward_id];
if ($request->report_by == 1) {
$patients_results = WardTreatmentDispensation::join('patients', 'patients.id', '=', 'ward_treatment_dispensations.patient_id')
->leftjoin('inpatient_info', 'inpatient_info.episode_id', 'ward_treatment_dispensations.episode_id')
->whereBetween('ward_treatment_dispensations.created_at', [$start_date, $end_date])->where([['drug_id', $item_id],['ward_treatment_dispensations.ward_id', $ward_id]])
->get(['ward_treatment_dispensations.quantity_given', 'ward_treatment_dispensations.created_at as date_given',
'patients.number', 'patients.id', 'patients.gender', 'patients.date_of_birth', 'ward_treatment_dispensations.episode_id', 'primary_diagnosis','other_diagnoses','right_eye_diagnosis','left_eye_diagnosis']);
$name = get_name($item_id, 'id', 'name', 'drugs');
} elseif ($request->report_by == 3) {
$patients_results = WardSundryDispensation::join('patients', 'patients.id', '=', 'ward_sundry_dispensations.patient_id')
->whereBetween('ward_sundry_dispensations.created_at', [$start_date, $end_date])->where('sundry_id', $item_id)
->where('ward_id', $ward_id)->get(['ward_sundry_dispensations.quantity_given', 'ward_sundry_dispensations.created_at as date_given',
'patients.number', 'patients.id', 'patients.gender', 'patients.date_of_birth']);
$name = get_name($item_id, 'id', 'name', 'sundries');
} elseif ($request->report_by == 4) {
$patients_results = WardSundryDispensation::join('patients', 'patients.id', '=', 'ward_sundry_dispensations.patient_id')
->whereBetween('ward_sundry_dispensations.created_at', [$start_date, $end_date])->where('sundry_id', $item_id)
->where('ward_id', $ward_id)->get(['ward_sundry_dispensations.quantity_given', 'ward_sundry_dispensations.created_at as date_given',
'patients.number', 'patients.id', 'patients.gender', 'patients.date_of_birth']);
$name = get_name($item_id, 'id', 'name', 'sundries');
} else {
return redirect('ward_consumption_report');
}
return view('ward_management::wards_consumption.patient_drill_down', compact('patients_results', 'name', 'ward_name'));
}
public function issued_items_drill_down(Request $request){
//form variables for search form
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$wards = ['' => '- select -'] + $wards;
$wards = ['pharmacy' => 'Pharmacy'] + $wards;
$drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$drugs = ['' => '- select -'] + $drugs;
$sundries = DB::table('sundries')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$sundries = ['' => '- select -'] + $sundries;
$general_items = DB::table('general_items')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray();
$general_items = ['' => '- select -'] + $general_items;
$quotation_type_id = $item_type = 0;
//sent via request
$item_id = $request->item_id;
$start_date = $request->start_date;
$end_date = $request->end_date;
$ward_id = $request->ward_id;
$report_by = $request->report_by;
$wards = unserialize($request->wards);
$patient_id_array = unserialize($request->patient_ids);
$ward_name = $wards[$ward_id];
// if (isset($request->start_date) && isset($request->end_date)) {
// $start_date_string = Carbon::createFromFormat('Y-m-d', $start_date)->toDateTimeString();
// $end_date_string = Carbon::createFromFormat('Y-m-d', $end_date)->toDateTimeString();
// } else {
// $start_date_string = Carbon::now()->toDateTimeString();
// $end_date_string = Carbon::now()->toDateTimeString();
// }
$display = "Records details between " . streamline_date($start_date) . " and " . streamline_date($end_date);
$results = $ward_results = [];
if ($request->report_by == 1) {
// report by ward
if ($ward_id == "pharmacy") {
$results = DB::table('requisitions')
->select('*')->whereNull('deleted_at')
->where('quotation_type_id', 1)
->whereRaw('FIND_IN_SET(' . $item_id . ',drug_id)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for Pharmacy between " . streamline_date($start_date) . " and " . streamline_date($end_date);
} else {
$ward_results = DB::table('ward_item_requests')
->select('*')->whereNull('deleted_at')
->where(['item_type' => $quotation_type_id, 'ward_id' => $ward_id])
->whereRaw('FIND_IN_SET(' . $item_id . ',item_ids_issued_out)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for ".get_name($ward_id, "id", "name", "wards")." between " . streamline_date($start_date) . " and " . streamline_date($end_date);
}
} elseif ($request->report_by == 2) {
//report by drugs
$quotation_type_id = $item_type = 1;
if ($ward_id == "pharmacy") {
$results = DB::table('requisitions')
->select('*')->whereNull('deleted_at')
->where('quotation_type_id', $quotation_type_id)
->whereRaw('FIND_IN_SET(' . $item_id . ',drug_id)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for Pharmacy between " . streamline_date($start_date) . " and " . streamline_date($end_date);
} else {
$ward_results = DB::table('ward_item_requests')
->select('*')->whereNull('deleted_at')
->where(['item_type' => $quotation_type_id, 'ward_id' => $ward_id])
->whereRaw('FIND_IN_SET(' . $item_id . ',item_ids_issued_out)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for ".get_name($ward_id, "id", "name", "wards")." between " . streamline_date($start_date) . " and " . streamline_date($end_date);
}
} elseif ($request->report_by == 3) {
if ($ward_id == "pharmacy") {
$results = DB::table('requisitions')
->select('*')->whereNull('deleted_at')
->where('quotation_type_id', 2)
->whereRaw('FIND_IN_SET(' . $item_id . ',drug_id)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for Pharmacy between " . streamline_date($start_date) . " and " . streamline_date($end_date);
} else {
$ward_results = DB::table('ward_item_requests')
->select('*')->whereNull('deleted_at')
->where(['item_type' => 2, 'ward_id' => $ward_id])
->whereRaw('FIND_IN_SET(' . $item_id . ',item_ids_issued_out)')
->whereBetween('created_at', [$start_date, $end_date])
->get();
$display = "Records details for ".get_name($ward_id, "id", "name", "wards")." between " . streamline_date($start_date) . " and " . streamline_date($end_date);
}
}
return view('ward_management::wards_consumption.issued_items_drill_down', compact('start_date', 'end_date', 'wards', 'drugs', 'sundries', 'general_items', 'report_by', 'display', 'results', 'display', 'item_id', 'ward_results', 'item_type'));
}
}