|
@@ -15,12 +15,14 @@ use App\Models\Order;
|
|
|
use App\Models\Reclamation;
|
|
use App\Models\Reclamation;
|
|
|
use App\Models\ReclamationDetail;
|
|
use App\Models\ReclamationDetail;
|
|
|
use App\Models\ReclamationStatus;
|
|
use App\Models\ReclamationStatus;
|
|
|
|
|
+use App\Models\ReclamationType;
|
|
|
use App\Models\ReclamationView;
|
|
use App\Models\ReclamationView;
|
|
|
use App\Models\User;
|
|
use App\Models\User;
|
|
|
use App\Services\FileService;
|
|
use App\Services\FileService;
|
|
|
use App\Services\NotificationService;
|
|
use App\Services\NotificationService;
|
|
|
use App\Services\SparePartReservationService;
|
|
use App\Services\SparePartReservationService;
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Request;
|
|
|
|
|
+use Illuminate\Database\Eloquent\Builder;
|
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Carbon;
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
use Throwable;
|
|
use Throwable;
|
|
@@ -35,6 +37,7 @@ class ReclamationController extends Controller
|
|
|
'id' => 'ID',
|
|
'id' => 'ID',
|
|
|
'user_name' => 'Менеджер',
|
|
'user_name' => 'Менеджер',
|
|
|
'status_name' => 'Статус',
|
|
'status_name' => 'Статус',
|
|
|
|
|
+ 'reclamation_type_name' => 'Тип',
|
|
|
'district_name' => 'Округ',
|
|
'district_name' => 'Округ',
|
|
|
'area_name' => 'Район',
|
|
'area_name' => 'Район',
|
|
|
'object_address' => 'Адрес объекта',
|
|
'object_address' => 'Адрес объекта',
|
|
@@ -73,7 +76,7 @@ class ReclamationController extends Controller
|
|
|
$nav = $this->startNavigationContext($request);
|
|
$nav = $this->startNavigationContext($request);
|
|
|
$model = new ReclamationView();
|
|
$model = new ReclamationView();
|
|
|
// fill filters
|
|
// fill filters
|
|
|
- $this->createFilters($model, 'user_name', 'status_name');
|
|
|
|
|
|
|
+ $this->createFilters($model, 'user_name', 'status_name', 'reclamation_type_name');
|
|
|
$this->createDateFilters($model, 'create_date', 'finish_date');
|
|
$this->createDateFilters($model, 'create_date', 'finish_date');
|
|
|
|
|
|
|
|
$q = $model::query();
|
|
$q = $model::query();
|
|
@@ -82,6 +85,7 @@ class ReclamationController extends Controller
|
|
|
$this->acceptSearch($q, $request);
|
|
$this->acceptSearch($q, $request);
|
|
|
$this->setSortAndOrderBy($model, $request);
|
|
$this->setSortAndOrderBy($model, $request);
|
|
|
|
|
|
|
|
|
|
+ $this->data['tab'] = $this->applyReclamationTypeTab($q, $request);
|
|
|
$this->applyReclamationVisibilityScope($q, $request->user());
|
|
$this->applyReclamationVisibilityScope($q, $request->user());
|
|
|
|
|
|
|
|
$this->applyStableSorting($q);
|
|
$this->applyStableSorting($q);
|
|
@@ -97,23 +101,26 @@ class ReclamationController extends Controller
|
|
|
'withFilter' => 'nullable',
|
|
'withFilter' => 'nullable',
|
|
|
'filters' => 'nullable|array',
|
|
'filters' => 'nullable|array',
|
|
|
's' => 'nullable|string',
|
|
's' => 'nullable|string',
|
|
|
|
|
+ 'tab' => 'nullable|in:dkr',
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
$filterRequest = $request->boolean('withFilter')
|
|
$filterRequest = $request->boolean('withFilter')
|
|
|
? new Request(array_filter([
|
|
? new Request(array_filter([
|
|
|
'filters' => $request->input('filters', []),
|
|
'filters' => $request->input('filters', []),
|
|
|
's' => $request->input('s'),
|
|
's' => $request->input('s'),
|
|
|
|
|
+ 'tab' => $request->input('tab'),
|
|
|
], static fn ($value) => $value !== null))
|
|
], static fn ($value) => $value !== null))
|
|
|
: new Request();
|
|
: new Request();
|
|
|
|
|
|
|
|
$model = new ReclamationView();
|
|
$model = new ReclamationView();
|
|
|
- $this->createFilters($model, 'user_name', 'status_name');
|
|
|
|
|
|
|
+ $this->createFilters($model, 'user_name', 'status_name', 'reclamation_type_name');
|
|
|
$this->createDateFilters($model, 'create_date', 'finish_date');
|
|
$this->createDateFilters($model, 'create_date', 'finish_date');
|
|
|
|
|
|
|
|
$q = $model::query();
|
|
$q = $model::query();
|
|
|
$this->acceptFilters($q, $filterRequest);
|
|
$this->acceptFilters($q, $filterRequest);
|
|
|
$this->acceptSearch($q, $filterRequest);
|
|
$this->acceptSearch($q, $filterRequest);
|
|
|
$this->setSortAndOrderBy($model, $filterRequest);
|
|
$this->setSortAndOrderBy($model, $filterRequest);
|
|
|
|
|
+ $this->applyReclamationTypeTab($q, $filterRequest);
|
|
|
$this->applyReclamationVisibilityScope($q, $request->user());
|
|
$this->applyReclamationVisibilityScope($q, $request->user());
|
|
|
$this->applyStableSorting($q);
|
|
$this->applyStableSorting($q);
|
|
|
|
|
|
|
@@ -130,6 +137,7 @@ class ReclamationController extends Controller
|
|
|
$nav = $this->resolveNavToken($request);
|
|
$nav = $this->resolveNavToken($request);
|
|
|
$reclamation = Reclamation::query()->create([
|
|
$reclamation = Reclamation::query()->create([
|
|
|
'order_id' => $order->id,
|
|
'order_id' => $order->id,
|
|
|
|
|
+ 'reclamation_type_id' => ReclamationType::idForCode(ReclamationType::CODE_DKR),
|
|
|
'user_id' => $request->user()->id,
|
|
'user_id' => $request->user()->id,
|
|
|
'status_id' => Reclamation::STATUS_NEW,
|
|
'status_id' => Reclamation::STATUS_NEW,
|
|
|
'create_date' => Carbon::now(),
|
|
'create_date' => Carbon::now(),
|
|
@@ -151,6 +159,7 @@ class ReclamationController extends Controller
|
|
|
->pluck('name', 'id');
|
|
->pluck('name', 'id');
|
|
|
$this->data['reclamation'] = $reclamation->load([
|
|
$this->data['reclamation'] = $reclamation->load([
|
|
|
'order',
|
|
'order',
|
|
|
|
|
+ 'reclamationType',
|
|
|
'chatMessages.user',
|
|
'chatMessages.user',
|
|
|
'chatMessages.targetUser',
|
|
'chatMessages.targetUser',
|
|
|
'chatMessages.notifiedUsers',
|
|
'chatMessages.notifiedUsers',
|
|
@@ -567,6 +576,9 @@ class ReclamationController extends Controller
|
|
|
|
|
|
|
|
public function generateReclamationPaymentPack(Request $request, Reclamation $reclamation)
|
|
public function generateReclamationPaymentPack(Request $request, Reclamation $reclamation)
|
|
|
{
|
|
{
|
|
|
|
|
+ $this->ensureCanViewReclamation($reclamation);
|
|
|
|
|
+ abort_unless($reclamation->isDkr(), 403);
|
|
|
|
|
+
|
|
|
GenerateReclamationPaymentPack::dispatch($reclamation, auth()->user()->id);
|
|
GenerateReclamationPaymentPack::dispatch($reclamation, auth()->user()->id);
|
|
|
return $this->redirectToReclamationShow($request, $reclamation)
|
|
return $this->redirectToReclamationShow($request, $reclamation)
|
|
|
->with(['success' => 'Задача генерации пакета документов на оплату создана!']);
|
|
->with(['success' => 'Задача генерации пакета документов на оплату создана!']);
|
|
@@ -609,6 +621,19 @@ class ReclamationController extends Controller
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private function applyReclamationTypeTab(Builder $query, Request $request): string
|
|
|
|
|
+ {
|
|
|
|
|
+ $tab = $request->input('tab') === ReclamationType::CODE_DKR
|
|
|
|
|
+ ? ReclamationType::CODE_DKR
|
|
|
|
|
+ : 'all';
|
|
|
|
|
+
|
|
|
|
|
+ if ($tab === ReclamationType::CODE_DKR) {
|
|
|
|
|
+ $query->where('reclamation_type_code', ReclamationType::CODE_DKR);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $tab;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private function canViewReclamationByVisibilityScope(Reclamation $reclamation, ?User $user): bool
|
|
private function canViewReclamationByVisibilityScope(Reclamation $reclamation, ?User $user): bool
|
|
|
{
|
|
{
|
|
|
return match ($user?->visibilityScope('reclamations')) {
|
|
return match ($user?->visibilityScope('reclamations')) {
|