mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
624 lines
40 KiB
PHP
Executable File
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'));
|
|
}
|
|
}
|