@using Indotalent.Features.Organization.Employee @using Indotalent.Features.Organization.Employee.Cqrs @using Indotalent.Shared.Utils @using MudBlazor @implements IDisposable @inject EmployeeService EmployeeService @inject ISnackbar Snackbar Add New Employee Create a comprehensive employee profile and organizational placement. @if (_isLoadingData) { Synchronizing Records... } else { BASIC IDENTITY Employee Code Salary Grade @foreach (var item in _lookupData.Grades) { @item.Name (@item.Code) Range: @item.SalaryFrom.ToString("N0") - @item.SalaryTo.ToString("N0") } First Name Middle Name Last Name PAYROLL & BANKING Basic Salary (Monthly) @if (!string.IsNullOrEmpty(_model.GradeId)) { var selectedGrade = _lookupData.Grades.FirstOrDefault(x => x.Id == _model.GradeId); if (selectedGrade != null) { Allowed range: @selectedGrade.SalaryFrom.ToString("N0") - @selectedGrade.SalaryTo.ToString("N0") } } Salary Bank Name Bank Account Name Bank Account Number PERSONAL DETAILS Place of Birth Date of Birth Gender Male Female Marital Status Religion Identity Number (KTP) Tax Number (NPWP) Blood Type Last Education ORGANIZATIONAL Branch @foreach (var item in _lookupData.Branches) { @item.Name } Department @foreach (var item in _lookupData.Departments) { @item.Name } Designation @foreach (var item in _lookupData.Designations) { @item.Name } Joined Date Resigned Date Employee Status Employment Type Job Description ADDRESS & CONTACT Email Phone Street Address City Province Zip Code SOCIAL MEDIA LinkedIn Instagram TikTok Facebook X (Twitter) OTHERS Other Info 1 Other Info 2 Other Info 3 Cancel @if (_processing) { Creating... } else { Create Employee } } @code { [Parameter] public EventCallback OnCancel { get; set; } [Parameter] public EventCallback OnSuccess { get; set; } private MudForm? _form; private CreateEmployeeRequest _model = new(); private CreateEmployeeValidator _validator = new(); private LookupResponse _lookupData = new(); private bool _processing = false; private bool _isLoadingData = true; private bool _isDisposed = false; public void Dispose() => _isDisposed = true; protected override async Task OnInitializedAsync() { try { _isLoadingData = true; var response = await EmployeeService.GetLookupAsync(); if (response?.IsSuccess == true) { _lookupData = response.Value ?? new(); } } finally { if (!_isDisposed) { _isLoadingData = false; StateHasChanged(); } } } private async Task Submit() { await _form!.Validate(); if (!_form.IsValid) return; _processing = true; try { var res = await EmployeeService.CreateEmployeeAsync(_model); await Task.Delay(500); if (res?.IsSuccess == true) { Snackbar.Add("Employee Created Successfully", Severity.Success); await OnSuccess.InvokeAsync(); } } finally { _processing = false; } } }