diff --git a/canapGEST/API/app/Helpers/AccessLevelHelper.php b/canapGEST/API/app/Helpers/AccessLevelHelper.php index 579fdeab795bce3ce68f4bdb8dceb8cb1bcd4b81..a4437d5a47ee1ef2a3ddaaedc9c5dae5cf27c06e 100644 --- a/canapGEST/API/app/Helpers/AccessLevelHelper.php +++ b/canapGEST/API/app/Helpers/AccessLevelHelper.php @@ -8,14 +8,16 @@ class AccessLevelHelper { public static function getDefaultAccessGroups () { $access_groups = []; - $positions = DB::table('position')->select()->get(); + $positions = DB::table('position')->select()->join('has_access', 'position_id', '=', 'fk_position')->get(); foreach ($positions as $position) { - $job = DB::table('job')->select()->where('job_id', $position->fk_job)->first(); - if (isset($access_groups[$job->job_short_value])) { - array_push($access_groups[$job->job_short_value], $position->position_access_group); - } else { - $access_groups[$job->job_short_value][0] = $position->position_access_group; + $jobs = DB::table('job')->select()->where('job_id', $position->fk_job)->get(); + foreach ($jobs as $job) { + if (isset($access_groups[$job->job_short_value])) { + array_push($access_groups[$job->job_short_value], $position->fk_access_group); + } else { + $access_groups[$job->job_short_value][0] = $position->fk_access_group; + } } } return $access_groups; @@ -46,9 +48,9 @@ class AccessLevelHelper { $default_access_groups = self::getDefaultAccessGroups(); $user_alloweds = []; - $user_groups = explode(',', $user_groups); + $user_groups_array = explode(',', $user_groups); - if (self::isResponsible($user_groups)) { + if (self::isResponsible($user_groups_array)) { $user_role = 'responsable'; foreach ($default_access_groups as $group => $accesses) { array_push($user_alloweds, $group); @@ -58,7 +60,7 @@ class AccessLevelHelper $user_role = 'formateur'; foreach ($default_access_groups as $group => $accesses) { foreach ($accesses as $access) { - if ((in_array($access, $user_groups))) { + if ((in_array($access, $user_groups_array))) { array_push($user_alloweds, $group); } } @@ -69,7 +71,8 @@ class AccessLevelHelper public static function isResponsible($user_groups) { - $responsible_default_group = 'responsables-apprentis'; + $responsible_default_group = 'apprentis-informaticiens'; + // $responsible_default_group = 'responsables-apprentis'; return in_array($responsible_default_group, $user_groups); } } \ No newline at end of file diff --git a/canapGEST/API/app/Http/Controllers/PositionsController.php b/canapGEST/API/app/Http/Controllers/PositionsController.php index 3aa25c0c870c5aadee8267eec6ad48255fa8271a..094f3fe766b410035e4dbb612f856b30cc92b373 100644 --- a/canapGEST/API/app/Http/Controllers/PositionsController.php +++ b/canapGEST/API/app/Http/Controllers/PositionsController.php @@ -22,10 +22,17 @@ class PositionsController extends Controller public function getAll() { - return DB::table('position') + $results = []; + $positions = DB::table('position') ->join('location', 'position.fk_location', '=', 'location.location_id') ->join('job', 'position.fk_job', '=', 'job.job_id') ->get(); + + foreach ($positions as $position) { + $position->access_groups = DB::table('has_access')->select('has_access_id','fk_position','fk_access_group as access_group_value')->where('has_access.fk_position', '=', $position->position_id)->get(); + array_push($results, $position); + } + return $results; } public function getAvailableLocations() @@ -38,10 +45,14 @@ class PositionsController extends Controller return DB::table('job')->get(); } + public function getAvailableAccessGroups() + { + return DB::table('access_group')->get(); + } + public function createPosition() { $this->validate($this->request, [ - 'position_access_group' => 'required|string', 'position_spot_number' => 'required|numeric', 'location_id' => 'required|numeric', 'job_id' => 'required|numeric' @@ -49,19 +60,38 @@ class PositionsController extends Controller $has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable'); - $new_position_access_group = $this->request->input('position_access_group'); + $new_position_access_groups = $this->request->input('access_group_cleared'); + $new_position_access_groups_to_create = $this->request->input('new_groups'); $new_position_spot_number = $this->request->input('position_spot_number'); $new_location_id = $this->request->input('location_id'); $new_job_id = $this->request->input('job_id'); - if ($has_permitted_role) { $inserted_id = DB::table('position')->insertGetId([ - "position_access_group" => $new_position_access_group, "position_spot_number" => $new_position_spot_number, "fk_location" => $new_location_id, "fk_job" => $new_job_id ]); + + + foreach ($new_position_access_groups as $group) { + DB::table('has_access')->insert([ + "fk_access_group" => $group['access_group_value'], + "fk_position" => $inserted_id + ]); + } + + foreach ($new_position_access_groups_to_create as $group) { + DB::table('access_group')->insertGetId([ + "access_group_value" => $group + ]); + + DB::table('has_access')->insert([ + "fk_access_group" => $group, + "fk_position" => $inserted_id + ]); + } + return ["message" => lang::get('http.success.created.position'), "id" => $inserted_id]; } else { return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403); @@ -71,7 +101,6 @@ class PositionsController extends Controller public function updatePosition($id) { $this->validate($this->request, [ - 'position_access_group' => 'required|string', 'position_spot_number' => 'required|numeric', 'location_id' => 'required|numeric', 'job_id' => 'required|numeric' @@ -79,7 +108,7 @@ class PositionsController extends Controller $has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable'); - $position_access_group = $this->request->input('position_access_group'); + $position_access_groups = $this->request->input('access_groups'); $position_spot_number = $this->request->input('position_spot_number'); $location_id = $this->request->input('location_id'); $job_id = $this->request->input('job_id'); @@ -87,12 +116,24 @@ class PositionsController extends Controller $wanted_position_exists = DB::table('position')->where('position_id', $id)->exists(); if ($wanted_position_exists && $has_permitted_role) { + // TODO: new value for access group ? DB::table('position')->where('position_id', $id)->update([ - "position_access_group" => $position_access_group, "position_spot_number" => $position_spot_number, "fk_location" => $location_id, "fk_job" => $job_id ]); + + // delete existing + DB::table('has_access')->where('fk_position', $id)->delete(); + + // Adding groups + foreach ($position_access_groups as $group) { + DB::table('has_access')->insert([ + "fk_access_group" => $group['access_group_value'], + "fk_position" => $id + ]); + } + return ["message" => lang::get('http.success.updated.position'), "id" => $id]; } else { return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403); diff --git a/canapGEST/API/app/Providers/tequila_config.inc.php b/canapGEST/API/app/Providers/tequila_config.inc.php deleted file mode 100644 index 817a442aa1b9336fdea156431e2e8ba1d031b5fc..0000000000000000000000000000000000000000 --- a/canapGEST/API/app/Providers/tequila_config.inc.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -// $aConfig = array( -// 'sServer' => 'https://tequila.epfl.ch', -// 'iTimeout' => 86400, -// 'logoutUrl' => "https://localhost/tequila/logout.php", -// ); - -/******************************************************** - DO NOT EDIT UNDER THIS LINE - ********************************************************/ -function GetConfigOption($sOption, $sDefault = '') -{ - $aConfig = array( - 'sServer' => 'https://tequila.epfl.ch', - 'iTimeout' => 86400, - // 'logoutUrl' => "https://localhost/tequila/logout.php", - ); - - if (!array_key_exists($sOption, $aConfig)) - return ($sDefault); - else - return ($aConfig[$sOption]); -} -?> - - diff --git a/canapGEST/API/routes/web.php b/canapGEST/API/routes/web.php index c7403dffb0b984d93ad4b8a2bf3adb8dbc3e71eb..d32119d9c3041623bdb32925055a3946bde190cf 100644 --- a/canapGEST/API/routes/web.php +++ b/canapGEST/API/routes/web.php @@ -40,6 +40,7 @@ $router->group(['middleware' => 'jwt.auth'], function () use ($router) { $router->get('api/positions', 'PositionsController@getAll'); $router->get('api/locations', 'PositionsController@getAvailableLocations'); $router->get('api/jobs', 'PositionsController@getAvailableJobs'); + $router->get('api/groups', 'PositionsController@getAvailableAccessGroups'); $router->put('api/position', 'PositionsController@createPosition'); $router->put('api/location', 'PositionsController@createLocation'); $router->put('api/job', 'PositionsController@createJob'); diff --git a/canapGEST/Site/src/store/modules/positions/actions.js b/canapGEST/Site/src/store/modules/positions/actions.js index 1ac421f4707b94ad8155760467e1b2ab04f9b7aa..15bad32f7e319919a3c4ac4e8dd35d3a8eb875c2 100644 --- a/canapGEST/Site/src/store/modules/positions/actions.js +++ b/canapGEST/Site/src/store/modules/positions/actions.js @@ -30,7 +30,27 @@ export function getLocations(context) { }) } +export function getAccessGroups(context) { + axios({ + method: 'get', + url: '/groups' + }) + .then(response => { + context.commit('setAccessGroups', response.data) + }) +} + export function createPosition(context, data) { + data.new_groups = [] + data.access_group_cleared = [] + data.access_groups.forEach(group => { + if (!group.access_group_value) { + data.new_groups.push(group) + } else { + data.access_group_cleared.push(group) + } + }) + axios({ method: 'put', url: '/position', diff --git a/canapGEST/Site/src/store/modules/positions/mutations.js b/canapGEST/Site/src/store/modules/positions/mutations.js index 62c0af728d31381e9404b57e3cec0943c0f8b43a..814b20e7bd626e3f98de4d9e27562ec78c5f9d8a 100644 --- a/canapGEST/Site/src/store/modules/positions/mutations.js +++ b/canapGEST/Site/src/store/modules/positions/mutations.js @@ -8,4 +8,8 @@ export function setJobs (state, data) { export function setLocations (state, data) { state.available_locations = data +} + +export function setAccessGroups (state, data) { + state.available_access_groups = data } \ No newline at end of file diff --git a/canapGEST/Site/src/store/modules/positions/state.js b/canapGEST/Site/src/store/modules/positions/state.js index 2b7e85ae8dfa6dccfdd23cbc3cfad9f7c5ecec84..640cfe8963a59ad35a79f86b372e321e83a094a6 100644 --- a/canapGEST/Site/src/store/modules/positions/state.js +++ b/canapGEST/Site/src/store/modules/positions/state.js @@ -1,5 +1,6 @@ export default { positions: [], available_jobs: [], - available_locations: [] + available_locations: [], + available_access_groups: [] } \ No newline at end of file diff --git a/canapGEST/Site/src/views/OpenJobsView.vue b/canapGEST/Site/src/views/OpenJobsView.vue index 19a16ca2a3bb32249eb777125b18b0ebc77153cb..960b595360f2b68ac70891a1a66b93b4dc5f596e 100644 --- a/canapGEST/Site/src/views/OpenJobsView.vue +++ b/canapGEST/Site/src/views/OpenJobsView.vue @@ -5,7 +5,7 @@ <div> <v-toolbar flat color="white"> <v-spacer></v-spacer> - <v-dialog v-model="dialog" max-width="600px"> + <v-dialog v-model="dialog" min-height="1700px" max-width="700px"> <template v-slot:activator="{ on }"> <v-btn color="primary" dark class="mb-2" v-on="on">Ajouter</v-btn> </template> @@ -13,7 +13,6 @@ <v-card-title> <span class="headline">{{ modalTitle }}</span> </v-card-title> - <v-card-text> <v-container grid-list-md> <v-layout wrap> @@ -54,11 +53,18 @@ <v-btn flat color="primary" @click="AddNewLocation" v-else>Confirmer</v-btn> </v-flex> - <v-flex xs12 sm6> - <v-text-field - v-model="editedItem.position_access_group" - label="Groupe d'accès" - ></v-text-field> + <v-flex xs12 sm12> + <v-combobox + v-model="editedItem.access_groups" + :items="$store.state.modulePositions.available_access_groups" + :search-input.sync="newAccessGroup.search" + item-text="access_group_value" + item-value="access_group_value" + label="Groupes d'accès" + multiple + small-chips + ></v-combobox> + <small>Pour ajouter un groupe non-existant, entrer sa valeur puis touche "Enter"</small> </v-flex> <v-flex xs12 sm6> <v-text-field @@ -71,7 +77,6 @@ </v-layout> </v-container> </v-card-text> - <v-card-actions> <v-spacer></v-spacer> <v-btn color="primary" flat @click="close">Annuler</v-btn> @@ -88,7 +93,10 @@ <template v-slot:items="props"> <td>{{ props.item.job_full_value }}</td> <td>{{ props.item.location_site }}</td> - <td>{{ props.item.position_access_group }}</td> + <!-- <td + v-if="props.item.access_groups.length > 1" + >{{ props.item.access_groups[0].access_group_value }} + {{props.item.access_groups.length-1}} autre(s) groupes(s)</td>--> + <!-- <td v-else>{{props.item.access_groups[0].access_group_value }}</td> --> <td>{{ props.item.position_spot_number }}</td> <td> <v-icon class="mr-2" @click="editItem(props.item)">edit</v-icon> @@ -121,13 +129,13 @@ export default { editedItem: { job_id: null, location_id: null, - position_access_group: '', + access_groups: [], position_spot_number: 0 }, defaultItem: { job_id: null, location_id: null, - position_access_group: '', + access_groups: [], position_spot_number: 0 }, newJob: { @@ -136,16 +144,18 @@ export default { }, newLocation: { location_site: '' + }, + newAccessGroup: { + access_group_value: '', + search: '' } } }, - computed: { modalTitle() { return this.editedIndex === -1 ? 'Nouvelle place' : 'Edition' } }, - watch: { dialog(val) { val || this.close() @@ -159,6 +169,7 @@ export default { this.$store.dispatch('modulePositions/getPositions') this.$store.dispatch('modulePositions/getJobs') this.$store.dispatch('modulePositions/getLocations') + this.$store.dispatch('modulePositions/getAccessGroups') }, editItem(item) { this.editedIndex = item.position_id @@ -189,7 +200,7 @@ export default { this.$store.dispatch('modulePositions/createPosition', this.editedItem) } this.close() - this.loadData() + setTimeout(() => { this.loadData() }, 300) }, addNewJob() { if (this.addJob) {