change the giftcard logic
This commit is contained in:
@@ -11,6 +11,6 @@
|
|||||||
- 2026-09-09 | کارت هدیه فلزی | `GiftCardController::useGiftCard` | unit=2 دیگر «در دست ساخت» نیست؛ شارژ gold کیف اصلی + سینک تهحساب/زرین/پرگار؛ used_count فقط بعد از موفقیت
|
- 2026-09-09 | کارت هدیه فلزی | `GiftCardController::useGiftCard` | unit=2 دیگر «در دست ساخت» نیست؛ شارژ gold کیف اصلی + سینک تهحساب/زرین/پرگار؛ used_count فقط بعد از موفقیت
|
||||||
- 2026-09-12 | واریز کیفپول + هدیه ریالی | `Withdraw::scopeDeposits` | note«کارت هدیه» با cash>0 در لیست واریز میآید؛ هدیه مسی (فقط gold) نه
|
- 2026-09-12 | واریز کیفپول + هدیه ریالی | `Withdraw::scopeDeposits` | note«کارت هدیه» با cash>0 در لیست واریز میآید؛ هدیه مسی (فقط gold) نه
|
||||||
- 2026-09-12 | پیامک کارت هدیه | `GiftCardController::useGiftCard` | پسوند SMS: ریالی→«قلک ریال»، فلزی→«قلک مس» (نه name_fa / قلک طلا)
|
- 2026-09-12 | پیامک کارت هدیه | `GiftCardController::useGiftCard` | پسوند SMS: ریالی→«قلک ریال»، فلزی→«قلک مس» (نه name_fa / قلک طلا)
|
||||||
- 2026-09-12 | تعداد کد هدیه | `GiftCardController::redeem` | count=N → N کارت جدا هرکدام ۱ کد یکتا + مبلغ کامل؛ store هم برای unit 1/2 چندکد میسازد
|
- 2026-09-16 | تعداد کد هدیه | `GiftCardController::redeem` | count=N → یک رکورد giftcards با count=N + N ردیف giftcard_codes؛ مثل storeRedeem
|
||||||
- 2026-09-12 | انقضای کارت هدیه | `GiftCardController::validateGiftExpiryDate` + `GiftCardEditorFormBody` | تاریخ قبل از امروز → ۴۰۰ / خطای فرم؛ امروز مجاز
|
- 2026-09-12 | انقضای کارت هدیه | `GiftCardController::validateGiftExpiryDate` + `GiftCardEditorFormBody` | تاریخ قبل از امروز → ۴۰۰ / خطای فرم؛ امروز مجاز
|
||||||
- 2026-09-09 | رمز ادمین ≠ لاگین اپ | `Customer::setPasswordAttribute` + `AuthController` + `updateAdmin` | قبل از هش/لاگین ارقام فارسی→انگلیسی؛ jwt hash=false؛ آنلاین فقط password غیرخالی بفرست
|
- 2026-09-09 | رمز ادمین ≠ لاگین اپ | `Customer::setPasswordAttribute` + `AuthController` + `updateAdmin` | قبل از هش/لاگین ارقام فارسی→انگلیسی؛ jwt hash=false؛ آنلاین فقط password غیرخالی بفرست
|
||||||
|
|||||||
@@ -40,49 +40,13 @@ class GiftCardController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$customer = Customer::select('id', 'name', 'mobile')->where('mobile', $request->mobile)->first();
|
$customer = Customer::select('id', 'name', 'mobile')->where('mobile', $request->mobile)->first();
|
||||||
|
$gift = $this->createGiftCardWithUniqueCodes($request, $customer);
|
||||||
// هر عدد از «تعداد کدها» = یک کارت هدیه جدا + یک کد یکتا با همان مبلغ شارژ
|
$createdCodes = $gift->giftcardcodes->pluck('code')->all();
|
||||||
$createdGifts = [];
|
|
||||||
$createdCodes = [];
|
|
||||||
for ($i = 0; $i < $count; $i++) {
|
|
||||||
do {
|
|
||||||
$unique_code = strtoupper(bin2hex(random_bytes(4)));
|
|
||||||
} while (GiftCardCodes::where('code', $unique_code)->exists());
|
|
||||||
|
|
||||||
$gift = GiftCard::create([
|
|
||||||
'customer_id' => $customer->id ?? null,
|
|
||||||
'count' => 1,
|
|
||||||
'amount' => $amount,
|
|
||||||
'mobile' => $request->mobile ?? null,
|
|
||||||
'name' => ($customer ? $customer->name : $request->name) ?? null,
|
|
||||||
'unique_code' => $unique_code,
|
|
||||||
'total' => $amount,
|
|
||||||
'sts' => 1,
|
|
||||||
'unit' => $request->unit,
|
|
||||||
'expiry_date' => $request->expiry_date,
|
|
||||||
'created_at' => now(),
|
|
||||||
'updated_at' => now(),
|
|
||||||
'description' => $request->description,
|
|
||||||
]);
|
|
||||||
|
|
||||||
GiftCardCodes::insert([
|
|
||||||
'giftcard_id' => $gift->id,
|
|
||||||
'code' => $unique_code,
|
|
||||||
'sts' => 1,
|
|
||||||
'unit' => $request->unit,
|
|
||||||
'amount' => $amount,
|
|
||||||
'expiry_date' => $request->expiry_date,
|
|
||||||
'created_at' => now(),
|
|
||||||
]);
|
|
||||||
|
|
||||||
$createdGifts[] = $gift->load('giftcardcodes');
|
|
||||||
$createdCodes[] = $unique_code;
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'customer' => $customer ?? null,
|
'customer' => $customer ?? null,
|
||||||
'order' => $createdGifts[0] ?? null,
|
'order' => $gift,
|
||||||
'orders' => $createdGifts,
|
'orders' => [$gift],
|
||||||
'codes' => $createdCodes,
|
'codes' => $createdCodes,
|
||||||
'total' => $count * $amount,
|
'total' => $count * $amount,
|
||||||
]);
|
]);
|
||||||
@@ -439,6 +403,59 @@ class GiftCardController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* یک رکورد giftcards + N کد یکتا در giftcard_codes (نه N رکورد جدا).
|
||||||
|
*/
|
||||||
|
private function createGiftCardWithUniqueCodes(Request $request, ?Customer $customer = null): GiftCard
|
||||||
|
{
|
||||||
|
$count = (int) $request->count;
|
||||||
|
$amount = $request->amount;
|
||||||
|
$unit = (int) $request->unit;
|
||||||
|
$unitAmount = $unit === 3 ? $amount / 100 : $amount;
|
||||||
|
|
||||||
|
$gift = GiftCard::create([
|
||||||
|
'customer_id' => $customer?->id,
|
||||||
|
'use_once' => $request->use_once ? 1 : 0,
|
||||||
|
'count' => $count,
|
||||||
|
'amount' => $unitAmount,
|
||||||
|
'mobile' => $customer?->mobile ?? $request->mobile ?? null,
|
||||||
|
'name' => ($customer ? $customer->name : $request->name) ?? null,
|
||||||
|
'total' => $unit === 3 ? null : $count * $amount,
|
||||||
|
'sts' => 1,
|
||||||
|
'unit' => $request->unit,
|
||||||
|
'expiry_date' => $request->expiry_date,
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
'description' => $request->description,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$codeRows = [];
|
||||||
|
for ($i = 0; $i < $count; $i++) {
|
||||||
|
do {
|
||||||
|
$uniqueCode = strtoupper(bin2hex(random_bytes(4)));
|
||||||
|
} while (GiftCardCodes::where('code', $uniqueCode)->exists());
|
||||||
|
|
||||||
|
$codeRows[] = [
|
||||||
|
'giftcard_id' => $gift->id,
|
||||||
|
'use_once' => $request->use_once ? 1 : 0,
|
||||||
|
'code' => $uniqueCode,
|
||||||
|
'sts' => 1,
|
||||||
|
'unit' => $request->unit,
|
||||||
|
'amount' => $unitAmount,
|
||||||
|
'expiry_date' => $request->expiry_date,
|
||||||
|
'created_at' => now(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
GiftCardCodes::insert($codeRows);
|
||||||
|
|
||||||
|
if ($count === 1) {
|
||||||
|
$gift->unique_code = $codeRows[0]['code'];
|
||||||
|
$gift->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $gift->load('giftcardcodes');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* تاریخ انقضا نباید قبل از امروز باشد (امروز مجاز است).
|
* تاریخ انقضا نباید قبل از امروز باشد (امروز مجاز است).
|
||||||
*/
|
*/
|
||||||
@@ -575,48 +592,13 @@ class GiftCardController extends Controller
|
|||||||
return response()->json(['message' => 'کد تکراری میباشد!'], 400);
|
return response()->json(['message' => 'کد تکراری میباشد!'], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
$codes = [];
|
|
||||||
$unitAmount = $request->unit == 3 ? $amount / 100 : $amount;
|
$unitAmount = $request->unit == 3 ? $amount / 100 : $amount;
|
||||||
$unit = (int) $request->unit;
|
$unit = (int) $request->unit;
|
||||||
// کارت هدیه (ریالی/فلزی): همیشه N کد یکتا؛ تخفیف با use_once=0 میتواند تککد مشترک باشد
|
// کارت هدیه (ریالی/فلزی): همیشه N کد یکتا؛ تخفیف با use_once=0 میتواند تککد مشترک باشد
|
||||||
$createUniqueCodes = $request->use_once || $unit === 1 || $unit === 2;
|
$createUniqueCodes = $request->use_once || $unit === 1 || $unit === 2;
|
||||||
|
|
||||||
if ($createUniqueCodes) {
|
if ($createUniqueCodes) {
|
||||||
$gift = GiftCard::create([
|
$gift = $this->createGiftCardWithUniqueCodes($request);
|
||||||
'use_once' => $request->use_once ? 1 : 0,
|
|
||||||
'count' => $count,
|
|
||||||
'amount' => $unitAmount,
|
|
||||||
'name' => $request->name,
|
|
||||||
'total' => $request->unit == 3 ? null : $count * $amount,
|
|
||||||
'sts' => 1,
|
|
||||||
'unit' => $request->unit,
|
|
||||||
'expiry_date' => $request->expiry_date,
|
|
||||||
'created_at' => now(),
|
|
||||||
'updated_at' => now(),
|
|
||||||
'description' => $request->description,
|
|
||||||
]);
|
|
||||||
|
|
||||||
for ($i = 0; $i < $count; $i++) {
|
|
||||||
do {
|
|
||||||
$unique_code = strtoupper(bin2hex(random_bytes(4)));
|
|
||||||
} while (GiftCardCodes::where('code', $unique_code)->exists());
|
|
||||||
|
|
||||||
$codes[] = [
|
|
||||||
'giftcard_id' => $gift->id,
|
|
||||||
'use_once' => $request->use_once ? 1 : 0,
|
|
||||||
'code' => $unique_code,
|
|
||||||
'sts' => 1,
|
|
||||||
'unit' => $request->unit,
|
|
||||||
'amount' => $unitAmount,
|
|
||||||
'expiry_date' => $request->expiry_date,
|
|
||||||
'created_at' => now(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
GiftCardCodes::insert($codes);
|
|
||||||
if ($count === 1) {
|
|
||||||
$gift->unique_code = $codes[0]['code'];
|
|
||||||
$gift->save();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
do {
|
do {
|
||||||
$unique_code = strtoupper(bin2hex(random_bytes(4)));
|
$unique_code = strtoupper(bin2hex(random_bytes(4)));
|
||||||
|
|||||||
Reference in New Issue
Block a user