user(); $count = $request->count; $amount = $request->amount; if(!$user){ throw new UnprocessableEntityHttpException('auth failed!'); } $codes = []; if((!is_numeric($count) || $count < 0) || (!is_numeric($amount) || $amount <= 0)){ return response()->json(['message' => 'تعداد کد را چک کنید!'], 400); } $customer = Customer::select('id', 'name', 'mobile')->where('mobile', $request->mobile)->first(); $gift = GiftCard::create([ 'customer_id' => $customer->id ?? null, 'count' => $count, 'amount' => $amount, 'mobile' => $request->mobile ?? null, 'name' => ($customer ? $customer->name : $request->name) ?? null, 'amount' => $amount, 'total' => $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, 'code' => $unique_code, 'sts' => 1, 'unit' => $request->unit, 'amount' => $amount, 'expiry_date' => $request->expiry_date, 'created_at' => now(), ]; } GiftCardCodes::insert($codes); return response()->json([ 'customer' => $customer ?? null, 'order' => $gift, 'codes' => $gift->giftcardcodes, 'total' => $count*$amount, ]); } public function useGiftCard(Request $request){ $user = auth()->user(); if(!$user){ throw new UnprocessableEntityHttpException('auth failed!'); } $redeem = $request->code; $giftcode = GiftCardCodes::where('code', $redeem)->first(); $gift = GiftCard::find($giftcode->giftcard_id); if(!$giftcode){ return response()->json(['message' => 'کد هدیه یافت نشد!'], 404); } //gift order update $gift = GiftCard::find($giftcode->giftcard_id); if($gift->used_count+1 === $gift->count){ $gift->sts = 2; }elseif($gift->expiry_date <= now()){ $gift->sts = 3; $giftcode->sts = 3; $giftcode->save(); $gift->save(); return response()->json(['message' => 'کد هدیه منقضی شده است!'], 400); } $gift->used_count += 1; $gift->save(); if($giftcode->sts != 1){ return response()->json(['message' => 'کد هدیه قبلا استفاده شده است!'], 400); } //tranaction if($giftcode->unit === 1){ //add IRR to user wallet $Withdraw = Withdraw::create([ 'customer_id' => auth('customer')->id(), "cash" => $giftcode->amount, "note" => "کارت هدیه", 'sts' => 1, 'order_id' => $giftcode->id, ]); $Withdraw->tracked_number = $giftcode->code; // توکن تراکنش برابر کد گیفت کارت if ($Withdraw->cash == $giftcode->amount) { if ($Withdraw->order_id){ $this->verifyOrder($Withdraw->id); } $Withdraw->zify_code = $Withdraw->tracked_number; $Withdraw->tracked_number = $giftcode->id;//gift card id $Withdraw->sts = 6; $Withdraw->save(); $wallet_interface_fund = new WalletInterface($user->id, $user->type); $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ "cash" => $giftcode->amount, 'expire_at' => now(), 'withdraw_id' => $Withdraw->id, 'active' => true ], 3, false, true); } //set text for sms to customer $amount = number_format($giftcode->amount); $message = "$user->name عزیز کیف پول شما به مقدار $amount ریال به واسطه کارت هدیه از طرف $gift->name شارژ شد. قلک طلا"; }elseif ($giftcode->unit === 2){ //add Gold to user wallet return response()->json(['message'=> 'در دست ساخت👷🏻🚧'], 400); } //gift code update $giftcode->assigned_to = $user->id; $giftcode->sts = 2; $giftcode->used_at = now(); $giftcode->save(); $this->Send($user->mobile, $message); return response()->json([ 'message' => 'کد هدیه با موفقیت استفاده شد!', 'code' => $giftcode->code, 'amount' => $giftcode->amount, 'unit' => $giftcode->unit, ]); } public function table(Request $request) { $user = auth()->user(); if(!$user){ throw new UnprocessableEntityHttpException('auth failed!'); } $records = GiftCard::with([ 'giftcardcodes', 'giftcardcodes.assignedTo' ]); TableEngine::create($records, $request->all()) ->initSearch([]) ->select([ '*', GiftCard::$SELECT_STS_STR ])->export($records); return response()->json($records); } }