Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
c89e617fef
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 [
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>';
|
||||
|
||||
|
|
|
@ -104,7 +104,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();
|
||||
}
|
||||
|
||||
|
|
|
@ -318,7 +318,6 @@ switch (post('op')) {
|
|||
|
||||
flash()->info(tr('Attività duplicate correttamente!'));
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 'delete-bulk':
|
||||
|
|
|
@ -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[] = [
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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'];
|
||||
|
|
|
@ -124,3 +124,7 @@ UPDATE `zz_widgets` SET `more_link` = "if($(\'#th_Tipo input\').val()!= \'Fornit
|
|||
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';
|
||||
|
||||
|
||||
-- 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";
|
Loading…
Reference in New Issue