mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
437 lines
22 KiB
PHP
Executable File
437 lines
22 KiB
PHP
Executable File
<?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)) ? '     <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>© ' . date('Y') . ' Stre@mline</i>' . $print_footer);
|
|
|
|
return $pdf->inline('Ward Item Request Details' . date(" d-m-y h:ia") . '.pdf');
|
|
}
|
|
}
|