Revisione associazione utenti-sedi
This commit is contained in:
parent
016dfdf098
commit
0ef48ae6c9
|
@ -272,8 +272,9 @@ switch ($resource) {
|
||||||
|
|
||||||
$where[] = 'idanagrafica='.prepare($id_azienda);
|
$where[] = 'idanagrafica='.prepare($id_azienda);
|
||||||
//admin o utente senza una sede prefissata, avrà accesso a tutte le sedi
|
//admin o utente senza una sede prefissata, avrà accesso a tutte le sedi
|
||||||
if (!empty($user->sedi) and !$user->is_admin) {
|
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
|
||||||
$where[] = 'id IN('.implode(',', $user->sedi).')';
|
if (!empty($id_sedi_abilitate) && !$user->is_admin) {
|
||||||
|
$where[] = 'id IN('.implode(',', $id_sedi_abilitate).')';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($search)) {
|
if (!empty($search)) {
|
||||||
|
|
|
@ -522,7 +522,8 @@ if (!empty($elementi)) {
|
||||||
<?php
|
<?php
|
||||||
// Eliminazione ddt solo se ho accesso alla sede aziendale
|
// Eliminazione ddt solo se ho accesso alla sede aziendale
|
||||||
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
||||||
if (in_array($record[$field_name], $user->sedi)) {
|
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
|
||||||
|
if (in_array($record[$field_name], $id_sedi_abilitate)) {
|
||||||
?>
|
?>
|
||||||
<a class="btn btn-danger ask" data-backto="record-list">
|
<a class="btn btn-danger ask" data-backto="record-list">
|
||||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||||
|
|
|
@ -53,7 +53,8 @@ if (isset($id_record)) {
|
||||||
|
|
||||||
// Se la sede del ddt non è di mia competenza, blocco il ddt in modifica
|
// Se la sede del ddt non è di mia competenza, blocco il ddt in modifica
|
||||||
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
||||||
if (!Auth::admin() && !in_array($record[$field_name], $user->sedi)) {
|
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
|
||||||
|
if (!Auth::admin() && !in_array($record[$field_name], $id_sedi_abilitate)) {
|
||||||
$record['flag_completato'] = 1;
|
$record['flag_completato'] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,9 +102,9 @@ class DDT extends Document
|
||||||
|
|
||||||
// Imposto, come sede aziendale, la prima sede disponibile come utente
|
// Imposto, come sede aziendale, la prima sede disponibile come utente
|
||||||
if ($direzione == 'entrata') {
|
if ($direzione == 'entrata') {
|
||||||
$model->idsede_partenza = $user->sedi[0];
|
$model->idsede_partenza = $user->id_sede_principale;
|
||||||
} else {
|
} else {
|
||||||
$model->idsede_destinazione = $user->sedi[0];
|
$model->idsede_destinazione = $user->id_sede_principale;
|
||||||
}
|
}
|
||||||
|
|
||||||
$model->save();
|
$model->save();
|
||||||
|
|
|
@ -858,7 +858,8 @@ if (!empty($note_accredito)) {
|
||||||
<?php
|
<?php
|
||||||
// Eliminazione ddt solo se ho accesso alla sede aziendale
|
// Eliminazione ddt solo se ho accesso alla sede aziendale
|
||||||
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
$field_name = ($dir == 'entrata') ? 'idsede_partenza' : 'idsede_destinazione';
|
||||||
if (in_array($record[$field_name], $user->sedi)) {
|
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
|
||||||
|
if (in_array($record[$field_name], $id_sedi_abilitate)) {
|
||||||
?>
|
?>
|
||||||
<a class="btn btn-danger ask" data-backto="record-list">
|
<a class="btn btn-danger ask" data-backto="record-list">
|
||||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||||
|
|
|
@ -128,7 +128,7 @@ class Fattura extends Document
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sede aziendale scelta tra le sedi disponibili per l'utente
|
// Sede aziendale scelta tra le sedi disponibili per l'utente
|
||||||
$id_sede = $user->sedi[0];
|
$id_sede = $user->id_sede_principale;
|
||||||
if ($direzione == 'entrata') {
|
if ($direzione == 'entrata') {
|
||||||
$model->idsede_destinazione = $id_sede;
|
$model->idsede_destinazione = $id_sede;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -79,23 +79,17 @@ switch (filter('op')) {
|
||||||
|
|
||||||
// Foto
|
// Foto
|
||||||
if (!empty($_FILES['photo']['tmp_name'])) {
|
if (!empty($_FILES['photo']['tmp_name'])) {
|
||||||
$utente->photo = $_FILES['photo'];
|
$utente->setPhoto($_FILES['photo']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Anagrafica
|
// Anagrafica
|
||||||
$id_anagrafica = filter('idanag');
|
$utente->id_anagrafica = filter('id_anagrafica');
|
||||||
$utente->id_anagrafica = $id_anagrafica;
|
|
||||||
|
|
||||||
$utente->save();
|
$utente->save();
|
||||||
|
|
||||||
$dbo->query('DELETE FROM zz_user_sedi WHERE id_user = '.prepare($id_utente));
|
// Aggiornamento sede collegata
|
||||||
$sedi = post('idsede');
|
$id_sedi_abilitate = (array) post('id_sedi_abilitate');
|
||||||
if (empty($sedi)) {
|
$id_sedi_abilitate = array_diff($id_sedi_abilitate, [0]); // Rimozione sede legale
|
||||||
$sedi = [0];
|
$utente->sediAbilitate()->sync($id_sedi_abilitate);
|
||||||
}
|
|
||||||
foreach ($sedi as $id_sede) {
|
|
||||||
$dbo->query('INSERT INTO `zz_user_sedi` (`id_user`,`idsede`) VALUES ('.prepare($id_utente).', '.prepare($id_sede).')');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
flash()->error(tr('Utente già esistente!'));
|
flash()->error(tr('Utente già esistente!'));
|
||||||
}
|
}
|
||||||
|
@ -111,7 +105,7 @@ switch (filter('op')) {
|
||||||
if (!empty($password)) {
|
if (!empty($password)) {
|
||||||
$utente->password = $password;
|
$utente->password = $password;
|
||||||
} elseif (!empty($_FILES['photo']['tmp_name'])) {
|
} elseif (!empty($_FILES['photo']['tmp_name'])) {
|
||||||
$utente->photo = $_FILES['photo'];
|
$utente->setPhoto($_FILES['photo']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$utente->save();
|
$utente->save();
|
||||||
|
|
|
@ -28,37 +28,30 @@ echo '
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
|
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>
|
||||||
|
|
||||||
echo '
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "required": 0, "value": "'.$utente['email'].'" ]}
|
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "required": 0, "value": "'.$utente['email'].'" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>
|
||||||
|
|
||||||
echo '
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{[ "type": "select", "label": "'.tr('Collega ad una anagrafica').'", "name": "idanag", "required": 1, "ajax-source": "anagrafiche_utenti", "value": "'.$utente['id_anagrafica'].'", "icon-after": "add|'.Modules::get('Anagrafiche')['id'].(isset($gruppo) ? '|tipoanagrafica='.$gruppo : '').'" ]}
|
{[ "type": "select", "label": "'.tr('Anagrafica collegata').'", "name": "id_anagrafica", "required": 1, "ajax-source": "anagrafiche_utenti", "value": "'.$utente['id_anagrafica'].'", "icon-after": "add|'.Modules::get('Anagrafiche')['id'].(isset($gruppo) ? '|tipoanagrafica='.$gruppo : '').'" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede[]", "ajax-source": "sedi_azienda", "multiple": "1", "value":"'.($sedi ?: '').'", "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli.').'" ]}
|
{[ "type": "select", "label": "'.tr('Sedi abilitate').'", "name": "id_sedi_abilitate[]", "ajax-source": "sedi_azienda", "value": "'.implode(',', $id_sedi_abilitate).'", "multiple": 1, "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli.').'" ]}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
|
||||||
|
|
||||||
echo '
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$("#idanag").change(function() {
|
$("#id_anagrafica").change(function() {
|
||||||
session_set("superselect,idanagrafica", $(this).val(), 0);
|
$("#id_sede").selectReset();
|
||||||
|
|
||||||
$("#idsede").selectReset();
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
</script>';
|
</script>';
|
||||||
|
|
|
@ -69,10 +69,10 @@ if (!empty($utenti)) {
|
||||||
<td>-</td>';
|
<td>-</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sedi = $dbo->fetchOne('SELECT GROUP_CONCAT(nomesede SEPARATOR ", " ) as nomesede FROM zz_user_sedi INNER JOIN ((SELECT "0" AS id, "Sede legale" AS nomesede) UNION (SELECT id, nomesede FROM an_sedi)) sedi ON zz_user_sedi.idsede=sedi.id WHERE id_user='.prepare($utente['id']).' GROUP BY id_user ')['nomesede'];
|
$elenco_sedi = $dbo->fetchOne('SELECT GROUP_CONCAT(nomesede SEPARATOR ", ") AS elenco FROM zz_user_sede INNER JOIN ((SELECT "0" AS id, "Sede legale" AS nomesede) UNION (SELECT id, nomesede FROM an_sedi)) sedi ON zz_user_sede.id_sede = sedi.id WHERE id_utente = '.prepare($utente['id']).' GROUP BY id_utente')['elenco'];
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<td>'.$sedi.'</td>';
|
<td>'.$elenco_sedi.'</td>';
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<td>';
|
<td>';
|
||||||
|
|
|
@ -40,9 +40,10 @@ if (!empty($id_record)) {
|
||||||
$gruppo = $gruppi[$gruppo_utente];
|
$gruppo = $gruppi[$gruppo_utente];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lettura sedi dell'utente già impostate
|
// Lettura delle sedi abilitate per l'utente
|
||||||
|
$id_sedi_abilitate = [];
|
||||||
if (!empty($user)) {
|
if (!empty($user)) {
|
||||||
$sedi = $dbo->fetchOne('SELECT GROUP_CONCAT(idsede) as sedi FROM zz_user_sedi WHERE id_user='.prepare($id_utente).' GROUP BY id_user')['sedi'];
|
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
@ -64,13 +65,13 @@ if (!empty($user)) {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function no_check_pwd(){
|
function disabilitaPassword() {
|
||||||
$("#password").attr("disabled", true);
|
$("#password").attr("disabled", true);
|
||||||
$("#submit-button").attr("disabled", false).removeClass("disabled");
|
$("#submit-button").attr("disabled", false).removeClass("disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#modals > div").on("shown.bs.modal", function () {
|
$("#modals > div").on("shown.bs.modal", function () {
|
||||||
no_check_pwd();
|
disabilitaPassword();
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#change_password").change(function() {
|
$("#change_password").change(function() {
|
||||||
|
@ -78,7 +79,7 @@ if (!empty($user)) {
|
||||||
$("#password").attr("disabled", false);
|
$("#password").attr("disabled", false);
|
||||||
$("#password").change();
|
$("#password").change();
|
||||||
} else {
|
} else {
|
||||||
no_check_pwd();
|
disabilitaPassword();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>';
|
</script>';
|
||||||
|
|
|
@ -148,7 +148,7 @@ if (!empty($google)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Permetto eliminazione tipo sede solo se non è utilizzata da nessun'altra parte nel gestionale
|
// Permetto eliminazione tipo sede solo se non è utilizzata da nessun'altra parte nel gestionale
|
||||||
$elementi = $dbo->fetchArray('SELECT `zz_user_sedi`.`id_user` AS `id` FROM `zz_user_sedi` WHERE `zz_user_sedi`.`idsede` = '.prepare($id_record).'
|
$elementi = $dbo->fetchArray('SELECT `zz_user_sede`.`id_utente` AS `id` FROM `zz_user_sede` WHERE `zz_user_sede`.`id_sede` = '.prepare($id_record).'
|
||||||
UNION
|
UNION
|
||||||
SELECT `an_referenti`.`id` AS `id` FROM `an_referenti` WHERE `an_referenti`.`idsede` = '.prepare($id_record).'
|
SELECT `an_referenti`.`id` AS `id` FROM `an_referenti` WHERE `an_referenti`.`idsede` = '.prepare($id_record).'
|
||||||
UNION
|
UNION
|
||||||
|
|
|
@ -23,6 +23,7 @@ use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Intervention\Image\ImageManagerStatic;
|
use Intervention\Image\ImageManagerStatic;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
use Modules\Anagrafiche\Sede;
|
||||||
|
|
||||||
class User extends Model
|
class User extends Model
|
||||||
{
|
{
|
||||||
|
@ -33,6 +34,8 @@ class User extends Model
|
||||||
protected $appends = [
|
protected $appends = [
|
||||||
'is_admin',
|
'is_admin',
|
||||||
'gruppo',
|
'gruppo',
|
||||||
|
'nome_completo',
|
||||||
|
'id_sede_principale',
|
||||||
'id_anagrafica',
|
'id_anagrafica',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -111,19 +114,11 @@ class User extends Model
|
||||||
return $this->gruppo;
|
return $this->gruppo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSediAttribute()
|
public function getIdSedePrincipaleAttribute()
|
||||||
{
|
{
|
||||||
$database = database();
|
$sede_principale = $this->sediAbilitate()->first();
|
||||||
|
|
||||||
// Estraggo le sedi dell'utente loggato
|
return $sede_principale ? $sede_principale->id : 0;
|
||||||
$sedi = $database->fetchArray('SELECT idsede FROM zz_user_sedi WHERE id_user='.prepare($this->id));
|
|
||||||
|
|
||||||
// Se l'utente non ha sedi, è come se ce le avesse tutte disponibili per retrocompatibilità
|
|
||||||
if (empty($sedi)) {
|
|
||||||
$sedi = $database->fetchArray('SELECT "0" AS idsede UNION SELECT id AS idsede FROM an_sedi WHERE idanagrafica='.prepare($this->idanagrafica));
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_column($sedi, 'idsede');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setPasswordAttribute($value)
|
public function setPasswordAttribute($value)
|
||||||
|
@ -142,7 +137,19 @@ class User extends Model
|
||||||
return base_path().'/'.$image->filepath;
|
return base_path().'/'.$image->filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setPhotoAttribute($value)
|
public function getNomeCompletoAttribute()
|
||||||
|
{
|
||||||
|
$anagrafica = $this->anagrafica;
|
||||||
|
if (empty($anagrafica)) {
|
||||||
|
return $this->username;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $anagrafica->ragione_sociale.' ('.$this->username.')';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Funzioni
|
||||||
|
|
||||||
|
public function setPhoto($upload_data)
|
||||||
{
|
{
|
||||||
$module = \Modules::get('Utenti e permessi');
|
$module = \Modules::get('Utenti e permessi');
|
||||||
|
|
||||||
|
@ -155,8 +162,8 @@ class User extends Model
|
||||||
$old_photo = Upload::where($data)->get();
|
$old_photo = Upload::where($data)->get();
|
||||||
|
|
||||||
// Informazioni sull'immagine
|
// Informazioni sull'immagine
|
||||||
$filepath = is_array($value) ? $value['tmp_name'] : $value;
|
$filepath = is_array($upload_data) ? $upload_data['tmp_name'] : $upload_data;
|
||||||
$info = Upload::getInfo(is_array($value) ? $value['name'] : $value);
|
$info = Upload::getInfo(is_array($upload_data) ? $upload_data['name'] : $upload_data);
|
||||||
$file = base_dir().'/files/temp_photo.'.$info['extension'];
|
$file = base_dir().'/files/temp_photo.'.$info['extension'];
|
||||||
|
|
||||||
// Ridimensionamento
|
// Ridimensionamento
|
||||||
|
@ -182,16 +189,6 @@ class User extends Model
|
||||||
$this->image_file_id = $upload->id;
|
$this->image_file_id = $upload->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNomeCompletoAttribute()
|
|
||||||
{
|
|
||||||
$anagrafica = $this->anagrafica;
|
|
||||||
if (empty($anagrafica)) {
|
|
||||||
return $this->username;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $anagrafica->ragione_sociale.' ('.$this->username.')';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getApiTokens()
|
public function getApiTokens()
|
||||||
{
|
{
|
||||||
$query = 'SELECT * FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($this->id);
|
$query = 'SELECT * FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($this->id);
|
||||||
|
@ -223,7 +220,7 @@ class User extends Model
|
||||||
return $this->hasMany(Log::class, 'id_utente');
|
return $this->hasMany(Log::class, 'id_utente');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function notes()
|
public function note()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Note::class, 'id_utente');
|
return $this->hasMany(Note::class, 'id_utente');
|
||||||
}
|
}
|
||||||
|
@ -233,6 +230,11 @@ class User extends Model
|
||||||
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
|
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function sediAbilitate()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Sede::class, 'zz_user_sede', 'id_utente', 'id_sede');
|
||||||
|
}
|
||||||
|
|
||||||
public function image()
|
public function image()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Upload::class, 'image_file_id');
|
return $this->belongsTo(Upload::class, 'image_file_id');
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- Aggiornamento associazione utente - sede aziendale
|
||||||
|
ALTER TABLE `zz_user_sedi` RENAME `zz_user_sede`;
|
||||||
|
ALTER TABLE `zz_user_sede` CHANGE `id_user` `id_utente` INT(11) NOT NULL, CHANGE `idsede` `id_sede` INT(11) NOT NULL;
|
||||||
|
|
||||||
|
DELETE FROM `zz_user_sede` WHERE `id_sede` NOT IN (SELECT `id` FROM `an_sedi`);
|
||||||
|
DELETE FROM `zz_user_sede` WHERE `id_utente` NOT IN (SELECT `id` FROM `zz_users`);
|
||||||
|
|
||||||
|
ALTER TABLE `zz_user_sede` ADD FOREIGN KEY (`id_utente`) REFERENCES `zz_users`(`id`) ON DELETE CASCADE, ADD FOREIGN KEY (`id_sede`) REFERENCES `an_sedi`(`id`) ON DELETE CASCADE;
|
|
@ -128,7 +128,7 @@ return [
|
||||||
'zz_tasks_logs',
|
'zz_tasks_logs',
|
||||||
'zz_tokens',
|
'zz_tokens',
|
||||||
'zz_users',
|
'zz_users',
|
||||||
'zz_user_sedi',
|
'zz_user_sede',
|
||||||
'zz_views',
|
'zz_views',
|
||||||
'zz_widgets',
|
'zz_widgets',
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in New Issue