From 88ba7311b3e132c87c584f49ea61cbd544eab9b9 Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Wed, 27 Mar 2024 11:07:15 +0100 Subject: [PATCH] Aggiunta tabella my_impianti_categorie_lang --- modules/categorie_impianti/actions.php | 45 +++++++++----------- modules/categorie_impianti/edit.php | 4 +- modules/categorie_impianti/init.php | 5 ++- modules/categorie_impianti/row-list.php | 2 +- modules/impianti/ajax/select.php | 12 +++--- modules/impianti/src/Categoria.php | 23 ++++++++-- src/API/App/v1/Impianti.php | 41 ++++++++++-------- update/2_5.sql | 56 +++++++++++++++++++++++++ update/tables.php | 1 + 9 files changed, 131 insertions(+), 58 deletions(-) diff --git a/modules/categorie_impianti/actions.php b/modules/categorie_impianti/actions.php index e962050ac..88c1820cf 100755 --- a/modules/categorie_impianti/actions.php +++ b/modules/categorie_impianti/actions.php @@ -21,6 +21,7 @@ include_once __DIR__.'/../../core.php'; use Models\Module; use Modules\Checklists\Check; +use Modules\Impianti\Categoria; $modulo_impianti = (new Module())->getByField('name', 'Impianti'); @@ -32,13 +33,11 @@ switch (filter('op')) { $id_original = filter('id_original') ?: null; if (isset($nome) && isset($nota) && isset($colore)) { - $database->table('my_impianti_categorie') - ->where('id', '=', $id_record) - ->update([ - 'nome' => $nome, - 'nota' => $nota, - 'colore' => $colore, - ]); + $categoria->nota = $nota; + $categoria->colore = $colore; + $categoria->parent = $id_original ?: null; + $categoria->setTranslation('name', $nome); + $categoria->save(); flash()->info(tr('Salvataggio completato!')); } else { @@ -61,32 +60,26 @@ switch (filter('op')) { $id_original = filter('id_original') ?: null; - // Ricerca corrispondenze con stesso nome - $corrispondenze = $database->table('my_impianti_categorie') - ->where('nome', '=', $nome); + $categoria_new = Categoria::where('id', '=', (new Categoria())->getByField('name', $nome)); if (!empty($id_original)) { - $corrispondenze = $corrispondenze->where('parent', '=', $id_original); + $categoria_new = $categoria_new->where('parent', '=', $id_original); } else { - $corrispondenze = $corrispondenze->whereNull('parent'); + $categoria_new = $categoria_new->whereNull('parent'); } - $corrispondenze = $corrispondenze->get(); + $categoria_new = $categoria_new->first(); - // Eventuale creazione del nuovo record - if ($corrispondenze->count() == 0) { - $id_record = $database->table('my_impianti_categorie') - ->insertGetId([ - 'nome' => $nome, - 'nota' => $nota, - 'colore' => $colore, - 'parent' => $id_original, - ]); + if (!empty($categoria_new)) { + flash()->error(tr('Questo nome è già stato utilizzato per un altra categoria.')); + } else { + $categoria = Categoria::build($nota, $colore); + $id_record = $dbo->lastInsertedID(); + $categoria->parent = $id_original; + $categoria->setTranslation('name', $nome); + $categoria->save(); flash()->info(tr('Aggiunta nuova tipologia di _TYPE_', [ '_TYPE_' => 'categoria', ])); - } else { - $id_record = $corrispondenze->first()->id; - flash()->error(tr('Esiste già una categoria con lo stesso nome!')); } if (isAjaxRequest()) { @@ -106,7 +99,7 @@ switch (filter('op')) { $id = $id_record; } - if ($dbo->fetchNum('SELECT * FROM `my_impianti` WHERE (`id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT id FROM `my_impianti_categorie` WHERE `parent`='.prepare($id).')) AND `deleted_at` IS NULL') == 0) { + if ($dbo->fetchNum('SELECT * FROM `my_impianti` WHERE (`id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT `id` FROM `my_impianti_categorie` WHERE `parent`='.prepare($id).')) AND `deleted_at` IS NULL') == 0) { $dbo->query('DELETE FROM `my_impianti_categorie` WHERE `id`='.prepare($id)); flash()->info(tr('_TYPE_ eliminata con successo!', [ diff --git a/modules/categorie_impianti/edit.php b/modules/categorie_impianti/edit.php index 5c1229524..feedf52e7 100755 --- a/modules/categorie_impianti/edit.php +++ b/modules/categorie_impianti/edit.php @@ -34,7 +34,7 @@ use Models\Module;
- {[ "type": "text", "label": "", "name": "nome", "required": 1, "value": "$nome$" ]} + {[ "type": "text", "label": "", "name": "nome", "required": 1, "value": "$name$" ]}
@@ -94,7 +94,7 @@ use Models\Module; fetchArray('SELECT `my_impianti`.`id`, `my_impianti`.`matricola`, `my_impianti`.`nome` FROM `my_impianti` WHERE (`id_categoria`='.prepare($id_record).' OR `id_sottocategoria`='.prepare($id_record).' OR `id_sottocategoria` IN (SELECT id FROM `my_impianti_categorie` WHERE `parent`='.prepare($id_record).'))'); +$elementi = $dbo->fetchArray('SELECT `my_impianti`.`id`, `my_impianti`.`matricola`, `my_impianti`.`nome` FROM `my_impianti` WHERE (`id_categoria`='.prepare($id_record).' OR `id_sottocategoria`='.prepare($id_record).' OR `id_sottocategoria` IN (SELECT `id` FROM `my_impianti_categorie` WHERE `parent`='.prepare($id_record).'))'); if (!empty($elementi)) { echo ' diff --git a/modules/categorie_impianti/init.php b/modules/categorie_impianti/init.php index 22178dcd0..0451e6cd7 100755 --- a/modules/categorie_impianti/init.php +++ b/modules/categorie_impianti/init.php @@ -18,7 +18,10 @@ */ include_once __DIR__.'/../../core.php'; +use Modules\Impianti\Categoria; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT * FROM `my_impianti_categorie` WHERE id='.prepare($id_record)); + $record = $dbo->fetchOne('SELECT * FROM `my_impianti_categorie` LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id`=`my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).' WHERE `my_impianti_categorie`.`id`='.prepare($id_record)); + + $categoria = Categoria::find($id_record); } diff --git a/modules/categorie_impianti/row-list.php b/modules/categorie_impianti/row-list.php index 2cee15d3d..62a7423ae 100644 --- a/modules/categorie_impianti/row-list.php +++ b/modules/categorie_impianti/row-list.php @@ -19,7 +19,7 @@ include_once __DIR__.'/../../core.php'; -$subcategorie = $dbo->fetchArray('SELECT * FROM `my_impianti_categorie` WHERE `parent`='.prepare($id_record).' ORDER BY nome ASC '); +$subcategorie = $dbo->fetchArray('SELECT `my_impianti_categorie`.*, `my_impianti_categorie_lang`.`name` FROM `my_impianti_categorie` LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id`=`my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).') WHERE `parent`='.prepare($id_record).' ORDER BY `name` ASC '); foreach ($subcategorie as $sub) { $n_impianti = $dbo->fetchNum('SELECT * FROM `my_impianti` WHERE `id_sottocategoria`='.prepare($sub['id']).' AND deleted_at IS NULL'); diff --git a/modules/impianti/ajax/select.php b/modules/impianti/ajax/select.php index 88cd8791f..995df0a70 100755 --- a/modules/impianti/ajax/select.php +++ b/modules/impianti/ajax/select.php @@ -120,16 +120,16 @@ switch ($resource) { break; case 'categorie_imp': - $query = 'SELECT `id`, `nome` AS descrizione FROM `my_impianti_categorie` |where| ORDER BY `nome`'; + $query = 'SELECT `my_impianti_categorie`.`id`, `my_impianti_categorie_lang`.`name` AS descrizione FROM `my_impianti_categorie` LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id`=`my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).') |where| ORDER BY `name`'; foreach ($elements as $element) { - $filter[] = '`id`='.prepare($element); + $filter[] = '`my_impianti_categorie`.`id`='.prepare($element); } $where[] = '`parent` IS NULL'; if (!empty($search)) { - $search_fields[] = '`nome` LIKE '.prepare('%'.$search.'%'); + $search_fields[] = '`name` LIKE '.prepare('%'.$search.'%'); } break; @@ -140,16 +140,16 @@ switch ($resource) { */ case 'sottocategorie_imp': if (isset($superselect['id_categoria'])) { - $query = 'SELECT `id`, `nome` AS descrizione FROM `my_impianti_categorie` |where| ORDER BY `nome`'; + $query = 'SELECT ``my_impianti_categorie`.`id`, `my_impianti_categorie_lang`.`name` AS descrizione FROM `my_impianti_categorie` LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id`=`my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.`id_lang` = '.prepare(\Models\Locale::getDefault()->id).') |where| ORDER BY `name`'; foreach ($elements as $element) { - $filter[] = '`id`='.prepare($element); + $filter[] = '`my_impianti_categorie`.`id`='.prepare($element); } $where[] = '`parent`='.prepare($superselect['id_categoria']); if (!empty($search)) { - $search_fields[] = '`nome` LIKE '.prepare('%'.$search.'%'); + $search_fields[] = '`name` LIKE '.prepare('%'.$search.'%'); } } break; diff --git a/modules/impianti/src/Categoria.php b/modules/impianti/src/Categoria.php index a061f15ec..4fa0fce77 100644 --- a/modules/impianti/src/Categoria.php +++ b/modules/impianti/src/Categoria.php @@ -22,20 +22,25 @@ namespace Modules\Impianti; use Common\SimpleModelTrait; use Illuminate\Database\Eloquent\Model; use Traits\HierarchyTrait; +use Traits\RecordTrait; class Categoria extends Model { use SimpleModelTrait; use HierarchyTrait; - + use RecordTrait; protected $table = 'my_impianti_categorie'; protected static $parent_identifier = 'parent'; - public static function build($nome = null) + protected static $translated_fields = [ + 'name', + ]; + + public static function build($nota = null, $colore = null) { $model = new static(); - - $model->nome = $nome; + $model->nota = $nota; + $model->colore = $colore; $model->save(); return $model; @@ -45,4 +50,14 @@ class Categoria extends Model { return $this->hasMany(Impianto::class, 'id_categoria'); } + + public function getModuleAttribute() + { + return 'Categorie impianti'; + } + + public static function getTranslatedFields() + { + return self::$translated_fields; + } } diff --git a/src/API/App/v1/Impianti.php b/src/API/App/v1/Impianti.php index a6f59b554..6a091d40c 100755 --- a/src/API/App/v1/Impianti.php +++ b/src/API/App/v1/Impianti.php @@ -82,24 +82,29 @@ class Impianti extends AppResource public function retrieveRecord($id) { // Gestione della visualizzazione dei dettagli del record - $query = 'SELECT my_impianti.id, - my_impianti.idanagrafica AS id_cliente, - my_impianti.idsede AS id_sede, - my_impianti.matricola, - my_impianti.nome, - my_impianti.descrizione, - my_impianti.data AS data_installazione, - my_impianti.proprietario, - my_impianti.ubicazione, - my_impianti.palazzo, - my_impianti.scala, - my_impianti.piano, - my_impianti.interno, - my_impianti.occupante, - my_impianti_categorie.nome AS categoria - FROM my_impianti - LEFT JOIN my_impianti_categorie ON my_impianti_categorie.id = my_impianti.id_categoria - WHERE my_impianti.id = '.prepare($id); + $query = 'SELECT + `my_impianti`.`id`, + `my_impianti`.`idanagrafica` AS id_cliente, + `my_impianti`.`idsede` AS id_sede, + `my_impianti`.`matricola`, + `my_impianti`.`nome`, + `my_impianti`.`descrizione`, + `my_impianti`.`data` AS data_installazione, + `my_impianti`.`proprietario`, + `my_impianti`.`ubicazione`, + `my_impianti`.`palazzo`, + `my_impianti`.`scala`, + `my_impianti`.`piano`, + `my_impianti`.`interno`, + `my_impianti`.`occupante`, + `categorie_lang`.`name` AS categoria + `sottocategorie_lang`.`name` AS sottocategoria + FROM `my_impianti` + LEFT JOIN `my_impianti_categorie` ON `my_impianti_categorie`.`id` = `my_impianti`.`id_categoria` + LEFT JOIN `my_impianti_categorie_lang` as categorie_lang ON (`categorie_lang`.`id_record` = `my_impianti_categorie`.`id` AND `categorie_lang`.|lang|) + LEFT JOIN `my_impianti_categorie` as sottocategorie ON (`sottocategorie`.`id` = `my_impianti_categorie`.`id_sottocategoria`) + LEFT JOIN `my_impianti_categorie_lang` as sottocategorie_lang ON (`sottocategorie_lang`.`id_record` = `sottocategorie`.`id` AND `sottocategorie_lang`.|lang|) + WHERE `my_impianti`.`id` = '.prepare($id); $record = database()->fetchOne($query); diff --git a/update/2_5.sql b/update/2_5.sql index f5b1bd6c3..5275c07ac 100644 --- a/update/2_5.sql +++ b/update/2_5.sql @@ -1364,6 +1364,62 @@ ORDER BY UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = 'Categoria'; UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = 'Sottocategoria'; +-- Aggiunta tabella my_impianti_categorie_lang +CREATE TABLE IF NOT EXISTS `my_impianti_categorie_lang` ( + `id` int NOT NULL, + `id_lang` int NOT NULL, + `id_record` int NOT NULL, + `name` VARCHAR(255) NOT NULL +); +ALTER TABLE `my_impianti_categorie_lang` + ADD PRIMARY KEY (`id`); + +ALTER TABLE `my_impianti_categorie_lang` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +INSERT INTO `my_impianti_categorie_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `predefined` = 1), `id`, `nome` FROM `my_impianti_categorie`; + +ALTER TABLE `my_impianti_categorie` + DROP `nome`; + +ALTER TABLE `my_impianti_categorie_lang` ADD CONSTRAINT `my_impianti_categorie_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `my_impianti_categorie`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; + +-- Allineamento vista Categorie impianti +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `my_impianti_categorie` + LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id` = `my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.|lang|) +WHERE + 1=1 AND parent IS NULL +HAVING + 2=2" WHERE `name` = 'Categorie impianti'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`my_impianti_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Categorie impianti' AND `zz_views`.`name` = 'Nome'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`my_impianti_categorie`.`id`' WHERE `zz_modules`.`name` = 'Categorie impianti' AND `zz_views`.`name` = 'id'; + +-- Allineamento vista Impianti +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `my_impianti` + LEFT JOIN `an_anagrafiche` AS clienti ON `clienti`.`idanagrafica` = `my_impianti`.`idanagrafica` + LEFT JOIN `an_anagrafiche` AS tecnici ON `tecnici`.`idanagrafica` = `my_impianti`.`idtecnico` + LEFT JOIN `my_impianti_categorie` ON `my_impianti_categorie`.`id` = `my_impianti`.`id_categoria` + LEFT JOIN `my_impianti_categorie_lang` ON (`my_impianti_categorie`.`id` = `my_impianti_categorie_lang`.`id_record` AND `my_impianti_categorie_lang`.|lang|) + LEFT JOIN `my_impianti_categorie` as sub ON sub.`id` = `my_impianti`.`id_sottocategoria` + LEFT JOIN `my_impianti_categorie_lang` as sub_lang ON (sub.`id` = sub_lang.`id_record` AND sub_lang.|lang|) + LEFT JOIN (SELECT an_sedi.id, CONCAT(an_sedi.nomesede, '
',IF(an_sedi.telefono!='',CONCAT(an_sedi.telefono,'
'),''),IF(an_sedi.cellulare!='',CONCAT(an_sedi.cellulare,'
'),''),an_sedi.citta,IF(an_sedi.indirizzo!='',CONCAT(' - ',an_sedi.indirizzo),'')) AS info FROM an_sedi) AS sede ON sede.id = my_impianti.idsede +WHERE + 1=1 +HAVING + 2=2 +ORDER BY + `matricola`" WHERE `name` = 'impianti'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`my_impianti_categorie_lang`.`name`' WHERE `zz_modules`.`name` = 'Impianti' AND `zz_views`.`name` = 'Categoria'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`sub_lang`.`name`' WHERE `zz_modules`.`name` = 'Impianti' AND `zz_views`.`name` = 'Sottocategoria'; + -- Aggiunta tabella mg_causali_movimenti_lang CREATE TABLE IF NOT EXISTS `mg_causali_movimenti_lang` ( `id` int NOT NULL, diff --git a/update/tables.php b/update/tables.php index 16daa5945..a1eb91654 100755 --- a/update/tables.php +++ b/update/tables.php @@ -134,6 +134,7 @@ return [ 'my_componenti_interventi', 'my_impianti', 'my_impianti_categorie', + 'my_impianti_categorie_lang', 'my_impianti_contratti', 'my_impianti_interventi', 'mg_articolo_attributo',