This commit is contained in:
Beppe 2022-01-20 14:36:24 +01:00
commit 1d8ded79a4
42 changed files with 2815 additions and 1934 deletions

View File

@ -37,9 +37,9 @@ if ($options['action'] == 'edit') {
// Fattura di vendita
elseif ($options['dir'] == 'entrata') {
// Caso particolare per aggiunta articolo
$id_rivalsa_inps = ($options['op'] == 'addarticolo') ? '' : setting('Percentuale rivalsa');
$id_rivalsa_inps = ($options['op'] == 'addarticolo') ? '' : setting('Cassa previdenziale predefinita');
$id_ritenuta_acconto = $options['id_ritenuta_acconto_predefined'] ?: setting("Percentuale ritenuta d'acconto");
$id_ritenuta_acconto = $options['id_ritenuta_acconto_predefined'] ?: setting("Ritenuta d'acconto predefinita");
}
}
@ -48,10 +48,10 @@ $calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto ?: setting("Metodologia ca
echo '
<div class="row">';
// Rivalsa INPS
// Cassa previdenziale
echo '
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Rivalsa').'", "name": "id_rivalsa_inps", "value": "'.$id_rivalsa_inps.'", "values": "query=SELECT * FROM co_rivalse", "help": "'.(($options['dir'] == 'entrata') ? setting('Tipo Cassa Previdenziale') : null).'" ]}
{[ "type": "select", "label": "'.tr('Cassa previdenziale').'", "name": "id_rivalsa_inps", "value": "'.$id_rivalsa_inps.'", "values": "query=SELECT * FROM co_rivalse", "help": "'.(($options['dir'] == 'entrata') ? setting('Tipo Cassa Previdenziale') : null).'" ]}
</div>';
// Ritenuta d'acconto
@ -75,11 +75,11 @@ if (!empty($options['show-ritenuta-contributi']) || empty($options['hide_conto']
echo '
<div class="row">';
// Ritenuta contributi
// Ritenuta previdenziale
if (!empty($options['show-ritenuta-contributi'])) {
echo '
<div class="col-md-'.$width.'">
{[ "type": "checkbox", "label": "'.tr('Ritenuta contributi').'", "name": "ritenuta_contributi", "value": "'.$result['ritenuta_contributi'].'" ]}
{[ "type": "checkbox", "label": "'.tr('Ritenuta previdenziale').'", "name": "ritenuta_contributi", "value": "'.$result['ritenuta_contributi'].'" ]}
</div>';
}

View File

@ -120,7 +120,7 @@ if (!empty($options['create_document'])) {
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Ritenuta contributi').'", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT * FROM co_ritenuta_contributi" ]}
{[ "type": "select", "label": "'.tr('Ritenuta previdenziale').'", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT * FROM co_ritenuta_contributi" ]}
</div>';
}
@ -187,13 +187,13 @@ if (!empty($options['create_document'])) {
</div>';
}
// Conto, rivalsa INPS, ritenuta d'acconto e ritenuta contributi
// Conto, rivalsa INPS, ritenuta d'acconto e ritenuta previdenziale
if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto']) && !in_array($original_module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
$id_rivalsa_inps = setting('Percentuale rivalsa');
$id_rivalsa_inps = setting('Cassa previdenziale predefinita');
if ($dir == 'uscita') {
$id_ritenuta_acconto = $documento->anagrafica->id_ritenuta_acconto_acquisti;
} else {
$id_ritenuta_acconto = $documento->anagrafica->id_ritenuta_acconto_vendite ?: setting("Percentuale ritenuta d'acconto");
$id_ritenuta_acconto = $documento->anagrafica->id_ritenuta_acconto_vendite ?: setting("Ritenuta d'acconto predefinita");
}
$calcolo_ritenuta_acconto = setting("Metodologia calcolo ritenuta d'acconto predefinito");
@ -240,11 +240,11 @@ if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto'
echo '
<div class="row">';
// Ritenuta contributi
// Ritenuta previdenziale
if ($show_ritenuta_contributi) {
echo '
<div class="col-md-'.$width.'">
{[ "type": "checkbox", "label": "'.tr('Ritenuta contributi').'", "name": "ritenuta_contributi", "value": "1" ]}
{[ "type": "checkbox", "label": "'.tr('Ritenuta previdenziale').'", "name": "ritenuta_contributi", "value": "1" ]}
</div>';
}

View File

@ -40,7 +40,7 @@ $settings = [
'Utilizza prezzi di vendita comprensivi di IVA' => false,
];
if (!empty(setting("Percentuale ritenuta d'acconto"))) {
if (!empty(setting("Ritenuta d'acconto predefinita"))) {
$settings["Causale ritenuta d'acconto"] = true;
}

File diff suppressed because it is too large Load Diff

View File

@ -73,7 +73,7 @@ class Anagrafica extends Model
$model->cognome = $cognome;
$model->codice = static::getNextCodice();
$model->id_ritenuta_acconto_vendite = setting("Percentuale ritenuta d'acconto");
$model->id_ritenuta_acconto_vendite = setting("Ritenuta d'acconto predefinita");
$model->save();
$model->tipologie = $tipologie;

View File

@ -341,11 +341,11 @@ $("#scorporaIva").click( function() {
// Collegamenti diretti
// Fatture, ddt, preventivi collegati a questo articolo
$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` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idarticolo` = '.prepare($id_record).')
$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`, SUM(co_righe_documenti.qta) AS qta_totale, ((SUM(co_righe_documenti.prezzo_unitario)-SUM(co_righe_documenti.sconto_unitario))/SUM(co_righe_documenti.qta)) AS prezzo_unitario, SUM(co_righe_documenti.prezzo_unitario)-SUM(co_righe_documenti.sconto_unitario) AS prezzo_totale FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento` WHERE `co_righe_documenti`.`idarticolo` = '.prepare($id_record).' GROUP BY co_documenti.id
UNION SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt`.`descrizione` AS tipo_documento, `dt_tipiddt`.`dir` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`id` IN (SELECT `idddt` FROM `dt_righe_ddt` WHERE `idarticolo` = '.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`, SUM(dt_righe_ddt.qta) AS qta_totale, ((SUM(dt_righe_ddt.prezzo_unitario)-SUM(dt_righe_ddt.sconto_unitario))/SUM(dt_righe_ddt.qta)) AS prezzo_unitario, SUM(dt_righe_ddt.prezzo_unitario)-SUM(dt_righe_ddt.sconto_unitario) AS prezzo_totale FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` INNER JOIN `dt_righe_ddt` ON `dt_ddt`.`id`=`dt_righe_ddt`.`idddt` WHERE `dt_righe_ddt`.`idarticolo` = '.prepare($id_record).' GROUP BY dt_ddt.id
UNION SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno , "Preventivo" AS tipo_documento, 0 AS dir FROM `co_preventivi` WHERE `co_preventivi`.`id` IN (SELECT `idpreventivo` FROM `co_righe_preventivi` WHERE `idarticolo` = '.prepare($id_record).') ORDER BY `data`');
UNION SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno , "Preventivo" AS tipo_documento, 0 AS dir, SUM(co_righe_preventivi.qta) AS qta_totale, ((SUM(co_righe_preventivi.prezzo_unitario)-SUM(co_righe_preventivi.sconto_unitario))/SUM(co_righe_preventivi.qta)) AS prezzo_unitario, SUM(co_righe_preventivi.prezzo_unitario)-SUM(co_righe_preventivi.sconto_unitario) AS prezzo_totale FROM `co_preventivi` INNER JOIN `co_righe_preventivi` ON `co_preventivi`.`id`=`co_righe_preventivi`.`idpreventivo` WHERE `co_righe_preventivi`.`idarticolo` = '.prepare($id_record).' GROUP BY co_preventivi.id ORDER BY `data`');
if (!empty($elementi)) {
echo '
@ -359,7 +359,13 @@ if (!empty($elementi)) {
</div>
</div>
<div class="box-body">
<ul>';
<table class="table table-striped table-bordered table-extra-condensed">
<tr>
<th>'.tr('Documento').'</td>
<th width="12%" class="text-center">'.tr('Quantità').'</td>
<th width="15%" class="text-center">'.tr('Prezzo unitario').'</td>
<th width="15%" class="text-center">'.tr('Prezzo totale').'</td>
<tr>';
foreach ($elementi as $elemento) {
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
@ -381,11 +387,16 @@ if (!empty($elementi)) {
$id = $elemento['id'];
echo '
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
<tr>
<td>'.Modules::link($modulo, $id, $descrizione).'</td>
<td class="text-center">'.Translator::numberToLocale($elemento['qta_totale']).'</td>
<td class="text-right">'.moneyFormat($elemento['prezzo_unitario']).'</td>
<td class="text-right">'.moneyFormat($elemento['prezzo_totale']).'</td>
<tr>';
}
echo '
</ul>
</table>
</div>
</div>';
}

View File

@ -420,7 +420,7 @@ $riga = $contratto->getRiga($type, $id_riga);
}
// Cambio stato precedente contratto in concluso (non più pianificabile)
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE is_pianificabile = 0 AND is_fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record));
$dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record));
flash()->info(tr('Contratto rinnovato!'));

View File

@ -35,13 +35,13 @@ echo '
</button>
</div>';
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_pianificabile'] && $record['rinnovabile'];
$rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_completato'] && $record['rinnovabile'];
$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili'];
$stati_completati = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_completati FROM `co_staticontratti` WHERE `is_completato` = 1')['stati_completati'];
echo '
<div class="tip" data-toggle="tooltip" title="'.tr('Il contratto è rinnovabile se sono definite le date di accettazione e conclusione e si trova in uno di questi stati: _STATE_LIST_', [
'_STATE_LIST_' => $stati_pianificabili,
'_STATE_LIST_' => $stati_completati,
]).'" id="rinnova">
<button type="button" class="btn btn-warning ask '.($rinnova ? '' : 'disabled').'" data-backto="record-edit" data-op="renew" data-msg="'.tr('Rinnovare questo contratto?').'" data-button="'.tr('Rinnova').'" data-class="btn btn-lg btn-warning">
<i class="fa fa-refresh"></i> '.tr('Rinnova').'...

View File

@ -118,7 +118,7 @@ if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazion
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo 'Sconto finale'; ?>", "name": "sconto_finale", "value": "<?php echo $contratto->sconto_finale_percentuale ?: $contratto->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($contratto->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
{[ "type": "number", "label": "<?php echo 'Sconto in fattura'; ?>", "name": "sconto_finale", "value": "<?php echo $contratto->sconto_finale_percentuale ?: $contratto->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($contratto->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto in fattura, utilizzabile per applicare sconti sul netto a pagare del documento'); ?>." ]}
</div>
</div>
@ -441,6 +441,7 @@ $("#idanagrafica_c").change(function() {
session_set("superselect,idanagrafica", $(this).val(), 0);
$("#idsede").selectReset();
$("#matricolaimpianto").selectReset();
});
$("#codice_cig, #codice_cup").bind("keyup change", function(e) {

View File

@ -215,12 +215,12 @@ echo '
<td></td>
</tr>';
// SCONTO FINALE
// SCONTO IN FATTURA
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'

View File

@ -263,7 +263,7 @@ if ($dir == 'entrata') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "'.('Sconto finale').'", "name": "sconto_finale", "value": "'.($ddt->sconto_finale_percentuale ?: $ddt->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($ddt->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento').'." ]}
{[ "type": "number", "label": "'.('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($ddt->sconto_finale_percentuale ?: $ddt->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($ddt->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul netto a pagare del documento').'." ]}
</div>
</div>';
}

View File

@ -138,7 +138,7 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
// Leggo la rivalsa inps se c'è (per i ddt di vendita lo leggo dalle impostazioni)
if ($dir == 'entrata') {
if (!empty($idrivalsainps)) {
$idrivalsainps = setting('Percentuale rivalsa');
$idrivalsainps = setting('Cassa previdenziale predefinita');
}
}
@ -159,7 +159,7 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
// Leggo la ritenuta d'acconto se c'è (per i ddt di vendita lo leggo dalle impostazioni)
if (!empty($idritenutaacconto)) {
if ($dir == 'entrata') {
$idritenutaacconto = setting("Percentuale ritenuta d'acconto");
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
}
}

View File

@ -273,12 +273,12 @@ echo '
<td></td>
</tr>';
// SCONTO FINALE
// SCONTO IN FATTURA
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'

View File

@ -397,8 +397,8 @@ elseif ($record['stato'] == 'Bozza') {
?>
<div class="col-md-3">
<?php echo !empty($record['id_ritenuta_contributi']) ? Modules::link('Ritenute contributi', $record['id_ritenuta_contributi'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Ritenuta contributi'); ?>", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT *, CONCAT(descrizione,(IF(percentuale>0, CONCAT(\" - \", percentuale, \"% sul \", percentuale_imponibile, \"% imponibile\"), \"\"))) AS descrizione FROM co_ritenuta_contributi", "help": "<?php echo tr('Ritenuta contributi da applicare alle righe della fattura.'); ?>" ]}
<?php echo !empty($record['id_ritenuta_contributi']) ? Modules::link('Ritenute previdenziali', $record['id_ritenuta_contributi'], null, null, 'class="pull-right"') : ''; ?>
{[ "type": "select", "label": "<?php echo tr('Ritenuta previdenziale'); ?>", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT *, CONCAT(descrizione,(IF(percentuale>0, CONCAT(\" - \", percentuale, \"% sul \", percentuale_imponibile, \"% imponibile\"), \"\"))) AS descrizione FROM co_ritenuta_contributi", "help": "<?php echo tr('Ritenuta previdenziale da applicare alle righe della fattura.'); ?>" ]}
</div>
<?php
@ -441,7 +441,7 @@ elseif ($record['stato'] == 'Bozza') {
</div>
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Sconto finale').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto finale in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto finale in fattura non influenza i movimenti contabili').'." ]}
{[ "type": "number", "label": "'.tr('Sconto in fattura').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'TipoDato\'\' e il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'RiferimentoTesto\'\' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'." ]}
</div>
</div>';

View File

@ -80,7 +80,7 @@ if (!empty($documento->dichiarazione)) {
$ritenuta_acconto = $dbo->fetchOne('SELECT id_ritenuta_acconto_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS id_ritenuta_acconto FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
$id_ritenuta_acconto = $ritenuta_acconto['id_ritenuta_acconto'];
if ($dir == 'entrata' && empty($id_ritenuta_acconto)) {
$id_ritenuta_acconto = setting("Percentuale ritenuta d'acconto");
$id_ritenuta_acconto = setting("Ritenuta d'acconto predefinita");
}
$options['id_ritenuta_acconto_predefined'] = $id_ritenuta_acconto;

View File

@ -75,9 +75,9 @@ foreach ($righe as $riga) {
$descrizione_conto = $dbo->fetchOne('SELECT descrizione FROM co_pianodeiconti3 WHERE id = '.prepare($riga->id_conto))['descrizione'];
$extra_riga = replace('_DESCRIZIONE_CONTO__ID_DOCUMENTO__NUMERO_RIGA__CODICE_COMMESSA__CODICE_CIG__CODICE_CUP__RITENUTA_ACCONTO__RITENUTA_CONTRIBUTI__RIVALSA_', [
'_RIVALSA_' => $riga->rivalsa_inps ? '<br>Rivalsa: '.moneyFormat(abs($riga->rivalsa_inps)) : null,
'_RIVALSA_' => $riga->rivalsa_inps ? '<br>'.tr('Cassa previdenziale').': '.moneyFormat(abs($riga->rivalsa_inps)) : null,
'_RITENUTA_ACCONTO_' => $riga->ritenuta_acconto ? '<br>Ritenuta acconto: '.moneyFormat(abs($riga->ritenuta_acconto)) : null,
'_RITENUTA_CONTRIBUTI_' => $riga->ritenuta_contributi ? '<br>Ritenuta contributi: '.moneyFormat(abs($riga->ritenuta_contributi)) : null,
'_RITENUTA_CONTRIBUTI_' => $riga->ritenuta_contributi ? '<br>Ritenuta previdenziale: '.moneyFormat(abs($riga->ritenuta_contributi)) : null,
'_DESCRIZIONE_CONTO_' => $descrizione_conto ?: '<span class="label label-danger" ><i class="fa fa-exclamation-triangle"></i>
'.tr('Conto mancante').'</span>',
'_ID_DOCUMENTO_' => $id_documento_fe ? ' - DOC: '.$id_documento_fe : null,
@ -305,7 +305,7 @@ if (!empty($rivalsa_inps)) {
}
echo '
<b>'.tr('Rivalsa', [], ['upper' => true]).' :</b>
<b>'.tr('Cassa previdenziale', [], ['upper' => true]).' :</b>
</td>
<td class="text-right">
'.moneyFormat($rivalsa_inps, 2).'
@ -360,12 +360,12 @@ if (!empty($ritenuta_acconto)) {
</tr>';
}
// RITENUTA CONTRIBUTI
// RITENUTA PREVIDENZIALE
if (!empty($ritenuta_contributi)) {
echo '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Ritenuta contributi', [], ['upper' => true]).':</b>
<b>'.tr('Ritenuta previdenziale', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($ritenuta_contributi, 2).'
@ -374,12 +374,12 @@ if (!empty($ritenuta_contributi)) {
</tr>';
}
// SCONTO FINALE
// SCONTO IN FATTURA
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'

View File

@ -140,7 +140,7 @@ class Fattura extends Document
$model->addebita_bollo = setting('Addebita marca da bollo al cliente');
// Ritenuta contributi predefinita
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null;
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta previdenziale predefinita') : null;
$model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null;
// Banca predefinita per l'anagrafica controparte

View File

@ -207,7 +207,7 @@ class Movimenti
}
/*
* 7) Ritenuta contributi
* 7) Ritenuta previdenziale
* Conto "Conto per Erario c/enasarco": DARE per Vendita, AVERE per Acquisto
* Conto della controparte: AVERE per Vendita, DARE per Acquisto
*/

View File

@ -46,9 +46,7 @@ switch ($resource) {
}
$where[] = 'idanagrafica='.prepare($superselect['idanagrafica']);
if (!empty($superselect['idsede_destinazione'])) {
$where[] = 'idsede='.prepare($superselect['idsede_destinazione']);
}
$where[] = 'idsede='.prepare($superselect['idsede_destinazione'] ?: 0);
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');

View File

@ -169,7 +169,7 @@ echo '
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Sede destinazione').'", "name": "idsede_destinazione", "value": "'.$id_sede.'", "ajax-source": "sedi", "icon-after": "add|'.$module_anagrafiche['id'].'|id_plugin='.$id_plugin_sedi.'&id_parent='.$id_anagrafica.'" ]}
{[ "type": "select", "label": "'.tr('Sede destinazione').'", "name": "idsede_destinazione", "value": "'.$id_sede.'", "ajax-source": "sedi", "select-options": '.json_encode(['idanagrafica' => $id_anagrafica]).', "icon-after": "add|'.$module_anagrafiche['id'].'|id_plugin='.$id_plugin_sedi.'&id_parent='.$id_anagrafica.'" ]}
</div>
<div class="col-md-4">
@ -231,7 +231,7 @@ echo '
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Impianto').'", "multiple": 1, "name": "idimpianti[]", "value": "'.$impianti_collegati.'", "ajax-source": "impianti-cliente", "select-options": {"idanagrafica": '.($id_anagrafica ?: '""').'}, "icon-after": "add|'.Modules::get('Impianti')['id'].'|id_anagrafica='.$id_anagrafica.'" ]}
{[ "type": "select", "label": "'.tr('Impianto').'", "multiple": 1, "name": "idimpianti[]", "value": "'.$impianti_collegati.'", "ajax-source": "impianti-cliente", "select-options": {"idanagrafica": '.($id_anagrafica ?: '""').', "idsede_destinazione": '.($id_sede ?: '""').'}, "icon-after": "add|'.Modules::get('Impianti')['id'].'|id_anagrafica='.$id_anagrafica.'" ]}
</div>
<div class="col-md-4">

View File

@ -153,8 +153,8 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
{
$dbo = database();
$id_rivalsa_inps = $id_rivalsa_inps !== false ? $id_rivalsa_inps : setting('Percentuale rivalsa');
$id_ritenuta_acconto = $id_ritenuta_acconto !== false ? $id_ritenuta_acconto : setting("Percentuale ritenuta d'acconto");
$id_rivalsa_inps = $id_rivalsa_inps !== false ? $id_rivalsa_inps : setting('Cassa previdenziale predefinita');
$id_ritenuta_acconto = $id_ritenuta_acconto !== false ? $id_ritenuta_acconto : setting("Ritenuta d'acconto predefinita");
$calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto !== false ? $calcolo_ritenuta_acconto : setting("Metodologia calcolo ritenuta d'acconto predefinito");
$fattura = Fattura::find($id_fattura);

View File

@ -27,7 +27,7 @@ switch (post('op')) {
$operations['aggiorna-liste'] = [
'text' => '<span><i class="fa fa-refresh"></i> '.tr('Aggiorna liste').'</span>',
'data' => [
'msg' => tr(''),
'msg' => tr('Vuoi davvero aggiornare le liste dei destinatari?'),
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-danger',
],

View File

@ -42,15 +42,40 @@ include_once __DIR__.'/../../core.php';
</form>
<?php
// Collegamenti diretti (numerici)
$mansioni_collegate = $dbo->fetchNum('SELECT id FROM an_referenti WHERE idmansione='.prepare($id_record));
if (!empty($mansioni_collegate)) {
$elementi = $dbo->fetchArray('SELECT an_referenti.nome, an_anagrafiche.ragione_sociale, an_anagrafiche.idanagrafica FROM an_referenti LEFT JOIN an_anagrafiche ON an_referenti.idanagrafica=an_anagrafiche.idanagrafica WHERE idmansione='.prepare($id_record));
if (!empty($elementi)) {
echo '
<div class="alert alert-danger">
'.tr('Ci sono _NUM_ referenti collegati', [
'_NUM_' => $mansioni_collegate,
]).'.
<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('Referenti 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('_REF_ (_ANAGRAFICA_)', [
'_REF_' => $elemento['nome'],
'_ANAGRAFICA_' => $elemento['ragione_sociale'],
]);
$plugin = 'Referenti';
$id = $elemento['idanagrafica'];
echo '
<li>'.Plugins::link($plugin, $id, $descrizione).'</li>';
}
echo '
</ul>
</div>
</div>';
}
?>

View File

@ -124,7 +124,7 @@ if ($module['name'] == 'Ordini cliente') {
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo 'Sconto finale'; ?>", "name": "sconto_finale", "value": "<?php echo $ordine->sconto_finale_percentuale ?: $ordine->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($ordine->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
{[ "type": "number", "label": "<?php echo 'Sconto in fattura'; ?>", "name": "sconto_finale", "value": "<?php echo $ordine->sconto_finale_percentuale ?: $ordine->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($ordine->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto in fattura, utilizzabile per applicare sconti sul netto a pagare del documento'); ?>." ]}
</div>
</div>
<?php

View File

@ -138,7 +138,7 @@ function ricalcola_costiagg_ordine($idordine, $idrivalsainps = '', $idritenutaac
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
if ($dir == 'entrata') {
if (!empty($idrivalsainps)) {
$idrivalsainps = setting('Percentuale rivalsa');
$idrivalsainps = setting('Cassa previdenziale predefinita');
}
}
@ -155,7 +155,7 @@ function ricalcola_costiagg_ordine($idordine, $idrivalsainps = '', $idritenutaac
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
if (!empty($idritenutaacconto)) {
if ($dir == 'entrata') {
$idritenutaacconto = setting("Percentuale ritenuta d'acconto");
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
}
}

View File

@ -302,12 +302,12 @@ echo '
<td></td>
</tr>';
// SCONTO FINALE
// SCONTO IN FATTURA
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="6" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'

View File

@ -139,7 +139,7 @@ echo '
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo 'Sconto finale'; ?>", "name": "sconto_finale", "value": "<?php echo $preventivo->sconto_finale_percentuale ?: $preventivo->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($preventivo->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
{[ "type": "number", "label": "<?php echo 'Sconto in fattura'; ?>", "name": "sconto_finale", "value": "<?php echo $preventivo->sconto_finale_percentuale ?: $preventivo->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo empty($preventivo->sconto_finale) ? 'PRC' : 'UNT'; ?>", "help": "<?php echo tr('Sconto in fattura, utilizzabile per applicare sconti sul netto a pagare del documento'); ?>." ]}
</div>
</div>

View File

@ -254,12 +254,12 @@ echo '
<td></td>
</tr>';
// SCONTO FINALE
// SCONTO IN FATTURA
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="6" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'

View File

@ -1447,8 +1447,8 @@ class FatturaElettronica
if (!empty($dichiarazione) && $riga->aliquota->id == $id_iva_dichiarazione) {
$dettaglio[]['AltriDatiGestionali'] = [
'TipoDato' => 'INTENTO',
'RiferimentoNumero' => $dichiarazione->numero_protocollo,
'RiferimentoData' => $dichiarazione->data_emissione,
'RiferimentoTesto' => $dichiarazione->numero_protocollo,
'RiferimentoData' => $dichiarazione->data_protocollo,
];
}

View File

@ -21,6 +21,7 @@ include_once __DIR__.'/../../core.php';
use Modules\DDT\DDT;
use Modules\Ordini\Ordine;
use Modules\Fatture\Fattura;
use Plugins\ImportFE\FatturaElettronica;
use Plugins\ImportFE\Interaction;
@ -138,6 +139,7 @@ switch (filter('op')) {
$fattura_pa = FatturaElettronica::manage($filename);
$id_fattura = $fattura_pa->save($info);
$fattura_pa->delete();
$fattura = Fattura::find($id_fattura);
// Aggiorno la tipologia di anagrafica fornitore
$anagrafica = $database->fetchOne('SELECT idanagrafica FROM co_documenti WHERE co_documenti.id='.prepare($id_fattura));
@ -166,6 +168,11 @@ switch (filter('op')) {
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_fattura);
} elseif (!empty($file)) {
redirect(base_path().'/editor.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_record='.$id_record.'&sequence=1');
flash()->warning(tr('È stata appena creata la fattura numero _NUM_ del _DATA_ (_ANAGRAFICA_)', [
'_NUM_' => $fattura->numero,
'_DATA_' => dateFormat($fattura->data),
'_ANAGRAFICA_' => $fattura->anagrafica->ragione_sociale,
]));
} else {
flash()->info(tr('Tutte le fatture salvate sono state importate!'));
redirect(base_path().'/controller.php?id_module='.$id_module);

View File

@ -67,13 +67,15 @@ function compile(btn) {
$("select[name^=iva]").each(function(){
var aliquota = $(this).closest("tr").find("[id^=aliquota]").text();
if (response.iva[aliquota] !== undefined){
if (response.iva[aliquota] !== undefined && !$(this).val()){
$(this).selectSet(response.iva[aliquota].id);
}
});
$("select[name^=conto]").each(function(){
$(this).selectSetNew(response.conto.id, response.conto.descrizione);
if (!$(this).val()){
$(this).selectSetNew(response.conto.id, response.conto.descrizione);
}
});
},
error: function(data) {

View File

@ -320,8 +320,13 @@ class FatturaOrdinaria extends FatturaElettronica
$fattura->refresh();
// Arrotondamenti differenti nella fattura XML
$totali_righe = array_column($righe, 'PrezzoTotale');
$totale_righe = sum($totali_righe, null, 2);
$dati_riepilogo = $this->getBody()['DatiBeniServizi']['DatiRiepilogo'];
if (!empty($dati_riepilogo['ImponibileImporto'])) {
$totale_righe = $dati_riepilogo['ImponibileImporto'];
} else {
$totali_righe = array_column($righe, 'PrezzoTotale');
$totale_righe = sum($totali_righe, null, 2);
}
$diff = round(abs($totale_righe) - abs($fattura->totale_imponibile), 2);
if (!empty($diff)) {

View File

@ -40,10 +40,10 @@ class Parcella extends FatturaOrdinaria
*
* @return Fattura
*/
public function prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura)
public function prepareFattura($id_tipo, $data, $data_registrazione, $id_sezionale, $ref_fattura)
{
if (empty($ref_fattura)) {
return parent::prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura);
return parent::prepareFattura($id_tipo, $data, $data_registrazione, $id_sezionale, $ref_fattura);
}
$anagrafica = $this->saveAnagrafica();

View File

@ -49,7 +49,7 @@ switch ($operazione) {
'idtipointervento' => post('idtipointervento'),
'richiesta' => post('richiesta'),
'idimpianti' => implode(',', post('idimpianti') ?: []),
'idsede' => implode(',', post('idsede_c') ?: []),
'idsede' => post('idsede_c') ?: 0,
], ['id' => $id_record]);
flash()->info(tr('Promemoria inserito!'));

View File

@ -275,11 +275,11 @@ if ($options['pricing']) {
</tr>';
if ($sconto_finale) {
// SCONTO FINALE
// SCONTO IN FATTURA
echo '
<tr>
<td colspan="3" class="text-right border-top">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<th colspan="2" class="text-right">
<b>'.moneyFormat($sconto_finale, 2).'</b>

View File

@ -87,11 +87,11 @@ if ($options['pricing']) {
</tr>';
if ($sconto_finale) {
// Riga 4 SCONTO FINALE
// Riga 4 SCONTO IN FATTURA
echo "
<tr>
<td>
<p class='small-bold'>".tr('Sconto finale', [], ['upper' => true])."</p>
<p class='small-bold'>".tr('Sconto in fattura', [], ['upper' => true])."</p>
</td>
</tr>

View File

@ -339,8 +339,8 @@ if ($has_split_payment) {
}
/*
* Riga di riepilogo per lo Sconto finale sulla fattura.
* Sconto finale | Totale (+ Rivalsa INPS - Ritenuta - Totale IVA [se split payment] - Sconto finale)
* Riga di riepilogo per lo sconto in fattura.
* Sconto in | Totale (+ Rivalsa INPS - Ritenuta - Totale IVA [se split payment] - Sconto finale)
*/
if ($has_sconto_finale) {
$first_colspan = 1;

View File

@ -301,11 +301,11 @@ if ($options['pricing']) {
</tr>';
if ($sconto_finale) {
// SCONTO FINALE
// SCONTO IN FATTURA
echo '
<tr>
<td colspan="'.$colspan.'" class="text-right border-top">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<th colspan="2" class="text-right">
<b>'.moneyFormat($sconto_finale, 2).'</b>

View File

@ -44,7 +44,7 @@ try {
}
// Ri.Ba: Banca predefinita *del Cliente* piuttosto che dell'Azienda
if ($pagamento->isRiBa()) {
if ($pagamento && $pagamento->isRiBa()) {
$banca = Banca::where('id_anagrafica', $anagrafica->id)
->where('predefined', 1)
->first();
@ -358,11 +358,11 @@ if (($options['pricing'] && !isset($options['hide_total'])) || $options['show_on
</tr>';
if ($sconto_finale) {
// SCONTO FINALE
// SCONTO IN FATTURA
echo '
<tr>
<td colspan="'.($options['show_only_total'] ? 2 : 4).'" class="text-right border-top">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
<b>'.tr('Sconto in fattura', [], ['upper' => true]).':</b>
</td>
<th colspan="'.($options['show_only_total'] ? (($has_images) ? 2 : 1) : (($has_images) ? 3 : 2)).'" class="text-right">
<b>'.moneyFormat($sconto_finale, 2).'</b>

View File

@ -24,6 +24,7 @@ echo '
echo '
<td>'.str_pad($record['idmovimenti'], 8, '0', STR_PAD_LEFT).'</td>
<td>'.$record['numero'].'</td>
<td>'.Translator::datetoLocale($record['data_registrazione']).'</td>
<td>'.$record['numero_esterno'].'</td>
<td>'.Translator::datetoLocale($record['data']).'</td>

View File

@ -27,13 +27,13 @@ $esercizio = $year_start == $year_end ? ' - '.tr('Esercizio _YEAR_', [
]) : '';
if ('entrata' == $dir) {
$titolo = tr('Registro iva vendita dal _START_ al _END_ _SEZIONALE_', [
$titolo = tr('Registro iva vendite dal _START_ al _END_ _SEZIONALE_', [
'_START_' => Translator::dateToLocale($date_start),
'_END_' => Translator::dateToLocale($date_end),
'_SEZIONALE_' => (!empty($sezionale)) ? ' - '.$sezionale : '',
], ['upper' => true]);
} elseif ('uscita' == $dir) {
$titolo = tr('Registro iva acquisto dal _START_ al _END_ _SEZIONALE_', [
$titolo = tr('Registro iva acquisti dal _START_ al _END_ _SEZIONALE_', [
'_START_' => Translator::dateToLocale($date_start),
'_END_' => Translator::dateToLocale($date_end),
'_SEZIONALE_' => (!empty($sezionale)) ? ' - '.$sezionale : '',
@ -48,7 +48,8 @@ echo '<h4><b>'.$titolo.'</b></h4>
<table class="table table-condensed table-striped" border="0">
<thead>
<tr>
<th>'.tr('Prot.').'</th>
<th>'.tr('Movimento').'</th>
<th>'.tr(' Prot.').'</th>
<th>'.tr('Data reg.').'</th>
<th>'.tr('N<sup>o</sup>&nbsp;doc.').'</th>
<th>'.tr('Data doc.').'</th>

View File

@ -22,4 +22,18 @@ INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_preventivi WHERE idstato=(SELECT id FROM co_statipreventivi WHERE descrizione=\"In lavorazione\") AND default_revision=1' WHERE `zz_widgets`.`name` ='Preventivi in lavorazione';
-- Rimosso controllo is_pianificabile widget contratti in scadenza
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(dati.id) AS dato FROM(SELECT id, ((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti, DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti, data_conclusione, ore_preavviso_rinnovo, giorni_preavviso_rinnovo, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND co_contratti.id NOT IN (SELECT idcontratto_prev FROM co_contratti contratti) HAVING (ore_rimanenti < ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) < ABS(giorni_preavviso_rinnovo)) ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(dati.id) AS dato FROM(SELECT id, ((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti, DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti, data_conclusione, ore_preavviso_rinnovo, giorni_preavviso_rinnovo, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND co_contratti.id NOT IN (SELECT idcontratto_prev FROM co_contratti contratti) HAVING (ore_rimanenti < ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) < ABS(giorni_preavviso_rinnovo)) ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
-- Aggiornamento ritenuta contributi in contributi previdenziali
UPDATE `zz_settings` SET `nome` = 'Ritenuta previdenziale predefinita' WHERE `nome` = 'Ritenuta contributi';
UPDATE `zz_modules` SET `name` = 'Ritenute previdenziali', `title` = 'Ritenute previdenziali' WHERE `name` = 'Ritenute contributi';
-- Aggiornamento rivalse in casse previdenziali
UPDATE `zz_settings` SET `nome` = 'Cassa previdenziale predefinita' WHERE `nome` = 'Percentuale rivalsa';
UPDATE `zz_modules` SET `name` = 'Casse previdenziali', `title` = 'Casse previdenziali' WHERE `name` = 'Rivalse';
-- Aggiornamento impostazione predefinita ritenuta d'acconto
UPDATE `zz_settings` SET `nome` = 'Ritenuta d''acconto predefinita' WHERE `nome` = 'Percentuale ritenuta d''acconto';
-- Fix vista tecnici assegnati
UPDATE `zz_views` SET `query` = 'GROUP_CONCAT(DISTINCT(SELECT DISTINCT(ragione_sociale) FROM an_anagrafiche WHERE idanagrafica = in_interventi_tecnici_assegnati.id_tecnico) SEPARATOR \', \')' WHERE `zz_views`.`name` = 'Tecnici assegnati';