Funcions incloses fins la versió 1.27 de factures emeses
//System.Collections.Generic.List<string> keys = new System.Collections.Generic.List<string>(); System.Collections.Generic.List<string> exentas = new System.Collections.Generic.List<string>(); System.Collections.Generic.Dictionary<string, bool> gMapOfTaxGroups = new System.Collections.Generic.Dictionary<string, bool>(); System.Globalization.NumberFormatInfo nfi = new System.Globalization.CultureInfo("en-US", false).NumberFormat; bool gTaxGroupMapGenerated = false; bool gTipoNoExentaWritten = false; bool gDesGloseIVAWritten = false; bool gIsCancelFlow = false; int firstRef = 0; public string externalRef(XPathNodeIterator pathNode) { if (pathNode.MoveNext()) { firstRef = 1; return pathNode.Current.Value; } return ""; } public int IsFirstRef() { return firstRef; } public string SetCancelFlow(XPathNodeIterator pathNode) { if (pathNode.MoveNext()) { gIsCancelFlow = pathNode.Current.Value == "C"; } return "1.1"; } public bool IsCancelFlow() { return gIsCancelFlow; } public string FillListOfTaxGroups(XPathNodeIterator pathNode) { if (gTaxGroupMapGenerated) { return "generated"; } // just get all different tax groups //if (pathNode.MoveNext ()) { XPathNavigator navi = pathNode.Current; string xPath = String.Format("//DataSource/TAX1/TaxCode"); XPathNodeIterator node = navi.Select(xPath); string taxCode = ""; while (node.MoveNext()) { taxCode = node.Current.Value; if (taxCode != "" && !gMapOfTaxGroups.ContainsKey(taxCode)) { gMapOfTaxGroups[taxCode] = false; // means it was not handled yet } } gTaxGroupMapGenerated = true; return "done"; } return "problem"; } public string IsTipoNoExentaWritten(XPathNodeIterator pathNode) { if (gTipoNoExentaWritten) { return "true"; } else { if (GetVtgTransactionTypeValue(pathNode).Length > 0) { gTipoNoExentaWritten = true; } else { return "true"; } } return "false"; } public string IsDesGloseIVAWritten(XPathNodeIterator pathNode) { if (gDesGloseIVAWritten) { return "true"; } else { if (GetVtgTransactionTypeValue(pathNode).Length > 0) { gDesGloseIVAWritten = true; } else { return "true"; } } return "false"; } public string HasSumOfBaseSum(XPathNodeIterator taxGroupNode) { if (taxGroupNode.MoveNext()) { if (!gTaxGroupMapGenerated) { FillListOfTaxGroups(taxGroupNode); } string taxCode = taxGroupNode.Current.Value; if (gMapOfTaxGroups.ContainsKey(taxCode) && !gMapOfTaxGroups[taxCode]) { return "true"; } } return "false"; } public string MapContainsVatGroup(XPathNodeIterator taxGroupNode) { string taxCode = ""; if (taxGroupNode.MoveNext()) { taxCode = taxGroupNode.Current.Value; XPathNavigator navi = taxGroupNode.Current; if (gMapOfTaxGroups.ContainsKey(taxCode)) { return "true"; } } return "false"; } public string MapChangeVatGroup(XPathNodeIterator taxGroupNode) { string taxCode = ""; bool oldValue = false; ; if (taxGroupNode.MoveNext()) { taxCode = taxGroupNode.Current.Value; XPathNavigator navi = taxGroupNode.Current; if (gMapOfTaxGroups.ContainsKey(taxCode)) { oldValue = gMapOfTaxGroups[taxCode]; gMapOfTaxGroups[taxCode] = true; oldValue = gMapOfTaxGroups[taxCode]; } } if (oldValue) { return "true"; } else { return "false"; } return "false"; } public decimal GetSumOfBaseSum(XPathNodeIterator taxGroupNode) { string taxCode = ""; decimal lbaseSum = 0; if (taxGroupNode.MoveNext()) { taxCode = taxGroupNode.Current.Value; XPathNavigator navi = taxGroupNode.Current; if (gMapOfTaxGroups.ContainsKey(taxCode) && gMapOfTaxGroups[taxCode] != true) { gMapOfTaxGroups[taxCode] = true; // mark our gMap as already computed // the sum for given tax code was not yet computed XPathNodeIterator node = navi.Select(String.Format("//DataSource/TAX1/TaxCode[text()='{0}']/..", taxCode)); nfi.NumberDecimalSeparator = "."; while (node.MoveNext()) { lbaseSum += decimal.Parse(node.Current.SelectSingleNode("BaseSum").Value, nfi); } } } if (gIsCancelFlow) { lbaseSum *= -1; } return lbaseSum; } public decimal GetSumOfBaseSum2(XPathNodeIterator taxGroupNode, string taxCode) { decimal lbaseSum = 0; if (taxGroupNode.MoveNext()) { if (!gTaxGroupMapGenerated) { FillListOfTaxGroups(taxGroupNode); } XPathNavigator navi = taxGroupNode.Current; if (gMapOfTaxGroups.ContainsKey(taxCode) && gMapOfTaxGroups[taxCode] != true) { gMapOfTaxGroups[taxCode] = true; // mark our gMap as already computed // the sum for given tax code was not yet computed XPathNodeIterator node = navi.Select(String.Format("//DataSource/TAX1/TaxCode[text()='{0}']/..", taxCode)); nfi.NumberDecimalSeparator = "."; while (node.MoveNext()) { lbaseSum += decimal.Parse(node.Current.SelectSingleNode("BaseSum").Value, nfi); } } } if (gIsCancelFlow) { lbaseSum *= -1; } return lbaseSum; } public decimal GetSumOfVatSum(XPathNodeIterator taxGroupNode) { string taxCode = ""; decimal lvatSum = 0; if (taxGroupNode.MoveNext()) { taxCode = taxGroupNode.Current.Value; XPathNavigator navi = taxGroupNode.Current; XPathNodeIterator node = navi.Select(String.Format("//DataSource/TAX1/TaxCode[text()='{0}']/..", taxCode)); while (node.MoveNext()) { lvatSum += decimal.Parse(node.Current.SelectSingleNode("VatSum").Value, nfi); } } if (gIsCancelFlow) { lvatSum *= -1; } return lvatSum; } public decimal GetSumOfEqSum(XPathNodeIterator taxGroupNode) { string taxCode = ""; decimal leqSum = 0; if (taxGroupNode.MoveNext()) { taxCode = taxGroupNode.Current.Value; XPathNavigator navi = taxGroupNode.Current; XPathNodeIterator node = navi.Select(String.Format("//DataSource/TAX1/TaxCode[text()='{0}']/..", taxCode)); while (node.MoveNext()) { leqSum += decimal.Parse(node.Current.SelectSingleNode("EqSum").Value, nfi); } } if (gIsCancelFlow) { leqSum *= -1; } return leqSum; } public string HasEqSum(XPathNodeIterator taxGroupNode) { if (GetSumOfEqSum(taxGroupNode) > 0) { return "true"; } return "false"; } public string GetSpecialRegimeValue(XPathNodeIterator specialRegimeCode) { string specialRegimeVal = ""; string oldSpecialRegimeVal = ""; if (specialRegimeCode.MoveNext()) { XPathNavigator navi = specialRegimeCode.Current; navi.MoveToRoot(); string xPath = "DataSource/OVTG/U_B1SYS_SPEC_REGIME"; XPathNodeIterator nodeRegimeCodesIter = navi.Select(xPath); while (nodeRegimeCodesIter.MoveNext()) { specialRegimeVal = nodeRegimeCodesIter.Current.Value; if (specialRegimeVal != "") { if (oldSpecialRegimeVal == "") { oldSpecialRegimeVal = specialRegimeVal; } else if (oldSpecialRegimeVal != specialRegimeVal) { // there can't be more different values so return nothing to cause EFM error specialRegimeVal = "-1"; break; } } } } return specialRegimeVal; } public string GetVtgTransactionTypeValue(XPathNodeIterator nodeTax1TaxCode) { string taxCode = ""; string transactionType = ""; if (nodeTax1TaxCode.MoveNext()) { taxCode = nodeTax1TaxCode.Current.Value; XPathNavigator navi = nodeTax1TaxCode.Current; //navi.MoveToRoot(); XPathNavigator transactionTypeNavig = navi.SelectSingleNode(String.Format("//DataSource/OVTG/Code[text()='{0}']/../U_B1SYS_TRANS_TYPE", taxCode)); if (transactionTypeNavig != null) { transactionType = transactionTypeNavig.Value; } return transactionType; //return taxCode; } return transactionType; } public string GetVtgExemptReasonValue(XPathNodeIterator nodeTax1TaxCode) { string taxCode = ""; string exemptReason = ""; if (nodeTax1TaxCode.MoveNext()) { taxCode = nodeTax1TaxCode.Current.Value; } XPathNavigator navi = nodeTax1TaxCode.Current; //navi.MoveToRoot(); XPathNavigator exemptReasonNavig = navi.SelectSingleNode(String.Format("//DataSource/OVTG/Code[text()='{0}']/../U_B1SYS_EXEM_REASON", taxCode)); if (exemptReasonNavig != null) { exemptReason = exemptReasonNavig.Value; } return exemptReason; } public int CheckExenta(XPathNodeIterator TransType, XPathNodeIterator ExemptReason) { string exemptReason = ""; string transType = ""; if (TransType.MoveNext()) { transType = TransType.Current.Value; } if (transType == "") { if (ExemptReason.MoveNext()) { exemptReason = ExemptReason.Current.Value; } if (exentas.Contains(exemptReason)) { return 1; } else { exentas.Add(exemptReason); return 0; } } return 1; } public decimal GetSumOfBaseSum3(XPathNodeIterator taxGroupNode, XPathNodeIterator ExemptReason) { decimal lbaseSum = 0; string exemptReason = ""; if (ExemptReason.MoveNext()) { exemptReason = ExemptReason.Current.Value; } if (exemptReason != "" && taxGroupNode.MoveNext()) { XPathNavigator naviGroup = taxGroupNode.Current; XPathNavigator naviTax = ExemptReason.Current; XPathNodeIterator taxGroups = naviGroup.Select(String.Format("//DataSource/OVTG/U_B1SYS_EXEM_REASON[text()='{0}']/../Code", exemptReason)); while (taxGroups.MoveNext()) { string taxCode = taxGroups.Current.Value; XPathNodeIterator node = naviTax.Select(String.Format("//DataSource/TAX1/TaxCode[text()='{0}']/..", taxCode)); nfi.NumberDecimalSeparator = "."; while (node.MoveNext()) { lbaseSum += decimal.Parse(node.Current.SelectSingleNode("BaseSum").Value, nfi); } } if (gIsCancelFlow) { lbaseSum *= -1; } } return lbaseSum; } public string GetVtgExemptReasonValue2(XPathNodeIterator nodeTax1TaxCode, string taxCode) { string exemptReason = ""; if (nodeTax1TaxCode.MoveNext()) { XPathNavigator navi = nodeTax1TaxCode.Current; XPathNavigator exemptReasonNavig = navi.SelectSingleNode(String.Format("//DataSource/OVTG/Code[text()='{0}']/../U_B1SYS_EXEM_REASON", taxCode)); if (exemptReasonNavig != null) { exemptReason = exemptReasonNavig.Value; } } return exemptReason; } public string GetFirstValidTipoNoExenta(XPathNodeIterator specialRegimeCode) { string specialRegimeVal = ""; string oldSpecialRegimeVal = ""; if (specialRegimeCode.MoveNext()) { XPathNavigator navi = specialRegimeCode.Current; string xPath = "//DataSource/OVTG/U_B1SYS_TRANS_TYPE"; XPathNodeIterator nodeRegimeCodesIter = navi.Select(xPath); while (nodeRegimeCodesIter.MoveNext()) { specialRegimeVal = nodeRegimeCodesIter.Current.Value; if (specialRegimeVal != "") { if (oldSpecialRegimeVal == "") { oldSpecialRegimeVal = specialRegimeVal; } else if (oldSpecialRegimeVal != specialRegimeVal) { // there can't be more different values so return nothing to cause EFM error specialRegimeVal = "-1"; break; } } } } return specialRegimeVal; } public string GetFirstExentaTaxCode(XPathNodeIterator pathName) { string taxCode = ""; string transType = ""; if (pathName.MoveNext()) { XPathNavigator navi = pathName.Current; string xPath = "//DataSource/OVTG"; XPathNodeIterator nodesIter = navi.Select(xPath); while (nodesIter.MoveNext()) { XPathNavigator transNode = nodesIter.Current.SelectSingleNode("U_B1SYS_TRANS_TYPE"); if (transNode == null) { taxCode = nodesIter.Current.SelectSingleNode("Code").Value; return taxCode; } else { transType = transNode.Value; if (transType == "") { taxCode = nodesIter.Current.SelectSingleNode("Code").Value; } } } } return taxCode; } public string ConvertEL2GR(string val) { if (val == "EL") { return "GR"; } return val; }