Files
boursecu_server/app/Http/Controllers/Admin/GiftCardController.php
T

192 lines
6.4 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Customer;
use App\Models\GiftCard;
use App\Models\GiftCardCodes;
use App\DB\Te\TableEngine;
use App\Models\Withdraw;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
use Rooyesh\Wallet\interfaces\TransactionInterface;
use Rooyesh\Wallet\interfaces\WalletInterface;
class GiftCardController extends Controller
{
public function redeem(Request $request)
{
$user = auth()->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)){
2026-05-04 14:52:50 +00:00
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,
'name' => $customer ? $customer->name : $request->name,
'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,
'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){
2026-05-04 14:52:50 +00:00
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();
2026-05-04 14:52:50 +00:00
return response()->json(['message' => 'کد هدیه منقضی شده است!'], 400);
}
$gift->used_count += 1;
$gift->save();
if($giftcode->sts != 1){
2026-05-04 14:52:50 +00:00
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);
}
}