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);
}
}
}