/
home
/
corsairdevelopme
/
public_html
/
amplivo-console
/
app
/
Http
/
Controllers
/
Backend
/
Upload File
HOME
<?php namespace App\Http\Controllers\Backend; use App\Http\Controllers\Controller; use App\Models\CSRNow\User as CsrNowUser; use App\Models\User; use Illuminate\Http\Request; use App\Models\GiftCode; class RedemptionController extends Controller { protected $permissionPrefix; function __construct() { $permissionPrefix = $this->permissionPrefix = 'redemption'; $this->middleware("permission:$permissionPrefix-list", ['only' => ['index', 'redemptionAll']]); } public function index() { return view('backend.redemption.redemption-index'); } public function redemptionAll(Request $request) { $search = $request->filter; $filter = (array) json_decode($search); $sort = $request->sort ?: 'created_at'; $order = $request->order ?: 'desc'; $offset = $request->offset; $limit = $request->limit; $sort = $sort == "counter" ? "id" : $sort; $query = GiftCode::with('purchaseProduct','purchaseProduct.walletLog','purchaseProduct.ProductStaticOption','user','redeemedBy') ->whereNotNull('redeem_by') ->when($search, function ($q) use ($filter) { foreach ($filter as $key => $item) { if ($item) { if ($key == 'name') { if ($item == 'Plastic Neutrality Package'){ $q->whereHas("purchaseProduct", function ($q) use ($item) { $q->whereNull('product_static_option_id'); }); } else { $q->whereHas("purchaseProduct", function ($q) use ($item) { $q->whereHas("ProductStaticOption", function ($q) use ($item) { $q->where('title', 'like', '%' . $item . '%'); }); }); } } else if ($key == 'username') { $externalId = CsrNowUser::where("username", 'LIKE', '%' . trim($item) . '%')->pluck('id'); $userId = User::whereIntegerInRaw('external_id',$externalId)->pluck('id'); $q->whereIntegerInRaw('redeem_by',$userId); } else if ($key == 'transaction_id') { $q->whereHas("purchaseProduct", function ($q) use ($item) { $q->whereHas("walletLog", function ($q) use ($item) { $q->where('transaction_id', 'like', '%' . $item . '%'); }); }); } else if ($key == 'created_at') { $dates = explode(' - ', $item); $startDate = createFromFormatCustom($dates[0]); $endDate = createFromFormatCustom($dates[1]); $q->whereDate('redeemed_date', '>=', $startDate)->whereDate('redeemed_date', '<=', $endDate); } else if ($key == 'amount') { $q->whereHas("purchaseProduct", function ($q) use ($item) { $q->where('price', 'like', '%' . $item . '%'); }); } else if ($key == 'type') { $q->whereHas("purchaseProduct", function ($q) use ($item) { $q->where('product_type', $item); }); } else { $q->where($key, 'like', '%' . $item . '%'); } } } })->orderBy($sort, $order); $count = $query->count(); $row = $query->when($offset, function ($q) use ($offset) { $q->offset($offset); })->when($limit, function ($q) use ($limit) { $q->limit($limit); })->get()->toArray(); $index = $offset + 1; foreach ($row as $key => $item) { $username = isset($item['redeemed_by']['details']) ? ($item['redeemed_by']['details']['username'] ?? '') : ''; $transaction_id = $item['purchase_product']['wallet_log']['transaction_id'] ?? null; $profileUrl = route('admin.member.viewPurchaseMember', basicEncrypt($item['redeem_by'] ?? '')); $row[$key]['counter'] = $index; $row[$key]['status'] = ($item['status'] == 4) ? 'Rejected' : 'Completed'; $row[$key]['username'] = '<a class="text-info" type="button" target="_blank" href="' . $profileUrl . '" data-toggle="tooltip" data-placement="top" title="View User Detail">'.$username.'</a>'; $row[$key]['name'] = $item['purchase_product']['product_static_option']['title'] ?? 'Plastic Neutrality Package'; $row[$key]['transaction_id'] = '<span class="text-monospace">'.$transaction_id.'</span>'; $row[$key]['amount'] = formatDisplayNumber($item['purchase_product']['price']); $row[$key]['gift_code'] = '<span class="text-monospace">'.$item['gift_code'].'</span>'; $row[$key]['created_at'] = getDateWithIcon($item['redeemed_date']); $row[$key]['reference_no'] = '<span class="text-monospace">'.$item['reference_no'].'</span>'; $row[$key]['type'] = $item['purchase_product']['product_type_name'] ?? ''; $index++; } if (count($row) == 0) { $count = 0; } return [ 'items' => $row, 'count' => $count, ]; } }