added kashkool
This commit is contained in:
@@ -12,12 +12,17 @@ use App\Models\Withdraw;
|
||||
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
|
||||
use Rooyesh\Wallet\interfaces\TransactionInterface;
|
||||
use Rooyesh\Wallet\interfaces\WalletInterface;
|
||||
use App\Services\ConfigService;
|
||||
|
||||
|
||||
class GiftCardController extends Controller
|
||||
{
|
||||
public function redeem(Request $request)
|
||||
{
|
||||
if (app(ConfigService::class)->isStore()) {
|
||||
return $this->storeRedeem($request);
|
||||
}
|
||||
|
||||
$user = auth()->user();
|
||||
$count = $request->count;
|
||||
$amount = $request->amount;
|
||||
@@ -170,6 +175,203 @@ class GiftCardController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function useDiscount(Request $request)
|
||||
{
|
||||
if (! app(ConfigService::class)->isStore()) {
|
||||
return response()->json(['message' => 'این قابلیت فقط برای فروشگاه فعال است'], 403);
|
||||
}
|
||||
|
||||
$result = $this->applyDiscount((string) $request->input('code'), auth('customer')->id());
|
||||
|
||||
if (! empty($result['message'])) {
|
||||
return response()->json(['message' => $result['message']], 400);
|
||||
}
|
||||
|
||||
return response()->json(['amount' => $result['amount']]);
|
||||
}
|
||||
|
||||
public function validateDiscount(Request $request)
|
||||
{
|
||||
if (! app(ConfigService::class)->isStore()) {
|
||||
return response()->json(['message' => 'این قابلیت فقط برای فروشگاه فعال است'], 403);
|
||||
}
|
||||
|
||||
$giftcode = $this->verifyDiscount((string) $request->input('code'));
|
||||
if (! empty($giftcode['message'])) {
|
||||
return response()->json(['message' => $giftcode['message']], 400);
|
||||
}
|
||||
|
||||
return response()->json(['giftcard' => $giftcode], 200);
|
||||
}
|
||||
|
||||
private function storeRedeem(Request $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
$count = $request->count;
|
||||
$amount = $request->amount;
|
||||
if (! $user) {
|
||||
throw new UnprocessableEntityHttpException('auth failed!');
|
||||
}
|
||||
|
||||
if ((! is_numeric($count) || $count < 0) || (! is_numeric($amount) || $amount <= 0)) {
|
||||
return response()->json(['message' => 'تعداد کد را چک کنید!'], 400);
|
||||
}
|
||||
|
||||
if (isset($request->code) && GiftCardCodes::where('code', $request->code)->where('unit', $request->unit)->exists()) {
|
||||
return response()->json(['message' => 'کد تکراری میباشد!'], 400);
|
||||
}
|
||||
|
||||
$codes = [];
|
||||
$unitAmount = $request->unit == 3 ? $amount / 100 : $amount;
|
||||
|
||||
if ($request->use_once) {
|
||||
$gift = GiftCard::create([
|
||||
'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);
|
||||
} else {
|
||||
do {
|
||||
$unique_code = strtoupper(bin2hex(random_bytes(4)));
|
||||
} while (GiftCardCodes::where('code', $unique_code)->exists());
|
||||
|
||||
$gift = GiftCard::create([
|
||||
'use_once' => $request->use_once ? 1 : 0,
|
||||
'count' => $count,
|
||||
'unique_code' => ! empty($request->code) ? $request->code : $unique_code,
|
||||
'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,
|
||||
]);
|
||||
|
||||
GiftCardCodes::insert([
|
||||
'giftcard_id' => $gift->id,
|
||||
'use_once' => $request->use_once ? 1 : 0,
|
||||
'code' => ! empty($request->code) ? $request->code : $unique_code,
|
||||
'sts' => 1,
|
||||
'unit' => $request->unit,
|
||||
'amount' => $unitAmount,
|
||||
'expiry_date' => $request->expiry_date,
|
||||
'created_at' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'order' => $gift,
|
||||
'codes' => $gift->giftcardcodes,
|
||||
'total' => $count * $amount,
|
||||
]);
|
||||
}
|
||||
|
||||
private function applyDiscount(string $code, $customerId): array
|
||||
{
|
||||
$giftcode = $this->verifyDiscount($code);
|
||||
if (! empty($giftcode['message'])) {
|
||||
return ['message' => $giftcode['message']];
|
||||
}
|
||||
|
||||
$giftcode = GiftCardCodes::where('code', $code)->first();
|
||||
$gift = GiftCard::find($giftcode->giftcard_id);
|
||||
|
||||
$idsArray = json_decode($giftcode->assigned_to, true);
|
||||
if (! is_array($idsArray)) {
|
||||
$idsArray = [];
|
||||
}
|
||||
|
||||
$idsArray[] = $customerId;
|
||||
if ($gift->use_once == 1) {
|
||||
$giftcode->sts = 2;
|
||||
}
|
||||
$giftcode->assigned_to = json_encode($idsArray);
|
||||
$giftcode->save();
|
||||
|
||||
$gift->used_count += 1;
|
||||
if ($gift->used_count + 1 > $gift->count) {
|
||||
$gift->sts = 2;
|
||||
}
|
||||
$gift->save();
|
||||
|
||||
return ['amount' => $giftcode->amount];
|
||||
}
|
||||
|
||||
private function verifyDiscount(string $code)
|
||||
{
|
||||
$giftcode = GiftCardCodes::where('code', $code)->first();
|
||||
|
||||
if (! $giftcode) {
|
||||
return ['message' => 'کد تخفیف یافت نشد!'];
|
||||
}
|
||||
|
||||
$gift = GiftCard::find($giftcode->giftcard_id);
|
||||
$customer_id = auth('customer')->id();
|
||||
|
||||
if ($gift->unit !== 3 || $giftcode->unit !== 3) {
|
||||
return ['message' => 'کد تخفیف صحیح نمیباشد!'];
|
||||
}
|
||||
|
||||
if ($gift->use_once === 0) {
|
||||
$stored_ids = json_decode($giftcode->assigned_to, true);
|
||||
if (is_array($stored_ids) && in_array($customer_id, $stored_ids)) {
|
||||
return ['message' => 'شما قبلا از تخفیف خود استفاده کرده اید!'];
|
||||
}
|
||||
} elseif ($gift->use_once === 1) {
|
||||
if (GiftCardCodes::where('giftcard_id', $gift->id)->where('assigned_to', '['.auth('customer')->id().']')->exists()) {
|
||||
return ['message' => 'شما قبلا از تخفیف خود استفاده کرده اید!'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($gift->expiry_date <= now() || $gift->sts === 3) {
|
||||
$gift->sts = 3;
|
||||
$giftcode->sts = 3;
|
||||
$giftcode->save();
|
||||
$gift->save();
|
||||
|
||||
return ['message' => 'کد تخفیف منقضی شده است!'];
|
||||
}
|
||||
|
||||
if ($giftcode->sts === 2) {
|
||||
return ['message' => 'کد تخفیف قبلا استفاده شده است!'];
|
||||
}
|
||||
|
||||
if ($gift->used_count + 1 > $gift->count) {
|
||||
return ['message' => 'تعداد استفاده کد تخفیف به پایان رسیده است!'];
|
||||
}
|
||||
|
||||
return $giftcode;
|
||||
}
|
||||
|
||||
public function table(Request $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
Reference in New Issue
Block a user