Compare commits

...

8 Commits

Author SHA1 Message Date
valentina 230a0ab341 feat: allineamento query installazione 2024-10-23 17:33:17 +02:00
Beppe edcd062295 feat: Aggiunta modulo Stati dei DDT 2024-10-23 17:21:23 +02:00
valentina 61a84dd8cf aggiornamento CHANGELOG 2024-10-23 16:17:18 +02:00
Beppe 7297b62d37 Fix: Fix controllo stati contratti omonimi al salvataggio 2024-10-23 15:07:52 +02:00
valentina c5504bae97 refactor: correzione query update 2024-10-23 14:49:02 +02:00
valentina 0f50e5b966 fix: creazione nota di debito 2024-10-23 12:43:08 +02:00
valentina 12856fb9e6 fix: indicazione scadenze da pagare in fatture 2024-10-23 12:08:35 +02:00
valentina 4e7f99e375 fix: tacito rinnovo in aggiunta contratto 2024-10-23 12:05:31 +02:00
12 changed files with 400 additions and 37 deletions

View File

@ -4,8 +4,10 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
- [2.5.5 (2024-09-27))](#255-2024-09-27)
- [2.5.4 (2024-08-28))](#254-2024-08-28)
- [2.6 (2024--)](#26-2024--)
- [2.5.6 (2024-10-30)](#256-2024-10-30)
- [2.5.5 (2024-09-27)](#255-2024-09-27)
- [2.5.4 (2024-08-28)](#254-2024-08-28)
- [2.5.3 (2024-08-07)](#253-2024-08-07)
- [2.5.2 (2024-05-31)](#252-2024-05-31)
- [2.5.1 (2024-04-24)](#251-2024-04-24)
@ -71,6 +73,54 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- [2.2 (2016-11-10)](#22-2016-11-10)
- [2.1 (2015-04-02)](#21-2015-04-02)
## 2.6 (2024--)
### Aggiunto (Added)
- Aggiunto il modulo Marchi
- Aggiunto il modulo Stati dei DDT
## 2.5.6 (2024-10-30)
### Modificato (Changed)
- Migliorato il footer fatture di vendita
- Migliorata la gestione del tempo di esecuzione del file cron.php
- Rimozione impostazioni deprecate
- Rimozione commenti TODO
- Miglioria modulo Articoli
- Migliorata la visualizzazione delle tabelle con table-sm
- Migliorata la gestione dei segmenti con introduzione della classe Segmento
- Migliorata l'animazione delle pagine
### Fixed
- Corretto il grafico degli interventi
- Corretta la generazione delle scadenze
- Corretto lo stato dei servizi
- Corretta la modifica alle sottocategorie impianti e articoli
- Corretta l'importazione della fattura di acquisto quando il nodo ImportoTotaleDocumento non è valorizzato
- Corretta la visualizzazione del plugin consuntivo
- Corretta la gestione dei template email
- Corrette le azioni di gruppo in Attività
- Corretta la stampa di fatture con cassa previdenziale multipla
- Corretta la generazione di fatture con caratteri speciali
- Corretto il filtro per tipo di attività in statistiche
- Corretto l'aggiornamento di impianti collegati a contratti
- Corretta la modifica di giorni di preavviso contratti e del tacito rinnovo in aggiunta Contratto
- Corretta l'aggiunta di una categoria articolo
- Corretto il caricamento di immagini in ckeditor
- Corretta l'impostazione automatica del pagamento predefinito
- Corretta la descrizione del tipo di attività in Contratti
- Corretta la modifica della percentuale di deducibilità nei conti
- Corretta la movimentazione e creazione articoli fra sedi abilitate
- Corretta la creazione di utenti senza sede e l'avviso di creazione sede senza accesso
- Corretta la stampa di fatture con split payment
- Corretta l'impostazione della sede di partenza in fatture e interventi
- Corretta l'importazione di un articolo con seriale in importazione fatture di acquisto
- Corretta l'autenticazione con Microsoft
- Corretta la selezione del sezionale dei documenti
- Corretto il template di stampa dei preventivi
- Corretta l'indicazione della scadenza da pagare in Fatture
- Corretta la creazione di una nota di debito
- Corretto il controllo su stati contratti omonimi al salvataggio
## 2.5.5 (2024-09-27)
### Aggiunto (Added)
- Aggiunta la geolocalizzazione automatica per anagrafiche e sedi

View File

@ -87,7 +87,7 @@ echo '
</div>
<div class="col-md-6">
{[ "type": "checkbox", "label": "'.tr('Rinnovo automatico').'", "name": "rinnovo_automatico_add", "id": "rinnovo_automatico_add", "help": "'.tr('Il contratto è da rinnovare automaticamente alla scadenza').'", "disabled": 1 ]}
{[ "type": "checkbox", "label": "'.tr('Tacito rinnovo').'", "name": "rinnovo_automatico_add", "id": "rinnovo_automatico_add", "help": "'.tr('Il contratto è da rinnovare automaticamente alla scadenza').'", "disabled": 1 ]}
</div>
<div class="col-md-6">
@ -117,7 +117,7 @@ echo '
input("giorni_preavviso_rinnovo").setDisabled(disabled);
input("ore_preavviso_rinnovo").setDisabled(disabled);
input("rinnovo_automatico").setDisabled(disabled);
input("rinnovo_automatico_add").setDisabled(disabled);
});
$("#data_conclusione").on("dp.change", function (e) {

View File

@ -1190,7 +1190,7 @@ switch ($op) {
// Nota di debito
if (get('op') == 'nota_addebito') {
$rs_segment = $dbo->fetchArray('SELECT * FROM `zz_segments` LEFT JOIN `zz_segments_lang` ON (`zz_segments`.`id` = `zz_segments_lang`.`id_record` AND `zz_segments_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).") WHERE `predefined_addebito`='1'");
$rs_segment = $dbo->fetchArray('SELECT `zz_segments`.* FROM `zz_segments` LEFT JOIN `zz_segments_lang` ON (`zz_segments`.`id` = `zz_segments_lang`.`id_record` AND `zz_segments_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).") WHERE `predefined_addebito`='1'");
if (!empty($rs_segment)) {
$id_segment = $rs_segment[0]['id'];
} else {
@ -1198,8 +1198,7 @@ if (get('op') == 'nota_addebito') {
}
$anagrafica = $fattura->anagrafica;
$id_tipo = database()->fetchOne('SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `title` = "Nota di debito" AND `dir` = "entrata"')['id'];
$tipo = Tipo::find($id_tipo);
$tipo = Tipo::where('name', 'Nota di debito')->where('dir', 'entrata')->first();
$data = $fattura->data;
$nota = Fattura::build($anagrafica, $tipo, $data, $id_segment);

View File

@ -39,10 +39,10 @@ if ($dir == 'entrata' || !empty($abilita_autofattura)) {
if ($dir == 'entrata') {
echo '
<ul class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" data-href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
<a class="dropdown-item" href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'&op=nota_addebito&backto=record-edit">
'.tr('Nota di debito').'
</a>
<a class="dropdown-item" data-href="'.base_path().'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&iddocumento='.$id_record.'" data-title="Aggiungi nota di credito">
'.tr('Nota di credito').'
</a>

View File

@ -513,15 +513,15 @@ if ($fattura->stato->id != $id_stato_bozza && $fattura->stato->id != $id_stato_a
<strike>';
}
echo (empty($scadenza->da_pagare) ? '<i class="fa fa-exclamation-triangle"></i>' : '').moneyFormat($scadenza->da_pagare);
echo (empty($scadenza->da_pagare) ? '<i class="fa fa-exclamation-triangle"></i>' : '').moneyFormat(abs($scadenza->da_pagare));
if ($pagamento_iniziato) {
echo '
</strike>';
}
if ($pagamento_iniziato && $scadenza->pagato != $scadenza->da_pagare) {
echo ' ('.moneyFormat($scadenza->da_pagare - $scadenza->pagato).')';
if ($pagamento_iniziato && abs($scadenza->pagato) != abs($scadenza->da_pagare)) {
echo ' ('.moneyFormat(abs($scadenza->da_pagare) - abs($scadenza->pagato)).')';
}
echo '

View File

@ -24,7 +24,7 @@ use Modules\Contratti\Stato;
switch (post('op')) {
case 'update':
$descrizione = post('descrizione');
$stato_new = Stato::where('name', $descrizione)->first();
$stato_new = Stato::where('name', $descrizione)->where('id','!=', $id_record)->first();
if ($stato_new) {
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato dei contratti.'));

View File

@ -0,0 +1,84 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Modules\DDT\Stato;
switch (post('op')) {
case 'update':
$descrizione = post('descrizione');
$stato_new = Stato::where('name', $descrizione)->first()->id;
if (!empty($stato_new) && $stato_new != $id_record) {
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato DDT.'));
} else {
if (Models\Locale::getDefault()->id == Models\Locale::getPredefined()->id) {
$stato->name = $descrizione;
}
$stato->icona = post('icona');
$stato->colore = post('colore');
$stato->completato = post('completato');
$stato->is_fatturabile = post('is_fatturabile');
$stato->setTranslation('title', $descrizione);
$stato->save();
flash()->info(tr('Informazioni salvate correttamente.'));
}
break;
case 'add':
$descrizione = post('descrizione');
$icona = post('icona');
$colore = post('colore');
$completato = post('completato_add');
$is_fatturabile = post('is_fatturabile_add');
$stato_new = Stato::where('name', $descrizione)->first();
if ($stato_new) {
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato DDT.'));
} else {
$stato = Stato::build($icona, $colore, $completato, $is_fatturabile);
if (Models\Locale::getDefault()->id == Models\Locale::getPredefined()->id) {
$stato->name = $descrizione;
}
$id_record = $dbo->lastInsertedID();
$stato->setTranslation('title', $descrizione);
$stato->save();
flash()->info(tr('Nuovo stato DDT aggiunto.'));
}
break;
case 'delete':
// scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato negli ordini
if (count($dbo->fetchArray('SELECT `id` FROM `dt_statiddt` WHERE `id`='.prepare($id_record))) > 0) {
$query = 'UPDATE `dt_statiddt` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
} else {
$query = 'DELETE FROM `dt_statiddt` WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
}
$dbo->query($query);
flash()->info(tr('Stato DDT eliminato.'));
break;
}

68
modules/stati_ddt/add.php Normal file
View File

@ -0,0 +1,68 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
?><form action="" method="post" id="add-form">
<input type="hidden" name="op" value="add">
<input type="hidden" name="backto" value="record-edit">
<div class="row">
<div class="col-md-9">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
</div>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "required": 1, "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
</div>
</div>
<div class="row">
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Completato'); ?>", "name": "completato_add", "value": "$completato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
</div>
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Impegnato'); ?>", "name": "impegnato_add", "value": "$impegnato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Impegnato'); ?>", "extra": "" ]}
</div>
<div class="col-md-2">
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile'); ?>", "name": "is_fatturabile_add", "value": "$is_fatturabile$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
</div>
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "fa ", "extra": "" ]}
</div>
</div>
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
</div>
</div>
</form>
<script>
$(document).ready(function() {
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
$(this).parent().find('.square').css('background', $(this).val());
});
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
});
</script>

View File

@ -0,0 +1,94 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
if ($record['can_delete']) {
$attr = '';
} else {
$attr = 'readonly';
echo '<div class="alert alert-warning">'.tr('Alcune impostazioni non possono essere modificate per questo stato.').'</div>';
}
?>
<form action="" method="post" id="edit-form">
<input type="hidden" name="op" value="update">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
<div class="row">
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$title$", "extra": "<?php echo $attr; ?>" ]}
</div>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "$icona$", "extra": "", "icon-after": "<?php echo (!empty($record['icona'])) ? '<i class=\"'.$record['icona'].'\"></i>' : ''; ?>" ]}
</div>
<div class="col-md-2">
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "required": 1, "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
</div>
<div class="col-md-3">
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title"><?php echo tr('Flags'); ?></h3>
</div>
<div class="card-body">
{[ "type": "checkbox", "label": "<?php echo tr('Completato?'); ?>", "name": "completato", "value": "$completato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
{[ "type": "checkbox", "label": "<?php echo tr('Impegnato?'); ?>", "name": "impegnato", "value": "$impegnato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come impegnati'); ?>", "placeholder": "<?php echo tr('Impegnato'); ?>", "extra": "" ]}
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile?'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
</div>
</div>
</div>
</div>
</form>
<?php
$ordini = $dbo->fetchNum('SELECT `id` FROM `or_ordini` WHERE `idstatoordine`='.prepare($id_record));
if (!empty($ordini)) {
echo '
<div class="alert alert-danger">
'.tr('Ci sono _NUM_ ordini collegati', [
'_NUM_' => $ordini,
]).'.
</div>';
}
if (!empty($record['can_delete'])) {
echo '
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>';
}
?>
<script>
$(document).ready(function() {
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
$(this).parent().find('.square').css('background', $(this).val());
});
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
notifica();
});
</script>

View File

@ -0,0 +1,27 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
include_once __DIR__.'/../../core.php';
use Modules\DDT\Stato;
if (!empty($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record`=`dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dt_statiddt`.`id`='.prepare($id_record));
$stato = Stato::find($id_record);
}

View File

@ -1,27 +1,3 @@
-- Aggiunta Marchio articolo
ALTER TABLE `mg_articoli` ADD `id_marchio` INT NULL DEFAULT NULL;
CREATE TABLE `mg_marchi` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`link` varchar(255) NOT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)) ENGINE = InnoDB;
INSERT INTO `zz_modules` (`name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES ('Marchi', 'marchi', 'SELECT |select| FROM `mg_marchi` WHERE 1=1 HAVING 2=2 ORDER BY `mg_marchi`.`name`', '', 'fa fa-angle-right', '2.5.6', '2.5.6', '7', (SELECT `id` FROM `zz_modules` AS `t` WHERE `name` = 'Tabelle'), '1', '1', '1', '1');
INSERT INTO `zz_modules_lang` (`id_lang`, `id_record`, `title`) VALUES ('1', (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi'), 'Marchi');
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi'), 'id', 'mg_marchi.id', '0', '0', '0', '0', '0', '', '', '0', '0', '0'),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi'), 'Nome', 'mg_marchi.name', '1', '0', '0', '0', '0', '', '', '1', '0', '0'),
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi'), 'Link', 'mg_marchi.link', '2', '0', '0', '0', '0', '', '', '1', '0', '0');
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'id'),
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Nome' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Nome'),
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Link' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Link');
-- Rimozione impostazioni deprecate per sezionale predefinito autofatture
DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Sezionale per autofatture di vendita';
DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Sezionale per autofatture di acquisto';

65
update/2_6.sql Normal file
View File

@ -0,0 +1,65 @@
-- Aggiunta Marchio articolo
ALTER TABLE `mg_articoli` ADD `id_marchio` INT NULL DEFAULT NULL;
CREATE TABLE `mg_marchi` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`link` varchar(255) NOT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)) ENGINE = InnoDB;
INSERT INTO `zz_modules` (`name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES ('Marchi', 'marchi', 'SELECT |select| FROM `mg_marchi` WHERE 1=1 HAVING 2=2 ORDER BY `mg_marchi`.`name`', '', 'fa fa-angle-right', '2.6', '2.6', '7', (SELECT `id` FROM `zz_modules` AS `t` WHERE `name` = 'Tabelle'), '1', '1', '1', '1');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Marchi';
INSERT INTO `zz_modules_lang` (`id_lang`, `id_record`, `title`) VALUES
('1', @id_module, 'Marchi')
('2', @id_module, 'Marchi');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Marchi';
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES
(@id_module, 'id', 'mg_marchi.id', '0', '0', '0', '0', '0', '', '', '0', '0', '0'),
(@id_module, 'Nome', 'mg_marchi.name', '1', '0', '0', '0', '0', '', '', '1', '0', '0'),
(@id_module, 'Link', 'mg_marchi.link', '2', '0', '0', '0', '0', '', '', '1', '0', '0');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Marchi';
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = @id_module), 'id'),
(2, (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = @id_module), 'id'),
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Nome' AND `id_module` = @id_module), 'Nome'),
(2, (SELECT `id` FROM `zz_views` WHERE `name` = 'Nome' AND `id_module` = @id_module), 'Name'),
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Link' AND `id_module` = @id_module), 'Link'),
(2, (SELECT `id` FROM `zz_views` WHERE `name` = 'Link' AND `id_module` = @id_module), 'Link');
-- Aggiunta modulo Stati dei DDT
ALTER TABLE `dt_statiddt` ADD `deleted_at` timestamp NULL DEFAULT NULL;
INSERT INTO `zz_modules` (`name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES ('Stati DDT', 'stati_ddt', 'SELECT |select| FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.|lang|) WHERE 1=1 AND `deleted_at` IS NULL HAVING 2=2', '', 'fa fa-circle-o', '2.6', '2.6', '7', (SELECT `id` FROM `zz_modules` AS `t` WHERE `name` = 'Tabelle'), '1', '1', '1', '1');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Stati DDT';
INSERT INTO `zz_modules_lang` (`id_lang`, `id_record`, `title`) VALUES
('1', @id_module, 'Stati dei DDT'),
('2', @id_module, 'Stati dei DDT');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Stati DDT';
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `avg`, `default`) VALUES
(@id_module, 'Fatturabile', 'IF(is_fatturabile, \'S&igrave;\', \'No\')', '6', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
(@id_module, 'Completato', 'IF(completato, \'S&igrave;\', \'No\')', '5', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
(@id_module, 'Icona', 'icona', '3', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
(@id_module, 'Descrizione', '`dt_statiddt_lang`.`title`', '2', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
(@id_module, 'id', '`dt_statiddt`.`id`', '1', '0', '0', '0', '0', NULL, NULL, '0', '0', '0', '1'),
(@id_module, 'color_Colore', 'colore', '7', '0', '0', '1', '0', '', '', '1', '0', '0', '0');
SELECT @id_module := `id` FROM `zz_modules` WHERE `name` = 'Stati DDT';
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Fatturabile' AND `id_module` = @id_module), 'Fatturabile'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Fatturabile' AND `id_module` = @id_module), 'To be billed'),
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Completato' AND `id_module` = @id_module), 'Completato'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Completato' AND `id_module` = @id_module), 'Completed'),
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Icona' AND `id_module` = @id_module), 'Icona'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Icona' AND `id_module` = @id_module), 'Icon'),
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Descrizione' AND `id_module` = @id_module), 'Descrizione'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Descrizione' AND `id_module` = @id_module), 'Description'),
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = @id_module), 'id'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = @id_module), 'id'),
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'color_Colore' AND `id_module` = @id_module), 'color_Colore'),
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'color_Colore' AND `id_module` = @id_module), 'color_Color');