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.
- [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.2 (2024-05-31)](#252-2024-05-31)
- [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
### 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)
- 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
- 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.
- 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)
### 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
##### 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
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
##### Problemi noti

View File

@ -534,7 +534,7 @@ if (Auth::check()) {
}
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);
}

View File

@ -36,7 +36,7 @@ switch (post('op')) {
// Se l'anagrafica non è di tipo Azienda
if (!in_array($id_tipo_azienda, $tipi)) {
$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')) {
// cURL non è attivo
flash()->error(tr('cURL non attivo, impossibile continuare l\'operazione.'));
return false;
} else {
$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).'
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
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 = ceil($new_prezzo_vendita / ($arrotondamento?:1)) * $arrotondamento;
$new_prezzo_vendita = ceil($new_prezzo_vendita / ($arrotondamento ?: 1)) * $arrotondamento;
}
if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) {

View File

@ -130,9 +130,9 @@ if (!empty($movimenti)) {
echo '
<tr>
<td class="text-center">
'.count($movimenti)-($i). '
'.count($movimenti) - $i.'
</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'].'
</td>

View File

@ -42,12 +42,12 @@ echo '
</div>
<!-- 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">
<h3 class="card-title">'.tr('Dati cliente').'</h3>
<div class="card-tools pull-right">
<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>
</div>
</div>

View File

@ -149,7 +149,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
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 '
<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\Tipo;
use Modules\Iva\Aliquota;
use Modules\Ordini\Stato as StatoOrdine;
$module = Module::find($id_module);

View File

@ -124,12 +124,12 @@ echo '
</div>
<!-- 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">
<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">
<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>
</div>
</div>

View File

@ -170,7 +170,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
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) {
echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';

View File

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

View File

@ -295,12 +295,12 @@ $query .= ' ORDER BY `title`';
</div>
<!-- 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">
<h3 class="card-title">'.($dir == 'entrata' ? tr('Dati cliente') : tr('Dati fornitore')).'</h3>
<div class="card-tools pull-right">
<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>
</div>
</div>

View File

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

View File

@ -143,7 +143,7 @@ if (!empty($record['immagine'])) {
{( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )}
<?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
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 = '';

View File

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

View File

@ -56,7 +56,7 @@ if ($intervento->id_contratto) {
$contratto = Contratto::find($intervento->id_contratto);
$ore_erogate = $contratto->interventi->sum('ore_totali');
$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) {
$color = 'success';
} elseif ($perc_ore <= 100) {

View File

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

View File

@ -19,92 +19,88 @@
include_once __DIR__.'/../../core.php';
if(get('op')=='getmappa'){
$nome = 'Ricarica mappa';
if (get('op') == 'getmappa') {
$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{
$nome = 'Visualizza mappa';
if (sizeof($search_filters) > 0) {
$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>";
echo "<br>";
$rs1 = $dbo->fetchArray($module_query);
// 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'){
$current_module = Modules::get($id_module);
$total = Util\Query::readQuery($current_module);
$module_query = Modules::replaceAdditionals($id_module, $total['query']);
$search_filters = array();
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."%\"" );
}
}
}
if( sizeof($search_filters) > 0 ){
$module_query = str_replace( "2=2", "2=2 AND (".implode( " AND ", $search_filters ).") ", $module_query);
$svgContent = file_get_contents($docroot.'/assets/dist/img/leaflet/place-marker.svg');
if ($svgContent === false) {
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((string) $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);
}
$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
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 .= "'";
$svgContent = file_get_contents($docroot.'/assets/dist/img/leaflet/place-marker.svg');
if ($svgContent === false) {
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 .= 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((string) $altri_interventi[$j]['data_richiesta'])).'</a>');
}
$stringa_content .= "',";
}
}
echo "<div id='mappa'></div>";
$stringa_descrizioni = substr($stringa_descrizioni,0,-1);
$stringa_content = substr($stringa_content,0,-1);
$lat = substr($lat,0,-1);
$lng = substr($lng,0,-1);
?>
echo "<div id='mappa'></div>";
$stringa_descrizioni = substr($stringa_descrizioni, 0, -1);
$stringa_content = substr($stringa_content, 0, -1);
$lat = substr($lat, 0, -1);
$lng = substr($lng, 0, -1);
?>
<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 descrizioni = [<?php echo $stringa_descrizioni; ?>];
var content = [<?php echo $stringa_content; ?>];
var svgContent = `<?php echo $svgContent;?>`;
var svgContent = `<?php echo $svgContent; ?>`;
const lt = "41.706";
const ln = "13.228";
var container = L.DomUtil.get("mappa");

View File

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

View File

@ -403,7 +403,7 @@ class Sessione extends Model
*/
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()
{
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()

View File

@ -30,7 +30,7 @@ include_once __DIR__.'/../../core.php';
<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 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 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">
<input type="hidden" name="lat" id="lat" 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 class="row">
<div class="col-md-12" id="geocomplete">
<input type="hidden" name="lat" id="lat" 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 class="row">
<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>
</div>
</div>
@ -64,7 +64,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<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>
</div>
</div>

View File

@ -79,12 +79,12 @@ echo '
</div>
<!-- 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">
<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">
<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>
</div>
</div>

View File

@ -223,7 +223,7 @@ foreach ($righe as $riga) {
foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
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) {
echo '
<div class="progress-bar progress-bar-'.$color.'" style="width:'.$perc_ev.'%"></div>';

View File

@ -47,12 +47,12 @@ if (count($preventivo->revisioni) > 1) {
</div>
<?php echo '
<!-- 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">
<h3 class="card-title">'.tr('Dati cliente').'</h3>
<div class="card-tools pull-right">
<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>
</div>
</div>

View File

@ -179,7 +179,7 @@ foreach ($righe as $key => $riga) {
foreach ($evasione_bar as $table => $color) {
$righe_ev = $dbo->table($table)->where('original_id', $riga->id)->where('original_type', $riga::class)->get();
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) {
echo '
<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">
<br>
<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">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>

View File

@ -32,7 +32,7 @@ $scadenza_in_chiusura = 0;
foreach ($scadenze as $scadenza) {
$scadenza = (array) $scadenza;
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;
}
}

View File

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

View File

@ -60,7 +60,7 @@ echo '
<div class="row">
<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>';

View File

@ -46,7 +46,7 @@ echo '
<div class="card-body">
<div class="row">
<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 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.'" ]}
@ -185,8 +185,8 @@ echo '
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title">'.tr('Permessi del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
]).'</h3>'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '
'_GROUP_' => $record['nome'],
]).'</h3>'.((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? '
<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>
</div>' : '').'

View File

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

View File

@ -42,7 +42,7 @@ if (!empty($additionals)) {
]).'
</h3>
<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>
</button>
</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_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_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_previsti = $n_impianti ? round(($impianti_non_previsti * 100) / ($n_impianti ?: 1)) : 0;
echo '
<div class="row">
<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-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-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 class="col-md-1">
<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>
</div>
</div>

View File

@ -484,7 +484,7 @@ if (!empty($righe)) {
if ($tipo_sconto == '%') {
$sconto_calcolato = calcola_sconto([
'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',
'qta' => $qta,
]);

View File

@ -155,7 +155,7 @@ class FatturaOrdinaria extends FatturaElettronica
$differenza_iva = round((float) $riepilogo['Imposta'] - $totale_imposta[$riepilogo['AliquotaIVA']], 2);
if ($differenza_iva) {
$valore = $differenza_iva * 100 / ($riepilogo['AliquotaIVA']?:1);
$valore = $differenza_iva * 100 / ($riepilogo['AliquotaIVA'] ?: 1);
}
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)
// 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) {
$qta = (($riga['Quantita'] ?: 1) / ($articolo->fattore_um_secondaria?:1));
$prezzo = $totale_righe_riepilogo > 0 ? $totale_righe_riepilogo / ($qta?:1) : -($totale_righe_riepilogo / ($qta?: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));
} else {
$qta = ($riga['Quantita'] ?: 1);
$prezzo = $totale_righe_riepilogo > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
@ -399,13 +399,13 @@ class FatturaOrdinaria extends FatturaElettronica
if ($tipo_sconto == 'PRC') {
$sconto_calcolato = calcola_sconto([
'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',
'qta' => $obj->qta,
]);
if ($tipo == 'PRC') {
$tot_sconto = $sconto_calcolato * 100 / ($obj->imponibile?:1);
$tot_sconto = $sconto_calcolato * 100 / ($obj->imponibile ?: 1);
} else {
$tot_sconto = $sconto_calcolato;
}
@ -532,7 +532,7 @@ class FatturaOrdinaria extends FatturaElettronica
$nome = ucwords(strtolower($m[2]));
$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);
$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_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 = 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;
$aliquota = !empty($prezzo) ? $imposta / ($prezzo?:1) * 100 : 0;
$aliquota = !empty($prezzo) ? $imposta / ($prezzo ?: 1) * 100 : 0;
$result[$index]['AliquotaIVA'] = $aliquota;
}
}

View File

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

View File

@ -118,7 +118,7 @@ switch ($operazione) {
if ($cadenza_fatturazione == 'Fine') {
$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)) {
$articolo = ArticoloOriginale::find($r->idarticolo);

View File

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

View File

@ -32,7 +32,7 @@ $prezzo_max = $prezzi['max'];
$prezzo_medio = $prezzi['media'];
$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_max = $prezzo_max['data'] ? strtotime((string) $prezzo_max['data']) : '';

View File

@ -338,7 +338,7 @@ abstract class Accounting extends Component
*/
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()
{
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 Util\FileSystem;
/**
* Gestione allegati.
*

View File

@ -179,7 +179,7 @@ class User extends Model
$img->save(slashes($file));
// 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
delete($file);

View File

@ -99,7 +99,6 @@ echo '
</tr>
</table>';
// Dati attività
echo '
<table class="table border-bottom">
@ -152,8 +151,6 @@ if (!empty($preventivo) or !empty($contratto)) {
</tr>';
}
// riga 3
// 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));
@ -406,7 +403,6 @@ if (count($sessioni) > 0) {
'.$orario.'
</td>';
// Testo lavori eseguiti 1/2
if ($i == 0) {
echo '
@ -418,10 +414,9 @@ if (count($sessioni) > 0) {
// Firma 1/3
if ($i == 1) {
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>';
if (empty($documento['firma_file'])) {
echo ' <i>('.tr('Timbro e firma leggibile').')</i>';
} else {
@ -435,7 +430,7 @@ if (count($sessioni) > 0) {
echo '
</tr>';
$i++;
++$i;
}
}
@ -463,7 +458,6 @@ if ($options['pricing']) {
<td colspan="3" class="text-center">-</td>';
}
// Testo lavori eseguiti 2/2
if (count($sessioni) == 0) {
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;">
'.$firma.'<br>';
if (empty($documento['firma_file'])) {
echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>';
} else {
@ -491,7 +484,6 @@ if (count($sessioni) == 1) {
echo '
</tr>';
// Totale km
echo '
<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;">
'.$firma.'<br>';
if (empty($documento['firma_file'])) {
echo ' <br><br><br><i>('.tr('Timbro e firma leggibile').')</i>';
} else {
@ -537,7 +528,6 @@ if (count($sessioni) == 0) {
</td>';
}
// Calcoli
$imponibile = abs($documento->imponibile);
$sconto = $documento->sconto;

View File

@ -329,7 +329,7 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
</tr>
<tr>
<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>
@ -346,7 +346,7 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
<td class=text-right></td>
</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>
</tr>
<tr>
@ -359,13 +359,13 @@ echo ' <td class=text-right>'.moneyFormat(abs($totale_iva_periodo_precedente), 2
</tr>
<tr>
<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>
<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>