Jelajahi Sumber

Fix dopo incontro

Luca Parisio 4 bulan lalu
induk
melakukan
0548bf34f1

+ 101 - 45
app/Http/Livewire/Report.php

@@ -97,6 +97,8 @@ class Report extends Component
         $intersezione_con,
         $prossimita_civico,
         $prossimita_palo_luce,
+        $latitude,
+        $longitude,
         $prossimita_chilometro,
         $note_aggiuntive;
 
@@ -343,6 +345,8 @@ class Report extends Component
         $this->intersezione_con = '';
         $this->prossimita_civico = '';
         $this->prossimita_palo_luce = '';
+        $this->latitude = 0;
+        $this->longitude = 0;
         $this->prossimita_chilometro = '';
         //$this->coordinata_x = '';
         //$this->coordinata_y = '';
@@ -592,56 +596,95 @@ class Report extends Component
         $this->emit('modalClosed');
     }
 
-
-
     public function add()
     {
-        try {
-            $this->protocollo_num = DB::table('fcf_reports_reports')
-                ->where('protocollo_anno', date('Y'))
-                ->max('protocollo_num') + 1;
-
-            $this->protocollo_anno = date('Y');
-            $this->name = $this->protocollo_num . "/" . $this->protocollo_anno;
-
-            $reportData = [
-                'name' => $this->name,
-                'protocollo_num' => $this->protocollo_num,
-                'protocollo_anno' => $this->protocollo_anno,
-                'validated' => $this->validated,
-                'necessita_nulla_osta' => $this->necessita_nulla_osta,
-                'data_nulla_osta' => $this->data_nulla_osta,
-                'localita_uno' => $this->localita_uno,
-                'localita_due' => $this->localita_due,
-                'verificatosi_in_data' => $this->verificatosi_in_data,
-                'verificatosi_in_data_ora' => $this->verificatosi_in_data_ora,
-                'verificatosi_in_data_minuti' => $this->verificatosi_in_data_minuti,
-                'rilievi_id' => $this->rilievi_id,
-                'segnalazione_data' => $this->segnalazione_data,
-                'segnalazione_ora' => $this->segnalazione_ora,
-                'segnalazione_minuti' => $this->segnalazione_minuti,
-                'sinistro_ora' => $this->sinistro_ora,
-                'sinistro_minuti' => $this->sinistro_minuti,
-                'localizzazione_incidente' => $this->localizzazione_incidente,
-                'nomenclatura_strada' => $this->nomenclatura_strada,
-                'condizioni_atmosferiche' => $this->condizioni_atmosferiche,
-                'pavimentazione' => $this->pavimentazione,
-                'condizione_strada' => $this->condizione_strada,
-                'fondo_stradale' => $this->fondo_stradale,
-                'visibilita' => $this->visibilita,
-                'particolarita_strada' => $this->particolarita_strada,
-            ];
 
-            Log::info('Creating report with data:', $reportData);
+        $rulesValidate = [
+            'localita_uno' => 'required',
+            'localita_due' => 'required',
+            'verificatosi_in_data' => 'required',
+            'verificatosi_in_data_ora' => 'required',
+            'verificatosi_in_data_minuti' => 'required',
+            'rilievi_id' => 'required',
+            'segnalazione_data' => 'required',
+            'segnalazione_ora' => 'required',
+            'segnalazione_minuti' => 'required',
+            'sinistro_ora' => 'required',
+            'sinistro_minuti' => 'required',
+            'localizzazione_incidente' => 'required',
+            'nomenclatura_strada' => 'required',
+            'condizioni_atmosferiche' => 'required',
+            'pavimentazione' => 'required',
+            'condizione_strada' => 'required',
+            'fondo_stradale' => 'required',
+            'visibilita' => 'required',
+            'particolarita_strada' => 'required',
+        ];
+
+        $data = [];
+        foreach($rulesValidate as $k => $v)
+        {
+            $data[$k] = $this->$k;
+        }
+        //$this->validate($rulesValidate);
 
-            $record = \App\Models\Report::create($reportData);
+        $validator = \Validator::make($data, $rulesValidate);
 
-            session()->flash('success', 'Verbale creato');
-            $this->closeModal();
-            $this->edit($record->id);
-        } catch (\Exception $ex) {
+        if($validator->fails()) 
+        {
             session()->flash('error', 'Errore in fase di salvataggio. I dati sono da inserire obbligatoriamente.');
         }
+        else
+        {
+
+            try {
+                $this->protocollo_num = DB::table('fcf_reports_reports')
+                    ->where('protocollo_anno', date('Y'))
+                    ->max('protocollo_num') + 1;
+
+                $this->protocollo_anno = date('Y');
+                $this->name = $this->protocollo_num . "/" . $this->protocollo_anno;
+
+                $reportData = [
+                    'name' => $this->name,
+                    'protocollo_num' => $this->protocollo_num,
+                    'protocollo_anno' => $this->protocollo_anno,
+                    'validated' => $this->validated,
+                    'necessita_nulla_osta' => $this->necessita_nulla_osta,
+                    'data_nulla_osta' => $this->data_nulla_osta,
+                    'localita_uno' => $this->localita_uno,
+                    'localita_due' => $this->localita_due,
+                    'verificatosi_in_data' => $this->verificatosi_in_data,
+                    'verificatosi_in_data_ora' => $this->verificatosi_in_data_ora,
+                    'verificatosi_in_data_minuti' => $this->verificatosi_in_data_minuti,
+                    'rilievi_id' => $this->rilievi_id,
+                    'segnalazione_data' => $this->segnalazione_data,
+                    'segnalazione_ora' => $this->segnalazione_ora,
+                    'segnalazione_minuti' => $this->segnalazione_minuti,
+                    'sinistro_ora' => $this->sinistro_ora,
+                    'sinistro_minuti' => $this->sinistro_minuti,
+                    'localizzazione_incidente' => $this->localizzazione_incidente,
+                    'nomenclatura_strada' => $this->nomenclatura_strada,
+                    'condizioni_atmosferiche' => $this->condizioni_atmosferiche,
+                    'pavimentazione' => $this->pavimentazione,
+                    'condizione_strada' => $this->condizione_strada,
+                    'fondo_stradale' => $this->fondo_stradale,
+                    'visibilita' => $this->visibilita,
+                    'particolarita_strada' => $this->particolarita_strada,
+                ];
+
+                Log::info('Creating report with data:', $reportData);
+
+                $record = \App\Models\Report::create($reportData);
+
+                session()->flash('success', 'Verbale creato');
+                $this->closeModal();
+                $this->edit($record->id);
+            } catch (\Exception $ex) {
+                Log::info('Error during report creation:' . $ex->getMessage());
+                session()->flash('error', 'Errore in fase di salvataggio. I dati sono da inserire obbligatoriamente.');
+            }
+        }
     }
 
     public function store()
@@ -655,6 +698,7 @@ class Report extends Component
             $this->resetFields();
             $this->add = false;
         } catch (\Exception $ex) {
+            Log::info('Error during report creation:' . $ex->getMessage());
             session()->flash('error', 'Errore in fase di salvataggio');
         }
     }
@@ -707,6 +751,8 @@ class Report extends Component
                 $this->intersezione_con = $record->intersezione_con;
                 $this->prossimita_civico = $record->prossimita_civico;
                 $this->prossimita_palo_luce = $record->prossimita_palo_luce;
+                $this->latitude = $record->latitude;
+                $this->longitude = $record->longitude;
                 $this->prossimita_chilometro = $record->prossimita_chilometro;
                 //$this->coordinata_x = $record->coordinata_x;
                 //$this->coordinata_y = $record->coordinata_y;
@@ -843,6 +889,7 @@ class Report extends Component
                 $this->add = false;
             }
         } catch (\Exception $ex) {
+            Log::info('Error during report edit :' . $ex->getMessage());
             session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
         }
         $this->emit('load-check', "");
@@ -875,7 +922,7 @@ class Report extends Component
             $this->validate($rulesValidate);
         }
         try {
-            \App\Models\Report::whereId($this->dataId)->update([
+            $reportData = [
                 'name' => str_pad($this->protocollo_num, 3, '0', STR_PAD_LEFT) . "/" . $this->protocollo_anno,
                 'necessita_nulla_osta' => $this->necessita_nulla_osta,
                 'data_nulla_osta' => $this->data_nulla_osta,
@@ -901,6 +948,8 @@ class Report extends Component
                 'intersezione_con' => $this->intersezione_con,
                 'prossimita_civico' => $this->prossimita_civico,
                 'prossimita_palo_luce' => $this->prossimita_palo_luce,
+                'latitude' => $this->latitude,
+                'longitude' => $this->longitude,
                 'prossimita_chilometro' => $this->prossimita_chilometro,
                 //'coordinata_x' => $this->coordinata_x,
                 //'coordinata_y' => $this->coordinata_y,
@@ -1000,7 +1049,11 @@ class Report extends Component
                 'segnaletica_orizzontale_4_altro' => $this->segnaletica_orizzontale_4_altro,
                 'segnaletica_orizzontale_4_direzione' => $this->segnaletica_orizzontale_4_direzione,
                 'validated' => $validate
-            ]);
+            ];
+
+            \App\Models\Report::whereId($this->dataId)->update($reportData);
+
+            Log::info('Update report ' . $this->dataId . ' with data:', $reportData);
 
             \App\Models\ReportTipoUrto::where('report_id', $this->dataId)->delete();
             foreach ($this->tipo_urto as $x) {
@@ -1149,6 +1202,7 @@ class Report extends Component
                     'stato_testi_oculari' => $this->data_testi_oculari_stato_3
                 ]);
             } catch (\Exception $ex) {
+                Log::info('Error during save ' . $this->dataId . ' update:' . $ex->getMessage());
                 session()->flash('error', 'Errore in fase di salvataggio (' . $ex->getMessage() . ')');
             }
 
@@ -1156,6 +1210,7 @@ class Report extends Component
             $this->resetFields();
             $this->update = false;
         } catch (\Exception $ex) {
+            Log::info('Error during report ' . $this->dataId . ' update:' . $ex->getMessage());
             session()->flash('error', 'Errore (' . $ex->getMessage() . ')');
         }
     }
@@ -1174,6 +1229,7 @@ class Report extends Component
     {
         try {
             \App\Models\Report::find($id)->delete();
+            Log::info('Delete report :' . $id);
             session()->flash('success', "Verbale eliminato");
         } catch (\Exception $e) {
             session()->flash('error', "Errore");

+ 10 - 1
app/Http/Livewire/Traits/HasVeicoli.php

@@ -501,7 +501,16 @@ trait HasVeicoli{
 
     public function veicoloSave()
     {
-        $this->validate([
+
+        // Se velocipede non sono obbligatori marca e modello
+
+        $this->validate($this->vei_tipo_id == env('VELOCIPEDE', 6) ? [
+            'vei_tipo_id' => 'required',
+            'vei_carta_circolazione_rilasciata_da' => 'required',
+            'vei_foreign_country' => 'required',
+            'vei_carta_circolazione_rilasciata_da_di' => 'required',
+            'vei_destinazione_uso' => 'required',
+        ] : [
             'vei_tipo_id' => 'required',
             'vei_marca_id' => 'required',
             'vei_modello_id' => 'required',

+ 2 - 0
app/Models/Report.php

@@ -152,6 +152,8 @@ public $timestamps = false;
         'updated_by' ,
         'locked' ,
         'locked_by' ,
+        'latitude',
+        'longitude'
     ];
 
     public function localita()

+ 34 - 0
database/migrations/2025_09_23_104500_add_coordinates_tipo_to_reports_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+
+    public function up()
+    {
+        Schema::table('fcf_reports_reports', function (Blueprint $table) {
+            $table->decimal('longitude', 10, 7)->nullable();
+            $table->decimal('latitude', 10, 7)->nullable();
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('fcf_reports_reports', function (Blueprint $table) {
+            $table->dropColumn([
+                'latitude',
+                'longitude'
+            ]);
+        });
+    }
+};

+ 14 - 4
resources/views/components/report/protocollo/rapporto-tecnico.blade.php

@@ -8,7 +8,7 @@
             <div class="col-sm-4">
                 <div class="form-group">
                     <label>Località</label>
-                    <select class="form-control select2 localita_uno" wire:model="localita_uno"
+                    <select class="form-control select2 localita_uno" wire:model="localita_uno" id="localita_uno"
                         style="width:100%">
                         <option value="{{ $localita_uno }}">
                             {{ $this->getLocalita($localita_uno) }}
@@ -18,7 +18,7 @@
             <div class="col-sm-4">
                 <div class="form-group">
                     <label>Indirizzo</label>
-                    <select class="form-control select2 localita_due" wire:model="localita_due"
+                    <select class="form-control select2 localita_due" wire:model="localita_due" id="localita_due"
                         style="width:100%">
                         <option value="{{ $localita_due }}">
                             {{ $this->getStradario($localita_due) }}
@@ -40,7 +40,7 @@
             <div class="col-sm-4">
                 <div class="form-group">
                     <label>In prossimità del civico</label>
-                    <input class="form-control" type="text" wire:model="prossimita_civico">
+                    <input class="form-control" type="text" wire:model="prossimita_civico" id="prossimita_civico">
                 </div>
             </div>
             <div class="col-sm-4">
@@ -56,6 +56,16 @@
                 </div>
             </div>
         </div>
+
+        <div class="row">
+            <div class="col-sm-4">
+                <b>Latitudine :</b> <span id="latitude">{{$latitude}}</span><br>
+                <b>Longitudine :</b> <span id="longitude">{{$longitude}}</span><br><br>
+                <a class="btn btn-primary" onclick="loadCoordinates()">Carica coordinate</a>
+            </div>
+        </div>
+        <br>
+
         {{-- <div class="row">
             <div class="col-sm-4">
                 <div class="form-group">
@@ -87,4 +97,4 @@
             </div>
         </div>
     </div>
-</div>
+</div>

+ 1 - 1
resources/views/components/verbale/pedone/index.blade.php

@@ -98,7 +98,7 @@
                                     <tr>
                                         <td class="veicolo-title-cell" style="padding-bottom: 10px !important;border: none!important">TELEFONO:</td>
                                         <td class="veicolo-content-cell" style="padding-bottom: 10px !important;border: none!important">
-                                            {{ $anagraficaPedone->mobile ?? '' }}
+                                            {{ "**********" /*$anagraficaPedone->mobile ?? ''*/ }}
                                         </td>
                                     </tr>
 

+ 1 - 1
resources/views/components/verbale/veicolo/conducente.blade.php

@@ -107,7 +107,7 @@
 
                 <tr>
                     <td class="veicolo-title-cell" style="padding-bottom: 10px !important;">TELEFONO:</td>
-                    <td class="veicolo-content-cell">{{ $datiVeicolo?->conducente?->mobile ?? '' }}</td>
+                    <td class="veicolo-content-cell">{{ "**********" /*$datiVeicolo?->conducente?->mobile ?? ''*/ }}</td>
                 </tr>
                 <tr>
                     <td class="veicolo-title-cell" style="padding-bottom: 10px !important;">INDIRIZZO:</td>

+ 2 - 2
resources/views/components/verbale/veicolo/proprietario.blade.php

@@ -95,7 +95,7 @@
                         <tr>
                             <td width="25%" class="veicolo-title-cell" style="padding-bottom: 10px !important;">TELEFONO:</td>
                             <td width="25%" class="veicolo-content-cell" style="padding-bottom: 10px !important;">
-                                {{ $datiVeicolo?->proprietario?->phone ?? '' }}
+                                {{ "**********" /*$datiVeicolo?->proprietario?->phone ?? ''*/ }}
                             </td>
                         </tr>
                         <tr>
@@ -185,7 +185,7 @@
                             <tr>
                                 <td width="15%" class="veicolo-title-cell" style="padding-bottom: 10px !important;">TELEFONO:</td>
                                 <td width="25%" class="veicolo-content-cell" style="padding-bottom: 10px !important;">
-                                    {{ $datiVeicolo?->proprietario?->mobile ?? '' }}
+                                    {{ "**********" /*$datiVeicolo?->proprietario?->mobile ?? ''*/ }}
                                 </td>
                             </tr>
                         @endif

+ 20 - 2
resources/views/livewire/report.blade.php

@@ -47,12 +47,30 @@
 @endpush
 
 @push('scripts')
+
+    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB-Qn1jVJkNUIXFynhk6bcRmNczlYPRQ94&loading=async" defer></script>
+
     <script src="/plugins/select2/js/select2.min.js"></script>
     <script src="/plugins/bootstrap-switch/js/bootstrap-switch.min.js"></script>
     <script>
         var maxDamageColumns = 4;
         var displayedDamageColumns = 1;
 
+        function loadCoordinates()
+        {
+            var geocoder = new google.maps.Geocoder();
+            var address = $("#localita_due").text().replaceAll('\n                        ', '') + " " + $("#prossimita_civico").text().replaceAll('\n                        ', '') + " ," + $("#localita_uno").text().replaceAll('\n                        ', '');
+            geocoder.geocode({
+                "address": address
+            }, function(results) {
+                var location = results[0].geometry.location;
+                var lat = location.lat();
+                var lng = location.lng();
+                @this.set('latitude', lat);
+                @this.set('longitude', lng);
+            });
+        }
+
         function hasColumnValues(columnNumber) {
             const selectors = [
                 `data_tipo_danno_${columnNumber}`,
@@ -140,7 +158,7 @@
                         url: ajaxUrl,
                         dataType: 'json'
                     },
-                    dropdownParent: $('#veicoloParte'),
+                    dropdownParent: value === "vei_carta_circolazione_rilasciata_da_di" ? $('#veicoloParte') : null,
                 });
 
                 $('.' + value).on('change', function (e) {
@@ -826,7 +844,7 @@
             @this.set('valida_al', $(this).val());
         });
 
-
+        
 
     </script>