2021-03-19 10:32:45 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
use App\Casts\NiceDate;
|
2021-03-19 10:32:45 +01:00
|
|
|
use App\Enums\DepartaimantCollectionType;
|
|
|
|
|
use App\Enums\DepartaimantStatus;
|
2021-03-19 21:40:10 +01:00
|
|
|
use App\Http\Requests\SaveCustomerCollectionRequest;
|
|
|
|
|
use App\Http\Requests\SearchCustomerCollectionRequest;
|
2021-03-20 14:54:33 +01:00
|
|
|
use App\Lib\Utils;
|
2021-04-30 18:40:16 +02:00
|
|
|
use App\Models\BlockList;
|
2021-03-19 10:32:45 +01:00
|
|
|
use App\Models\DepartaimantsCollection;
|
2021-03-19 21:40:10 +01:00
|
|
|
use Illuminate\Support\Collection;
|
2021-03-19 10:32:45 +01:00
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
|
|
|
|
|
|
class BourseController extends Controller
|
|
|
|
|
{
|
2021-03-19 21:40:10 +01:00
|
|
|
public function bourse()
|
2021-03-19 10:32:45 +01:00
|
|
|
{
|
2021-03-21 14:14:41 +01:00
|
|
|
ClubController::getNotifications();
|
2021-03-19 10:32:45 +01:00
|
|
|
/** @var \App\Models\Customers */
|
|
|
|
|
$customer = Auth::guard('customer')->user();
|
2021-03-19 21:40:10 +01:00
|
|
|
/** @var \Illuminate\Database\Eloquent\Collection */
|
|
|
|
|
$depCollections = $customer->getOrCreateAllDepartaimentsCollections();
|
2021-03-19 10:32:45 +01:00
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
$departaimants = json_encode($this->getUserDepartaimantsMaps($depCollections));
|
2021-03-19 10:32:45 +01:00
|
|
|
|
|
|
|
|
return view('front.club.bourse', compact('departaimants'));
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
public function bourseSaveState(SaveCustomerCollectionRequest $request, DepartaimantCollectionType $type)
|
2021-03-19 10:32:45 +01:00
|
|
|
{
|
|
|
|
|
/** @var \App\Models\Customers */
|
|
|
|
|
$user = Auth::guard('customer')->user();
|
2021-03-21 14:14:41 +01:00
|
|
|
/** @var \App\Models\DepartaimantsCollection $departaimant */
|
|
|
|
|
$departaimant = $user->departaimantsCollections()
|
2021-03-19 21:40:10 +01:00
|
|
|
->where('type', $type->value)->firstOrFail();
|
|
|
|
|
|
2021-03-20 14:38:15 +01:00
|
|
|
$depStatus = DepartaimantStatus::make((int)$request->state);
|
2021-03-19 21:40:10 +01:00
|
|
|
|
2021-03-21 14:14:41 +01:00
|
|
|
$departaimant->set(
|
2021-03-19 21:40:10 +01:00
|
|
|
forward_static_call([$request->maps[$type->value], 'make'], $request->id),
|
|
|
|
|
$depStatus
|
|
|
|
|
);
|
2021-03-19 10:32:45 +01:00
|
|
|
|
2021-03-21 14:14:41 +01:00
|
|
|
$departaimant->saveOrFail();
|
2021-03-19 10:32:45 +01:00
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'OK',
|
|
|
|
|
'map' => $this->getUserDepartaimantsMaps($user->departaimantsCollections)
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
public function bourseSearch(SearchCustomerCollectionRequest $request, DepartaimantCollectionType $type)
|
2021-03-19 10:32:45 +01:00
|
|
|
{
|
2021-03-19 21:40:10 +01:00
|
|
|
$output = collect();
|
2021-03-20 14:38:15 +01:00
|
|
|
$state = DepartaimantStatus::make((int)$request->state);
|
2021-03-20 12:08:49 +01:00
|
|
|
$pseudo = $request->pseudo;
|
2021-03-20 14:54:33 +01:00
|
|
|
$departaimant = str_replace(['-', ' ', '\''], '', strtolower($request->departaimant ?? ''));
|
|
|
|
|
$departaimant = Utils::replaceSpecChar($departaimant);
|
2021-03-19 10:32:45 +01:00
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
if ($state->equals(DepartaimantStatus::gives())) {
|
2021-03-19 10:32:45 +01:00
|
|
|
$status = DepartaimantStatus::wants();
|
2021-03-19 21:40:10 +01:00
|
|
|
} elseif ($state->equals(DepartaimantStatus::wants())) {
|
2021-03-19 10:32:45 +01:00
|
|
|
$status = DepartaimantStatus::gives();
|
|
|
|
|
} else {
|
2021-03-19 21:40:10 +01:00
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'KO',
|
|
|
|
|
'message' => 'Message cannot search with other status than wants or gives'
|
|
|
|
|
]);
|
2021-03-19 10:32:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @var \App\Models\Customers */
|
|
|
|
|
$customer = Auth::guard('customer')->user();
|
2021-04-30 18:40:16 +02:00
|
|
|
$ids = collect(BlockList::select('customer_id', 'blocked_id')
|
|
|
|
|
->where('customer_id', $customer->id)
|
|
|
|
|
->orWhere('blocked_id', $customer->id)->get()->toArray());
|
|
|
|
|
$ids = $ids->flatten()->unique()->all();
|
2021-03-19 10:32:45 +01:00
|
|
|
$userDep = $customer->departaimantsCollections()->where('type', $type->value)->first();
|
|
|
|
|
$userDepStatus = [];
|
|
|
|
|
foreach ($userDep->getAllDepartaimants() as $dep) {
|
|
|
|
|
if ($dep->status->value === $state->value) {
|
2021-03-20 12:08:49 +01:00
|
|
|
// hack to prevent php to cast array key to int
|
|
|
|
|
$userDepStatus['.' . $dep->departaimant->value] = $dep->departaimant;
|
2021-03-19 10:32:45 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
$req = DepartaimantsCollection::getDepartaimantsCollectionWithStatus($userDepStatus, $status, $type)
|
|
|
|
|
->with('customer');
|
2021-03-20 12:08:49 +01:00
|
|
|
|
2021-04-30 18:40:16 +02:00
|
|
|
$req->whereHas('customer', function ($query) use ($pseudo, $ids) {
|
|
|
|
|
// handle blocked ids
|
|
|
|
|
if (count($ids)) {
|
|
|
|
|
$query->where('id', 'NOT IN', implode(',', $ids));
|
|
|
|
|
}
|
|
|
|
|
// Filter with Pseudo
|
|
|
|
|
if ($pseudo !== null) {
|
2021-03-19 21:40:10 +01:00
|
|
|
$query->where('username', 'LIKE', "%$pseudo%");
|
2021-04-30 18:40:16 +02:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
$req->orderBy('updated_at', 'DESC');
|
2021-03-19 21:40:10 +01:00
|
|
|
|
|
|
|
|
/** @var \Illuminate\Database\Eloquent\Collection $depsCollection */
|
2021-03-20 12:08:49 +01:00
|
|
|
$depsCollection = $req->simplePaginate(15);
|
2021-03-19 21:40:10 +01:00
|
|
|
|
|
|
|
|
/** @var \App\Models\DepartaimantsCollection $depCollection */
|
|
|
|
|
foreach ($depsCollection as $depCollection) {
|
|
|
|
|
foreach ($depCollection->getAllDepartaimantsWithStatus($type, $status) as $dep) {
|
|
|
|
|
$dep = (object)$dep;
|
2021-03-20 12:08:49 +01:00
|
|
|
if (
|
2021-03-20 14:38:15 +01:00
|
|
|
$dep->status->equals($status)
|
2021-03-20 12:08:49 +01:00
|
|
|
// Filter results with Departaimant
|
2021-03-20 14:38:15 +01:00
|
|
|
and (strlen($departaimant) ? strpos(
|
2021-03-21 14:14:41 +01:00
|
|
|
strtolower(Utils::replaceSpecChar(
|
2021-03-22 13:30:50 +01:00
|
|
|
str_replace(['-', ' ', '\''], '', $dep->departaimant->value . $dep->departaimant->label)
|
2021-03-21 14:14:41 +01:00
|
|
|
)),
|
2021-03-20 14:38:15 +01:00
|
|
|
$departaimant
|
|
|
|
|
) !== false : true)
|
2021-03-20 12:08:49 +01:00
|
|
|
// Filter results with customer Departaimants
|
2021-03-20 14:38:15 +01:00
|
|
|
and array_key_exists('.' . $dep->departaimant->value, $userDepStatus)
|
2021-03-20 12:08:49 +01:00
|
|
|
) {
|
2021-03-19 21:40:10 +01:00
|
|
|
$output->add([
|
2021-03-22 13:30:50 +01:00
|
|
|
'departaimantCode' => $dep->departaimant->value,
|
2021-03-19 21:40:10 +01:00
|
|
|
'departaimant' => $dep->departaimant->label,
|
|
|
|
|
'username' => $depCollection->customer->username,
|
|
|
|
|
'hashcode' => $depCollection->customer->hashcode,
|
|
|
|
|
'date' => (new NiceDate())->get(null, '', $depCollection->updated_at, [])
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-03-19 10:32:45 +01:00
|
|
|
}
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
$output->sortBy('date');
|
2021-03-19 10:32:45 +01:00
|
|
|
|
2021-03-20 12:08:49 +01:00
|
|
|
return response()->json(['status' => 'OK', 'data' => $output->values(), 'page' => 1]);
|
2021-03-19 10:32:45 +01:00
|
|
|
}
|
|
|
|
|
|
2021-03-19 21:40:10 +01:00
|
|
|
/**
|
|
|
|
|
* Undocumented function
|
|
|
|
|
*
|
|
|
|
|
* @param Collection $departaimantsCollection
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
private function getUserDepartaimantsMaps(Collection $departaimantsCollection): array
|
2021-03-19 10:32:45 +01:00
|
|
|
{
|
|
|
|
|
$datas = $departaimantsCollection->mapWithKeys(function ($collection) {
|
|
|
|
|
$datas = [];
|
|
|
|
|
foreach ($collection->getAllDepartaimants() as $departaimantItem) {
|
|
|
|
|
$datas[$collection->type->value][] = [
|
|
|
|
|
'id' => $departaimantItem->departaimant->value,
|
|
|
|
|
'name' => $departaimantItem->departaimant->label,
|
|
|
|
|
'state' => $departaimantItem->status->value,
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
return $datas;
|
|
|
|
|
})->toArray();
|
|
|
|
|
|
|
|
|
|
return $datas;
|
|
|
|
|
}
|
|
|
|
|
}
|