Roberto Santini 6 saat önce
ebeveyn
işleme
8f89633e21

+ 3
- 0
app/DataTables/ContrattoServizioDataTableEditor.php Dosyayı Görüntüle

100
         if (empty($data['periodo']) && $tpl->periodo) {
100
         if (empty($data['periodo']) && $tpl->periodo) {
101
           $data['periodo'] = $tpl->periodo;
101
           $data['periodo'] = $tpl->periodo;
102
         }
102
         }
103
+        if (! array_key_exists('ore_illimitate', $data) && ($this->prevTemplateId === null || (int) $data['contratto_template_id'] !== (int) $this->prevTemplateId)) {
104
+          $data['ore_illimitate'] = $tpl->haOreIllimitate();
105
+        }
103
       }
106
       }
104
     }
107
     }
105
 
108
 

+ 6
- 0
app/Http/Controllers/ContrattoServizioController.php Dosyayı Görüntüle

73
       'nome' => 'nullable|string|max:255',
73
       'nome' => 'nullable|string|max:255',
74
       'costo' => 'nullable|numeric|min:0',
74
       'costo' => 'nullable|numeric|min:0',
75
       'periodo' => 'nullable|string|max:50',
75
       'periodo' => 'nullable|string|max:50',
76
+      'ore_illimitate' => 'nullable|boolean',
76
       'data_inizio' => 'nullable|date',
77
       'data_inizio' => 'nullable|date',
77
       'data_fine' => 'nullable|date|after_or_equal:data_inizio',
78
       'data_fine' => 'nullable|date|after_or_equal:data_inizio',
78
       'note' => 'nullable|string',
79
       'note' => 'nullable|string',
132
       'nome' => 'nullable|string|max:255',
133
       'nome' => 'nullable|string|max:255',
133
       'costo' => 'nullable|numeric|min:0',
134
       'costo' => 'nullable|numeric|min:0',
134
       'periodo' => 'nullable|string|max:50',
135
       'periodo' => 'nullable|string|max:50',
136
+      'ore_illimitate' => 'nullable|boolean',
135
       'data_inizio' => 'nullable|date',
137
       'data_inizio' => 'nullable|date',
136
       'data_fine' => 'nullable|date|after_or_equal:data_inizio',
138
       'data_fine' => 'nullable|date|after_or_equal:data_inizio',
137
       'note' => 'nullable|string',
139
       'note' => 'nullable|string',
251
       ? $validated['costo']
253
       ? $validated['costo']
252
       : null;
254
       : null;
253
     $contratto->periodo = $validated['periodo'] ?? null;
255
     $contratto->periodo = $validated['periodo'] ?? null;
256
+    $contratto->ore_illimitate = request()->boolean('ore_illimitate');
254
     $contratto->data_inizio = $validated['data_inizio'] ?? null;
257
     $contratto->data_inizio = $validated['data_inizio'] ?? null;
255
     $contratto->data_fine = $validated['data_fine'] ?? null;
258
     $contratto->data_fine = $validated['data_fine'] ?? null;
256
     $contratto->note = $validated['note'] ?? null;
259
     $contratto->note = $validated['note'] ?? null;
270
         if (empty($contratto->periodo) && $tpl->periodo) {
273
         if (empty($contratto->periodo) && $tpl->periodo) {
271
           $contratto->periodo = $tpl->periodo;
274
           $contratto->periodo = $tpl->periodo;
272
         }
275
         }
276
+        if (! request()->exists('ore_illimitate') && $tpl->haOreIllimitate()) {
277
+          $contratto->ore_illimitate = true;
278
+        }
273
       }
279
       }
274
     }
280
     }
275
   }
281
   }

+ 3
- 0
app/Http/Controllers/ContrattoTemplateController.php Dosyayı Görüntüle

131
         'text' => $t->label,
131
         'text' => $t->label,
132
         'costo_base' => $t->costo_base,
132
         'costo_base' => $t->costo_base,
133
         'periodo' => $t->periodo,
133
         'periodo' => $t->periodo,
134
+        'ore_illimitate' => $t->haOreIllimitate(),
134
         'nome' => $t->nome,
135
         'nome' => $t->nome,
135
       ])->values(),
136
       ])->values(),
136
     ]);
137
     ]);
143
       'nome' => 'required|string|max:255',
144
       'nome' => 'required|string|max:255',
144
       'descrizione' => 'nullable|string',
145
       'descrizione' => 'nullable|string',
145
       'periodo' => 'nullable|string|max:50',
146
       'periodo' => 'nullable|string|max:50',
147
+      'ore_illimitate' => 'nullable|boolean',
146
       'costo_base' => 'nullable|numeric|min:0',
148
       'costo_base' => 'nullable|numeric|min:0',
147
       'attivo' => 'nullable|boolean',
149
       'attivo' => 'nullable|boolean',
148
       'todos' => 'nullable|array',
150
       'todos' => 'nullable|array',
172
     $template->nome = $validated['nome'];
174
     $template->nome = $validated['nome'];
173
     $template->descrizione = $validated['descrizione'] ?? null;
175
     $template->descrizione = $validated['descrizione'] ?? null;
174
     $template->periodo = $validated['periodo'] ?? null;
176
     $template->periodo = $validated['periodo'] ?? null;
177
+    $template->ore_illimitate = request()->boolean('ore_illimitate');
175
     $template->costo_base = $validated['costo_base'] ?? null;
178
     $template->costo_base = $validated['costo_base'] ?? null;
176
     $template->attivo = array_key_exists('attivo', $validated)
179
     $template->attivo = array_key_exists('attivo', $validated)
177
       ? filter_var($validated['attivo'], FILTER_VALIDATE_BOOLEAN)
180
       ? filter_var($validated['attivo'], FILTER_VALIDATE_BOOLEAN)

+ 1
- 0
app/Http/Controllers/SegnalazioneController.php Dosyayı Görüntüle

112
           'ore_rimanenti_label' => Config::formatTempo((int) round(max(0, $rimanenti) * 60)),
112
           'ore_rimanenti_label' => Config::formatTempo((int) round(max(0, $rimanenti) * 60)),
113
           'periodo' => $cs->periodo_ore,
113
           'periodo' => $cs->periodo_ore,
114
           'periodo_label' => $cs->periodo_riferimento_label,
114
           'periodo_label' => $cs->periodo_riferimento_label,
115
+          'ore_illimitate' => $cs->haOreIllimitate(),
115
         ];
116
         ];
116
       })
117
       })
117
       ->values();
118
       ->values();

+ 15
- 0
app/Models/ContrattoServizio.php Dosyayı Görüntüle

5
 
5
 
6
 class ContrattoServizio extends \App\Models\AbstractModels\AbstractContrattoServizio
6
 class ContrattoServizio extends \App\Models\AbstractModels\AbstractContrattoServizio
7
 {
7
 {
8
+    protected function casts(): array
9
+    {
10
+        return array_merge(parent::casts(), [
11
+            'ore_illimitate' => 'boolean',
12
+        ]);
13
+    }
14
+
15
+    /**
16
+     * Il canone comprende tutto il tempo dei ticket collegati, senza monte ore.
17
+     */
18
+    public function haOreIllimitate(): bool
19
+    {
20
+        return (bool) $this->ore_illimitate;
21
+    }
22
+
8
     protected static function booted(): void
23
     protected static function booted(): void
9
     {
24
     {
10
         static::saving(function (self $contratto) {
25
         static::saving(function (self $contratto) {

+ 12
- 0
app/Models/ContrattoTemplate.php Dosyayı Görüntüle

3
 
3
 
4
 class ContrattoTemplate extends \App\Models\AbstractModels\AbstractContrattoTemplate
4
 class ContrattoTemplate extends \App\Models\AbstractModels\AbstractContrattoTemplate
5
 {
5
 {
6
+    protected function casts(): array
7
+    {
8
+        return array_merge(parent::casts(), [
9
+            'ore_illimitate' => 'boolean',
10
+        ]);
11
+    }
12
+
13
+    public function haOreIllimitate(): bool
14
+    {
15
+        return (bool) $this->ore_illimitate;
16
+    }
17
+
6
     public const PERIODI = [
18
     public const PERIODI = [
7
         'mensile' => 'Mensile',
19
         'mensile' => 'Mensile',
8
         'trimestrale' => 'Trimestrale',
20
         'trimestrale' => 'Trimestrale',

+ 13
- 0
app/Services/FatturazioneGeneraService.php Dosyayı Görüntüle

449
 
449
 
450
         if ($segnalazione->contratto_servizio_id && $segnalazione->contrattoServizio) {
450
         if ($segnalazione->contratto_servizio_id && $segnalazione->contrattoServizio) {
451
             $contratto = $segnalazione->contrattoServizio;
451
             $contratto = $segnalazione->contrattoServizio;
452
+            if ($contratto->haOreIllimitate()) {
453
+                return $this->conCostoUscita([
454
+                    'copertura' => 'contratto',
455
+                    'minuti_coperti' => $minuti,
456
+                    'minuti_fatturare' => 0,
457
+                    'tariffa' => null,
458
+                    'importo_tempo' => 0.0,
459
+                    'importo_spesa' => $fatturaSpesa,
460
+                    'tariffa_mancante' => false,
461
+                    'note' => 'Compreso nel canone, senza limite di ore',
462
+                ], $annotazione, $segnalazione);
463
+            }
464
+
452
             [$wFrom, $wTo] = $contratto->intervalloPeriodoOrePerData($data);
465
             [$wFrom, $wTo] = $contratto->intervalloPeriodoOrePerData($data);
453
             $poolKey = 'c:'.$contratto->id.':'.$this->chiaveFinestra($wFrom, $wTo);
466
             $poolKey = 'c:'.$contratto->id.':'.$this->chiaveFinestra($wFrom, $wTo);
454
             if (! isset($pools[$poolKey])) {
467
             if (! isset($pools[$poolKey])) {

+ 22
- 0
database/migrations/2026_11_03_154500_add_ore_illimitate_to_contratto_servizio.php Dosyayı Görüntüle

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    public function up(): void
10
+    {
11
+        Schema::table('contratto_servizio', function (Blueprint $table) {
12
+            $table->boolean('ore_illimitate')->default(false)->after('periodo');
13
+        });
14
+    }
15
+
16
+    public function down(): void
17
+    {
18
+        Schema::table('contratto_servizio', function (Blueprint $table) {
19
+            $table->dropColumn('ore_illimitate');
20
+        });
21
+    }
22
+};

+ 22
- 0
database/migrations/2026_11_03_154800_add_ore_illimitate_to_contratto_template.php Dosyayı Görüntüle

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    public function up(): void
10
+    {
11
+        Schema::table('contratto_template', function (Blueprint $table) {
12
+            $table->boolean('ore_illimitate')->default(false)->after('periodo');
13
+        });
14
+    }
15
+
16
+    public function down(): void
17
+    {
18
+        Schema::table('contratto_template', function (Blueprint $table) {
19
+            $table->dropColumn('ore_illimitate');
20
+        });
21
+    }
22
+};

+ 13
- 0
resources/views/contratto_servizio/create.blade.php Dosyayı Görüntüle

60
               data-nome="{{ $t->nome }}"
60
               data-nome="{{ $t->nome }}"
61
               data-costo="{{ $t->costo_base }}"
61
               data-costo="{{ $t->costo_base }}"
62
               data-periodo="{{ $t->periodo }}"
62
               data-periodo="{{ $t->periodo }}"
63
+              data-ore-illimitate="{{ $t->haOreIllimitate() ? '1' : '0' }}"
63
               @selected((string)old('contratto_template_id') === (string)$t->id)>{{ $t->label }}</option>
64
               @selected((string)old('contratto_template_id') === (string)$t->id)>{{ $t->label }}</option>
64
             @endforeach
65
             @endforeach
65
           </select>
66
           </select>
90
             @endforeach
91
             @endforeach
91
           </select>
92
           </select>
92
         </div>
93
         </div>
94
+        <div class="col-md-4">
95
+          <label class="form-label d-block">Ticket compresi</label>
96
+          <div class="form-check form-switch mt-2">
97
+            <input type="hidden" name="ore_illimitate" value="0">
98
+            <input class="form-check-input" type="checkbox" name="ore_illimitate" value="1" id="ore_illimitate"
99
+              @checked(old('ore_illimitate'))>
100
+            <label class="form-check-label" for="ore_illimitate">Ore illimitate, comprese nel canone</label>
101
+          </div>
102
+          <div class="form-text">Il tempo dei ticket collegati non si fattura. Costi e uscite restano a parte.</div>
103
+        </div>
93
         <div class="col-md-2">
104
         <div class="col-md-2">
94
           <label class="form-label d-block">Attivo</label>
105
           <label class="form-label d-block">Attivo</label>
95
           <div class="form-check form-switch mt-2">
106
           <div class="form-check form-switch mt-2">
155
     if (!nome.value) nome.value = opt.dataset.nome || '';
166
     if (!nome.value) nome.value = opt.dataset.nome || '';
156
     if (!costo.value && opt.dataset.costo) costo.value = opt.dataset.costo;
167
     if (!costo.value && opt.dataset.costo) costo.value = opt.dataset.costo;
157
     if (!periodo.value && opt.dataset.periodo) periodo.value = opt.dataset.periodo;
168
     if (!periodo.value && opt.dataset.periodo) periodo.value = opt.dataset.periodo;
169
+    const ore = document.getElementById('ore_illimitate');
170
+    if (ore) ore.checked = opt.dataset.oreIllimitate === '1';
158
   });
171
   });
159
 
172
 
160
   toggleOrigine();
173
   toggleOrigine();

+ 12
- 1
resources/views/contratto_servizio/form.blade.php Dosyayı Görüntüle

184
           <label class="form-label">Costo (€)</label>
184
           <label class="form-label">Costo (€)</label>
185
           <input type="number" step="0.01" min="0" name="costo" id="contratto_costo" class="form-control"
185
           <input type="number" step="0.01" min="0" name="costo" id="contratto_costo" class="form-control"
186
             value="{{ old('costo', $contratto->canone ?: $contratto->costo) }}">
186
             value="{{ old('costo', $contratto->canone ?: $contratto->costo) }}">
187
-          <div class="form-text">Canone del contratto. Se i servizi hanno un prezzo, viene ricalcolato da quelli. Se le ore sono comprese (prezzo vuoto), indica qui l’importo (es. 1200 €).</div>
187
+          <div class="form-text">Canone del contratto. Se i servizi hanno un prezzo, viene ricalcolato da quelli. Se le ore sono comprese (prezzo vuoto), indica qui l’importo (es. 170 €).</div>
188
         </div>
188
         </div>
189
         <div class="col-md-3">
189
         <div class="col-md-3">
190
           <label class="form-label">Periodo</label>
190
           <label class="form-label">Periodo</label>
205
           <input type="date" name="data_fine" id="contratto_data_fine" class="form-control"
205
           <input type="date" name="data_fine" id="contratto_data_fine" class="form-control"
206
             value="{{ old('data_fine', optional($contratto->data_fine)->format('Y-m-d') ?? $contratto->data_fine) }}">
206
             value="{{ old('data_fine', optional($contratto->data_fine)->format('Y-m-d') ?? $contratto->data_fine) }}">
207
         </div>
207
         </div>
208
+        <div class="col-md-4">
209
+          <label class="form-label d-block">Ticket compresi</label>
210
+          <div class="form-check form-switch mt-2">
211
+            <input type="hidden" name="ore_illimitate" value="0">
212
+            <input class="form-check-input" type="checkbox" name="ore_illimitate" value="1" id="ore_illimitate"
213
+              @checked(old('ore_illimitate', $contratto->haOreIllimitate()))>
214
+            <label class="form-check-label" for="ore_illimitate">Ore illimitate, comprese nel canone</label>
215
+          </div>
216
+          <div class="form-text">Il tempo dei ticket collegati non si fattura. Costi e uscite restano a parte.</div>
217
+        </div>
208
         <div class="col-md-2">
218
         <div class="col-md-2">
209
           <label class="form-label d-block">Attivo</label>
219
           <label class="form-label d-block">Attivo</label>
210
           <div class="form-check form-switch mt-2">
220
           <div class="form-check form-switch mt-2">
241
           Se l’unità è già un tempo (mese, anno) o un forfait, il periodo non compare.<br>
251
           Se l’unità è già un tempo (mese, anno) o un forfait, il periodo non compare.<br>
242
           <strong>A consumo</strong> = solo tariffa extra (es. 40 €/ora): non è un monte ore e non entra nel canone. Le ore extra sulle segnalazioni si fatturano a parte.<br>
252
           <strong>A consumo</strong> = solo tariffa extra (es. 40 €/ora): non è un monte ore e non entra nel canone. Le ore extra sulle segnalazioni si fatturano a parte.<br>
243
           <strong>Ore comprese nel canone:</strong> una riga con le ore (es. 12, U.M. ora, periodo annuale) e <em>prezzo vuoto</em>. Il cliente vede “compreso”, non 12 × 100 €. Il canone sta nel campo <em>Costo</em> in testata (es. 1200 €). L’extra è a consumo.<br>
253
           <strong>Ore comprese nel canone:</strong> una riga con le ore (es. 12, U.M. ora, periodo annuale) e <em>prezzo vuoto</em>. Il cliente vede “compreso”, non 12 × 100 €. Il canone sta nel campo <em>Costo</em> in testata (es. 1200 €). L’extra è a consumo.<br>
254
+          <strong>Senza limite di ore:</strong> spunta <em>Ore illimitate</em> in testata (es. servizio web 170 €/anno). Tutti i ticket collegati sono coperti, qualunque tempo ci sia sopra.<br>
244
           <strong>Validità</strong> (Dal → Al, sotto il prodotto) = da quando vale questa riga. Vuoto = tutta la durata del contratto.
255
           <strong>Validità</strong> (Dal → Al, sotto il prodotto) = da quando vale questa riga. Vuoto = tutta la durata del contratto.
245
           Per un aumento tariffe: chiudi la riga vecchia con <em>Al</em>, aggiungine una nuova con <em>Dal</em> e il prezzo aggiornato.
256
           Per un aumento tariffe: chiudi la riga vecchia con <em>Al</em>, aggiungine una nuova con <em>Dal</em> e il prezzo aggiornato.
246
         </p>
257
         </p>

+ 3
- 0
resources/views/contratto_servizio/pdf.blade.php Dosyayı Görüntüle

40
         <span class="muted">Periodo: {{ $contratto->periodo_label }}</span>
40
         <span class="muted">Periodo: {{ $contratto->periodo_label }}</span>
41
         <br>
41
         <br>
42
         <span class="muted">Costo: {{ number_format($contratto->canone, 2, ',', '.') }} €</span>
42
         <span class="muted">Costo: {{ number_format($contratto->canone, 2, ',', '.') }} €</span>
43
+        @if($contratto->haOreIllimitate())
44
+        <br><span class="muted">Ticket compresi senza limite di ore</span>
45
+        @endif
43
       </td>
46
       </td>
44
     </tr>
47
     </tr>
45
   </table>
48
   </table>

+ 3
- 0
resources/views/contratto_servizio/show.blade.php Dosyayı Görüntüle

88
         <p class="mb-1"><strong>Costo:</strong>
88
         <p class="mb-1"><strong>Costo:</strong>
89
           {{ number_format($contratto->canone, 2, ',', '.') }} €
89
           {{ number_format($contratto->canone, 2, ',', '.') }} €
90
         </p>
90
         </p>
91
+        @if($contratto->haOreIllimitate())
92
+        <p class="mb-1"><strong>Ticket:</strong> ore illimitate, comprese nel canone</p>
93
+        @endif
91
         <p class="mb-1"><strong>Validità:</strong>
94
         <p class="mb-1"><strong>Validità:</strong>
92
           {{ $contratto->data_inizio ? \Carbon\Carbon::parse($contratto->data_inizio)->format('d/m/Y') : '—' }}
95
           {{ $contratto->data_inizio ? \Carbon\Carbon::parse($contratto->data_inizio)->format('d/m/Y') : '—' }}
93
           →
96
           →

+ 11
- 1
resources/views/contratto_template/form.blade.php Dosyayı Görüntüle

41
           <label class="form-label">Costo base (€)</label>
41
           <label class="form-label">Costo base (€)</label>
42
           <input type="number" step="0.01" min="0" name="costo_base" class="form-control" value="{{ old('costo_base', $template->costo_base) }}">
42
           <input type="number" step="0.01" min="0" name="costo_base" class="form-control" value="{{ old('costo_base', $template->costo_base) }}">
43
         </div>
43
         </div>
44
+        <div class="col-md-4">
45
+          <label class="form-label d-block">Ticket compresi</label>
46
+          <div class="form-check form-switch mt-2">
47
+            <input type="hidden" name="ore_illimitate" value="0">
48
+            <input class="form-check-input" type="checkbox" name="ore_illimitate" value="1" id="ore_illimitate"
49
+              @checked(old('ore_illimitate', $template->haOreIllimitate()))>
50
+            <label class="form-check-label" for="ore_illimitate">Ore illimitate, comprese nel canone</label>
51
+          </div>
52
+          <div class="form-text">I contratti creati da questo template ereditano l’opzione. Il tempo dei ticket non si fattura.</div>
53
+        </div>
44
         <div class="col-md-2">
54
         <div class="col-md-2">
45
           <label class="form-label d-block">Attivo</label>
55
           <label class="form-label d-block">Attivo</label>
46
           <div class="form-check form-switch mt-2">
56
           <div class="form-check form-switch mt-2">
60
     <div class="card-header d-flex justify-content-between align-items-center">
70
     <div class="card-header d-flex justify-content-between align-items-center">
61
       <div>
71
       <div>
62
         <h5 class="mb-0">Servizi / prodotti inclusi</h5>
72
         <h5 class="mb-0">Servizi / prodotti inclusi</h5>
63
-        <small class="text-muted">Dal catalogo; verranno importati sul contratto cliente. Periodo <em>A consumo</em> = tariffa extra, senza monte ore e fuori canone.</small>
73
+        <small class="text-muted">Dal catalogo; verranno importati sul contratto cliente. Periodo <em>A consumo</em> = tariffa extra, senza monte ore e fuori canone. Con <em>Ore illimitate</em> il canone copre tutto il tempo dei ticket.</small>
64
       </div>
74
       </div>
65
       <button type="button" class="btn btn-sm btn-outline-primary" id="add-riga-row"><i class="bx bx-plus"></i> Aggiungi</button>
75
       <button type="button" class="btn btn-sm btn-outline-primary" id="add-riga-row"><i class="bx bx-plus"></i> Aggiungi</button>
66
     </div>
76
     </div>

+ 3
- 0
resources/views/contratto_template/show.blade.php Dosyayı Görüntüle

25
           @if($template->costo_base !== null)
25
           @if($template->costo_base !== null)
26
           <span class="badge bg-label-primary">{{ number_format((float)$template->costo_base, 2, ',', '.') }} €</span>
26
           <span class="badge bg-label-primary">{{ number_format((float)$template->costo_base, 2, ',', '.') }} €</span>
27
           @endif
27
           @endif
28
+          @if($template->haOreIllimitate())
29
+          <span class="badge bg-label-info">Ore illimitate</span>
30
+          @endif
28
           @if($template->attivo)
31
           @if($template->attivo)
29
           <span class="badge bg-label-success">Attivo</span>
32
           <span class="badge bg-label-success">Attivo</span>
30
           @else
33
           @else

+ 12
- 1
resources/views/segnalazione/admin/nuova.blade.php Dosyayı Görüntüle

525
           totali_label: item.ore_totali_label,
525
           totali_label: item.ore_totali_label,
526
           usate_label: item.ore_usate_label,
526
           usate_label: item.ore_usate_label,
527
           rimanenti_label: item.ore_rimanenti_label,
527
           rimanenti_label: item.ore_rimanenti_label,
528
-          periodo_label: item.periodo_label || ''
528
+          periodo_label: item.periodo_label || '',
529
+          illimitate: !!item.ore_illimitate
529
         });
530
         });
530
         $el.append($opt);
531
         $el.append($opt);
531
       });
532
       });
541
       }
542
       }
542
       const rimanenti = Number(ore.rimanenti || 0);
543
       const rimanenti = Number(ore.rimanenti || 0);
543
       const totali = Number(ore.totali || 0);
544
       const totali = Number(ore.totali || 0);
545
+      if (selectId === '#contratto_servizio_id' && ore.illimitate) {
546
+        $info
547
+          .removeClass('d-none border-info border-warning border-danger')
548
+          .addClass('border-info')
549
+          .html(
550
+            '<div class="fw-semibold mb-1">Contratto</div>' +
551
+            '<div class="text-muted">Ore illimitate, comprese nel canone. Il tempo dei ticket non si fattura.</div>'
552
+          );
553
+        return;
554
+      }
544
       if (selectId === '#contratto_servizio_id' && totali <= 0) {
555
       if (selectId === '#contratto_servizio_id' && totali <= 0) {
545
         $info
556
         $info
546
           .removeClass('d-none border-info border-warning border-danger')
557
           .removeClass('d-none border-info border-warning border-danger')

+ 6
- 2
resources/views/segnalazione/admin/show.blade.php Dosyayı Görüntüle

669
             <div class="fw-semibold mb-1">
669
             <div class="fw-semibold mb-1">
670
               <span class="badge bg-label-success"><i class="bx bx-check me-1"></i>{{ $csOre->label }}</span>
670
               <span class="badge bg-label-success"><i class="bx bx-check me-1"></i>{{ $csOre->label }}</span>
671
             </div>
671
             </div>
672
-            @if($csOre->ore_totali > 0)
672
+            @if($csOre->haOreIllimitate())
673
+            <div class="small mb-0 text-muted">Ore illimitate, comprese nel canone</div>
674
+            @elseif($csOre->ore_totali > 0)
673
             <div class="small mb-0">
675
             <div class="small mb-0">
674
               <span class="text-muted">Ore rimanenti{{ $csOre->periodo_riferimento_label ? ' ('.$csOre->periodo_riferimento_label.')' : '' }}:</span>
676
               <span class="text-muted">Ore rimanenti{{ $csOre->periodo_riferimento_label ? ' ('.$csOre->periodo_riferimento_label.')' : '' }}:</span>
675
               <strong class="{{ $csRimanentiNegativi ? 'text-danger' : '' }}">
677
               <strong class="{{ $csRimanentiNegativi ? 'text-danger' : '' }}">
690
             <div class="fw-semibold mb-1">
692
             <div class="fw-semibold mb-1">
691
               <span class="badge bg-label-success"><i class="bx bx-check me-1"></i>{{ $csOre->label }}</span>
693
               <span class="badge bg-label-success"><i class="bx bx-check me-1"></i>{{ $csOre->label }}</span>
692
             </div>
694
             </div>
693
-            @if($csOre->ore_totali > 0)
695
+            @if($csOre->haOreIllimitate())
696
+            <div class="small mb-0 text-muted">Ore illimitate, comprese nel canone</div>
697
+            @elseif($csOre->ore_totali > 0)
694
             <div class="small mb-0">
698
             <div class="small mb-0">
695
               <span class="text-muted">Ore rimanenti{{ $csOre->periodo_riferimento_label ? ' ('.$csOre->periodo_riferimento_label.')' : '' }}:</span>
699
               <span class="text-muted">Ore rimanenti{{ $csOre->periodo_riferimento_label ? ' ('.$csOre->periodo_riferimento_label.')' : '' }}:</span>
696
               <strong class="{{ $csRimanentiNegativi ? 'text-danger' : '' }}">
700
               <strong class="{{ $csRimanentiNegativi ? 'text-danger' : '' }}">

Loading…
İptal
Kaydet