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 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 PD3d=gA_g%l000008ti># -- GitLab