Revisione associazione utenti-sedi

This commit is contained in:
Dasc3er 2021-07-28 16:25:33 +02:00
parent 016dfdf098
commit 0ef48ae6c9
14 changed files with 71 additions and 69 deletions

View File

@ -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)) {

View File

@ -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'); ?>

View File

@ -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;
} }
} }

View File

@ -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();

View File

@ -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'); ?>

View File

@ -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 {

View File

@ -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();

View File

@ -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>';

View File

@ -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>';

View File

@ -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>';

View File

@ -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

View File

@ -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');

8
update/2_4_25.sql Normal file
View File

@ -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;

View File

@ -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',
]; ];