Skip to content
Snippets Groups Projects
Commit 284cf7a3 authored by nicrausaz's avatar nicrausaz
Browse files

Ajout de nouvelle place corrigé

parent 3b9714f6
No related branches found
No related tags found
No related merge requests found
...@@ -8,14 +8,16 @@ class AccessLevelHelper ...@@ -8,14 +8,16 @@ class AccessLevelHelper
{ {
public static function getDefaultAccessGroups () { public static function getDefaultAccessGroups () {
$access_groups = []; $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) { foreach ($positions as $position) {
$job = DB::table('job')->select()->where('job_id', $position->fk_job)->first(); $jobs = DB::table('job')->select()->where('job_id', $position->fk_job)->get();
if (isset($access_groups[$job->job_short_value])) { foreach ($jobs as $job) {
array_push($access_groups[$job->job_short_value], $position->position_access_group); if (isset($access_groups[$job->job_short_value])) {
} else { array_push($access_groups[$job->job_short_value], $position->fk_access_group);
$access_groups[$job->job_short_value][0] = $position->position_access_group; } else {
$access_groups[$job->job_short_value][0] = $position->fk_access_group;
}
} }
} }
return $access_groups; return $access_groups;
...@@ -46,9 +48,9 @@ class AccessLevelHelper ...@@ -46,9 +48,9 @@ class AccessLevelHelper
{ {
$default_access_groups = self::getDefaultAccessGroups(); $default_access_groups = self::getDefaultAccessGroups();
$user_alloweds = []; $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'; $user_role = 'responsable';
foreach ($default_access_groups as $group => $accesses) { foreach ($default_access_groups as $group => $accesses) {
array_push($user_alloweds, $group); array_push($user_alloweds, $group);
...@@ -58,7 +60,7 @@ class AccessLevelHelper ...@@ -58,7 +60,7 @@ class AccessLevelHelper
$user_role = 'formateur'; $user_role = 'formateur';
foreach ($default_access_groups as $group => $accesses) { foreach ($default_access_groups as $group => $accesses) {
foreach ($accesses as $access) { foreach ($accesses as $access) {
if ((in_array($access, $user_groups))) { if ((in_array($access, $user_groups_array))) {
array_push($user_alloweds, $group); array_push($user_alloweds, $group);
} }
} }
...@@ -69,7 +71,8 @@ class AccessLevelHelper ...@@ -69,7 +71,8 @@ class AccessLevelHelper
public static function isResponsible($user_groups) 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); return in_array($responsible_default_group, $user_groups);
} }
} }
\ No newline at end of file
...@@ -22,10 +22,17 @@ class PositionsController extends Controller ...@@ -22,10 +22,17 @@ class PositionsController extends Controller
public function getAll() public function getAll()
{ {
return DB::table('position') $results = [];
$positions = DB::table('position')
->join('location', 'position.fk_location', '=', 'location.location_id') ->join('location', 'position.fk_location', '=', 'location.location_id')
->join('job', 'position.fk_job', '=', 'job.job_id') ->join('job', 'position.fk_job', '=', 'job.job_id')
->get(); ->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() public function getAvailableLocations()
...@@ -38,10 +45,14 @@ class PositionsController extends Controller ...@@ -38,10 +45,14 @@ class PositionsController extends Controller
return DB::table('job')->get(); return DB::table('job')->get();
} }
public function getAvailableAccessGroups()
{
return DB::table('access_group')->get();
}
public function createPosition() public function createPosition()
{ {
$this->validate($this->request, [ $this->validate($this->request, [
'position_access_group' => 'required|string',
'position_spot_number' => 'required|numeric', 'position_spot_number' => 'required|numeric',
'location_id' => 'required|numeric', 'location_id' => 'required|numeric',
'job_id' => 'required|numeric' 'job_id' => 'required|numeric'
...@@ -49,19 +60,38 @@ class PositionsController extends Controller ...@@ -49,19 +60,38 @@ class PositionsController extends Controller
$has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable'); $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_position_spot_number = $this->request->input('position_spot_number');
$new_location_id = $this->request->input('location_id'); $new_location_id = $this->request->input('location_id');
$new_job_id = $this->request->input('job_id'); $new_job_id = $this->request->input('job_id');
if ($has_permitted_role) { if ($has_permitted_role) {
$inserted_id = DB::table('position')->insertGetId([ $inserted_id = DB::table('position')->insertGetId([
"position_access_group" => $new_position_access_group,
"position_spot_number" => $new_position_spot_number, "position_spot_number" => $new_position_spot_number,
"fk_location" => $new_location_id, "fk_location" => $new_location_id,
"fk_job" => $new_job_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]; return ["message" => lang::get('http.success.created.position'), "id" => $inserted_id];
} else { } else {
return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403); return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403);
...@@ -71,7 +101,6 @@ class PositionsController extends Controller ...@@ -71,7 +101,6 @@ class PositionsController extends Controller
public function updatePosition($id) public function updatePosition($id)
{ {
$this->validate($this->request, [ $this->validate($this->request, [
'position_access_group' => 'required|string',
'position_spot_number' => 'required|numeric', 'position_spot_number' => 'required|numeric',
'location_id' => 'required|numeric', 'location_id' => 'required|numeric',
'job_id' => 'required|numeric' 'job_id' => 'required|numeric'
...@@ -79,7 +108,7 @@ class PositionsController extends Controller ...@@ -79,7 +108,7 @@ class PositionsController extends Controller
$has_permitted_role = AccessLevelHelper::hasPermittedRole($this->user_role, 'responsable'); $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'); $position_spot_number = $this->request->input('position_spot_number');
$location_id = $this->request->input('location_id'); $location_id = $this->request->input('location_id');
$job_id = $this->request->input('job_id'); $job_id = $this->request->input('job_id');
...@@ -87,12 +116,24 @@ class PositionsController extends Controller ...@@ -87,12 +116,24 @@ class PositionsController extends Controller
$wanted_position_exists = DB::table('position')->where('position_id', $id)->exists(); $wanted_position_exists = DB::table('position')->where('position_id', $id)->exists();
if ($wanted_position_exists && $has_permitted_role) { if ($wanted_position_exists && $has_permitted_role) {
// TODO: new value for access group ?
DB::table('position')->where('position_id', $id)->update([ DB::table('position')->where('position_id', $id)->update([
"position_access_group" => $position_access_group,
"position_spot_number" => $position_spot_number, "position_spot_number" => $position_spot_number,
"fk_location" => $location_id, "fk_location" => $location_id,
"fk_job" => $job_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]; return ["message" => lang::get('http.success.updated.position'), "id" => $id];
} else { } else {
return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403); return response()->json(['error' => 403, 'message' => lang::get('http.unauthorized')], 403);
......
<?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]);
}
?>
...@@ -40,6 +40,7 @@ $router->group(['middleware' => 'jwt.auth'], function () use ($router) { ...@@ -40,6 +40,7 @@ $router->group(['middleware' => 'jwt.auth'], function () use ($router) {
$router->get('api/positions', 'PositionsController@getAll'); $router->get('api/positions', 'PositionsController@getAll');
$router->get('api/locations', 'PositionsController@getAvailableLocations'); $router->get('api/locations', 'PositionsController@getAvailableLocations');
$router->get('api/jobs', 'PositionsController@getAvailableJobs'); $router->get('api/jobs', 'PositionsController@getAvailableJobs');
$router->get('api/groups', 'PositionsController@getAvailableAccessGroups');
$router->put('api/position', 'PositionsController@createPosition'); $router->put('api/position', 'PositionsController@createPosition');
$router->put('api/location', 'PositionsController@createLocation'); $router->put('api/location', 'PositionsController@createLocation');
$router->put('api/job', 'PositionsController@createJob'); $router->put('api/job', 'PositionsController@createJob');
......
...@@ -30,7 +30,27 @@ export function getLocations(context) { ...@@ -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) { 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({ axios({
method: 'put', method: 'put',
url: '/position', url: '/position',
......
...@@ -8,4 +8,8 @@ export function setJobs (state, data) { ...@@ -8,4 +8,8 @@ export function setJobs (state, data) {
export function setLocations (state, data) { export function setLocations (state, data) {
state.available_locations = data state.available_locations = data
}
export function setAccessGroups (state, data) {
state.available_access_groups = data
} }
\ No newline at end of file
export default { export default {
positions: [], positions: [],
available_jobs: [], available_jobs: [],
available_locations: [] available_locations: [],
available_access_groups: []
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<div> <div>
<v-toolbar flat color="white"> <v-toolbar flat color="white">
<v-spacer></v-spacer> <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 }"> <template v-slot:activator="{ on }">
<v-btn color="primary" dark class="mb-2" v-on="on">Ajouter</v-btn> <v-btn color="primary" dark class="mb-2" v-on="on">Ajouter</v-btn>
</template> </template>
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<v-card-title> <v-card-title>
<span class="headline">{{ modalTitle }}</span> <span class="headline">{{ modalTitle }}</span>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
<v-container grid-list-md> <v-container grid-list-md>
<v-layout wrap> <v-layout wrap>
...@@ -54,11 +53,18 @@ ...@@ -54,11 +53,18 @@
<v-btn flat color="primary" @click="AddNewLocation" v-else>Confirmer</v-btn> <v-btn flat color="primary" @click="AddNewLocation" v-else>Confirmer</v-btn>
</v-flex> </v-flex>
<v-flex xs12 sm6> <v-flex xs12 sm12>
<v-text-field <v-combobox
v-model="editedItem.position_access_group" v-model="editedItem.access_groups"
label="Groupe d'accès" :items="$store.state.modulePositions.available_access_groups"
></v-text-field> :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>
<v-flex xs12 sm6> <v-flex xs12 sm6>
<v-text-field <v-text-field
...@@ -71,7 +77,6 @@ ...@@ -71,7 +77,6 @@
</v-layout> </v-layout>
</v-container> </v-container>
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn color="primary" flat @click="close">Annuler</v-btn> <v-btn color="primary" flat @click="close">Annuler</v-btn>
...@@ -88,7 +93,10 @@ ...@@ -88,7 +93,10 @@
<template v-slot:items="props"> <template v-slot:items="props">
<td>{{ props.item.job_full_value }}</td> <td>{{ props.item.job_full_value }}</td>
<td>{{ props.item.location_site }}</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>{{ props.item.position_spot_number }}</td>
<td> <td>
<v-icon class="mr-2" @click="editItem(props.item)">edit</v-icon> <v-icon class="mr-2" @click="editItem(props.item)">edit</v-icon>
...@@ -121,13 +129,13 @@ export default { ...@@ -121,13 +129,13 @@ export default {
editedItem: { editedItem: {
job_id: null, job_id: null,
location_id: null, location_id: null,
position_access_group: '', access_groups: [],
position_spot_number: 0 position_spot_number: 0
}, },
defaultItem: { defaultItem: {
job_id: null, job_id: null,
location_id: null, location_id: null,
position_access_group: '', access_groups: [],
position_spot_number: 0 position_spot_number: 0
}, },
newJob: { newJob: {
...@@ -136,16 +144,18 @@ export default { ...@@ -136,16 +144,18 @@ export default {
}, },
newLocation: { newLocation: {
location_site: '' location_site: ''
},
newAccessGroup: {
access_group_value: '',
search: ''
} }
} }
}, },
computed: { computed: {
modalTitle() { modalTitle() {
return this.editedIndex === -1 ? 'Nouvelle place' : 'Edition' return this.editedIndex === -1 ? 'Nouvelle place' : 'Edition'
} }
}, },
watch: { watch: {
dialog(val) { dialog(val) {
val || this.close() val || this.close()
...@@ -159,6 +169,7 @@ export default { ...@@ -159,6 +169,7 @@ export default {
this.$store.dispatch('modulePositions/getPositions') this.$store.dispatch('modulePositions/getPositions')
this.$store.dispatch('modulePositions/getJobs') this.$store.dispatch('modulePositions/getJobs')
this.$store.dispatch('modulePositions/getLocations') this.$store.dispatch('modulePositions/getLocations')
this.$store.dispatch('modulePositions/getAccessGroups')
}, },
editItem(item) { editItem(item) {
this.editedIndex = item.position_id this.editedIndex = item.position_id
...@@ -189,7 +200,7 @@ export default { ...@@ -189,7 +200,7 @@ export default {
this.$store.dispatch('modulePositions/createPosition', this.editedItem) this.$store.dispatch('modulePositions/createPosition', this.editedItem)
} }
this.close() this.close()
this.loadData() setTimeout(() => { this.loadData() }, 300)
}, },
addNewJob() { addNewJob() {
if (this.addJob) { if (this.addJob) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment