diff --git a/modules/anagrafiche/src/API/v1/Anagrafiche.php b/modules/anagrafiche/src/API/v1/Anagrafiche.php
index 9d9512e7f..ad4da798f 100755
--- a/modules/anagrafiche/src/API/v1/Anagrafiche.php
+++ b/modules/anagrafiche/src/API/v1/Anagrafiche.php
@@ -30,41 +30,55 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
{
public function retrieve($request)
{
- $table = '`an_anagrafiche`';
+ $table = 'an_anagrafiche';
$select = [
- '`an_anagrafiche`.*',
- '`an_nazioni_lang`.`title` AS nazione',
+ 'an_anagrafiche.*',
+ 'an_nazioni_lang.title AS nazione',
];
$joins[] = [
- 'an_nazioni_lang' => '`an_nazioni_lang`.`id_record` = `an_nazioni`.`id` AND `an_nazioni_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
+ 'an_nazioni',
+ 'an_nazioni.id',
+ 'an_anagrafiche.id_nazione',
];
- $where[] = ['`an_anagrafiche`.`deleted_at`', '=', null];
+ $joins[] = [
+ 'an_nazioni_lang',
+ 'an_nazioni_lang.id_record',
+ 'an_nazioni.id',
+ 'an_nazioni_lang.id_lang',
+ \Models\Locale::getDefault()->id,
+ ];
- $order['`an_anagrafiche`.`ragione_sociale`'] = 'ASC';
+ $where[] = ['an_anagrafiche.deleted_at', '=', null];
+
+ $order['an_anagrafiche.ragione_sociale'] = 'ASC';
if ($request['resource'] != 'anagrafiche') {
$type = 'Cliente';
$joins[] = [
- '`an_tipianagrafiche_anagrafiche`',
- '`an_anagrafiche`.`idanagrafica`',
- '`an_tipianagrafiche_anagrafiche`.`idanagrafica`',
+ 'an_tipianagrafiche_anagrafiche',
+ 'an_anagrafiche.idanagrafica',
+ 'an_tipianagrafiche_anagrafiche.idanagrafica',
];
$joins[] = [
- '`an_tipianagrafiche`',
- '`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`',
- '`an_tipianagrafiche`.`id`',
+ 'an_tipianagrafiche',
+ 'an_tipianagrafiche_anagrafiche.idtipoanagrafica',
+ 'an_tipianagrafiche.id',
];
$joins[] = [
- 'an_tipianagrafiche_lang' => '`an_tipianagrafiche_lang`.`idrecord` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`idlang` = '.\Models\Locale::getDefault()->id,
+ 'an_tipianagrafiche_lang',
+ 'an_tipianagrafiche_lang.id_record',
+ 'an_tipianagrafiche.id',
+ 'an_tipianagrafiche_lang.id_lang',
+ \Models\Locale::getDefault()->id,
+ 'an_tipianagrafiche_lang.title',
+ ''.$type.'',
];
-
- $where[] = ['`an_tipianagrafiche_lang`.`title`', '=', $type];
}
return [
diff --git a/modules/articoli/bulk.php b/modules/articoli/bulk.php
index 4f055eeaa..f617c8235 100755
--- a/modules/articoli/bulk.php
+++ b/modules/articoli/bulk.php
@@ -160,6 +160,7 @@ switch (post('op')) {
if (!empty($elementi)) {
$dbo->query('UPDATE `mg_articoli` SET `deleted_at` = NOW() WHERE `id` = '.prepare($id).Modules::getAdditionalsQuery($id_module));
} else {
+ $dbo->query('DELETE FROM `mg_prezzi_articoli` WHERE `id_articolo` = '.prepare($id));
$dbo->query('DELETE FROM `mg_articoli` WHERE `id` = '.prepare($id).Modules::getAdditionalsQuery($id_module));
}
}
diff --git a/modules/articoli/src/API/v1/Articoli.php b/modules/articoli/src/API/v1/Articoli.php
index ff3628cb2..dc687013d 100755
--- a/modules/articoli/src/API/v1/Articoli.php
+++ b/modules/articoli/src/API/v1/Articoli.php
@@ -33,39 +33,51 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
$table = 'mg_articoli';
$select = [
'mg_articoli.*',
- '`categorie`.`nome` AS categoria',
- '`sottocategorie`.`nome` AS sottocategoria',
+ 'categorie_lang.title AS categoria',
+ 'sottocategorie_lang.title AS sottocategoria',
];
$joins[] = [
- 'mg_articoli_lang' => 'mg_articoli_lang.id_record = mg_articoli.id AND mg_articoli_lang.id_lang = '.\Models\Locale::getDefault()->id,
+ 'mg_articoli_lang',
+ 'mg_articoli_lang.id_record',
+ 'mg_articoli.id',
+ 'mg_articoli_lang.id_lang',
+ \Models\Locale::getDefault()->id,
];
$joins[] = [
- '`mg_categorie` AS categorie',
- '`mg_articoli`.`id_categoria`',
- '`categorie`.`id`',
+ 'mg_categorie AS categorie',
+ 'mg_articoli.id_categoria',
+ 'categorie.id',
];
$joins[] = [
- 'mg_categorie_lang AS categorie_lang' => '`mg_categorie_lang`.`id_record` = `categorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
+ 'mg_categorie_lang AS categorie_lang',
+ 'categorie_lang.id_record',
+ 'categorie.id',
+ 'categorie_lang.id_lang',
+ \Models\Locale::getDefault()->id,
];
$joins[] = [
- '`mg_categorie` AS sottocategorie',
- '`mg_articoli`.`id_sottocategoria`',
- '`sottocategorie`.`id`',
+ 'mg_categorie AS sottocategorie',
+ 'mg_articoli.id_sottocategoria',
+ 'sottocategorie.id',
];
$joins[] = [
- '`mg_categorie_lang` AS sottocategorie_lang' => '`mg_categorie_lang`.`id_record` = `sottocategorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id,
+ 'mg_categorie_lang AS sottocategorie_lang',
+ 'sottocategorie_lang.id_record',
+ 'sottocategorie.id',
+ 'sottocategorie_lang.id_lang',
+ \Models\Locale::getDefault()->id,
];
- $where[] = ['`mg_articoli`.`deleted_at`', '=', null];
+ $where[] = ['mg_articoli.deleted_at', '=', null];
$whereraw = [];
- $order['`mg_articoli`.`id`'] = 'ASC';
+ $order['mg_articoli.id'] = 'ASC';
return [
'table' => $table,
diff --git a/modules/categorie_impianti/buttons.php b/modules/categorie_impianti/buttons.php
index 1fc19b237..dbbcd719b 100644
--- a/modules/categorie_impianti/buttons.php
+++ b/modules/categorie_impianti/buttons.php
@@ -27,4 +27,3 @@ echo '
'.tr('Sincronizza checklist impianti').' ';
-
diff --git a/modules/impianti/src/Import/CSV.php b/modules/impianti/src/Import/CSV.php
index c6833174b..818469a6d 100644
--- a/modules/impianti/src/Import/CSV.php
+++ b/modules/impianti/src/Import/CSV.php
@@ -104,10 +104,10 @@ class CSV extends CSVImporter
if (!empty($record['partita_iva'])) {
$anagrafica = Anagrafica::where('piva', '=', $record['partita_iva'])->first();
- } else if (!empty($record['codice_fiscale'])) {
+ } elseif (!empty($record['codice_fiscale'])) {
$anagrafica = Anagrafica::where('codice_fiscale', '=', $record['codice_fiscale'])->first();
}
-
+
if (!empty($anagrafica)) {
$url = $record['immagine'];
unset($record['immagine']);
diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php
index 63e9cb689..23dc8c931 100755
--- a/modules/interventi/bulk.php
+++ b/modules/interventi/bulk.php
@@ -318,7 +318,6 @@ switch (post('op')) {
flash()->info(tr('Attività duplicate correttamente!'));
-
break;
case 'delete-bulk':
diff --git a/modules/interventi/src/API/v1/Interventi.php b/modules/interventi/src/API/v1/Interventi.php
index ac318b9c9..2495cc972 100755
--- a/modules/interventi/src/API/v1/Interventi.php
+++ b/modules/interventi/src/API/v1/Interventi.php
@@ -41,7 +41,7 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
'in_interventi.*',
'MAX(in_interventi_tecnici.orario_fine) as data',
'GROUP_CONCAT(DISTINCT b.ragione_sociale SEPARATOR \', \') AS tecnici',
- 'in_statiintervento_lang.name AS stato',
+ 'in_statiintervento_lang.title AS stato',
];
$joins[] = [
@@ -51,7 +51,11 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
];
$joins[] = [
- 'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.\Models\Locale::getDefault()->id,
+ 'in_statiintervento_lang',
+ 'in_statiintervento_lang.id_record',
+ 'in_statiintervento.id',
+ 'in_statiintervento_lang.id_lang',
+ \Models\Locale::getDefault()->id,
];
$joins[] = [
diff --git a/modules/interventi/src/Import/CSV.php b/modules/interventi/src/Import/CSV.php
index 5d7c9f9b6..2e069f969 100644
--- a/modules/interventi/src/Import/CSV.php
+++ b/modules/interventi/src/Import/CSV.php
@@ -105,7 +105,7 @@ class CSV extends CSVImporter
if (!empty($record['partita_iva'])) {
$anagrafica = Anagrafica::where('piva', '=', $record['partita_iva'])->first();
- } else if (!empty($record['codice_fiscale'])) {
+ } elseif (!empty($record['codice_fiscale'])) {
$anagrafica = Anagrafica::where('codice_fiscale', '=', $record['codice_fiscale'])->first();
}
diff --git a/modules/primanota/movimenti.php b/modules/primanota/movimenti.php
index dde1378e2..4b604a3af 100755
--- a/modules/primanota/movimenti.php
+++ b/modules/primanota/movimenti.php
@@ -133,6 +133,11 @@ foreach ($scadenze as $id_documento => $righe) {
]);
renderTabella($nome, $righe, $totale_dare, $totale_avere);
+
+ foreach ($righe as $riga) {
+ $totale_dare += $riga['dare'];
+ $totale_avere += $riga['avere'];
+ }
}
// Elenco per scadenze
@@ -146,6 +151,10 @@ foreach ($scadenze as $id_scadenza => $righe) {
]);
renderTabella($nome, $righe, $totale_dare, $totale_avere);
+ foreach ($righe as $riga) {
+ $totale_dare += $riga['dare'];
+ $totale_avere += $riga['avere'];
+ }
}
// Elenco generale
@@ -183,8 +192,8 @@ echo '
'.tr('Totale').'
- '.moneyFormat($totale_dare).'
- '.moneyFormat($totale_avere).'
+ '.moneyFormat($totale_dare).'
+ '.moneyFormat($totale_avere).'
';
@@ -361,6 +370,22 @@ $(document).on("keyup change", "input[id*=avere]", function() {
}
});
+$(document).on("change", "[id*=dare], [id*=avere]", function() {
+ var totalDare = 0;
+ var totalAvere = 0;
+
+ $("[id*=dare]").each(function() {
+ totalDare += parseFloat($(this).val()) || 0;
+ });
+
+ $("[id*=avere]").each(function() {
+ totalAvere += parseFloat($(this).val()) || 0;
+ });
+
+ $("#totale_dare").text(totalDare.toLocale());
+ $("#totale_avere").text(totalAvere.toLocale());
+});
+
function visualizzaMovimenti(button) {
let id_conto = $(button).parent().parent().find("select").val();
openModal("'.tr('Ultimi 25 movimenti').'", "'.$module->fileurl('dettagli.php').'?id_module=" + globals.id_module + "&id_conto=" + id_conto);
diff --git a/modules/scadenzario/bulk.php b/modules/scadenzario/bulk.php
index d50355409..54e0349ef 100755
--- a/modules/scadenzario/bulk.php
+++ b/modules/scadenzario/bulk.php
@@ -172,6 +172,13 @@ switch (post('op')) {
]));
}
+ // Se non sono stati inviati alcuni i solleciti, mostro un messaggio di avviso
+ if (!empty(array_diff($id_records, $list))) {
+ flash()->warning(tr('_NUM_ solleciti non sono stati inviati.', [
+ '_NUM_' => sizeof(array_diff($id_records, $list)),
+ ]));
+ }
+
break;
}
diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php
index f947ee4ab..39adc4f8b 100755
--- a/plugins/importFE/src/FatturaOrdinaria.php
+++ b/plugins/importFE/src/FatturaOrdinaria.php
@@ -533,7 +533,7 @@ class FatturaOrdinaria extends FatturaElettronica
$percentuale = $m[3];
$totale_previsto = round($importo / $percentuale * 100, 2);
- $percentuale_importo = round($totale_previsto / $totale * 100, 2);
+ $percentuale_importo = round($totale_previsto / ($totale ?: 1) * 100, 2);
$ritenuta_contributi = $database->fetchOne('SELECT * FROM`co_ritenuta_contributi` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
if (empty($ritenuta_contributi)) {
@@ -634,7 +634,7 @@ class FatturaOrdinaria extends FatturaElettronica
}
$totale_previsto = round($importo * 100 / $percentuale, 2);
- $percentuale_importo = round($totale_previsto / $totale * 100, 2);
+ $percentuale_importo = round($totale_previsto / ($totale ?: 1) * 100, 2);
$percentuale_importo = min($percentuale_importo, 100); // Nota: Fix per la percentuale che superava il 100% nel caso di importi con Rivalsa compresa
$ritenuta_acconto = $database->fetchOne('SELECT * FROM `co_ritenutaacconto` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
diff --git a/src/API/Manager.php b/src/API/Manager.php
index 34d04847d..34780c3e2 100755
--- a/src/API/Manager.php
+++ b/src/API/Manager.php
@@ -180,7 +180,16 @@ class Manager
}
foreach ($joins as $join) {
- $query->leftJoin($join[0], $join[1], $join[2]);
+ if (count($join) >= 3) {
+ $query->leftJoin($join[0], function ($joinClause) use ($join) {
+ $joinClause->on($join[1], $join[2]);
+
+ // Aggiungi condizioni aggiuntive se ci sono abbastanza elementi in $join
+ if (isset($join[3])) {
+ $joinClause->whereRaw($join[3].' = ?', [$join[4]]);
+ }
+ });
+ }
}
if (!empty($where)) {
diff --git a/templates/registro_iva/init.php b/templates/registro_iva/init.php
index 053866dce..3cb785561 100755
--- a/templates/registro_iva/init.php
+++ b/templates/registro_iva/init.php
@@ -20,7 +20,7 @@
include_once __DIR__.'/../../core.php';
use Models\Module;
-$dir = $_GET['dir'];
+$dir = filter('dir');
$id_sezionale = filter('id_sezionale');
$sezionale = $dbo->fetchOne('SELECT `zz_segments_lang`.`title` 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 `zz_segments`.`id` = '.$id_sezionale)['name'];
diff --git a/update/2_5_3.sql b/update/2_5_3.sql
index d91f629cf..57a38a691 100644
--- a/update/2_5_3.sql
+++ b/update/2_5_3.sql
@@ -123,4 +123,8 @@ UPDATE `zz_widgets` SET `more_link` = "if($(\'#th_Tipo input\').val()!= \'Tecnic
UPDATE `zz_widgets` SET `more_link` = "if($(\'#th_Tipo input\').val()!= \'Fornitore\'){ $(\'#th_Tipo input\').val(\'Fornitore\').trigger(\'keyup\');} else { $(\'#th_Tipo input\').val(\'\').trigger(\'keyup\');}" WHERE `zz_widgets`.`name` = 'Numero di fornitori';
UPDATE `zz_widgets` SET `more_link` = "if($(\'#th_Tipo input\').val()!= \'Agente\'){ $(\'#th_Tipo input\').val(\'Agente\').trigger(\'keyup\');} else { $(\'#th_Tipo input\').val(\'\').trigger(\'keyup\');}" WHERE `zz_widgets`.`name` = 'Numero di agenti';
UPDATE `zz_widgets` SET `more_link` = "if($(\'#th_Tipo input\').val()!= \'Vettore\'){ $(\'#th_Tipo input\').val(\'Vettore\').trigger(\'keyup\');} else { $(\'#th_Tipo input\').val(\'\').trigger(\'keyup\');}" WHERE `zz_widgets`.`name` = 'Numero di vettori';
-UPDATE `zz_widgets` SET `more_link` = "$(\'#th_Tipo input\').val(\'\').trigger(\'keyup\');" WHERE `zz_widgets`.`name` = 'Tutte le anagrafiche';
\ No newline at end of file
+UPDATE `zz_widgets` SET `more_link` = "$(\'#th_Tipo input\').val(\'\').trigger(\'keyup\');" WHERE `zz_widgets`.`name` = 'Tutte le anagrafiche';
+
+
+-- Spostata impostazione Stato dell'attività alla chiusura (utilizzata solo da APP)
+UPDATE `zz_settings` SET `sezione` = 'Applicazione' WHERE `zz_settings`.`nome` = "Stato dell\'attività alla chiusura";
\ No newline at end of file