Przeglądaj źródła

reclamations view for correct search

Alexander Musikhin 4 tygodni temu
rodzic
commit
6f595e899a

+ 1 - 1
app/Http/Controllers/FilterController.php

@@ -12,7 +12,7 @@ class FilterController extends Controller
         'orders'        => 'orders_view',
         'product_sku'   => 'mafs_view',
         'products'      => 'products',
-        'reclamations'  => 'reclamations',
+        'reclamations'  => 'reclamations_view',
         'maf_order'     => 'maf_orders_view',
     ];
     public function getFilters(FilterRequest $request)

+ 9 - 8
app/Http/Controllers/ReclamationController.php

@@ -12,6 +12,7 @@ use App\Models\Order;
 use App\Models\Reclamation;
 use App\Models\ReclamationDetail;
 use App\Models\ReclamationStatus;
+use App\Models\ReclamationView;
 use App\Models\Role;
 use App\Models\User;
 use App\Services\FileService;
@@ -27,16 +28,16 @@ class ReclamationController extends Controller
         'id' => 'reclamations',
         'header' => [
             'id' => 'ID',
-            'user_id' => 'Менеджер',
-            'status_id' => 'Статус',
-            'order-district_id' => 'Округ',
-            'order-area_id' => 'Район',
-            'order-object_address' => 'Адрес объекта',
+            'user_name' => 'Менеджер',
+            'status_name' => 'Статус',
+            'district_name' => 'Округ',
+            'area_name' => 'Район',
+            'object_address' => 'Адрес объекта',
             'create_date' => 'Дата создания',
             'finish_date' => 'Дата завершения',
             'start_work_date' => 'Дата начала работ',
             'work_days' => 'Срок работ, дней',
-            'brigadier_id' => 'Бригадир',
+            'brigadier_name' => 'Бригадир',
             'reason' => 'Причина',
             'guarantee' => 'Гарантии',
             'whats_done' => 'Что сделано',
@@ -60,9 +61,9 @@ class ReclamationController extends Controller
     public function index(Request $request)
     {
         session(['gp_reclamations' => $request->all()]);
-        $model = new Reclamation();
+        $model = new ReclamationView();
         // fill filters
-        $this->createFilters($model, 'user_id', 'status_id');
+        $this->createFilters($model, 'user_name', 'status_name');
         $this->createDateFilters($model, 'create_date', 'finish_date');
 
         $q = $model::query();

+ 42 - 0
app/Models/ReclamationView.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ReclamationView extends Model
+{
+    use SoftDeletes;
+
+    const DEFAULT_SORT_BY = 'created_at';
+
+    protected $table = 'reclamations_view';
+
+    protected $fillable = [
+        'id',
+        'order_id',
+        'user_id',
+        'status_id',
+        'create_date',
+        'finish_date',
+        'reason',
+        'guarantee',
+        'whats_done',
+        'created_at',
+        'updated_at',
+        'start_work_date',
+        'work_days',
+        'brigadier_id',
+        'comment',
+        'user_name',
+        'brigadier_name',
+        'year',
+        'order_name',
+        'object_address',
+        'district_name',
+        'area_name',
+        'object_type_name',
+        'status_name',
+    ];
+}

+ 41 - 0
database/migrations/2025_11_06_141206_create_reclamation_views_table.php

@@ -0,0 +1,41 @@
+<?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(): void
+    {
+        $sql = "CREATE OR REPLACE VIEW reclamations_view AS
+       	
+                SELECT r.*,
+                    u.name as user_name,
+                    u1.name as brigadier_name,
+                    o.year,
+                    o.name as order_name,
+                    o.object_address,
+                    o.district_name,
+                    o.area_name,
+                    o.object_type_name,
+                    rs.name as status_name
+                FROM reclamations r 
+                    LEFT JOIN users u ON r.user_id = u.id
+                    LEFT JOIN users u1 ON r.brigadier_id = u1.id
+                    LEFT JOIN reclamation_statuses rs ON r.status_id = rs.id
+                    LEFT JOIN orders_view o ON r.order_id = o.id";
+        DB::unprepared($sql);
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        DB::unprepared('DROP VIEW IF EXISTS reclamations_view');
+    }
+};