Alexander Musikhin преди 2 седмици
родител
ревизия
dd665c0d60

+ 9 - 9
app/Http/Controllers/MafOrderController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Http\Requests\StoreMafOrderRequest;
 use App\Models\MafOrder;
+use App\Models\MafOrdersView;
 use Illuminate\Http\Request;
 
 class MafOrderController extends Controller
@@ -17,10 +18,9 @@ class MafOrderController extends Controller
             'id'                                => 'ID',
             'order_number'                      => '№ заказа',
             'status'                            => 'Статус',
-            'user_id'                           => 'Менеджер',
-            'product-article'                   => 'Артикул',
-            'product-nomenclature_number'       => 'Номер номенклатуры',
-            'product-common_name'               => 'МАФ',
+            'user_name'                         => 'Менеджер',
+            'article'                           => 'Артикул',
+            'nomenclature_number'               => 'Номер номенклатуры',
             'quantity'                          => 'Заказано',
             'in_stock'                          => 'Остаток',
             'created_at'                        => 'Дата создания',
@@ -28,18 +28,18 @@ class MafOrderController extends Controller
         ],
         'searchFields' =>  [
             'order_number',
-            'product-nomenclature_number',
-            'product-article',
+            'nomenclature_number',
+            'article',
         ],
     ];
 
     public function index(Request $request)
     {
-        $model = new MafOrder;
+        $model = new MafOrdersView;
         session(['gp_maf_order' => $request->all()]);
         $this->createDateFilters($model, 'created_at');
-        $this->createFilters($model, 'user_id', 'quantity');
-        $this->createRangeFilters($model, 'in_stock', 'quantity');
+        $this->createFilters($model, 'user_name');
+        $this->createRangeFilters($model, 'in_stock');
 
         $q = $model::query();
 

+ 1 - 0
app/Http/Controllers/ProductController.php

@@ -145,6 +145,7 @@ class ProductController extends Controller
         $filters = ($request->withFilter) ? $request->filters ?? [] : [];
 
         // dispatch job
+        $filters['year'] = year();
         ExportCatalog::dispatch($filters , $request->user()->id);
         Log::info('ExportCatalog job created!');
 

+ 6 - 0
app/Models/MafOrdersView.php

@@ -5,6 +5,7 @@ namespace App\Models;
 use App\Models\Scopes\YearScope;
 use Illuminate\Database\Eloquent\Attributes\ScopedBy;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 #[ScopedBy([YearScope::class])]
 class MafOrdersView extends Model
@@ -29,4 +30,9 @@ class MafOrdersView extends Model
         'type',
         'manufacturer_name',
     ];
+
+    public function product(): BelongsTo
+    {
+        return $this->belongsTo(Product::class);
+    }
 }

+ 3 - 1
app/Services/ExportService.php

@@ -4,6 +4,7 @@ namespace App\Services;
 
 use App\Helpers\DateHelper;
 use App\Models\Product;
+use App\Models\Scopes\YearScope;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
@@ -16,8 +17,9 @@ class ExportService
 
     public function handle(array $filters = []): string
     {
-        $q = Product::query();
 
+        $q = Product::query()->withoutGlobalScopes([YearScope::class]);
+        $q->where('year', $filters['year'] ?? year());
         foreach ($filters as $filterName => $filterValue) {
             if(!$filterValue) continue;
 

+ 4 - 4
app/Services/ImportService.php

@@ -62,7 +62,7 @@ class ImportService
             foreach ($rowIterator as $row){
                 $record = $this->rowToArray($row);
                 if($record[0] === 'Фото') continue;
-
+                if(!isset($record[4])) continue;
                 Product::query()
                     ->updateOrCreate(['year' => $year, 'nomenclature_number' => $record[4]],
                     [
@@ -80,14 +80,14 @@ class ImportService
                         'note'                  => (string) $record[13],
                         'passport_name'         => (string) $record[14],
                         'statement_name'        => (string) $record[15],
-                        'service_life'          => (string) $record[16],
+                        'service_life'          => (int) $record[16],
                         'certificate_number'    => (string) $record[17],
-                        'certificate_date'      => DateHelper::isDate($record[18]) ? DateHelper::getDateForDB($record[18]) :(string)  '',
+                        'certificate_date'      => DateHelper::isDate($record[18] ?? '') ? DateHelper::getDateForDB($record[18]) : null,
                         'certificate_issuer'    => (string) $record[19],
                         'certificate_type'      => (string) $record[20],
                         'weight'                => (float) $record[21],
                         'volume'                => (float) $record[22],
-                        'places'                => (integer) $record[23],
+                        'places'                => (int) $record[23],
                     ]);
             }
         } else {

+ 3 - 3
resources/views/catalog/edit.blade.php

@@ -51,9 +51,9 @@
                         @include('partials.input', ['name' => 'certificate_date', 'title' => 'Дата сертификата', 'type' => 'date', 'value' => $product?->certificate_date, 'disabled' => !hasRole('admin')])
                         @include('partials.input', ['name' => 'certificate_issuer', 'title' => 'Орган сертификации', 'value' => $product?->certificate_issuer, 'disabled' => !hasRole('admin')])
                         @include('partials.input', ['name' => 'certificate_type', 'title' => 'Вид сертификации', 'value' => $product?->certificate_type, 'disabled' => !hasRole('admin')])
-                        @include('partials.input', ['name' => 'weight', 'title' => 'Вес', 'value' => $product?->weight,  'type' => 'number', 'step' => '0.01', 'disabled' => !hasRole('admin')])
-                        @include('partials.input', ['name' => 'volume', 'title' => 'Объём', 'value' => $product?->volume, 'type' => 'number', 'step' => '0.01', 'disabled' => !hasRole('admin')])
-                        @include('partials.input', ['name' => 'places', 'title' => 'Кол-во мест', 'value' => $product?->places, 'type' => 'number', 'step' => '1', 'disabled' => !hasRole('admin')])
+                        @include('partials.input', ['name' => 'weight', 'title' => 'Вес', 'value' => $product?->weight,  'type' => 'number', 'step' => '0.01', 'disabled' => !hasRole('admin'), 'required' => true])
+                        @include('partials.input', ['name' => 'volume', 'title' => 'Объём', 'value' => $product?->volume, 'type' => 'number', 'step' => '0.01', 'disabled' => !hasRole('admin'), 'required' => true])
+                        @include('partials.input', ['name' => 'places', 'title' => 'Кол-во мест', 'value' => $product?->places, 'type' => 'number', 'step' => '1', 'disabled' => !hasRole('admin'), 'required' => true])
 
                         <div class="row mb-2">
                             <label for="note" class="col-form-label my-1">

+ 1 - 1
routes/web.php

@@ -79,7 +79,7 @@ Route::middleware('auth:web')->group(function () {
 
         // catalog
         Route::get('catalog', [ProductController::class, 'index'])->name('catalog.index');
-        Route::get('catalog/{product}', [ProductController::class, 'show'])->name('catalog.show');
+        Route::get('catalog/{product}', [ProductController::class, 'show'])->name('catalog.show')->where('product', '[0-9]+')   ;
 
         // contracts
         Route::get('contract', [ContractController::class, 'index'])->name('contract.index');