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);
}
}