Skip to content

Commit b9cb00e

Browse files
committed
fix: hook servizi
1 parent 52ae27b commit b9cb00e

3 files changed

Lines changed: 167 additions & 107 deletions

File tree

modules/stato_servizi/edit.php

Lines changed: 141 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,34 @@
2828
<div class="row">';
2929
$days = 60;
3030
$limite_scadenze = (new Carbon())->addDays($days);
31+
32+
// Colonna sinistra: Servizi e Risorse
33+
echo '
34+
<div class="col-md-12 col-lg-6">
35+
<div class="row">';
36+
3137
if (Services::isEnabled()) {
3238
echo '
33-
<!-- Informazioni sui Servizi attivi -->
34-
<div class="col-md-12 col-lg-6">
35-
<div class="card card-primary card-outline">
36-
<div class="card-header">
37-
<div class="card-title">
38-
<i class="fa fa-cogs mr-2"></i>'.tr('Servizi').'
39-
</div>
40-
</div>
39+
<!-- Informazioni sui Servizi attivi -->
40+
<div class="col-12 mb-3">
41+
<div class="card card-primary card-outline">
42+
<div class="card-header">
43+
<div class="card-title">
44+
<i class="fa fa-cogs mr-2"></i>'.tr('Servizi').'
45+
</div>
46+
</div>
47+
48+
<div class="card-body p-0">';
4149

42-
<div class="card-body p-0">';
50+
$servizi = Services::getServiziAttivi(true);
4351

44-
$servizi = Services::getServiziAttivi(true)->flatten(1);
4552
if (!$servizi->isEmpty()) {
4653
echo '
4754
<table class="table table-hover table-striped table-sm mb-0">
4855
<thead>
4956
<tr>
50-
<th width="45%">'.tr('Nome').'</th>
57+
<th width="5%" class="text-center">'.tr('Stato').'</th>
58+
<th width="40%">'.tr('Nome').'</th>
5159
<th width="20%">'.tr('Tipo').'</th>
5260
<th width="25%">'.tr('Scadenza').'</th>
5361
<th width="10%" class="text-center">'.tr('#').'</th>
@@ -56,34 +64,48 @@
5664
5765
<tbody>';
5866
foreach ($servizi as $servizio) {
59-
$scadenza = Carbon::parse($servizio['data_conclusione']);
67+
// Verifica che $servizio sia un array e contenga i campi necessari
68+
if (!is_array($servizio) || !isset($servizio['expiration_at'])) {
69+
continue;
70+
}
71+
$scadenza = Carbon::parse($servizio['expiration_at']);
6072
$status_class = $scadenza->lessThan(Carbon::now()) ? 'table-danger' : ($scadenza->lessThan($limite_scadenze) ? 'table-warning' : '');
61-
$status_icon = $scadenza->lessThan(Carbon::now()) ? '<i class="fa fa-exclamation-circle text-danger mr-1"></i>' : ($scadenza->lessThan($limite_scadenze) ? '<i class="fa fa-clock-o text-warning mr-1"></i>' : '');
73+
$status_icon = $scadenza->lessThan(Carbon::now()) ? '<i class="fa fa-times-circle text-danger" title="'.tr('Scaduto').'"></i>' : ($scadenza->lessThan($limite_scadenze) ? '<i class="fa fa-exclamation-triangle text-warning" title="'.tr('In scadenza').'"></i>' : '<i class="fa fa-check-circle text-success" title="'.tr('Attivo').'"></i>');
74+
75+
// Usa i campi corretti dalla risposta API
76+
$codice = $servizio['code'] ?? $servizio['name'] ?? 'N/A';
77+
$nome = $servizio['name'] ?? 'N/A';
78+
$tipo = $servizio['type'] ?? $servizio['category'] ?? 'N/A';
6279

6380
echo '
6481
<tr class="'.$status_class.'">
65-
<td><strong>'.$servizio['codice'].'</strong> - '.$servizio['nome'].'</td>
66-
<td>'.$servizio['sottocategoria'].'</td>
67-
<td>'.$status_icon.dateFormat($scadenza).' <small class="text-muted">('.$scadenza->diffForHumans().')</small></td>
82+
<td class="text-center">'.$status_icon.'</td>
83+
<td><strong>'.$codice.'</strong><br><small class="text-muted">'.$nome.'</small></td>
84+
<td><span class="badge badge-secondary">'.$tipo.'</span></td>
85+
<td>'.dateFormat($scadenza).' <br><small class="text-muted">'.$scadenza->diffForHumans().'</small></td>
6886
<td class="text-center">
69-
<input type="checkbox" class="check_rinnova '.($scadenza->lessThan($limite_scadenze) ? '' : 'hide').'" name="rinnova[]" value="'.$servizio['codice'].'">
87+
<input type="checkbox" class="check_rinnova '.($scadenza->lessThan($limite_scadenze) ? '' : 'hide').'" name="rinnova[]" value="'.$codice.'">
7088
</td>
7189
</tr>';
7290
}
7391

7492
$servizi_in_scadenza = Services::getServiziInScadenza($limite_scadenze);
7593
$servizi_scaduti = Services::getServiziScaduti();
94+
95+
echo ' </tbody>
96+
<tfoot>
97+
<tr class="table-light">
98+
<td colspan="3"><strong>'.tr('Totale servizi: _NUM_', ['_NUM_' => $servizi->count()]).'</strong></td>
99+
<td colspan="2" class="text-right">';
100+
76101
if (!$servizi_in_scadenza->isEmpty() || !$servizi_scaduti->isEmpty()) {
77-
echo ' </tbody>
78-
<tfoot>
79-
<tr>
80-
<td colspan="4" class="text-right">
81-
<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-primary disabled"><i class="fa fa-shopping-cart mr-1"></i>'.tr('Rinnova').'</a>
82-
</td>
83-
</tr>
84-
</tfoot>';
102+
echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-primary"><i class="fa fa-shopping-cart mr-1"></i>'.tr('Rinnova').'</a>';
85103
}
86104

105+
echo ' </td>
106+
</tr>
107+
</tfoot>';
108+
87109
echo '
88110
</table>';
89111
} else {
@@ -94,20 +116,20 @@
94116
}
95117

96118
echo '
97-
</div>
98-
</div>
99-
</div>
100-
101-
<!-- Informazioni sulle Risorse API -->
102-
<div class="col-md-12 col-lg-6">
103-
<div class="card card-primary card-outline">
104-
<div class="card-header">
105-
<div class="card-title">
106-
<i class="fa fa-cubes mr-2"></i>'.tr('Risorse').'
119+
</div>
107120
</div>
108121
</div>
109122
110-
<div class="card-body p-0">';
123+
<!-- Informazioni sulle Risorse API -->
124+
<div class="col-12 mb-3">
125+
<div class="card card-success card-outline">
126+
<div class="card-header">
127+
<div class="card-title">
128+
<i class="fa fa-cubes mr-2"></i>'.tr('Risorse').'
129+
</div>
130+
</div>
131+
132+
<div class="card-body p-0">';
111133

112134
// Elaborazione delle risorse API in scadenza
113135
$risorse_attive = Services::getRisorseAttive(true);
@@ -146,7 +168,8 @@
146168
<table class="table table-hover table-striped table-sm mb-0">
147169
<thead>
148170
<tr>
149-
<th width="45%">'.tr('Nome').'</th>
171+
<th width="5%" class="text-center">'.tr('Stato').'</th>
172+
<th width="40%">'.tr('Nome').'</th>
150173
<th width="20%">'.tr('Crediti').'</th>
151174
<th width="35%">'.tr('Scadenza').'</th>
152175
</tr>
@@ -155,32 +178,66 @@
155178
<tbody>';
156179

157180
foreach ($risorse_attive as $servizio) {
181+
// Verifica che $servizio sia un array e contenga i campi necessari
182+
if (!is_array($servizio) || !isset($servizio['expiration_at'])) {
183+
continue;
184+
}
158185
$scadenza = Carbon::parse($servizio['expiration_at']);
159-
$status_class = $scadenza->lessThan(Carbon::now()) ? 'table-danger' : ($scadenza->lessThan($limite_scadenze) ? 'table-warning' : '');
160-
$status_icon = $scadenza->lessThan(Carbon::now()) ? '<i class="fa fa-exclamation-circle text-danger mr-1"></i>' : ($scadenza->lessThan($limite_scadenze) ? '<i class="fa fa-clock-o text-warning mr-1"></i>' : '');
161-
$credits_warning = ($servizio['credits'] < 100 && $servizio['credits'] !== null);
186+
$credits_warning = $servizio['credits'] < 100 && $servizio['credits'] !== null;
187+
$is_expired = $scadenza->lessThan(Carbon::now());
188+
$is_expiring = $scadenza->lessThan($limite_scadenze);
189+
190+
$status_class = $is_expired ? 'table-danger' : ($is_expiring || $credits_warning ? 'table-warning' : '');
191+
$status_icon = $is_expired ? '<i class="fa fa-times-circle text-danger" title="'.tr('Scaduto').'"></i>' : ($is_expiring || $credits_warning ? '<i class="fa fa-exclamation-triangle text-warning" title="'.tr('Attenzione').'"></i>' : '<i class="fa fa-check-circle text-success" title="'.tr('Attivo').'"></i>');
162192

163193
echo '
164194
<tr class="'.$status_class.'">
195+
<td class="text-center">'.$status_icon.'</td>
165196
<td><strong>'.$servizio['name'].'</strong></td>
166197
<td>'.($credits_warning ? '<i class="fa fa-exclamation-triangle text-warning mr-1"></i>' : '').($servizio['credits'] ?? '-').'</td>
167-
<td>'.$status_icon.dateFormat($scadenza).' <small class="text-muted">('.$scadenza->diffForHumans().')</small></td>
198+
<td>'.dateFormat($scadenza).' <br><small class="text-muted">'.$scadenza->diffForHumans().'</small></td>
168199
</tr>';
169200
}
170201

171202
echo '
172203
</tbody>
173-
</table>
174-
</div>';
204+
<tfoot>
205+
<tr class="table-light">
206+
<td colspan="4"><strong>'.tr('Totale risorse: _NUM_', ['_NUM_' => $risorse_attive->count()]).'</strong></td>
207+
</tr>
208+
</tfoot>
209+
</table>';
175210

176-
// Il servizio Fatturazione Elettronica deve essere presente per visualizzare le Statistiche su Fatture Elettroniche
177-
if (Services::getRisorseAttive()->where('name', 'Fatturazione Elettronica')->count()) {
178-
echo '
211+
} else {
212+
echo '
213+
<div class="alert alert-info m-3">
214+
<i class="fa fa-info-circle mr-2"></i>'.tr('Nessuna risorsa Services abilitata').'.
215+
</div>';
216+
}
217+
218+
echo '
219+
</div>
220+
</div>
221+
</div>
222+
</div>
223+
</div>
179224
180-
<div class="card card-primary card-outline mt-3">
225+
<!-- Colonna destra: Statistiche su Fatture Elettroniche -->
226+
<div class="col-md-12 col-lg-6">';
227+
228+
// Il servizio Fatturazione Elettronica deve essere presente per visualizzare le Statistiche su Fatture Elettroniche
229+
if (Services::isEnabled() && Services::getRisorseAttive()->where('name', 'Fatturazione Elettronica')->count()) {
230+
echo '
231+
<!-- Statistiche su Fatture Elettroniche -->
232+
<div class="card card-info card-outline h-100">
181233
<div class="card-header">
182234
<div class="card-title">
183-
<i class="fa fa-bar-chart mr-2"></i>'.tr('Statistiche su Fatture Elettroniche').'
235+
<i class="fa fa-file-text-o mr-2"></i>'.tr('Statistiche FE').'
236+
</div>
237+
<div class="card-tools">
238+
<button type="button" class="btn btn-tool" data-card-widget="collapse">
239+
<i class="fas fa-minus"></i>
240+
</button>
184241
</div>
185242
</div>
186243
@@ -193,7 +250,6 @@
193250
]).'.<br>'.tr("Contattare l'assistenza per risolvere il problema").'</span>.
194251
</div>
195252
196-
197253
<div class="alert hidden" role="alert" id="numero-fe">
198254
<i id="numero-fe-icon" class=""></i> <span>'.tr('Attenzione, numero di fatture elettroniche per l\'annualità _TEXT_: _NUM_ documenti transitati su _TOT_ disponibili', [
199255
'_TEXT_' => '<span id="numero-fe-text"></span>',
@@ -202,47 +258,50 @@
202258
]).'.<br>'.tr("Contattare l'assistenza per risolvere il problema").'</span>.
203259
</div>
204260
205-
206-
<table class="card-body table table-striped table-hover table-sm">
207-
<thead>
208-
<tr>
209-
<th>'.tr('Anno').'</th>
210-
<th>
211-
'.tr('N. documenti archiviati').'
212-
<span class="tip" title="'.tr('Fatture attive e relative ricevute, fatture passive').'.">
213-
<i class="fa fa-question-circle-o"></i>
214-
</span>
215-
</th>
216-
217-
<th>
218-
'.tr('Spazio utilizzato').'
219-
<span class="tip" title="'.tr('Fatture attive con eventuali allegati e ricevute, fatture passive con eventuali allegati').'.">
220-
<i class="fa fa-question-circle-o"></i>
221-
</span>
222-
</th>
223-
</tr>
224-
</thead>
225-
226-
<tfoot id="elenco-fe">
227-
<tr style="background-color:#CCCCCC;" >
228-
<td>'.tr('Totale').'</td>
229-
<td id="fe_numero"></td>
230-
<td id="fe_spazio"></td>
231-
</tr>
232-
</tfoot>
233-
</table>
261+
<div class="table-responsive">
262+
<table class="table table-striped table-sm mb-0">
263+
<thead>
264+
<tr>
265+
<th>'.tr('Anno').'</th>
266+
<th class="text-center">
267+
'.tr('Doc.').'
268+
<i class="fa fa-question-circle-o text-muted" title="'.tr('Fatture attive e relative ricevute, fatture passive').'"></i>
269+
</th>
270+
<th class="text-center">
271+
'.tr('Spazio').'
272+
<i class="fa fa-question-circle-o text-muted" title="'.tr('Fatture attive con eventuali allegati e ricevute, fatture passive con eventuali allegati').'"></i>
273+
</th>
274+
</tr>
275+
</thead>
276+
<tbody id="elenco-fe">
277+
</tbody>
278+
<tfoot>
279+
<tr class="table-secondary">
280+
<td><strong>'.tr('Totale').'</strong></td>
281+
<td class="text-center"><strong id="fe_numero">-</strong></td>
282+
<td class="text-center"><strong id="fe_spazio">-</strong></td>
283+
</tr>
284+
</tfoot>
285+
</table>
286+
</div>
234287
</div>
235288
</div>
236289
<script>
237290
$(document).ready(function (){
238291
aggiornaStatisticheFE();
239292
});
240293
</script>';
241-
}
242294
} else {
243295
echo '
244-
<div class="alert alert-info m-3">
245-
<i class="fa fa-info-circle mr-2"></i>'.tr('Nessuna risorsa Services abilitata').'.
296+
<div class="card card-secondary card-outline h-100">
297+
<div class="card-header">
298+
<div class="card-title">
299+
<i class="fa fa-file-text-o mr-2"></i>'.tr('Statistiche FE').'
300+
</div>
301+
</div>
302+
<div class="card-body text-center p-3">
303+
<i class="fa fa-info-circle fa-2x text-muted mb-2"></i>
304+
<p class="text-muted mb-0">'.tr('Non disponibili').'<br><small>'.tr('Servizio FE non attivo').'</small></p>
246305
</div>
247306
</div>';
248307
}
@@ -316,10 +375,7 @@
316375
</div>
317376
318377
</div>
319-
</div>';
320-
321-
echo '
322-
378+
</div>
323379
<script>
324380
325381
$(".check_rinnova").each(function() {

modules/stato_servizi/src/ServicesHook.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,20 @@ public function response()
3535
$limite_scadenze = (new Carbon())->addDays(60);
3636
$message = "";
3737

38-
$cache = Cache::where('name', 'Informazioni su Services')->first();
38+
$cache = Cache::where('name', 'Informazioni su Services')->first();
3939
$services = $cache->content;
4040

4141
//Filtra i risultati che hanno expiration_at fra oggi e $limite_scadenze
4242
$servizi_in_scadenza = array_filter($services, function ($service) use ($limite_scadenze) {
43-
return Carbon::parse($service['expiration_at'])->between(Carbon::now(), $limite_scadenze);
43+
return is_array($service) && isset($service['expiration_at']) && Carbon::parse($service['expiration_at'])->between(Carbon::now(), $limite_scadenze);
4444
});
4545

4646
if( !empty($servizi_in_scadenza) ){
4747
$message .= '<i class="fa fa-clock-o text-warning"> </i> ';
4848
$message .= tr('I seguenti servizi sono in scadenza:<ul><li> _LIST_', [
4949
'_LIST_' => implode('</li><li>', array_column($servizi_in_scadenza, 'name')),
5050
]).'</ul>';
51-
}
51+
}
5252
}
5353

5454
return [

0 commit comments

Comments
 (0)