From 72c7df21a06eee95705087034db29e7020710ec6 Mon Sep 17 00:00:00 2001
From: nicrausaz <n.crausaz99@gmail.com>
Date: Thu, 18 Apr 2019 16:43:13 +0200
Subject: [PATCH] Adaptation API, DB, Ajouts requetes / controller status

---
 .../API/app/Helpers/AccessLevelHelper.php     |   7 +-
 .../Http/Controllers/ApplicantsController.php |  51 ++--
 .../app/Http/Controllers/AuthController.php   |   4 +-
 .../Http/Controllers/CommentsController.php   |  15 +-
 .../app/Http/Controllers/FilesController.php  |   8 +-
 .../Http/Controllers/MarkersController.php    |  48 ++--
 .../app/Http/Controllers/StatsController.php  |   7 +-
 .../app/Http/Controllers/StatusController.php |  53 +++++
 .../app/Http/Controllers/UsersController.php  |   1 +
 canapGEST/API/routes/web.php                  |   9 +-
 .../table_applicants.sql                      |   0
 canapGEST/DB/Valeurs de tests/table_file.sql  |  11 +
 .../{tests => Valeurs de tests}/table_job.sql |   0
 .../table_location.sql                        |   0
 .../table_position.sql                        |   0
 .../table_status.sql                          |   0
 .../DB/{tests => Valeurs de tests}/test3.sql  |   0
 .../DB/{tests => Valeurs de tests}/test4.sql  |   0
 .../DB/{tests => Valeurs de tests}/test5.sql  |   0
 .../DB/{tests => Valeurs de tests}/test6.sql  |   0
 canapGEST/DB/script_canap_prod.sql            | 221 ------------------
 canapGEST/DB/tests/test.sql                   |   9 -
 canapGEST/DB/tests/test2.sql                  |  50 ----
 canapGEST/Documentation/journal_travail.xlsx  | Bin 11951 -> 12135 bytes
 24 files changed, 157 insertions(+), 337 deletions(-)
 create mode 100644 canapGEST/API/app/Http/Controllers/StatusController.php
 rename canapGEST/DB/{tests => Valeurs de tests}/table_applicants.sql (100%)
 create mode 100644 canapGEST/DB/Valeurs de tests/table_file.sql
 rename canapGEST/DB/{tests => Valeurs de tests}/table_job.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/table_location.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/table_position.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/table_status.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/test3.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/test4.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/test5.sql (100%)
 rename canapGEST/DB/{tests => Valeurs de tests}/test6.sql (100%)
 delete mode 100644 canapGEST/DB/script_canap_prod.sql
 delete mode 100644 canapGEST/DB/tests/test.sql
 delete mode 100644 canapGEST/DB/tests/test2.sql

diff --git a/canapGEST/API/app/Helpers/AccessLevelHelper.php b/canapGEST/API/app/Helpers/AccessLevelHelper.php
index a8d96cb..72d30ce 100644
--- a/canapGEST/API/app/Helpers/AccessLevelHelper.php
+++ b/canapGEST/API/app/Helpers/AccessLevelHelper.php
@@ -32,15 +32,14 @@ class AccessLevelHelper
 
   public static function hasAccessToJob($job, $permissions)
   {
-    // Deprecated
     return in_array($job, $permissions);
   }
 
   public static function isJobValid($job)
   {
-    // Deprecated
-    foreach (self::$default_access_groups as $key => $access) {
-      if ($access[0] == $job && $job != 'full') {
+    $default_access_groups = self::getDefaultAccessGroups();
+    foreach ($default_access_groups as $access_job => $access) {
+      if ($access_job == $job) {
         return true;
       }
     }
diff --git a/canapGEST/API/app/Http/Controllers/ApplicantsController.php b/canapGEST/API/app/Http/Controllers/ApplicantsController.php
index 341c52c..1d2bdaa 100644
--- a/canapGEST/API/app/Http/Controllers/ApplicantsController.php
+++ b/canapGEST/API/app/Http/Controllers/ApplicantsController.php
@@ -6,7 +6,7 @@ use Laravel\Lumen\Routing\Controller;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use App\Helpers\AccessLevelHelper;
-use \Illuminate\Support\Facades\Lang;
+use Illuminate\Support\Facades\Lang;
 use Illuminate\Support\Facades\File;
 
 class ApplicantsController extends Controller
@@ -26,22 +26,33 @@ class ApplicantsController extends Controller
 
   public function getAll()
   {
+    // Récupère toutes les candidatures autorisée
     $applicants = [];
     foreach ($this->user_permissions as $job) {
-      $job_applicants = DB::table('applicant')->where('applicant_formation', $job)->get();
+      $job_applicants = DB::table('applicant')
+        ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+        ->join('job', 'position.fk_job', '=', 'job.job_id')
+        ->where('job_short_value', $job)
+        ->get();
+
       if (count($job_applicants)) {
         array_push($applicants, $job_applicants);
       }
     }
-    return $applicants[0];
+    return $applicants;
   }
 
   public function getJobApplicants($job)
   {
+    // Récupère toutes les candidatures d'un métier
     if (AccessLevelHelper::isJobValid($job)) {
       $has_access = AccessLevelHelper::hasAccessToJob($job, $this->user_permissions);
       if ($has_access) {
-        return DB::table('applicant')->where('applicant_formation', $job)->get();
+        return DB::table('applicant')
+        ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+        ->join('job', 'position.fk_job', '=', 'job.job_id')
+        ->where('job_short_value', $job)
+        ->get();
       } else {
         return abort(403, lang::get('http.unauthorized'));
       }
@@ -52,7 +63,8 @@ class ApplicantsController extends Controller
 
   public function getOneById($id)
   {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
+    $applicant_job = $this->getApplicantJob($id);
+
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
     if ($has_access) {
       $data = $this->getOne($id);
@@ -62,26 +74,9 @@ class ApplicantsController extends Controller
     }
   }
 
-  public function updateStatus($id)
-  {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
-    $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
-    $has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable');
-    if ($has_access && $has_permitted_role) {
-      $this->validate($this->request, [
-        'status' => 'required'
-      ], [lang::get('validation.required')]);
-
-      $new_status = $this->request->input('status');
-      return DB::table('applicant')->where('applicant_id', $id)->update(['applicant_application_status' => $new_status]);
-    } else {
-      return abort(403, lang::get('http.unauthorized'));
-    }
-  }
-
   public function delete($id)
   {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
+    $applicant_job = $this->getApplicantJob($id);
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
 
     $has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable');
@@ -94,7 +89,7 @@ class ApplicantsController extends Controller
 
   public function export($id)
   {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
+    $applicant_job = $this->getApplicantJob($id);
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
     if ($has_access) {
       $tmp_file_path = sys_get_temp_dir() . '\\' .$id .'-export.json';
@@ -145,4 +140,12 @@ class ApplicantsController extends Controller
       "files" => $files
     ];
   }
+
+  private function getApplicantJob ($id) {
+    return DB::table('applicant')
+    ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+    ->join('job', 'position.fk_job', '=', 'job.job_id')
+    ->where('applicant_id', $id)
+    ->pluck('job_short_value')->first();
+  }
 }
diff --git a/canapGEST/API/app/Http/Controllers/AuthController.php b/canapGEST/API/app/Http/Controllers/AuthController.php
index 44076db..18cbcc5 100644
--- a/canapGEST/API/app/Http/Controllers/AuthController.php
+++ b/canapGEST/API/app/Http/Controllers/AuthController.php
@@ -47,8 +47,8 @@ class AuthController extends Controller
     $this->oClient->SetWantedAttributes(array('uniqueid', 'name', 'firstname', 'unit', 'unitid', 'where', 'group'));
     $this->oClient->SetWishedAttributes(array('email', 'title'));
     // $this->oClient->SetApplicationURL('https://canap-gest.epfl.ch:8443');
-    $this->oClient->SetApplicationURL('localhost:8000/api/auth/login');
-    // $this->oClient->SetApplicationURL('http://canap-gest-dev.local:8080');
+    // $this->oClient->SetApplicationURL('localhost:8000/api/auth/login');
+    $this->oClient->SetApplicationURL('http://canap-gest-dev.local:8080');
     $this->oClient->SetCustomFilter('org=EPFL&group=canap-gest-users-dev');
 
     $this->oClient->Authenticate();
diff --git a/canapGEST/API/app/Http/Controllers/CommentsController.php b/canapGEST/API/app/Http/Controllers/CommentsController.php
index 0750f62..8e93099 100644
--- a/canapGEST/API/app/Http/Controllers/CommentsController.php
+++ b/canapGEST/API/app/Http/Controllers/CommentsController.php
@@ -6,7 +6,7 @@ use Laravel\Lumen\Routing\Controller;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Http\Request;
 use App\Helpers\AccessLevelHelper;
-use \Illuminate\Support\Facades\Lang;
+use Illuminate\Support\Facades\Lang;
 
 class CommentsController extends Controller
 {
@@ -23,7 +23,11 @@ class CommentsController extends Controller
 
   public function getApplicantComments($id)
   {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
+    $applicant_job = DB::table('applicant')
+    ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+    ->join('job', 'position.fk_job', '=', 'job.job_id')
+    ->where('applicant_id', $id)
+    ->pluck('job_short_value')->first();
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
 
     if ($has_access) {
@@ -48,7 +52,12 @@ class CommentsController extends Controller
     $new_date = date("Y-m-d H:i:s");
     $new_applicant_id = $this->request->input('applicant_id');
 
-    $applicant_job = DB::table('applicant')->where('applicant_id', $new_applicant_id)->pluck('applicant_formation')->first();
+    $applicant_job = DB::table('applicant')
+      ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+      ->join('job', 'position.fk_job', '=', 'job.job_id')
+      ->where('applicant_id', $new_applicant_id)
+      ->pluck('job_short_value')->first();
+
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
 
     if ($has_access) {
diff --git a/canapGEST/API/app/Http/Controllers/FilesController.php b/canapGEST/API/app/Http/Controllers/FilesController.php
index dc21c87..08e113e 100644
--- a/canapGEST/API/app/Http/Controllers/FilesController.php
+++ b/canapGEST/API/app/Http/Controllers/FilesController.php
@@ -4,8 +4,10 @@ namespace App\Http\Controllers;
 
 use Laravel\Lumen\Routing\Controller;
 use Illuminate\Http\Request;
+use Illuminate\Http\Reponse;
 use Illuminate\Support\Facades\DB;
 use App\Helpers\AccessLevelHelper;
+use Illuminate\Support\Facades\Lang;
 
 class FilesController extends Controller
 {
@@ -20,14 +22,18 @@ class FilesController extends Controller
 
   public function getFile($id)
   {
+    // Deprecated
     // Check access to file
     $applicant_job = DB::table('applicant')
       ->join('file', 'file.fk_applicant_id', '=', 'applicant.applicant_id')
-      ->where('file_id', $id)->pluck('applicant_formation')->first();
+      ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+      ->join('job', 'position.fk_job', '=', 'job.job_id')
+      ->where('file_id', $id)->pluck('job_short_value')->first();
 
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
     if ($has_access) {
       $file = DB::table('file')->where('file_id', $id)->first();
+      // TODO: Fix this
       return response()->download($file->file_path);
     } else {
       return abort(403, lang::get('http.unauthorized'));
diff --git a/canapGEST/API/app/Http/Controllers/MarkersController.php b/canapGEST/API/app/Http/Controllers/MarkersController.php
index 86fdb0a..78b4986 100644
--- a/canapGEST/API/app/Http/Controllers/MarkersController.php
+++ b/canapGEST/API/app/Http/Controllers/MarkersController.php
@@ -6,8 +6,7 @@ use Laravel\Lumen\Routing\Controller;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Http\Request;
 use App\Helpers\AccessLevelHelper;
-use \Illuminate\Support\Facades\Lang;
-
+use Illuminate\Support\Facades\Lang;
 
 class MarkersController extends Controller
 {
@@ -22,16 +21,22 @@ class MarkersController extends Controller
     $this->user_permissions = $this->request->get('user_permissions');
   }
 
-  public function getApplicantMarkers($id)
-  {
-    $applicant_job = DB::table('applicant')->where('applicant_id', $id)->pluck('applicant_formation')->first();
-    $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
-    if ($has_access) {
-      return DB::table('marker')->where('fk_applicant_id', $id)->get();
-    } else {
-      return abort(403, lang::get('http.unauthorized'));
-    }
-  }
+  // public function getApplicantMarkers($id)
+  // {
+  //   // Not usefull anymore
+  //   $applicant_job = DB::table('applicant')
+  //     ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+  //     ->join('job', 'position.fk_job', '=', 'job.job_id')
+  //     ->where('applicant_id', $id)
+  //     ->pluck('job_short_value')->first();
+
+  //   $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
+  //   if ($has_access) {
+  //     return DB::table('marker')->where('fk_applicant_id', $id)->get();
+  //   } else {
+  //     return abort(403, lang::get('http.unauthorized'));
+  //   }
+  // }
 
   public function getUserMarkerOnApplicant($id)
   {
@@ -41,20 +46,24 @@ class MarkersController extends Controller
   public function create()
   {
     $this->validate($this->request, [
-      'type' => 'required',
+      'value' => 'required',
       'applicant_id' => 'required',
     ], [lang::get('validation.required')]);
 
-    $new_type = $this->request->input('type');
+    $new_value = $this->request->input('value');
     $new_applicant_id = $this->request->input('applicant_id');
 
-    $applicant_job = DB::table('applicant')->where('applicant_id', $new_applicant_id)->pluck('applicant_formation')->first();
+    $applicant_job = DB::table('applicant')
+      ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+      ->join('job', 'position.fk_job', '=', 'job.job_id')
+      ->where('applicant_id', $new_applicant_id)
+      ->pluck('job_short_value')->first();
     $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
 
     if ($has_access) {
       $inserted_id = DB::table('marker')->insertGetId([
         "marker_owner_sciper" => $this->user_sciper,
-        "marker_type" => $new_type,
+        "marker_value" => $new_value,
         "fk_applicant_id" => $new_applicant_id
       ]);
       return ["message" => lang::get('http.success.created.marker'), "id" => $inserted_id];
@@ -66,13 +75,13 @@ class MarkersController extends Controller
   public function update($id)
   {
     $this->validate($this->request, [
-      'type' => 'required'
+      'value' => 'required'
     ], [lang::get('validation.required')]);
 
-    $new_type = $this->request->input('type');
+    $new_value = $this->request->input('value');
     $wanted_marker_exists = DB::table('marker')->where('marker_id', $id)->where('marker_owner_sciper', $this->user_sciper)->exists();
     if ($wanted_marker_exists) {
-      DB::table('marker')->where('marker_id', $id)->update(['marker_type' => $new_type]);
+      DB::table('marker')->where('marker_id', $id)->update(['marker_value' => $new_value]);
       return ["message" => lang::get('http.success.updated.marker'), "id" => $id];
     } else {
       return abort(403, lang::get('http.unauthorized'));
@@ -89,5 +98,4 @@ class MarkersController extends Controller
       return abort(403, lang::get('http.unauthorized'));
     }
   }
-
 }
diff --git a/canapGEST/API/app/Http/Controllers/StatsController.php b/canapGEST/API/app/Http/Controllers/StatsController.php
index 7a54f87..c0ef05e 100644
--- a/canapGEST/API/app/Http/Controllers/StatsController.php
+++ b/canapGEST/API/app/Http/Controllers/StatsController.php
@@ -18,6 +18,11 @@ class StatsController extends Controller
 
   public function getTotal()
   {
-    return DB::table('applicant')->select(DB::raw('applicant_formation as formation, count(*) as total'))->groupBy('formation')->get();
+    return DB::table('applicant')
+      ->select(DB::raw('job_short_value, job_full_value, count(*) as total'))
+      ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+      ->join('job', 'position.fk_job', '=', 'job.job_id')
+      ->groupBy('job_short_value')
+      ->get();
   }
 }
\ No newline at end of file
diff --git a/canapGEST/API/app/Http/Controllers/StatusController.php b/canapGEST/API/app/Http/Controllers/StatusController.php
new file mode 100644
index 0000000..14aa82c
--- /dev/null
+++ b/canapGEST/API/app/Http/Controllers/StatusController.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Laravel\Lumen\Routing\Controller;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use App\Helpers\AccessLevelHelper;
+use Illuminate\Support\Facades\Lang;
+
+class StatusController extends Controller
+{
+  public function __construct(Request $request)
+  {
+    $this->request = $request;
+    $this->user_sciper = $this->request->get('user_sciper');
+    $this->user_permissions = $this->request->get('user_permissions');
+    $this->user_role = $this->request->get('user_role');
+  }
+
+  public function getAvailableStatus()
+  {
+    return DB::table('status')->select()->get();
+  }
+
+  public function updateApplicantStatus ($id)
+  {
+    $applicant_job = DB::table('applicant')
+    ->join('position', 'applicant.fk_position', '=', 'position.position_id')
+    ->join('job', 'position.fk_job', '=', 'job.job_id')
+    ->where('applicant_id', $id)
+    ->pluck('job_short_value')->first();
+
+    $has_access = AccessLevelHelper::hasAccessToJob($applicant_job, $this->user_permissions);
+    $has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable');
+    if ($has_access && $has_permitted_role) {
+      $this->validate($this->request, [
+        'status' => 'required'
+      ], [lang::get('validation.required')]);
+
+      $new_status = $this->request->input('status');
+
+      // Valide le status
+      if (count(DB::table('status')->where('status_value', $new_status)->get())) {
+        return DB::table('applicant')->where('applicant_id', $id)->update(['fk_status' => $new_status]);
+      } else {
+        return abort(404, lang::get('http.notfound'));
+      }
+    } else {
+      return abort(403, lang::get('http.unauthorized'));
+    }
+  }
+}
\ No newline at end of file
diff --git a/canapGEST/API/app/Http/Controllers/UsersController.php b/canapGEST/API/app/Http/Controllers/UsersController.php
index 360858b..252a8b4 100644
--- a/canapGEST/API/app/Http/Controllers/UsersController.php
+++ b/canapGEST/API/app/Http/Controllers/UsersController.php
@@ -33,6 +33,7 @@ class UsersController extends Controller
 
   public function getPermittedJobs()
   {
+    // TODO: return full job values too
     return $this->user_permissions;
   }
 
diff --git a/canapGEST/API/routes/web.php b/canapGEST/API/routes/web.php
index 97810f2..8042999 100644
--- a/canapGEST/API/routes/web.php
+++ b/canapGEST/API/routes/web.php
@@ -15,7 +15,6 @@ $router->group(['middleware' => 'jwt.auth'], function () use ($router) {
   $router->get('api/applicants/job/{job}', 'ApplicantsController@getJobApplicants');
   $router->get('api/applicant/{id:[0-9]+}', 'ApplicantsController@getOneById');
   $router->get('api/applicant/{id:[0-9]+}/export', 'ApplicantsController@export');
-  $router->patch('api/applicant/{id:[0-9]+}', 'ApplicantsController@updateStatus');
   $router->delete('api/applicant/{id:[0-9]+}', 'ApplicantsController@delete');
 
   // Comments
@@ -25,12 +24,18 @@ $router->group(['middleware' => 'jwt.auth'], function () use ($router) {
   $router->delete('api/comment/{id:[0-9]+}', 'CommentsController@delete');
 
   // Markers
-  $router->get('api/applicant/{id:[0-9]+}/markers', 'MarkersController@getApplicantMarkers');
+  // $router->get('api/applicant/{id:[0-9]+}/markers', 'MarkersController@getApplicantMarkers');
   $router->get('api/applicant/{id:[0-9]+}/usermarkers', 'MarkersController@getUserMarkerOnApplicant');
   $router->put('api/marker', 'MarkersController@create');
   $router->patch('api/marker/{id:[0-9]+}', 'MarkersController@update');
   $router->delete('api/marker/{id:[0-9]+}', 'MarkersController@delete');
 
+  // Status
+  $router->get('api/status', 'StatusController@getAvailableStatus');
+  $router->patch('api/status/applicant/{id:[0-9]+}', 'StatusController@updateApplicantStatus');
+
+  // TODO: Positions / Jobs
+
   // Files
   $router->get('api/file/{id:[0-9]+}', 'FilesController@getFile');
 
diff --git a/canapGEST/DB/tests/table_applicants.sql b/canapGEST/DB/Valeurs de tests/table_applicants.sql
similarity index 100%
rename from canapGEST/DB/tests/table_applicants.sql
rename to canapGEST/DB/Valeurs de tests/table_applicants.sql
diff --git a/canapGEST/DB/Valeurs de tests/table_file.sql b/canapGEST/DB/Valeurs de tests/table_file.sql
new file mode 100644
index 0000000..4c31535
--- /dev/null
+++ b/canapGEST/DB/Valeurs de tests/table_file.sql	
@@ -0,0 +1,11 @@
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (280, 'photo-passeport.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\1\\photo-passeport.pdf', 1);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (289, 'photo-passeport.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\photo-passeport.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (283, 'lettre-motivation.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\1\\lettre-motivation.pdf', 1);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (292, 'lettre-motivation.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\lettre-motivation.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (282, 'curriculum-vitae.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\1\\curriculum-vitae.pdf', 1);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (291, 'curriculum-vitae.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\curriculum-vitae.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (281, 'carte-identite.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\1\\carte-identite.pdf', 1);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (290, 'carte-identite.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\carte-identite.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (295, 'annexe3.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\annexe3.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (294, 'annexe2.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\annexe2.pdf', 2);
+INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (293, 'annexe1.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\2\\annexe1.pdf', 2);
diff --git a/canapGEST/DB/tests/table_job.sql b/canapGEST/DB/Valeurs de tests/table_job.sql
similarity index 100%
rename from canapGEST/DB/tests/table_job.sql
rename to canapGEST/DB/Valeurs de tests/table_job.sql
diff --git a/canapGEST/DB/tests/table_location.sql b/canapGEST/DB/Valeurs de tests/table_location.sql
similarity index 100%
rename from canapGEST/DB/tests/table_location.sql
rename to canapGEST/DB/Valeurs de tests/table_location.sql
diff --git a/canapGEST/DB/tests/table_position.sql b/canapGEST/DB/Valeurs de tests/table_position.sql
similarity index 100%
rename from canapGEST/DB/tests/table_position.sql
rename to canapGEST/DB/Valeurs de tests/table_position.sql
diff --git a/canapGEST/DB/tests/table_status.sql b/canapGEST/DB/Valeurs de tests/table_status.sql
similarity index 100%
rename from canapGEST/DB/tests/table_status.sql
rename to canapGEST/DB/Valeurs de tests/table_status.sql
diff --git a/canapGEST/DB/tests/test3.sql b/canapGEST/DB/Valeurs de tests/test3.sql
similarity index 100%
rename from canapGEST/DB/tests/test3.sql
rename to canapGEST/DB/Valeurs de tests/test3.sql
diff --git a/canapGEST/DB/tests/test4.sql b/canapGEST/DB/Valeurs de tests/test4.sql
similarity index 100%
rename from canapGEST/DB/tests/test4.sql
rename to canapGEST/DB/Valeurs de tests/test4.sql
diff --git a/canapGEST/DB/tests/test5.sql b/canapGEST/DB/Valeurs de tests/test5.sql
similarity index 100%
rename from canapGEST/DB/tests/test5.sql
rename to canapGEST/DB/Valeurs de tests/test5.sql
diff --git a/canapGEST/DB/tests/test6.sql b/canapGEST/DB/Valeurs de tests/test6.sql
similarity index 100%
rename from canapGEST/DB/tests/test6.sql
rename to canapGEST/DB/Valeurs de tests/test6.sql
diff --git a/canapGEST/DB/script_canap_prod.sql b/canapGEST/DB/script_canap_prod.sql
deleted file mode 100644
index 1373c43..0000000
--- a/canapGEST/DB/script_canap_prod.sql
+++ /dev/null
@@ -1,221 +0,0 @@
--- MySQL Script generated by MySQL Workbench
--- Tue Feb 12 10:17:14 2019
--- Model: New Model    Version: 1.0
--- MySQL Workbench Forward Engineering
-
--- SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
--- SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
--- SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-
--- -- -----------------------------------------------------
--- -- Schema canap_db
--- -- -----------------------------------------------------
-DROP SCHEMA IF EXISTS `canap_db` ;
-
--- -- -----------------------------------------------------
--- -- Schema canap_db
--- -- -----------------------------------------------------
-CREATE SCHEMA IF NOT EXISTS `canap_db` DEFAULT CHARACTER SET utf8 ;
-USE `canap_db` ;
-
--- -----------------------------------------------------
--- Table `canap_db`.`responsible`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`responsible` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`responsible` (
-  `responsible_id` INT NOT NULL AUTO_INCREMENT,
-  `responsible_gender` VARCHAR(10) NULL,
-  `responsible_name` VARCHAR(200) NULL,
-  `responsible_fsname` VARCHAR(200) NULL,
-  `responsible_street` VARCHAR(100) NULL,
-  `responsible_npa` VARCHAR(100) NULL,
-  `responsible_phone` VARCHAR(20) NULL,
-  PRIMARY KEY (`responsible_id`))
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`applicant`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`applicant` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`applicant` (
-  `applicant_id` INT NOT NULL AUTO_INCREMENT,
-  `applicant_guest_sciper` VARCHAR(100) NOT NULL,
-  `applicant_formation` VARCHAR(100) NOT NULL,
-  `applicant_it_section` VARCHAR(100) NULL,
-  `applicant_formation_location` VARCHAR(100) NOT NULL,
-  `applicant_maturity` TINYINT NOT NULL,
-  `applicant_gender` VARCHAR(10) NOT NULL,
-  `applicant_name` VARCHAR(200) NOT NULL,
-  `applicant_fsname` VARCHAR(200) NOT NULL,
-  `applicant_address_street` VARCHAR(200) NOT NULL,
-  `applicant_address_npa` VARCHAR(200) NOT NULL,
-  `applicant_home_phone` VARCHAR(200) NOT NULL,
-  `applicant_personal_phone` VARCHAR(200) NOT NULL,
-  `applicant_mail` VARCHAR(200) NOT NULL,
-  `applicant_birthdate` VARCHAR(45) NOT NULL,
-  `applicant_origin` VARCHAR(100) NOT NULL,
-  `applicant_nationality` VARCHAR(100) NOT NULL,
-  `applicant_foreign_authorization` VARCHAR(10) NULL,
-  `applicant_avs` VARCHAR(45) NOT NULL,
-  `applicant_main_language` VARCHAR(100) NOT NULL,
-  `applicant_speaks_french` TINYINT NOT NULL,
-  `applicant_speaks_german` TINYINT NOT NULL,
-  `applicant_speaks_english` TINYINT NOT NULL,
-  `applicant_speaks_other` TINYINT NOT NULL,
-  `applicant_has_majority` TINYINT NOT NULL,
-  `applicant_scolarity_end` VARCHAR(45) NOT NULL,
-  `applicant_already_applicant` TINYINT NOT NULL,
-  `applicant_already_applicant_year` VARCHAR(45) NULL,
-  `applicant_application_date` DATETIME NOT NULL,
-  `applicant_application_updated_date` DATETIME NULL,
-  `applicant_application_status` VARCHAR(45) NOT NULL DEFAULT 'new',
-  `fk_applicant_main_responsible` INT NULL,
-  `fk_applicant_sec_responsible` INT NULL,
-  PRIMARY KEY (`applicant_id`),
-  INDEX `fk_applicant_responsible_idx` (`fk_applicant_main_responsible` ASC),
-  INDEX `fk_applicant_responsible1_idx` (`fk_applicant_sec_responsible` ASC),
-  CONSTRAINT `fk_applicant_responsible`
-    FOREIGN KEY (`fk_applicant_main_responsible`)
-    REFERENCES `canap_db`.`responsible` (`responsible_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION,
-  CONSTRAINT `fk_applicant_responsible1`
-    FOREIGN KEY (`fk_applicant_sec_responsible`)
-    REFERENCES `canap_db`.`responsible` (`responsible_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`scolarity`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`scolarity` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`scolarity` (
-  `scolarity_id` INT NOT NULL AUTO_INCREMENT,
-  `scolarity_school` VARCHAR(200) NULL,
-  `scolarity_location` VARCHAR(200) NULL,
-  `scolarity_level` VARCHAR(100) NULL,
-  `scolarity_years` VARCHAR(100) NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`scolarity_id`),
-  INDEX `fk_scolarity_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_scolarity_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`professional_activity`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`professional_activity` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`professional_activity` (
-  `professional_activity_id` INT NOT NULL AUTO_INCREMENT,
-  `professional_activity_company` VARCHAR(100) NULL,
-  `professional_activity_location` VARCHAR(200) NULL,
-  `professional_activity_activity` VARCHAR(100) NULL,
-  `professional_activity_years` VARCHAR(50) NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`professional_activity_id`),
-  INDEX `fk_professional_activity_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_professional_activity_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`training`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`training` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`training` (
-  `training_id` INT NOT NULL AUTO_INCREMENT,
-  `training_job` VARCHAR(100) NULL,
-  `training_company` VARCHAR(100) NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`training_id`),
-  INDEX `fk_training_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_training_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`file`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`file` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`file` (
-  `file_id` INT NOT NULL AUTO_INCREMENT,
-  `file_name` VARCHAR(200) NOT NULL,
-  `file_path` VARCHAR(500) NOT NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`file_id`),
-  INDEX `fk_file_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_file_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`comment`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`comment` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`comment` (
-  `comment_id` INT NOT NULL AUTO_INCREMENT,
-  `comment_owner_sciper` VARCHAR(45) NOT NULL,
-  `comment_content` VARCHAR(1000) NOT NULL,
-  `comment_is_private` TINYINT NOT NULL,
-  `comment_date` DATETIME NOT NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`comment_id`),
-  INDEX `fk_comment_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_comment_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- -----------------------------------------------------
--- Table `canap_db`.`marker`
--- -----------------------------------------------------
-DROP TABLE IF EXISTS `canap_db`.`marker` ;
-
-CREATE TABLE IF NOT EXISTS `canap_db`.`marker` (
-  `marker_id` INT NOT NULL AUTO_INCREMENT,
-  `marker_owner_sciper` VARCHAR(45) NULL,
-  `marker_type` VARCHAR(45) NULL,
-  `fk_applicant_id` INT NOT NULL,
-  PRIMARY KEY (`marker_id`),
-  INDEX `fk_marker_applicant1_idx` (`fk_applicant_id` ASC),
-  CONSTRAINT `fk_marker_applicant1`
-    FOREIGN KEY (`fk_applicant_id`)
-    REFERENCES `canap_db`.`applicant` (`applicant_id`)
-    ON DELETE NO ACTION
-    ON UPDATE NO ACTION)
-ENGINE = InnoDB;
-
-
--- SET SQL_MODE=@OLD_SQL_MODE;
--- SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
--- SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
diff --git a/canapGEST/DB/tests/test.sql b/canapGEST/DB/tests/test.sql
deleted file mode 100644
index 7ab9807..0000000
--- a/canapGEST/DB/tests/test.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (58, 'G29052', 'gardienAnimaux', '', 'Lausanne', 1, 'Homme', 'Crausaz Test', 'Nicolas Test', 'adsgsfd', 'dfhsdfhsdfh', '012125512545627', '012125512545620', 'n.crausaz99@gmail.com', '02/03/2006', 'sdfhsd', 'fhsdfh', '', 'sdfhs', 'sdfhsdfh', 0, 1, 1, 0, 1, '2015', 0, '', '2019-03-05 14:40:39', '2019-03-07 10:52:15', 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (60, 'G29052', 'logisticien', '', 'Lausanne', 0, 'Homme', 'Crausaz Test', 'Nicolas Test', 'Nicolas', 'Crausaz', '092836508921340', '2034580234085', 'n.crausaz99@gmail.com', '03/08/1999', 'Chavannes', 'Suisse', '', '90235972345239459234', 'Francais', 1, 0, 1, 0, 1, '2015', 1, '2015', '2019-03-06 15:03:37', '2019-03-06 16:31:11', 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (62, 'G29052', 'informaticien', '', 'Lausanne', 1, 'Homme', 'Crausaz Test', 'Nicolas Test', 'adsgsfd', 'dfhsdfhsdfh', '012125512545627', '012125512545620', 'n.crausaz99@gmail.com', '02/03/2006', 'sdfhsd', 'fhsdfh', '', 'sdfhs', 'sdfhsdfh', 0, 1, 1, 0, 1, '2015', 0, '', '2019-03-05 14:40:39', '2019-03-07 10:52:15', 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (67, '262544', 'polyMecanicien', '', 'Lausanne', 1, 'Homme', 'Crausaz', 'Nicolas Benjamin', 'asdghasd', 'hasdha', 'sdgasdgas', 'dgasdgasgd', 'nicolas.crausaz@epfl.ch', '01/03/1988', 'afgjfg', 'dgadsgas', '', 'sdgasdg', 'sdgasdga', 1, 0, 1, 0, 1, '2011', 0, '', '2019-03-13 10:19:04', NULL, 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (71, '262544', 'informaticien', 'entreprise', 'Lausanne', 1, 'Homme', 'Crausaz', 'Nicolas Benjamin', 'asdgasdg', 'asdhgasdg', 'asdgasdg', 'dgasdgasdg', 'nicolas.crausaz@epfl.ch', '06/03/2006', 'asdg', 'asdg', '', 'asdgasd', 'asdg', 0, 1, 0, 0, 1, '2014', 0, '', '2019-03-13 10:27:31', NULL, 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (72, '262544', 'informaticien', 'entreprise', 'Lausanne', 1, 'Homme', 'Crausaz', 'Nicolas Benjamin', 'asdgasdg', 'asdhgasdg', 'asdgasdg', 'dgasdgasdg', 'nicolas.crausaz@epfl.ch', '06/03/2006', 'asdg', 'asdg', '', 'asdgasd', 'asdg', 0, 1, 0, 0, 1, '2014', 0, '', '2019-03-13 10:32:31', NULL, 'new', NULL, NULL);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (63, '262544', 'informaticien', 'developpementApplications', 'Lausanne', 1, 'Homme', 'Crausaz', 'Nicolas Benjamin', 'Village 5', '1134 Vufflens', '654486168165', '846416616615', 'nicolas.crausaz@epfl.ch', '03/08/1999', 'Chavannes', 'Suisse', '', '345981230965601', 'Francais', 1, 0, 1, 0, 0, '2015', 1, '2015', '2019-03-12 14:59:12', NULL, 'new', 22, 23);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (66, '262544', 'logisticien', '', 'Lausanne', 1, 'Homme', 'Crausaz', 'Nicolas Benjamin', 'adfh', 'safdhs', 'dfhsdfh', 'sdfhsd', 'nicolas.crausaz@epfl.ch', '08/03/2002', 'sdfhsdf', 'hsdfh', '', 'asdgasdg', 'sadgasdg', 1, 0, 1, 0, 0, '2015', 0, '', '2019-03-13 10:16:21', NULL, 'new', 28, 29);
-INSERT INTO `applicant` (`applicant_id`, `applicant_guest_sciper`, `applicant_formation`, `applicant_it_section`, `applicant_formation_location`, `applicant_maturity`, `applicant_gender`, `applicant_name`, `applicant_fsname`, `applicant_address_street`, `applicant_address_npa`, `applicant_home_phone`, `applicant_personal_phone`, `applicant_mail`, `applicant_birthdate`, `applicant_origin`, `applicant_nationality`, `applicant_foreign_authorization`, `applicant_avs`, `applicant_main_language`, `applicant_speaks_french`, `applicant_speaks_german`, `applicant_speaks_english`, `applicant_speaks_other`, `applicant_has_majority`, `applicant_scolarity_end`, `applicant_already_applicant`, `applicant_already_applicant_year`, `applicant_application_date`, `applicant_application_updated_date`, `applicant_application_status`, `fk_applicant_main_responsible`, `fk_applicant_sec_responsible`) VALUES (73, 'G29052', 'gardienAnimaux', '', 'Lausanne', 1, 'Homme', 'Crausaz Test', 'Nicolas Test', 'Village 8', '1110 Morges', '+71236498798', '+23105723049', 'n.crausaz99@gmail.com', '05/03/2000', 'Lausanne', 'Suisse', '', '278193345682360', 'Francais', 1, 0, 1, 0, 0, '2017', 0, '', '2019-03-21 10:38:19', '2019-03-21 10:40:07', 'new', 31, 32);
diff --git a/canapGEST/DB/tests/test2.sql b/canapGEST/DB/tests/test2.sql
deleted file mode 100644
index 49bef0c..0000000
--- a/canapGEST/DB/tests/test2.sql
+++ /dev/null
@@ -1,50 +0,0 @@
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (280, 'photo-passeport.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\58\\photo-passport.pdf', 58);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (281, 'carte-identite.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\58\\carte-identite.pdf', 58);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (282, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\58\\curriculum-vitae.png', 58);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (283, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\58\\lettre-motivation.png', 58);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (289, 'photo-passeport.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\photo-passeport.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (290, 'carte-identite.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\carte-identite.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (291, 'curriculum-vitae.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\curriculum-vitae.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (292, 'lettre-motivation.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\lettre-motivation.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (293, 'annexe1.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\annexe1.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (294, 'annexe2.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\annexe2.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (295, 'annexe3.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\annexe3.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (296, 'annexe4.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\60\\annexe4.pdf', 60);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (297, 'photo-passeport.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\photo-passeport.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (298, 'carte-identite.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\carte-identite.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (299, 'curriculum-vitae.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\curriculum-vitae.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (300, 'lettre-motivation.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\lettre-motivation.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (301, '2. Criteres d evaluation TPI.PDF', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\2. Criteres d evaluation TPI.PDF', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (302, 'annexe1.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\annexe1.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (303, 'certificat-gri.pdf', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\63\\certificat-gri.pdf', 63);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (316, 'photo-passeport.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\photo-passeport.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (317, 'carte-identite.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\carte-identite.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (318, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\curriculum-vitae.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (319, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\lettre-motivation.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (320, 'situation_transitoire.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\situation_transitoire.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (321, 'annexe1.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\66\\annexe1.png', 66);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (322, 'photo-passeport.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\photo-passeport.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (323, 'carte-identite.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\carte-identite.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (324, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\curriculum-vitae.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (325, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\lettre-motivation.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (326, 'situation_actuelle.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\situation_actuelle.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (327, 'annexe1.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\annexe1.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (328, 'certificat-gimch.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\67\\certificat-gimch.png', 67);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (353, 'photo-passeport.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\photo-passeport.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (354, 'carte-identite.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\carte-identite.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (355, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\curriculum-vitae.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (356, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\lettre-motivation.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (357, 'certificat-gri.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\certificat-gri.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (358, 'annexe1.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\71\\annexe1.png', 71);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (359, 'photo-passeport.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\photo-passeport.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (360, 'carte-identite.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\carte-identite.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (361, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\curriculum-vitae.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (362, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\lettre-motivation.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (363, 'certificat-gri.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\certificat-gri.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (364, 'annexe1.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\annexe1.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (365, 'annexe2.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\annexe2.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (366, 'annexe3.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\72\\annexe3.png', 72);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (367, 'photo-passeport.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\73\\photo-passeport.png', 73);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (368, 'carte-identite.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\73\\carte-identite.png', 73);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (369, 'curriculum-vitae.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\73\\curriculum-vitae.png', 73);
-INSERT INTO `file` (`file_id`, `file_name`, `file_path`, `fk_applicant_id`) VALUES (370, 'lettre-motivation.png', '\\\\scxdata.epfl.ch\\apprentis$\\candidatures\\nouvelles\\test-Nicolas-Crausaz\\73\\lettre-motivation.png', 73);
diff --git a/canapGEST/Documentation/journal_travail.xlsx b/canapGEST/Documentation/journal_travail.xlsx
index f89a8c9109bd7ea4403abd264588f1a7e785409f..41454db1a7aa50b4b5fbda0bbb4feb413b443c5d 100644
GIT binary patch
delta 3664
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

delta 3489
zcmV;S4PNr+UawuS8VLn7u0aQwlOG8je@$<rFc7`3wEw~Koq~ao1cg+jB-*Uns@m<g
z$I1mKSOJV|lMq$??>i<X>Bpt&E&>~S;LUq8<C&bdWr4O#DlV!BlQRb+R;422)jGm|
zZWq=FBc*AT(Lz)#!h5Fh`Skm@$xg`4qYxVe0F{bxu5}&Swn}qWQgtS3R)J+De`HBD
zEalo(wPZ9?Ib*skY}auDyQI9r2ZT_521Be?JY|VUo03)f03umIHPBZ%uT_s$rk{Z;
zsoXTRm5Q<kh(}&<z3)IVD${Veu7sqI1;}p60JReC03PDN;P#%t^ublhQz?{K=`(<~
z52QcnCyq_Xn-H`gWAHg7-<E94e@zaLtYq*-R>2V~IDrx8pV0`ER#z(_1n-MzgCjQ=
zPbVv0u)9O)B3jqiv^1G2Fe<3h^NeejMR*8Hv16wVP$ips*6;$XuH$)QY)_Bnd?OLS
zY9?<a-_mpsXTq3U8TJvr(GtP?GPwjVzv&iyg0k$TB$oh6yoV~4A$fQTf5!1>IEu&C
zC>h3<A14DVc4N<)&lm3OVzwB?#Ce9W$RJDwZFK%3$3REeGYNQax}t4wAx_xv>_p?q
zdATezzZ-hnvyo#C?j2`4brNotsJ-V^CU%{o{j2v~w|&nuokPrAHvq+ly&sIPbKpwc
z!1oMY*KmsP8!pL#%K|RTe++N9*ssWR%>hVtGpf3T{uGU@Xn`_@w4__g3uK||3usHG
zlXUThjE2UkTxMOi>>ekjMG6@;Q}<!uj)`Xiz*>E&bT^|$a^OpRCmuRu-*V>O!1709
z*BberYhCz>J0A?^$$U02sWROz{2yl?ii!-vzKt4|IhFcW(sTpO755ig&8ULfItT*3
z(}~@)w)?-Pe*u#r7!-fP3TtMR0{{SY2LJ#R0001ZY%g<YVRB_;Q*?4^ZfA2Ycx`Na
zRZ(u+MiBiMpgRl*6lwuWB4t@|1xZ0{w}FGW2m<#2V{#;JOYX9}OCjlLivG0fHF&YU
zB_qp_l>A8I4rk`gdv8{Y*PqIQwql(!dKo37I3m%h$&}tKqhEg?e;!^(<UH$)3!`Nj
zeHItJUiEtm=R6@-yJeJnU(Ls3m*!Hk8<|QpB5Pwy_IR|Lv8$|b=5i5V7UM}A&&DMy
z9Z_m(?U&KyRYbK`f7EjO<zN=A7EY}ee)Wq=O~H<CE!U3!T#Wr{F%F?F{La)?b3vJq
zx4dOl9KZ4S;huknbjzA6dMnN!$M4w7@!3zFD?!#{^EakC$q<)XRe5lB9Qp_fEaq^>
zfd{skqGUFTrzat?sg)3YbuQW_PA<QdIGLV_zLOd?Cs$t$CD&hVcNu@HT@0UGoe0sk
zizjD7-Rv=@JIQ+3&mIHJN%USTueeZ-1J@*;pkndaohW~Doe!_`>D8P*Hai#z?<(!B
zA!y(4g~%|u%;)r>V6E0F?aHaHx?E6dn_YKir7|OWd;j?IFcU{!%Bp}<9Azf0OVQr-
zdnh_gW+;5aPAIF%DIdz^Y{T~(I8QVcCglPz&+;K8&XWL>tIAl9!|*)B=Vd&nTcbUv
zp5#*{*1LZ&ujs8&hn6RH1MWRN$FcW9VH!%OE>&1+Azowl96&LJSSz)4<iu|A1E8f~
zJe5y{Q1hR+f{hdkKx+Hck+Uhx6BjZ%k$%7mtK5Qbc7y`1Zs(&4+esj|Vk;Jb7kv@v
z_nxt#{{Xv5=J!#*_kO^&&q47)E8Rvb+ymiy0=R#*(P=P+mID2lk~sbjnM@m$2?lsM
z<RROOEtPI|=Ny#8Q1V{;X1B53z{fD4R}96c!AjP6X%V!Ytf}FR3*4191!2!-*x#+d
z8?Hkz9aOdADx)2P>x*-M(P!E^E4bp#Z>SC132i}s&@9|_m@;rd+0(@rU3t?fo8q=s
z83%t9kQWV$0hU4Rn$ymkdLzNVp$sH%-3g(CQk_9UAyi&l*3Cbxg3o90=ia4Qu?#M4
zIj+fePKJI4j_QuFC@<FRdteF3$Y$GMI}_;t;n+jiU~rpU(VQOe_p@Kpc37aiyXg=H
z3u#ktgX->J0xSV!Yd1z|SUR9POIfQRHtsm6P0Pg~?5nG>!o+o0;%B02Doxh>3!~lL
zoZQ~ZQS%o;q+oDrFV)c`PJRrhNs`C$A!Cex&DH;tAQ%;sIxP^hXAp%A2|C0Iv@rz$
z0HTxi9U^~kt40uhuhjp5cn`3E9ow>fq!^zzQcrc%^zyvMYa0bvx~${mRQ>Ory%?5-
z<hWRg7lxVHZ*Dt`m!DpX+<76a&S<%Ekr%iQDO0-7%HzuY<M+>ZGuNp(F84U6C0V&|
zq;@~8fBa#2q3pRn5yBnNP}VE=#Cf&w{W?970@r^Ytw;$^4wMy`!!0}db;StYOQ9n7
z!yuUY1<p!WX;`pZbkM^gOG!f0b3sb3lrWNG4*2U+R@GN+MS6?60<-6Hb(hkj0u{R~
z&-j~E>N-Wbcs!Pr;av`PzoHnY&MSkz5dNd<Hj>`ksmM}BYkJ@wX!aH6zWH;1?&Gx4
z)VF{CCN(Jb8F|S>09#ezI7n#H=n7k9(MV;}MwxIITb#4~%KazMpF3EQ_zK#u>$88|
z^>Uv<goRZOBZrmyfEL>@bp7>GCeWW5xzxtBQ=jPNCzkDh$w~s*2zku$?uq0i<pj1x
zuJeu3;wi-<nsa#E-2N(3G*?8C)jLX`h5CO-5DNfEEtLo$IOW+3*^nH#x9A=!<8O&g
zTmvw_L1tcGQGS+{@Rd1xa=_=D|3)uAlk9ln050~X;31J>i~U<d>J)MtHuqwoHl;b}
zfN!VBphh7u1%8$5CEN28Tur>`9L2#joVZSUt~o9KQcsYUSCS9~DG95VjKB{c2*iI{
z09Gv!PrX?j-G96fJeB*vs>LRuHxJS5J96LyDF>^Tn|omt#M5^KedQVH^#pUgUNU-d
zpo}2cb%n*D6fOXSbTO>_l%>xPR5*Ot+Y{j~tpnU_>j<Y_>)|GL?*tAaCZIeBJu4SZ
zQP{SIY<gLvrT+p6l4_2P;+V@&36X!qCTtY}1v1G1Ujq^%*)w$J&E}oY_YI#+u7#)8
z7;q}|Vgqm&EDik7g0ERrs!IHt0#0s(g09e3v&ee(O^YD*J+}uV+%EL2Tu9soLS*6Y
zbHrVaq|Y(2%;<AW8;*`y;;gVTavpf|YxUilOhS#!-o~nX%PPeolD$c{nPq>LVgcwa
z%iOZ7&l0v-+c8YM9@wQ8N8&hB=gO^?2|ZoQEZ7^xVOkbiS(PXj)3VTt`gVY&P3Vqg
z5S*T6QRv07SzQ0uOrf-ECbH{Ev3zK!V(Hjv<?dFosJ3L*7aSrzvt}deOX?9#NHi!>
z^_w0g(Uhp+*_xD&v(dnj9R+`0+c0j;BdMtCVJo>ennfP=5_+O3Qv;~LvvMV+3v{3_
zj036<b+ZhueBL0%V<J@)8CQvYt9b?@J<uG+A=QVqiPY|4qC<ecOr(lpA~h&opTaS1
zm)fYD6neTjX;TuUC}vI?lrAi&K^xXM2MR@2)!W?&DIU{-iee_ELFs=Y9q5|lkgA4e
zc5Y;yEE}YFOr(lphT5QXkq$J%aY*~E5Lw-MBj3=wNvWhvqz0vnbfB}1N=nsn%!AUV
zBuG)rq%<g9SOaZooC611QTy_ukMwIVx*qZgGWv=>f8Ogf;XtPug;XlC%Ex}~(L6>{
zYKjqRlhW}ijFp{29~^(gbej`1sPQh`rkv8KMnE-;6oeh+uvj}OJ&S=Zg7@l%s>j+8
z##+&LEP4_x;3c_Fe~1<vN%vdz>t%(H<O^oUtgM}!9OUc>iOtk_34IhW(@IQ~qNDC8
zhY|65cY@z!2sH4(gY)@7DZk#p=0fii;pfV!a7EZt_Du}Wu0t|e1{13M(PiaUlyQbL
z4*M;{gwG!La_)rrJ11W;<Bk0Y>~E+ox0(W4b{LMDUzgVZ0h1vZ6b0#@(@{XPTO%_8
ze`Noxq3u9rPYwhtif<vg+loyZl4!SYZ`y8kgW==7=j3<Ky(C-iRUQ3+bycHtL=%D{
z(4vu*-sb47T*WDhoab8dy3vrM130uSZf`PSm}o4#*v5eM6}Tvnv}3~LXy?6Q7(1~8
z#a$8{I*6ObD(*vRx7cv;#kYVbge<TEf6pcN9CyIjj6`%qN--kMx2=1C6c}nypuNL1
zq4>}1!76w4L9d)SRpk#R>~xHK&X!^jNB7=Uqp@w<q@DILLVk)r*3Yl~s&S>eTM0l#
zCIu4~xNmHc;qxLKuIA3K!;Lo;$cIDFuk@to;|>szQ3$|>xF_X(`uJ3?P%$BNEgq9a
zOy(s`8NFi@^4X2Nc;5vY8tORsf8u>iW-(1mlCoKPNjw3D+?SuA_yv<87!<S6CF=$S
zG_FAhn3KRPI2*zWYi5)K0049c000yK000000000000000(UTJ`K?0W#lU6NH0<jR2
ze-Ravye%pMbr+N9Egu{@#0s=A1pok|5&!@g00000000000000004yDo`W+gRJuVO&
z>7Ub4Kmh;%Q33z}5dZ)H0000000000005IBlW8tJ0tzLQ-X#{3zAh>P-zSsmE>i+!
PD3d=gA_g%l000008ti>#

-- 
GitLab