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);
//admin o utente senza una sede prefissata, avrà accesso a tutte le sedi
if (!empty($user->sedi) and !$user->is_admin) {
$where[] = 'id IN('.implode(',', $user->sedi).')';
$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
if (!empty($id_sedi_abilitate) && !$user->is_admin) {
$where[] = 'id IN('.implode(',', $id_sedi_abilitate).')';
}
if (!empty($search)) {

View File

@ -522,7 +522,8 @@ if (!empty($elementi)) {
<?php
// Eliminazione ddt solo se ho accesso alla sede aziendale
$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">
<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
$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;
}
}

View File

@ -102,9 +102,9 @@ class DDT extends Document
// Imposto, come sede aziendale, la prima sede disponibile come utente
if ($direzione == 'entrata') {
$model->idsede_partenza = $user->sedi[0];
$model->idsede_partenza = $user->id_sede_principale;
} else {
$model->idsede_destinazione = $user->sedi[0];
$model->idsede_destinazione = $user->id_sede_principale;
}
$model->save();

View File

@ -858,7 +858,8 @@ if (!empty($note_accredito)) {
<?php
// Eliminazione ddt solo se ho accesso alla sede aziendale
$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">
<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
$id_sede = $user->sedi[0];
$id_sede = $user->id_sede_principale;
if ($direzione == 'entrata') {
$model->idsede_destinazione = $id_sede;
} else {

View File

@ -79,23 +79,17 @@ switch (filter('op')) {
// Foto
if (!empty($_FILES['photo']['tmp_name'])) {
$utente->photo = $_FILES['photo'];
$utente->setPhoto($_FILES['photo']);
}
// Anagrafica
$id_anagrafica = filter('idanag');
$utente->id_anagrafica = $id_anagrafica;
$utente->id_anagrafica = filter('id_anagrafica');
$utente->save();
$dbo->query('DELETE FROM zz_user_sedi WHERE id_user = '.prepare($id_utente));
$sedi = post('idsede');
if (empty($sedi)) {
$sedi = [0];
}
foreach ($sedi as $id_sede) {
$dbo->query('INSERT INTO `zz_user_sedi` (`id_user`,`idsede`) VALUES ('.prepare($id_utente).', '.prepare($id_sede).')');
}
// Aggiornamento sede collegata
$id_sedi_abilitate = (array) post('id_sedi_abilitate');
$id_sedi_abilitate = array_diff($id_sedi_abilitate, [0]); // Rimozione sede legale
$utente->sediAbilitate()->sync($id_sedi_abilitate);
} else {
flash()->error(tr('Utente già esistente!'));
}
@ -111,7 +105,7 @@ switch (filter('op')) {
if (!empty($password)) {
$utente->password = $password;
} elseif (!empty($_FILES['photo']['tmp_name'])) {
$utente->photo = $_FILES['photo'];
$utente->setPhoto($_FILES['photo']);
}
$utente->save();

View File

@ -28,37 +28,30 @@ echo '
<div class="col-md-12">
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
</div>
</div>';
echo '
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "required": 0, "value": "'.$utente['email'].'" ]}
</div>
</div>';
echo '
</div>
<div class="row">
<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 class="row">
<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>
echo '
<script type="text/javascript">
$(document).ready(function() {
$("#idanag").change(function() {
session_set("superselect,idanagrafica", $(this).val(), 0);
$("#idsede").selectReset();
$("#id_anagrafica").change(function() {
$("#id_sede").selectReset();
})
});
</script>';

View File

@ -69,10 +69,10 @@ if (!empty($utenti)) {
<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 '
<td>'.$sedi.'</td>';
<td>'.$elenco_sedi.'</td>';
echo '
<td>';

View File

@ -40,9 +40,10 @@ if (!empty($id_record)) {
$gruppo = $gruppi[$gruppo_utente];
}
// Lettura sedi dell'utente già impostate
// Lettura delle sedi abilitate per l'utente
$id_sedi_abilitate = [];
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 '
@ -64,13 +65,13 @@ if (!empty($user)) {
</div>
<script>
function no_check_pwd(){
function disabilitaPassword() {
$("#password").attr("disabled", true);
$("#submit-button").attr("disabled", false).removeClass("disabled");
}
$("#modals > div").on("shown.bs.modal", function () {
no_check_pwd();
disabilitaPassword();
});
$("#change_password").change(function() {
@ -78,7 +79,7 @@ if (!empty($user)) {
$("#password").attr("disabled", false);
$("#password").change();
} else {
no_check_pwd();
disabilitaPassword();
}
});
</script>';

View File

@ -148,7 +148,7 @@ if (!empty($google)) {
}
// 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
SELECT `an_referenti`.`id` AS `id` FROM `an_referenti` WHERE `an_referenti`.`idsede` = '.prepare($id_record).'
UNION

View File

@ -23,6 +23,7 @@ use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Intervention\Image\ImageManagerStatic;
use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Sede;
class User extends Model
{
@ -33,6 +34,8 @@ class User extends Model
protected $appends = [
'is_admin',
'gruppo',
'nome_completo',
'id_sede_principale',
'id_anagrafica',
];
@ -111,19 +114,11 @@ class User extends Model
return $this->gruppo;
}
public function getSediAttribute()
public function getIdSedePrincipaleAttribute()
{
$database = database();
$sede_principale = $this->sediAbilitate()->first();
// Estraggo le sedi dell'utente loggato
$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');
return $sede_principale ? $sede_principale->id : 0;
}
public function setPasswordAttribute($value)
@ -142,7 +137,19 @@ class User extends Model
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');
@ -155,8 +162,8 @@ class User extends Model
$old_photo = Upload::where($data)->get();
// Informazioni sull'immagine
$filepath = is_array($value) ? $value['tmp_name'] : $value;
$info = Upload::getInfo(is_array($value) ? $value['name'] : $value);
$filepath = is_array($upload_data) ? $upload_data['tmp_name'] : $upload_data;
$info = Upload::getInfo(is_array($upload_data) ? $upload_data['name'] : $upload_data);
$file = base_dir().'/files/temp_photo.'.$info['extension'];
// Ridimensionamento
@ -182,16 +189,6 @@ class User extends Model
$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()
{
$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');
}
public function notes()
public function note()
{
return $this->hasMany(Note::class, 'id_utente');
}
@ -233,6 +230,11 @@ class User extends Model
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
}
public function sediAbilitate()
{
return $this->belongsToMany(Sede::class, 'zz_user_sede', 'id_utente', 'id_sede');
}
public function image()
{
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_tokens',
'zz_users',
'zz_user_sedi',
'zz_user_sede',
'zz_views',
'zz_widgets',
];