From 74930d424f8b1a8310c89e3ed472e4ea88229536 Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Tue, 27 Feb 2024 09:39:20 +0100 Subject: [PATCH] Aggiunta tabella do_categorie_lang --- modules/categorie_documenti/actions.php | 10 ++-- modules/categorie_documenti/ajax/select.php | 8 +-- modules/categorie_documenti/edit.php | 2 +- modules/categorie_documenti/init.php | 16 ++++-- modules/categorie_documenti/src/Categoria.php | 30 ++++++++++ update/2_4_55.sql | 57 ++++++++++++++++++- update/tables.php | 1 + 7 files changed, 106 insertions(+), 18 deletions(-) diff --git a/modules/categorie_documenti/actions.php b/modules/categorie_documenti/actions.php index 923149881..f5b939d56 100755 --- a/modules/categorie_documenti/actions.php +++ b/modules/categorie_documenti/actions.php @@ -26,15 +26,13 @@ switch (post('op')) { $descrizione = post('descrizione'); // Verifico che il nome non sia duplicato - $count = $dbo->fetchNum('SELECT descrizione FROM do_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL AND id !='.prepare($id_record)); + $count = $dbo->fetchNum('SELECT `name` FROM `do_categorie` LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `name`='.prepare($descrizione).' AND `deleted_at` IS NULL AND `do_categorie`.`id` !='.prepare($id_record)); if ($count != 0) { flash()->error(tr('Categoria _NAME_ già esistente!', [ '_NAME_' => $descrizione, ])); } else { - $categoria->descrizione = $descrizione; - $categoria->save(); - + $dbo->query('UPDATE `do_categorie_lang` SET `name` = '.prepare($descrizione).' WHERE `id_record` = '.prepare($id_record).' AND `id_lang` = '.prepare(setting('Lingua'))); $categoria->syncPermessi(post('permessi') ?: []); flash()->info(tr('Informazioni salvate correttamente!')); @@ -46,7 +44,7 @@ switch (post('op')) { $descrizione = post('descrizione'); // Verifico che il nome non sia duplicato - $count = $dbo->fetchNum('SELECT descrizione FROM do_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL'); + $count = $dbo->fetchNum('SELECT `name` FROM `do_categorie` LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `name`='.prepare($descrizione).' AND `deleted_at` IS NULL'); if ($count != 0) { flash()->error(tr('Categoria _NAME_ già esistente!', [ '_NAME_' => $descrizione, @@ -65,7 +63,7 @@ switch (post('op')) { break; case 'delete': - $dbo->query('UPDATE do_categorie SET deleted_at = NOW() WHERE id = '.prepare($id_record)); + $dbo->query('UPDATE `do_categorie` SET `deleted_at` = NOW() WHERE `id` = '.prepare($id_record)); flash()->info(tr('Categoria documenti eliminata!')); diff --git a/modules/categorie_documenti/ajax/select.php b/modules/categorie_documenti/ajax/select.php index faa9dda87..e4e9803dd 100755 --- a/modules/categorie_documenti/ajax/select.php +++ b/modules/categorie_documenti/ajax/select.php @@ -21,18 +21,18 @@ include_once __DIR__.'/../../../core.php'; switch ($resource) { case 'categorie_documenti': - $query = 'SELECT id, descrizione FROM do_categorie |where| ORDER BY descrizione ASC'; + $query = 'SELECT `do_categorie`.`id`, `do_categorie_lang`.`name` as descrizione FROM `do_categorie` LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = '.prepare(setting('Lingua')).')|where| ORDER BY `name` ASC'; foreach ($elements as $element) { - $filter[] = 'do_categorie.id='.prepare($element); + $filter[] = '`do_categorie`.`id`='.prepare($element); } if (empty($filter)) { - $where[] = 'deleted_at IS NULL'; + $where[] = '`deleted_at` IS NULL'; } if (!empty($search)) { - $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + $search_fields[] = '`name` LIKE '.prepare('%'.$search.'%'); } break; diff --git a/modules/categorie_documenti/edit.php b/modules/categorie_documenti/edit.php index 21f968175..10b5d8006 100755 --- a/modules/categorie_documenti/edit.php +++ b/modules/categorie_documenti/edit.php @@ -33,7 +33,7 @@ if ($record['doc_associati'] > 0) {
- {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$" ]} + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$name$" ]}
diff --git a/modules/categorie_documenti/init.php b/modules/categorie_documenti/init.php index 2a66f3103..7a7592966 100755 --- a/modules/categorie_documenti/init.php +++ b/modules/categorie_documenti/init.php @@ -25,10 +25,14 @@ if (isset($id_record)) { $categoria = Categoria::find($id_record); $record = $dbo->fetchOne("SELECT *, - (SELECT COUNT(id) FROM do_documenti WHERE idcategoria = '.prepare($id_record).') AS doc_associati, - GROUP_CONCAT(do_permessi.id_gruppo SEPARATOR ',') AS permessi - FROM do_categorie - LEFT JOIN do_permessi ON do_permessi.id_categoria = do_categorie.id - WHERE id=".prepare($id_record).' - GROUP BY do_categorie.id'); + (SELECT COUNT(`id`) FROM `do_documenti` WHERE `idcategoria` = ".prepare($id_record).") AS doc_associati, + GROUP_CONCAT(`do_permessi`.`id_gruppo` SEPARATOR ',') AS permessi + FROM + `do_categorie` + LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = ".prepare(setting('Lingua')).") + LEFT JOIN `do_permessi` ON `do_permessi`.`id_categoria` = `do_categorie`.`id` + WHERE + `do_categorie`.`id`=".prepare($id_record)." + GROUP BY + `do_categorie`.`id`"); } diff --git a/modules/categorie_documenti/src/Categoria.php b/modules/categorie_documenti/src/Categoria.php index de64472f6..010c41af5 100755 --- a/modules/categorie_documenti/src/Categoria.php +++ b/modules/categorie_documenti/src/Categoria.php @@ -52,4 +52,34 @@ class Categoria extends Model 'id_gruppo' => $groups, ]); } + + /** + * Ritorna l'attributo name della Categoria + * + * @return string + */ + public function getNameAttribute() + { + return database()->table($this->table.'_lang') + ->select('name') + ->where('id_record', '=', $this->id) + ->where('id_lang', '=', setting('Lingua')) + ->first()->name; + } + + /** + * Ritorna l'id della categoria a partire dal nome. + * + * @param string $name il nome da ricercare + * + * @return \Illuminate\Support\Collection + */ + public function getByName($name) + { + return database()->table($this->table.'_lang') + ->select('id_record') + ->where('name', '=', $name) + ->where('id_lang', '=', setting('Lingua')) + ->first(); + } } diff --git a/update/2_4_55.sql b/update/2_4_55.sql index fafed0223..a62fb4ff6 100644 --- a/update/2_4_55.sql +++ b/update/2_4_55.sql @@ -744,4 +744,59 @@ HAVING ORDER BY `co_documenti`.`data` DESC, CAST(IF(`co_documenti`.`numero` = '', `co_documenti`.`numero_esterno`, `co_documenti`.`numero`) AS UNSIGNED) DESC" WHERE `name` = 'Fatture di acquisto'; -UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_tipidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = 'Tipo'; \ No newline at end of file +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_tipidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = 'Tipo'; + +-- Aggiunta tabella do_categorie_lang +CREATE TABLE IF NOT EXISTS `do_categorie_lang` ( + `id` int NOT NULL, + `id_lang` int NOT NULL, + `id_record` int NOT NULL, + `name` VARCHAR(255) NOT NULL +); +ALTER TABLE `do_categorie_lang` + ADD PRIMARY KEY (`id`); + +ALTER TABLE `do_categorie_lang` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +INSERT INTO `do_categorie_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `do_categorie`; + +ALTER TABLE `do_categorie` + DROP `descrizione`; + +ALTER TABLE `do_categorie` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT; + +ALTER TABLE `do_categorie_lang` ADD CONSTRAINT `do_categorie_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `do_categorie`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; + +-- Allineamento vista Gestione documentale +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `do_documenti` + INNER JOIN `do_categorie` ON `do_categorie`.`id` = `do_documenti`.`idcategoria` + LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = |lang|) +WHERE + 1=1 AND `deleted_at` IS NULL AND + (SELECT `idgruppo` FROM `zz_users` WHERE `zz_users`.`id` = |id_utente|) IN (SELECT `id_gruppo` FROM `do_permessi` WHERE `id_categoria` = `do_documenti`.`idcategoria`) + |date_period(`data`)| OR data IS NULL +HAVING + 2=2 +ORDER BY + `data` DESC" WHERE `name` = 'Gestione documentale'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`do_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Gestione documentale' AND `zz_views`.`name` = 'Categoria'; + +-- Allineamento vista Categorie documenti +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `do_categorie` + LEFT JOIN `do_categorie_lang` ON (`do_categorie_lang`.`id_record` = `do_categorie`.`id` AND `do_categorie_lang`.`id_lang` = |lang|) +WHERE + 1=1 AND `deleted_at` IS NULL AND + (SELECT `idgruppo` FROM `zz_users` WHERE `id` = |id_utente|) IN (SELECT `id_gruppo` FROM `do_permessi` WHERE `id_categoria` = `do_categorie`.`id`) +HAVING + 2=2" WHERE `name` = 'Categorie documenti'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`do_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Categorie documenti' AND `zz_views`.`name` = 'Descrizione'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`do_categorie`.`id`' WHERE `zz_modules`.`name` = 'Categorie documenti' AND `zz_views`.`name` = 'id'; \ No newline at end of file diff --git a/update/tables.php b/update/tables.php index 96b5eb385..50a00ebf1 100755 --- a/update/tables.php +++ b/update/tables.php @@ -59,6 +59,7 @@ return [ 'co_tipi_scadenze', 'co_stampecontabili', 'do_categorie', + 'do_categorie_lang', 'do_documenti', 'do_permessi', 'dt_aspettobeni',