Files
streamline-emr/docker/streamline-src/Modules/WardManagement/Http/Controllers/WardsConsumptionController.php
T

624 lines
40 KiB
PHP
Executable File

<?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'));
}
}