Alexander Musikhin 6 месяцев назад
Родитель
Сommit
e3526453b8

+ 8 - 3
app/Http/Controllers/Controller.php

@@ -74,14 +74,15 @@ class Controller extends BaseController
             $uniqueValues = $model::query()->distinct()->get($column)->pluck($column)->toArray();
             foreach ($uniqueValues as $k => $v) {
                 if(!$v) {
-                    unset($uniqueValues[$k]);
+                    $uniqueValues[$k] = '-пусто-';
                 }
             }
+
             $result = [];
             foreach ($uniqueValues as $val){
                 if(str_ends_with($column, '_id')) {
                     $relation = Str::camel(str_replace('_id', '', $column));
-                    $result[$val] = $model::query()->where($column, '=', $val)->first()->$relation->name;
+                    $result[$val] = $model::query()->where($column, '=', $val)->first()?->$relation->name;
                 } else {
                     $result[$val] = $val;
                 }
@@ -143,7 +144,11 @@ class Controller extends BaseController
                     }
                     $query->where(Str::replace('_to', '', $filterName), '<=', $filterValue);
                 } else {
-                    $query->where($filterName, '=', $filterValue);
+                    if($filterValue == '-пусто-') {
+                        $query->whereNull($filterName);
+                    } else {
+                        $query->where($filterName, '=', $filterValue);
+                    }
                 }
             }
         }

+ 19 - 21
app/Http/Controllers/ProductSKUController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Helpers\DateHelper;
 use App\Http\Requests\ProductSKUStoreRequest;
 use App\Models\File;
+use App\Models\MafView;
 use App\Models\ProductSKU;
 use App\Services\FileService;
 use Illuminate\Http\Request;
@@ -21,12 +22,10 @@ class ProductSKUController extends Controller
         'header'    => [
             'product-image'                     => 'Картинка',
             'id'                                => 'ID',
-
-            'order-district_id'                 => 'Округ',
-            'order-area_id'                     => 'Район',
-            'order-object_address'              => 'Адрес площадки',
-            'maf_order-order_number'            => 'Номер заказа МАФ',
-
+            'district_name'                     => 'Округ',
+            'area_name'                         => 'Район',
+            'object_address'                    => 'Адрес площадки',
+            'order_number'                      => 'Номер заказа МАФ',
             'status'                            => 'Статус',
             'rfid'                              => 'RFID',
             'factory_number'                    => 'Номер фабрики',
@@ -34,34 +33,33 @@ class ProductSKUController extends Controller
             'statement_number'                  => 'Номер ведомости',
             'statement_date'                    => 'Дата ведомости',
             'upd_number'                        => 'Номер УПД',
-
-            'product-nomenclature_number'       => 'Номер номенклатуры',
-            'product-article'                   => 'Артикул',
-            'product-name_tz'                   => 'Наименование ТЗ',
-            'product-type_tz'                   => 'Тип по ТЗ',
-            'product-type'                      => 'Тип',
-            'product-manufacturer_name'         => 'Наименование производителя',
-
+            'nomenclature_number'               => 'Номер номенклатуры',
+            'article'                           => 'Артикул',
+            'name_tz'                           => 'Наименование ТЗ',
+            'type_tz'                           => 'Тип по ТЗ',
+            'type'                              => 'Тип',
+            'manufacturer_name'                 => 'Наименование производителя',
             'comment'                           => 'Примечания',
-            'passport_id'                       => 'Паспорт',
-
+            'passport_name'                     => 'Паспорт',
         ],
         'searchFields' =>  [
             'rfid',
             'factory_number',
             'statement_number',
             'upd_number',
-            'order-object_address',
-            'product-nomenclature_number',
-            'product-article',
+            'object_address',
+            'nomenclature_number',
+            'article',
         ],
     ];
     public function index(Request $request)
     {
         session(['gp_sku' => $request->all()]);
-        $model = new ProductSKU;
+        $model = new MafView;
 
-        $this->createFilters($model, 'status', 'passport_id');
+        $fil = array_keys($this->data['header']);
+        unset($fil[0]);
+        $this->createFilters($model, ...$fil);
         $this->createDateFilters($model, 'manufacture_date', 'statement_date');
         $this->data['ranges'] = [];
 

+ 46 - 0
app/Models/MafView.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+class MafView extends Model
+{
+    const DEFAULT_SORT_BY = 'created_at';
+    protected $fillable = [
+        'year',
+        'product_id',
+        'order_id',
+        'maf_order_id',
+        'status',               // needs - нуждается в данном товаре, related - привязана к MafOrder
+        'rfid',
+        'factory_number',
+        'manufacture_date',
+        'statement_number',
+        'statement_date',
+        'upd_number',
+        'comment',
+        'passport_id',
+        'district_name',
+        'area_name',
+        'user_name',
+        'object_address',
+        'order_number',
+        'article',
+        'nomenclature_number',
+        'name_tz',
+        'type_tz',
+        'type',
+        'manufacturer_name',
+    ];
+    public $table = 'mafs_view';
+
+    /**
+     * @return BelongsTo
+     */
+    public function product(): BelongsTo
+    {
+        return $this->belongsTo(Product::class, 'product_id', 'id')->withoutGlobalScopes();
+    }
+}

+ 45 - 0
database/migrations/2025_05_31_180116_create_maf_views_table.php

@@ -0,0 +1,45 @@
+<?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 mafs_view AS
+       	
+                SELECT ps.*,
+                    ov.district_name,
+                    ov.area_name,
+                    ov.user_name,
+                    ov.object_address,
+                    mo.order_number,
+                    p.article,
+                    p.nomenclature_number,
+                    p.name_tz,
+                    p.type_tz,
+                    p.`type`,
+                    p.manufacturer_name,
+                    f.original_name as passport_name
+                FROM products_sku ps 
+                    LEFT JOIN orders_view ov ON ov.id = ps.order_id
+                    LEFT JOIN maf_orders mo ON ps.maf_order_id = mo.id
+                    LEFT JOIN products p ON p.id = ps.product_id
+                    LEFT JOIN files f ON f.id = ps.passport_id
+                    ";
+        DB::unprepared($sql);
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        DB::unprepared("DROP VIEW IF EXISTS mafs_view");
+    }
+};