Aplikasi Keuangan yang mengatur lalu lintas transaksi antara bank dan aplikasi internal Kampus
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

88 lines
3.0 KiB

<?php
use App\Attributes\LayoutData;
use App\Attributes\Seo;
use App\Domains\Academic\Models\StudyProgram;
use App\Domains\Admission\Actions\AdmissionPricing\SetUpAdmissionFeeRates;
use App\Domains\Admission\DTOs\AdmissionPricing\AdmissionFeeRatesDTO;
use App\Domains\Admission\Models\AcademicProgram;
use App\Domains\Admission\Models\AdmissionSchedule;
use App\Domains\Admission\Models\FeeRate;
use App\Domains\Admission\Models\FeeType;
use App\Livewire\Concerns\HasLayoutDataAttributes;
use App\Livewire\Concerns\HasSeoAttributes;
use App\Livewire\Concerns\WithToast;
use Illuminate\Support\Collection;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Locked;
use Livewire\Component;
new #[Layout('components.layouts.app')]
#[Seo(title: 'domains/admission/seo.admission-schedule-detail.title', description: 'domains/admission/seo.admission-schedule-detail.description', keywords: 'domains/admission/seo.admission-schedule-detail.keywords')]
#[LayoutData(header: 'domains/admission/seo.admission-schedule.title', breadcrumbs: ['ui.menu.dashboard' => 'dashboard', 'domains/admission/seo.admission-schedule.title' => 'admission-schedules.index', '{admissionTrack.name} {term.name}' => ''], context: 'admissionSchedule')]
class extends Component
{
use HasLayoutDataAttributes;
use HasSeoAttributes;
use WithToast;
#[Locked]
public string $id;
public function mount($id): void
{
$this->id = $id;
}
#[Computed]
public function admissionSchedule(): AdmissionSchedule
{
return AdmissionSchedule::with(['admissionTrack', 'term'])
->where('ulid', $this->id)->first();
}
#[Computed]
public function studyPrograms(): Collection
{
return StudyProgram::all(['id', 'name', 'ulid']);
}
#[Computed]
public function academicPrograms(): Collection
{
return AcademicProgram::all(['id', 'name', 'ulid']);
}
#[Computed]
public function feeTypes(): Collection
{
return FeeType::all(['id', 'name', 'ulid']);
}
#[Computed]
public function feeRates(): Collection
{
return FeeRate::where('admission_schedule_id', $this->admissionSchedule->id)
->get();
}
public function updateFee(string $feeTypeId, string $programId, string $studyId, int $value, SetUpAdmissionFeeRates $setUpAdmissionFeeRates): true
{
$feeType = $this->feeTypes->where('ulid', $feeTypeId)->first();
$program = $this->academicPrograms->where('ulid', $programId)->first();
$study = $this->studyPrograms->where('ulid', $studyId)->first();
$setUpAdmissionFeeRates->execute(new AdmissionFeeRatesDTO(
academicProgramId: $program->id,
admissionScheduleId: $this->admissionSchedule->id,
studyProgramId: $study->id,
feeTypeId: $feeType->id,
amount: $value
));
$this->success(__('ui.crud.success.updated', ['resource' => __('ui.fee_type')]));
$this->dispatch('$refresh');
return true;
}
};