using PayRollDAL.DTO.SAP;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
namespace PayRollBLL.SAP.Builders
{
///
/// SAP Infotype 580 — Previous Employer Income.
/// Service: ZPY_ITDEC_PREVIOUS_SRV / ITDecPreviousHeaderSet
/// Source: TDECLARATION header fields only (one SAP record per declaration).
///
public class SAP580Builder : ISapInfotypeBuilder
{
public int Infotype => 580;
public string DisplayName => "Previous Employer Income";
public string EndpointPath => "/sap/opu/odata/sap/ZPY_ITDEC_PREVIOUS_SRV/ITDecPreviousHeaderSet";
public string MsgNavProperty => "NAV2ITDECPREVMSG";
public string Build(IEnumerable rows, string date, string remarks)
{
var items = rows
.GroupBy(r => r.DeclarationId)
.Select(g =>
{
var r = g.First();
return new Sap580Item
{
EmployeeId = r.EmployeeCode,
FiscalYear = r.FiscalYear,
FromDate = r.PeriodFromDate.ToString("dd.MM.yyyy"),
ToDate = r.PeriodToDate.ToString("dd.MM.yyyy"),
PreviousSalary = SapFmt.Integer(r.PreviousSalary),
PreviousPerquisites = "0",
PreviousProfitInLieu = "0",
PreviousExemptions = "0",
PreviousPTAX = SapFmt.Integer(r.PreviousPT),
PreviousPF = SapFmt.Integer(r.PreviousPF),
PreviousIncomeTax = SapFmt.Integer(r.PreviousTDS),
};
})
.ToList();
if (items.Count == 0) return string.Empty;
var payload = new Sap580Payload
{
Date = date,
NAV2ITDECPREVITEM = items,
};
return JsonSerializer.Serialize(payload, SapJsonOptions.Plain);
}
}
}