| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace App\Services;
- use App\Models\FnmBaseBracket;
- use App\Models\FranchiseeFnmBracket;
- use App\Models\FranchiseeMaintenanceBracket;
- use App\Models\FranchiseeRoyaltiesBracket;
- use App\Models\FranchiseeTbr;
- use App\Models\MaintenanceBaseBracket;
- use App\Models\RoyaltiesBaseBracket;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Pagination\LengthAwarePaginator;
- class FranchiseeTbrService
- {
- public function paginate(int $perPage = 15): LengthAwarePaginator
- {
- return FranchiseeTbr::with(['franchisee', 'contract', 'inhabitantClassification'])
- ->orderBy('created_at', 'desc')
- ->paginate($perPage);
- }
- public function findById(int $id): ?FranchiseeTbr
- {
- return FranchiseeTbr::with([
- 'franchisee',
- 'contract',
- 'inhabitantClassification',
- 'royaltiesBracket',
- 'fnmBracket',
- 'maintenanceBracket',
- ])->find($id);
- }
- public function createWithBrackets(array $data): FranchiseeTbr
- {
- return DB::transaction(function () use ($data) {
- $franchiseeId = $data['franchisee_id'];
- $royaltyBrackets = $this->copyBaseBrackets(RoyaltiesBaseBracket::class, FranchiseeRoyaltiesBracket::class, $franchiseeId);
- $fnmBrackets = $this->copyBaseBrackets(FnmBaseBracket::class, FranchiseeFnmBracket::class, $franchiseeId);
- $maintenanceBrackets = $this->copyBaseBrackets(MaintenanceBaseBracket::class, FranchiseeMaintenanceBracket::class, $franchiseeId);
- return FranchiseeTbr::create(array_merge($data, [
- 'franchisee_royalties_bracket_id' => $royaltyBrackets->first()?->id,
- 'franchisee_fnm_bracket_id' => $fnmBrackets->first()?->id,
- 'franchisee_maintenance_bracket_id' => $maintenanceBrackets->first()?->id,
- ]));
- });
- }
- public function update(int $id, array $data): ?FranchiseeTbr
- {
- $model = $this->findById($id);
- if (!$model) {
- return null;
- }
- $model->update($data);
- return $model->fresh();
- }
- public function delete(int $id): bool
- {
- $model = $this->findById($id);
- if (!$model) {
- return false;
- }
- return $model->delete();
- }
- private function copyBaseBrackets(string $baseClass, string $franchiseeClass, int $franchiseeId): \Illuminate\Database\Eloquent\Collection
- {
- $baseBrackets = $baseClass::orderBy('start_month')->get();
- $copied = $baseBrackets->map(fn ($base) => $franchiseeClass::create([
- 'franchisee_id' => $franchiseeId,
- 'description' => $base->description,
- 'start_month' => $base->start_month,
- 'end_month' => $base->end_month,
- 'percentage' => $base->percentage,
- ]));
- return $copied;
- }
- }
|