This commit is contained in:
MatteoPistorello 2022-12-16 15:53:03 +01:00
commit 967b6eb9e8
8 changed files with 187 additions and 37 deletions

View File

@ -29,12 +29,13 @@ function initMaskInput(input) {
}); });
} else if ($input.hasClass('rea-mask')) { } else if ($input.hasClass('rea-mask')) {
$input.inputmask({ $input.inputmask({
mask: "AA-999999{1,15}", regex: "([A-Za-z]{2})-([0-9]{20})",
casing: "upper", casing: "upper",
placeholder: "",
}); });
} else if ($input.hasClass('provincia-mask')) { } else if ($input.hasClass('provincia-mask')) {
$input.inputmask({ $input.inputmask({
mask: "AA", regex: "[A-Za-z]{2}",
casing: "upper", casing: "upper",
}); });
} else if ($input.hasClass('alphanumeric-mask')) { } else if ($input.hasClass('alphanumeric-mask')) {

View File

@ -25,7 +25,7 @@ class ReaValidi extends Controllo
{ {
public function getName() public function getName()
{ {
return tr('Anagrafiche con codici REA non validi'); return tr('Anagrafiche con codici R.E.A. non validi');
} }
public function getType($record) public function getType($record)
@ -35,7 +35,14 @@ class ReaValidi extends Controllo
public function getOptions($record) public function getOptions($record)
{ {
return []; return [
[
'name' => tr('Rimuovi'),
'icon' => 'fa fa-trash',
'color' => 'danger',
'params' => [],
],
];
} }
public function check() public function check()
@ -43,7 +50,7 @@ class ReaValidi extends Controllo
$database = database(); $database = database();
/** /**
* Verifico se i rea inseriti per le anagrafiche hanno una struttura valida. * Verifico se i R.E.A. inseriti per le anagrafiche hanno una struttura valida.
*/ */
$anagrafiche_interessate = $database->fetchArray('SELECT $anagrafiche_interessate = $database->fetchArray('SELECT
an_anagrafiche.idanagrafica AS id, an_anagrafiche.idanagrafica AS id,
@ -54,7 +61,7 @@ class ReaValidi extends Controllo
INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica = an_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica = an_anagrafiche.idanagrafica
INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica
WHERE WHERE
codicerea NOT REGEXP "^..-......$" AND codicerea != "" codicerea NOT REGEXP "([A-Za-z]{2})-([0-9]{1,20})" AND codicerea != ""
AND AND
deleted_at IS NULL deleted_at IS NULL
GROUP BY an_anagrafiche.idanagrafica'); GROUP BY an_anagrafiche.idanagrafica');
@ -68,7 +75,7 @@ class ReaValidi extends Controllo
$this->addResult([ $this->addResult([
'id' => $anagrafica['id'], 'id' => $anagrafica['id'],
'nome' => \Modules::link('Anagrafiche', $anagrafica['id'], $anagrafica['ragione_sociale']), 'nome' => \Modules::link('Anagrafiche', $anagrafica['id'], $anagrafica['ragione_sociale']),
'descrizione' => tr('Il codice REA "_REA_" non è valido', [ 'descrizione' => tr('Il codice REA "_REA_" non è valido.', [
'_REA_' => $anagrafica['codicerea'], '_REA_' => $anagrafica['codicerea'],
]), ]),
]); ]);
@ -78,6 +85,10 @@ class ReaValidi extends Controllo
public function execute($record, $params = []) public function execute($record, $params = [])
{ {
return false; $anagrafica = Anagrafica::find($record['id']);
$anagrafica->codicerea = null;
$anagrafica->save();
return true;
} }
} }

View File

@ -66,7 +66,7 @@ switch (post('op')) {
$anagrafica->idsede_fatturazione = post('idsede_fatturazione'); $anagrafica->idsede_fatturazione = post('idsede_fatturazione');
$anagrafica->note = post('note'); $anagrafica->note = post('note');
$anagrafica->codiceri = post('codiceri'); $anagrafica->codiceri = post('codiceri');
$anagrafica->codicerea = post('codicerea'); $anagrafica->codicerea = strtoupper(post('codicerea'));
$anagrafica->appoggiobancario = post('appoggiobancario'); $anagrafica->appoggiobancario = post('appoggiobancario');
$anagrafica->filiale = post('filiale'); $anagrafica->filiale = post('filiale');
$anagrafica->codiceiban = post('codiceiban'); $anagrafica->codiceiban = post('codiceiban');
@ -89,8 +89,6 @@ switch (post('op')) {
$anagrafica->idrelazione = post('idrelazione'); $anagrafica->idrelazione = post('idrelazione');
$anagrafica->sitoweb = post('sitoweb'); $anagrafica->sitoweb = post('sitoweb');
$anagrafica->iscrizione_tribunale = post('iscrizione_tribunale'); $anagrafica->iscrizione_tribunale = post('iscrizione_tribunale');
$anagrafica->cciaa = post('cciaa');
$anagrafica->cciaa_citta = post('cciaa_citta');
$anagrafica->n_alboartigiani = post('n_alboartigiani'); $anagrafica->n_alboartigiani = post('n_alboartigiani');
$anagrafica->foro_competenza = post('foro_competenza'); $anagrafica->foro_competenza = post('foro_competenza');
$anagrafica->riferimento_amministrazione = post('riferimento_amministrazione'); $anagrafica->riferimento_amministrazione = post('riferimento_amministrazione');

View File

@ -43,7 +43,6 @@ $fields = [
'Note' => 'note', 'Note' => 'note',
'Codice REA' => 'codicerea', 'Codice REA' => 'codicerea',
'Marche' => 'marche', 'Marche' => 'marche',
'CCIAA' => 'cciaa',
'Numero di iscrizione albo artigiani' => 'n_alboartigiani', 'Numero di iscrizione albo artigiani' => 'n_alboartigiani',
]; ];

View File

@ -192,7 +192,7 @@ if (sizeof($problemi_anagrafica) > 0) {
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('Provincia'); ?>", "name": "provincia", "maxlength": 2, "class": "text-center provincia-mask text-uppercase", "value": "$provincia$", "extra": "onkeyup=\"this.value = this.value.toUpperCase();\"" ]} {[ "type": "text", "label": "<?php echo tr('Provincia'); ?>", "name": "provincia", "class": "text-center provincia-mask text-uppercase", "value": "$provincia$", "extra": "onkeyup=\"this.value = this.value.toUpperCase();\"" ]}
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
@ -642,7 +642,7 @@ if ($is_cliente or $is_fornitore or $is_tecnico) {
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Codice R.E.A.').' <small>('.tr('provincia-C.C.I.A.A.').')</small>'; ?>", "name": "codicerea", "value": "$codicerea$", "class": "rea-mask", "help": "<?php echo tr('Formato: _PATTERN_', [ {[ "type": "text", "label": "<?php echo tr('Codice R.E.A.').' <small>('.tr('provincia-C.C.I.A.A.').')</small>'; ?>", "name": "codicerea", "value": "$codicerea$", "class": "rea-mask text-uppercase", "help": "<?php echo tr('Esempio: _PATTERN_', [
'_PATTERN_' => 'RM-123456', '_PATTERN_' => 'RM-123456',
]); ?>" ]} ]); ?>" ]}
</div> </div>

View File

@ -104,15 +104,37 @@ foreach ($results as $result) {
$giorno_pagamento = ($result['giorno'] < -1) ? -$result['giorno'] - 1 : $result['giorno']; $giorno_pagamento = ($result['giorno'] < -1) ? -$result['giorno'] - 1 : $result['giorno'];
} }
// Collegamenti diretti
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir`, NULL AS `deleted_at` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`idpagamento` = '.prepare($id_record).'
UNION
SELECT `or_ordini`.`id`, `or_ordini`.`data`, `or_ordini`.`numero`, `or_ordini`.`numero_esterno`, `or_tipiordine`.`descrizione` AS tipo_documento, `or_tipiordine`.`dir`, NULL AS `deleted_at` FROM `or_ordini` JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` WHERE `or_ordini`.`idpagamento` = '.prepare($id_record).'
UNION
SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt`.`descrizione` AS tipo_documento, `dt_tipiddt`.`dir`, NULL AS `deleted_at` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`idpagamento` = '.prepare($id_record).'
UNION
SELECT `co_contratti`.`id`, `co_contratti`.`data_bozza`, `co_contratti`.`numero`, 0 AS numero_esterno , "Contratto" AS tipo_documento, 0 AS dir, NULL AS `deleted_at` FROM `co_contratti` WHERE `co_contratti`.`idpagamento` = '.prepare($id_record).'
UNION
SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno , "Preventivo" AS tipo_documento, 0 AS dir, NULL AS `deleted_at` FROM `co_preventivi` WHERE `co_preventivi`.`idpagamento` = '.prepare($id_record).'
ORDER BY `data`');
echo ' echo '
<div class="box box-success"> <div class="box box-success">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">'.tr('Rata _NUMBER_', [ <h3 class="box-title">'.tr('Rata _NUMBER_', [
'_NUMBER_' => $numero_rata, '_NUMBER_' => $numero_rata,
]).'</h3> ]).'</h3>';
<button type="button" class="btn btn-danger pull-right" onclick="rimuoviRata('.$result['id'].')"> if (empty($elementi)) {
<i class="fa fa-trash"></i> '.tr('Elimina').' echo '
</button> <button type="button" class="btn btn-danger pull-right" onclick="rimuoviRata(' . $result['id'] . ')">
<i class="fa fa-trash"></i> ' . tr('Elimina') . '
</button>';
}
echo '
</div> </div>
<div class="box-body"> <div class="box-body">
<input type="hidden" value="'.$result['id'].'" name="id['.$numero_rata.']"> <input type="hidden" value="'.$result['id'].'" name="id['.$numero_rata.']">
@ -171,9 +193,7 @@ foreach ($results as $result) {
</div> </div>
</div> </div>
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a>
<?php <?php
echo ' echo '
<form class="hide" id="template"> <form class="hide" id="template">
@ -207,6 +227,71 @@ echo '
</div> </div>
</form>'; </form>';
if (!empty($elementi)) {
echo '
<div class="box box-warning collapsable collapsed-box">
<div class="box-header with-border">
<h3 class="box-title"><i class="fa fa-warning"></i> '.tr('Documenti collegati: _NUM_', [
'_NUM_' => count($elementi),
]).'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
</div>
</div>
<div class="box-body">
<ul>';
foreach ($elementi as $elemento) {
$descrizione = tr('_DOC_ _NUM_ del _DATE_ _DELETED_AT_', [
'_DOC_' => $elemento['tipo_documento'],
'_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'],
'_DATE_' => Translator::dateToLocale($elemento['data']),
'_DELETED_AT_' => (!empty($elemento['deleted_at']) ? tr('Eliminato il:').' '.Translator::dateToLocale($elemento['deleted_at']) : ''),
]);
//se non è un preventivo è un ddt o una fattura
//se non è un ddt è una fattura.
if (in_array($elemento['tipo_documento'], ['Preventivo'])) {
$modulo = 'Preventivi';
} elseif (in_array($elemento['tipo_documento'], ['Contratto'])) {
$modulo = 'Contratti';
} elseif (in_array($elemento['tipo_documento'], ['Ordine cliente', 'Ordine fornitore'])) {
$modulo = ($elemento['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore';
} elseif (in_array($elemento['tipo_documento'], ['Ddt in uscita', 'Ddt in entrata'])) {
$modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto';
} else {
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
}
$id = $elemento['id'];
echo '
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
}
echo '
</ul>
</div>
</div>';
}
if (!empty($elementi)) {
echo '
<div class="alert alert-error">
' . tr('Eliminando questo documento si potrebbero verificare problemi nelle altre sezioni del gestionale') . '.
</div>
<a class="btn btn-danger ask disabled" data-backto="record-list">
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>';
} else {
echo '
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>';
}
?> ?>
<script> <script>

View File

@ -42,29 +42,22 @@ $query = Query::getQuery($structure, $where, 0, []);
$query = Modules::replaceAdditionals($id_module, $query); $query = Modules::replaceAdditionals($id_module, $query);
// Modifiche alla query principale
$query = preg_replace('/FROM `mg_articoli`/', ' FROM mg_articoli LEFT JOIN (SELECT idarticolo, SUM(qta) AS qta_totale FROM mg_movimenti WHERE data <='.prepare($period_end).' GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id ', $query);
$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_vendita,', $query);
$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.um,', $query);
$query = preg_replace('/^SELECT /', 'SELECT movimenti.qta_totale,', $query);
if (post('acquisto') == 'standard') { if (post('acquisto') == 'standard') {
$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_acquisto AS acquisto,', $query); $query = preg_replace('/^SELECT/', 'SELECT mg_articoli.prezzo_acquisto AS acquisto, ', $query);
$text = "al prezzo presente nella scheda articolo"; $text = "al prezzo presente nella scheda articolo";
} elseif(post('acquisto') == 'first') { } elseif(post('acquisto') == 'first') {
$query = preg_replace('/^SELECT /', 'SELECT (SELECT (prezzo_unitario-sconto_unitario) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id ORDER BY co_righe_documenti.id ASC LIMIT 0,1) AS acquisto,', $query); $query = preg_replace('/^SELECT/', 'SELECT (SELECT (prezzo_unitario-sconto_unitario) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id ORDER BY co_righe_documenti.id ASC LIMIT 0,1) AS acquisto, ', $query);
$text = "al primo articolo acquistato"; $text = "al primo articolo acquistato";
} elseif(post('acquisto') == 'last') { } elseif(post('acquisto') == 'last') {
$query = preg_replace('/^SELECT /', 'SELECT (SELECT (prezzo_unitario-sconto_unitario) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id ORDER BY co_righe_documenti.id DESC LIMIT 0,1) AS acquisto,', $query); $query = preg_replace('/^SELECT/', 'SELECT (SELECT (prezzo_unitario-sconto_unitario) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id ORDER BY co_righe_documenti.id DESC LIMIT 0,1) AS acquisto, ', $query);
$text = "all'ultimo articolo acquistato"; $text = "all'ultimo articolo acquistato";
} else { } else {
$query = preg_replace('/^SELECT /', 'SELECT (SELECT (SUM((prezzo_unitario-sconto_unitario)*qta)/SUM(qta)) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id) AS acquisto,', $query); $query = preg_replace('/^SELECT/', 'SELECT (SELECT (SUM((prezzo_unitario-sconto_unitario)*qta)/SUM(qta)) AS acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_documenti.idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita") AND idarticolo=mg_articoli.id) AS acquisto, ', $query);
$text = "alla media ponderata dell'articolo"; $text = "alla media ponderata dell'articolo";
} }
if (post('tipo') == 'nozero') { if (post('tipo') == 'nozero') {
$query = str_replace('2=2', '2=2 AND movimenti.qta_totale > 0', $query); $query = str_replace('2=2', '2=2 AND qta > 0', $query);
} }
$data = Query::executeAndCount($query); $data = Query::executeAndCount($query);
@ -98,17 +91,18 @@ echo '
$totale_qta = 0; $totale_qta = 0;
$totali = []; $totali = [];
foreach ($data['results'] as $r) { foreach ($data['results'] as $r) {
$valore_magazzino = $r['acquisto'] * $r['qta_totale']; $valore_magazzino = $r['Prezzo di acquisto'] * $r['Q.tà'];
echo ' echo '
<tr> <tr>
<td>'.$r['Codice'].'</td> <td>'.$r['Codice'].'</td>
<td>'.$r['Categoria'].'</td> <td>'.$r['Categoria'].'</td>
<td>'.$r['Descrizione'].'</td> <td>'.$r['Descrizione'].'</td>
<td class="text-right">'.moneyFormat($r['prezzo_vendita']).'</td> <td class="text-right">'.moneyFormat($r['Prezzo di vendita']).'</td>
<td class="text-right">'.Translator::numberToLocale($r['qta_totale']).' '.$r['um'].'</td> <td class="text-right">'.Translator::numberToLocale($r['Q. disponibile']).' '.$r['um'].'</td>
<td class="text-right">'.moneyFormat($r['acquisto']).'</td> <td class="text-right">'.moneyFormat($r['Prezzo di acquisto']).'</td>
<td class="text-right">'.moneyFormat($valore_magazzino).'</td> <td class="text-right">'.moneyFormat($valore_magazzino).'</td>
</tr>'; </tr>';

62
update/2_4_39.sql Normal file
View File

@ -0,0 +1,62 @@
-- Fix query vista Contratti
UPDATE `zz_modules` SET `options` = "SELECT
|select|
FROM
`co_contratti`
LEFT JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id`
LEFT JOIN ( SELECT `idcontratto`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `co_righe_contratti` GROUP BY `idcontratto`) AS righe ON `co_contratti`.`id` = `righe`.`idcontratto`
LEFT JOIN ( SELECT GROUP_CONCAT(CONCAT(matricola, IF(nome != '', CONCAT(' - ', nome), '')) SEPARATOR '<br>') AS descrizione, my_impianti_contratti.idcontratto FROM my_impianti INNER JOIN my_impianti_contratti ON my_impianti.id = my_impianti_contratti.idimpianto GROUP BY my_impianti_contratti.idcontratto) AS impianti ON impianti.idcontratto = co_contratti.id
LEFT JOIN( SELECT um, SUM(qta) AS somma, idcontratto FROM co_righe_contratti GROUP BY um, idcontratto) AS orecontratti ON orecontratti.um = 'ore' AND orecontratti.idcontratto = co_contratti.id
LEFT JOIN( SELECT in_interventi.id_contratto, SUM(ore) AS sommatecnici FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id GROUP BY in_interventi.id_contratto) AS tecnici ON tecnici.id_contratto = co_contratti.id
WHERE
1=1
|date_period(custom,'|period_start|' >= `data_bozza` AND '|period_start|' <= `data_conclusione`,'|period_end|' >= `data_bozza` AND '|period_end|' <= `data_conclusione`,`data_bozza` >= '|period_start|' AND `data_bozza` <= '|period_end|',`data_conclusione` >= '|period_start|' AND `data_conclusione` <= '|period_end|',`data_bozza` >= '|period_start|' AND `data_conclusione` = '0000-00-00')|
HAVING
2=2" WHERE `name` = 'Contratti';
-- Fix query vista Fatture di vendita
UPDATE `zz_modules` SET `options` = "SELECT
|select|
FROM
`co_documenti`
LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`
LEFT JOIN (SELECT `iddocumento`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`iva`) AS `iva` FROM `co_righe_documenti` GROUP BY `iddocumento`) AS righe ON `co_documenti`.`id` = `righe`.`iddocumento`
LEFT JOIN (SELECT `co_banche`.`id`, CONCAT(`co_banche`.`nome`, ' - ', `co_banche`.`iban`) AS descrizione FROM `co_banche` GROUP BY `co_banche`.`id`) AS banche ON `banche`.`id` =`co_documenti`.`id_banca_azienda`
LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
LEFT JOIN `fe_stati_documento` ON `co_documenti`.`codice_stato_fe` = `fe_stati_documento`.`codice`
LEFT JOIN `co_ritenuta_contributi` ON `co_documenti`.`id_ritenuta_contributi` = `co_ritenuta_contributi`.`id`
LEFT JOIN (SELECT `zz_operations`.`id_email`, `zz_operations`.`id_record` FROM `zz_operations` INNER JOIN `em_emails` ON `zz_operations`.`id_email` = `em_emails`.`id` INNER JOIN `em_templates` ON `em_emails`.`id_template` = `em_templates`.`id` INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_operations`.`op` = 'send-email' GROUP BY `zz_operations`.`id_record`) AS `email` ON `email`.`id_record` = `co_documenti`.`id`
LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id`
LEFT JOIN (SELECT `numero_esterno`, `id_segment`, `idtipodocumento`, `data` FROM `co_documenti` WHERE `co_documenti`.`idtipodocumento` IN( SELECT `id` FROM `co_tipidocumento` WHERE `dir` = 'entrata') AND( `co_documenti`.`data` BETWEEN '2022-01-01' AND '2022-12-31 23:59:59') AND `numero_esterno` != '' GROUP BY `id_segment`, `numero_esterno`, `idtipodocumento`, `data` HAVING COUNT(`numero_esterno`) > 1) dup ON `co_documenti`.`numero_esterno` = `dup`.`numero_esterno` AND `dup`.`id_segment` = `co_documenti`.`id_segment` AND `dup`.`idtipodocumento` = `co_documenti`.`idtipodocumento` AND `dup`.`data` = `co_documenti`.`data`
WHERE
1=1 AND `dir` = 'entrata' |segment(`co_documenti`.`id_segment`)| |date_period(`co_documenti`.`data`)|
HAVING
2=2
ORDER BY
`co_documenti`.`data` DESC,
CAST(`co_documenti`.`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Fatture di vendita';
-- Fix query viste Utenti e permessi
UPDATE `zz_modules` SET `options` = "SELECT
|select|
FROM
`zz_groups`
LEFT JOIN (SELECT `zz_users`.`idgruppo`, COUNT(`id`) AS num FROM `zz_users` GROUP BY `id`) AS utenti ON `zz_groups`.`id`=`utenti`.`idgruppo`
WHERE
1=1
HAVING
2=2
ORDER BY
`id`,
`nome` ASC" WHERE `name` = 'Utenti e permessi';
-- Aumento dimensione massima codicerea
ALTER TABLE `an_anagrafiche` CHANGE `codicerea` `codicerea` VARCHAR(23) DEFAULT NULL;
-- Pulizia campi inutilizzati
ALTER TABLE `an_anagrafiche` DROP `cciaa`;
ALTER TABLE `an_anagrafiche` DROP `cciaa_citta`;