using FastEndpoints; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.ResponseStandard; using GB5Shared.FastEndPoint; using PayRollBLL.SAPPaySlip; using System.Threading; using System.Threading.Tasks; using static GB5Shared.GB5Constant.Constant; namespace PayRollSL.EndPoints.SAPPaySlip { /// /// GET /PaySlip/GetSAPPaySlip /// /// Retrieves the logged-in employee's payslip PDF from the SAP ZPY_PAYSLIP_SRV OData service. /// /// The following are resolved automatically from the login session and server configuration: /// • EmployeeID — LoginDTO.UserCode /// • SapClient — morganizationunit.organizationunitcode (by LoginDTO.ClientId) /// • Username — SapPaySlip:Username in appsettings.json /// • Password — SapPaySlip:Password in appsettings.json /// /// Query parameters (caller provides): /// FiscalYear — 4-digit year between 2000 and 2100 (e.g. "2025") /// Month — Month number 1–12, 1- or 2-digit (e.g. "1" or "01") /// /// On success each item in the response contains: /// EmployeeID — SAP employee number, zero-padded (e.g. "00001493") /// FiscalYear — 4-digit year /// Month — 2-digit month /// PayslipForm — Base64-encoded PDF; decode with atob() (browser) or /// Convert.FromBase64String() (.NET) to render or download. /// public class GetSAPPaySlip : BaseEndpoint> { private readonly ISAPPaySlipBLL _bll; public GetSAPPaySlip(ISAPPaySlipBLL bll) => _bll = bll; public override void Configure() { Get("/PaySlip/GetSAPPaySlip"); AllowAnonymous(); } public record GetSAPPaySlipParameters( [property: FromHeader] string Login, /// SAP employee number, e.g. "1493" or "00001493". [property: QueryParam] string EmployeeID, /// 4-digit fiscal year (2000–2100), e.g. "2025". [property: QueryParam] string FiscalYear, /// Month number 1–12, e.g. "1" or "01". [property: QueryParam] string Month ); protected override string? GetCacheKey(GetSAPPaySlipParameters req, LoginDTO login) => null; protected override async Task> ExecuteAsync( GetSAPPaySlipParameters req, LoginDTO login, CancellationToken ct) { var results = await _bll.GetPaySlipAsync( req.EmployeeID, req.FiscalYear, req.Month, login, ct); return await GB5Shared.ResponseStandard.Response .CreateSuccessResponse(results, CacheKeyLevel.NOT_REQUIRED, login); } } }