FabioFratini před 9 měsíci
rodič
revize
a56d6dab5f

+ 17 - 22
app/Http/Livewire/RecordOUT.php

@@ -14,7 +14,10 @@ class RecordOUT extends Component
 {
     use WithFileUploads;
 
-    protected $listeners = ['setCausal' => 'setCausal'];
+    protected $listeners = [
+        'setCausal' => 'setCausal',
+        'closeImportModal' => 'closeImportModal',
+    ];
 
     public $sortField = 'date';
     public $sortAsc = false;
@@ -159,6 +162,8 @@ class RecordOUT extends Component
         $this->isImportModalOpen = false;
         $this->reset(['selectedCausal', 'receiptFiles']);
         $this->resetValidation();
+        $this->dispatchBrowserEvent('closeModal');
+
     }
 
     public function hydrate()
@@ -395,7 +400,7 @@ class RecordOUT extends Component
             $this->add = false;
             $this->emit('setEdit', false);
         } catch (\Exception $ex) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            $this->emit('flash-error', 'Errore (' . $ex->getMessage() . ')');
         }
     }
 
@@ -410,7 +415,7 @@ class RecordOUT extends Component
         try {
             $record = \App\Models\Record::findOrFail($id);
             if (!$record) {
-                session()->flash('error', 'Movimento non trovato');
+                $this->emit('flash-error', 'Movimento non trovato');
             } else {
                 $this->member_id = $record->member_id;
                 $this->supplier_id = $record->supplier_id;
@@ -455,7 +460,7 @@ class RecordOUT extends Component
                 }
             }
         } catch (\Exception $ex) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            $this->emit('flash-error', 'Errore (' . $ex->getMessage() . ')');
         }
     }
 
@@ -484,16 +489,13 @@ class RecordOUT extends Component
             ->keyBy('id')
             ->toArray();
 
-            // Delete existing rows
             \App\Models\RecordRow::where('record_id', $this->dataId)->delete();
 
-            // Insert updated rows
             foreach ($this->rows as $row) {
                 foreach ($row["when"] as $x => $y) {
                     $row["when"][$x]['period'] = $row["when"][$x]['month'] . "-" . $row["when"][$x]['year'];
                 }
 
-                // Get imponibile and aliquota_iva values if they exist
                 $imponibile = null;
                 if (isset($row["imponibile"]) && $row["imponibile"] !== null && $row["imponibile"] !== '') {
                     $imponibile = $this->currencyToDouble($row["imponibile"]);
@@ -508,7 +510,6 @@ class RecordOUT extends Component
 
                 $amount = $this->currencyToDouble($row["amount"]);
 
-                // Calculate imposta (amount - imponibile) if imponibile exists
                 $imposta = null;
                 if ($imponibile !== null) {
                     $imposta = $amount - $imponibile;
@@ -525,7 +526,7 @@ class RecordOUT extends Component
                     'imponibile' => $imponibile,
                     'aliquota_iva' => $aliquota_iva,
                     'imposta' => $imposta,
-                    'divisa' => 'EUR', // Assuming the currency is always EUR
+                    'divisa' => 'EUR',
                 ];
 
                 if (isset($row["id"]) && isset($existingRows[$row["id"]])) {
@@ -548,7 +549,7 @@ class RecordOUT extends Component
             $this->update = false;
             $this->emit('setEdit', false);
         } catch (\Exception $ex) {
-            session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
+            $this->emit('flash-error', 'Errore (' . $ex->getMessage() . ')');
         }
     }
 
@@ -566,7 +567,7 @@ class RecordOUT extends Component
             \App\Models\Record::find($id)->delete();
             session()->flash('success', "Movimento eliminato");
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
+            $this->emit('flash-error','Errore (' . $e->getMessage() . ')');
         }
     }
 
@@ -577,7 +578,7 @@ class RecordOUT extends Component
                 \App\Models\Record::find($id)->delete();
             }
         } catch (\Exception $e) {
-            session()->flash('error', 'Errore (' . $e->getMessage() . ')');
+            $this->emit('flash-error','Errore (' . $e->getMessage() . ')');
         }
         $this->multipleAction = '';
     }
@@ -763,12 +764,6 @@ class RecordOUT extends Component
                     // Crea il record row
                     $this->createRecordRow($record->id, $fatturaData);
 
-                    // Crea la ricevuta
-                    //$receipt = $this->createReceipt($record->id, $supplier->id, $paymentMethodId, $fatturaData);
-
-                    // Crea le righe della ricevuta
-                    // $this->createReceiptRows($receipt->id, $fatturaData);
-
                     $importCount++;
                     Log::info("Fattura importata con successo: {$fatturaData['numeroFattura']}, Fornitore: {$fatturaData['denominazione']}");
                 } catch (\Exception $e) {
@@ -778,17 +773,17 @@ class RecordOUT extends Component
 
                 $progress = ($index + 1) / $totalFiles * 100;
                 $this->emit('update-progress', $progress);
+
             }
 
             $this->showResultMessages($importCount, $errorsCount);
         } catch (\Exception $e) {
             Log::error('Errore durante l\'importazione dei file XML: ' . $e->getMessage());
-            session()->flash('error', 'Errore durante l\'importazione: ' . $e->getMessage());
+            $this->emit('flash-error', 'Errore durante l\'importazione: ' . $e->getMessage());
         } finally {
-            $this->emit('import-finished');
-
             $this->closeImportModal();
             $this->emit('load-data-table');
+
         }
     }
     /**
@@ -1434,7 +1429,7 @@ class RecordOUT extends Component
             }
             session()->flash('message', $message);
         } else {
-            session()->flash('error', 'Nessuna fattura importata. Controlla i file XML e riprova.');
+            $this->emit('flash-error','Nessuna fattura importata. Controlla i file XML e riprova.');
         }
     }
 }

+ 51 - 17
resources/views/livewire/records_out.blade.php

@@ -32,7 +32,7 @@
         <div class="modal-dialog">
             <div class="modal-content">
                 <div class="modal-header">
-                    <h5 class="modal-title" id="importModalLabel">Importa Ricevute</h5>
+                    <h5 class="modal-title" id="importModalLabel">Importa Fatture Passive</h5>
                     <button type="button" class="btn-close" onclick="closeImportModal()" aria-label="Close"></button>
                 </div>
                 <div class="modal-body">
@@ -54,14 +54,17 @@
                             <input type="file" class="form-control" id="receiptFiles" wire:model="receiptFiles" multiple>
                             @error('receiptFiles.*') <span class="text-danger">{{ $message }}</span> @enderror
                             <small class="form-text text-muted">Massimo {{ ini_get('max_file_uploads') }} file consentiti.</small>
+
                         </div>
                         <div class="progress mb-2" wire:ignore>
                             <div class="progress-bar" role="progressbar" style="width: 0%" aria-valuenow="0"
                                  aria-valuemin="0" aria-valuemax="100">0%
                             </div>
                         </div>
-                        <button type="submit" class="btn--ui">Importa</button>
-                        <button type="button" class="btn--ui lightGrey" onclick="closeImportModal()">Annulla</button>
+                        <div class="d-flex justify-content-end">
+                            <button type="button" class="btn--ui lightGrey me-2" onclick="closeImportModal()">Annulla</button>
+                            <button type="submit" class="btn--ui" @if(count($receiptFiles) > ini_get('max_file_uploads') || empty($selectedCausal)) disabled @endif>Importa</button>
+                        </div>
                     </form>
                 </div>
             </div>
@@ -1083,7 +1086,6 @@
             });
         }
 
-    // Function to open the modal
     function openImportModal() {
         const importModal = new bootstrap.Modal(document.getElementById('importModal'));
         importModal.show();
@@ -1109,6 +1111,7 @@
 
     function closeImportModal() {
         const importModal = bootstrap.Modal.getInstance(document.getElementById('importModal'));
+        console.log("closing");
         if (importModal) {
             importModal.hide();
         }
@@ -1122,30 +1125,61 @@
         progressBar.style.width = `${progress}%`;
         progressBar.setAttribute('aria-valuenow', progress);
         progressBar.textContent = `${progress}%`;
+        progressBar.style.backgroundColor = progress === 100 ? '#0C6197' : '#0C6197';
     });
 
-    Livewire.on('import-started', () => {
-        window.selectedCausalValue = $('.import-causal-select').val();
-
-        $('.import-causal-select').prop('disabled', true);
-    });
-
-    Livewire.on('import-finished', () => {
-        $('.import-causal-select').prop('disabled', false);
-        $('.import-causal-select').val(window.selectedCausalValue).trigger('change');
-
-    });
 
     function onlyNumberPercent(input) {
         let v = input.value.replace(/[^\d]/g, '');
         if (v.length > 3) v = v.slice(0, 3);
-
-        // Ensure percentage doesn't exceed 100
         if (parseInt(v) > 100) v = '100';
 
         input.value = v + "%";
     }
 
+    document.addEventListener('closeModal', function() {
+        setTimeout(function() {
+            const importModal = bootstrap.Modal.getInstance(document.getElementById('importModal'));
+            if (importModal) {
+                importModal.hide();
+            }
+
+            setTimeout(function() {
+                window.location.reload();
+            }, 1500);
+        }, 300);
+    });
+
+    Livewire.on('flash-error', message => {
+            const alert = document.createElement('div');
+            alert.classList.add('alert', 'alert-danger', 'alert-dismissible', 'fade', 'show');
+            alert.setAttribute('role', 'alert');
+            alert.textContent = message;
+
+            const closeButton = document.createElement('button');
+            closeButton.setAttribute('type', 'button');
+            closeButton.classList.add('btn-close');
+            closeButton.setAttribute('data-bs-dismiss', 'alert');
+            closeButton.setAttribute('aria-label', 'Close');
+            alert.appendChild(closeButton);
+
+            const accountingExit = document.getElementById('accountingExit'); // Or any other suitable container
+            if (accountingExit) {
+                accountingExit.prepend(alert);
+            } else {
+                // If accountingExit is not found, prepend to the main container
+                const mainContainer = document.querySelector('.col.card--ui'); // Adjust selector as needed
+                if (mainContainer) {
+                    mainContainer.prepend(alert);
+                } else {
+                    console.error('Could not find a suitable container for the alert.');
+                }
+            }
+
+            setTimeout(() => {
+                alert.remove();
+            }, 5000); // Remove after 5 seconds
+        });
     </script>
 
 @endpush

+ 9 - 1
routes/web.php

@@ -741,10 +741,18 @@ Route::get('/get_record_out', function () {
     foreach ($x as $idx => $r) {
 
         $causals = '';
+        $causalCount = 0;
         foreach ($r->rows as $row) {
-            $causals .= $row->causal->getTree() . "<br>";
+            $causals .= $row->causal->getTree();
+            $causalCount++;
+            if ($causalCount % 2 == 0) {
+                $causals .= "<br>";
+            } else if ($causalCount < count($r->rows)) {
+                $causals .= " / ";
+            }
         }
 
+
         $datas[] = array(
             //'id' => $r->id,
             'date' => $r->date,