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