Skip to content

Commit 3d20291

Browse files
committed
refactor: unificazione tabella servizi
1 parent 3cdd573 commit 3d20291

1 file changed

Lines changed: 81 additions & 129 deletions

File tree

modules/stato_servizi/edit.php

Lines changed: 81 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,33 @@
3535
<div class="card card-primary card-outline">
3636
<div class="card-header">
3737
<div class="card-title">
38-
<i class="fa fa-cogs mr-2"></i>'.tr('Servizi OSMCloud').'
38+
<i class="fa fa-cogs mr-2"></i>'.tr('Servizi e Risorse OSMCloud').'
3939
</div>
4040
</div>
4141
4242
<div class="card-body p-0">';
43+
44+
// Recupero servizi e risorse
4345
$servizi = Services::getServiziAttivi(true)->flatten(1);
44-
if (!$servizi->isEmpty()) {
45-
// Calcolo degli elementi in scadenza e scadut
46+
$risorse = Services::getRisorseAttive(true);
47+
48+
// Combina servizi e risorse in un'unica collezione
49+
$tutti_elementi = collect();
50+
51+
// Aggiungi servizi (con flag per identificarli)
52+
foreach ($servizi as $servizio) {
53+
$servizio['tipo_elemento'] = 'servizio';
54+
$tutti_elementi->push($servizio);
55+
}
56+
57+
// Aggiungi risorse (con flag per identificarli)
58+
foreach ($risorse as $risorsa) {
59+
$risorsa['tipo_elemento'] = 'risorsa';
60+
$tutti_elementi->push($risorsa);
61+
}
62+
63+
if (!$tutti_elementi->isEmpty()) {
64+
// Calcolo degli elementi in scadenza e scaduti (servizi)
4665
$servizi_in_scadenza = $servizi->filter(function ($item) use ($limite_scadenze) {
4766
if (!is_array($item) || !isset($item['data_conclusione'])) {
4867
return false;
@@ -63,21 +82,48 @@
6382
return $is_expired;
6483
});
6584

66-
// Messaggi di avviso
67-
if (!$servizi_scaduti->isEmpty()) {
85+
// Calcolo degli elementi in scadenza e scaduti (risorse)
86+
$risorse_in_scadenza = $risorse->filter(function ($item) use ($limite_scadenze) {
87+
if (!is_array($item) || !isset($item['expiration_at'])) {
88+
return false;
89+
}
90+
$scadenza = Carbon::parse($item['expiration_at']);
91+
$credits_warning = isset($item['credits']) && $item['credits'] < 100 && $item['credits'] !== null;
92+
$is_expiring = $scadenza->greaterThan(Carbon::now()) && $scadenza->lessThan($limite_scadenze);
93+
94+
return $is_expiring || $credits_warning;
95+
});
96+
97+
$risorse_scadute = $risorse->filter(function ($item) {
98+
if (!is_array($item) || !isset($item['expiration_at'])) {
99+
return false;
100+
}
101+
$scadenza = Carbon::parse($item['expiration_at']);
102+
$credits_expired = isset($item['credits']) && $item['credits'] < 0;
103+
$is_expired = $scadenza->lessThan(Carbon::now());
104+
105+
return $is_expired || $credits_expired;
106+
});
107+
108+
// Totali unificati
109+
$totale_scaduti = $servizi_scaduti->count() + $risorse_scadute->count();
110+
$totale_in_scadenza = $servizi_in_scadenza->count() + $risorse_in_scadenza->count();
111+
112+
// Messaggi di avviso unificati
113+
if ($totale_scaduti > 0) {
68114
echo '
69115
<div class="alert alert-danger m-3 mb-0">
70-
<i class="fa fa-exclamation-triangle mr-2"></i>'.tr('Attenzione, alcuni elementi sono scaduti: _NUM_', [
71-
'_NUM_' => $servizi_scaduti->count(),
116+
<i class="fa fa-exclamation-triangle mr-2"></i>'.tr('Attenzione, alcuni elementi sono scaduti o hanno esaurito i crediti: _NUM_', [
117+
'_NUM_' => $totale_scaduti,
72118
]).'
73119
</div>';
74120
}
75121

76-
if (!$servizi_in_scadenza->isEmpty()) {
122+
if ($totale_in_scadenza > 0) {
77123
echo '
78124
<div class="alert alert-warning m-3 mb-0">
79-
<i class="fa fa-clock-o mr-2"></i>'.tr('Attenzione, alcuni elementi sono in scadenza: _NUM_', [
80-
'_NUM_' => $servizi_in_scadenza->count(),
125+
<i class="fa fa-clock-o mr-2"></i>'.tr('Attenzione, alcuni elementi sono in scadenza o stanno per esaurire i crediti: _NUM_', [
126+
'_NUM_' => $totale_in_scadenza,
81127
]).'
82128
</div>';
83129
}
@@ -90,11 +136,13 @@
90136
<th>'.tr('Nome').'</th>
91137
<th width="15%">'.tr('Tipo').'</th>
92138
<th width="15%">'.tr('Scadenza').'</th>
93-
<th width="20%" class="text-center"></th>
139+
<th width="20%" class="text-center">'.tr('Info').'</th>
94140
</tr>
95141
</thead>
96142
97143
<tbody>';
144+
145+
// Prima mostra i servizi
98146
foreach ($servizi as $servizio) {
99147
$scadenza = Carbon::parse($servizio['data_conclusione']);
100148
$is_expired = $scadenza->lessThan(Carbon::now());
@@ -112,118 +160,24 @@
112160
'<i class="fa fa-check-circle text-success" title="'.tr('Attivo').'"></i>');
113161

114162
$spazio_class = ($spazio_warning ? 'danger' : 'secondary');
115-
$spazio_icon = ($spazio_warning ? '<i class="fa fa-exclamation-triangle" title="'.tr('Attenzione').'"></i>' : '');
163+
$spazio_icon = ($spazio_warning ? '<i class="fa fa-exclamation-triangle" style="font-size: 0.65rem; margin-left: 4px;" title="'.tr('Attenzione').'"></i>' : '');
116164
$utenti_class = ($utenti_warning ? 'danger' : 'secondary');
117-
$utenti_icon = ($utenti_warning ? '<i class="fa fa-exclamation-triangle" title="'.tr('Attenzione').'"></i>' : '');
165+
$utenti_icon = ($utenti_warning ? '<i class="fa fa-exclamation-triangle" style="font-size: 0.65rem; margin-left: 4px;" title="'.tr('Attenzione').'"></i>' : '');
118166
echo '
119167
<tr class="'.$status_class.'">
120168
<td class="text-center">'.$status_icon.'</td>
121169
<td><strong>'.$servizio['codice'].'</strong><br><small class="text-muted">'.$servizio['nome'].'</small></td>
122-
<td><span class="badge badge-info">'.$servizio['sottocategoria'].'</span></td>
170+
<td><span class="badge badge-primary">'.$servizio['sottocategoria'].'</span><br><small class="text-muted">
123171
<td>'.dateFormat($scadenza).' <br><small class="text-muted">'.$scadenza->diffForHumans().'</small></td>
124172
<td class="text-center">
125-
'.($servizio['spazio_limite'] ? '<span class="badge badge-'.$spazio_class.'"><i class="fa fa-database mr-1"></i> '.numberFormat($spazio_utilizzato,1).' / '.numberFormat($servizio['spazio_limite'],1).' '.tr('GB').' '.$spazio_icon.'</span>' : '').'
126-
'.($servizio['utenti_limite'] ? '<br><span class="badge badge-'.$utenti_class.'"><i class="fa fa-users mr-1"></i> '.$utenti_attivi.' / '.$servizio['utenti_limite'].' '.tr('utenti').' '.$utenti_icon.'</span>' : '').'
173+
'.($servizio['spazio_limite'] ? '<div class="mb-1"><span class="badge badge-'.$spazio_class.' d-inline-flex align-items-center" style="font-size: 0.7rem; padding: 0.25rem 0.5rem; line-height: 1.2;"><i class="fa fa-database" style="font-size: 0.65rem; margin-right: 4px;"></i>'.numberFormat($spazio_utilizzato,1).' / '.numberFormat($servizio['spazio_limite'],1).' '.tr('GB').$spazio_icon.'</span></div>' : '').'
174+
'.($servizio['utenti_limite'] ? '<div><span class="badge badge-'.$utenti_class.' d-inline-flex align-items-center" style="font-size: 0.7rem; padding: 0.25rem 0.5rem; line-height: 1.2;"><i class="fa fa-users" style="font-size: 0.65rem; margin-right: 4px;"></i>'.$utenti_attivi.' / '.$servizio['utenti_limite'].' '.tr('utenti').$utenti_icon.'</span></div>' : '').'
127175
</td>
128176
</tr>';
129177
}
130178

131-
// Conteggio servizi e risorse
132-
$count_servizi = $servizi->filter(fn ($item) => !isset($item['credits']))->count();
133-
echo '
134-
</tbody>
135-
<tfoot>
136-
<tr class="table-light">
137-
<td colspan="4">
138-
<strong>'.tr('Totale elementi: _NUM_', ['_NUM_' => $servizi->count()]).'</strong>
139-
</td>
140-
<td colspan="2" class="text-right">';
141-
if (!$servizi_in_scadenza->isEmpty() || !$servizi_scaduti->isEmpty()) {
142-
echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-warning"><i class="fa fa-shopping-cart mr-1"></i>'.tr('Rinnova').'</a>';
143-
}
144-
echo '
145-
</td>
146-
</tr>
147-
</tfoot>
148-
</table>';
149-
} else {
150-
echo '
151-
<div class="alert alert-info m-3">
152-
<i class="fa fa-info-circle mr-2"></i>'.tr('Nessun servizio abilitato al momento').'.
153-
</div>';
154-
}
155-
echo '
156-
</div>
157-
</div>
158-
159-
<div class="card card-primary card-outline">
160-
<div class="card-header">
161-
<div class="card-title">
162-
<i class="fa fa-cubes mr-2"></i>'.tr('Risorse').'
163-
</div>
164-
</div>
165-
166-
<div class="card-body p-0">';
167-
168-
// Recupero di tutti i servizi e risorse attivi
169-
$servizi = Services::getRisorseAttive(true);
170-
if (!$servizi->isEmpty()) {
171-
// Calcolo degli elementi in scadenza e scaduti
172-
$servizi_in_scadenza = $servizi->filter(function ($item) use ($limite_scadenze) {
173-
if (!is_array($item) || !isset($item['expiration_at'])) {
174-
return false;
175-
}
176-
$scadenza = Carbon::parse($item['expiration_at']);
177-
$credits_warning = isset($item['credits']) && $item['credits'] < 100 && $item['credits'] !== null;
178-
$is_expiring = $scadenza->greaterThan(Carbon::now()) && $scadenza->lessThan($limite_scadenze);
179-
180-
return $is_expiring || $credits_warning;
181-
});
182-
183-
$servizi_scaduti = $servizi->filter(function ($item) {
184-
if (!is_array($item) || !isset($item['expiration_at'])) {
185-
return false;
186-
}
187-
$scadenza = Carbon::parse($item['expiration_at']);
188-
$credits_expired = isset($item['credits']) && $item['credits'] < 0;
189-
$is_expired = $scadenza->lessThan(Carbon::now());
190-
191-
return $is_expired || $credits_expired;
192-
});
193-
194-
// Messaggi di avviso
195-
if (!$servizi_scaduti->isEmpty()) {
196-
echo '
197-
<div class="alert alert-danger m-3 mb-0">
198-
<i class="fa fa-exclamation-triangle mr-2"></i>'.tr('Attenzione, alcuni elementi sono scaduti o hanno esaurito i crediti: _NUM_', [
199-
'_NUM_' => $servizi_scaduti->count(),
200-
]).'
201-
</div>';
202-
}
203-
204-
if (!$servizi_in_scadenza->isEmpty()) {
205-
echo '
206-
<div class="alert alert-warning m-3 mb-0">
207-
<i class="fa fa-clock-o mr-2"></i>'.tr('Attenzione, alcuni elementi sono in scadenza o stanno per esaurire i crediti: _NUM_', [
208-
'_NUM_' => $servizi_in_scadenza->count(),
209-
]).'
210-
</div>';
211-
}
212-
213-
echo '
214-
<table class="table table-hover table-striped table-sm mb-0">
215-
<thead>
216-
<tr>
217-
<th width="5%" class="text-center">'.tr('Stato').'</th>
218-
<th>'.tr('Nome').'</th>
219-
<th width="15%">'.tr('Tipo').'</th>
220-
<th width="15%">'.tr('Scadenza').'</th>
221-
<th width="20%" class="text-center">'.tr('#').'</th>
222-
</tr>
223-
</thead>
224-
225-
<tbody>';
226-
foreach ($servizi as $elemento) {
179+
// Poi mostra le risorse
180+
foreach ($risorse as $elemento) {
227181
// Verifica che $elemento sia un array e contenga i campi necessari
228182
if (!is_array($elemento) || !isset($elemento['expiration_at'])) {
229183
continue;
@@ -245,41 +199,39 @@
245199
$credits_class = ($credits_expired ? 'danger' : ($credits_warning ? 'warning' : 'secondary'));
246200
$credits_icon = ($credits_warning || $credits_expired ? '<i class="fa fa-exclamation-triangle" title="'.tr('Attenzione').'"></i>' : '');
247201

248-
249202
// Campi dell'elemento
250-
$codice = $elemento['code'] ?? $elemento['name'] ?? 'N/A';
251-
$nome = $elemento['name'] ?? 'N/A';
252-
$tipo = $elemento['type'] ?? $elemento['category'] ?? 'N/A';
203+
$codice = $elemento['code'];
204+
$nome = $elemento['name'];
253205

254206
// Gestione crediti: mostra solo se presenti, altrimenti "-"
255-
$crediti_display = $has_credits ?
256-
($credits_warning || $credits_expired ? '<i class="fa fa-exclamation-triangle text-warning mr-1"></i>' : '').($elemento['credits'] ?? '-') :
257-
'<span class="text-muted">-</span>';
207+
$crediti_display = $has_credits ? ($elemento['credits'] ?? '-') : 'Infiniti';
208+
$credits_warning_icon = ($credits_warning || $credits_expired) ? '<i class="fa fa-exclamation-triangle" style="font-size: 0.7rem; margin-left: 3px;"></i>' : '';
258209

259210
echo '
260211
<tr class="'.$status_class.'">
261212
<td class="text-center">'.$status_icon.'</td>
262-
<td><strong>'.$codice.'</strong><br><small class="text-muted">'.$nome.'</small></td>
263-
<td><span class="badge badge-info">'.$tipo.'</span></td>
213+
<td><strong>'.$nome.'</strong><br><small class="text-muted">'.$codice.'</small></td>
214+
<td><span class="badge badge-info">'.tr('Risorsa').'</span></td>
264215
<td>'.dateFormat($scadenza).' <br><small class="text-muted">'.$scadenza->diffForHumans().'</small></td>
265216
<td class="text-center">
266-
<span class="badge badge-'.$credits_class.'">'.$crediti_display.' '.tr('Crediti').' '.$credits_icon.'</span>
217+
<span class="badge badge-'.$credits_class.' d-inline-flex align-items-center" style="font-size: 0.75rem;">'.$crediti_display.' '.tr('Crediti').' '.$credits_warning_icon.'</span>
267218
</td>
268219
</tr>';
269220
}
270221

271-
// Conteggio servizi e risorse
272-
$count_servizi = $servizi->filter(fn ($item) => !isset($item['credits']))->count();
273-
274222
echo '
275223
</tbody>
276224
<tfoot>
277225
<tr class="table-light">
278226
<td colspan="4">
279-
<strong>'.tr('Totale elementi: _NUM_', ['_NUM_' => $servizi->count()]).'</strong>
227+
<strong>'.tr('Totale elementi: _NUM_ (_SERVIZI_ servizi, _RISORSE_ risorse)', [
228+
'_NUM_' => $tutti_elementi->count(),
229+
'_SERVIZI_' => $servizi->count(),
230+
'_RISORSE_' => $risorse->count()
231+
]).'</strong>
280232
</td>
281-
<td colspan="2" class="text-right">';
282-
if (!$servizi_in_scadenza->isEmpty() || !$servizi_scaduti->isEmpty()) {
233+
<td class="text-right">';
234+
if ($totale_in_scadenza > 0 || $totale_scaduti > 0) {
283235
echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-warning"><i class="fa fa-shopping-cart mr-1"></i>'.tr('Rinnova').'</a>';
284236
}
285237
echo '
@@ -291,7 +243,7 @@
291243
} else {
292244
echo '
293245
<div class="alert alert-info m-3">
294-
<i class="fa fa-info-circle mr-2"></i>'.tr('Nessun servizio OSMCloud abilitato al momento').'.
246+
<i class="fa fa-info-circle mr-2"></i>'.tr('Nessun servizio o risorsa OSMCloud abilitato al momento').'.
295247
</div>';
296248
}
297249
echo '

0 commit comments

Comments
 (0)