mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
202 lines
8.1 KiB
PHP
Executable File
202 lines
8.1 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Streamline\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Streamline\Models\ChartOfAccount;
|
|
use Symfony\Component\Process\Process;
|
|
|
|
class DataExtractionController extends Controller {
|
|
|
|
public function select_data_type(){
|
|
return view('data_extraction.select_data_type');
|
|
}
|
|
|
|
public function import_csv ($tag_id) {
|
|
if ($tag_id == 3) {
|
|
$tag_name = "drugs";
|
|
} else if ($tag_id == 2) {
|
|
$tag_name = "investigations";
|
|
} else if ($tag_id == 4) {
|
|
$tag_name = "procedures";
|
|
} else if ($tag_id == 5) {
|
|
$tag_name = "sundries";
|
|
} else if ($tag_id == 6) {
|
|
$tag_name = "services";
|
|
} else {
|
|
$tag_name = "None";
|
|
}
|
|
|
|
$chart_of_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$chart_of_accounts = ['' => '- select -'] + $chart_of_accounts;
|
|
|
|
$cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts;
|
|
|
|
$inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts;
|
|
|
|
return view('data_extraction.import_csv', compact('tag_id', 'tag_name', 'chart_of_accounts',
|
|
'cost_of_goods_accounts', 'inventory_asset_accounts'));
|
|
}
|
|
|
|
public function import_csv_upload(Request $request) {
|
|
$csv_data = file($request->file('file'));
|
|
$file_destination_path = 'uploads/csv_imports/';
|
|
|
|
// check if the csv has data
|
|
if (count($csv_data) > 0) {
|
|
$first_row_data = explode(",", $csv_data[0]);
|
|
$number_of_columns_in_data = count($first_row_data);
|
|
|
|
// check if the csv has the required number of columns
|
|
if (!((in_array($request->tag_id, [2, 4, 6]) && $number_of_columns_in_data == 3) ||
|
|
($request->tag_id == 5 && $number_of_columns_in_data == 4) ||
|
|
($request->tag_id == 3 && $number_of_columns_in_data == 7))) {
|
|
flash("The CSV you uploaded does not contain or contains more than all the required number of column fields")->error();
|
|
return redirect('/data_extraction/import_csv/' . $request->tag_id);
|
|
}
|
|
|
|
$attach_path = $request->file('file');
|
|
$file_name = $attach_path->getClientOriginalName();
|
|
|
|
$attach_path->move($file_destination_path, $file_name);
|
|
|
|
$account_id = NULL;
|
|
$inventory_account = NULL;
|
|
$cost_of_goods_account = NULL;
|
|
|
|
switch ($request->tag_id) {
|
|
case 2:
|
|
case 4:
|
|
case 6:
|
|
$account_id = $request->account_id;
|
|
break;
|
|
case 5:
|
|
case 3:
|
|
$account_id = $request->account_id;
|
|
$inventory_account = $request->inventory_account;
|
|
$cost_of_goods_account = $request->cog_account;
|
|
break;
|
|
}
|
|
|
|
$insert_id = DB::table('csv_imports_processes')->insertGetId([
|
|
"csv_path" => $file_destination_path . $file_name,
|
|
"tag_id" => $request->tag_id,
|
|
"account_id" => $account_id,
|
|
"inventory_account" => $inventory_account,
|
|
"cost_of_goods_account" => $cost_of_goods_account,
|
|
"has_price_list" => 0,
|
|
"created_by" => Auth::id(),
|
|
"created_at" => date('Y-m-d H:i:s')
|
|
]);
|
|
|
|
$exit_code = Artisan::call("import:csv $insert_id");
|
|
|
|
return redirect('/data_extraction/import_csv_progress/' . $insert_id);
|
|
} else {
|
|
flash("You have uploaded an empty CSV")->error();
|
|
return redirect('/data_extraction/import_csv/' . $request->tag_id);
|
|
}
|
|
}
|
|
|
|
public function import_price_list_csv_upload(Request $request) {
|
|
$csv_data = file($request->file('file'));
|
|
$file_destination_path = 'uploads/csv_imports/';
|
|
|
|
// check if the csv has data
|
|
if (count($csv_data) > 0) {
|
|
$first_row_data = explode(",", $csv_data[0]);
|
|
$number_of_columns_in_data = count($first_row_data);
|
|
|
|
// check if the csv has the required number of columns
|
|
if ($number_of_columns_in_data > 2) {
|
|
|
|
for ($i = 1; $i < count($first_row_data); $i++){
|
|
// confirm that all patient categories exist
|
|
$category_id = get_name(trim($first_row_data[$i]), 'name', 'id', 'patient_categories');
|
|
|
|
if ($category_id == 'N/A') {
|
|
flash("The CSV you uploaded contains a patient category; " . $first_row_data[$i] . " which does not exist in Stre@mline")->error();
|
|
return redirect('/data_extraction/import_price_list_csv/' . $request->tag_id);
|
|
}
|
|
}
|
|
} else {
|
|
flash("The CSV you uploaded does not contain or contains more than all the required number of column fields")->error();
|
|
return redirect('/data_extraction/import_price_list_csv/' . $request->tag_id);
|
|
}
|
|
|
|
$attach_path = $request->file('file');
|
|
$file_name = "pl_" . $attach_path->getClientOriginalName();
|
|
|
|
$attach_path->move($file_destination_path, $file_name);
|
|
|
|
$insert_id = DB::table('csv_imports_processes')->insertGetId([
|
|
"csv_path" => $file_destination_path . $file_name,
|
|
"tag_id" => $request->tag_id,
|
|
"account_id" => 0,
|
|
"inventory_account" => 0,
|
|
"cost_of_goods_account" => 0,
|
|
"has_price_list" => 1,
|
|
"created_by" => Auth::id(),
|
|
"created_at" => date('Y-m-d H:i:s')
|
|
]);
|
|
|
|
$exit_code = Artisan::call("import:price_list $insert_id");
|
|
|
|
return redirect('/data_extraction/import_csv_progress/' . $insert_id);
|
|
} else {
|
|
flash("You have uploaded an empty CSV")->error();
|
|
return redirect('/data_extraction/import_csv/' . $request->tag_id);
|
|
}
|
|
}
|
|
|
|
public function import_csv_progress($id) {
|
|
return view('data_extraction.import_csv_progress', compact('id'));
|
|
}
|
|
|
|
public function fetch_progress($id) {
|
|
$record = DB::table('csv_imports_processes')->where('id', $id)->first();
|
|
|
|
return $record->records_completed;
|
|
}
|
|
|
|
public function import_price_list_csv ($tag_id) {
|
|
if ($tag_id == 3) {
|
|
$tag_name = "drugs";
|
|
} else if ($tag_id == 2) {
|
|
$tag_name = "investigations";
|
|
} else if ($tag_id == 4) {
|
|
$tag_name = "procedures";
|
|
} else if ($tag_id == 5) {
|
|
$tag_name = "sundries";
|
|
} else if ($tag_id == 6) {
|
|
$tag_name = "services";
|
|
} else {
|
|
$tag_name = "None";
|
|
}
|
|
|
|
$chart_of_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$chart_of_accounts = ['' => '- select -'] + $chart_of_accounts;
|
|
|
|
$cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts;
|
|
|
|
$inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray();
|
|
$inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts;
|
|
|
|
return view('data_extraction.import_price_list_csv', compact('tag_id', 'tag_name', 'chart_of_accounts',
|
|
'cost_of_goods_accounts', 'inventory_asset_accounts'));
|
|
}
|
|
|
|
public function start_process($id) {
|
|
$exit_code = Artisan::call("import:csv $id");
|
|
}
|
|
|
|
public function start_price_list_process($id) {
|
|
$exit_code = Artisan::call("import:price_list $id");
|
|
}
|
|
}
|