64 lines
2.3 KiB
PHP
64 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Maintenance\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Maintenance\Http\Controllers\Concerns\AuthorizesMaintenance;
|
|
use Modules\Maintenance\Models\Equipment;
|
|
use Modules\Maintenance\Models\ProductionLine;
|
|
use Modules\Maintenance\Models\WorkOrder;
|
|
use Modules\Maintenance\Utils\MaintenanceUtil;
|
|
use Modules\Project\Entities\Project;
|
|
|
|
class ContactMaintenanceController extends Controller
|
|
{
|
|
use AuthorizesMaintenance;
|
|
|
|
public function __construct(
|
|
protected MaintenanceUtil $maintenanceUtil
|
|
) {}
|
|
|
|
public function equipment(Request $request, $contact_id)
|
|
{
|
|
$this->authorizeMaintenanceAccess('maintenance.equipment.view');
|
|
|
|
$business_id = $this->maintenanceUtil->getBusinessId();
|
|
|
|
$equipment = Equipment::where('business_id', $business_id)
|
|
->where('customer_id', $contact_id)
|
|
->with(['category', 'productionLine', 'project'])
|
|
->orderByDesc('created_at')
|
|
->get()
|
|
->map(function ($eq) {
|
|
$arr = $eq->toArray();
|
|
$arr['status_label'] = $this->maintenanceUtil->statusLabel($eq->status);
|
|
|
|
return $this->maintenanceUtil->appendJalaliDatesToApiPayload($arr);
|
|
});
|
|
|
|
$projects = class_exists(Project::class)
|
|
? Project::where('business_id', $business_id)->where('contact_id', $contact_id)->get(['id', 'name'])
|
|
: collect();
|
|
|
|
$projectIds = $projects->pluck('id')->filter();
|
|
$lines = ProductionLine::where('business_id', $business_id)
|
|
->when($projectIds->isNotEmpty(), fn ($q) => $q->whereIn('project_id', $projectIds))
|
|
->when($projectIds->isEmpty(), fn ($q) => $q->whereRaw('1 = 0'))
|
|
->with('project:id,name')
|
|
->get();
|
|
|
|
$openWorkOrders = WorkOrder::where('business_id', $business_id)
|
|
->whereIn('status', ['open', 'in_progress', 'draft'])
|
|
->whereHas('equipment', fn ($q) => $q->where('customer_id', $contact_id))
|
|
->count();
|
|
|
|
return response()->json([
|
|
'equipment' => $equipment,
|
|
'projects' => $projects,
|
|
'lines' => $lines,
|
|
'open_work_orders' => $openWorkOrders,
|
|
]);
|
|
}
|
|
}
|