From 1109c9fce68247e7cdac2eeb236512327da14e6f Mon Sep 17 00:00:00 2001 From: Andrii Zhuk Date: Thu, 25 Jul 2024 12:13:59 -0400 Subject: [PATCH] Load xml --- .../FormCompareTools/FormCompareTool.csproj | 5 ++ .../FormCompareTools/FormParameters.cs | 2 + .../FormCompareTools/InputParameters.cs | 2 + FormCompareTools/FormCompareTools/Program.cs | 48 +++++++++++++++++- .../FormCompareTools/nm_forms.xlsx | Bin 9526 -> 9641 bytes .../FormCompareTools/nm_pit_1.json | 5 ++ .../FormCompareTools/nm_pit_1_test_1.json | 2 + .../FormCompareTools/state-irs-submission.xml | 9 ++++ 8 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 FormCompareTools/FormCompareTools/state-irs-submission.xml diff --git a/FormCompareTools/FormCompareTools/FormCompareTool.csproj b/FormCompareTools/FormCompareTools/FormCompareTool.csproj index ca716bd..7b89d46 100644 --- a/FormCompareTools/FormCompareTools/FormCompareTool.csproj +++ b/FormCompareTools/FormCompareTools/FormCompareTool.csproj @@ -161,6 +161,11 @@ + + + PreserveNewest + + \ No newline at end of file diff --git a/FormCompareTools/FormCompareTools/FormParameters.cs b/FormCompareTools/FormCompareTools/FormParameters.cs index 4ad01be..7786b16 100644 --- a/FormCompareTools/FormCompareTools/FormParameters.cs +++ b/FormCompareTools/FormCompareTools/FormParameters.cs @@ -6,6 +6,8 @@ namespace FormCompareTools { public string FormName { get; set; } public string MainTableName { get; set; } + public string XmlFormName { get; set; } public Dictionary Columns { get; set; } + public Dictionary XmlColumns { get; set; } } } diff --git a/FormCompareTools/FormCompareTools/InputParameters.cs b/FormCompareTools/FormCompareTools/InputParameters.cs index f03d089..1089be0 100644 --- a/FormCompareTools/FormCompareTools/InputParameters.cs +++ b/FormCompareTools/FormCompareTools/InputParameters.cs @@ -7,8 +7,10 @@ public string PrimarySsn { get; set; } public string FormName { get; set; } public string TestName { get; set; } + public string BatchXml { get; set; } public string LinesColumn { get; set; } = "A"; public string DatabaseColumn { get; set; } = "E"; + public string BatchXmColumn { get; set; } = "F"; public int FirstRow { get; set; } public int LastRow { get; set; } public string PrimarySsnCell { get; set; } = "C1"; diff --git a/FormCompareTools/FormCompareTools/Program.cs b/FormCompareTools/FormCompareTools/Program.cs index 41cece7..b046bb5 100644 --- a/FormCompareTools/FormCompareTools/Program.cs +++ b/FormCompareTools/FormCompareTools/Program.cs @@ -5,7 +5,11 @@ using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; +using System.Linq; using System.Text.Json; +using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; namespace FormCompareTools { @@ -52,7 +56,8 @@ namespace FormCompareTools return null; } - static void Main(string[] args){ + static void Main(string[] args) + { var inputParametersJson = GetParametersFile(args); var inputFormParametersJson = GetFormParametersFile(args); @@ -74,6 +79,8 @@ namespace FormCompareTools formParameters = JsonSerializer.Deserialize(fs); } + var xmlFormData = LoadBatchXml(inputParameters, formParameters); + var sheetName = $"{inputParameters.FormName}_{inputParameters.TestName}"; var wb = new XLWorkbook(inputParameters.ExcelTemplate); @@ -99,6 +106,7 @@ namespace FormCompareTools for (int i = inputParameters.FirstRow; i <= inputParameters.LastRow; i++) { var databaseValueCell = $"{inputParameters.DatabaseColumn}{i}"; + var batchXmlValueCell = $"{inputParameters.BatchXmColumn}{i}"; var lineCell = $"{inputParameters.LinesColumn}{i}"; var lineNumber = GetCellValue(worksheet, lineCell); @@ -118,6 +126,25 @@ namespace FormCompareTools worksheet.Cell(databaseValueCell).Value = rawValue.ToString(); } } + + if (formParameters.XmlColumns.TryGetValue(lineNumber, out var xmlElementName)) + { + if (xmlFormData.TryGetValue(xmlElementName, out var rawXmlValue)) + { + if (int.TryParse(rawXmlValue.ToString(), out var intValue)) + { + worksheet.Cell(batchXmlValueCell).Value = intValue; + } + else if (decimal.TryParse(rawXmlValue.ToString(), out var decimalValue)) + { + worksheet.Cell(batchXmlValueCell).Value = decimalValue; + } + else + { + worksheet.Cell(batchXmlValueCell).Value = rawXmlValue.ToString(); + } + } + } } worksheet.Cell(inputParameters.PrimarySsnCell).Value = inputParameters.PrimarySsn; @@ -134,6 +161,25 @@ namespace FormCompareTools } } + private static Dictionary LoadBatchXml(InputParameters inputParameters, FormParameters formParameters) + { + var xml = XDocument.Load(inputParameters.BatchXml); + XNamespace ns = "http://www.irs.gov/efile"; + XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xml.CreateReader().NameTable); + namespaceManager.AddNamespace("ns", ns.NamespaceName); + XElement xmlFormNode = xml.XPathSelectElement($"//ns:{formParameters.XmlFormName}", namespaceManager); + + var xmlFormData = new Dictionary { }; + if (xmlFormNode != null) + { + // Convert descendants to dictionary + xmlFormData = xmlFormNode + .Descendants() + .ToDictionary(x => x.Name.LocalName, x => x.Value); + } + return xmlFormData; + } + private static string GetCellValue(IXLWorksheet worksheet, string lineCell) { var lineNumber = string.Empty; diff --git a/FormCompareTools/FormCompareTools/nm_forms.xlsx b/FormCompareTools/FormCompareTools/nm_forms.xlsx index 162067e81d71368e9c25243ed0aa80099f495d54..86ed3e2f48093dd2fc2f49c153a4a2476859fe72 100644 GIT binary patch delta 2854 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 mun_;mQlpN*na>KXhtCb delta 2716 zcmZ8jX*d)L7alW)h%uH5lQ1)7o~+p=OJl3CWJ#7%i0n&b$`~CXJfN+BHA{m+EjLZ)CE3EHjAJ)^^+D()I05V-KCz6(sgz~1nlLE zzOv0Jw}6oL(|r<7pX7S`I1Gs?sKioNK~;Yp~I@4K>vUDaj> z{QC7zjSoZ(oAx3eA-n(N2)#h&+4|x}GY5A#X5(#``-F`^((nw&GX~ttF@0JrX1yMR zwN;j-eVJ0vJG8Md77m;+(pLr2wgu$aaD-#zqs$MtstUjQ5S2C}ponG_ES;45y`_&o zs$AFl)3fJ()%jOc_@f`SevCBPOE2D)Ci<*4iM;+%bJetNGGBVsdSbHb6ys_J)KO;X zJ3UxeVXErdqZv_{4pen;-*o&YUrN=3G5z&-?wYh4Qo7Y5%>pSNvpWg#E)$2&`AhTz z#!5cff%wK7rf?K=4^t4mBF0B+jNC$QsCap>iDpaQA-2`2dqlnNh%^^eVi$~>U zej6yYQx|8q0&Nt`;q%TJD|}NIJQu@{u|G$Lx!d2tNL052S!b8APSK zV~Vb5(%5I8wPF>cZ(?FH!j$B%8kwfgFgsT0c;-}NsxlYwJbG2lIboQTa@QW0sb4KP zs%_`!<$-OxRClZ8whZfsoLv<%4gcYS%ZR9K*tUwljW_r(nZmOajMFajXxoi_3Bwjk zgb58^s2kVR^R$dl%qhR49d3`V|>xQ@ye=)N71vZWVvHlQ;OH;k{H~6C9G9a&M05aKcVAKb$A(Q{{Gr zyU6^K+~p!*(V{ZGj*!g#m98Q+MlH9($Q$kre zj@_TkJkHaG$ zzW(yoRdw(s@=#DkAN2h7ef#6S_2%yL`%vfX-X9U=)D&hE0sBDNcwpdZ;7?I%qrLgUK@U& z3YoqgKj7WvPflxKQ;ju_Z9ytjn!ImmeDZyrvsYrPJ8zHix=?K#Sj6G|0Np6~HMbed zt4ZX7IenqJc8-;)+e~)*WdiB>(>cM8uA*{5p69-Ff7TWq`~AyD_RBytOQz&`-TTO- zATx`%yTW~$Ov#AS6Hl~KAKd3FfLI>(DItocteM2j;qX+<)sK&{u?=(?>If5=DA=<+ z(T}!u%*PU9aCi`ZNjB|27_K}Q03db{BmI>_z1>1QJ?!p;_yl@| zDn$nP`={HOgU&$jPlGu|UmU6$j*4X>W1+vnKY9Jven!Q4gx=En^k=l4aZFjdnzY)7 z`h6WamWjQ)o6y7nAR$u0Zk~Ye=-#6r7Ppz_vvb=FmW_+8Zw-a}Mm_5C=_qMzah9i} zB|Pn}%vmkis`=)!Jv`ssCny*b36p{yH3Q-j9~>pgcsZ3+y4SP18&U_QIdZJzxDGMpRU%JQLtRA!UBi5Spr&ZU$%_zp!uf|1A|u-4TA-apoXX1 zvY@}0*{(TzEHqi50JHmy?}^oIygya9DnhzoC3SCKe?0xGxU2#728*^$@l^<`k%yFh z0GECPvT7BjYb$L{`v(H^>D1E7~^?_A2`01zkNkb-)u + + + + 1 + 300 + + + \ No newline at end of file