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
{
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
......@@ -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);
......
<?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) {
$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');
......
......@@ -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',
......
......@@ -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
export default {
positions: [],
available_jobs: [],
available_locations: []
available_locations: [],
available_access_groups: []
}
\ No newline at end of file
......@@ -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) {
......
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