RatingBrowserController
Ada comment // UPDATE CLIENT-DEVICE FOR RATING itu tambahannyaunknown
php
3 years ago
5.4 kB
11
Indexable
<?php
namespace App\Http\Controllers\Rating;
use App\Collections\Rating\RatingCollection;
use App\Containers\Search\Rating\RatingSearch;
use App\Http\Controllers\Controller;
use App\Support\Browse\Browse;
use App\Support\Response\Json;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB;
class RatingBrowseController extends Controller
{
use Browse, RatingCollection {
RatingCollection::__construct as private __RatingCollectionConstruct;
}
public function __construct(Request $request)
{
if ($request) {
$this->_Request = $request;
$this->_Request->CustomFieldId = 'id_rating';
}
if (!str_contains($request->path(), 'case/result') && !str_contains($request->path(), 'my/check')) {
$this->middleware(['role:admin|approver']);
}
$this->__RatingCollectionConstruct();
}
public function Anything() {
if ($this->_Request->ArrQuery) {
$this->_ArrQuery = $this->_Request->ArrQuery;
if (!empty($this->_ArrQuery->{'s'})){
$this->SearchModel = App::make(RatingSearch::class);
$this->Search = $this->_ArrQuery->{'s'};
}
}
// UPDATE CLIENT DEVICE FOR RATING
$origin = $this->_Request->header('Client-Device');
$RatingModel = $this->RatingModel::where(function ($query) use ($origin) {
if (isset($origin)) {
$query->where('origin', $origin);
} else {
$query->where('origin', 'app');
}
if (isset($this->_ArrQuery->{'my'}) && $this->_ArrQuery->{'my'} === 'check') {
$now = Carbon::now();
$quartal = ceil((int)$now->format('n') / 3) ;
$year = (int)$now->format('Y');
$query->where([
[DB::raw("CEIL(CAST(DATE_FORMAT(rating_date, '%c' ) AS SIGNED) / 3)"), $quartal],
[DB::raw("CAST(DATE_FORMAT(rating_date, '%Y' ) AS SIGNED)"), $year],
['user_name', $this->_Request->Me->USERNAME],
]);
}
if (isset($this->_ArrQuery->{'case'}) && $this->_ArrQuery->{'case'} === 'result') {
$now = Carbon::now();
$quartal = ceil((int)$now->format('n') / 3) ;
$year = (int)$now->format('Y');
$query->where([
[DB::raw("CEIL(CAST(DATE_FORMAT(rating_date, '%c' ) AS SIGNED) / 3)"), $quartal],
[DB::raw("CAST(DATE_FORMAT(rating_date, '%Y' ) AS SIGNED)"), $year],
]);
}
if (isset($this->_ArrQuery->{'year'}) && intval($this->_ArrQuery->{'year'}) !== 0) {
$year = (int)$this->_ArrQuery->{'year'};
$query->where([
[DB::raw("CAST(DATE_FORMAT(rating_date, '%Y' ) AS SIGNED)"), $year],
]);
}
if (isset($this->_ArrQuery->{'quartal'}) && intval($this->_ArrQuery->{'quartal'}) !== 0) {
$quartal = (int)$this->_ArrQuery->{'quartal'};
$query->where([
[DB::raw("CEIL(CAST(DATE_FORMAT(rating_date, '%c' ) AS SIGNED) / 3)"), $quartal],
]);
}
if (!empty($this->_ArrQuery->{'date.from'})) {
$query->where(DB::raw("DATE_FORMAT(rating_date, '%Y-%m-%d' )"), '>=', $this->_ArrQuery->{'date.from'});
}
if (!empty($this->_ArrQuery->{'date.to'})) {
$query->where(DB::raw("DATE_FORMAT(rating_date, '%Y-%m-%d' )"), '<=', $this->_ArrQuery->{'date.to'});
}
});
$RatingModel->select(
"$this->RatingTable.id_rating as Rating.id_rating",
"$this->RatingTable.user_name as Rating.user_name",
"$this->RatingTable.rating_val as Rating.rating_val",
"$this->RatingTable.rating_comment as Rating.rating_comment",
"$this->RatingTable.rating_date as Rating.rating_date",
"$this->RatingTable.rating_periode as Rating.rating_periode",
);
$Browse = $this->orderBy(['id', 'rating_date', 'rating_periode', 'rating_val'])->Browse($this->_Request, $RatingModel, function ($data) {
$data = $this->Manipulate($data);
$data = $this->getUserDetail($data);
if (isset($this->_ArrQuery->{'case'}) && $this->_ArrQuery->{'case'} === 'result') {
$data = $this->getResult($data);
}
if (isset($this->_ArrQuery->{'case'}) && $this->_ArrQuery->{'case'} === 'result-admin') {
$data = $this->getResultAdmin($data);
}
return $data;
});
Json::set('data', $Browse);
Json::set('response.code', 200);
Json::set('response.description', 'OK');
return response()->json(Json::get(), Json::get('response.code'));
}
private function Manipulate($records)
{
return $records->map(function ($item) {
foreach ($item->getAttributes() as $key => $value) {
$this->Group($item, $key, 'Rating.', $item);
}
return $item;
});
}
}
Editor is loading...