Revisione associazione utenti-sedi
This commit is contained in:
parent
016dfdf098
commit
0ef48ae6c9
|
@ -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)) {
|
||||
|
|
|
@ -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'); ?>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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'); ?>
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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_tokens',
|
||||
'zz_users',
|
||||
'zz_user_sedi',
|
||||
'zz_user_sede',
|
||||
'zz_views',
|
||||
'zz_widgets',
|
||||
];
|
||||
|
|
Loading…
Reference in New Issue