Browse Source

added passport to mafs

Alexander Musikhin 7 months ago
parent
commit
68cf996b19

+ 2 - 4
app/Http/Controllers/ProductController.php

@@ -168,10 +168,8 @@ class ProductController extends Controller
         ]);
 
         $f = $fileService->saveUploadedFile('products/' . $product->id . '/certificate', $data['certificate']);
-
         $product->update(['certificate_id' => $f->id]);
-
-        return redirect()->route('catalog.index');
+        return redirect()->route('catalog.show', $product);
     }
 
     public function deleteCertificate(Product $product, File $file)
@@ -179,7 +177,7 @@ class ProductController extends Controller
         $product->update(['certificate_id' => null]);
         Storage::disk('public')->delete($file->path);
         $file->delete();
-        return redirect()->route('catalog.index');
+        return redirect()->route('catalog.show', $product);
     }
 
 

+ 24 - 1
app/Http/Controllers/ProductSKUController.php

@@ -4,8 +4,11 @@ namespace App\Http\Controllers;
 
 use App\Helpers\DateHelper;
 use App\Http\Requests\ProductSKUStoreRequest;
+use App\Models\File;
 use App\Models\ProductSKU;
+use App\Services\FileService;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
 
 // Склад - МАФ
@@ -45,6 +48,7 @@ class ProductSKUController extends Controller
             'product-manufacturer_name'         => 'Наименование производителя',
 
             'comment'                           => 'Примечания',
+            'passport_id'                       => 'Паспорт',
 
         ],
         'searchFields' =>  [
@@ -62,7 +66,7 @@ class ProductSKUController extends Controller
     {
         $model = new ProductSKU;
 
-        $this->createFilters($model, 'status');
+        $this->createFilters($model, 'status', 'passport_id');
         $this->createDateFilters($model, 'certificate_date', 'manufacture_date', 'statement_date');
         $this->data['ranges'] = [];
 
@@ -92,4 +96,23 @@ class ProductSKUController extends Controller
         $this->data['product_sku'] = $product_sku;
         return view('products_sku.edit', $this->data);
     }
+
+    public function uploadPassport(Request $request, ProductSKU $product_sku, FileService $fileService)
+    {
+        $data = $request->validate([
+            'passport' => 'file',
+        ]);
+
+        $f = $fileService->saveUploadedFile('products/' . $product_sku->id . '/passport', $data['passport']);
+        $product_sku->update(['passport_id' => $f->id]);
+        return redirect()->route('product_sku.show', $product_sku);
+    }
+
+    public function deletePassport(ProductSKU $product_sku, File $file)
+    {
+        $product_sku->update(['passport_id' => null]);
+        Storage::disk('public')->delete($file->path);
+        $file->delete();
+        return redirect()->route('product_sku.show', $product_sku);
+    }
 }

+ 9 - 0
app/Models/ProductSKU.php

@@ -32,6 +32,7 @@ class ProductSKU extends Model
         'statement_date',
         'upd_number',
         'comment',
+        'passport_id',
     ];
     public $table = 'products_sku';
 
@@ -62,6 +63,14 @@ class ProductSKU extends Model
         return $this->belongsTo(Order::class, 'order_id', 'id');
     }
 
+    /**
+     * @return BelongsTo
+     */
+    public function passport(): BelongsTo
+    {
+        return $this->belongsTo(File::class, 'passport_id', 'id');
+    }
+
     /**
      * @return BelongsTo
      */

+ 33 - 0
database/migrations/2025_04_26_232312_add_field_to_products_sku_table.php

@@ -0,0 +1,33 @@
+<?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
+    {
+        Schema::table('products_sku', function (Blueprint $table) {
+            $table->foreignId('passport_id')
+                ->nullable()
+                ->after('certificate_type')
+                ->constrained('files')
+                ->nullOnDelete();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('products_sku', function (Blueprint $table) {
+            $table->dropForeign('products_sku_passport_id_foreign');
+            $table->dropColumn('passport_id');
+        });
+    }
+};

+ 18 - 3
resources/views/products_sku/edit.blade.php

@@ -3,11 +3,23 @@
 @section('content')
 
     <div class="px-3">
-
-        <form class="row" action="{{ route('product_sku.update', $product_sku) }}" method="post">
-            <div class="col-12">
+        <div class="row">
+            <div class="col-xl-6">
                 <h4>МАФ на складе</h4>
             </div>
+            <div class="col-xl-6 text-end">
+                @if(isset($product_sku))
+                    <button class="btn btn-sm text-success" onclick="$('#upl-pass').trigger('click');"><i class="bi bi-plus-circle-fill"></i> Загрузить паспорт</button>
+
+                    <form action="{{ route('product-sku.upload-passport', $product_sku) }}" class="visually-hidden" method="POST" enctype="multipart/form-data">
+                        @csrf
+                        <input type="file" name="passport" onchange="$(this).parent().submit()" required id="upl-pass" />
+                    </form>
+                @endif
+            </div>
+        </div>
+        <form class="row" action="{{ route('product_sku.update', $product_sku) }}" method="post">
+
             <div class="col-xxl-6">
 
                 @csrf
@@ -29,6 +41,9 @@
                 @include('partials.input', ['name' => 'upd_number', 'title' => 'Номер УПД', 'value' => $product_sku->upd_number])
             </div>
             <div class="col-xxl-6">
+                @if($product_sku->passport)
+                    @include('partials.input', ['name' => 'cert', 'title' => 'Паспорт', 'value' => $product_sku->passport->original_name, 'disabled' => true])
+                @endif
                 <div class="row mb-2">
                     <label for="comment" class="col-form-label my-1">
                         Примечание

+ 2 - 0
routes/web.php

@@ -90,12 +90,14 @@ Route::middleware('auth:web')->group(function () {
     Route::post('order/{order}/upload-document', [OrderController::class, 'uploadDocument'])->name('order.upload-document');
     Route::post('order/{order}/upload-statement', [OrderController::class, 'uploadStatement'])->name('order.upload-statement');
     Route::post('catalog/{product}/upload-certificate', [ProductController::class, 'uploadCertificate'])->name('catalog.upload-certificate');
+    Route::post('product_sku/{product_sku}/upload-passport', [ProductSKUController::class, 'uploadPassport'])->name('product-sku.upload-passport');
 
     Route::middleware('role:' . Role::ADMIN)->group(function (){
         Route::delete('order/delete-photo/{order}/{file}', [OrderController::class, 'deletePhoto'])->name('order.delete-photo');
         Route::delete('order/delete-document/{order}/{file}', [OrderController::class, 'deleteDocument'])->name('order.delete-document');
         Route::delete('order/delete-statement/{order}/{file}', [OrderController::class, 'deleteStatement'])->name('order.delete-statement');
         Route::delete('catalog/delete-certificate/{product}/{file}', [ProductController::class, 'deleteCertificate'])->name('catalog.delete-certificate');
+        Route::delete('product_sku/delete-passport/{product_sku}/{file}', [ProductSKUController::class, 'deletePassport'])->name('product-sku.delete-passport');
     });
 
     Route::get('order/generate-installation-pack/{order}', [OrderController::class, 'generateInstallationPack'])->name('order.generate-installation-pack');