void BillingEngine_EinvFileCreating(object sender, MercatorUi.Engine.Gescom.BillingEngine.EinvFileCreatingEventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
double totVidanges = Api.ConvertToDouble(billingEngine.LIGNES.Compute("sum(total)", "id_article='VIDA06B416'"));
if (totVidanges.CompareTo(0d, 2) != 0)
{
XmlNodeList nodeTaxCategoryVatZero = e.XmlDocument.ChildNodes[1].SelectNodes("cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cbc:Percent='0.00']", e.XmlNamespaceManager);
if (nodeTaxCategoryVatZero.Count > 0)
{
XmlNode nodeTaxSubtotalZero = nodeTaxCategoryVatZero[0].ParentNode; // <cac:TaxSubtotal>
double taxableAmount = Api.ValSafeDouble(nodeTaxSubtotalZero.ChildNodes[0].InnerText);
XmlNode xmlNodeTaxSubtotalZeroVidanges;
if (taxableAmount.CompareTo(totVidanges, 2) != 0) // il y a d'autres articles réellement à 0% de TVA. On doit dupliquer le noeud
{
xmlNodeTaxSubtotalZeroVidanges = nodeTaxSubtotalZero.Clone();
nodeTaxSubtotalZero.ChildNodes[0].InnerText = Api.Transform(Api.ValSafeDouble(nodeTaxSubtotalZero.ChildNodes[0].InnerText) - totVidanges, "#########0.00"); // <cbc:TaxableAmount solde TVA 0%
xmlNodeTaxSubtotalZeroVidanges.ChildNodes[0].InnerText = Api.Transform(totVidanges, "#########0.00"); // <cbc:TaxableAmount vidanges
nodeTaxSubtotalZero.ParentNode.AppendChild(xmlNodeTaxSubtotalZeroVidanges);
}
else
{
xmlNodeTaxSubtotalZeroVidanges = nodeTaxSubtotalZero; // on peut continuer avec le noeud existant 0% de TVA
}
XmlNodeList nodeTaxCategoryId = xmlNodeTaxSubtotalZeroVidanges.SelectNodes("cac:TaxCategory/cbc:ID", e.XmlNamespaceManager);
nodeTaxCategoryId[0].InnerText = "E"; // Excluded from VAT
XmlNodeList nodeTaxCategoryName = xmlNodeTaxSubtotalZeroVidanges.SelectNodes("cac:TaxCategory/cbc:Name", e.XmlNamespaceManager);
nodeTaxCategoryName[0].InnerText = "NA"; // code belge
XmlNodeList nodeTaxCategoryPercent = xmlNodeTaxSubtotalZeroVidanges.SelectNodes("cac:TaxCategory/cbc:Percent", e.XmlNamespaceManager);
XmlNode nodeReason = billingEngine.EinvAddNode(e.eInvoiceEnum, nodeTaxCategoryName[0].ParentNode, "cbc:TaxExemptionReason", "Vidanges");
nodeTaxCategoryName[0].ParentNode.InsertAfter(nodeReason, nodeTaxCategoryPercent[0]); // placer ce noeud sous <cbc:Percent>
}
}
}