From a57e934a5223d6249fa35d0fa65f04d5b504a79a Mon Sep 17 00:00:00 2001 From: A1Gard Date: Mon, 24 Jun 2024 06:54:07 +0330 Subject: [PATCH] added discount controller --- .../Controllers/Admin/DiscountController.php | 129 ++++++++++++++++ app/Http/Requests/DiscountSaveRequest.php | 32 ++++ app/Models/Adv.php | 3 + app/Models/Discount.php | 15 +- ...24_05_07_133303_create_discounts_table.php | 4 +- ..._05_07_133653_create_attachments_table.php | 2 + database/seeders/DatabaseSeeder.php | 1 + .../admin/discounts/discount-form.blade.php | 143 ++++++++++++++++++ .../admin/discounts/discount-list.blade.php | 15 ++ .../sub-pages/product-step3.blade.php | 2 +- .../components/panel-side-navbar.blade.php | 4 +- routes/web.php | 12 ++ 12 files changed, 357 insertions(+), 5 deletions(-) create mode 100644 app/Http/Controllers/Admin/DiscountController.php create mode 100644 app/Http/Requests/DiscountSaveRequest.php create mode 100644 resources/views/admin/discounts/discount-form.blade.php create mode 100644 resources/views/admin/discounts/discount-list.blade.php diff --git a/app/Http/Controllers/Admin/DiscountController.php b/app/Http/Controllers/Admin/DiscountController.php new file mode 100644 index 0000000..7cd6b75 --- /dev/null +++ b/app/Http/Controllers/Admin/DiscountController.php @@ -0,0 +1,129 @@ + + ['title' => "Edit", 'class' => 'btn-outline-primary', 'icon' => 'ri-edit-2-line'], + 'show' => + ['title' => "Detail", 'class' => 'btn-outline-light', 'icon' => 'ri-eye-line'], + 'destroy' => + ['title' => "Remove", 'class' => 'btn-outline-danger delete-confirm', 'icon' => 'ri-close-line'], + ]; + + + public function __construct() + { + parent::__construct(Discount::class, DiscountSaveRequest::class); + } + + /** + * @param $discount Discount + * @param $request DiscountSaveRequest + * @return Discount + */ + public function save($discount, $request) + { + + if ($request->product_id != ''){ + $discount->product_id = $request->product_id; + } + $discount->title = $request->title; + $discount->body = $request->body; + $discount->amount = $request->amount; + $discount->expire = date('Y-m-d H:i:s',floor($request->expire)); + $discount->code = $request->code; + $discount->type = $request->type; + $discount->save(); + return $discount; + + } + + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + return view($this->formView); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Discount $item) + { + // + return view($this->formView, compact('item')); + } + + public function bulk(Request $request) + { + +// dd($request->all()); + $data = explode('.', $request->input('action')); + $action = $data[0]; + $ids = $request->input('id'); + switch ($action) { + case 'delete': + $msg = __(':COUNT items deleted successfully', ['COUNT' => count($ids)]); + $this->_MODEL_::destroy($ids); + break; + /**restore*/ + case 'restore': + $msg = __(':COUNT items restored successfully', ['COUNT' => count($ids)]); + foreach ($ids as $id) { + $this->_MODEL_::withTrashed()->find($id)->restore(); + } + break; + /*restore**/ + default: + $msg = __('Unknown bulk action : :ACTION', ["ACTION" => $action]); + } + + return $this->do_bulk($msg, $action, $ids); + } + + public function destroy(Discount $item) + { + return parent::delete($item); + } + + + public function update(Request $request, Discount $item) + { + return $this->bringUp($request, $item); + } + + /**restore*/ + public function restore($item) + { + return parent::restoreing(Discount::withTrashed()->where('id', $item)->first()); + } + /*restore**/ +} diff --git a/app/Http/Requests/DiscountSaveRequest.php b/app/Http/Requests/DiscountSaveRequest.php new file mode 100644 index 0000000..ec6abdc --- /dev/null +++ b/app/Http/Requests/DiscountSaveRequest.php @@ -0,0 +1,32 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + // + 'title' => ['nullable', 'string'], + 'body' => ['nullable', 'string'], + 'type' => ['required'], + 'amount' => ['required', 'string', 'min:1'], + ]; + } +} diff --git a/app/Models/Adv.php b/app/Models/Adv.php index 5e0dbaa..432ff00 100644 --- a/app/Models/Adv.php +++ b/app/Models/Adv.php @@ -9,6 +9,9 @@ class Adv extends Model { use SoftDeletes; + protected $casts = [ + 'expire' => 'date' + ]; public function imgUrl() { if ($this->image == null) { diff --git a/app/Models/Discount.php b/app/Models/Discount.php index 7c4d84e..6f43f8f 100644 --- a/app/Models/Discount.php +++ b/app/Models/Discount.php @@ -4,8 +4,21 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Translatable\HasTranslations; class Discount extends Model { - use HasFactory; + use HasFactory,SoftDeletes,HasTranslations; + + public $translatable = ['title', 'body']; + + public static $doscount_type =['PRICE','PERCENT']; + protected $casts = [ + 'expire' => 'datetime' + ]; + + public function product(){ + return $this->belongsTo(Product::class); + } } diff --git a/database/migrations/2024_05_07_133303_create_discounts_table.php b/database/migrations/2024_05_07_133303_create_discounts_table.php index 702c41b..4bde6f9 100644 --- a/database/migrations/2024_05_07_133303_create_discounts_table.php +++ b/database/migrations/2024_05_07_133303_create_discounts_table.php @@ -13,8 +13,10 @@ return new class extends Migration { Schema::create('discounts', function (Blueprint $table) { $table->id(); + $table->text('title')->nullable(); + $table->longText('body')->nullable(); $table->unsignedBigInteger('product_id')->nullable()->default(null); - $table->enum('type',['price','percent']); + $table->enum('type',\App\Models\Discount::$doscount_type); $table->string('code',100)->nullable()->default(null); $table->unsignedBigInteger('amount'); $table->dateTime('expire')->default(null)->nullable(); diff --git a/database/migrations/2024_05_07_133653_create_attachments_table.php b/database/migrations/2024_05_07_133653_create_attachments_table.php index f63ca4d..a4ec04e 100644 --- a/database/migrations/2024_05_07_133653_create_attachments_table.php +++ b/database/migrations/2024_05_07_133653_create_attachments_table.php @@ -18,7 +18,9 @@ return new class extends Migration $table->text('body'); $table->string('file',2048); $table->string('type'); + $table->boolean('is_fillable')->default(true); $table->unsignedBigInteger('size')->default(0); + $table->morphs('attachable'); $table->timestamps(); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 8eb5a55..c3493fe 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -30,6 +30,7 @@ class DatabaseSeeder extends Seeder CustomerSeeder::class, CategorySeeder::class, PropSeeder::class, + ProductSeeder::class, ] ); } diff --git a/resources/views/admin/discounts/discount-form.blade.php b/resources/views/admin/discounts/discount-form.blade.php new file mode 100644 index 0000000..bf885cf --- /dev/null +++ b/resources/views/admin/discounts/discount-form.blade.php @@ -0,0 +1,143 @@ +@extends('admin.templates.panel-form-template') +@section('title') + @if(isset($item)) + {{__("Edit discount")}} [{{$item->title}}] + @else + {{__("Add new discount")}} + @endif - +@endsection +@section('form') + +
+
+ + @include('components.err') +
+

+ + {{__("Tips")}} +

+
    +
  • + {{__("Recommends")}} +
  • +
+
+
+

+ + {{__("Discount data")}} +

+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + product_id??null)}}' + :close-on-Select="true"> +
+
+
+
+ +
+
+
+ +

+ @if(isset($item)) + {{__("Edit discount")}} [{{$item->title}}] + @else + {{__("Add new discount")}} + @endif +

+ +
+
+
+ + +
+
+
+
+ + + {{-- @trix(\App\Post::class, 'body')--}} + + +
+
+
+
+ + +
+
+
+
+ + + +
+
+ +
+ + +
+
+ +
+
+
+@endsection diff --git a/resources/views/admin/discounts/discount-list.blade.php b/resources/views/admin/discounts/discount-list.blade.php new file mode 100644 index 0000000..45491cf --- /dev/null +++ b/resources/views/admin/discounts/discount-list.blade.php @@ -0,0 +1,15 @@ +@extends('admin.templates.panel-list-template') + +@section('list-title') + + {{__("Discounts list")}} +@endsection +@section('title') + {{__("Discounts list")}} - +@endsection +@section('filter') + {{-- Other filters --}} +@endsection +@section('bulk') + {{-- --}} +@endsection diff --git a/resources/views/admin/products/sub-pages/product-step3.blade.php b/resources/views/admin/products/sub-pages/product-step3.blade.php index 92934b9..5a494f2 100644 --- a/resources/views/admin/products/sub-pages/product-step3.blade.php +++ b/resources/views/admin/products/sub-pages/product-step3.blade.php @@ -16,7 +16,7 @@ diff --git a/resources/views/components/panel-side-navbar.blade.php b/resources/views/components/panel-side-navbar.blade.php index 0e023ad..82f5fec 100644 --- a/resources/views/components/panel-side-navbar.blade.php +++ b/resources/views/components/panel-side-navbar.blade.php @@ -26,7 +26,7 @@
  • - + {{__('Discounts')}} @@ -48,7 +48,7 @@
  • - {{__('Product categories')}} + {{__('Categories')}}
  • diff --git a/routes/web.php b/routes/web.php index 8997c1c..2003d6e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -52,6 +52,18 @@ Route::prefix(config('app.panel.prefix'))->name('admin.')->group( Route::post('bulk', [\App\Http\Controllers\Admin\GroupController::class, "bulk"])->name('bulk'); Route::get('trashed', [\App\Http\Controllers\Admin\GroupController::class, "trashed"])->name('trashed'); }); + Route::prefix('discounts')->name('discount.')->group( + function () { + Route::get('', [\App\Http\Controllers\Admin\DiscountController::class, 'index'])->name('index'); + Route::get('create', [\App\Http\Controllers\Admin\DiscountController::class, 'create'])->name('create'); + Route::post('store', [\App\Http\Controllers\Admin\DiscountController::class, 'store'])->name('store'); + Route::get('edit/{item}', [\App\Http\Controllers\Admin\DiscountController::class, 'edit'])->name('edit'); + Route::post('update/{item}', [\App\Http\Controllers\Admin\DiscountController::class, 'update'])->name('update'); + Route::get('delete/{item}', [\App\Http\Controllers\Admin\DiscountController::class, 'destroy'])->name('destroy'); + Route::get('restore/{item}', [\App\Http\Controllers\Admin\DiscountController::class, 'restore'])->name('restore'); + Route::post('bulk', [\App\Http\Controllers\Admin\DiscountController::class, "bulk"])->name('bulk'); + Route::get('trashed', [\App\Http\Controllers\Admin\DiscountController::class, "trashed"])->name('trashed'); + }); Route::prefix('categories')->name('category.')->group( function () { Route::get('', [\App\Http\Controllers\Admin\CategoryController::class, 'index'])->name('index');