Roberto Santini 1 день назад
Родитель
Сommit
55d61b1923

+ 5
- 4
app/DataTables/TempoImpiegatoDataTable.php Просмотреть файл

11
 use Yajra\DataTables\Html\Column;
11
 use Yajra\DataTables\Html\Column;
12
 use Yajra\DataTables\Html\Editor\Editor;
12
 use Yajra\DataTables\Html\Editor\Editor;
13
 use Yajra\DataTables\Html\Editor\Fields;
13
 use Yajra\DataTables\Html\Editor\Fields;
14
+use Yajra\DataTables\Html\Editor\Fields\Options;
14
 use Yajra\DataTables\Services\DataTable;
15
 use Yajra\DataTables\Services\DataTable;
15
 use Illuminate\Support\Facades\Auth;
16
 use Illuminate\Support\Facades\Auth;
16
 use Illuminate\Support\Str;
17
 use Illuminate\Support\Str;
199
                            }']),
200
                            }']),
200
           Fields\Text::make('tempo_minuti_label', 'Tempo impiegato (1,50 o 1h30m)'),
201
           Fields\Text::make('tempo_minuti_label', 'Tempo impiegato (1,50 o 1h30m)'),
201
           Fields\DateTime::make('tempo_data', 'Data/ora')->format('DD/MM/YYYY HH:mm')->default(Carbon::now()->format('d/m/Y H:i')),
202
           Fields\DateTime::make('tempo_data', 'Data/ora')->format('DD/MM/YYYY HH:mm')->default(Carbon::now()->format('d/m/Y H:i')),
202
-          Fields\Select::make('non_fatturare', 'Fatturazione')->options([
203
+          Fields\Select::make('non_fatturare', 'Fatturazione')->options(Options::from([
203
             '0' => 'Fatturare',
204
             '0' => 'Fatturare',
204
             '1' => 'Non fatturare',
205
             '1' => 'Non fatturare',
205
-          ])->default('0'),
206
-          Fields\Select::make('costo_uscita', 'Costo d\'uscita ('.Config::formatCosto(Config::costoUscitaDefault()).')')->options([
206
+          ]))->default('0'),
207
+          Fields\Select::make('costo_uscita', 'Costo d\'uscita ('.Config::formatCosto(Config::costoUscitaDefault()).')')->options(Options::from([
207
             '0' => 'No',
208
             '0' => 'No',
208
             '1' => 'Sì',
209
             '1' => 'Sì',
209
-          ])->default('0'),
210
+          ]))->default('0'),
210
           Fields\TextArea::make('text', 'Note')->type('quill'),
211
           Fields\TextArea::make('text', 'Note')->type('quill'),
211
           Fields\Select2::make('segnalazione_id', 'Segnalazione')
212
           Fields\Select2::make('segnalazione_id', 'Segnalazione')
212
           ->default($this->segnalazione ? $this->segnalazione->id : 0)
213
           ->default($this->segnalazione ? $this->segnalazione->id : 0)

+ 15
- 2
app/Services/FatturazioneGeneraService.php Просмотреть файл

612
         if ($allocazione['importo_spesa'] > 0) {
612
         if ($allocazione['importo_spesa'] > 0) {
613
             $cliente['voci'][] = [
613
             $cliente['voci'][] = [
614
                 'tipo' => FatturaRiga::TIPO_SPESA,
614
                 'tipo' => FatturaRiga::TIPO_SPESA,
615
-                'descrizione' => $this->titoloSegnalazione($segnalazione),
615
+                'descrizione' => $this->descrizioneCosto($annotazione, $segnalazione),
616
                 'quantita' => 1,
616
                 'quantita' => 1,
617
                 'unita_misura' => 'forfait',
617
                 'unita_misura' => 'forfait',
618
                 'prezzo_unitario' => $allocazione['importo_spesa'],
618
                 'prezzo_unitario' => $allocazione['importo_spesa'],
1175
 
1175
 
1176
     /**
1176
     /**
1177
      * Una riga per tipo di ticket (es. Assistenza remota), con le ore sommate.
1177
      * Una riga per tipo di ticket (es. Assistenza remota), con le ore sommate.
1178
+     * I costi restano una riga ciascuno, con la propria descrizione.
1178
      *
1179
      *
1179
      * @param  array<int, array<string, mixed>>  $voci
1180
      * @param  array<int, array<string, mixed>>  $voci
1180
      * @return array<int, array<string, mixed>>
1181
      * @return array<int, array<string, mixed>>
1185
             FatturaRiga::TIPO_TEMPO,
1186
             FatturaRiga::TIPO_TEMPO,
1186
             FatturaRiga::TIPO_EXTRA_CONTRATTO,
1187
             FatturaRiga::TIPO_EXTRA_CONTRATTO,
1187
             FatturaRiga::TIPO_EXTRA_ORDINE,
1188
             FatturaRiga::TIPO_EXTRA_ORDINE,
1188
-            FatturaRiga::TIPO_SPESA,
1189
             FatturaRiga::TIPO_USCITA,
1189
             FatturaRiga::TIPO_USCITA,
1190
         ];
1190
         ];
1191
         $gruppi = [];
1191
         $gruppi = [];
1246
         return $titolo !== '' ? $titolo : 'Ticket';
1246
         return $titolo !== '' ? $titolo : 'Ticket';
1247
     }
1247
     }
1248
 
1248
 
1249
+    protected function descrizioneCosto(Annotazione $annotazione, $segnalazione): string
1250
+    {
1251
+        $descrizione = trim((string) ($annotazione->costo_descrizione ?? ''));
1252
+        if ($descrizione === '') {
1253
+            $descrizione = $this->titoloSegnalazione($segnalazione);
1254
+        }
1255
+        if (mb_strlen($descrizione) > 255) {
1256
+            $descrizione = mb_substr($descrizione, 0, 252).'…';
1257
+        }
1258
+
1259
+        return $descrizione;
1260
+    }
1261
+
1249
     /**
1262
     /**
1250
      * @param  array<int, array<string, mixed>>  $voci
1263
      * @param  array<int, array<string, mixed>>  $voci
1251
      * @return array<int, array{annotazione_id: int, titolo: string, data: string, minuti_ticket: int, minuti_fatturati: int, uscita: ?float}>
1264
      * @return array<int, array{annotazione_id: int, titolo: string, data: string, minuti_ticket: int, minuti_fatturati: int, uscita: ?float}>

+ 1
- 1
resources/views/fatturazione/partials/cliente.blade.php Просмотреть файл

32
         <input type="hidden" name="data_a" value="{{ $data_a }}">
32
         <input type="hidden" name="data_a" value="{{ $data_a }}">
33
         <label class="form-check form-check-inline mb-0 me-2">
33
         <label class="form-check form-check-inline mb-0 me-2">
34
           <input class="form-check-input" type="checkbox" name="accorpa_segnalazioni" value="1">
34
           <input class="form-check-input" type="checkbox" name="accorpa_segnalazioni" value="1">
35
-          <span class="form-check-label">Accorpa le voci dei ticket per tipo</span>
35
+          <span class="form-check-label">Accorpa le ore dei ticket per tipo</span>
36
         </label>
36
         </label>
37
         <button type="submit" class="btn btn-primary btn-sm">
37
         <button type="submit" class="btn btn-primary btn-sm">
38
           <i class="bx bx-receipt me-1"></i>Crea fattura ({{ Config::formatCosto($cliente['totale']) }} imponibile)
38
           <i class="bx bx-receipt me-1"></i>Crea fattura ({{ Config::formatCosto($cliente['totale']) }} imponibile)

Загрузка…
Отмена
Сохранить