File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/AdminMasterController.php
<?php
namespace App\Http\Controllers\Api;
use App\Allergie;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminMasterRequest;
use App\Http\Requests\AdminListItemUpdateRequest;
use App\Library\VariableLibrary;
use App\Library\FcmLibrary;
use App\MedicalCondition;
use App\Medication;
use App\Procedure;
use App\Vaccination;
use App\Symptom;
use App\Clinic;
use Illuminate\Support\Facades\Validator;
use App\UserDetails;
use Illuminate\Validation\Rule;
use App\UserSettingsNotification;
use App\UserAreaSpecialisation;
use App\AdminSettings;
use App\Lab;
use App\Language;
use App\DoctorSymptomTemplates;
use App\Jobs\SendEmailNotificationJob;
use App\UserClinic;
use App\User;
use Auth;
use DB;
use Exception;
use DateTime;
use Config;
use Illuminate\Support\Facades\Mail;
use App\Mail\AccountApprove;
use App\Jobs\AccountApproveJob;
use Illuminate\Support\Facades\Hash;
use App\Library\S3Library;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Throwable;
use Illuminate\Support\Carbon;
use App\Http\Resources\ListItemsCollection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use App\DoctorSymptoms;
use App\Http\Requests\AddTemplateRequest;
use App\Http\Requests\EditTemplateRequest;
use App\Http\Requests\DeleteTemplateRequest;
use App\EmailTemplate;
use App\Http\Requests\AddEmailTemplateRequest;
use App\Http\Requests\EditEmailTemplateRequest;
use App\Http\Requests\DeleteEmailTemplateRequest;
// use App\TreatmentGiven;
// use App\Http\Requests\AddTreatmentGivenRequest;
// use App\Http\Requests\EditTreatmentGivenRequest;
// use App\Http\Requests\DeleteTreatmentGivenRequest;
use App\CMSPage;
use App\Http\Requests\AddCMSPageRequest;
use App\Http\Requests\EditCMSPageRequest;
use App\Http\Requests\DeleteCMSPageRequest;
use App\Http\Requests\Master\StatusUpdateRequest;
class AdminMasterController extends Controller
{
public function index(Request $request) {
try {
$pageNumber = $request->page ? $request->page : 1;
$perPage = $request->perPage ? $request->perPage : 10;
$search_key = $request->search ? $request->search : '';
$all = new Collection([]);
$authRole = Auth::user();
$auth_id = auth()->user()->id;
if(!empty($search_key)) {
$Clinic = collect(
Clinic::where('name', 'LIKE', "%{$search_key}%")
->orWhereHas('owner', function ($query) use ($search_key) {
$query->where('email', 'LIKE', "%{$search_key}%")
->orWhere('first_name', 'LIKE', "%{$search_key}%")
->orWhere('last_name', 'LIKE', "%{$search_key}%")
->orWhere('mobile_number', 'LIKE', "%{$search_key}%")
->orWhere('address', 'LIKE', "%{$search_key}%")
->orWhere('post_code', 'LIKE', "%{$search_key}%");
})
->get()
->map(function ($item) {
$item->type = 'Clinics';
return $item;
})
);
$Lab = collect(
/*Lab::where('name', 'LIKE', "%{$search_key}%")
->get()
->map(function ($item) {
$item->type = 'Labs';
return $item;
})*/
Lab::join('users', 'labs.user_id', '=', 'users.id')
->where('labs.name', 'LIKE', "%{$search_key}%")
->orWhere('users.mobile_number', 'LIKE', "%{$search_key}%")
->orWhere('users.address', 'LIKE', "%{$search_key}%")
->orWhere('users.post_code', 'LIKE', "%{$search_key}%")
->get()
->map(function ($item) {
$item->type = 'Labs';
return $item;
})
);
$Symptom = collect(Symptom::where('symptoms_name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Symptoms';return $item;}));
$Allergie = collect(Allergie::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Allergies';return $item;}));
$MedicalCondition = collect(MedicalCondition::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Medical Conditions';return $item;}));
$Medication = collect(Medication::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Medications';return $item;}));
$Procedure = collect(Procedure::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Procedures';return $item;}));
$Vaccination = collect(Vaccination::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Vaccinations';return $item;}));
$SymptomTemplates = collect(DoctorSymptomTemplates::where('name', 'LIKE', "%{$search_key}%")->get()->map(function($item){ $item->type = 'Symptom Templates';return $item;}));
} else {
if($authRole->type == "doctor"){
//get user detail id
$userDetailId = UserDetails::select('id')->where('user_id',$auth_id)->first();
//get User-clinic ids
$userClinicId = UserClinic::where('user_detail_id',$userDetailId->id)->distinct()->pluck('clinic_id')->toArray();
//get clinic list
$Clinic = collect(Clinic::with('clinicImages')->whereIn('id',$userClinicId)->get()->map(function($item){ $item->type = 'Clinics'; return $item; }));
} else{
$Clinic = collect(Clinic::with('clinicImages')->get()->map(function($item){ $item->type = 'Clinics'; return $item; }));
}
$Lab = collect(Lab::get()->map(function($item){ $item->type = 'Labs'; return $item; }));
$Symptom = collect(Symptom::get()->map(function($item){ $item->type = 'Symptoms'; return $item; }));
$Allergie = collect(Allergie::get()->map(function($item){ $item->type = 'Allergies'; return $item; }));
$MedicalCondition = collect(MedicalCondition::get()->map(function($item){ $item->type = 'Medical Conditions'; return $item; }));
$Medication = collect(Medication::get()->map(function($item){ $item->type = 'Medications'; return $item; }));
$Procedure = collect(Procedure::get()->map(function($item){ $item->type = 'Procedures'; return $item; }));
$Vaccination = collect(Vaccination::get()->map(function($item){ $item->type = 'Vaccinations'; return $item; }));
$SymptomTemplates = collect(DoctorSymptomTemplates::get()->map(function($item){ $item->type = 'Symptom Templates'; return $item; }));
}
if(!empty($request->type)) {
$typeArr = explode(',', $request->type);
if(in_array('Clinics', $typeArr))
$all = $all->merge($Clinic->toArray());
if(in_array('Labs', $typeArr)) // Added for Labs
$all = $all->merge($Lab->toArray());
if(in_array('Symptoms', $typeArr))
$all = $all->merge($Symptom->toArray());
if(in_array('Allergies', $typeArr))
$all = $all->merge($Allergie->toArray());
if(in_array('Medical Conditions', $typeArr))
$all = $all->merge($MedicalCondition->toArray());
if(in_array('Medications', $typeArr))
$all = $all->merge($Medication->toArray());
if(in_array('Procedures', $typeArr))
$all = $all->merge($Procedure->toArray());
if(in_array('Vaccinations', $typeArr))
$all = $all->merge($Vaccination->toArray());
if(in_array('Symptom Templates', $typeArr))
$all = $all->merge($SymptomTemplates->toArray());
} else {
$all = $all->merge($Clinic->toArray())
->merge($Lab->toArray()) // Merging Lab records
->merge($Symptom->toArray())
->merge($Allergie->toArray())
->merge($MedicalCondition->toArray())
->merge($Medication->toArray())
->merge($Procedure->toArray())
->merge($Vaccination->toArray());
}
$all = $all->sortByDesc('created_at')->values()->all();
$page = $pageNumber ?: (Paginator::resolveCurrentPage() ?: $pageNumber);
$items = $all instanceof Collection ? $all : Collection::make($all);
$data = new LengthAwarePaginator(array_values($items->forPage($pageNumber, $perPage)->toArray()), $items->count(), $perPage, $pageNumber, $options=[]);
$result['list'] = $data->items();
$result['total_count'] = $data->total();
$result['last_page'] = $data->lastPage();
$result['current_page'] = $data->currentPage();
return self::sentResponse(200, $result, __('digimed_validation.success_response.data_fetch_success'));
}
catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function addEdit(AdminMasterRequest $request, VariableLibrary $variableLibrary)
{
$validated = $request->validated();
try {
// dd($request->clinic_id);
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$name = ucfirst(strtolower($variableLibrary->string($request->name)));
$type = $request->type;
DB::beginTransaction();
$nameExplode = explode(',', $name);
$query = '';
$queryData = '';
$mail = '';
if (count($nameExplode) != false) {
for ($i = 0; $i < count($nameExplode); $i++) {
if ($type == 'allergies') {
$query = new Allergie;
} elseif ($type == 'medical_conditions') {
$query = new MedicalCondition;
} elseif ($type == 'medications') {
$query = new Medication;
} elseif ($type == 'procedures') {
$query = new Procedure;
} elseif ($type == 'vaccinations') {
$query = new Vaccination;
} elseif ($type == 'clinics') {
$query = new Clinic;
} elseif ($type == 'lab') {
$query = new Lab;
}
elseif ($type == 'symptoms') {
$query = new Symptom;
} elseif ($type == 'treatment_given') {
$query = new TreatmentGiven;
} elseif ($type == 'symptom_templates') {
$query = new DoctorSymptomTemplates;
}
if ($type == 'symptoms')
$queryBuilder = $query->where('symptoms_name', $nameExplode[$i])->first();
else
$queryBuilder = $query->where('name', $nameExplode[$i])->first();
if ($queryBuilder != '') {
} else {
if ($type == 'symptoms')
$query->symptoms_name = $nameExplode[$i];
elseif ($type == 'symptom_templates') {
$query->name = $nameExplode[$i];
$query->additional_fields = 1;
} elseif ($type == 'clinics') {
$user = User::firstOrNew([
'mobile_number' => $request->mobile_number
]);
$user->type = 'clinic_admin';
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->passport_number = '123ABC';
$user->email = $request->email;
$user->is_mobile_number_verified = '1';
$user->email_verification_code = '123456';
$user->is_email_verified = '1';
$user->two_step_verification_type = '2';
$user->is_two_step_verified = '1';
$user->is_email_verified = '1';
$user->country_code = $request->country_code;
$user->country_id = $request->country_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->password = Hash::make($request->password);
$user->status = '2';
$user->user_completion = '6';
$user->created_by = $auth_id;
$user->save();
$user->assignRole('clinic_admin');
$query->name = $nameExplode[$i];
$query->user_id = $user->id;
$mail = '1';
} elseif ($type == 'lab') {
$user = User::firstOrNew([
'email' => $request->email
]);
$user->type = 'lab_admin';
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->passport_number = '123ABC';
$user->mobile_number = $request->mobile_number;
$user->is_mobile_number_verified = '1';
$user->email_verification_code = '123456';
$user->is_email_verified = '1';
$user->two_step_verification_type = '2';
$user->is_two_step_verified = '1';
$user->country_code = $request->country_code;
$user->country_id = $request->country_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->password = Hash::make($request->password);
$user->status = '2';
$user->user_completion = '6';
$user->created_by = $auth_id;
$user->save();
$user->assignRole('lab_admin');
// Store lab record with clinic_id
$query->name = $nameExplode[$i];
$query->user_id = $user->id;
$query->clinic_id = $request->clinic_id; // Ensure clinic_id is set correctly
$query->status = '1';
$mail = '2';
}
else {
$query->name = $nameExplode[$i];
}
$query->created_by = $auth_id;
$query->updated_by = $auth_id;
$query->save();
}
}
}
DB::commit();
if(!empty($mail)) {
if($mail == '1') { // Clinic account mail
$login_link = Config::get('custom.login_link').'/hospital/login';
// Mail
$mailBody = [
'email' => $request->email,
'body' => [
'content' => 'Your '.config('app.name').' hospital account has been created by the Admin. Your mail_id is : '.$request->email.' and your password is : '.$request->password.'. Please click the below link to login.',
'link_name' => 'Click here to login...',
'login_link' => $login_link,
],
'subject' => 'Account approval invitation - Hospital',
];
dispatch(new AccountApproveJob($mailBody));
} elseif($mail == '2') { // Lab account mail
$login_link = Config::get('custom.login_link').'/lab/login';
// Mail
$mailBody = [
'email' => $request->email,
'body' => [
'content' => 'Your '.config('app.name').' lab account has been created by the Admin. Your mail_id is : '.$request->email.' and your password is : '.$request->password.'. Please click the below link to login.',
'link_name' => 'Click here to login...',
'login_link' => $login_link,
],
'subject' => 'Account approval invitation - Lab',
];
dispatch(new AccountApproveJob($mailBody));
}
}
if ($type == 'allergies') {
$queryData = new Allergie;
$message = __('Allergy').' '.__('added_updated_success');
} elseif ($type == 'medical_conditions') {
$queryData = new MedicalCondition;
$message = __('Medical Condition').' '.__('added_updated_success');
} elseif ($type == 'medications') {
$queryData = new Medication;
$message = __('Medication').' '.__('added_updated_success');
} elseif ($type == 'procedures') {
$queryData = new Procedure;
$message = __('Procedure').' '.__('added_updated_success');
} elseif ($type == 'vaccinations') {
$queryData = new Vaccination;
$message = __('Vaccination').' '.__('added_updated_success');
} elseif ($type == 'clinics') {
$queryData = new Clinic;
$message = __('Hospital').' '.__('added_updated_success');
} elseif ($type == 'lab') {
$queryData = new Lab;
$message = __('Lab').' '.__('added_updated_success');
} elseif ($type == 'symptoms') {
$queryData = new Symptom;
$message = __('Symptom').' '.__('added_updated_success');
} elseif ($type == 'treatment_given') {
$queryData = new TreatmentGiven;
$message = __('Treatment Given').' '.__('added_updated_success');
} elseif ($type == 'symptom_templates') {
$queryData = new DoctorSymptomTemplates;
$message = __('System Template').' '.__('added_updated_success');
}
return self::sentResponse(200, ['data' => $queryData->get()],$message);
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
public function listItems(Request $request)
{
try
{
$list = [
// [
// "name" => "Clinics",
// "value" => 'clinics'
// ],
[
"name" => "Symptoms",
"value" => 'symptoms'
],
[
"name" => "Allergies",
"value" => 'allergies'
],
[
"name" => "Medical Conditions",
"value" => 'medical_conditions'
],
[
"name" => "Medications",
"value" => 'medications'
],
[
"name" => "Procedures",
"value" => 'procedures'
],
[
"name" => "Vaccinations",
"value" => 'vaccinations'
],
// [
// "name" => "Treatment Given",
// "value" => 'treatment_given'
// ]
];
return self::sentResponse(200, $list, __('digimed_validation.success_response.data_fetch_success'));
}
catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function save(AdminListItemUpdateRequest $request, VariableLibrary $variableLibrary)
{
$validated = $request->validated();
try {
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$name = ucfirst(strtolower($variableLibrary->string($request->name)));
$type = $request->type;
$id = $request->id;
$action = $request->action;
DB::beginTransaction();
$nameExplode = explode(',', $name);
$queryData = '';
if (count($nameExplode) != false) {
for ($i = 0; $i < count($nameExplode); $i++) {
if ($type == 'allergies') {
$queryBuilder = Allergie::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'medical_conditions') {
$queryBuilder = MedicalCondition::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'medications') {
$queryBuilder = Medication::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'procedures') {
$queryBuilder = Procedure::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'vaccinations') {
$queryBuilder = Vaccination::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'clinics') {
$queryBuilder = Clinic::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$user = User::find($queryBuilder->user_id);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->mobile_number = $request->mobile_number;
$user->country_code = $request->country_code;
$user->country_id = $request->country_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->save();
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$clinic = UserClinic::where('clinic_id', $id)->count();
if ($clinic == 0) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
} else {
return self::sentResponse(200, [], __('digimed_validation.error_response.user_clinic_exist'));
}
}
$queryBuilder->save();
}
} elseif ($type == 'labs') {
$queryBuilder = Lab::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->clinic_id = $request->clinic_id;
$user = User::find($queryBuilder->user_id);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->mobile_number = $request->mobile_number;
$user->country_code = $request->country_code;
$user->country_id = $request->country_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->save();
if (isset($request->status)) {
$queryBuilder->status = $request->status;
}
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'treatment_given') {
$queryBuilder = TreatmentGiven::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'symptoms') {
$queryBuilder = Symptom::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->symptoms_name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
}
$queryBuilder->save();
}
} elseif ($type == 'symptom_templates') {
$queryBuilder = DoctorSymptomTemplates::where('id', $id)->first();
if ($queryBuilder) {
$queryBuilder->name = $nameExplode[$i];
$queryBuilder->created_by = $auth_id;
$queryBuilder->updated_by = $auth_id;
if ($action == 2) {
$queryBuilder->deleted_by = $auth_id;
$queryBuilder->deleted_at = Carbon::now()->format("Y-m-d H:i:s");
DB::table('doctor_symptoms')->where('template_id', $id)
->update(['deleted_by' => $auth_id, 'deleted_at' => Carbon::now()->format("Y-m-d H:i:s")]);
}
$queryBuilder->save();
}
}
}
}
DB::commit();
if ($type == 'allergies') {
$queryData = new Allergie;
} elseif ($type == 'medical_conditions') {
$queryData = new MedicalCondition;
} elseif ($type == 'medications') {
$queryData = new Medication;
} elseif ($type == 'procedures') {
$queryData = new Procedure;
} elseif ($type == 'vaccinations') {
$queryData = new Vaccination;
} elseif ($type == 'clinics') {
$queryData = new Clinic;
} elseif ($type == 'labs') {
$queryData = new Lab;
} elseif ($type == 'symptoms') {
$queryData = new Symptom;
} elseif ($type == 'treatment_given') {
$queryData = new TreatmentGiven;
} elseif ($type == 'symptom_templates') {
$queryData = new DoctorSymptomTemplates;
}
if ($action == 2)
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
else
return self::sentResponse(200, ['data' => $queryData->get()], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
public function updateStatus(StatusUpdateRequest $request)
{
try {
if($request->module == 'clinic') {
$clinic = Clinic::find($request->id);
$clinic->status = $request->status;
$clinic->save();
}
if($request->module == 'pharmacy') {
$pharmacy = Pharmacy::find($request->id);
$pharmacy->status = $request->status;
$pharmacy->save();
}
if($request->module == 'lab') {
$lab = Lab::find($request->id);
$lab->status = $request->status;
$lab->save();
}
if($request->module == 'speciality') {
$lab = AreaSpecialisation::find($request->id);
$lab->status = $request->status;
$lab->save();
}
if($request->module == 'category') {
$category = Category::find($request->id);
$category->status = $request->status;
$category->save();
}
if($request->module == 'sub_category') {
$sub_category = SubCategory::find($request->id);
$sub_category->status = $request->status;
$sub_category->save();
}
if($request->module == 'blog') {
$blog = Blog::find($request->id);
$blog->status = $request->status;
$blog->save();
}
if($request->module == 'coupon') {
$blog = Coupon::find($request->id);
$blog->status = $request->status;
$blog->save();
}
if($request->module == 'rating') {
$rating = Rating::find($request->id);
$rating->status = $request->status;
$rating->save();
}
if($request->module == 'practitioner_category') {
$practitionerCategory = PractitionerCategory::find($request->id);
$practitionerCategory->status = $request->status;
$practitionerCategory->save();
}
if($request->module == 'practitioner_availability_type') {
$practitionerAvailabilityType = PractitionerAvailabilityType::find($request->id);
$practitionerAvailabilityType->status = $request->status;
$practitionerAvailabilityType->save();
}
if($request->module == 'allergies') {
$allergie = Allergie::find($request->id);
$allergie->status = $request->status;
$allergie->save();
}
if($request->module == 'medical_conditions') {
$medicalCondition = MedicalCondition::find($request->id);
$medicalCondition->status = $request->status;
$medicalCondition->save();
}
if($request->module == 'medications') {
$medication = Medication::find($request->id);
$medication->status = $request->status;
$medication->save();
}
if($request->module == 'procedures') {
$procedure = Procedure::find($request->id);
$procedure->status = $request->status;
$procedure->save();
}
if($request->module == 'vaccinations') {
$vaccination = Vaccination::find($request->id);
$vaccination->status = $request->status;
$vaccination->save();
}
if($request->module == 'symptoms') {
$symptom = Symptom::find($request->id);
$symptom->status = $request->status;
$symptom->save();
}
if($request->module == 'languages') {
$language = Language::find($request->id);
$language->is_enable = $request->status;
$language->save();
}
if($request->module == 'health_profile') {
$language = HealthProfileMaster::find($request->id);
$language->status = $request->status;
$language->save();
}
if($request->module == 'health_profile_metrics') {
$language = HealthProfileMetrics::find($request->id);
$language->status = $request->status;
$language->save();
}
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
//lab list
public function labindex(Request $request) {
try {
$limit = $request->limit ? $request->limit : '';
$lab = Lab::where('status','1');
if(!empty($limit)) {
$lab = $lab->orderBy('id', 'desc');
$lab = $lab->limit($limit);
}
$lab = $lab->get();
return self::sentResponse(200, $lab, __('digimed_validation.success_response.data_fetch_success'));
}
catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
// public function myIndex(){
// $fcmLibrary = new \App\Library\FcmLibrary;
// $response = ($fcmLibrary->sendNotification([1,2,3],'test','test body'));
// return $response;
// }
// public function healthCommand(Request $request){
// $current_date = Carbon::now()->format('m-d');
// $users = \App\User::where('status','2')->get();
// if(count($users) != 0){
// foreach ($users as $key => $value) {
// $user_created = Carbon::parse($value->created_at)->format('m-d');
// if($current_date == $user_created){
// $fcmLibrary = new \App\Library\FcmLibrary;
// $response = ($fcmLibrary->sendNotification([$value->id],'Health Profile Reminder','Kindly review and update your health profile.'));
// }
// }
// }
// }
// public function AppointmentNotification(Request $request){
// $time_limit = Config::get('pusher.notification_reminder_time_limit');
// $date = new DateTime;
// $date->modify('+'.$time_limit.' minutes');
// $formatted_date = $date->format('Y-m-d H:i');
// // dd($formatted_date);
// $appointments = \App\Appointment::where('appointment_status','ACCEPTED')
// ->where('appointment_start_dt', '<' , $formatted_date)
// ->get();
// if(count($appointments) != 0){
// foreach ($appointments as $key => $value) {
// $user_id = $value->patient_id;
// $notifications = \App\User::with(['notificationSettings'])->find($user_id);
// $enable_push_notification = $notifications->notificationSettings->reminders_push;
// if($enable_push_notification == 1)
// {
// if (Config::get('pusher.fcm_enabled'))
// {
// $fcmLibrary = new \App\Library\FcmLibrary;
// $response = ($fcmLibrary->sendNotification([$value->id],'Appointment will start soon','Your appointment '.$value->consultation_id.' will start soon.'));
// }
// }
// }
// }
// }
//add edit doctor
// public function addEditDoctor(Request $request, VariableLibrary $variableLibrary)
// {
// try {
// $authRole = Auth::user();
// $auth_id = $authRole->id;
// // Validate input
// $request->validate([
// 'mobile_number' => 'required|string|unique:users,mobile_number,' . $request->id,
// 'email' => 'required|email|unique:users,email,' . $request->id,
// 'password' => 'required_if:id,null|min:6',
// ]);
// // Transform input
// $first_name = ucfirst(strtolower($variableLibrary->string($request->first_name)));
// $last_name = ucfirst(strtolower($variableLibrary->string($request->last_name)));
// // Begin transaction
// DB::beginTransaction();
// // Create or update user
// $user = User::firstOrNew(['mobile_number' => $request->mobile_number]);
// $user->type = 'doctor';
// $user->first_name = $first_name;
// $user->last_name = $last_name;
// $user->passport_number = $request->passport_number ?? '123ABC'; // Default value
// $user->email = $request->email;
// $user->is_mobile_number_verified = '1';
// $user->email_verification_code = '123456';
// $user->is_email_verified = '1';
// $user->two_step_verification_type = '2';
// $user->is_two_step_verified = '1';
// $user->country_code = $request->country_code;
// $user->country_id = $request->country_id;
// $user->post_code = $request->post_code;
// $user->address = $request->address;
// $user->password = Hash::make($request->password);
// $user->status = '1';
// $user->user_completion = '3';
// $user->created_by = $auth_id;
// $user->updated_by = $auth_id;
// $user->save();
// $user->assignRole('doctor');
// DB::commit();
// // Send account creation email
// $login_link = Config::get('custom.login_link') . '/doctor/login';
// $mailBody = [
// 'email' => $request->email,
// 'body' => [
// 'content' => 'Your '.config('app.name').' Doctor account has been created by the Hospital (' . $authRole->first_name . " " . $authRole->last_name . "). Your Mail ID is : " . $request->email . " and your Password is : " . $request->password . ". Please click the below link to login.",
// 'link_name' => 'Click here to login...',
// 'login_link' => $login_link,
// ],
// 'subject' => 'Account approval invitation - Doctor',
// ];
// dispatch(new AccountApproveJob($mailBody));
// $message = "Doctor added/updated successfully";
// return self::sentResponse(200, ['data' => $user], $message);
// } catch (Exception | Throwable | QueryException $e) {
// DB::rollback();
// return self::sentResponse(500, [], $e->getMessage());
// }
// }
//Add doctor in clinic
public function addDoctor(Request $request) {
try {
$rules = [
'first_name' => 'required|string|max:86',
'last_name' => 'required|string|max:86',
'dob' => 'required|date',
'country_code' => 'required',
'mobile_number' => 'required|string|max:20',
'address' => 'required',
'password' => [
'required',
'string',
'min:8', // Minimum 8 characters
'regex:/[a-z]/', // At least one lowercase letter
'regex:/[A-Z]/', // At least one uppercase letter
'regex:/[0-9]/', // At least one digit
'regex:/[@$!%*#?&]/', // At least one special character
],
'medical_license_number' => 'required|max:100',
'reg_no' => 'required',
'specialization' => 'required',
// 'clinic_id' => 'required',
'email' => [
'required',
'email',
Rule::unique('users', 'email')->ignore($request->user_id)
],
'gender' => 'required'
];
$messages = [
'first_name.required' => __('digimed_validation.form_validation_error.first_name_required'),
'first_name.string' => __('digimed_validation.form_validation_error.first_name_string'),
'first_name.max' => __('digimed_validation.form_validation_error.first_name_max'),
'last_name.required' => __('digimed_validation.form_validation_error.last_name_required'),
'last_name.string' => __('digimed_validation.form_validation_error.last_name_string'),
'last_name.max' => __('digimed_validation.form_validation_error.last_name_max'),
'dob.required' => __('digimed_validation.form_validation_error.dob_required'),
'dob.date' => __('digimed_validation.form_validation_error.dob_date'),
'country_code.required' => __('digimed_validation.form_validation_error.country_code_required'),
'mobile_number.required' => __('digimed_validation.form_validation_error.mobile_number_required'),
'mobile_number.string' => __('digimed_validation.form_validation_error.mobile_number_string'),
'mobile_number.max' => __('digimed_validation.form_validation_error.mobile_number_max'),
'address.required' => __('digimed_validation.form_validation_error.address_required'),
'password.required' => __('digimed_validation.form_validation_error.password_required'),
'medical_license_number.required' => __('digimed_validation.form_validation_error.medical_license_number_required'),
'medical_license_number.max' => __('digimed_validation.form_validation_error.medical_license_number_max'),
'reg_no.required' => __('digimed_validation.form_validation_error.reg_no_required'),
'specialization.required' => __('digimed_validation.form_validation_error.specialization_required'),
'clinic_id.required' => __('digimed_validation.form_validation_error.clinic_id_required'),
'email.required' => __('digimed_validation.form_validation_error.email_required'),
'email.email' => __('digimed_validation.form_validation_error.email_format'),
'gender.required' => __('digimed_validation.form_validation_error.gender_required'),
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return self::sentResponse(422, [], $validator->errors()->first());
}
$auth_id = auth()->user()->id;
$authRole = Auth::user();
DB::beginTransaction();
$data_dob = $request->dob;
$user = new User();
/** @var string $data_dob */
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->gender = $request->gender;
$user->email = $request->email;
$user->region = $request->region;
$user->type = 'doctor';
$user->dob = date('Y-m-d', strtotime(str_replace('/', '-', $data_dob)));
$user->country_id = $request->country_code;
$user->mobile_number = $request->mobile_number;
$user->is_email_verified = '0';
$user->two_step_verification_type = '2';
$user->is_two_step_verified = '0';
$user->address = $request->address;
$user->password = Hash::make($request->password);
$user->status = '1';
$user->user_completion = '3';
// New fields for personal and professional details
$user->medical_license_number = $request->medical_license_number;
if($user->save()) {
$user->assignRole('doctor');
// $roleId = $request->type === 'patient' ? 4 : 3;
// DB::table('model_has_roles')->insert([
// 'role_id' => $roleId,
// 'model_type' => "App\User",
// 'model_id' => $user->id,
// ]);
$notification = UserSettingsNotification::firstOrNew(['user_id' => $user->id]);
$notification->reminders_email ="1";
$notification->reminders_inapp = "1";
$notification->reminders_push = "1";
$notification->appt_confirm_changes_email = "1";
$notification->appt_confirm_changes_inapp = "1";
$notification->appt_confirm_changes_push ="1";
$notification->updated_by = $auth_id;
$notification->save();
$userdetails = UserDetails::firstOrNew(['user_id' => $user->id]);
$userdetails->medical_council_regno = $request->reg_no;
$userdetails->created_by = $auth_id;
$userdetails->save();
$lastDetailID = $userdetails->id;
$data_specilation = $request->specialization;
/** @var string $data_specilation */
if ($data_specilation != "") {
$queryDelete = new UserAreaSpecialisation();
$querySpecilation = $queryDelete->where('user_detail_id', $lastDetailID);
if ($querySpecilation->count() > 0) {
$querySpecilation->update(['deleted_by' => $auth_id]);
$querySpecilation->delete();
}
$areaSpecialisationExplode = explode(',', $data_specilation);
for ($i = 0; $i < count($areaSpecialisationExplode); $i++) {
$query = new UserAreaSpecialisation();
$query->user_detail_id = $lastDetailID;
$query->area_specialisation_id = $areaSpecialisationExplode[$i];
$query->created_by = $auth_id;
$query->save();
}
}
//fetch clinic id
$clinicID = Clinic::where('user_id', $auth_id)->first();
$data_clinic = $clinicID->id;
/** @var string $data_clinic */
if ($data_clinic != "") {
$queryDelete = new UserClinic();
$queryUserClinic = $queryDelete->where('user_detail_id', $lastDetailID);
if ($queryUserClinic->count() > 0) {
$queryUserClinic->update(['deleted_by' => $auth_id]);
$queryUserClinic->delete();
}
$clinicExplode = explode(',', $data_clinic);
for ($i = 0; $i < count($clinicExplode); $i++) {
$queryUserClinic = new UserClinic();
$queryUserClinic->user_detail_id = $lastDetailID;
$queryUserClinic->clinic_id = $clinicExplode[$i];
$queryUserClinic->created_by = $auth_id;
$queryUserClinic->save();
}
}
}
//Send account creation email
$login_link = Config::get('custom.login_link') . 'doctor/login';
$mailBody = [
'email' => $request->email,
'body' => [
'content' => 'Your '.config('app.name').' Doctor account has been created by the Hospital (' . $authRole->first_name . " " . $authRole->last_name . "). Your Mail ID is : " . $request->email . " and your Password is : " . $request->password . ". Please click the below link to login.",
'link_name' => 'Click here to login...',
'login_link' => $login_link,
],
'subject' => 'Account approval invitation - Doctor',
];
dispatch(new AccountApproveJob($mailBody));
$adminEmail = AdminSettings::select('email_username')->first();
$emailUsername = $adminEmail ? $adminEmail->email_username : null;
$mailBody = [
'email' => $emailUsername,
'body' => [
'content' => 'A new registration request has been submitted by ' . $user->name . '. Please review and approve or reject the request.',
],
'subject' => 'New Registration Request'
];
dispatch(new SendEmailNotificationJob($mailBody));
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.doctor_profile_details_store_success'));
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
}