/**
  * 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
     $languages = array('Cantonese', 'English', 'Hainanese', 'Hakka', 'Hokkien', 'Malay', 'Mandarin', 'Tamil', 'Teochew');
     // Insert dummy records for 15 dummy elderly account
     foreach (range(1, 15) as $index) {
         $languages = $faker->shuffle($languages);
         $numOfLanguages = $faker->numberBetween(1, 4);
         $chosenLanguages = $faker->randomElements($languages, $numOfLanguages);
         foreach ($chosenLanguages as $language) {
             ElderlyLanguage::create(['elderly_id' => $index, 'language' => $language]);
         }
     }
 }
 /**
  * Update an existing elderly/senior.
  * Responds to requests to PUT /elderly/{id}
  *
  * @param  int  $id  the ID of the elderly/senior
  * @param  \App\Http\Requests\EditElderlyRequest  $request
  * @return Response
  */
 public function update($id, EditElderlyRequest $request)
 {
     $elderly = Elderly::findOrFail($id);
     $elderly->update(['centre_id' => $request->get('centre'), 'nric' => $request->get('nric'), 'name' => $request->get('name'), 'gender' => $request->get('gender'), 'birth_year' => $request->get('birth_year'), 'next_of_kin_name' => $request->get('nok_name'), 'next_of_kin_contact' => $request->get('nok_contact'), 'medical_condition' => $request->get('medical_condition')]);
     // Gets the languages that are currently in the database
     $currentLanguages = $elderly->languages->lists('language', 'language');
     // Adds any new languages into the database
     foreach ($request->get('languages') as $language) {
         if ($currentLanguages->has($language)) {
             $currentLanguages->forget($language);
         } else {
             ElderlyLanguage::create(['elderly_id' => $elderly->elderly_id, 'language' => $language]);
         }
     }
     // Remove any current languages that are not in the $request
     foreach ($currentLanguages as $language) {
         ElderlyLanguage::where('elderly_id', $id)->where('language', $language)->delete();
     }
     return redirect()->route('elderly.show', compact('elderly'))->with('success', 'Senior is updated 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!');
     }
 }