@using Indotalent.Features.Payroll.PayrollDetails.Cqrs @using Indotalent.Features.Payroll.Payrolls @using Indotalent.Shared.Utils @using Microsoft.JSInterop @using MudBlazor @inject IJSRuntime JSRuntime @inject ISnackbar Snackbar PAYROLL SLIP DETAILS @if (Data != null) {
Employee Name @Data.EmployeeName
Code @Data.EmployeeCode
Payroll Period @PeriodName
Basic Salary @Data.BasicSalary.ToString("N0")
Incomes (+) @foreach (var inc in Data.Incomes) {
@inc.ComponentName @inc.Amount.ToString("N0")
}
Deductions (-) @foreach (var ded in Data.Deductions) {
@ded.ComponentName (@ded.Amount.ToString("N0"))
}
TAKE HOME PAY @Data.TakeHomePay.ToString("N0")
}
Close Print PDF Slip
@code { [CascadingParameter] IMudDialogInstance MudDialog { get; set; } = default!; [Parameter] public GetPayrollSlipByIdResponse Data { get; set; } = new(); [Parameter] public string PeriodName { get; set; } = string.Empty; private void Cancel() => MudDialog.Cancel(); private async Task PrintPdf() { try { var pdfBytes = PayrollSlipPdfGenerator.Generate(Data, PeriodName); var fileName = $"Slip_{Data.EmployeeCode}_{DateTime.Now:yyyyMMdd}.pdf"; await JSRuntime.InvokeVoidAsync("downloadFile", fileName, "application/pdf", Convert.ToBase64String(pdfBytes)); Snackbar.Add("PDF Slip downloaded", Severity.Success); } catch (Exception ex) { Snackbar.Add($"Print failed: {ex.Message}", Severity.Error); } } }