session()->get('user.business_id'); $this->authorizeProjectAccess($business_id, (int) $project_id); if (! $request->ajax() || ! class_exists(\Modules\Maintenance\Models\Equipment::class) || ! $this->moduleUtil->isModuleInstalled('Maintenance')) { abort(404); } $query = \Modules\Maintenance\Models\Equipment::where('business_id', $business_id) ->where('project_id', $project_id) ->with(['category:id,name', 'productionLine:id,name']) ->orderByDesc('created_at'); $util = app(\Modules\Maintenance\Utils\MaintenanceUtil::class); return DataTables::of($query) ->addColumn('category_name', fn ($row) => $row->category?->name ?? '—') ->addColumn('line_name', fn ($row) => $row->productionLine?->name ?? '—') ->addColumn('status_label', fn ($row) => $util->statusLabel($row->status)) ->addColumn('action', function ($row) { if (! auth()->user()->can('maintenance.equipment.view')) { return '—'; } return ''; }) ->rawColumns(['action']) ->make(true); } public function assets(Request $request, $project_id) { $business_id = (int) request()->session()->get('user.business_id'); $this->authorizeProjectAccess($business_id, (int) $project_id); if (! $request->ajax() || ! class_exists(\Modules\AssetManagement\Entities\Asset::class) || ! $this->moduleUtil->isModuleInstalled('AssetManagement')) { abort(404); } $query = \Modules\AssetManagement\Entities\Asset::where('business_id', $business_id) ->where('project_id', $project_id) ->orderByDesc('created_at'); return DataTables::of($query) ->editColumn('unit_price', function ($row) { return ''.$row->unit_price.''; }) ->editColumn('quantity', fn ($row) => $this->commonUtil->num_f($row->quantity, false, null, true)) ->addColumn('action', function ($row) { if (! auth()->user()->can('asset.view') && ! auth()->user()->can('asset.view_all_maintenance')) { return '—'; } return ''; }) ->rawColumns(['action', 'unit_price']) ->make(true); } protected function authorizeProjectAccess(int $business_id, int $project_id): void { if (! (auth()->user()->can('superadmin') || $this->moduleUtil->hasThePermissionInSubscription($business_id, 'project_module'))) { abort(403, 'Unauthorized action.'); } $query = Project::where('business_id', $business_id)->where('id', $project_id); if (! $this->commonUtil->is_admin(auth()->user(), $business_id)) { $user_id = auth()->user()->id; $query->whereHas('members', fn ($q) => $q->where('user_id', $user_id)); } $query->firstOrFail(); } }