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