get(); } public function getActive(): Collection { $today = now()->toDateString(); return FranchiseeContract::with('unit') ->whereNotNull('start_date') ->whereNotNull('end_date') ->where('start_date', '<=', $today) ->where('end_date', '>=', $today) ->orderBy('start_date') ->get(); } public function findById(int $id): ?FranchiseeContract { return FranchiseeContract::find($id); } public function getByUnitId(int $unitId): Collection { return FranchiseeContract::where('unit_id', $unitId) ->orderBy('created_at', 'desc') ->get(); } public function create(array $data): FranchiseeContract { $data['protocol'] = (FranchiseeContract::where('unit_id', $data['unit_id'])->max('protocol') ?? 0) + 1; $data['signature_date'] = $data['start_date']; if (isset($data['start_date'], $data['end_date'])) { $data['validity_months'] = (int) \Carbon\Carbon::parse($data['start_date']) ->diffInMonths(\Carbon\Carbon::parse($data['end_date'])); } return FranchiseeContract::create($data); } public function update(int $id, array $data): ?FranchiseeContract { $model = $this->findById($id); if (!$model) { return null; } $taxFields = ['inhabitant_classification_id', 'tbr_fixed_value', 'marketing_fund_percentage', 'maintance_tax_percentage']; $hasTaxChange = collect($taxFields)->contains(fn($field) => array_key_exists($field, $data)); $model->update($data); if ($hasTaxChange) { FranchiseeContractTaxHistory::create([ 'franchisee_contract_id' => $model->id, 'inhabitant_classification_id' => $model->inhabitant_classification_id, 'tbr_fixed_value' => $model->tbr_fixed_value, 'marketing_fund_percentage' => $model->marketing_fund_percentage, 'maintance_tax_percentage' => $model->maintance_tax_percentage, ]); } return $model->fresh(); } public function getTaxHistory(int $id): Collection { return FranchiseeContractTaxHistory::with('inhabitantClassification') ->where('franchisee_contract_id', $id) ->orderBy('created_at', 'desc') ->get(); } public function delete(int $id): bool { $model = $this->findById($id); if (!$model) { return false; } return $model->delete(); } // Add custom business logic methods here }