File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/AdminSettingController.php
<?php
namespace App\Http\Controllers\Api;
use App\AdminSettings;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminSettingUpdateRequest;
use App\User;
use App\WebSetting;
use App\Country;
use App\UserSettingsNotification;
use Auth;
use Carbon\Carbon;
use Config;
use DB;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Throwable;
use App\Library\S3Library;
use Illuminate\Support\Facades\Hash;
use App\Http\Requests\UserIdRequest;
use Storage;
class AdminSettingController extends Controller
{
public function updateAdminSettings(AdminSettingUpdateRequest $request)
{
try {
$validated = $request->validated();
DB::beginTransaction();
$auth = Auth::user();
$admin_id = auth()->user()->id;
$data = $request->all();
$AdminSettings = AdminSettings::firstOrNew(['user_id' => $admin_id]);
$AdminSettings->user_id = $admin_id;
if (isset($data['ondemand'])) {
$ondemand = Carbon::parse($data['ondemand'])->format('H:i:s');
$AdminSettings->ondemand = $ondemand;
}
if (isset($data['home_visit'])) {
$home_visit = Carbon::parse($data['home_visit'])->format('H:i:s');
$AdminSettings->home_visit = $home_visit;
}
if (isset($data['schedule_appointment'])) {
$schedule_appointment = Carbon::parse($data['schedule_appointment'])->format('H:i:s');
$AdminSettings->schedule_appointment = $schedule_appointment;
}
if (isset($data['ondemand_time_limit'])) {
$ondemand_time_limit = Carbon::parse($data['ondemand_time_limit'])->format('H:i:s');
$AdminSettings->ondemand_time_limit = $ondemand_time_limit;
}
if (isset($data['dependant_limit'])) {
$dependant_limit = $data['dependant_limit'];
$AdminSettings->dependant_limit = $dependant_limit;
}
if (isset($data['appointment_reminder'])) {
$appointment_reminder = Carbon::parse($data['appointment_reminder'])->format('H:i:s');
$AdminSettings->appointment_reminder = $appointment_reminder;
}
if (isset($data['tax'])) {
$tax = $data['tax'];
$AdminSettings->tax = $tax;
}
if (isset($data['lab_tax'])) {
$lab_tax = $data['lab_tax'];
$AdminSettings->lab_tax = $lab_tax;
}
if (isset($data['platform_fee'])) {
$platform_fee = $data['platform_fee'];
$AdminSettings->platform_fee = $platform_fee;
}
if (isset($data['transaction_fee'])) {
$transaction_fee = $data['transaction_fee'];
$AdminSettings->transaction_fee = $transaction_fee;
}
if (isset($data['tokbox_api_key'])) {
$tokbox_api_key = $data['tokbox_api_key'];
$AdminSettings->tokbox_api_key = $tokbox_api_key;
}
if (isset($data['tokbox_secret'])) {
$tokbox_secret = $data['tokbox_secret'];
$AdminSettings->tokbox_secret = $tokbox_secret;
}
if (isset($data['stripe_public_key'])) {
$stripe_public_key = $data['stripe_public_key'];
$AdminSettings->stripe_public_key = $stripe_public_key;
}
if (isset($data['stripe_secret'])) {
$stripe_secret = $data['stripe_secret'];
$AdminSettings->stripe_secret = $stripe_secret;
}
if (isset($data['twilio_status'])) {
$twilio_status = $data['twilio_status'];
$AdminSettings->twilio_status = $twilio_status;
}
if (isset($data['twilio_sid'])) {
$twilio_sid = $data['twilio_sid'];
$AdminSettings->twilio_sid = $twilio_sid;
}
if (isset($data['twilio_auth_token'])) {
$twilio_auth_token = $data['twilio_auth_token'];
$AdminSettings->twilio_auth_token = $twilio_auth_token;
}
if (isset($data['twilio_verify_sid'])) {
$twilio_verify_sid = $data['twilio_verify_sid'];
$AdminSettings->twilio_verify_sid = $twilio_verify_sid;
}
if (isset($data['twilio_number'])) {
$twilio_number = $data['twilio_number'];
$AdminSettings->twilio_number = $twilio_number;
}
// if (isset($data['email_driver'])) {
// $email_driver = $data['email_driver'];
// $AdminSettings->email_driver = $email_driver;
// }
if (isset($data['email_host'])) {
$email_host = $data['email_host'];
$AdminSettings->email_host = $email_host;
}
if (isset($data['email_port'])) {
$email_port = $data['email_port'];
$AdminSettings->email_port = $email_port;
}
if (isset($data['email_username'])) {
$email_username = $data['email_username'];
$AdminSettings->email_username = $email_username;
}
if (isset($data['email_password'])) {
$email_password = $data['email_password'];
$AdminSettings->email_password = $email_password;
}
if (isset($data['google_api_key'])) {
$google_api_key = $data['google_api_key'];
$AdminSettings->google_api_key = $google_api_key;
}
if (isset($data['pusher_app_id'])) {
$pusher_app_id = $data['pusher_app_id'];
$AdminSettings->pusher_app_id = $pusher_app_id;
}
if (isset($data['pusher_app_key'])) {
$pusher_app_key = $data['pusher_app_key'];
$AdminSettings->pusher_app_key = $pusher_app_key;
}
if (isset($data['pusher_app_secret'])) {
$pusher_app_secret = $data['pusher_app_secret'];
$AdminSettings->pusher_app_secret = $pusher_app_secret;
}
if (isset($data['pusher_app_cluster'])) {
$pusher_app_cluster = $data['pusher_app_cluster'];
$AdminSettings->pusher_app_cluster = $pusher_app_cluster;
}
if (isset($data['google_analytics_tracking_id'])) {
$AdminSettings->google_analytics_tracking_id = $data['google_analytics_tracking_id'];
}
$AdminSettings->created_by = $admin_id;
$AdminSettings->save();
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
public function fetchAdminSettings()
{
try {
$settings = AdminSettings::firstOrFail();
$web = WebSetting::firstOrFail();
/** @var object $settings */
$settings->web_settings = $web;
return self::sentResponse(200, $settings, __('digimed_validation.success_response.data_fetch_success'));
} catch (ModelNotFoundException $e) {
return self::sentResponse(200, [], __('digimed_validation.error_response.records_not_found'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function keyFileUpload(Request $request)
{
try {
$key_name = $request->key_name;
if($key_name == 'vonage' && $request->hasFile('key_file')) {
$file = $request->file('key_file');
Storage::disk('local')->putFileAs('vonage', $file, 'vonage-private.key');
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
}
return self::sentResponse(200, [], __('digimed_validation.error_response.records_not_found'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function adminDetailUpdate(Request $request, S3Library $S3Library) {
try {
$auth = Auth::user();
$admin_id = $auth->id;
// $admin_id = 1;
// $auth = User::find($admin_id);
DB::beginTransaction();
$data_country_code = $request->country_code;
$data_mobile_number = $request->mobile_number;
$data_type = $request->type;
/**
* @var string $data_country_code
* @var string $data_mobile_number
* @var string $data_type
*/
$country = Country::where('phone_code', $data_country_code)->first();
if(!$country) {
return self::sentResponse(200, [], __('digimed_validation.error_response.country_code_not_valid'));
}
$auth->first_name = $request->first_name;
$auth->last_name = $request->last_name;
$auth->country_id = $request->country_id;
// $auth->state_id = $request->state_id;
// $auth->city_id = $request->city_id;
$auth->post_code = $request->post_code;
$auth->address = $request->address;
$auth->country_code = trim($data_country_code);
$auth->mobile_number = trim($data_mobile_number);
if ($request->hasFile('signature')) {
$fileSignature = $request->file('signature');
$digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
if($digimedFile['code'] == 500) {
return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
}
if($digimedFile['code'] == 200) {
$auth->signature = $digimedFile['data'];
}
}
$auth->save();
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
public function adminDetail(Request $request) {
try {
$auth = Auth::user();
$admin_id = $auth->id;
$admin = User::with(['adminUserDetail'])->find($admin_id);
return self::sentResponse(200, $admin, __('digimed_validation.success_response.data_fetch_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function adminUsersList(Request $request) {
try {
$paginate = $request->count_per_page ? $request->count_per_page : 10;
$orderBy = $request->order_by ? $request->order_by : 'desc';
$pageNumber = $request->page ? $request->page : 1;
$offset = ($pageNumber * $paginate) - $paginate; // for pagination
$sort_by = $request->sort_by ? $request->sort_by : 'id';
$search_key = $request->search ? $request->search : '';
$list_type = $request->list_type ? $request->list_type : '';
$limit = $request->limit ? $request->limit : '';
$list = User::where(function($q){
$q->where('type','admin');
$q->whereHas('roles',function($r){
$r->where('name','admin');
});
});
if(!empty($search_key)) {
$list = $list->where(function($q) use($search_key){
$q->where('first_name', 'LIKE', "%{$search_key}%");
$q->orWhere('last_name', 'LIKE', "%{$search_key}%");
});
}
$list = $list->orderBy($sort_by,$orderBy);
if($list_type == 'paginate') {
return self::sentResponse(200, $list->paginate($paginate), __('digimed_validation.success_response.data_fetch_success'));
} else {
if(!empty($limit)) {
$list = $list->limit($limit);
}
return self::sentResponse(200, $list->get(), __('digimed_validation.success_response.data_fetch_success'));
}
} catch(Exception | Throwable $e) {
return self::sentResponse(500,[],$e->getMessage());
}
}
public function addUser(Request $request) {
try {
$auth = Auth::user();
$admin_id = $auth->id;
DB::beginTransaction();
$data_country_code = $request->country_code;
$data_mobile_number = $request->mobile_number;
/**
* @var string $data_country_code
* @var string $data_mobile_number
*/
$country = Country::find($request->country_id);
if(!$country) {
return self::sentResponse(500, [], __('digimed_validation.error_response.country_code_not_valid'));
}
$user = User::where('country_code', trim($country->phone_code))->where('mobile_number', trim($data_mobile_number))->where(function($q) {
$q->where('type', 'admin');
$q->orWhere('type', 'super_admin');
})->first();
if($user) {
return self::sentResponse(500, [], __('digimed_validation.error_response.mobileno_in_use'));
}
$user = User::where('email', $request->email)->where(function($q) {
$q->where('type', 'admin');
$q->orWhere('type', 'super_admin');
})->first();
if($user) {
return self::sentResponse(500, [], __('digimed_validation.error_response.email_in_use'));
}
$user = User::firstOrNew([
'country_code' => trim($country->phone_code),
'mobile_number' => trim($data_mobile_number),
'type' => 'admin',
]);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->passcode = Hash::make($request->password);
$user->password = Hash::make($request->password);
$user->country_id = $request->country_id;
// $user->state_id = $request->state_id;
// $user->city_id = $request->city_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->is_mobile_number_verified = '1';
$user->email_verification_code = '123456';
$user->is_email_verified = '1';
$user->two_step_verification_type = '1';
$user->is_two_step_verified = '1';
$user->status = '2';
// if ($request->hasFile('signature')) {
// $fileSignature = $request->file('signature');
// $digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
// if($digimedFile['code'] == 500) {
// return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
// }
// if($digimedFile['code'] == 200) {
// $user->signature = $digimedFile['data'];
// }
// }
$user->created_by = $admin_id;
$user->save();
$user->assignRole('admin');
$userSettings = UserSettingsNotification::firstOrNew(['user_id' => $user->id]);
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function editUser(UserIdRequest $request) {
try {
$auth = Auth::user();
$admin_id = $auth->id;
// $admin_id = 1;
DB::beginTransaction();
$data_country_code = $request->country_code;
$data_mobile_number = $request->mobile_number;
/**
* @var string $data_country_code
* @var string $data_mobile_number
*/
$country = Country::find($request->country_id);
if(!$country) {
return self::sentResponse(500, [], __('digimed_validation.error_response.country_code_not_valid'));
}
$user = User::where('country_code', trim($country->phone_code))->where('mobile_number', trim($data_mobile_number))->where(function($q) {
$q->where('type', 'admin');
$q->orWhere('type', 'super_admin');
})->where('id', '!=', $request->user_id)->first();
if($user) {
return self::sentResponse(500, [], __('digimed_validation.error_response.mobileno_in_use'));
}
$user = User::where('email', $request->email)->where(function($q) {
$q->where('type', 'admin');
$q->orWhere('type', 'super_admin');
})->where('id', '!=', $request->user_id)->first();
if($user) {
return self::sentResponse(500, [], __('digimed_validation.error_response.email_in_use'));
}
$user = User::find($request->user_id);
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->country_id = $request->country_id;
// $user->state_id = $request->state_id;
// $user->city_id = $request->city_id;
$user->post_code = $request->post_code;
$user->address = $request->address;
$user->country_code = trim($country->phone_code);
$user->mobile_number = trim($data_mobile_number);
// if ($request->hasFile('signature')) {
// $fileSignature = $request->file('signature');
// $digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|pdf|docx|doc|DOCX|DOC', true, $fileSignature, config('app.s3_folder').'/images/signature/'.$admin_id.'/');
// if($digimedFile['code'] == 500) {
// return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
// }
// if($digimedFile['code'] == 200) {
// $user->signature = $digimedFile['data'];
// }
// }
$user->updated_by = $admin_id;
$user->save();
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function deleteUser(UserIdRequest $request) {
try {
$auth = Auth::user();
$admin_id = $auth->id;
// $admin_id = 1;
$user = User::find($request->user_id);
$user->deleted_by = $admin_id;
$user->save();
$user->delete();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function moduleList(Request $request)
{
try {
$list = [
// [
// 'parent' => '',
// 'module' => 'dashboard',
// 'name' => __('Dashboard'),
// 'status' => '1',
// ],
[
'parent' => '',
'module' => 'doctor',
'name' => __('Doctors'),
'status' => '1',
],
[
'parent' => 'doctor',
'module' => 'doctor_list',
'name' => __('Doctors List'),
'status' => '1',
],
[
'parent' => 'doctor',
'module' => 'doctor_request',
'name' => __('Doctors Request'),
'status' => '1',
],
[
'parent' => 'doctor',
'module' => 'fare_consultation',
'name' => __('Fare Consultation'),
'status' => '1',
],
[
'parent' => '',
'module' => 'patient',
'name' => __('Patients'),
'status' => '1',
],
[
'parent' => 'patient',
'module' => 'patient_list',
'name' => __('Patients List'),
'status' => '1',
],
[
'parent' => 'patient',
'module' => 'dependant_list',
'name' => __('Dependants List'),
'status' => '1',
],
[
'parent' => 'patient',
'module' => 'dependant_request',
'name' => __('Dependants Request'),
'status' => '1',
],
[
'parent' => '',
'module' => 'appointment',
'name' => __('Appointments'),
'status' => '1',
],
[
'parent' => '',
'module' => 'rating',
'name' => __('Ratings'),
'status' => '1',
],
[
'parent' => '',
'module' => 'chat',
'name' => __('Chat'),
'status' => '1',
],
[
'parent' => '',
'module' => 'blog',
'name' => __('Blogs'),
'status' => '1',
],
[
'parent' => 'blog',
'module' => 'category',
'name' => __('Categories'),
'status' => '1',
],
[
'parent' => 'blog',
'module' => 'sub_category',
'name' => __('Sub Categories'),
'status' => '1',
],
[
'parent' => 'blog',
'module' => 'blogs',
'name' => __('Blogs'),
'status' => '1',
],
[
'parent' => '',
'module' => 'landing_page',
'name' => __('Landing Page'),
'status' => '1',
],
[
'parent' => 'landing_page',
'module' => 'banner',
'name' => __('Banners'),
'status' => '1',
],
[
'parent' => 'landing_page',
'module' => 'client_logo',
'name' => __('Client Logos'),
'status' => '1',
],
[
'parent' => 'landing_page',
'module' => 'doctor_image',
'name' => __('Doctors Images'),
'status' => '1',
],
[
'parent' => '',
'module' => 'speciality',
'name' => __('Speciality'),
'status' => '1',
],
[
'parent' => '',
'module' => 'subscription',
'name' => __('Subscriptions'),
'status' => '1',
],
[
'parent' => 'subscription',
'module' => 'subscription_plan',
'name' => __('Subscription Plans'),
'status' => '1',
],
[
'parent' => 'subscription',
'module' => 'subscription_history',
'name' => __('Subscription History'),
'status' => '1',
],
[
'parent' => '',
'module' => 'hospital',
'name' => __('Hospitals'),
'status' => '1',
],
[
'parent' => '',
'module' => 'lab',
'name' => __('Laboratory'),
'status' => '1',
],
[
'parent' => 'lab',
'module' => 'lab_list',
'name' => __('Labs'),
'status' => '1',
],
[
'parent' => 'lab',
'module' => 'lab_order',
'name' => __('Orders'),
'status' => '1',
],
[
'parent' => '',
'module' => 'setting',
'name' => __('Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'change_password',
'name' => __('Change Password'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'sms_setting',
'name' => __('SMS Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'tokbox_setting',
'name' => __('Tokbox Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'google_analytic_setting',
'name' => __('Google Analytics Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'email_setting',
'name' => __('Email Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'stripe_setting',
'name' => __('Stripe Settings'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'faq_category',
'name' => __('FAQ Categories'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'faq_list',
'name' => __('FAQ List'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'policy',
'name' => __('Policies'),
'status' => '1',
],
[
'parent' => 'setting',
'module' => 'other_setting',
'name' => __('Other Settings'),
'status' => '1',
],
];
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 userAssignPermission(UserIdRequest $request)
{
try {
$user = User::find($request->user_id);
$user->permission = json_encode($request->permissions);
$user->updated_by = auth()->user()->id;
$user->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function userPermission(UserIdRequest $request)
{
try {
$user = User::find($request->user_id);
$permission = json_decode($user->permission);
return self::sentResponse(200, $permission, __('digimed_validation.success_response.data_fetch_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
}