ManagementSystem/BACKEND/Modules/Admin/app/Http/Controllers/DiscountController.php

134 lines
3.5 KiB
PHP
Executable File

<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Admin\app\Http\Requests\DiscountRequest;
use Modules\Admin\app\Models\Discount;
class DiscountController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
public function get(DiscountRequest $request)
{
$discount = new Discount;
// Order by
$this->orderByRequest($discount, $request);
// Filter
$this->filterRequest(
builder: $discount,
request: $request,
filterKeys: [
'active_date' => self::F_THAN_EQ_DATETIME,
'expiry' => self::F_LESS_EQ_DATETIME,
'date_used' => self::F_IN_DATETIME,
'code' => self::F_TEXT,
'value' => self::F_TEXT,
'email' => self::F_TEXT,
'discount_type_id' => self::F_NOT_CONTAIN,
'status' => self::F_BOOLEAN,
]
);
$this->searchRequest(
builder: $discount,
value: $request->get('search'),
fields: [
'code',
'email',
'value'
]
);
$responseData = array_merge(
$discount->paginate($request->get('per_page'))->toArray(),
['status' => true]
);
return response()->json($responseData);
}
public function create(DiscountRequest $request)
{
$payload = $request->all();
$discount = Discount::createWithDefault($payload);
return response()->json([
'data' => $discount,
'status' => true
]);
}
public function update(DiscountRequest $request)
{
$id = $request->get('id');
$discount = Discount::find($id);
$payload = $request->all();
if ($discount) {
$discount->update($payload);
}
return response()->json([
'data' => $discount,
'status' => true
]);
}
public function delete(DiscountRequest $request)
{
$id = $request->get('id');
Discount::destroy($id);
return response()->json([
'status' => true
]);
}
// Delete multiple discounts
public function deletes(DiscountRequest $request)
{
$discounts = $request->get('discounts');
$ids = collect($discounts)->pluck('id');
Discount::whereIn('id', $ids)->delete();
return response()->json([
'data' => $ids,
'status' => true
]);
}
// Update multiple discounts
public function updates(DiscountRequest $request)
{
$discounts = $request->get('discounts');
$ids = collect($discounts)->pluck('id');
foreach ($discounts as $discountRequest) {
// convert to object|array to array
$discountRequest = collect($discountRequest)->toArray();
// handle array
$discount = Discount::find($discountRequest['id']);
if ($discount) {
// exclude id field
unset($discount['id']);
$discount->update($discountRequest);
}
}
return response()->json([
'data' => Discount::whereIn('id', $ids)->get(),
'status' => true
]);
}
}