/**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $faker = Faker\Factory::create();
     // Create a faker, add en_SG providers
     $faker->addProvider(new Faker\Provider\en_SG\Address($faker));
     $faker->addProvider(new Faker\Provider\en_SG\Enhanced($faker));
     $faker->addProvider(new Faker\Provider\en_SG\Person($faker));
     $faker->addProvider(new Faker\Provider\en_SG\PhoneNumber($faker));
     $faker->seed(9876);
     // Calling the same script twice with the same seed produces the same results
     $durations = [30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180];
     // Insert 30 dummy records
     foreach (range(1, 30) as $index) {
         $startDate = $faker->dateTimeBetween('-3 months', '3 months');
         $startHour = ['08', '09', '10', '11', '13', '14', '15', '16'];
         $startMin = ['00', '15', '30', '45'];
         while (Carbon::instance($startDate)->dayOfWeek === Carbon::SUNDAY) {
             $startDate = $faker->dateTimeBetween('-3 months', '3 months');
         }
         if ($startDate === Carbon::SATURDAY) {
             $startHour = ['08', '09', '10', '11'];
         }
         $startTime = $faker->randomElement($startHour) . ":" . $faker->randomElement($startMin) . ":00";
         $elderly = Elderly::with('centre')->find($faker->numberBetween(1, 15));
         $staffList = $elderly->centre->staff->lists('staff_id')->toArray();
         Activity::create(['datetime_start' => $startDate->format('Y-m-d') . " " . $startTime, 'expected_duration_minutes' => $faker->randomElement($durations), 'category' => 'transport', 'more_information' => $faker->optional(0.4, '')->sentence(10, true), 'location_from_id' => $elderly->centre_id, 'location_to_id' => $faker->numberBetween(4, 6), 'elderly_id' => $elderly->elderly_id, 'centre_id' => $elderly->centre_id, 'staff_id' => $faker->randomElement($staffList)]);
     }
 }
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $faker = Faker\Factory::create();
     // Create a faker, add en_SG providers
     $faker->addProvider(new Faker\Provider\en_SG\Address($faker));
     $faker->addProvider(new Faker\Provider\en_SG\Enhanced($faker));
     $faker->addProvider(new Faker\Provider\en_SG\Person($faker));
     $faker->addProvider(new Faker\Provider\en_SG\PhoneNumber($faker));
     $faker->seed(9876);
     // Calling the same script twice with the same seed produces the same results
     $conditions = array('Osteoporosis', 'Dementia', 'Pneumonia', 'Gastrointestinal Infections', 'Urinary Tract Infections', 'Hypertension', 'High Blood Pressure');
     // Insert 15 dummy records
     foreach (range(1, 15) as $index) {
         $gender = $faker->randomElement(['male', 'female']);
         $birthYear = $faker->dateTimeBetween('-85 years', '-60 years')->format('Y');
         $fullName = explode("|", $faker->unique()->nameWithSalutation($gender));
         // Extract full name without salutation ("Full Name|Salutation" to array)
         $fullName = $fullName[0];
         $NOKfullName = explode("|", $faker->unique()->nameWithSalutation($gender));
         // Extract full name without salutation ("Full Name|Salutation" to array)
         $NOKfullName = $NOKfullName[0];
         $centre = $faker->numberBetween(1, 3);
         Elderly::create(['nric' => $faker->unique()->nric, 'name' => $fullName, 'gender' => ucwords($gender[0]), 'birth_year' => $birthYear, 'next_of_kin_name' => $NOKfullName, 'next_of_kin_contact' => preg_replace('/-/', '', $faker->mobile), 'medical_condition' => $faker->optional(0.4, '')->randomElement($conditions), 'image_photo' => 'image.jpeg', 'centre_id' => $centre]);
     }
 }
 /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     if (!$this->auth->user()->is_admin) {
         // All elderly that belongs to the centres that the authenticated user is in charge of
         $elderlyInCentres = collect(Elderly::ofCentreForStaff($this->auth->user())->get()->lists('elderly_id'));
         // Redirect user if elderly profile accessed is not in list
         if (!$elderlyInCentres->contains($request->route()->parameter('elderly'))) {
             return redirect('/elderly');
         }
     }
     return $next($request);
 }
 protected static function boot()
 {
     parent::boot();
     Elderly::deleting(function ($elderly) {
         foreach (['activities', 'languages'] as $relation) {
             foreach ($elderly->{$relation} as $item) {
                 $item->delete();
             }
         }
     });
     Elderly::restored(function ($elderly) {
         foreach (['activities', 'languages'] as $relation) {
             foreach ($elderly->{$relation} as $item) {
                 $item->restore();
             }
         }
     });
 }
 /**
  * Retrieves information of elderly based on transport ID.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return  JSON  elderly or status
  */
 public function retrieveElderyInformation(Request $request)
 {
     if ($request->get('transportId') == null) {
         $status = ["Missing parameter"];
         return response()->json(compact('status'));
     } else {
         $actID = $request->get('transportId');
         $activity = Activity::findOrFail($actID);
         $elderlyID = $activity->elderly_id;
         //return response()->json(compact('elderlyID'));
         $elderly = Elderly::with('languages')->findOrFail($elderlyID);
         if ($elderly == null) {
             $status = ["error"];
             return response()->json(compact('status'));
         } else {
             return response()->json(compact('elderly'));
         }
     }
 }
 /**
  * Delete an elderly/senior.
  * Responds to requests to DELETE /elderly/{id}
  *
  * @param  int  $id  the ID of the elderly/senior
  * @return Response
  */
 public function destroy($id)
 {
     $elderly = Elderly::findOrFail($id);
     $elderly->delete();
     return back()->with('success', 'Senior is removed successfully!');
 }
 /**
  * Update an existing activity.
  * Responds to requests to PUT /activities/{id}
  *
  * @param  int  $id  the ID of the activity
  * @param  \App\Http\Requests\EditActivityRequest  $request
  * @return Response
  */
 public function update($id, EditActivityRequest $request)
 {
     $errors = array();
     $startLocationId = $request->get('start_location');
     $endLocationId = $request->get('end_location');
     $elderlyId = $request->get('senior');
     $startLocation = new Centre();
     $endLocation = new Centre();
     $elderly = new Elderly();
     if ($request->get('start_location') == "others") {
         $postal = $request->get('start_postal');
         $geoInfo = json_decode($this->postalCodeToAddress($postal), true);
         if ($geoInfo['status'] == 'ok') {
             $startLocation->name = ucwords(strtolower($request->get('start_location_name')));
             $startLocation->address = $geoInfo['address'];
             $startLocation->postal_code = $postal;
             $startLocation->lng = $geoInfo['x'];
             $startLocation->lat = $geoInfo['y'];
         } else {
             $errors = array_add($errors, 'start_location', 'Postal code for branch does not exist.');
         }
     }
     if ($request->get('end_location') == "others") {
         if ($request->get('start_location_name') == $request->get('end_location_name')) {
             $endLocation = $startLocation;
         } else {
             $postal = $request->get('end_postal');
             $geoInfo = json_decode($this->postalCodeToAddress($postal), true);
             if ($geoInfo['status'] == 'ok') {
                 $endLocation->name = ucwords(strtolower($request->get('end_location_name')));
                 $endLocation->address = $geoInfo['address'];
                 $endLocation->postal_code = $postal;
                 $endLocation->lng = $geoInfo['x'];
                 $endLocation->lat = $geoInfo['y'];
             } else {
                 $errors = array_add($errors, 'end_location', 'Postal code for appointment venue does not exist.');
             }
         }
     }
     if ($request->get('senior') == "others") {
         $elderly->nric = $request->get('senior_nric');
         $elderly->name = $request->get('senior_name');
         $elderly->gender = $request->get('senior_gender');
         $elderly->birth_year = $request->get('senior_birth_year');
         $elderly->next_of_kin_name = $request->get('senior_nok_name');
         $elderly->next_of_kin_contact = $request->get('senior_nok_contact');
         $elderly->medical_condition = $request->get('senior_medical');
         $elderly->centre_id = $request->get('centre');
         if (count($request->get('languages')) < 1) {
             $errors = array_add($errors, 'languages', 'Language is required.');
         } else {
             foreach ($request->get('languages') as $language) {
                 $v = Validator::make(['language' => $language], ['language' => 'alpha']);
                 if ($v->fails()) {
                     $errors = array_add($errors, 'languages', 'Language must be valid words.');
                 }
             }
         }
     }
     if (count($errors) > 0) {
         return back()->withErrors($errors)->withInput();
     } else {
         if ($request->get('start_location') == "others") {
             $startLocation->save();
             $startLocationId = $startLocation->centre_id;
         }
         if ($request->get('end_location') == "others") {
             $endLocation->save();
             $endLocationId = $endLocation->centre_id;
         }
         if ($request->get('senior') == "others") {
             $elderly->save();
             foreach ($request->get('languages') as $language) {
                 ElderlyLanguage::create(['elderly_id' => $elderly->elderly_id, 'language' => $language]);
             }
             $elderlyId = $elderly->elderly_id;
         }
         $activity = Activity::findOrFail($id);
         $activity->update(['datetime_start' => $request->get('date') . " " . $request->get('time'), 'expected_duration_minutes' => $request->get('duration'), 'category' => 'transport', 'more_information' => $request->get('more_information'), 'location_from_id' => $startLocationId, 'location_to_id' => $endLocationId, 'elderly_id' => $elderlyId, 'centre_id' => $request->get('centre'), 'staff_id' => Auth::user()->staff_id]);
         return redirect()->route('activities.show', compact('activity'))->with('success', 'Activity is updated successfully!');
     }
 }