This commit is contained in:
MatteoPistorello 2024-07-29 16:49:51 +02:00
commit c89e617fef
16 changed files with 119 additions and 43 deletions

View File

@ -195,3 +195,5 @@ Verificheremo se la pull request soddisferà i requisiti e, una volta approvata,
## Licenza
Questo progetto è tutelato dalla licenza [**GPL 3**](https://github.com/devcode-it/openstamanager/blob/master/LICENSE).
Si richiede che qualsiasi distribuzione del software (o di sue versioni modificate) includa una copia del codice sorgente completo, una menzione adeguata al software originale **OpenSTAManager** e una copia della licenza GPL 3.

View File

@ -118,7 +118,7 @@ if (filter('action') == 'do_update') {
include_once App::filepath('include|custom|', 'top.php');
echo '
<div class="card card-danger card-outline text-center">
<div class="card card-danger card-outline card-center-large text-center">
<div class="card-header">
<h3 class="card-title">'.tr('Aggiornamento in corso!').'</h3>
</div>

View File

@ -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 [

View File

@ -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));
}
}

View File

@ -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,

View File

@ -27,4 +27,3 @@ echo '
</form>
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Confermando, tutte le checklist degli impianti di questa categoria verranno aggiornate. Continuare?\') ){ $(\'#check-impianto\').submit(); }"> <i class="fa fa-refresh"></i> '.tr('Sincronizza checklist impianti').'</button>';

View File

@ -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']);

View File

@ -318,7 +318,6 @@ switch (post('op')) {
flash()->info(tr('Attività duplicate correttamente!'));
break;
case 'delete-bulk':

View File

@ -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[] = [

View File

@ -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();
}

View File

@ -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 '
<table class="table table-bordered">
<tr>
<th class="text-right">'.tr('Totale').'</th>
<th class="text-right" width="20%">'.moneyFormat($totale_dare).'</th>
<th class="text-right" width="20%">'.moneyFormat($totale_avere).'</th>
<th id="totale_dare" class="text-right" width="20%">'.moneyFormat($totale_dare).'</th>
<th id="totale_avere" class="text-right" width="20%">'.moneyFormat($totale_avere).'</th>
</tr>
</table>';
@ -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);

View File

@ -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;
}

View File

@ -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));

View File

@ -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)) {

View File

@ -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'];

View File

@ -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';
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";