Roberto Santini 12 часов назад
Родитель
Сommit
a548684d09

+ 4
- 2
app/Http/Controllers/ConfigController.php Просмотреть файл

99
         }
99
         }
100
 
100
 
101
         if ($config->type === 'aliquote') {
101
         if ($config->type === 'aliquote') {
102
-          Config::impostaAliquotaDefault((int) $request->input('fic_aliquota_default', 0));
102
+          if ($request->has('fic_aliquota_default')) {
103
+            Config::impostaAliquotaDefault((int) $request->input('fic_aliquota_default'));
104
+          }
103
           continue;
105
           continue;
104
         }
106
         }
105
 
107
 
123
     try {
125
     try {
124
       $catalogo = Config::salvaAliquoteDaFic(
126
       $catalogo = Config::salvaAliquoteDaFic(
125
         $fic->vatTypes(),
127
         $fic->vatTypes(),
126
-        (int) $request->input('fic_aliquota_default', 0)
128
+        $request->has('fic_aliquota_default') ? (int) $request->input('fic_aliquota_default') : null
127
       );
129
       );
128
     } catch (RuntimeException $e) {
130
     } catch (RuntimeException $e) {
129
       return redirect()->route('admin.config.index')
131
       return redirect()->route('admin.config.index')

+ 2
- 1
app/Http/Controllers/FatturazioneController.php Просмотреть файл

147
       'righe.*.nota' => 'nullable|string',
147
       'righe.*.nota' => 'nullable|string',
148
     ]);
148
     ]);
149
 
149
 
150
-    $aliquota = Config::aliquotaFic((int) ($validated['fic_vat_id'] ?? 0));
150
+    $vatId = $validated['fic_vat_id'] ?? null;
151
+    $aliquota = $vatId === null ? null : Config::aliquotaFic((int) $vatId);
151
     if (! $aliquota) {
152
     if (! $aliquota) {
152
       $messaggio = Config::aliquoteFic()['items']
153
       $messaggio = Config::aliquoteFic()['items']
153
         ? 'Scegli un\'aliquota IVA tra quelle salvate da Fatture in Cloud.'
154
         ? 'Scegli un\'aliquota IVA tra quelle salvate da Fatture in Cloud.'

+ 17
- 11
app/Models/Config.php Просмотреть файл

284
       $items[] = self::normalizzaAliquota($item);
284
       $items[] = self::normalizzaAliquota($item);
285
     }
285
     }
286
 
286
 
287
-    $defaultId = isset($json['default_id']) ? (int) $json['default_id'] : 0;
288
     $ids = array_column($items, 'id');
287
     $ids = array_column($items, 'id');
289
-    if (! in_array($defaultId, $ids, true)) {
290
-      $defaultId = 0;
288
+    $defaultId = null;
289
+    if (array_key_exists('default_id', $json) && $json['default_id'] !== null && $json['default_id'] !== '') {
290
+      $candidate = (int) $json['default_id'];
291
+      if (in_array($candidate, $ids, true)) {
292
+        $defaultId = $candidate;
293
+      }
291
     }
294
     }
292
 
295
 
293
     return [
296
     return [
294
-      'default_id' => $defaultId ?: null,
297
+      'default_id' => $defaultId,
295
       'items' => $items,
298
       'items' => $items,
296
     ];
299
     ];
297
   }
300
   }
298
 
301
 
299
   /**
302
   /**
303
+   * L'id 0 è un'aliquota vera su Fatture in Cloud (di solito il 22%).
304
+   *
300
    * @return array<string, mixed>|null
305
    * @return array<string, mixed>|null
301
    */
306
    */
302
   public static function aliquotaFic(?int $id): ?array
307
   public static function aliquotaFic(?int $id): ?array
303
   {
308
   {
304
-    if (! $id) {
309
+    if ($id === null) {
305
       return null;
310
       return null;
306
     }
311
     }
307
     foreach (self::aliquoteFic()['items'] as $item) {
312
     foreach (self::aliquoteFic()['items'] as $item) {
361
    * @param  array<int, array<string, mixed>>  $types
366
    * @param  array<int, array<string, mixed>>  $types
362
    * @return array{default_id: ?int, items: array<int, array<string, mixed>>}
367
    * @return array{default_id: ?int, items: array<int, array<string, mixed>>}
363
    */
368
    */
364
-  public static function salvaAliquoteDaFic(array $types, int $requestedDefault = 0): array
369
+  public static function salvaAliquoteDaFic(array $types, ?int $requestedDefault = null): array
365
   {
370
   {
366
     $previous = self::aliquoteFic();
371
     $previous = self::aliquoteFic();
367
     $items = [];
372
     $items = [];
373
     }
378
     }
374
 
379
 
375
     $ids = array_column($items, 'id');
380
     $ids = array_column($items, 'id');
376
-    $defaultId = in_array($requestedDefault, $ids, true) ? $requestedDefault : 0;
377
-    if (! $defaultId && in_array((int) ($previous['default_id'] ?? 0), $ids, true)) {
381
+    $defaultId = null;
382
+    if ($requestedDefault !== null && in_array($requestedDefault, $ids, true)) {
383
+      $defaultId = $requestedDefault;
384
+    } elseif ($previous['default_id'] !== null && in_array((int) $previous['default_id'], $ids, true)) {
378
       $defaultId = (int) $previous['default_id'];
385
       $defaultId = (int) $previous['default_id'];
379
-    }
380
-    if (! $defaultId && $items) {
386
+    } elseif ($items) {
381
       $defaultId = (int) $items[0]['id'];
387
       $defaultId = (int) $items[0]['id'];
382
       foreach ($items as $item) {
388
       foreach ($items as $item) {
383
         $natura = (string) ($item['ei_type'] ?? '');
389
         $natura = (string) ($item['ei_type'] ?? '');
389
     }
395
     }
390
 
396
 
391
     $payload = [
397
     $payload = [
392
-      'default_id' => $defaultId ?: null,
398
+      'default_id' => $defaultId,
393
       'items' => $items,
399
       'items' => $items,
394
     ];
400
     ];
395
 
401
 

+ 4
- 1
app/Models/Fattura.php Просмотреть файл

95
     public function ficVatId(): ?int
95
     public function ficVatId(): ?int
96
     {
96
     {
97
         $id = data_get($this->meta, 'fic_vat_id');
97
         $id = data_get($this->meta, 'fic_vat_id');
98
+        if ($id === null || $id === '' || ! is_numeric($id)) {
99
+            return null;
100
+        }
98
 
101
 
99
-        return $id ? (int) $id : null;
102
+        return (int) $id;
100
     }
103
     }
101
 
104
 
102
     public function aliquotaLabel(): string
105
     public function aliquotaLabel(): string

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

217
                     @forelse($catalogoIva['items'] as $aliquota)
217
                     @forelse($catalogoIva['items'] as $aliquota)
218
                     <tr>
218
                     <tr>
219
                       <td>
219
                       <td>
220
-                        <input class="form-check-input" type="radio" name="fic_aliquota_default" value="{{ $aliquota['id'] }}" @checked((int) ($catalogoIva['default_id'] ?? 0) === (int) $aliquota['id']) {{ $disabled }}>
220
+                        <input class="form-check-input" type="radio" name="fic_aliquota_default" value="{{ $aliquota['id'] }}" @checked($catalogoIva['default_id'] !== null && (int) $catalogoIva['default_id'] === (int) $aliquota['id']) {{ $disabled }}>
221
                       </td>
221
                       </td>
222
                       <td>{{ $aliquota['description'] !== '' ? $aliquota['description'] : Config::labelAliquota($aliquota) }}</td>
222
                       <td>{{ $aliquota['description'] !== '' ? $aliquota['description'] : Config::labelAliquota($aliquota) }}</td>
223
                       <td>{{ rtrim(rtrim(number_format((float) $aliquota['value'], 2, ',', ''), '0'), ',') }}</td>
223
                       <td>{{ rtrim(rtrim(number_format((float) $aliquota['value'], 2, ',', ''), '0'), ',') }}</td>

+ 7
- 5
resources/views/fatturazione/show.blade.php Просмотреть файл

21
     return rtrim(rtrim(number_format((float) $value, 2, '.', ''), '0'), '.');
21
     return rtrim(rtrim(number_format((float) $value, 2, '.', ''), '0'), '.');
22
   };
22
   };
23
   $catalogoIva = \App\Models\Config::aliquoteFic();
23
   $catalogoIva = \App\Models\Config::aliquoteFic();
24
-  $vatSelezionato = (int) old('fic_vat_id', 0);
25
-  if (! $vatSelezionato) {
24
+  $vatOld = old('fic_vat_id');
25
+  if ($vatOld !== null && $vatOld !== '') {
26
+    $vatSelezionato = (int) $vatOld;
27
+  } else {
26
     $salvata = \App\Models\Config::aliquotaPerFattura($fattura);
28
     $salvata = \App\Models\Config::aliquotaPerFattura($fattura);
27
-    $vatSelezionato = (int) ($salvata['id'] ?? 0);
29
+    $vatSelezionato = $salvata ? (int) $salvata['id'] : null;
28
   }
30
   }
29
 @endphp
31
 @endphp
30
 
32
 
213
           <select name="fic_vat_id" id="fic_vat_id" class="form-select @error('fic_vat_id') is-invalid @enderror">
215
           <select name="fic_vat_id" id="fic_vat_id" class="form-select @error('fic_vat_id') is-invalid @enderror">
214
             <option value="">— Seleziona —</option>
216
             <option value="">— Seleziona —</option>
215
             @foreach($catalogoIva['items'] as $aliquota)
217
             @foreach($catalogoIva['items'] as $aliquota)
216
-            <option value="{{ $aliquota['id'] }}" data-percentuale="{{ $aliquota['value'] }}" @selected($vatSelezionato === (int) $aliquota['id'])>
217
-              {{ \App\Models\Config::labelAliquota($aliquota) }}@if((int) ($catalogoIva['default_id'] ?? 0) === (int) $aliquota['id']) — predefinita @endif
218
+            <option value="{{ $aliquota['id'] }}" data-percentuale="{{ $aliquota['value'] }}" @selected($vatSelezionato !== null && $vatSelezionato === (int) $aliquota['id'])>
219
+              {{ \App\Models\Config::labelAliquota($aliquota) }}@if($catalogoIva['default_id'] !== null && (int) $catalogoIva['default_id'] === (int) $aliquota['id']) — predefinita @endif
218
             </option>
220
             </option>
219
             @endforeach
221
             @endforeach
220
           </select>
222
           </select>

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