pimplesushant-pere

Admin DoctorsController

Dec 18th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. namespace App\Modules\Admin\Controllers;
  4.  
  5. use App\Http\Controllers\Controller;
  6. use App\Traits\ResponseTrait;
  7. use App\User;
  8. use Illuminate\Support\Facades\File;
  9. use Illuminate\Http\Request;
  10. use App\Ouch\OuchAPI;
  11. use Illuminate\Support\Facades\DB;
  12. use Yajra\DataTables\Facades\DataTables;
  13. use Illuminate\Support\Facades\Config;
  14. use \App\Services\RegistrationService;
  15.  
  16. class DoctorsController extends Controller
  17. {
  18.     private $ouch;
  19.     use ResponseTrait;
  20.  
  21.     public function __construct(RegistrationService $registrationService)
  22.     {
  23.         $this->ouch = new OuchAPI();
  24.         $this->registrationService = $registrationService;
  25.     }
  26.  
  27.     public function index()
  28.     {
  29.         try {
  30.             return view('Admin::doctors-listing');
  31.         } catch (\Exception $ex) {
  32.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  33.         }
  34.     }
  35.  
  36.     public function getDoctors()
  37.     {
  38.         $users = DB::table('users')
  39.             ->join('doctor_details', 'users.id', '=', 'doctor_details.user_doctor_id')
  40.             ->join('specialities', 'doctor_details.speciality_id', '=', 'specialities.id')
  41.             ->select([
  42.                 'users.id',
  43.                 'users.name',
  44.                 'users.email',
  45.                 'users.is_active',
  46.                 'specialities.name AS speciality'
  47.             ]);
  48.         $users->where('users.role', 'D');
  49.         $responseBody = array();
  50.         return DataTables::of($users)
  51.             ->addColumn('action', function ($m) {
  52.                 $responseBody['id'] = $m->id;
  53.                 $responseBody['is_active'] = $m->is_active;
  54.                 return view('Admin::doctors-listing-actions')->with($responseBody);
  55.             })
  56.             ->filterColumn('speciality', function ($query, $keyword) {
  57.                 $sql = "specialities.name  like ?";
  58.                 $query->whereRaw($sql, ["%{$keyword}%"]);
  59.             })
  60.             ->addColumn('rating', function ($m) {
  61.                 return getDoctorRatings($m->id);
  62.             })->make();
  63.     }
  64.  
  65.     public function add(Request $request)
  66.     {
  67.         try {
  68.             $all_specialities = $this->ouch->get('/api/specialities?limit=20&order=name ASC', true, false, false);
  69.             $statusCode = $all_specialities->getStatusCode();
  70.             $responseBody['specialities'] = json_decode($all_specialities->getBody(), true);
  71.             $languages = $this->ouch->get("/api/languages?limit=20&order=name ASC", true, false);
  72.             $responseBody['languages'] = json_decode($languages->getBody(), true);
  73.             $responseBody['current_year'] = date("Y");
  74.             $responseBody['start_year'] = Config::get('constants.QUALIFICATION_START_YEAR');
  75.             $responseBody['titles'] = \Illuminate\Support\Facades\Config::get('constants.USER_TITLE');
  76.             $responseBody['proficiency'] = \Illuminate\Support\Facades\Config::get('constants.PROFICIENCY');
  77.             if ($statusCode == 200) {
  78.                 return view('Admin::doctors-add')->with($responseBody);
  79.             }
  80.         } catch (\Exception $ex) {
  81.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  82.         }
  83.     }
  84.  
  85.     public function store(Request $request)
  86.     {
  87.         try {
  88.             $data = array();
  89.             $data['title'] = $request->get('user_title');
  90.             $data['name'] = $request->get('name');
  91.             $data['email'] = $request->get('email');
  92.             $data['mobile'] = $request->get('mobile');
  93.             $random_password = $this->generatePassword();
  94.             $data['password'] = $random_password;
  95.             $gender = $request->get('gender');
  96.             $data['gender'] = ($gender == 'Male' ? 'M' : ($gender == 'Female' ? 'F' : 'O'));
  97.             $data['is_active'] = false;
  98.             $data['doctordetails'][0]['user_clinic_id'] = $request->get('selected_clinic_id');
  99.             $data['doctordetails'][0]['speciality_id'] = $request->get('speciality');
  100.             $data['doctordetails'][0]['professional_statement'] = $request->has('professional_statement') ? $request->get('professional_statement') : '';
  101.             $user = new User();
  102.             $data['doctordetails'][0]['year_of_experience'] = $user->calculateYearsOfExperience(date("Y-m-d", strtotime($request->get('start_date_of_practice'))));
  103.  
  104.             $data['doctordetails'][0]['start_date_of_practice'] = date("Y-m-d", strtotime($request->get('start_date_of_practice')));
  105.  
  106.             if ($request->has('membership') && $request->get('membership') != '') {
  107.                 for ($i = 0; $i < count($request->get('membership')); $i++) {
  108.                     $data['tags'][$i]['tag_id'] = $request->get('membership')[$i];
  109.                 }
  110.             }
  111.  
  112.             if (($request->has('doc_degree_name') && $request->get('doc_degree_name') != '') && ($request->has('doc_start_year') && $request->get('doc_start_year') != '')) {
  113.                 for ($i = 0; $i < count($request->get('doc_degree_name')); $i++) {
  114.                     $data['qualifications'][$i]['degree'] = $request->get('doc_degree_name')[$i];
  115.                     $data['qualifications'][$i]['from_to_year'] = $request->get('doc_start_year')[$i];
  116.                 }
  117.             }
  118.  
  119.             if (($request->has('language_name') && $request->get('language_name') != '') && ($request->has('proficiency_name') && $request->get('proficiency_name') != '')) {
  120.                 for ($i = 0; $i < count($request->get('language_name')); $i++) {
  121.                     $data['user_languages'][$i]['language_id'] = $request->get('language_name')[$i];
  122.                     $data['user_languages'][$i]['proficiency'] = $request->get('proficiency_name')[$i];
  123.                 }
  124.             }
  125.  
  126.             if (($request->has('doc_certificate_name') && $request->get('doc_certificate_name') != '') && ($request->has('doc_certificate_date') && $request->get('doc_certificate_date') != '')) {
  127.                 for ($i = 0; $i < count($request->get('doc_certificate_name')); $i++) {
  128.                     $data['certificates'][$i]['name'] = $request->get('doc_certificate_name')[$i];
  129.                     $data['certificates'][$i]['date'] = date("Y-m-d", strtotime($request->get('doc_certificate_date')[$i]));
  130.                 }
  131.             }
  132.  
  133.             if ($request->has('profile_image') && $request->get('profile_image') != null) {
  134.                 $data['profile_image'] = $this->saveProfileImage($request->get('profile_image'));
  135.             }
  136.  
  137.             $req = $this->ouch->post('/api/doctors', $data, null, false);
  138.             $statusCode = $req->getStatusCode();
  139.             $responseBody = json_decode($req->getBody());
  140.  
  141.             if ($statusCode == 201) {
  142.                 $this->registrationService->sendDoctorCredentials($request->get('email'), $random_password);
  143.                 $request->session()->flash('message.level', 'success');
  144.                 $request->session()->flash('message.content', __('custom.DOCTOR_ADD_SUCCESS'));
  145.             } else if (isset($responseBody->errors)) {
  146.                 $errors = $this->parseErrors($responseBody->errors);
  147.                 $request->session()->flash('message.level', 'danger');
  148.                 $request->session()->flash('message.content', implode('', $errors->all(':message<br>')));
  149.                 return redirect()->back();
  150.             }
  151.  
  152.             return redirect()->route('admin.doctors');
  153.  
  154.         } catch (\Exception $ex) {
  155.             $request->session()->flash('message.level', 'danger');
  156.             $request->session()->flash('message.content', __('custom.DOCTOR_ADD_FAILURE'));
  157.             return redirect()->back();
  158.         }
  159.     }
  160.  
  161.     public function generatePassword()
  162.     {
  163.         try {
  164.             $password_length = Config::has('constants.RANDOM_PASSWORD_LENGTH') ? Config::get('constants.RANDOM_PASSWORD_LENGTH') : 8;
  165.             return app('App\Http\Controllers\API\UserController')->generateToken($password_length);
  166.         } catch (\Exception $ex) {
  167.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  168.         }
  169.     }
  170.  
  171.     public function getTags($langauge_id = 1, Request $request)
  172.     {
  173.         try {
  174.             return \App\Tag::select('id', 'name')
  175.                 ->where('language_id', $langauge_id)
  176.                 ->where('name', 'LIKE', $request->get('value') . '%')
  177.                 ->get();
  178.         } catch (\Exception $ex) {
  179.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  180.         }
  181.     }
  182.  
  183.     public function addTag(Request $request)
  184.     {
  185.         try {
  186.             $tag = $this->ouch->post('/api/tags', $request->all(), null, false);
  187.             return $tag;
  188.         } catch (\Exception $ex) {
  189.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  190.         }
  191.     }
  192.  
  193.     public function saveProfileImage($file_data)
  194.     {
  195.         try {
  196.             $file_name = 'image_' . microtime() . '.png';
  197.             @list($type, $file_data) = explode(';', $file_data);
  198.             @list(, $file_data) = explode(',', $file_data);
  199.  
  200.             $directory = '/img/doctor_logo';
  201.             $path = public_path() . $directory;
  202.             if (!File::exists($path)) {
  203.                 File::makeDirectory($path, 0775, $recursive = true, $force = false);
  204.             }
  205.  
  206.             if ($file_data != "") {
  207.                 File::put($path . '/' . $file_name, base64_decode($file_data));
  208.             }
  209.             return $directory . '/' . $file_name;
  210.         } catch (Exception $ex) {
  211.             return false;
  212.         }
  213.     }
  214.  
  215.     public function status($id, $status, Request $request)
  216.     {
  217.         try {
  218.             $is_active = $status ? false : true;
  219.             $update_status = $this->ouch->put('/api/doctors/status/' . $id, ['is_active' => $is_active], true, false, false);
  220.             $statusCode = $update_status->getStatusCode();
  221.             $responseBody = json_decode($update_status->getBody());
  222.             if ($statusCode == 200) {
  223.                 $request->session()->flash('message.level', 'success');
  224.                 $request->session()->flash('message.content', __('custom.DOCTOR_STATUS_UPDATE_SUCCESS'));
  225.             } else if (isset($responseBody->errors)) {
  226.                 $errors = $this->parseErrors($responseBody->errors);
  227.                 $request->session()->flash('message.level', 'danger');
  228.                 $request->session()->flash('message.content', implode('', $errors->all(':message')));
  229.             } else {
  230.                 $request->session()->flash('message.level', 'danger');
  231.                 $request->session()->flash('message.content', __('custom.DOCTOR_STATUS_UPDATE_FAILED'));
  232.             }
  233.             return redirect()->route('admin.doctors');
  234.         } catch (\Exception $ex) {
  235.             \Illuminate\Support\Facades\Log::info($ex->getMessage() . 'on line no. ' . $ex->getLine());
  236.         }
  237.     }
  238. }
Add Comment
Please, Sign In to add comment