HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/ipsremont-demo/app/Http/Controllers/IndexController.php
<?php

namespace App\Http\Controllers;

use App\Helpers\UserHelper;
use App\Http\Requests\Dashboard\IndexRequest;
use App\Http\ViewComposers\NavigationComposer;
use App\Models\Branch;
use App\Models\Order;
use App\Models\Repair\Repair;
use App\Models\Shipment;
use App\Repository\Notification\NotificationRepository;
use App\Services\ActTc\ActTcService;
use App\Services\Branch\BranchService;
use App\Services\Order\OrderService;
use App\Services\Repair\RepairService;
use App\Services\Shipment\ShipmentService;
use App\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class IndexController extends Controller
{

    /** @var string */
    protected string $permission = '';

    private function getOrdersData(IndexRequest $request): array
    {
        $orderService = new OrderService();
        $orders = $orderService->getLast();
        $ordersColumns = Order::columns();

        if ($request->o_date_start) {
            $startOrder = $request->o_date_start;
            $endOrder = $request->o_date_end;
        } else {
            $startOrder = date('Y-m-01');
            $endOrder = date('Y-m-d');
        }

        $ordersStats = $orderService->getStats($startOrder, $endOrder);

        return [$orders, $ordersColumns, $ordersStats, $startOrder, $endOrder];
    }

    public function index(IndexRequest $request)
    {
        $user = UserHelper::getUser();
        if (is_null($user)) {
            return view('index');
        }

        if ($user->isService()) {
            return $this->service($request, $user);
        }
        if ($user->isManager()) {
            return $this->manager($request);
        }
        if ($user->isAdmin()) {
            return $this->admin();
        }

        return view('index');
    }

    protected function service(IndexRequest $request, User $user)
    {
        $service = $user->service;

        [$orders, $ordersColumns, $ordersStats, $startOrder, $endOrder] = $this->getOrdersData($request);

        $repairService = new RepairService();
        $repairs = $repairService->getLast();
        $repairsColumns = Repair::columns();

        $managers = $service->managers()->get();

        $notice = false; //$service->notice || empty($service->bank_name);
        $canActions = canServiceActions($user->getCurrentServiceId());

        $notification = NotificationRepository::getLast($user->getBranchIds());

        return view('index', compact('managers', 'notice', 'service', 'orders', 'ordersColumns', 'ordersStats', 'canActions', 'repairs', 'repairsColumns', 'startOrder', 'endOrder', 'notification'));
    }

    protected function manager(IndexRequest $request)
    {
        [$orders, $ordersColumns, $ordersStats, $startOrder, $endOrder] = $this->getOrdersData($request);

        $shipmentService = new ShipmentService();
        $shipments = $shipmentService->getLast();
        $shipmentColumns = Shipment::columns();

        if ($request->s_date_start) {
            $startShip = $request->s_date_start;
            $endShip = $request->s_date_end;
        } else {
            $startShip = date("Y-m-01");
            $endShip = date("Y-m-d");
        }
        $shipmentStats = $shipmentService->getStats($startShip, $endShip);

        $canActions = true;

        return view(
            'index', compact(
                'orders', 'ordersColumns', 'shipments', 'shipmentColumns', 'canActions',
                'ordersStats', 'shipmentStats',
                'startOrder', 'endOrder', 'startShip', 'endShip'
            )
        );
    }

    protected function admin()
    {
        $composer = new NavigationComposer();
        $dashBlocks = $composer->getNav();

        $adminBlocks = [
            'specifications',
            'parts',
            'services',
            'branches',
            'users',
            'emails',
            'constructor',
        ];
        $dashBlocks = array_filter($dashBlocks, function ($item) use ($adminBlocks) {
            return in_array($item['prefix'], $adminBlocks);
        });

        return view('index', compact('dashBlocks'));
    }

    public function getRepairStatData(Request $request, RepairService $service, BranchService $branchService): JsonResponse
    {
        $startDate = date('Y-m-01');
        $endDate = date('Y-m-d');
        if (!empty($request->startDate)) {
            $startDate = date('Y-m-d', strtotime($request->startDate));
        }
        if (!empty($request->endDate)) {
            $endDate = date('Y-m-d', strtotime($request->endDate));
        }
        if (!empty($request->serviceId)) {
            $serviceIds = [$request->serviceId];
        }
        if (!empty($request->branchId)) {
            /** @var Branch $branch */
            $branch = $branchService->getById($request->branchId);
            $serviceIds = $branch->services->pluck('id')->toArray();
        }

        $repairStats = $service->getStats($startDate, $endDate, $serviceIds ?? []);

        return response()->json($repairStats);
    }

    public function getTechnicalConditionReportStatData(Request $request, ActTcService $service, BranchService $branchService): JsonResponse
    {
        $startDate = date('Y-m-01');
        $endDate = date('Y-m-d');
        if (!empty($request->startDate)) {
            $startDate = date('Y-m-d', strtotime($request->startDate));
        }
        if (!empty($request->endDate)) {
            $endDate = date('Y-m-d', strtotime($request->endDate));
        }
        if (!empty($request->serviceId)) {
            $serviceIds = [$request->serviceId];
        }
        if (!empty($request->branchId)) {
            /** @var Branch $branch */
            $branch = $branchService->getById($request->branchId);
            $serviceIds = $branch->services->pluck('id')->toArray();
        }

        $stats = $service->getStats($startDate, $endDate, $serviceIds ?? []);

        return response()->json($stats);
    }

}