سلام دوستان من وقتی کد تخفیف درست رو وارد میکنم می خوام که توی خلاصه سبد خرید تغییرات اعمال بشه درصد تخفیف و مقدار تخفیف اعمال بشه و از مبلغ نهایی کسر بشه این جداول کارت- اوردر- کوپن هست توی جدول کارت یا اوردر باید فیلدی اضافه بشه برا اینکار؟ اگه نه چجوری میتونم این کار رو عملی کنم وقتی کد تخفیف درست رو زدم خلاصه سبد خرید تغییرات اعمال بشه و قیمت نهایی اپدیت شده بره برای پرداخت همه کارای تخفیف انجام شده ایجاد کد تخفیف تو پنل ادمین و ولیدیشن کدتخفیف کاربر توی سبد خرید فقط میخام وقتی کد تخفیف درست رو وارد کردم خلاصه سبد خرید توی عکس اپدیت بشه و مشخص بشه تخفیف واقعا اعمال شده لطفا راهنماییم کنید
سلام من فقط متنون فارسی رو خوندم
به عکس ها دقت نکردم اصلا
ولی میخوام یچیزی بگم
سبد خرید فقط یک حافظه هست که ما اون رو دسته بندی کردیم
و به دیتابیس ارسال نشده
پس راحت میتونی به اون حافظه دسترسی پیدا کنی و مقدار قیمت رو دستکاری کنی
@Rp76
آقا رضای عزیز سبد خرید من تو دیتابیس ذخیره میشه یکی از عکس ها مربوط به جدول کارت هست حالا سوال من اینه چجوری میتونم این موضوع رو عملی کنم نمیدونم یه جدول coupon_cart
اضافه کنم یه فیلدهایی به جدول کارت اضافه کنم و یا اصلا راهی ساده تر برا این موضوع هست
@mehrdadroshanraee69
من متوجه مشکلتون نمیشم!
خب وقتی کد تخفیف رو وارد کردید ، بهد از ولیدیشن، اگه سبد خرید شما توی دیتابیس ذخبره میشه (فک کنم جدول کارت برای اون باشه) مقدار تخفیف رو از مقدار کل اوردر کم کنید و سپصفحه رفرش میشه و اطلاعات جدید نمایش داده میشه دیگه
@miladparsi1070
ببینید دوست عزیز من یه تخفیفی دارم مثلا 30 کاربر مد نظر میاد تو سبد خرید کد تخفیف رو وارد میکنه من ولیدیشن هایی مثل
منقضی شدن کد ر
وارد کردن کد تخفیف اشتباه توسط کاربر
وارد کردن کد تخفیف توسط یوزری که تخفیف مال اون نیست
منقضی شدن کد تخفیف بعد از تعدادی که برای استفاده اون کد در نظر گرفتم مثل کد تخفیف تعدادش 2 تاست سومین بار وارد کنه یک کاربر میگه منقضی شده
کد تخفیفی که هنوز status براش enable نشده
کد تخفیفی که مقدار is_used اون توی دیتابیس 1 شده باشه و منقضی بشه
همه این ولیدیشن هارو نوشتم الان مشکل اساسی من اینه وقتی کد تخفیف درست رو وارد میکنم میزنه کد تخفیف اعمال شد اما خلاصه سبد خرید اصلا تغییر نمیکنه یعنی اصلا انگار فیلدی تو دیتابیس مثلا جدول کارت برا این موضوع نیست که وقتی من کد تخفیف صحیح رو وارد کردم بیاد درصد تخفیف و مقدار تخفیف رو از قیمت نهایی کم کنه و اون قیمت نهایی بره برا پرداخت امیدوارم متوجه توضیحاتم شده باشی
<form class="form-inline mt-20" action="{{route('coupon.storeCoupon')}}" method="POST">
@csrf
<input type="hidden" name="cart" value="{{$cart->id}}" id="">
<div class="input-group w-p100">
<input type="text" name="coupon" class="form-control">
<div class="input-group-prepend">
<button type="submit" class="btn btn-danger">اعمال کد تخفیف</button>
</div>
<!-- /btn-group -->
</div>
</form>
class CouponController extends Controller
{
public function storeCoupon(Request $request)
{
try {
$request->validate([
'coupon' => 'required|exists:coupons,code'
]);
$coupon = Coupon::where('code', $request->coupon)->firstOrFail();
if ($coupon->expired_at < Carbon::now()) {
Alert::error('خطا', 'کد وارد شده منقضی شده است', 'error');
return back();
}
if ($coupon->start_at > Carbon::now()) {
Alert::error('خطا', ' تخفیف هنوز شروع نشده است', 'error');
return back();
}
if (!is_null($coupon->quantity) && $coupon->quantity <= 0) {
Alert::error('خطا', 'کد تخفیف وارد شده معتبر نمی باشد', 'error');
return back();
}
if ($coupon->status != 'enable') {
Alert::error('خطا', 'کد تخفیف هنوز فعال نشده است', 'error');
return back();
}
if ($coupon->is_used) {
Alert::error('خطا', 'کد تخفیف قبلا توسط شما مورد استفاده قرار گرفته است', 'error');
return back();
}
if ($coupon->users->count()) {
if (!$coupon->users->contains('id', auth()->id())) {
Alert::error('خطا', 'شما مجاز به استفاده از این کد تخفیف نیستید', 'error');
return back();
}
}
return $this->addCoupon($coupon->code, $request);
} catch (\Exception $e) {
Alert::error('خطا', 'کد تخفیف وارد شده معتبر نمی باشد', 'error');
return back();
}
}
public function addCoupon($coupon, $request)
{
$cart = Cart::where('id', $request->cart)->firstOrFail();
$coupon = Coupon::where('code', $coupon)->firstOrFail();
$price = $cart->total_price;
$discountP = ($price * $coupon->percent)/100;
$totalPrice = $price - $discountP;
Alert::success('موفقیت آمیز', 'کد تخفیف با موفقیت اعمال شد', 'success');
return back();
}
}
<div class="col-12 col-lg-6">
<div class="box">
<div class="box-header bg-info">
<h4 class="box-title"><strong>خلاصه سبد خرید</strong></h4>
</div>
<div class="box-body py-0">
<div class="table-responsive">
<table class="table simple mb-0">
<tbody>
<tr>
<td>جمع کل</td>
<td class="text-right font-weight-700">{{$cart->getPrice()}} تومان</td>
</tr>
<tr>
<td>درصد تخفیف</td>
<td class="text-right font-weight-700"><span class="text-danger mr-15">{{$course->getDiscountPercent()}}%</span></td>
</tr>
<tr>
<td>مقدار تخفیف</td>
<td class="text-right font-weight-700">{{$course->getDiscountAmount()}} تومان </td>
</tr>
<tr>
<th class="bt-1">قیمت نهایی</th>
<th class="bt-1 text-right font-weight-900 font-size-18">{{$cart->getPrice()}} تومان</th>
</tr>
</tbody>
</table>
</div>
</div>
<div class="box-footer">
<form action="{{route('cart.payment')}}" method="post">
@csrf
<select name="gateway" id="" class="form-control mb-4 @error('gateway') is-invalid @enderror">
<option value="">درگاه پرداخت مد نظر خود را کنید</option>
<option value="payping" class="text-danger">PayPing</option>
<option value="pay" class="text-danger">Payir</option>
</select>
@error('gateway')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
<br>
<a href="{{route('courses.list')}}" class="btn btn-danger">انصراف از خرید</a>
<input type="hidden" name="cart_id" value="{{$cart->id}}">
<button type="submit" class="btn btn-info pull-right">خرید </button>
</form>
</div>
</div>
</div>
چیزی که به ذهنم میرسه اینه که شما بعد از محاسبات $totalPrice رو برای ویو ارسال نکردین تا نمایش داده بشه!
میتونید یا مقداره بعد از تخفیف رو توی دیتابیس ذخیره کنید و بعد صفحه رو همراه با اون متغیر، ریدایرکت کنید و مبلغ جدید رو نمایش بدین
یا اینکه مبلغ بعد از تخفیف رو توی یه سشن بزارید و بعد ریدایرکت به صفحه قبل، توی ویو، چک کنید اگه همچین سشنی وجود داشت ، اون رو توی این دایو :
<tr>
<th class="bt-1">قیمت نهایی</th>
<th class="bt-1 text-right font-weight-900 font-size-18">{{$cart->getPrice()}} تومان</th>
</tr>
نمایش بدین
شما چون مقدار جدید رو نه توی دیتابیس آپدیت کردین و نه جور دیگه فرستادین به ویو خب نشون داده نمیشه
با یکی از راه های بالا مشکل شما حل میشه
@miladparsi1070
به نظرت نیاز نیست یه جدول دیگه تو دیتابیس داشته باشم
Schema::create('cart_coupon', function (Blueprint $table) {
$table->id();
$table->foreignId('cart_id')->constrained('carts')->cascadeOnDelete();
$table->foreignId('coupon_id')->constrained('coupons')->cascadeOnDelete();
$table->integer('coupon_percent')->default(0);
$table->unsignedInteger('coupon_price')->default(0);
$table->timestamps();
@mehrdadroshanraee69
من راستش از جدولای شما سردر نیاوردم
نمیدونم جدول cart_coupon شما برای چیه دقیقا
من برای این عملیات یه جدول برای تخفیفا دارم
یه جدول برای اون محصول
و یه جدولم برای تراکنش
برای اعمال کد هم از سشن استفاده میکنم و قیمت بعد از تخفیف رو توی سشن میزارم و نشون میدم و بعد از پرداخت اون رو توی جدول تراکنش ها ذخیره میکنم
@miladparsi1070
منم جدول کوپن و محصول و اوردر دارم خوب فقط یه جدول کارت اضافه شده cart_coupon هم میگم مثلا برای اینکه مشخص کنم کد تخفیف مال کدوم کارت هست این بحث اعمال کد یک هفته س زمانم رو گرفته یعنی کلافم کرده اساسی
@mehrdadroshanraee69
به نظرم نیازی نیست بهش
اگه میخای بدونی از کدوم تخفیف استفاده شده توی جدول اوردر (تراکنش من) یه فیلد به اسم coupon_code بزار و همونجا کد رو ذخیره کن
مشکل نشون ندادن قیمت نهاییت حل شد؟
@miladparsi1070
ممنون میشم اگه تو تلگرام زحمت بکشی بهم پیام بدی اونجا برات بفرستم
@Mehrdad279
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟