orderBy('company_name') ->get(); } public function getAllPaginated(array $filters = [], int $perPage = 10): LengthAwarePaginator { $query = PartnerAgreement::with(['category', 'city', 'logo']) ->orderBy('company_name'); if (!empty($filters['search'])) { $search = $filters['search']; $query->where(function ($q) use ($search) { $q->where('company_name', 'like', "%{$search}%") ->orWhere('responsible', 'like', "%{$search}%") ->orWhere('cnpj', 'like', "%{$search}%"); }); } if (!empty($filters['expires_in_days'])) { $days = (int) $filters['expires_in_days']; $query->whereBetween('contract_end', [now()->startOfDay(), now()->addDays($days)->endOfDay()]); } if (!empty($filters['created_month']) && $filters['created_month'] === 'current') { $query->whereMonth('created_at', now()->month) ->whereYear('created_at', now()->year); } return $query->paginate($perPage); } public function getExpiringPaginated(int $days = 30, int $perPage = 10): LengthAwarePaginator { return PartnerAgreement::with(['category', 'city', 'logo']) ->whereNotNull('contract_end') ->whereBetween('contract_end', [now()->startOfDay(), now()->addDays($days)->endOfDay()]) ->orderBy('contract_end') ->paginate($perPage); } public function findById(int $id): ?PartnerAgreement { return PartnerAgreement::with(['category', 'city', 'state', 'services', 'logo', 'media', 'user'])->find($id); } public function findByUserId(int $userId): ?PartnerAgreement { $partner = PartnerAgreement::with(['category', 'city', 'state', 'services', 'logo', 'media']) ->where('user_id', $userId) ->first(); if(!$partner) { $partner = new PartnerAgreement(); $partner->company_name = 'Novo Parceiro'; $partner->user_id = $userId; $partner->save(); $partner->fresh(['category', 'city', 'state', 'services', 'logo', 'media']); } return $partner; } public function findDados(int $id): ?PartnerAgreement { return PartnerAgreement::with(['category', 'logo'])->find($id); } public function findContato(int $id): ?PartnerAgreement { return PartnerAgreement::find($id); } public function findEndereco(int $id): ?PartnerAgreement { return PartnerAgreement::with(['city', 'state'])->find($id); } public function findContrato(int $id): ?PartnerAgreement { return PartnerAgreement::with(['media'])->find($id); } public function create(array $data): PartnerAgreement { $user = User::create([ 'name' => $data['user_name'], 'email' => $data['user_email'], 'password' => Hash::make($data['user_password']), 'type' => UserTypeEnum::PARCEIRO, ]); $partnerData = collect($data) ->except(['user_name', 'user_email', 'user_password']) ->put('user_id', $user->id) ->all(); $model = PartnerAgreement::create($partnerData); return $model->fresh(['category', 'logo', 'user']); } public function update(int $id, array $data): ?PartnerAgreement { $model = PartnerAgreement::find($id); if (!$model) { return null; } $model->update($data); return $model->fresh(['category', 'city', 'state', 'logo', 'media']); } public function delete(int $id): bool { $model = PartnerAgreement::find($id); if (!$model) { return false; } return $model->delete(); } }