Compare commits

...

9 Commits

Author SHA1 Message Date
Pek5892 4985df2ebc Fix compatibilità 2024-05-13 17:26:12 +02:00
Pek5892 b8e19be76f Fix minori 2024-05-13 16:29:57 +02:00
Pek5892 5d0e3102ee Aggiunta colonne Marca e Modello in Impianti 2024-05-13 16:24:38 +02:00
Pek5892 50e02eaa16 Fix minore 2024-05-13 14:39:25 +02:00
Pek5892 c35e24d08b Fix viste 2024-05-13 12:59:39 +02:00
Pek5892 869a7fddab Fix minore 2024-05-13 12:59:04 +02:00
Pek5892 8865fec6d9 Fix footer template fattura 2024-05-13 12:37:45 +02:00
Pek5892 aa831bd8fc Fix minore 2024-05-13 12:23:31 +02:00
Pek5892 47b2df170c Ottimizzati i background in scadenzario 2024-05-13 12:12:29 +02:00
11 changed files with 248 additions and 45 deletions

View File

@ -62,11 +62,12 @@ L'installazione del gestionale richiede la presenza di un server web con abilita
| PHP | EOL | Supportato |
|-----|-----|:----------:|
| 8.3 | 23/11/2026 | ✔️ |
| 8.2 | 08/12/2025 | ✔️ |
| 8.1 | 25/11/2024 | ✔️ |
| 8.0 | 26/11/2023 | ✔️ |
| 7.4 | 28/11/2022 | ✔️ |
| 8.0 | 26/11/2023 | |
| 7.4 | 28/11/2022 | |
| 7.3 | 06/12/2021 | ❌ |
| 7.2 | 30/11/2020 | ❌ |
</td>
<td valign="top">
@ -85,6 +86,12 @@ L'installazione del gestionale richiede la presenza di un server web con abilita
</tr>
</table>
❗Alcune dipendenze presenti dalla versione 2.5 non sono più compatibili con PHP 7.4 e PHP 8.0. Per continuare a utilizzare tali versioni di PHP, sarà necessario ricompilare utilizzando il file composer_74.json.
Per semplificarne l'installazione, la versione 2.5.2 sarà disponibile in un doppio zip con entrambe le versioni (compatibile con php < 8.1 e compatibile con php > 8.1).
Dalla prossima versione (2.5.3) la versione minima di php richiesta sarà la 8.1, non sarà quindi disponibile al download il secondo file zip.
Per ulteriori informazioni sui pacchetti che forniscono questi elementi di default, visitare la sezione [Installazione](https://docs.openstamanager.com/configurazione/installazione) della documentazione.
### Requisiti hardware

View File

@ -149,7 +149,7 @@
"prefer-stable": true,
"platform-check": false,
"platform": {
"php": "8.1.28"
"php": "8.3.6"
},
"allow-plugins": {
"kylekatarnls/update-helper": true

158
composer_74.json Normal file
View File

@ -0,0 +1,158 @@
{
"name": "devcode-it/openstamanager",
"description": "Gestionale open-source per assistenza tecnica e fatturazione elettronica",
"license": "GPL-3.0",
"keywords": [
"gestionale",
"assistenza tecnica",
"fatturazione elettronica",
"open-source"
],
"homepage": "https://www.openstamanager.com/",
"authors": [{
"name": "DevCode s.r.l.",
"email": "info@openstamanager.com"
}],
"type": "project",
"require": {
"php": "^7.4|^8.0",
"ext-curl": "*",
"ext-dom": "*",
"ext-fileinfo": "*",
"ext-intl": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"ext-pdo": "*",
"ext-simplexml": "*",
"ext-xsl": "*",
"ext-zip": "*",
"davidepastore/codice-fiscale": "^0.9.1",
"devcode-it/ical-easy-reader": "dev-main",
"digitick/sepa-xml": "^2.1",
"dragonmantank/cron-expression": "^1.0",
"ezyang/htmlpurifier": "^4.8",
"filp/whoops": "^2.15.0",
"greenlion/php-sql-parser": "^4.5",
"guzzlehttp/guzzle": "^7.0.1",
"ifsnop/mysqldump-php": "^2.3",
"illuminate/database": "^8.0",
"intervention/image": "^2.3",
"jurosh/pdf-merge": "^2.1",
"league/csv": "^9.7.0",
"league/oauth2-client": "^2.6",
"league/oauth2-google": "^4.0",
"league/flysystem": "^3.0",
"league/flysystem-ftp": "^3.0",
"maximebf/debugbar": "^1.15",
"monolog/monolog": "^1.22",
"mpdf/mpdf": "^v8.0.10",
"mpociot/vat-calculator": "^2.3",
"owasp/csrf-protector-php": "^1.0",
"phpmailer/phpmailer": "^6.0",
"respect/validation": "^2.0",
"servo/fluidxml": "^1.21",
"slim/flash": "^0.4.0",
"spipu/html2pdf": "^5.0.0",
"symfony/filesystem": "^5.0",
"symfony/finder": "^5.0",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php70": "^1.8",
"symfony/translation": "^4.0",
"symfony/var-dumper": "^5.0",
"thenetworg/oauth2-azure": "^2.0",
"voku/stringy": "^6.0.0",
"wdog/sdd_ita": "dev-master",
"willdurand/geocoder": "^4.2"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.53",
"rector/rector": "^1.0"
},
"autoload": {
"psr-4": {
"": "src/",
"Update\\": "update/",
"Modules\\Aggiornamenti\\": ["modules/aggiornamenti/custom/src/", "modules/aggiornamenti/src/"],
"Modules\\Anagrafiche\\": ["modules/anagrafiche/custom/src/", "modules/anagrafiche/src/"],
"Modules\\AttributiCombinazioni\\": ["modules/attributi_combinazioni/custom/src/", "modules/attributi_combinazioni/src/"],
"Modules\\Backups\\": ["modules/backups/custom/src/", "modules/backups/src/"],
"Modules\\CombinazioniArticoli\\": ["modules/combinazioni_articoli/custom/src/", "modules/combinazioni_articoli/src/"],
"Modules\\Emails\\": ["modules/emails/custom/src/", "modules/emails/src/"],
"Modules\\Articoli\\": ["modules/articoli/custom/src/", "modules/articoli/src/"],
"Modules\\Checklists\\": ["modules/checklists/custom/src/", "modules/checklists/src/"],
"Modules\\Ritenute\\": ["modules/ritenute/custom/src/", "modules/ritenute/src/"],
"Modules\\RitenuteContributi\\": ["modules/ritenute_contributi/custom/src/", "modules/ritenute_contributi/src/"],
"Modules\\Rivalse\\": ["modules/rivalse/custom/src/", "modules/rivalse/src/"],
"Modules\\Newsletter\\": ["modules/newsletter/custom/src/", "modules/newsletter/src/"],
"Modules\\ListeNewsletter\\": ["modules/liste_newsletter/custom/src/", "modules/liste_newsletter/src/"],
"Modules\\Iva\\": ["modules/iva/custom/src/", "modules/iva/src/"],
"Modules\\DDT\\": ["modules/ddt/custom/src/", "modules/ddt/src/"],
"Modules\\Fatture\\": ["modules/fatture/custom/src/", "modules/fatture/src/"],
"Modules\\ListiniCliente\\": ["modules/listini_cliente/custom/src/", "modules/listini_cliente/src/"],
"Modules\\Ordini\\": ["modules/ordini/custom/src/", "modules/ordini/src/"],
"Modules\\Preventivi\\": ["modules/preventivi/custom/src/", "modules/preventivi/src/"],
"Modules\\Contratti\\": ["modules/contratti/custom/src/", "modules/contratti/src/"],
"Modules\\Interventi\\": ["modules/interventi/custom/src/", "modules/interventi/src/"],
"Modules\\Pagamenti\\": ["modules/pagamenti/custom/src/", "modules/pagamenti/src/"],
"Modules\\Statistiche\\": ["modules/statistiche/custom/src/", "modules/statistiche/src/"],
"Modules\\Scadenzario\\": ["modules/scadenzario/custom/src/", "modules/scadenzario/src/"],
"Modules\\PrimaNota\\": ["modules/primanota/custom/src/", "modules/primanota/src/"],
"Modules\\Utenti\\": ["modules/utenti/custom/src/", "modules/utenti/src/"],
"Modules\\StatoServizi\\": ["modules/stato_servizi/custom/src/", "modules/stato_servizi/src/"],
"Modules\\StatiIntervento\\": ["modules/stati_intervento/custom/src/", "modules/stati_intervento/src/"],
"Modules\\StatiPreventivo\\": ["modules/stati_preventivo/custom/src/", "modules/stati_preventivo/src/"],
"Modules\\StatiContratto\\": ["modules/stati_contratto/custom/src/", "modules/stati_contratto/src/"],
"Modules\\StatiOrdine\\": ["modules/stati_ordine/custom/src/", "modules/stati_ordine/src/"],
"Modules\\TipiIntervento\\": ["modules/tipi_intervento/custom/src/", "modules/tipi_intervento/src/"],
"Modules\\CategorieDocumentali\\": ["modules/categorie_documenti/custom/src/", "modules/categorie_documenti/src/"],
"Modules\\PianiSconto\\": ["modules/piano_sconto/custom/src/", "modules/piano_sconto/src/"],
"Modules\\Impianti\\": ["modules/impianti/custom/src/", "modules/impianti/src/"],
"Modules\\Importazione\\": ["modules/import/custom/src/", "modules/import/src/"],
"Modules\\Impostazioni\\": ["modules/impostazioni/custom/src/", "modules/impostazioni/src/"],
"Modules\\Partitario\\": ["modules/partitario/custom/src/", "modules/partitario/src/"],
"Modules\\StatoEmail\\": ["modules/stato_email/custom/src/", "modules/stato_email/src/"],
"Modules\\FileAdapters\\": ["modules/adattatori_archiviazione/custom/src/", "modules/adattatori_archiviazione/src/"],
"Plugins\\AssicurazioneCrediti\\": ["plugins/assicurazione_crediti/custom/src/", "plugins/assicurazione_crediti/src/"],
"Plugins\\ExportFE\\": ["plugins/exportFE/custom/src/", "plugins/exportFE/src/"],
"Plugins\\ImportFE\\": ["plugins/importFE/custom/src/", "plugins/importFE/src/"],
"Plugins\\ReceiptFE\\": ["plugins/receiptFE/custom/src/", "plugins/receiptFE/src/"],
"Plugins\\DichiarazioniIntento\\": ["plugins/dichiarazioni_intento/custom/src/", "plugins/dichiarazioni_intento/src/"],
"Plugins\\PianificazioneInterventi\\": ["plugins/pianificazione_interventi/custom/src/", "plugins/pianificazione_interventi/src/"],
"Plugins\\PianificazioneFatturazione\\": ["plugins/pianificazione_fatturazione/custom/src/", "plugins/pianificazione_fatturazione/src/"],
"Plugins\\StatisticheArticoli\\": ["plugins/statistiche_articoli/custom/src/", "plugins/statistiche_articoli/src/"],
"Plugins\\ListinoClienti\\": ["plugins/listino_clienti/custom/src/", "plugins/listino_clienti/src/"],
"Plugins\\ListinoFornitori\\": ["plugins/listino_fornitori/custom/src/", "plugins/listino_fornitori/src/"],
"Plugins\\ComponentiImpianti\\": ["plugins/componenti/custom/src/", "plugins/componenti/src/"],
"Plugins\\PresentazioniBancarie\\": ["plugins/presentazioni_bancarie/custom/src/", "plugins/presentazioni_bancarie/src/"]
},
"files": [
"lib/functions.php",
"lib/common.php",
"lib/helpers.php",
"lib/util.php",
"lib/deprecated.php"
]
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/wdog/sdd_ita"
}
],
"config": {
"sort-packages": true,
"optimize-autoloader": true,
"apcu-autoloader": true,
"minimum-stability": "dev",
"prefer-stable": true,
"platform-check": false,
"platform": {
"php": "8.0.29"
},
"allow-plugins": {
"kylekatarnls/update-helper": true
}
}
}

View File

@ -104,9 +104,9 @@ foreach ($modules as $name => $values) {
$settings = [
'php_version' => [
'type' => 'version',
'description' => '7.3.x - 8.0.x, consigliato almeno 7.4.x',
'minimum' => '7.3.0',
'maximum' => '8.1.99',
'description' => '8.0.x - 8.3.x',
'minimum' => '8.0.0',
'maximum' => '8.3.99',
],
'zip' => [

View File

@ -26,7 +26,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Name'); ?>", "name": "name", "required": 1 ]}
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "name", "required": 1 ]}
</div>
<div class="col-md-6">

View File

@ -26,7 +26,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-5">
{[ "type": "text", "label": "<?php echo tr('Name'); ?>", "name": "name", "value": "$name$", "required": 1 ]}
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "name", "value": "$name$", "required": 1 ]}
</div>
<div class="col-md-5">
@ -40,7 +40,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Options'); ?>", "name": "options", "value": "$options$", "required": 0, "help": "Specifica le opzioni per il tipo di archiviazione in formato JSON" ]}
{[ "type": "textarea", "label": "<?php echo tr('Opzioni'); ?>", "name": "options", "value": "$options$", "required": 0, "help": "Specifica le opzioni per il tipo di archiviazione in formato JSON" ]}
</div>
</div>

View File

@ -317,7 +317,7 @@ echo '
ksort($tecnici);
foreach ($tecnici as $key => $tecnico) {
$margine = $tecnico['ricavo'] - $tecnico['costo'];
$margine_prc = (int) (1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100;
$margine_prc = (int) (1 - ($tecnico['costo'] / ($tecnico['ricavo'] ?: 1))) * 100;
$ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int) ((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
echo '
<tr>

View File

@ -439,11 +439,11 @@ class Query
$select = [];
foreach ($views as $view) {
$select[] = $view['query'].(!empty($view['name']) ? " AS '".$view['name']."'" : '');
$select[] = $view['query'].(!empty($view['title']) ? " AS '".$view['title']."'" : '');
if (!empty($view['visible'])) {
if (!empty($view['name'])) {
$view['name'] = trim($view['name']);
if (!empty($view['title'])) {
$view['title'] = trim($view['title']);
}
if (!empty($view['search_inside'])) {
$view['search_inside'] = trim($view['search_inside']);
@ -452,21 +452,21 @@ class Query
$view['order_by'] = trim($view['order_by']);
}
$fields[] = trim($view['name']);
$fields[] = $view['title'] ? trim($view['title']) : $view['name'];
$search_inside[] = !empty($view['search_inside']) ? $view['search_inside'] : '`'.$view['name'].'`';
$order_by[] = !empty($view['order_by']) ? $view['order_by'] : '`'.$view['name'].'`';
$search_inside[] = !empty($view['search_inside']) ? $view['search_inside'] : '`'.$view['title'].'`';
$order_by[] = !empty($view['order_by']) ? $view['order_by'] : '`'.$view['title'].'`';
$search[] = $view['search'];
$slow[] = $view['slow'];
$format[] = $view['format'];
$html_format[] = $view['html_format'];
if ($view['summable']) {
$summable[] = 'SUM(`'.trim($view['name']."`) AS 'sum_".(count($fields) - 1)."'");
$summable[] = 'SUM(`'.trim($view['title']."`) AS 'sum_".(count($fields) - 1)."'");
}
if ($view['avg']) {
$avg[] = 'AVG(`'.trim($view['name']."`) AS 'avg_".(count($fields) - 1)."'");
$avg[] = 'AVG(`'.trim($view['title']."`) AS 'avg_".(count($fields) - 1)."'");
}
}
}

View File

@ -90,16 +90,16 @@ echo "
$rs2 = $dbo->fetchArray('SELECT * FROM `co_scadenziario` WHERE `iddocumento`='.prepare($id_record).' ORDER BY `scadenza` ASC');
if (!empty($rs2)) {
for ($i = 0; $i < sizeof($rs2); ++$i) {
$pagamento = $dbo->fetchOne('SELECT `fe_modalita_pagamento_lang`.`title` FROM `co_pagamenti` INNER JOIN `fe_modalita_pagamento` ON `fe_modalita_pagamento`.`codice` = `co_pagamenti`.`codice_modalita_pagamento_fe` LEFT JOIN `fe_modalita_pagamento_lang` ON (`fe_modalita_pagamento_lang`.`id_record`=`fe_modalita_pagamento`.`codice` AND `fe_modalita_pagamento_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `co_pagamenti`.`id`='.$rs2[$i]['id_pagamento'])['descrizione'];
$pagamento = $dbo->fetchOne('SELECT `fe_modalita_pagamento_lang`.`title` as descrizione FROM `co_pagamenti` INNER JOIN `fe_modalita_pagamento` ON `fe_modalita_pagamento`.`codice` = `co_pagamenti`.`codice_modalita_pagamento_fe` LEFT JOIN `fe_modalita_pagamento_lang` ON (`fe_modalita_pagamento_lang`.`id_record`=`fe_modalita_pagamento`.`codice` AND `fe_modalita_pagamento_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') WHERE `co_pagamenti`.`id`='.$rs2[$i]['id_pagamento'])['descrizione'];
echo '
<tr>
<td style=\'width:15%;\'>
<small>'.Translator::dateToLocale($rs2[$i]['scadenza'])."</small>
</td>
<td style='width:15%;' class='text-right'>
<td style='width:15%;'>
".(($rs2[$i]['pagato'] == $rs2[$i]['da_pagare']) ? '<small>PAGATO</small>' : '')."
</td>
<td style='width:15%;' class='text-right'>
<td style='width:15%;'>
<small>".moneyFormat($rs2[$i]['da_pagare'], $d_totali).'</small>
</td>
<td style=\'width:15%;\'>

View File

@ -1259,26 +1259,6 @@ 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`.`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, '<br />',IF(an_sedi.telefono!='',CONCAT(an_sedi.telefono,'<br />'),''),IF(an_sedi.cellulare!='',CONCAT(an_sedi.cellulare,'<br />'),''),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';
-- Aggiunta tabella mg_causali_movimenti_lang
CREATE TABLE IF NOT EXISTS `mg_causali_movimenti_lang` (
`id` int NOT NULL,

View File

@ -20,7 +20,9 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tags'), 'Nome','name', 1);
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT MAX(`id`)-1 FROM `zz_views` ), 'id'),
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Nome');
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Nome'),
(2, (SELECT MAX(`id`)-1 FROM `zz_views` ), 'id'),
(2, (SELECT MAX(`id`) FROM `zz_views` ), 'Name');
-- Aggiunta tabella in_interventi_tags
CREATE TABLE `in_interventi_tags` (
@ -74,7 +76,8 @@ UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_module
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi'), 'Tags', 'tags.nomi', 10);
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Tags');
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Tags'),
(2, (SELECT MAX(`id`) FROM `zz_views` ), 'Tags');
-- Aggiunta flag per calcolo media su viste
ALTER TABLE `zz_views` ADD `avg` BOOLEAN NOT NULL DEFAULT FALSE AFTER `summable`;
@ -102,3 +105,58 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `my_impianti_marche` L
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'my_impianti_marche.id' WHERE `zz_modules`.`name` = 'Marche impianti' AND `zz_views`.`name` = 'id';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'my_impianti_marche_lang.title' WHERE `zz_modules`.`name` = 'Marche 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` = 'IF(pagato = da_pagare, \'#CCFFCC\', IF(data_concordata IS NOT NULL AND data_concordata != \'0000-00-00\', IF(data_concordata < NOW(), \'#ec5353\', \'#b3d2e3\'), IF(scadenza < NOW(), \'#f08080\', IF(DATEDIFF(co_scadenziario.scadenza,NOW()) < 10, \'#f9f9c6\', \'\'))))' WHERE `zz_modules`.`name` = 'Scadenzario' AND `zz_views`.`name` = '_bg_';
-- Aggiunta colonna Data concordata in Scadenzario
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `format`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), 'Data concordata', 'IF(data_concordata IS NOT NULL AND data_concordata != \'0000-00-00\', data_concordata, \'\')', 21, 1);
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Data concordata'),
(2, (SELECT MAX(`id`) FROM `zz_views` ), 'Agreed date');
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'IF(`dup`.`numero_esterno` IS NOT NULL, \'#ec5353\', co_statidocumento.colore)' WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_views`.`name` = '_bg_';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'IF(em_emails.sent_at IS NULL, IF(em_emails.failed_at IS NULL, \'#f9f9c6\', \'#ec5353\'), \'#CCFFCC\')' WHERE `zz_modules`.`name` = 'Stato email' AND `zz_views`.`name` = '_bg_';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'IF(`d`.`conteggio`>1, \'#ec5353\', co_statidocumento.colore)' WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = '_bg_';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'IF(threshold_qta!=0, IF(mg_articoli.qta>=threshold_qta, \'#CCFFCC\', \'#ec5353\'), \'\')' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = '_bg_';
-- Aggiunta colonna Marca in Impianti
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `visible`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Impianti'), 'Marca', '`marca_lang`.`title`', 11, 0);
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Marca'),
(2, (SELECT MAX(`id`) FROM `zz_views` ), 'Brand');
-- Aggiunta colonna Modello in Impianti
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `visible`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Impianti'), 'Modello', '`modello_lang`.`title`', 12, 0);
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
(1, (SELECT MAX(`id`) FROM `zz_views` ), 'Modello'),
(2, (SELECT MAX(`id`) FROM `zz_views` ), 'Model');
-- 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, '<br />',IF(an_sedi.telefono!='',CONCAT(an_sedi.telefono,'<br />'),''),IF(an_sedi.cellulare!='',CONCAT(an_sedi.cellulare,'<br />'),''),an_sedi.citta,IF(an_sedi.indirizzo!='',CONCAT(' - ',an_sedi.indirizzo),'')) AS info FROM an_sedi) AS sede ON sede.id = my_impianti.idsede
LEFT JOIN `my_impianti_marche` as marca ON `marca`.`id` = `my_impianti`.`id_marca`
LEFT JOIN `my_impianti_marche_lang` as marca_lang ON (`marca`.`id` = `marca_lang`.`id_record` AND `marca_lang`.|lang|)
LEFT JOIN `my_impianti_marche` as modello ON `modello`.`id` = `my_impianti`.`id_modello`
LEFT JOIN `my_impianti_marche_lang` as modello_lang ON (`modello`.`id` = `modello_lang`.`id_record` AND `modello_lang`.|lang|)
WHERE
1=1
HAVING
2=2
ORDER BY
`matricola`" WHERE `name` = 'Impianti';