diff --git a/modules/anagrafiche/ajax/select.php b/modules/anagrafiche/ajax/select.php
index 3a2071819..3ae085018 100755
--- a/modules/anagrafiche/ajax/select.php
+++ b/modules/anagrafiche/ajax/select.php
@@ -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)) {
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index 6c4f93c9f..63475bc80 100755
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -522,7 +522,8 @@ if (!empty($elementi)) {
sedi)) {
+$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
+if (in_array($record[$field_name], $id_sedi_abilitate)) {
?>
diff --git a/modules/ddt/init.php b/modules/ddt/init.php
index ec4d64fbc..ac1f0d258 100755
--- a/modules/ddt/init.php
+++ b/modules/ddt/init.php
@@ -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;
}
}
diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php
index ea76f5584..0c77347b1 100755
--- a/modules/ddt/src/DDT.php
+++ b/modules/ddt/src/DDT.php
@@ -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();
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php
index e782b20fb..66e9efc48 100755
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -858,7 +858,8 @@ if (!empty($note_accredito)) {
sedi)) {
+$id_sedi_abilitate = $user->sediAbilitate->pluck('id')->all();
+if (in_array($record[$field_name], $id_sedi_abilitate)) {
?>
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index 4a932ad12..c82277e6e 100755
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -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 {
diff --git a/modules/utenti/actions.php b/modules/utenti/actions.php
index 5f8392ac4..3cf8c7cbb 100755
--- a/modules/utenti/actions.php
+++ b/modules/utenti/actions.php
@@ -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();
diff --git a/modules/utenti/components/base.php b/modules/utenti/components/base.php
index bf9d108df..33a474bbb 100755
--- a/modules/utenti/components/base.php
+++ b/modules/utenti/components/base.php
@@ -28,37 +28,30 @@ echo '
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
- ';
-
-echo '
+
{[ "type": "text", "label": "'.tr('Email').'", "name": "email", "required": 0, "value": "'.$utente['email'].'" ]}
-
';
-
- echo '
+
- {[ "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 : '').'" ]}
- {[ "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.').'" ]}
-
';
+
-echo '
';
diff --git a/modules/utenti/edit.php b/modules/utenti/edit.php
index 530dc9a0e..dbeb7e28b 100755
--- a/modules/utenti/edit.php
+++ b/modules/utenti/edit.php
@@ -69,10 +69,10 @@ if (!empty($utenti)) {
- | ';
}
- $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 '
- '.$sedi.' | ';
+ '.$elenco_sedi.' | ';
echo '
';
diff --git a/modules/utenti/user.php b/modules/utenti/user.php
index 95865ee3e..4c382a130 100755
--- a/modules/utenti/user.php
+++ b/modules/utenti/user.php
@@ -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)) {
';
diff --git a/plugins/sedi/edit.php b/plugins/sedi/edit.php
index 47faa461e..4dc887754 100755
--- a/plugins/sedi/edit.php
+++ b/plugins/sedi/edit.php
@@ -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
diff --git a/src/Models/User.php b/src/Models/User.php
index fe7f4cc82..aff5e0ce0 100755
--- a/src/Models/User.php
+++ b/src/Models/User.php
@@ -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');
diff --git a/update/2_4_25.sql b/update/2_4_25.sql
new file mode 100644
index 000000000..8fd5daa80
--- /dev/null
+++ b/update/2_4_25.sql
@@ -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;
diff --git a/update/tables.php b/update/tables.php
index 02a575ca8..c7ca59ccc 100755
--- a/update/tables.php
+++ b/update/tables.php
@@ -128,7 +128,7 @@ return [
'zz_tasks_logs',
'zz_tokens',
'zz_users',
- 'zz_user_sedi',
+ 'zz_user_sede',
'zz_views',
'zz_widgets',
];
|