mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 03:01:32 +00:00
updated streamline-setup v2
This commit is contained in:
+994
@@ -0,0 +1,994 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\ClinicalData\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Streamline\Models\ChartOfAccount;
|
||||
use Streamline\Models\Drug;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Streamline\Models\DrugCategory;
|
||||
use Streamline\Models\DrugForm;
|
||||
use Streamline\Models\DrugUnit;
|
||||
use Streamline\Models\PriceListCategories;
|
||||
use Streamline\Models\Supplier;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Streamline\Http\Controllers\StreamlineSetupManager;
|
||||
use Streamline\Models\Treatment;
|
||||
use Streamline\Models\WardTreatment;
|
||||
use Streamline\Models\ItemBatchWatcher;
|
||||
use Streamline\Services\ItemsStockService;
|
||||
use Streamline\Services\StreamlineSetupServiceInterface;
|
||||
class DrugController extends Controller {
|
||||
protected StreamlineSetupServiceInterface $setupService;
|
||||
protected ItemsStockService $itemsStockService;
|
||||
|
||||
function __construct(
|
||||
StreamlineSetupServiceInterface $setupService,
|
||||
ItemsStockService $itemsStockService
|
||||
) {
|
||||
/*$this->middleware('auth');
|
||||
$this->middleware('permission:drug-list', ['only' => ['index']]);
|
||||
$this->middleware('permission:drug-detail', ['only' => ['show']]);
|
||||
$this->middleware('permission:drug-create', ['only' => ['create', 'store']]);
|
||||
$this->middleware('permission:drug-edit', ['only' => ['edit', 'update']]);
|
||||
$this->middleware('permission:drug-delete', ['only' => ['destroy']]);*/
|
||||
$this->setupService = $setupService;
|
||||
$this->itemsStockService = $itemsStockService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
$drugs = Drug::orderBy('name', 'asc')->paginate(1500);
|
||||
$ordered_drugs = [];
|
||||
$treatment_ids = Treatment::distinct('drugs')->select('drugs');
|
||||
$ward_treatment_ids = WardTreatment::distinct('drugs')->select('drugs')->union($treatment_ids)->get();
|
||||
foreach ($ward_treatment_ids as $ward_treatment_id) {
|
||||
$drug_ids = explode(',', $ward_treatment_id->drugs);
|
||||
foreach ($drug_ids as $drug_id) if(!empty($drug_id) && !in_array($drug_id, $ordered_drugs)) $ordered_drugs[$drug_id] = $drug_id;
|
||||
}
|
||||
|
||||
return view('clinical_data::drugs.index', compact('drugs', 'ordered_drugs'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
*/
|
||||
public function create() {
|
||||
$drug_categories = DrugCategory::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_categories = ['' => '- select -'] + $drug_categories;
|
||||
|
||||
$drug_units = DrugUnit::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_units = ['' => '- select -'] + $drug_units;
|
||||
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_forms = ['' => '- select -'] + $drug_forms;
|
||||
|
||||
$suppliers = Supplier::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$suppliers = ['' => '- select -'] + $suppliers;
|
||||
|
||||
$cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$income_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts;
|
||||
$inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts;
|
||||
$income_accounts = ['' => '- select -'] + $income_accounts;
|
||||
|
||||
$default_drugs = StreamlineSetupManager::get_drugs_array();
|
||||
|
||||
$package_units = DB::table('package_units')->whereNull('deleted_at')->orderBy('name')->pluck('name','id')->toArray();
|
||||
$package_units = ['' => '- select -'] + $package_units;
|
||||
|
||||
return view('clinical_data::drugs.create', compact('drug_categories', 'drug_units', 'drug_forms', 'suppliers',
|
||||
'income_accounts','default_drugs', 'inventory_asset_accounts', 'cost_of_goods_accounts', 'package_units'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
|
||||
if (session()->has('streamline_setup') && isset($request->skip)){
|
||||
//Artisan::call('db:seed', ['--class' => 'DrugsTableSeeder']);
|
||||
//update the streamline setup table with the new finished step
|
||||
$this->setupService->saveStep("drugs registration", 1);
|
||||
|
||||
// flash("Default drugs list has been added")->success();
|
||||
return redirect("procedures/create");
|
||||
} else {
|
||||
// get all current price lists
|
||||
$price_list = PriceListCategories::withTrashed()->select('id')->get();
|
||||
$price_list_category = [];
|
||||
$price_list_price = [];
|
||||
|
||||
foreach ($price_list as $record){
|
||||
array_push($price_list_category, $record->id);
|
||||
array_push($price_list_price, $request->non_insured_price);
|
||||
}
|
||||
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
$drug = new Drug;
|
||||
|
||||
$drug->name = $request->name;
|
||||
$drug->category_id = $request->category_id;
|
||||
$drug->available = $request->available;
|
||||
$drug->form_id = $request->form_id;
|
||||
$drug->unit_id = $request->unit_id;
|
||||
$drug->reference_areas = !empty($request->reference_areas)? implode(',',$request->reference_areas):null;
|
||||
$drug->reference_name = !empty($request->reference_name)? implode(',',$request->reference_name):null;
|
||||
$drug->pack = $request->pack;
|
||||
$drug->strength = $request->strength;
|
||||
$drug->prompt = $request->prompt;
|
||||
$drug->info_english = $request->info_english;
|
||||
$drug->info_vernacular = $request->info_vernacular;
|
||||
$drug->store_stock = 0; //$request->store_stock;
|
||||
$drug->pharmacy_stock = 0; //$request->pharmacy_stock;
|
||||
$drug->reorder_level = $request->reorder_level;
|
||||
$drug->long_term = $request->long_term;
|
||||
/*if ($request->is_initial_stock_count == 1) {
|
||||
$drug->opening_stock = $drug->store_stock + $drug->pharmacy_stock;
|
||||
$drug->opening_cost_price = $request->cost_price;
|
||||
}*/
|
||||
$drug->expiry_date = $request->expiry_date;
|
||||
$drug->supplier_id = $request->supplier_id;
|
||||
|
||||
if (isset($request->price_list_category_id)) {
|
||||
$drug->price_list_category = !is_null($request->price_list_category_id) ? implode(",", $request->price_list_category_id) : null;
|
||||
$drug->price_list_price = !is_null($request->price_list_price) ? implode(",", $request->price_list_price) : null;
|
||||
} else {
|
||||
$drug->price_list_category = NULL;
|
||||
$drug->price_list_price = NULL;
|
||||
}
|
||||
|
||||
$drug->insurance_coverage = 0;
|
||||
$drug->cost_price = $request->cost_price;
|
||||
$drug->non_insured_price = $request->non_insured_price;
|
||||
$drug->insured_price = 0;
|
||||
$drug->account_id = $request->account_id;
|
||||
$drug->inventory_account = $request->inventory_account;
|
||||
$drug->cost_of_goods_account = $request->cog_account;
|
||||
$drug->description = $request->description;
|
||||
$drug->package_unit_id = $request->package_unit_id;
|
||||
$drug->does_package_unit_have_sub_packages = $request->does_package_unit_have_sub_packages;
|
||||
$drug->quantity_in_each_package_unit = $request->quantity_in_each_package_unit;
|
||||
$drug->quantity_in_each_sub_package = $request->quantity_in_each_sub_package;
|
||||
$drug->number_of_sub_packages_in_main_package_unit = $request->number_of_sub_packages_in_main_package;
|
||||
$drug->created_by = $logged_in_user_id;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
$drug->created_at = Carbon::now();
|
||||
$drug->updated_at = Carbon::now();
|
||||
|
||||
try {
|
||||
if ($drug->name != "" && !is_null($drug->name)) {
|
||||
$drug->save();
|
||||
}
|
||||
|
||||
if (session()->has('streamline_setup')) {
|
||||
if (isset($request->selected_drugs)) {
|
||||
$selected_drugs_array = $request->selected_drugs;
|
||||
if (!empty($selected_drugs_array)) {
|
||||
|
||||
for ($i=0; $i < count($selected_drugs_array) ; $i++) {
|
||||
/* try this magic to get details for the selected service */
|
||||
$drugs_array = StreamlineSetupManager::get_drugs_array();
|
||||
$key=array_search($selected_drugs_array[$i], array_column($drugs_array, 'name'));
|
||||
$drug_details = $drugs_array[$key];
|
||||
/* end of magic trial */
|
||||
|
||||
$default_drug = new Drug;
|
||||
$default_drug->name = $drug_details['name'];
|
||||
$default_drug->cost_price = $drug_details['cost_price'];
|
||||
$default_drug->insured_price = 0;
|
||||
$default_drug->non_insured_price = $drug_details['non_insured_price'];
|
||||
$default_drug->category_id = $drug_details['category_id'];
|
||||
$drug->account_id = $request->account_id;
|
||||
$drug->inventory_account = $request->inventory_account;
|
||||
$drug->cost_of_goods_account = $request->cog_account;
|
||||
$default_drug->form_id = $drug_details['form_id'];
|
||||
$default_drug->unit_id = $drug_details['unit_id'];
|
||||
$default_drug->expiry_date = Carbon::now()->addWeek();
|
||||
$default_drug->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
//update the streamline setup table with the new finished step
|
||||
$this->setupService->saveStep("drugs registration", 1);
|
||||
// $streamline_setup = new \Streamline\Models\StreamlineSetupStep;
|
||||
// $streamline_setup->step = "drug registration";
|
||||
// $streamline_setup->completion_status = 1;
|
||||
// $streamline_setup->save();
|
||||
flash("Drugs have been added. PLease ensure that you edit the expiry date before the end of the week")->success();
|
||||
|
||||
return redirect("procedures/create");
|
||||
}
|
||||
|
||||
flash($request->name . " Drug has been saved")->success();
|
||||
return redirect("/drugs/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function edit($id) {
|
||||
$drug_categories = DrugCategory::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_units = DrugUnit::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
|
||||
$drug = Drug::where(['id' => $id])->first();
|
||||
|
||||
$cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$income_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts;
|
||||
$inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts;
|
||||
$income_accounts = ['' => '- select -'] + $income_accounts;
|
||||
|
||||
if (!$drug) {
|
||||
flash()->error("There is no such drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit', compact('drug_units', 'drug_forms', 'drug', 'drug_categories', 'cost_of_goods_accounts', 'inventory_asset_accounts',
|
||||
'income_accounts'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param int $id
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
|
||||
/**
|
||||
* So a little explanation for this point, there are four methods for updating the column values
|
||||
* for a drug in the drugs table and am using one update method to route them through here,
|
||||
* differentiate them by the $request->id passed along since i guess no one will dare use the id
|
||||
* field or value and then according to whatever value is passed in the id using if elseif statements
|
||||
* tried a switch but the code was really messy and an if is the best, feel free to edit to your heart's content ;)
|
||||
*/
|
||||
if (isset($request->id)) {
|
||||
if ($request->id == 0) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$drug = Drug::find($id);
|
||||
$drug->name = $request->name;
|
||||
$drug->prompt = $request->prompt;
|
||||
$drug->info_vernacular = $request->info_vernacular;
|
||||
$drug->info_english = $request->info_english;
|
||||
$drug->pharmacy_comment = $request->pharmacy_comment;
|
||||
$drug->description = $request->description;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
flash($request->name . " Drug has been updated")->success();
|
||||
return redirect("/drugs/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
} elseif ($request->id == 1) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required',
|
||||
'cost_price' => 'required',
|
||||
'non_insured_price' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$drug = Drug::find($id);
|
||||
$drug->name = $request->name;
|
||||
$drug->cost_price = $request->cost_price;
|
||||
$drug->non_insured_price = $request->non_insured_price;
|
||||
$drug->insured_price = 0;
|
||||
$drug->price_list_category = !is_null($request->price_list_category_id) ? implode(",", $request->price_list_category_id) : null;
|
||||
$drug->price_list_price = !is_null($request->price_list_price) ? implode(",", $request->price_list_price) : null;
|
||||
$drug->pricing_factor_infant = $request->pricing_factor_infant;
|
||||
$drug->pricing_factor_children = $request->pricing_factor_children;
|
||||
$drug->pricing_factor_adult = $request->pricing_factor_adult;
|
||||
$drug->ip_daily_cost_adult = $request->ip_daily_cost_adult;
|
||||
$drug->ip_daily_cost_children = $request->ip_daily_cost_children;
|
||||
$drug->ip_daily_cost_infant = $request->ip_daily_cost_infant;
|
||||
$drug->ip_daily_cost_adult_insured = 0;
|
||||
$drug->ip_daily_cost_children_insured = 0;
|
||||
$drug->ip_daily_cost_infant_insured = 0;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
flash($request->name . " Drug has been updated")->success();
|
||||
return redirect("/drugs/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
} elseif ($request->id == 2) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required',
|
||||
'form_id' => 'required',
|
||||
'pack' => 'required',
|
||||
'strength' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$drug = Drug::find($id);
|
||||
$drug->name = $request->name;
|
||||
$drug->form_id = $request->form_id;
|
||||
$drug->pack = $request->pack;
|
||||
$drug->strength = $request->strength;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
if ($drug->save()):
|
||||
flash($request->name . " has been saved")->success();
|
||||
return redirect("/drugs/");
|
||||
else:
|
||||
flash("There was an error")->error();
|
||||
endif;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required',
|
||||
'form_id' => 'required',
|
||||
'unit_id' => 'required',
|
||||
'pharmacy_stock' => 'required',
|
||||
'store_stock' => 'required',
|
||||
'reorder_level' => 'required',
|
||||
'long_term' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$drug = Drug::find($id);
|
||||
$drug->name = $request->name;
|
||||
$drug->category_id = $request->category_id;
|
||||
$drug->form_id = $request->form_id;
|
||||
$drug->available = $request->available;
|
||||
$drug->reference_areas = !empty($request->reference_areas)? implode(',',$request->reference_areas):null;
|
||||
$drug->reference_name = !empty($request->reference_name)? implode(',',$request->reference_name):null;
|
||||
$drug->unit_id = $request->unit_id;
|
||||
$drug->store_stock = $request->store_stock;
|
||||
$drug->pharmacy_stock = $request->pharmacy_stock;
|
||||
$drug->reorder_level = $request->reorder_level;
|
||||
$drug->long_term = $request->long_term;
|
||||
$drug->hssip = $request->hssip;
|
||||
$drug->insurance_coverage = 0;
|
||||
$drug->account_id = $request->account_id;
|
||||
$drug->inventory_account = $request->inventory_account;
|
||||
$drug->cost_of_goods_account = $request->cog_account;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
if ($drug->save()):
|
||||
flash($request->name . " has been saved")->success();
|
||||
return redirect("/drugs/");
|
||||
else:
|
||||
flash("There was an error")->error();
|
||||
endif;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$drug = Drug::find($id);
|
||||
if (empty($drug->pharmacy_stock) && empty($drug->store_stock) && empty($drug->opening_stock)) {
|
||||
if ($drug->delete()):
|
||||
flash("Drug has been deleted.")->success();
|
||||
return redirect('/drugs/');
|
||||
endif;
|
||||
} else {
|
||||
flash()->error($drug->name ." is still in stock.");
|
||||
return redirect('/drugs/');
|
||||
}
|
||||
}
|
||||
|
||||
public function inactive() {
|
||||
|
||||
$drugs = Drug::onlyTrashed()->orderBy('name', 'asc')->paginate(50);
|
||||
|
||||
if (empty($drugs)) {
|
||||
flash()->error("There is no inactive drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.inactive', compact('drugs'));
|
||||
}
|
||||
}
|
||||
|
||||
public function activate($id) {
|
||||
$drug = Drug::withTrashed()->find($id);
|
||||
|
||||
if ($drug->restore()):
|
||||
flash("Drug has been activated.")->success();
|
||||
return redirect('/drugs/');
|
||||
endif;
|
||||
}
|
||||
|
||||
public function edit_drugs_calculations($id) {
|
||||
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
|
||||
$drug = Drug::where(['id' => $id])->first();
|
||||
|
||||
if (!$drug) {
|
||||
flash()->error("There is no such drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.drugs_calculations', compact('drug_forms', 'drug'));
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_drugs_pricing($id) {
|
||||
$drug = Drug::where(['id' => $id])->first();
|
||||
|
||||
if (!$drug) {
|
||||
flash()->error("There is no such drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.drugs_pricing', compact('drug'));
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_drugs_prompts($id) {
|
||||
$drug = Drug::where(['id' => $id])->first();
|
||||
|
||||
if (!$drug) {
|
||||
flash()->error("There is no such drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.drugs_prompts', compact('drug'));
|
||||
}
|
||||
}
|
||||
|
||||
public function index_drugs_expiring(Request $request) {
|
||||
|
||||
$today = Carbon::now(); $range = !empty($request->time_period)? $request->time_period : 0;
|
||||
$started =$request->start_date; $ended = $request->end_date;
|
||||
if ($request->time_period) {
|
||||
if ($request->time_period == 0) {
|
||||
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->where('expiry_date', '<', DATE($today))
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There are no expired drugs");
|
||||
}
|
||||
} elseif ($request->time_period == 1) {
|
||||
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->whereBetween('expiry_date', [DATE($today), DATE($today->addWeek())])
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There are no drugs expiring in a week");
|
||||
}
|
||||
} elseif ($request->time_period == 2) {
|
||||
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->whereBetween('expiry_date', [DATE($today), DATE($today->addWeeks(2))])
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There are no drugs expiring in two weeks");
|
||||
}
|
||||
} elseif ($request->time_period == 3) {
|
||||
$request->validate([
|
||||
'start_date' => 'required|date|required_with:end_date',
|
||||
'end_date' => 'bail|required|required_with:start_date|date|after:start_date',
|
||||
]);
|
||||
$end = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString();
|
||||
$start = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString();
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->whereBetween('expiry_date', [$start, $end])
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) flash()->error("There are no drugs expiring between ".$start. " and " .$end);
|
||||
} elseif ($request->time_period == 4) {
|
||||
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->whereBetween('expiry_date', [DATE($today), DATE($today->addWeeks(4))])
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There are no drugs expiring in a month");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$drugs = ItemBatchWatcher::where(function ($query) {
|
||||
$query->where('store_stock', '>', 0)
|
||||
->orWhere('pharmacy_stock', '>', 0);
|
||||
})->where('item_type', 1)->where('expiry_date', '<', DATE($today))
|
||||
->orderBy('expiry_date', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There are no expired drugs");
|
||||
}
|
||||
}
|
||||
|
||||
return view('clinical_data::drugs.index_drugs_expiring', compact('drugs', 'range', 'started', 'ended'));
|
||||
}
|
||||
|
||||
public function index_drugs_low_stock() {
|
||||
|
||||
$drugs = Drug::whereColumn('store_stock', '<', 'reorder_level')
|
||||
->orWhere('store_stock', '<', '20')
|
||||
->orderBy('name', 'asc')
|
||||
->paginate(500);
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There is no out of stock drugs");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.index_drugs_low_stock', compact('drugs'));
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_all() {
|
||||
$drugs = Drug::orderBy('name', 'asc')
|
||||
->get();
|
||||
|
||||
$drug_units = DrugUnit::orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There is no active drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.all', compact('drugs', 'drug_units', 'drug_forms'));
|
||||
}
|
||||
}
|
||||
|
||||
public function update_all(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
//'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$id_array = $request->id;
|
||||
|
||||
$name_array = $request->name;
|
||||
$form_id_array = $request->form_id;
|
||||
$unit_id_array = $request->unit_id;
|
||||
$store_stock_array = $request->store_stock;
|
||||
$pharmacy_stock_array = $request->pharmacy_stock;
|
||||
$reorder_level_array = $request->reorder_level;
|
||||
$long_term_array = $request->long_term;
|
||||
$hssip_array = $request->hssip;
|
||||
|
||||
for ($x = 0; $x < count($id_array); $x++) {
|
||||
$drug = Drug::find($id_array[$x]);
|
||||
|
||||
$drug->name = isset($name_array[$x]) ? $name_array[$x] : $drug->name;
|
||||
$drug->form_id = isset($form_id_array[$x]) ? $form_id_array[$x] : $drug->form_id;
|
||||
$drug->unit_id = isset($unit_id_array[$x]) ? $unit_id_array[$x] : $drug->unit_id;
|
||||
$drug->store_stock = isset($store_stock_array[$x]) ? $store_stock_array[$x] : $drug->store_stock;
|
||||
$drug->pharmacy_stock = isset($pharmacy_stock_array[$x]) ? $pharmacy_stock_array[$x] : $drug->pharmacy_stock;
|
||||
$drug->reorder_level = isset($reorder_level_array[$x]) ? $reorder_level_array[$x] : $drug->reorder_level;
|
||||
$drug->long_term = isset($long_term_array[$x]) ? $long_term_array[$x] : $drug->long_term;
|
||||
$drug->hssip = isset($hssip_array[$x]) ? $hssip_array[$x] : $drug->hssip;
|
||||
$drug->insurance_coverage = 0;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
flash("Drugs have been updated")->success();
|
||||
return redirect("/drugs/");
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_all_prompts() {
|
||||
$drugs = Drug::orderBy('name', 'asc')->get();
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There is no active drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.all_prompts', compact('drugs'));
|
||||
}
|
||||
}
|
||||
|
||||
public function update_all_prompts(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
//'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$id_array = $request->id;
|
||||
|
||||
$name_array = $request->name;
|
||||
$prompt_array = $request->prompt;
|
||||
$info_vernacular_array = $request->info_vernacular;
|
||||
$info_english_array = $request->info_english;
|
||||
$pharmacy_comment_array = $request->pharmacy_comment;
|
||||
|
||||
for ($x = 0; $x < count($id_array); $x++) {
|
||||
$drug = Drug::find($id_array[$x]);
|
||||
|
||||
$drug->name = isset($name_array[$x]) ? $name_array[$x] : $drug->name;
|
||||
$drug->prompt = isset($prompt_array[$x]) ? $prompt_array[$x] : $drug->prompt;
|
||||
$drug->info_vernacular = isset($info_vernacular_array[$x]) ? $info_vernacular_array[$x] : $drug->info_vernacular;
|
||||
$drug->info_english = isset($info_english_array[$x]) ? $info_english_array[$x] : $drug->info_english;
|
||||
$drug->pharmacy_comment = isset($pharmacy_comment_array[$x]) ? $pharmacy_comment_array[$x] : $drug->pharmacy_comment;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
flash("Drug Prompts have been updated")->success();
|
||||
return redirect("/drugs/");
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_all_pricing() {
|
||||
$drugs = Drug::orderBy('name', 'asc')
|
||||
->get();
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There is no active drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.all_pricing', compact('drugs'));
|
||||
}
|
||||
}
|
||||
|
||||
public function update_all_pricing(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
//'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$id_array = $request->id;
|
||||
|
||||
$name_array = $request->name;
|
||||
$cost_price_array = $request->cost_price;
|
||||
$non_insured_price_array = $request->non_insured_price;
|
||||
$pricing_factor_infant_array = $request->pricing_factor_infant;
|
||||
$pricing_factor_children_array = $request->pricing_factor_children;
|
||||
$pricing_factor_adult_array = $request->pricing_factor_adult;
|
||||
$ip_daily_cost_adult_array = $request->ip_daily_cost_adult;
|
||||
$ip_daily_cost_children_array = $request->ip_daily_cost_children;
|
||||
$ip_daily_cost_infant_array = $request->ip_daily_cost_infant;
|
||||
|
||||
for ($x = 0; $x < count($id_array); $x++) {
|
||||
$drug = Drug::find($id_array[$x]);
|
||||
|
||||
$drug->name = isset($name_array[$x]) ? $name_array[$x] : $drug->name;
|
||||
$drug->cost_price = isset($cost_price_array[$x]) ? $cost_price_array[$x] : $drug->cost_price;
|
||||
$drug->non_insured_price = isset($non_insured_price_array[$x]) ? $non_insured_price_array[$x] : $drug->non_insured_price;
|
||||
$drug->insured_price = 0;
|
||||
$drug->pricing_factor_infant = isset($pricing_factor_infant_array[$x]) ? $pricing_factor_infant_array[$x] : $drug->pricing_factor_infant;
|
||||
$drug->pricing_factor_children = isset($pricing_factor_children_array[$x]) ? $pricing_factor_children_array[$x] : $drug->pricing_factor_children;
|
||||
$drug->pricing_factor_adult = isset($pricing_factor_adult_array[$x]) ? $pricing_factor_adult_array[$x] : $drug->pricing_factor_adult;
|
||||
$drug->ip_daily_cost_adult = isset($ip_daily_cost_adult_array[$x]) ? $ip_daily_cost_adult_array[$x] : $drug->ip_daily_cost_adult;
|
||||
$drug->ip_daily_cost_children = isset($ip_daily_cost_children_array[$x]) ? $ip_daily_cost_children_array[$x] : $drug->ip_daily_cost_children;
|
||||
$drug->ip_daily_cost_infant = isset($ip_daily_cost_infant_array[$x]) ? $ip_daily_cost_infant_array[$x] : $drug->ip_daily_cost_infant;
|
||||
$drug->ip_daily_cost_adult_insured = 0;
|
||||
$drug->ip_daily_cost_children_insured = 0;
|
||||
$drug->ip_daily_cost_infant_insured = 0;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
flash("Drugs Pricing have been updated")->success();
|
||||
return redirect("/drugs/");
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_all_calculations() {
|
||||
$drugs = Drug::orderBy('name', 'asc')->get();
|
||||
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
|
||||
if (count($drugs) < 1) {
|
||||
flash()->error("There is no active drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.all_calculations', compact('drugs', 'drug_forms'));
|
||||
}
|
||||
}
|
||||
|
||||
public function update_all_calculations(Request $request) {
|
||||
$validator = Validator::make($request->all(), [
|
||||
//'name' => 'required'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
$string = "";
|
||||
foreach ($validator->errors()->getMessages() as $item) {
|
||||
$string .= "{$item[0]}<br>";
|
||||
}
|
||||
return back()->withErrors($validator)->withInput();
|
||||
} else {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$id_array = $request->id;
|
||||
|
||||
$name_array = $request->name;
|
||||
$form_array = $request->form_id;
|
||||
$pack_array = $request->pack;
|
||||
$strength_array = $request->strength;
|
||||
|
||||
for ($x = 0; $x < count($id_array); $x++) {
|
||||
$drug = Drug::find($id_array[$x]);
|
||||
|
||||
$drug->name = $name_array[$x];
|
||||
$drug->form_id = $form_array[$x];
|
||||
$drug->pack = $pack_array[$x];
|
||||
$drug->strength = $strength_array[$x];
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
flash("Drug Calculations have been updated")->success();
|
||||
|
||||
// This data is needed for redirection
|
||||
$drugs = Drug::orderBy('name', 'asc')->get();
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id');
|
||||
|
||||
return view('clinical_data::drugs.edit.all_calculations', compact('drugs', 'drug_forms'));
|
||||
}
|
||||
}
|
||||
|
||||
public function bulk_create() {
|
||||
$drug_categories = DrugCategory::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_categories = ['' => '- select -'] + $drug_categories;
|
||||
|
||||
$drug_units = DrugUnit::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_units = ['' => '- select -'] + $drug_units;
|
||||
|
||||
$drug_forms = DrugForm::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$drug_forms = ['' => '- select -'] + $drug_forms;
|
||||
|
||||
$suppliers = Supplier::orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$suppliers = ['' => '- select -'] + $suppliers;
|
||||
|
||||
$cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
$income_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
||||
|
||||
$cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts;
|
||||
$inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts;
|
||||
$income_accounts = ['' => '- select -'] + $income_accounts;
|
||||
|
||||
|
||||
return view('clinical_data::drugs.bulk_create', compact('drug_categories', 'drug_units', 'drug_forms', 'suppliers',
|
||||
'income_accounts', 'inventory_asset_accounts', 'cost_of_goods_accounts'));
|
||||
}
|
||||
|
||||
public function bulk_store(Request $request) {
|
||||
$logged_in_user_id = Auth()->user()->id;
|
||||
|
||||
$counter = 0;
|
||||
|
||||
$name_array = $request->name;
|
||||
$category_id_array = $request->category_id;
|
||||
$form_id_array = $request->form_id;
|
||||
$unit_id_array = $request->unit_id;
|
||||
$prompt_array = $request->prompt;
|
||||
$info_english_array = $request->info_english;
|
||||
$info_vernacular_array = $request->info_vernacular;
|
||||
$store_stock_array = $request->store_stock;
|
||||
$reorder_level_array = $request->reorder_level;
|
||||
$expiry_date_array = $request->expiry_date;
|
||||
$supplier_id_array = $request->supplier_id;
|
||||
$cost_price_array = $request->cost_price;
|
||||
$non_insured_price_array = $request->non_insured_price;
|
||||
$account_id_array = $request->account_id;
|
||||
$inventory_account_array = $request->inventory_account;
|
||||
$cost_of_goods_account_array = $request->cog_account;
|
||||
$description_array = $request->description;
|
||||
|
||||
for ($x = 0; $x < count($name_array); $x++) {
|
||||
if ($name_array[$x]) {
|
||||
$counter += 1;
|
||||
$drug = new Drug;
|
||||
|
||||
$drug->name = $name_array[$x];
|
||||
$drug->category_id = $category_id_array[$x];
|
||||
$drug->form_id = $form_id_array[$x];
|
||||
$drug->unit_id = $unit_id_array[$x];
|
||||
$drug->prompt = $prompt_array[$x];
|
||||
$drug->info_english = $info_english_array[$x];
|
||||
$drug->info_vernacular = $info_vernacular_array[$x];
|
||||
$drug->store_stock = $store_stock_array[$x];
|
||||
$drug->reorder_level = $reorder_level_array[$x];
|
||||
$drug->expiry_date = $expiry_date_array[$x];
|
||||
$drug->supplier_id = $supplier_id_array[$x];
|
||||
$drug->insurance_coverage = 0;
|
||||
$drug->cost_price = $cost_price_array[$x];
|
||||
$drug->non_insured_price = $non_insured_price_array[$x];
|
||||
$drug->insured_price = 0;
|
||||
$drug->account_id = $account_id_array[$x];
|
||||
$drug->cost_of_goods_account = $cost_of_goods_account_array[$x];
|
||||
$drug->inventory_account = $inventory_account_array[$x];
|
||||
$drug->description = $description_array[$x];
|
||||
$drug->created_by = $logged_in_user_id;
|
||||
$drug->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$drug->save();
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flash($counter . " drugs have been saved")->success();
|
||||
return redirect("/drugs/");
|
||||
}
|
||||
|
||||
public function edit_purchase_packaging(Request $request, $id)
|
||||
{
|
||||
$drug = Drug::find($id);
|
||||
|
||||
if (!$drug) {
|
||||
flash()->error("There is no such drug");
|
||||
return redirect('/drugs/');
|
||||
} else {
|
||||
return view('clinical_data::drugs.edit.items_purchase_packaging', compact('drug'));
|
||||
}
|
||||
}
|
||||
|
||||
public function update_purchase_packaging(Request $request)
|
||||
{
|
||||
$drug = Drug::find($request->id);
|
||||
$drug->does_package_unit_have_sub_packages = $request->does_package_unit_have_sub_packages;
|
||||
$drug->quantity_in_each_package_unit = $request->quantity_in_each_package_unit;
|
||||
$drug->quantity_in_each_sub_package = $request->quantity_in_each_sub_package;
|
||||
$drug->number_of_sub_packages_in_main_package_unit = $request->number_of_sub_packages_in_main_package;
|
||||
$drug->update();
|
||||
|
||||
return redirect('drugs');
|
||||
}
|
||||
|
||||
public function get_drug_store_stock($id){
|
||||
$drug = Drug::find($id);
|
||||
|
||||
if ($drug) {
|
||||
$stock_level = $this->itemsStockService->getItemAllQuantityByTotal($id, 1);
|
||||
|
||||
if ($stock_level > 0) {
|
||||
$message =' <br><span style="color: darkgreen"><b>'.$stock_level.' Units in Stock</b></span>';
|
||||
} else {
|
||||
$message = ' <br><span style="color: darkorange"><b>Drug is out of stock</b></span>';
|
||||
}
|
||||
} else {
|
||||
$message = "";
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user