Compare commits

...

6 Commits

Author SHA1 Message Date
valentina 1cf3dfea34 Fix Dati cliente/fornitore in documenti 2024-08-27 14:12:30 +02:00
valentina 499e60f525 Fix riferimenti documenti ad Attività 2024-08-27 12:36:50 +02:00
valentina 87cbcab687 Fix aggiunta filtri modulo in Viste 2024-08-27 11:08:11 +02:00
valentina e26ded65b0 Aggiornamento CHANGELOG 2024-08-27 09:32:44 +02:00
valentina 27786fe6d4 Fix per php8.3 2024-08-27 09:23:08 +02:00
valentina c2fe1ee872 Formattazione stile codice 2024-08-27 09:20:20 +02:00
54 changed files with 231 additions and 235 deletions

View File

@ -4,7 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
- [2.5.4 ())](#254-) - [2.5.4 (2024-08-28))](#254-2024-08-28)
- [2.5.3 (2024-08-07)](#253-2024-08-07) - [2.5.3 (2024-08-07)](#253-2024-08-07)
- [2.5.2 (2024-05-31)](#252-2024-05-31) - [2.5.2 (2024-05-31)](#252-2024-05-31)
- [2.5.1 (2024-04-24)](#251-2024-04-24) - [2.5.1 (2024-04-24)](#251-2024-04-24)
@ -72,11 +72,27 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
## 2.5.4 ## 2.5.4
### Aggiunto (Added) ### Aggiunto (Added)
- Aggiunta l'unità di misura nel campo Peso nei DDT
- Aggiunte le API dei DDT
- Aggiunta colonna Agente in Ordini cliente
### Modificato (Changed) ### Modificato (Changed)
- Migliorata la gestione delle stampe contabili vuote
- Rimossa la restrizione allo storico degli ultimi 3 anni
- Migliorate le API degli interventi
- Migliorata la mappa degli interventi
### Fixed ### Fixed
- Corretti i controlli sul gestionale
- Corretto il filtro stato interventi in mappa
- Corretta la registrazione contabile della fattura al cambio di anagrafica
- Corretto il widget Contratti in scadenza
- Corretta l'eliminazione della sede in Anagrafiche
- Corretta la modifica della descrizione di una riga articolo inserita in un contratto, ddt, attività, ordine e preventivo. - Corretta la modifica della descrizione di una riga articolo inserita in un contratto, ddt, attività, ordine e preventivo.
- Corretto il riferimento normativo in fattura
- Corretta la ricerca globale
- Corretta la gestione dei widgets
- Corretto il caricamento dell'immagine utente
## 2.5.3 (2024-08-07) ## 2.5.3 (2024-08-07)
### Aggiunto (Added) ### Aggiunto (Added)

View File

@ -4,12 +4,19 @@ Le problematiche saranno raggruppate per release e le relative correzioni (se ap
#### 2.5.3 - 07/08/2024 #### 2.5.3 - 07/08/2024
##### Problemi noti ##### Problemi noti
Non è possibile modificare la descrizione di una riga articolo inserita in un contratto, ddt, attività, ordine e preventivo. - Non è possibile modificare la descrizione di una riga articolo inserita in un contratto, ddt, attività, ordine e preventivo.
##### Soluzione ##### Soluzione
https://github.com/devcode-it/openstamanager/commit/b82efb339f8df5da4f2279e25d72904778d2a8d3 https://github.com/devcode-it/openstamanager/commit/b82efb339f8df5da4f2279e25d72904778d2a8d3
- La ricerca globale non funziona.
##### Soluzione
https://github.com/devcode-it/openstamanager/commit/5c86d3b7489431b2e8001841b07769cd26e4c24c
Per applicare le modifiche è necessario ricompilare gli assets
#### 2.4.54 - 03/02/2024 #### 2.4.54 - 03/02/2024
##### Problemi noti ##### Problemi noti

View File

@ -534,7 +534,7 @@ if (Auth::check()) {
} }
if (!empty($opt)) { if (!empty($opt)) {
$q = str_replace('|id_parent|', ($id_record?:$id_parent), $opt['main_query'][0]['query']); $q = str_replace('|id_parent|', $id_record ?: $id_parent, $opt['main_query'][0]['query']);
$count = $dbo->fetchNum($q); $count = $dbo->fetchNum($q);
} }

View File

@ -74,7 +74,7 @@ class PianoConti extends Controllo
$fornitore = in_array('Fornitore', $tipi); $fornitore = in_array('Fornitore', $tipi);
$is_esistente = 0; $is_esistente = 0;
$descrizione = 0; $descrizione = 0;
if ($cliente || $fornitore) { if ($cliente || $fornitore) {
$is_esistente = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE id = '.$anagrafica['idconto_cliente'].' OR id = '.$anagrafica['idconto_fornitore']); $is_esistente = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE id = '.$anagrafica['idconto_cliente'].' OR id = '.$anagrafica['idconto_fornitore']);
$descrizione = null; $descrizione = null;
@ -85,7 +85,7 @@ class PianoConti extends Controllo
$descrizione = tr("L'anagrafica corrente non ha impostati il conto Cliente relativo al Piano dei Conti"); $descrizione = tr("L'anagrafica corrente non ha impostati il conto Cliente relativo al Piano dei Conti");
} elseif ($fornitore && (empty($anagrafica['idconto_fornitore'])) || !$is_esistente) { } elseif ($fornitore && (empty($anagrafica['idconto_fornitore'])) || !$is_esistente) {
$descrizione = tr("L'anagrafica corrente non ha impostati il conto Fornitore relativo al Piano dei Conti"); $descrizione = tr("L'anagrafica corrente non ha impostati il conto Fornitore relativo al Piano dei Conti");
} }
} }
if (!empty($descrizione)) { if (!empty($descrizione)) {

View File

@ -36,7 +36,7 @@ switch (post('op')) {
// Se l'anagrafica non è di tipo Azienda // Se l'anagrafica non è di tipo Azienda
if (!in_array($id_tipo_azienda, $tipi)) { if (!in_array($id_tipo_azienda, $tipi)) {
$dbo->query('UPDATE `an_anagrafiche` SET `deleted_at` = NOW() WHERE `idanagrafica` = '.prepare($id).Modules::getAdditionalsQuery($id_module)); $dbo->query('UPDATE `an_anagrafiche` SET `deleted_at` = NOW() WHERE `idanagrafica` = '.prepare($id).Modules::getAdditionalsQuery($id_module));
++ $eliminate; ++$eliminate;
} }
} }
@ -60,6 +60,7 @@ switch (post('op')) {
if (!function_exists('curl_init')) { if (!function_exists('curl_init')) {
// cURL non è attivo // cURL non è attivo
flash()->error(tr('cURL non attivo, impossibile continuare l\'operazione.')); flash()->error(tr('cURL non attivo, impossibile continuare l\'operazione.'));
return false; return false;
} else { } else {
$ch = curl_init(); $ch = curl_init();

View File

@ -749,7 +749,7 @@ UNION
SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt_lang`.`title` AS tipo_documento, `dt_tipiddt`.`dir`, NULL AS `deleted_at` FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt`.`id` = `dt_tipiddt_lang`.`id_record` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dt_ddt`.`idanagrafica` = '.prepare($id_record).' SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt_lang`.`title` AS tipo_documento, `dt_tipiddt`.`dir`, NULL AS `deleted_at` FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` LEFT JOIN `dt_tipiddt_lang` ON (`dt_tipiddt`.`id` = `dt_tipiddt_lang`.`id_record` AND `dt_tipiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dt_ddt`.`idanagrafica` = '.prepare($id_record).'
UNION UNION
SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice` AS numero, 0 AS numero_esterno, "Intervento" AS tipo_documento, 0 AS dir, in_interventi.deleted_at AS `deleted_at` FROM `in_interventi` LEFT JOIN `in_interventi_tecnici` ON `in_interventi`.`id` = `in_interventi_tecnici`.`idintervento` WHERE `in_interventi`.`id` IN (SELECT `idintervento` FROM `in_interventi_tecnici` WHERE `idtecnico` = '.prepare($id_record).') OR `in_interventi`.`idanagrafica` = '.prepare($id_record).' SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice` AS numero, 0 AS numero_esterno, "Attività" AS tipo_documento, 0 AS dir, in_interventi.deleted_at AS `deleted_at` FROM `in_interventi` LEFT JOIN `in_interventi_tecnici` ON `in_interventi`.`id` = `in_interventi_tecnici`.`idintervento` WHERE `in_interventi`.`id` IN (SELECT `idintervento` FROM `in_interventi_tecnici` WHERE `idtecnico` = '.prepare($id_record).') OR `in_interventi`.`idanagrafica` = '.prepare($id_record).'
UNION 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`.`idanagrafica` = '.prepare($id_record).' 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`.`idanagrafica` = '.prepare($id_record).'

View File

@ -78,7 +78,7 @@ switch (post('op')) {
$new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100); $new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100);
} }
$new_prezzo_vendita = ceil($new_prezzo_vendita / ($arrotondamento?:1)) * $arrotondamento; $new_prezzo_vendita = ceil($new_prezzo_vendita / ($arrotondamento ?: 1)) * $arrotondamento;
} }
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) { if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {

View File

@ -120,9 +120,9 @@ if (!empty($movimenti)) {
} else { } else {
$movimento['progressivo_finale'] = $movimenti[$i - 1]['progressivo_iniziale']; $movimento['progressivo_finale'] = $movimenti[$i - 1]['progressivo_iniziale'];
} }
$movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta; $movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta;
$movimenti[$i]['progressivo_iniziale'] = $movimento['progressivo_iniziale']; $movimenti[$i]['progressivo_iniziale'] = $movimento['progressivo_iniziale'];
$movimenti[$i]['progressivo_finale'] = $movimento['progressivo_finale']; $movimenti[$i]['progressivo_finale'] = $movimento['progressivo_finale'];
@ -130,9 +130,9 @@ if (!empty($movimenti)) {
echo ' echo '
<tr> <tr>
<td class="text-center"> <td class="text-center">
'.count($movimenti)-($i). ' '.count($movimenti) - $i.'
</td> </td>
<td class="text-center" style="color: ' . ($movimento->qta < 0 ? 'red' : 'green') . ';"> <td class="text-center" style="color: '.($movimento->qta < 0 ? 'red' : 'green').';">
'.numberFormat($movimento->qta, 'qta').' '.$record['um'].' '.numberFormat($movimento->qta, 'qta').' '.$record['um'].'
</td> </td>

View File

@ -42,12 +42,12 @@ echo '
</div> </div>
<!-- DATI INTESTAZIONE --> <!-- DATI INTESTAZIONE -->
<div class="card card-primary collapsable '.(empty($espandi_dettagli) ? 'collapsed-card' : '').'"> <div class="card card-primary collapsable">
<div class="card-header with-border"> <div class="card-header with-border">
<h3 class="card-title">'.tr('Dati cliente').'</h3> <h3 class="card-title">'.tr('Dati cliente').'</h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-'.(empty($espandi_dettagli) ? 'plus' : 'minus').'"></i> <i class="fa fa-minus"></i>
</button> </button>
</div> </div>
</div> </div>

View File

@ -149,7 +149,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
if ($righe_ev->count() > 0) { if ($righe_ev->count() > 0) {
$perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta?:1); $perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta ?: 1);
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';
} }

View File

@ -30,7 +30,6 @@ use Modules\DDT\DDT;
use Modules\DDT\Stato; use Modules\DDT\Stato;
use Modules\DDT\Tipo; use Modules\DDT\Tipo;
use Modules\Iva\Aliquota; use Modules\Iva\Aliquota;
use Modules\Ordini\Stato as StatoOrdine;
$module = Module::find($id_module); $module = Module::find($id_module);

View File

@ -124,12 +124,12 @@ echo '
</div> </div>
<!-- DATI INTESTAZIONE --> <!-- DATI INTESTAZIONE -->
<div class="card card-primary collapsable '.(empty($espandi_dettagli) ? 'collapsed-card' : '').'"> <div class="card card-primary collapsable">
<div class="card-header with-border"> <div class="card-header with-border">
<h3 class="card-title">'.tr('Dati cliente').'</h3> <h3 class="card-title">'.($dir == 'entrata' ? tr('Dati cliente') : tr('Dati fornitore')).'</h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-'.(empty($espandi_dettagli) ? 'plus' : 'minus').'"></i> <i class="fa fa-minus"></i>
</button> </button>
</div> </div>
</div> </div>

View File

@ -170,7 +170,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
if ($righe_ev->count() > 0) { if ($righe_ev->count() > 0) {
$perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta?:1); $perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta ?: 1);
if ($perc_ev > 0) { if ($perc_ev > 0) {
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';

View File

@ -48,7 +48,7 @@ class DDTS extends Resource implements RetrieveInterface, UpdateInterface, Creat
$joins[] = [ $joins[] = [
'dt_statiddt_lang', 'dt_statiddt_lang',
'dt_statiddt_lang.id_record', 'dt_statiddt_lang.id_record',
'dt_statiddt.id', 'dt_statiddt.id',
]; ];
$where = []; $where = [];

View File

@ -55,35 +55,35 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
public function create($request) public function create($request)
{ {
$data = $request['data']; $data = $request['data'];
$data['qta'] = ($data['qta']>0 ? $data['qta'] : 1); $data['qta'] = ($data['qta'] > 0 ? $data['qta'] : 1);
$originale = ArticoloOriginale::find($data['id_articolo']); $originale = ArticoloOriginale::find($data['id_articolo']);
$ddt = DDT::find($data['id_ddt']); $ddt = DDT::find($data['id_ddt']);
if( !empty($data['is_descrizione']) ){ if (!empty($data['is_descrizione'])) {
$riga = Descrizione::build($ddt); $riga = Descrizione::build($ddt);
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
$riga->qta = 0; $riga->qta = 0;
}elseif(!empty($data['id_articolo']) && !empty($originale)){ } elseif (!empty($data['id_articolo']) && !empty($originale)) {
$riga = Articolo::build($ddt, $originale); $riga = Articolo::build($ddt, $originale);
if( $originale->prezzo_vendita>0 ){ if ($originale->prezzo_vendita > 0) {
$idiva = ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')); $idiva = ($originale->idiva_vendita ?: setting('Iva predefinita'));
$riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva); $riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva);
}else{ } else {
$riga->prezzo_unitario = 0; $riga->prezzo_unitario = 0;
} }
$riga->costo_unitario = $originale->prezzo_acquisto; $riga->costo_unitario = $originale->prezzo_acquisto;
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
$riga->descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione); $riga->descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione);
}else{ } else {
$riga = Riga::build($ddt); $riga = Riga::build($ddt);
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
$riga->costo_unitario = 0; $riga->costo_unitario = 0;
$riga->setPrezzoUnitario(0, setting('Iva predefinita')); $riga->setPrezzoUnitario(0, setting('Iva predefinita'));
} }
$riga->um = $data['um'] ?: null; $riga->um = $data['um'] ?: null;
$riga->save(); $riga->save();
} }
@ -91,7 +91,7 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
public function update($request) public function update($request)
{ {
$data = $request['data']; $data = $request['data'];
$data['qta'] = ($data['qta']>0 ? $data['qta'] : 1); $data['qta'] = ($data['qta'] > 0 ? $data['qta'] : 1);
$originale = ArticoloOriginale::find($data['id_articolo']); $originale = ArticoloOriginale::find($data['id_articolo']);
@ -100,25 +100,25 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
$riga->is_descrizione = 0; $riga->is_descrizione = 0;
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
if( !empty($data['is_descrizione']) ){ if (!empty($data['is_descrizione'])) {
$riga->qta = 0; $riga->qta = 0;
$riga->is_descrizione = 1; $riga->is_descrizione = 1;
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
}elseif(!empty($data['id_articolo']) && !empty($originale)){ } elseif (!empty($data['id_articolo']) && !empty($originale)) {
$descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione); $descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione);
$descrizione = ($descrizione ? $descrizione : '-'); $descrizione = ($descrizione ?: '-');
$riga->descrizione = ($descrizione ? $descrizione : '-'); $riga->descrizione = ($descrizione ?: '-');
$riga->costo_unitario = $originale->prezzo_acquisto; $riga->costo_unitario = $originale->prezzo_acquisto;
$riga->idarticolo = $originale->id; $riga->idarticolo = $originale->id;
$idiva = ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')); $idiva = ($originale->idiva_vendita ?: setting('Iva predefinita'));
$riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva); $riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva);
}else{ } else {
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
$riga->costo_unitario = 0; $riga->costo_unitario = 0;
$riga->setPrezzoUnitario(0, setting('Iva predefinita')); $riga->setPrezzoUnitario(0, setting('Iva predefinita'));
} }
$riga->um = $data['um'] ?: null; $riga->um = $data['um'] ?: null;
$riga->save(); $riga->save();
} }

View File

@ -295,12 +295,12 @@ $query .= ' ORDER BY `title`';
</div> </div>
<!-- DATI INTESTAZIONE --> <!-- DATI INTESTAZIONE -->
<div class="card card-primary collapsable '.(empty($espandi_dettagli) ? 'collapsed-card' : '').'"> <div class="card card-primary collapsable">
<div class="card-header with-border"> <div class="card-header with-border">
<h3 class="card-title">'.($dir == 'entrata' ? tr('Dati cliente') : tr('Dati fornitore')).'</h3> <h3 class="card-title">'.($dir == 'entrata' ? tr('Dati cliente') : tr('Dati fornitore')).'</h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-'.(empty($espandi_dettagli) ? 'plus' : 'minus').'"></i> <i class="fa fa-minus"></i>
</button> </button>
</div> </div>
</div> </div>

View File

@ -631,20 +631,20 @@ function rimuoviRiga(id) {
success: function (response) { success: function (response) {
renderMessages(); renderMessages();
caricaRighe(null);'; caricaRighe(null);';
if(!in_array($fattura->codice_stato_fe, ['RC', 'MC', 'EC01', 'WAIT'])){ if (!in_array($fattura->codice_stato_fe, ['RC', 'MC', 'EC01', 'WAIT'])) {
echo ' echo '
$("#elimina").removeClass("disabled");'; $("#elimina").removeClass("disabled");';
} }
echo ' echo '
}, },
error: function() { error: function() {
renderMessages(); renderMessages();
caricaRighe(null);'; caricaRighe(null);';
if(!in_array($fattura->codice_stato_fe, ['RC', 'MC', 'EC01', 'WAIT'])){ if (!in_array($fattura->codice_stato_fe, ['RC', 'MC', 'EC01', 'WAIT'])) {
echo ' echo '
$("#elimina").removeClass("disabled");'; $("#elimina").removeClass("disabled");';
} }
echo ' echo '
} }
}); });
}).catch(swal.noop); }).catch(swal.noop);

View File

@ -131,7 +131,7 @@ class Fattura extends Document
} else { } else {
$model->idsede_partenza = $id_sede; $model->idsede_partenza = $id_sede;
} }
// Ritenuta contributi predefinita // Ritenuta contributi predefinita
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta previdenziale predefinita') : null; $id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta previdenziale predefinita') : null;
$model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null; $model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null;

View File

@ -143,7 +143,7 @@ if (!empty($record['immagine'])) {
{( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )} {( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )}
<?php <?php
$elementi = $dbo->fetchArray('SELECT `in_interventi`.`id`, `codice` AS numero, `data_richiesta` AS data, "Intervento" AS tipo_documento FROM `in_interventi` INNER JOIN `my_impianti_interventi` ON `in_interventi`.`id`=`my_impianti_interventi`.`idintervento` WHERE `my_impianti_interventi`.`idimpianto` = '.prepare($id_record).' $elementi = $dbo->fetchArray('SELECT `in_interventi`.`id`, `codice` AS numero, `data_richiesta` AS data, "Attività" AS tipo_documento FROM `in_interventi` INNER JOIN `my_impianti_interventi` ON `in_interventi`.`id`=`my_impianti_interventi`.`idintervento` WHERE `my_impianti_interventi`.`idimpianto` = '.prepare($id_record).'
UNION UNION
SELECT `co_contratti`.`id`, `numero` AS numero, `data_bozza` AS data, "Contratto" AS tipo_documento FROM `co_contratti` INNER JOIN `my_impianti_contratti` ON `co_contratti`.`id`=`my_impianti_contratti`.`idcontratto` WHERE `my_impianti_contratti`.`idimpianto` = '.prepare($id_record)); SELECT `co_contratti`.`id`, `numero` AS numero, `data_bozza` AS data, "Contratto" AS tipo_documento FROM `co_contratti` INNER JOIN `my_impianti_contratti` ON `co_contratti`.`id`=`my_impianti_contratti`.`idcontratto` WHERE `my_impianti_contratti`.`idimpianto` = '.prepare($id_record));
$class = ''; $class = '';

View File

@ -785,18 +785,14 @@ switch (post('op')) {
foreach ($tecnici as $tecnico) { foreach ($tecnici as $tecnico) {
$mail_tecnico = $dbo->selectOne('an_anagrafiche', '*', ['idanagrafica' => $tecnico]); $mail_tecnico = $dbo->selectOne('an_anagrafiche', '*', ['idanagrafica' => $tecnico]);
if (!empty($mail_tecnico['email'])) { if (!empty($mail_tecnico['email'])) {
if (!empty($template)) { if (!empty($template)) {
$mail = Mail::build(auth()->getUser(), $template, $id_record); $mail = Mail::build(auth()->getUser(), $template, $id_record);
$mail->addReceiver($mail_tecnico['email']); $mail->addReceiver($mail_tecnico['email']);
$mail->save(); $mail->save();
flash()->info(tr('Notifica al tecnico aggiunta correttamente.')); flash()->info(tr('Notifica al tecnico aggiunta correttamente.'));
} }
} }
} }
} }
} }
} else { } else {

View File

@ -56,7 +56,7 @@ if ($intervento->id_contratto) {
$contratto = Contratto::find($intervento->id_contratto); $contratto = Contratto::find($intervento->id_contratto);
$ore_erogate = $contratto->interventi->sum('ore_totali'); $ore_erogate = $contratto->interventi->sum('ore_totali');
$ore_previste = $contratto->getRighe()->where('um', 'ore')->sum('qta'); $ore_previste = $contratto->getRighe()->where('um', 'ore')->sum('qta');
$perc_ore = $ore_previste != 0 ? ($ore_erogate * 100) / ($ore_previste?:1) : 0; $perc_ore = $ore_previste != 0 ? ($ore_erogate * 100) / ($ore_previste ?: 1) : 0;
if ($perc_ore < 75) { if ($perc_ore < 75) {
$color = 'success'; $color = 'success';
} elseif ($perc_ore <= 100) { } elseif ($perc_ore <= 100) {

View File

@ -195,7 +195,7 @@ if (!function_exists('aggiungi_intervento_in_fattura')) {
$sessione = $gruppo->first(); $sessione = $gruppo->first();
$riga = Riga::build($fattura); $riga = Riga::build($fattura);
foreach ($gruppo as $sessione){ foreach ($gruppo as $sessione) {
$dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); $dateValue = date('d/m/Y', strtotime($sessione->orario_fine));
if (!in_array($dateValue, $date)) { if (!in_array($dateValue, $date)) {
$date[] = $dateValue; $date[] = $dateValue;
@ -245,7 +245,7 @@ if (!function_exists('aggiungi_intervento_in_fattura')) {
$diritto_chiamata = $gruppo->first(); $diritto_chiamata = $gruppo->first();
$riga = Riga::build($fattura); $riga = Riga::build($fattura);
foreach ($gruppo as $sessione){ foreach ($gruppo as $sessione) {
$dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); $dateValue = date('d/m/Y', strtotime($sessione->orario_fine));
if (!in_array($dateValue, $date)) { if (!in_array($dateValue, $date)) {
$date[] = $dateValue; $date[] = $dateValue;
@ -285,8 +285,8 @@ if (!function_exists('aggiungi_intervento_in_fattura')) {
if ($qta_trasferta == 0) { if ($qta_trasferta == 0) {
continue; continue;
} }
foreach ($gruppo as $sessione){ foreach ($gruppo as $sessione) {
$dateValue = date('d/m/Y', strtotime($sessione->orario_fine)); $dateValue = date('d/m/Y', strtotime($sessione->orario_fine));
if (!in_array($dateValue, $date)) { if (!in_array($dateValue, $date)) {
$date[] = $dateValue; $date[] = $dateValue;

View File

@ -19,92 +19,88 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
if(get('op')=='getmappa'){ if (get('op') == 'getmappa') {
$nome = 'Ricarica mappa'; $nome = 'Ricarica mappa';
} else {
$nome = 'Visualizza mappa';
}
echo "<center><a onclick=\"location.href='".$rootdir.'/controller.php?id_module='.$id_module."&op=getmappa&r='+Math.random()+'#tab_".Plugins::get('Mostra su mappa')['id']."';\" id='button' class='btn btn-primary btn-lg btn-large'>".$nome.'</a></center>';
echo '<br>';
if (get('op') == 'getmappa') {
$current_module = Modules::get($id_module);
$total = Util\Query::readQuery($current_module);
$module_query = Modules::replaceAdditionals($id_module, $total['query']);
$search_filters = [];
if (is_array($_SESSION['module_'.$id_module])) {
foreach ($_SESSION['module_'.$id_module] as $field_name => $field_value) {
if ($field_value != '' && $field_name != 'selected' && $field_name != 'id_segment') {
$field_name = str_replace('search_', '', $field_name);
$field_name = str_replace('__', ' ', $field_name);
$field_name = str_replace('-', ' ', $field_name);
array_push($search_filters, '`'.$field_name.'` LIKE "%'.$field_value.'%"');
}
}
} }
else{ if (sizeof($search_filters) > 0) {
$nome = 'Visualizza mappa'; $module_query = str_replace('2=2', '2=2 AND ('.implode(' AND ', $search_filters).') ', $module_query);
} }
echo "<center><a onclick=\"location.href='".$rootdir."/controller.php?id_module=".$id_module."&op=getmappa&r='+Math.random()+'#tab_".Plugins::get('Mostra su mappa')['id']."';\" id='button' class='btn btn-primary btn-lg btn-large'>".$nome."</a></center>"; $rs1 = $dbo->fetchArray($module_query);
echo "<br>";
// marker svg
if (!file_exists($docroot.'/assets/dist/img/leaflet/place-marker.svg')) {
throw new Exception('File not found: '.$docroot.'/assets/dist/img/leaflet/place-marker.svg');
}
if(get('op')=='getmappa'){ $svgContent = file_get_contents($docroot.'/assets/dist/img/leaflet/place-marker.svg');
$current_module = Modules::get($id_module); if ($svgContent === false) {
$total = Util\Query::readQuery($current_module); throw new Exception('Error reading file: '.$docroot.'/assets/dist/img/leaflet/place-marker.svg');
$module_query = Modules::replaceAdditionals($id_module, $total['query']); }
$stringa_descrizioni = '';
$search_filters = array(); $stringa_content = '';
$color = '';
if( is_array( $_SESSION['module_'.$id_module] ) ){ $lat = '';
foreach( $_SESSION['module_'.$id_module] as $field_name => $field_value ){ $lng = '';
if( $field_value != '' && $field_name != 'selected' && $field_name != 'id_segment'){ for ($i = 0; $i < sizeof($rs1); ++$i) {// elenco delle righe
$field_name = str_replace( "search_", "", $field_name ); $val = html_entity_decode((string) $rs1[$i]['idanagrafica']);
$field_name = str_replace( "__", " ", $field_name ); $id_sede = $dbo->selectOne('in_interventi', '*', ['id' => $rs1[$i]['id']])['idsede_destinazione'];
$field_name = str_replace( "-", " ", $field_name ); if ($id_sede) {
array_push( $search_filters, "`".$field_name."` LIKE \"%".$field_value."%\"" ); $query = "SELECT *, nomesede AS ragione_sociale FROM an_sedi WHERE id='".$id_sede."'";
} $rs = $dbo->fetchArray($query);
} } else {
} $query = "SELECT *, ragione_sociale FROM an_anagrafiche WHERE idanagrafica='".$val."'";
if( sizeof($search_filters) > 0 ){ $rs = $dbo->fetchArray($query);
$module_query = str_replace( "2=2", "2=2 AND (".implode( " AND ", $search_filters ).") ", $module_query);
} }
$rs1 = $dbo->fetchArray( $module_query ); if ($rs[0]['lat'] && $rs[0]['lng']) {
$color .= "'".$rs1[$i]['_bg_']."',";
$lat .= "'".$rs[0]['lat']."',";
$lng .= "'".$rs[0]['lng']."',";
$stringa_descrizioni .= "'".str_replace("'", ' ', $rs[0]['ragione_sociale'])."',";
//marker svg $stringa_content .= "'";
if (!file_exists($docroot.'/assets/dist/img/leaflet/place-marker.svg')) {
throw new Exception("File not found: " . $docroot.'/assets/dist/img/leaflet/place-marker.svg'); $stringa_content .= str_replace("'", '', '<big><b>'.$rs[0]['ragione_sociale'].'</b></big><br>'.$rs[0]['indirizzo'].', '.$rs[0]['cap'].', '.$rs[0]['citta'].' ('.$rs[0]['provincia'].')'.($rs[0]['telefono'] != '' ? '<br><i class="fa fa-phone"></i> &nbsp;'.$rs[0]['telefono'] : '').($rs[0]['email'] != '' ? '<br><i class="fa fa-envelope"></i> &nbsp;'.$rs[0]['email'] : '').'<br>');
}
$altri_interventi = $dbo->fetchArray('SELECT * FROM in_interventi WHERE idsede_destinazione='.prepare($id_sede).' AND idanagrafica='.prepare($val).' AND id IN ('.implode(',', array_column($rs1, 'id')).')');
$svgContent = file_get_contents($docroot.'/assets/dist/img/leaflet/place-marker.svg'); for ($j = 0; $j < sizeof($altri_interventi); ++$j) {
if ($svgContent === false) { $stringa_content .= str_replace("'", '', '<br> <a href="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$altri_interventi[$j]['id'].'">Intervento numero: '.$altri_interventi[$j]['codice'].' del '.date('d/m/Y', strtotime((string) $altri_interventi[$j]['data_richiesta'])).'</a>');
throw new Exception("Error reading file: " . $docroot.'/assets/dist/img/leaflet/place-marker.svg');
}
$stringa_descrizioni = "";
$stringa_content = "";
$color = "";
$lat = "";
$lng = "";
for( $i=0; $i<sizeof($rs1); $i++ ){//elenco delle righe
$val = html_entity_decode( $rs1[$i]['idanagrafica'] );
$id_sede = $dbo->selectOne('in_interventi', '*', ['id' => $rs1[$i]['id']])['idsede_destinazione'];
if($id_sede){
$query = "SELECT *, nomesede AS ragione_sociale FROM an_sedi WHERE id='".$id_sede."'";
$rs=$dbo->fetchArray($query);
}else{
$query="SELECT *, ragione_sociale FROM an_anagrafiche WHERE idanagrafica='".$val."'";
$rs=$dbo->fetchArray($query);
}
if($rs[0]['lat'] && $rs[0]['lng']){
$color .= "'".$rs1[$i]['_bg_']."',";
$lat .= "'".$rs[0]['lat']."',";
$lng .= "'".$rs[0]['lng']."',";
$stringa_descrizioni .= "'".str_replace("'", " ", $rs[0]['ragione_sociale'])."',";
$stringa_content .= "'";
$stringa_content .= str_replace("'", "", "<big><b>".$rs[0]['ragione_sociale']."</b></big><br>".$rs[0]['indirizzo'].", ".$rs[0]['cap'].", ".$rs[0]['citta']." (".$rs[0]['provincia'].")".($rs[0]['telefono']!=''? "<br><i class=\"fa fa-phone\"></i> &nbsp;".$rs[0]['telefono'] : "").($rs[0]['email']!=''? "<br><i class=\"fa fa-envelope\"></i> &nbsp;".$rs[0]['email'] : "")."<br>");
$altri_interventi = $dbo->fetchArray('SELECT * FROM in_interventi WHERE idsede_destinazione='.prepare($id_sede).' AND idanagrafica='.prepare($val).' AND id IN ('.implode(',', array_column($rs1, 'id')).')');
for($j=0;$j<sizeof($altri_interventi);$j++){
$stringa_content .= str_replace("'", "", "<br> <a href=\"".$rootdir."/editor.php?id_module=".$id_module."&id_record=".$altri_interventi[$j]['id']."\">Intervento numero: ".$altri_interventi[$j]['codice']." del ".date('d/m/Y', strtotime($altri_interventi[$j]['data_richiesta']))."</a>");
}
$stringa_content .= "',";
} }
$stringa_content .= "',";
} }
}
echo "<div id='mappa'></div>"; echo "<div id='mappa'></div>";
$stringa_descrizioni = substr($stringa_descrizioni,0,-1); $stringa_descrizioni = substr($stringa_descrizioni, 0, -1);
$stringa_content = substr($stringa_content,0,-1); $stringa_content = substr($stringa_content, 0, -1);
$lat = substr($lat,0,-1); $lat = substr($lat, 0, -1);
$lng = substr($lng,0,-1); $lng = substr($lng, 0, -1);
?> ?>
<link rel="stylesheet" href="<?php echo $rootdir; ?>/modules/mappa/css/app.css"> <link rel="stylesheet" href="<?php echo $rootdir; ?>/modules/mappa/css/app.css">
@ -122,7 +118,7 @@ include_once __DIR__.'/../../core.php';
var color = [<?php echo $color; ?>]; var color = [<?php echo $color; ?>];
var descrizioni = [<?php echo $stringa_descrizioni; ?>]; var descrizioni = [<?php echo $stringa_descrizioni; ?>];
var content = [<?php echo $stringa_content; ?>]; var content = [<?php echo $stringa_content; ?>];
var svgContent = `<?php echo $svgContent;?>`; var svgContent = `<?php echo $svgContent; ?>`;
const lt = "41.706"; const lt = "41.706";
const ln = "13.228"; const ln = "13.228";
var container = L.DomUtil.get("mappa"); var container = L.DomUtil.get("mappa");
@ -182,4 +178,4 @@ include_once __DIR__.'/../../core.php';
</script> </script>
<?php <?php
} }

View File

@ -24,8 +24,8 @@ use API\Interfaces\RetrieveInterface;
use API\Resource; use API\Resource;
use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Interventi\Components\Articolo; use Modules\Interventi\Components\Articolo;
use Modules\Interventi\Components\Riga;
use Modules\Interventi\Components\Descrizione; use Modules\Interventi\Components\Descrizione;
use Modules\Interventi\Components\Riga;
use Modules\Interventi\Intervento; use Modules\Interventi\Intervento;
class Righe extends Resource implements RetrieveInterface, CreateInterface class Righe extends Resource implements RetrieveInterface, CreateInterface
@ -55,7 +55,7 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
public function create($request) public function create($request)
{ {
$data = $request['data']; $data = $request['data'];
$data['qta'] = ($data['qta'] ? $data['qta'] : 1); $data['qta'] = ($data['qta'] ?: 1);
$intervento = Intervento::find($data['id_intervento']); $intervento = Intervento::find($data['id_intervento']);
$originale = ArticoloOriginale::find($data['id_articolo']); $originale = ArticoloOriginale::find($data['id_articolo']);
@ -66,23 +66,23 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
$riga->um = $data['um']; $riga->um = $data['um'];
$riga->costo_unitario = $originale->prezzo_acquisto; $riga->costo_unitario = $originale->prezzo_acquisto;
if( $originale->prezzo_vendita>0 ){ if ($originale->prezzo_vendita > 0) {
$idiva = ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')); $idiva = ($originale->idiva_vendita ?: setting('Iva predefinita'));
$riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva); $riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva);
}else{ } else {
$riga->prezzo_unitario = 0; $riga->prezzo_unitario = 0;
} }
} elseif ($data['is_descrizione']) { } elseif ($data['is_descrizione']) {
$riga = Descrizione::build($intervento); $riga = Descrizione::build($intervento);
$riga->qta = 0; $riga->qta = 0;
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
} else { } else {
$riga = Riga::build($intervento); $riga = Riga::build($intervento);
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
$riga->um = $data['um']; $riga->um = $data['um'];
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
$riga->costo_unitario = 0; $riga->costo_unitario = 0;
$riga->setPrezzoUnitario(0, setting('Iva predefinita')); $riga->setPrezzoUnitario(0, setting('Iva predefinita'));
} }
@ -100,29 +100,28 @@ class Righe extends Resource implements RetrieveInterface, CreateInterface
public function update($request) public function update($request)
{ {
$data = $request['data']; $data = $request['data'];
$data['qta'] = ($data['qta'] ? $data['qta'] : 1); $data['qta'] = ($data['qta'] ?: 1);
$originale = ArticoloOriginale::find($data['id_articolo']); $originale = ArticoloOriginale::find($data['id_articolo']);
$riga = Articolo::find($data['id_riga']) ?: Riga::find($data['id_riga']); $riga = Articolo::find($data['id_riga']) ?: Riga::find($data['id_riga']);
$riga->qta = $data['qta']; $riga->qta = $data['qta'];
if(!empty($data['id_articolo']) && !empty($originale)){ if (!empty($data['id_articolo']) && !empty($originale)) {
$descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione); $descrizione = (!empty($data['descrizione']) ? $data['descrizione'] : $originale->descrizione);
$descrizione = ($descrizione ? $descrizione : '-'); $descrizione = ($descrizione ?: '-');
$riga->descrizione = $descrizione; $riga->descrizione = $descrizione;
$riga->idarticolo = $originale->id; $riga->idarticolo = $originale->id;
$riga->costo_unitario = $originale->prezzo_acquisto; $riga->costo_unitario = $originale->prezzo_acquisto;
$idiva = ($originale->idiva_vendita ? $originale->idiva_vendita : setting('Iva predefinita')); $idiva = ($originale->idiva_vendita ?: setting('Iva predefinita'));
$riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva); $riga->setPrezzoUnitario($originale->prezzo_vendita, $idiva);
}else{ } else {
$riga->descrizione = ($data['descrizione'] ? $data['descrizione'] : '-'); $riga->descrizione = ($data['descrizione'] ?: '-');
$riga->costo_unitario = 0; $riga->costo_unitario = 0;
$riga->setPrezzoUnitario(0, setting('Iva predefinita')); $riga->setPrezzoUnitario(0, setting('Iva predefinita'));
} }
$riga->um = $data['um'] ?: null; $riga->um = $data['um'] ?: null;
$riga->save(); $riga->save();
} }
} }

View File

@ -403,7 +403,7 @@ class Sessione extends Model
*/ */
public function getMarginePercentualeAttribute() public function getMarginePercentualeAttribute()
{ {
return (1 - ($this->spesa / ($this->totale_imponibile?:1))) * 100; return (1 - ($this->spesa / ($this->totale_imponibile ?: 1))) * 100;
} }
/** /**
@ -413,7 +413,7 @@ class Sessione extends Model
*/ */
public function getRicaricoPercentualeAttribute() public function getRicaricoPercentualeAttribute()
{ {
return $this->imponibile ? (($this->imponibile / ($this->spesa?:1)) - 1) * 100 : 0; return $this->imponibile ? (($this->imponibile / ($this->spesa ?: 1)) - 1) * 100 : 0;
} }
public function getIvaIndetraibileAttribute() public function getIvaIndetraibileAttribute()

View File

@ -30,7 +30,7 @@ include_once __DIR__.'/../../core.php';
<div id="menu-filtri" class="open-menu"> <div id="menu-filtri" class="open-menu">
<div style='width:100%;height:50px;background-color:#4d4d4d;padding:8px;font-size:25px;color:white;' class='text-center'> <div style='width:100%;height:50px;background-color:#4d4d4d;padding:8px;font-size:25px;color:white;' class='text-center'>
<div class="pull-left"><i class='fa fa-forward clickable' id="menu-filtri-toggle"></i></div> <div class="pull-left"><i class='fa fa-forward clickable' id="menu-filtri-toggle"></i></div>
<b><?php echo tr('Filtri');?></b> <b><?php echo tr('Filtri'); ?></b>
</div> </div>
<div id="lista-filtri" style="padding:20px 40px;height:637px;overflow:auto;"> <div id="lista-filtri" style="padding:20px 40px;height:637px;overflow:auto;">
@ -39,19 +39,19 @@ include_once __DIR__.'/../../core.php';
<div class="col-md-12" id="geocomplete"> <div class="col-md-12" id="geocomplete">
<input type="hidden" name="lat" id="lat" value=""> <input type="hidden" name="lat" id="lat" value="">
<input type="hidden" name="lng" id="lng" value=""> <input type="hidden" name="lng" id="lng" value="">
{[ "type": "text", "label": "<?php echo tr('Indirizzo');?>", "name": "gaddress", "value": "", "extra": "data-geo='formatted_address'", "icon-after":"<button type=\"button\" class=\"btn btn-info\" onclick=\"initGeocomplete();\"><i class=\"fa fa-search\"></i></button>", "icon-before":"<button type=\"button\" class=\"btn btn-info\" onclick=\"getLocation();\"><i class=\"fa fa-map-marker\"></i></button>" ]} {[ "type": "text", "label": "<?php echo tr('Indirizzo'); ?>", "name": "gaddress", "value": "", "extra": "data-geo='formatted_address'", "icon-after":"<button type=\"button\" class=\"btn btn-info\" onclick=\"initGeocomplete();\"><i class=\"fa fa-search\"></i></button>", "icon-before":"<button type=\"button\" class=\"btn btn-info\" onclick=\"getLocation();\"><i class=\"fa fa-map-marker\"></i></button>" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12" id="geocomplete"> <div class="col-md-12" id="geocomplete">
<input type="hidden" name="lat" id="lat" value=""> <input type="hidden" name="lat" id="lat" value="">
<input type="hidden" name="lng" id="lng" value=""> <input type="hidden" name="lng" id="lng" value="">
{[ "type": "number", "label": "<?php echo tr('Nel raggio di');?>", "name": "range", "value": "", "decimals": 0, "icon-after":"m" ]} {[ "type": "number", "label": "<?php echo tr('Nel raggio di'); ?>", "name": "range", "value": "", "decimals": 0, "icon-after":"m" ]}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<label style='font-size:12pt;'><?php echo tr('Geolocalizzazione attività per anagrafica');?></label> <label style='font-size:12pt;'><?php echo tr('Geolocalizzazione attività per anagrafica'); ?></label>
<hr> <hr>
</div> </div>
</div> </div>
@ -64,7 +64,7 @@ include_once __DIR__.'/../../core.php';
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<label style='font-size:12pt;'><?php echo tr('Geolocalizzazione attività per stato');?></label> <label style='font-size:12pt;'><?php echo tr('Geolocalizzazione attività per stato'); ?></label>
<hr> <hr>
</div> </div>
</div> </div>

View File

@ -79,12 +79,12 @@ echo '
</div> </div>
<!-- DATI INTESTAZIONE --> <!-- DATI INTESTAZIONE -->
<div class="card card-primary collapsable '.(empty($espandi_dettagli) ? 'collapsed-card' : '').'"> <div class="card card-primary collapsable">
<div class="card-header with-border"> <div class="card-header with-border">
<h3 class="card-title">'.tr('Dati cliente').'</h3> <h3 class="card-title">'.($dir == 'entrata' ? tr('Dati cliente') : tr('Dati fornitore')).'</h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-'.(empty($espandi_dettagli) ? 'plus' : 'minus').'"></i> <i class="fa fa-minus"></i>
</button> </button>
</div> </div>
</div> </div>

View File

@ -223,7 +223,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
if ($righe_ev->count() > 0) { if ($righe_ev->count() > 0) {
$perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta?:1); $perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta ?: 1);
if ($perc_ev > 0) { if ($perc_ev > 0) {
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';

View File

@ -47,12 +47,12 @@ if (count($preventivo->revisioni) > 1) {
</div> </div>
<?php echo ' <?php echo '
<!-- DATI INTESTAZIONE --> <!-- DATI INTESTAZIONE -->
<div class="card card-primary collapsable '.(empty($espandi_dettagli) ? 'collapsed-card' : '').'"> <div class="card card-primary collapsable">
<div class="card-header with-border"> <div class="card-header with-border">
<h3 class="card-title">'.tr('Dati cliente').'</h3> <h3 class="card-title">'.tr('Dati cliente').'</h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-'.(empty($espandi_dettagli) ? 'plus' : 'minus').'"></i> <i class="fa fa-minus"></i>
</button> </button>
</div> </div>
</div> </div>

View File

@ -179,7 +179,7 @@ foreach ($righe as $key => $riga) {
foreach ($evasione_bar as $table => $color) { foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get(); $righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
if ($righe_ev->count() > 0) { if ($righe_ev->count() > 0) {
$perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta?:1); $perc_ev = $righe_ev->sum('qta') * 100 / ($riga->qta ?: 1);
if ($perc_ev > 0) { if ($perc_ev > 0) {
echo ' echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>'; <div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';

View File

@ -41,7 +41,7 @@ if (sizeof($rs_doc) > 0) {
<div class="col-md-2"> <div class="col-md-2">
<br> <br>
<div class="btn-group"> <div class="btn-group">
<a href="<?php echo base_path(); ?>/editor.php?id_module=<?php echo Module::where('name', 'Fatture di vendita')->first()->id; ?>&id_record=<?php echo $rs_doc[0]['iddocumento']; ?>" class="btn btn-info"><i class="fa fa-chevron-left"></i> <?php echo tr('Vai alla fattura'); ?></a> <a href="<?php echo base_path(); ?>/editor.php?id_module=<?php echo $rs[0]['dir'] == 'uscita' ? Module::where('name', 'Fatture di acquisto')->first()->id : Module::where('name', 'Fatture di vendita')->first()->id; ?>&id_record=<?php echo $rs_doc[0]['iddocumento']; ?>" class="btn btn-info"><i class="fa fa-chevron-left"></i> <?php echo tr('Vai alla fattura'); ?></a>
<a type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span> <span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span> <span class="sr-only">Toggle Dropdown</span>

View File

@ -32,7 +32,7 @@ $scadenza_in_chiusura = 0;
foreach ($scadenze as $scadenza) { foreach ($scadenze as $scadenza) {
$scadenza = (array) $scadenza; $scadenza = (array) $scadenza;
foreach ($mesi_chiusura as $mese) { foreach ($mesi_chiusura as $mese) {
if (date('m', strtotime(($scadenza['data_concordata'] && $scadenza['data_concordata'] != '0000-00-00') ? $scadenza['data_concordata'] : $scadenza['scadenza'])) == str_pad($mese['mese'], 2, '0', STR_PAD_LEFT)) { if (date('m', strtotime(($scadenza['data_concordata'] && $scadenza['data_concordata'] != '0000-00-00') ? $scadenza['data_concordata'] : $scadenza['scadenza'])) == str_pad((string) $mese['mese'], 2, '0', STR_PAD_LEFT)) {
$scadenza_in_chiusura = 1; $scadenza_in_chiusura = 1;
} }
} }

View File

@ -384,11 +384,10 @@ switch (filter('op')) {
$spazio_totale = floatval($informazioni['maxSize']) * (1024 ** 2); $spazio_totale = floatval($informazioni['maxSize']) * (1024 ** 2);
$avviso_spazio = !empty($spazio_totale) && floatval($informazioni['size']) > 0.9 * $spazio_totale; $avviso_spazio = !empty($spazio_totale) && floatval($informazioni['size']) > 0.9 * $spazio_totale;
$history = (array) $informazioni['history']; $history = (array) $informazioni['history'];
// Restrizione storico agli ultimi 3 anni // Restrizione storico agli ultimi 3 anni
//$history = array_slice($history, 0, 3); // $history = array_slice($history, 0, 3);
$max_number = $informazioni['maxNumber']; $max_number = $informazioni['maxNumber'];
$avviso_numero = !empty($max_number) && floatval($history[0]['number']) > 0.9 * $max_number; $avviso_numero = !empty($max_number) && floatval($history[0]['number']) > 0.9 * $max_number;

View File

@ -127,7 +127,7 @@ include_once __DIR__.'/../../core.php';
// Permetto eliminazione tipo intervento solo se questo non è utilizzado da nessun'altra parte nel gestionale // Permetto eliminazione tipo intervento solo se questo non è utilizzado da nessun'altra parte nel gestionale
// UNION SELECT `in_tariffe`.`idtipointervento` FROM `in_tariffe` WHERE `in_tariffe`.`idtipointervento` = '.prepare($id_record).' // UNION SELECT `in_tariffe`.`idtipointervento` FROM `in_tariffe` WHERE `in_tariffe`.`idtipointervento` = '.prepare($id_record).'
// UNION SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).' // UNION SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).'
$elementi = $dbo->fetchArray('SELECT `in_interventi`.`idtipointervento`, id, codice AS numero, data_richiesta AS data, "Intervento" AS tipo_documento FROM `in_interventi` WHERE `in_interventi`.`idtipointervento` = '.prepare($id_record).' $elementi = $dbo->fetchArray('SELECT `in_interventi`.`idtipointervento`, id, codice AS numero, data_richiesta AS data, "Attività" AS tipo_documento FROM `in_interventi` WHERE `in_interventi`.`idtipointervento` = '.prepare($id_record).'
UNION UNION
SELECT `in_interventi_tecnici`.`idtipointervento`, idintervento AS id, codice AS numero, orario_inizio AS data, "Sessione intervento" AS tipo_documento FROM `in_interventi_tecnici` LEFT JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE `in_interventi_tecnici`.`idtipointervento` = '.prepare($id_record).' SELECT `in_interventi_tecnici`.`idtipointervento`, idintervento AS id, codice AS numero, orario_inizio AS data, "Sessione intervento" AS tipo_documento FROM `in_interventi_tecnici` LEFT JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE `in_interventi_tecnici`.`idtipointervento` = '.prepare($id_record).'
UNION UNION

View File

@ -60,7 +60,7 @@ echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede[]", "ajax-source": "sedi_azienda", "multiple": "1", "value":"'.$sedi .'", "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli. L\'impostazione non viene considerata per gli utenti del gruppo \'Amministratori\'.').'" ]} {[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede[]", "ajax-source": "sedi_azienda", "multiple": "1", "value":"'.$sedi.'", "help": "'.tr('Sede Azienda abilitata per la movimentazione degli articoli. L\'impostazione non viene considerata per gli utenti del gruppo \'Amministratori\'.').'" ]}
</div> </div>
</div>'; </div>';

View File

@ -46,7 +46,7 @@ echo '
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-md-3 pull-right"> <div class="col-md-3 pull-right">
{["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.($group->id_module_start ?:0).'" ]} {["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $group->id]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.($group->id_module_start ?: 0).'" ]}
</div> </div>
<div class="col-md-3 pull-right"> <div class="col-md-3 pull-right">
{["type":"select", "label":"'.tr('Tema').'", "name":"theme", "values":"list=\"\": \"'.tr('Predefinito').'\",\"black-light\": \"'.tr('Bianco').'\",\"black\": \"'.tr('Nero').'\",\"red-light\": \"'.tr('Rosso chiaro').'\",\"red\": \"'.tr('Rosso').'\",\"blue-light\": \"'.tr('Blu chiaro').'\",\"blue\": \"'.tr('Blu').'\",\"info-light\": \"'.tr('Azzurro chiaro').'\",\"info\": \"'.tr('Azzurro').'\",\"green-light\": \"'.tr('Verde chiaro').'\",\"green\": \"'.tr('Verde').'\",\"yellow-light\": \"'.tr('Giallo chiaro').'\",\"yellow\": \"'.tr('Giallo').'\",\"purple-light\": \"'.tr('Viola chiaro').'\",\"purple\": \"'.tr('Viola').'\" ", "value":"'.$group->theme.'" ]} {["type":"select", "label":"'.tr('Tema').'", "name":"theme", "values":"list=\"\": \"'.tr('Predefinito').'\",\"black-light\": \"'.tr('Bianco').'\",\"black\": \"'.tr('Nero').'\",\"red-light\": \"'.tr('Rosso chiaro').'\",\"red\": \"'.tr('Rosso').'\",\"blue-light\": \"'.tr('Blu chiaro').'\",\"blue\": \"'.tr('Blu').'\",\"info-light\": \"'.tr('Azzurro chiaro').'\",\"info\": \"'.tr('Azzurro').'\",\"green-light\": \"'.tr('Verde chiaro').'\",\"green\": \"'.tr('Verde').'\",\"yellow-light\": \"'.tr('Giallo chiaro').'\",\"yellow\": \"'.tr('Giallo').'\",\"purple-light\": \"'.tr('Viola chiaro').'\",\"purple\": \"'.tr('Viola').'\" ", "value":"'.$group->theme.'" ]}
@ -185,8 +185,8 @@ echo '
<div class="card card-primary"> <div class="card card-primary">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">'.tr('Permessi del gruppo: _GROUP_', [ <h3 class="card-title">'.tr('Permessi del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'], '_GROUP_' => $record['nome'],
]).'</h3>'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? ' ]).'</h3>'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '
<div class="card-tools"> <div class="card-tools">
<btn type="button" class="btn clickable btn-xs btn-warning float-right ask" data-msg="<small>'.tr('Verranno reimpostati i permessi di default per il gruppo '.$record['nome']).'.</small>" data-class="btn btn-warning" data-button="'.tr('Reimposta permessi').'" data-op="restore_permission">'.tr('Reimposta permessi').'</btn> <btn type="button" class="btn clickable btn-xs btn-warning float-right ask" data-msg="<small>'.tr('Verranno reimpostati i permessi di default per il gruppo '.$record['nome']).'.</small>" data-class="btn btn-warning" data-button="'.tr('Reimposta permessi').'" data-op="restore_permission">'.tr('Reimposta permessi').'</btn>
</div>' : '').' </div>' : '').'

View File

@ -106,6 +106,7 @@ switch (filter('op')) {
if (check_query($query)) { if (check_query($query)) {
$array = [ $array = [
'name' => post('name')[$c],
'idgruppo' => post('gruppo')[$c], 'idgruppo' => post('gruppo')[$c],
'idmodule' => $id_record, 'idmodule' => $id_record,
'clause' => $query, 'clause' => $query,
@ -114,22 +115,15 @@ switch (filter('op')) {
if (!empty(post('id')[$c]) && !empty($query)) { if (!empty(post('id')[$c]) && !empty($query)) {
$id = post('id')[$c]; $id = post('id')[$c];
$clause = Clause::find($id);
$clause->idgruppo = post('gruppo')[$c]; $dbo->update('zz_group_module', $array, ['id' => $id]);
$clause->idmodulo = $id_record; $dbo->update('zz_group_module_lang', ['title' => $array['name']], ['id_record' => $id, 'id_lang' => Models\Locale::getDefault()->id]);
$clause->clause = $query;
$clause->position = !empty(post('position')[$c]) ? 'HVN' : 'WHR';
$clause->setTranslation('title', post('name')[$c]);
$clause->save();
} elseif (!empty($query)) { } elseif (!empty($query)) {
$clause = Clause::build(); $dbo->insert('zz_group_module', $array);
$id_record = $dbo->lastInsertedID(); $dbo->insert('zz_group_module_lang', ['id_record' => $dbo->lastInsertedID(), 'id_lang' => Models\Locale::getDefault()->id, 'title' => $array['name']]);
$clause->idgruppo = post('gruppo')[$c];
$clause->idmodulo = $id_record; $id = $dbo->lastInsertedID();
$clause->clause = $query;
$clause->position = !empty(post('position')[$c]) ? 'HVN' : 'WHR';
$clause->setTranslation('title', post('name')[$c]);
$clause->save();
} }
} else { } else {
$rs = false; $rs = false;

View File

@ -42,7 +42,7 @@ if (!empty($additionals)) {
]).' ]).'
</h3> </h3>
<div class="card-tools pull-right"> <div class="card-tools pull-right">
<button type="button" class="btn btn-tool" data-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fa fa-plus"></i> <i class="fa fa-plus"></i>
</button> </button>
</div>'; </div>';

View File

@ -57,26 +57,26 @@ foreach ($impianti_collegati as $impianto) {
} }
} }
$percentuale_completati = $n_impianti ? round(($impianti_completati * 100) / ($n_impianti?:1)) : 0; $percentuale_completati = $n_impianti ? round(($impianti_completati * 100) / ($n_impianti ?: 1)) : 0;
$percentuale_non_completati = $n_impianti ? round(($impianti_non_completati * 100) / ($n_impianti?:1)) : 0; $percentuale_non_completati = $n_impianti ? round(($impianti_non_completati * 100) / ($n_impianti ?: 1)) : 0;
$percentuale_non_previsti = $n_impianti ? round(($impianti_non_previsti * 100) / ($n_impianti?:1)) : 0; $percentuale_non_previsti = $n_impianti ? round(($impianti_non_previsti * 100) / ($n_impianti ?: 1)) : 0;
echo ' echo '
<div class="row"> <div class="row">
<div class="offset-md-4 col-md-4 text-center"> <div class="offset-md-4 col-md-4 text-center">
<h4>'.strtoupper(tr('Impianti')).': '.$n_impianti. '</h4> <h4>'.strtoupper(tr('Impianti')).': '.$n_impianti.'</h4>
<div class="progress" style="height:2rem;"> <div class="progress" style="height:2rem;">
<div class="progress-bar progress-bar-striped progress-bar-success" role="progressbar" style="width:'.$percentuale_completati.'%"><i class="fa fa-check"></i> <b>'.$impianti_completati.'</b></div> <div class="progress-bar progress-bar-striped progress-bar-success" role="progressbar" style="width:'.$percentuale_completati.'%"><i class="fa fa-check"></i> <b>'.$impianti_completati.'</b></div>
<div class="progress-bar progress-bar-striped progress-bar-danger" role="progressbar" style="width:'.$percentuale_non_completati.'%"><i class="fa fa-clock-o"></i> <b>'.$impianti_non_completati.'</b></div> <div class="progress-bar progress-bar-striped progress-bar-danger" role="progressbar" style="width:'.$percentuale_non_completati.'%"><i class="fa fa-clock-o"></i> <b>'.$impianti_non_completati.'</b></div>
<div class="progress-bar progress-bar-striped progress-bar-warning" role="progressbar" style="width:'.$percentuale_non_previsti.'%"><i class="fa fa-times"></i> <b>'.$impianti_non_previsti. '</b></div> <div class="progress-bar progress-bar-striped progress-bar-warning" role="progressbar" style="width:'.$percentuale_non_previsti.'%"><i class="fa fa-times"></i> <b>'.$impianti_non_previsti.'</b></div>
</div> </div>
</div> </div>
<div class="col-md-1"> <div class="col-md-1">
<button type="button" class="btn btn-default" onclick="caricaImpianti()" style="margin-top: 25px;"> <button type="button" class="btn btn-default" onclick="caricaImpianti()" style="margin-top: 25px;">
<i class="fa fa-refresh"></i> '.tr('Aggiorna'). ' <i class="fa fa-refresh"></i> '.tr('Aggiorna').'
</button> </button>
</div> </div>
</div> </div>

View File

@ -484,7 +484,7 @@ if (!empty($righe)) {
if ($tipo_sconto == '%') { if ($tipo_sconto == '%') {
$sconto_calcolato = calcola_sconto([ $sconto_calcolato = calcola_sconto([
'sconto' => $sconto_riga, 'sconto' => $sconto_riga,
'prezzo' => $sconto_unitario ? $prezzo_unitario - ($tot_sconto_calcolato / ($qta?:1)) : $prezzo_unitario, 'prezzo' => $sconto_unitario ? $prezzo_unitario - ($tot_sconto_calcolato / ($qta ?: 1)) : $prezzo_unitario,
'tipo' => 'PRC', 'tipo' => 'PRC',
'qta' => $qta, 'qta' => $qta,
]); ]);

View File

@ -155,7 +155,7 @@ class FatturaOrdinaria extends FatturaElettronica
$differenza_iva = round((float) $riepilogo['Imposta'] - $totale_imposta[$riepilogo['AliquotaIVA']], 2); $differenza_iva = round((float) $riepilogo['Imposta'] - $totale_imposta[$riepilogo['AliquotaIVA']], 2);
if ($differenza_iva) { if ($differenza_iva) {
$valore = $differenza_iva * 100 / ($riepilogo['AliquotaIVA']?:1); $valore = $differenza_iva * 100 / ($riepilogo['AliquotaIVA'] ?: 1);
} }
if ($valore != 0) { if ($valore != 0) {
@ -353,8 +353,8 @@ class FatturaOrdinaria extends FatturaElettronica
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito) // Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
// TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti. // TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
if (!empty($articolo->um) && !empty($articolo->um_secondaria) && !empty((float) $articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) { if (!empty($articolo->um) && !empty($articolo->um_secondaria) && !empty((float) $articolo->fattore_um_secondaria) && $riga['UnitaMisura'] == $articolo->um_secondaria) {
$qta = (($riga['Quantita'] ?: 1) / ($articolo->fattore_um_secondaria?:1)); $qta = (($riga['Quantita'] ?: 1) / ($articolo->fattore_um_secondaria ?: 1));
$prezzo = $totale_righe_riepilogo > 0 ? $totale_righe_riepilogo / ($qta?:1) : -($totale_righe_riepilogo / ($qta?:1)); $prezzo = $totale_righe_riepilogo > 0 ? $totale_righe_riepilogo / ($qta ?: 1) : -($totale_righe_riepilogo / ($qta ?: 1));
} else { } else {
$qta = ($riga['Quantita'] ?: 1); $qta = ($riga['Quantita'] ?: 1);
$prezzo = $totale_righe_riepilogo > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario']; $prezzo = $totale_righe_riepilogo > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
@ -399,13 +399,13 @@ class FatturaOrdinaria extends FatturaElettronica
if ($tipo_sconto == 'PRC') { if ($tipo_sconto == 'PRC') {
$sconto_calcolato = calcola_sconto([ $sconto_calcolato = calcola_sconto([
'sconto' => $sconto_riga, 'sconto' => $sconto_riga,
'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($tot_sconto_calcolato / ($obj->qta?:1)) : $obj->prezzo_unitario, 'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($tot_sconto_calcolato / ($obj->qta ?: 1)) : $obj->prezzo_unitario,
'tipo' => 'PRC', 'tipo' => 'PRC',
'qta' => $obj->qta, 'qta' => $obj->qta,
]); ]);
if ($tipo == 'PRC') { if ($tipo == 'PRC') {
$tot_sconto = $sconto_calcolato * 100 / ($obj->imponibile?:1); $tot_sconto = $sconto_calcolato * 100 / ($obj->imponibile ?: 1);
} else { } else {
$tot_sconto = $sconto_calcolato; $tot_sconto = $sconto_calcolato;
} }
@ -532,7 +532,7 @@ class FatturaOrdinaria extends FatturaElettronica
$nome = ucwords(strtolower($m[2])); $nome = ucwords(strtolower($m[2]));
$percentuale = $m[3]; $percentuale = $m[3];
$totale_previsto = round($importo / ($percentuale?:1) * 100, 2); $totale_previsto = round($importo / ($percentuale ?: 1) * 100, 2);
$percentuale_importo = round($totale_previsto / ($totale ?: 1) * 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)); $ritenuta_contributi = $database->fetchOne('SELECT * FROM`co_ritenuta_contributi` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
@ -633,7 +633,7 @@ class FatturaOrdinaria extends FatturaElettronica
$totale = sum($totali); $totale = sum($totali);
} }
$totale_previsto = round($importo * 100 / ($percentuale?:1), 2); $totale_previsto = round($importo * 100 / ($percentuale ?: 1), 2);
$percentuale_importo = round($totale_previsto / ($totale ?: 1) * 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 $percentuale_importo = min($percentuale_importo, 100); // Nota: Fix per la percentuale che superava il 100% nel caso di importi con Rivalsa compresa

View File

@ -86,7 +86,7 @@ class FatturaSemplificata extends FatturaElettronica
$prezzo = $importo - $imposta; $prezzo = $importo - $imposta;
$aliquota = !empty($prezzo) ? $imposta / ($prezzo?:1) * 100 : 0; $aliquota = !empty($prezzo) ? $imposta / ($prezzo ?: 1) * 100 : 0;
$result[$index]['AliquotaIVA'] = $aliquota; $result[$index]['AliquotaIVA'] = $aliquota;
} }
} }

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../core.php'; include_once __DIR__.'/../../core.php';
$directory = Plugins\ImportFE\FatturaElettronica::getImportDirectory(); $directory = FatturaElettronica::getImportDirectory();
$filename = get('filename'); $filename = get('filename');
$content = file_get_contents($directory.'/'.$filename); $content = file_get_contents($directory.'/'.$filename);

View File

@ -118,7 +118,7 @@ switch ($operazione) {
if ($cadenza_fatturazione == 'Fine') { if ($cadenza_fatturazione == 'Fine') {
$fine = Carbon\Carbon::parse($fine)->endOfMonth()->format('Y-m-d'); $fine = Carbon\Carbon::parse($fine)->endOfMonth()->format('Y-m-d');
} }
$prezzo_unitario = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ((($r->subtotale - $r->sconto) + $r->iva) / ($r->qta?:1)) : (($r->subtotale - $r->sconto) / ($r->qta?:1)); $prezzo_unitario = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ((($r->subtotale - $r->sconto) + $r->iva) / ($r->qta ?: 1)) : (($r->subtotale - $r->sconto) / ($r->qta ?: 1));
if (!empty($r->idarticolo)) { if (!empty($r->idarticolo)) {
$articolo = ArticoloOriginale::find($r->idarticolo); $articolo = ArticoloOriginale::find($r->idarticolo);

View File

@ -93,7 +93,7 @@ class Pianificazione extends Document
{ {
$righe = $this->contratto->getRighe(); $righe = $this->contratto->getRighe();
$pianificazioni = $this->contratto->pianificazioni; $pianificazioni = $this->contratto->pianificazioni;
$numero_righe = $righe->count() / ($pianificazioni->count()?:1); $numero_righe = $righe->count() / ($pianificazioni->count() ?: 1);
$p = $this; $p = $this;
$index = $pianificazioni->search(fn ($item) => $item->id == $p->id); $index = $pianificazioni->search(fn ($item) => $item->id == $p->id);

View File

@ -32,7 +32,7 @@ $prezzo_max = $prezzi['max'];
$prezzo_medio = $prezzi['media']; $prezzo_medio = $prezzi['media'];
$oscillazione = $prezzo_max['prezzo'] - $prezzo_min['prezzo']; $oscillazione = $prezzo_max['prezzo'] - $prezzo_min['prezzo'];
$oscillazione_percentuale = $prezzo_medio ? $oscillazione * 100 / ($prezzo_medio?:1) : 0; $oscillazione_percentuale = $prezzo_medio ? $oscillazione * 100 / ($prezzo_medio ?: 1) : 0;
$data_min = $prezzo_min['data'] ? strtotime((string) $prezzo_min['data']) : ''; $data_min = $prezzo_min['data'] ? strtotime((string) $prezzo_min['data']) : '';
$data_max = $prezzo_max['data'] ? strtotime((string) $prezzo_max['data']) : ''; $data_max = $prezzo_max['data'] ? strtotime((string) $prezzo_max['data']) : '';

View File

@ -338,7 +338,7 @@ abstract class Accounting extends Component
*/ */
public function getMarginePercentualeAttribute() public function getMarginePercentualeAttribute()
{ {
return (1 - (($this->spesa + $this->provvigione) / ($this->totale_imponibile?:1))) * 100; return (1 - (($this->spesa + $this->provvigione) / ($this->totale_imponibile ?: 1))) * 100;
} }
/** /**

View File

@ -221,7 +221,7 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt
*/ */
public function getMarginePercentualeAttribute() public function getMarginePercentualeAttribute()
{ {
return ($this->totale_imponibile && $this->spesa) ? (1 - ($this->spesa / ($this->totale_imponibile?:1))) * 100 : 100; return ($this->totale_imponibile && $this->spesa) ? (1 - ($this->spesa / ($this->totale_imponibile ?: 1))) * 100 : 100;
} }
/** /**

View File

@ -22,7 +22,6 @@ namespace HTMLBuilder\Manager;
use Models\Upload; use Models\Upload;
use Util\FileSystem; use Util\FileSystem;
/** /**
* Gestione allegati. * Gestione allegati.
* *

View File

@ -179,7 +179,7 @@ class User extends Model
$img->save(slashes($file)); $img->save(slashes($file));
// Aggiunta nuova foto // Aggiunta nuova foto
$upload = Upload::build(file_get_contents($file), $data, basename($value['name'])); $upload = Upload::build(file_get_contents($file), $data, basename((string) $value['name']));
// Rimozione foto precedenti // Rimozione foto precedenti
delete($file); delete($file);

View File

@ -99,7 +99,6 @@ echo '
</tr> </tr>
</table>'; </table>';
// Dati attività // Dati attività
echo ' echo '
<table class="table border-bottom"> <table class="table border-bottom">
@ -152,8 +151,6 @@ if (!empty($preventivo) or !empty($contratto)) {
</tr>'; </tr>';
} }
// riga 3 // riga 3
// Elenco impianti su cui è stato fatto l'intervento // Elenco impianti su cui è stato fatto l'intervento
$rs2 = $dbo->fetchArray('SELECT *, (SELECT nome FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS nome, (SELECT matricola FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS matricola FROM my_impianti_interventi WHERE idintervento='.prepare($id_record)); $rs2 = $dbo->fetchArray('SELECT *, (SELECT nome FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS nome, (SELECT matricola FROM my_impianti WHERE id=my_impianti_interventi.idimpianto) AS matricola FROM my_impianti_interventi WHERE idintervento='.prepare($id_record));
@ -406,7 +403,6 @@ if (count($sessioni) > 0) {
'.$orario.' '.$orario.'
</td>'; </td>';
// Testo lavori eseguiti 1/2 // Testo lavori eseguiti 1/2
if ($i == 0) { if ($i == 0) {
echo ' echo '
@ -418,10 +414,9 @@ if (count($sessioni) > 0) {
// Firma 1/3 // Firma 1/3
if ($i == 1) { if ($i == 1) {
echo ' echo '
<td rowspan="'.(count($sessioni)+1).'" class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;"> <td rowspan="'.(count($sessioni) + 1).'" class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;">
'.$firma.'<br>'; '.$firma.'<br>';
if (empty($documento['firma_file'])) { if (empty($documento['firma_file'])) {
echo ' <i>('.tr('Timbro e firma leggibile').')</i>'; echo ' <i>('.tr('Timbro e firma leggibile').')</i>';
} else { } else {
@ -435,7 +430,7 @@ if (count($sessioni) > 0) {
echo ' echo '
</tr>'; </tr>';
$i++; ++$i;
} }
} }
@ -463,7 +458,6 @@ if ($options['pricing']) {
<td colspan="3" class="text-center">-</td>'; <td colspan="3" class="text-center">-</td>';
} }
// Testo lavori eseguiti 2/2 // Testo lavori eseguiti 2/2
if (count($sessioni) == 0) { if (count($sessioni) == 0) {
echo ' echo '
@ -477,7 +471,6 @@ if (count($sessioni) == 1) {
echo '<td rowspan="2" class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;"> echo '<td rowspan="2" class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;">
'.$firma.'<br>'; '.$firma.'<br>';
if (empty($documento['firma_file'])) { if (empty($documento['firma_file'])) {
echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>'; echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>';
} else { } else {
@ -491,7 +484,6 @@ if (count($sessioni) == 1) {
echo ' echo '
</tr>'; </tr>';
// Totale km // Totale km
echo ' echo '
<tr> <tr>
@ -526,7 +518,6 @@ if (count($sessioni) == 0) {
echo '<td class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;"> echo '<td class="text-center" style="font-size:6pt; vertical-align:bottom; border-left:1px solid #aaa;">
'.$firma.'<br>'; '.$firma.'<br>';
if (empty($documento['firma_file'])) { if (empty($documento['firma_file'])) {
echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>'; echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>';
} else { } else {
@ -537,7 +528,6 @@ if (count($sessioni) == 0) {
</td>'; </td>';
} }
// Calcoli // Calcoli
$imponibile = abs($documento->imponibile); $imponibile = abs($documento->imponibile);
$sconto = $documento->sconto; $sconto = $documento->sconto;

View File

@ -329,7 +329,7 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
</tr> </tr>
<tr> <tr>
<td>VARIAZIONE DI IMPOSTA RELATIVE A PERIODI PRECEDENTI</td> <td>VARIAZIONE DI IMPOSTA RELATIVE A PERIODI PRECEDENTI</td>
<td class=text-right>'.($totale_iva_periodo_precedente > 0 ? moneyFormat(abs($totale_iva_periodo_precedente), 2):'').'</td> <td class=text-right>'.($totale_iva_periodo_precedente > 0 ? moneyFormat(abs($totale_iva_periodo_precedente), 2) : '').'</td>
</tr> </tr>
@ -346,7 +346,7 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
<td class=text-right></td> <td class=text-right></td>
</tr> </tr>
<tr> <tr>
<td>'.($totale_iva >= 0 ? 'IVA A DEBITO' : 'IVA A CREDITO') .'</td> <td>'.($totale_iva >= 0 ? 'IVA A DEBITO' : 'IVA A CREDITO').'</td>
<td class=text-right>'.moneyFormat(abs($totale_iva), 2).'</td> <td class=text-right>'.moneyFormat(abs($totale_iva), 2).'</td>
</tr> </tr>
<tr> <tr>
@ -359,13 +359,13 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
</tr> </tr>
<tr> <tr>
<td>IVA A DEBITO CON MAGGIORAZIONE</td> <td>IVA A DEBITO CON MAGGIORAZIONE</td>
<td class=text-right>'.($periodo == 'Trimestrale' ?moneyFormat($totale_iva_maggiorata, 2): '').'</td> <td class=text-right>'.($periodo == 'Trimestrale' ? moneyFormat($totale_iva_maggiorata, 2) : '').'</td>
</tr> </tr>
<tr> <tr>
<td>IMPORTO DA VERSARE</td> <td>IMPORTO DA VERSARE</td>
<td class=text-right>'.($periodo == 'Mensile' ?moneyFormat($totale_iva, 2) : moneyFormat($totale_iva_maggiorata, 2)).'</td> <td class=text-right>'.($periodo == 'Mensile' ? moneyFormat($totale_iva, 2) : moneyFormat($totale_iva_maggiorata, 2)).'</td>

View File

@ -8,4 +8,4 @@ $has_name = database()->columnExists('zz_groups', 'name');
if ($has_name && $has_nome) { if ($has_name && $has_nome) {
$database->query('ALTER TABLE `zz_groups` DROP `name`'); $database->query('ALTER TABLE `zz_groups` DROP `name`');
} }

View File

@ -11,4 +11,4 @@ foreach ($files as $key => $value) {
$files[$key] = realpath(base_dir().'/'.$value); $files[$key] = realpath(base_dir().'/'.$value);
} }
delete($files); delete($files);