/**
  * @author EB
  * @param Request $request
  * @param Location $location
  * @return \Illuminate\Http\RedirectResponse|Redirect
  * @throws \Exception
  */
 private function handleApplicationRequest(Request $request, Location $location)
 {
     if ($request->has('assisted')) {
         try {
             $application = $this->createAssistedApplication($location, $request);
         } catch (\Exception $e) {
             return redirect('/locations/' . $location->id . '/no-finance');
         }
         if (is_null($application->ext_user)) {
             $this->createProfilePersonal($request, $location, $application);
             return redirect('/locations/' . $location->id . '/applications/' . $application->id . '/profile');
         }
         $this->applicationSynchronisationService->synchroniseApplication($application->id);
         return $this->redirectWithSuccessMessage('/installations/' . $location->installation->id . '/applications/' . $application->id, 'Application successfully created. You can action on this in the `Application / Resume Link` section below');
     }
     $application = $this->createApplication($location, $request);
     if ($request->has('email')) {
         return redirect('/installations/' . $location->installation->id . '/applications/' . $application->id . '/email');
     }
     ApplicationEventHelper::addEvent($application, ApplicationEvent::TYPE_RESUME_INSTORE, Auth::user());
     return redirect($application->ext_resume_url);
 }
 /**
  * @author WN
  * @param ApplicationEntity $applicationEntity
  * @param int $installationId
  * @param int|null $requester
  * @param null $location
  * @return Application
  * @throws Exception
  */
 private function createNewLocal(ApplicationEntity $applicationEntity, $installationId, $requester = null, $location = null)
 {
     $app = new Application();
     $app->installation_id = $installationId;
     $app->ext_id = $applicationEntity->getId();
     $app->user_id = $requester;
     $app->location_id = $location;
     $mapApplicationHelper = new MapApplicationHelper();
     $mapApplicationHelper->mapApplication($applicationEntity, $app);
     if ($app->save()) {
         ApplicationEventHelper::addEvent($app, ApplicationEvent::TYPE_NOTIFICATION_INITIALISED, Auth::user());
         return $app;
     }
     throw new Exception('Problem saving Application');
 }
 /**
  * @author EB
  * @param int $location
  * @param int $application
  * @return \Illuminate\Http\RedirectResponse
  * @throws RedirectException
  */
 public function finishApplication($location, $application)
 {
     try {
         /** @var Location $location */
         $location = Location::findOrFail($location);
         $application = $this->fetchApplicationById($application, $location->installation->id);
         ApplicationEvent\ApplicationEventHelper::addEvent($application, ApplicationEvent::TYPE_RESUME_LINK);
     } catch (\Exception $e) {
         throw $this->redirectWithException('installations/' . $location->installation->id . '/applications', 'Unable to complete the application: ' . $e->getMessage(), $e);
     }
     return $this->redirectWithSuccessMessage('installations/' . $location->installation->id . '/applications/' . $application->id, 'Successfully created an application');
 }