added kashkool
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Category;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Category::query();
|
||||
|
||||
if ($request->has('active')) {
|
||||
$query->where('active', (int) $request->active);
|
||||
}
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$query->where('name', 'like', '%' . $request->search . '%');
|
||||
}
|
||||
|
||||
$categories = $query
|
||||
->orderBy('id', 'asc')
|
||||
->get();
|
||||
|
||||
return response()->json($categories);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$name = trim((string) $request->input('name'));
|
||||
|
||||
if ($name === '') {
|
||||
throw new UnprocessableEntityHttpException('نام دستهبندی الزامی است');
|
||||
}
|
||||
|
||||
if (Category::where('name', $name)->exists()) {
|
||||
throw new UnprocessableEntityHttpException('این دستهبندی قبلا ثبت شده است');
|
||||
}
|
||||
|
||||
$category = Category::create([
|
||||
'name' => $name,
|
||||
'active' => $request->has('active') ? (int) $request->active : 1,
|
||||
]);
|
||||
|
||||
return response()->json($category);
|
||||
}
|
||||
|
||||
public function clientIndex(Request $request)
|
||||
{
|
||||
$query = Category::query()
|
||||
->where('active', 1);
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$query->where('name', 'like', '%' . $request->search . '%');
|
||||
}
|
||||
|
||||
$categories = $query
|
||||
->orderBy('id', 'asc')
|
||||
->get();
|
||||
|
||||
return response()->json($categories);
|
||||
}
|
||||
|
||||
public function changeActive($id, $active)
|
||||
{
|
||||
$active = (int) $active;
|
||||
|
||||
if (! in_array($active, [0, 1], true)) {
|
||||
throw new UnprocessableEntityHttpException('وضعیت active نامعتبر است');
|
||||
}
|
||||
|
||||
$category = Category::findOrFail($id);
|
||||
|
||||
$category->active = $active;
|
||||
$category->save();
|
||||
|
||||
return response()->json([
|
||||
'message' => $active ? 'دستهبندی فعال شد' : 'دستهبندی غیرفعال شد',
|
||||
'data' => $category,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -180,6 +180,26 @@ class ProductController extends SuperController
|
||||
return response()->json($products);
|
||||
}
|
||||
|
||||
public function ProductById($id)
|
||||
{
|
||||
$this->getPrice();
|
||||
$this->auto_close_open();
|
||||
$product = Product::with(['file'])
|
||||
->where('id', $id)
|
||||
->first();
|
||||
|
||||
if ($product) {
|
||||
$product->similar = Product::with(['file'])
|
||||
->where('group_type', $product->group_type)
|
||||
->where('id', '!=', $id)
|
||||
->get();
|
||||
} else {
|
||||
return response()->json(false);
|
||||
}
|
||||
|
||||
return response()->json($product);
|
||||
}
|
||||
|
||||
public function getPrice()
|
||||
{
|
||||
app(\App\Services\ProductPriceSyncService::class)->syncAll(true);
|
||||
|
||||
Reference in New Issue
Block a user