(factura-e-graba-xml)

desarollo de la funcion de exportacion en xml
develop
Gerardo 2023-08-10 14:22:13 +02:00
parent 1919e5ed01
commit 80751b0889
2 changed files with 384 additions and 4 deletions

View File

@ -122,12 +122,21 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
const string FACTURA_E_InvoiceHeader_NAME = "InvoiceHeader"; const string FACTURA_E_InvoiceHeader_NAME = "InvoiceHeader";
const string FACTURA_E_InvoiceNumber_NAME = "InvoiceNumber"; const string FACTURA_E_InvoiceNumber_NAME = "InvoiceNumber";
const string FACTURA_E_InvoiceSeriesCode_NAME = "InvoiceSeriesCode"; const string FACTURA_E_InvoiceSeriesCode_NAME = "InvoiceDocumentType";
const string FACTURA_E_ReasonCode_NAME = "ReasonCode";
const string FACTURA_E_ReasonCode = "01";
const string FACTURA_E_InvoiceDocumentType_NAME = "InvoiceDocumentType";
const string FACTURA_E_InvoiceDocumentType = "FC";
const string FACTURA_E_InvoiceClass_NAME = "InvoiceClass"; const string FACTURA_E_InvoiceClass_NAME = "InvoiceClass";
const string FACTURA_E_Corrective_NAME = "Corrective"; const string FACTURA_E_Corrective_NAME = "Corrective";
const string FACTURA_E_ReasonDescription_NAME = "ReasonDescription"; const string FACTURA_E_ReasonDescription_NAME = "ReasonDescription";
const string FACTURA_E_CorrectionMethodDescription_NAME = "CorrectionMethodDescription"; const string FACTURA_E_CorrectionMethodDescription_NAME = "CorrectionMethodDescription";
const string FACTURA_E_CorrectionMethod_NAME = "CorrectionMethod";
const string FACTURA_E_CorrectionMethod = "01";
const string FACTURA_E_AdditionalReasonDescription_NAME = "AdditionalReasonDescription"; const string FACTURA_E_AdditionalReasonDescription_NAME = "AdditionalReasonDescription";
const string FACTURA_E_TaxPeriod_NAME = "TaxPeriod"; const string FACTURA_E_TaxPeriod_NAME = "TaxPeriod";
const string FACTURA_E_StartDate_NAME = "StartDate"; const string FACTURA_E_StartDate_NAME = "StartDate";
@ -138,6 +147,13 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
const string FACTURA_E_IssueDate_NAME = "IssueDate"; const string FACTURA_E_IssueDate_NAME = "IssueDate";
const string FACTURA_E_TaxesOutputs_NAME = "TaxesOutputs"; const string FACTURA_E_TaxesOutputs_NAME = "TaxesOutputs";
//const string FACTURA_E_InvoiceCurrencyCode_NAME = "InvoiceCurrencyCode";
const string FACTURA_E_TaxCurrencyCode_NAME = "TaxCurrencyCode";
const string FACTURA_E_LanguageName_NAME = "LanguageName";
const string FACTURA_E_LanguageName = "es";
//impuestos //impuestos
const string FACTURA_E_Tax_NAME = "Tax"; const string FACTURA_E_Tax_NAME = "Tax";
const string FACTURA_E_TaxTypeCode_NAME = "TaxTypeCode"; const string FACTURA_E_TaxTypeCode_NAME = "TaxTypeCode";
@ -153,6 +169,11 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
const string FACTURA_E_TotalGeneralDiscounts_NAME = "TotalGeneralDiscounts"; const string FACTURA_E_TotalGeneralDiscounts_NAME = "TotalGeneralDiscounts";
const string FACTURA_E_TotalGrossAmountBeforeTaxes_NAME = "TotalGrossAmountBeforeTaxes"; const string FACTURA_E_TotalGrossAmountBeforeTaxes_NAME = "TotalGrossAmountBeforeTaxes";
const string FACTURA_E_TotalTaxOutputs_NAME = "TotalTaxOutputs"; const string FACTURA_E_TotalTaxOutputs_NAME = "TotalTaxOutputs";
const string FACTURA_E_TotalTaxesWithheld_NAME = "TotalTaxesWithheld";
const string FACTURA_E_TotalTaxesWithheld = "0.0";
//const string FACTURA_E_TotalTaxesWithheld_NAME = "TotalTaxesWithheld"; //const string FACTURA_E_TotalTaxesWithheld_NAME = "TotalTaxesWithheld";
//const string FACTURA_E_TotalOutstandingAmount_NAME = "TotalOutstandingAmount"; //const string FACTURA_E_TotalOutstandingAmount_NAME = "TotalOutstandingAmount";
const string FACTURA_E_TotalPaymentsOnAccount_NAME = "TotalPaymentsOnAccount"; const string FACTURA_E_TotalPaymentsOnAccount_NAME = "TotalPaymentsOnAccount";
@ -167,6 +188,9 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
const string FACTURA_E_DeliveryNoteDate_NAME = "DeliveryNoteDate"; const string FACTURA_E_DeliveryNoteDate_NAME = "DeliveryNoteDate";
const string FACTURA_E_ItemDescription_NAME = "ItemDescription"; const string FACTURA_E_ItemDescription_NAME = "ItemDescription";
const string FACTURA_E_Quantity_NAME = "Quantity"; const string FACTURA_E_Quantity_NAME = "Quantity";
const string FACTURA_E_UnitOfMeasure_NAME = "UnitOfMeasure";
const string FACTURA_E_UnitOfMeasure = "01";
const string FACTURA_E_UnitPriceWithoutTax_NAME = "UnitPriceWithoutTax"; const string FACTURA_E_UnitPriceWithoutTax_NAME = "UnitPriceWithoutTax";
const string FACTURA_E_TotalCost_NAME = "TotalCost"; const string FACTURA_E_TotalCost_NAME = "TotalCost";
@ -397,7 +421,77 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
} }
private string grabaLineasFactura(XmlDocument doc, XmlElement nodo) private string grabaLineasFactura(XmlDocument doc, XmlElement nodo)
{ {
return null; string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_Invoice_NAME, string.Empty);
//head
XmlElement nheader = doc.CreateElement(string.Empty, FACTURA_E_InvoiceHeader_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceNumber_NAME, string.Empty);
nod.InnerText = NumeroFactura.ToString();
nheader.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceSeriesCode_NAME, string.Empty);
nod.InnerText = SerieDelegacion;
nheader.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceDocumentType_NAME, string.Empty);
nod.InnerText = FACTURA_E_InvoiceDocumentType;
nheader.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceClass_NAME, string.Empty);
nod.InnerText = FacturaOriginal?"OO":"OR";
nheader.AppendChild(nod);
if (!FacturaOriginal && Correcciones!=null)
{
res = grabaCorreccion(Correcciones, doc, nheader);
if (res != null)
return res;
}
nbase.AppendChild(nheader);
res = grabaInvoiceIssueData(doc, nbase);
if (res != null)
return res;
//TaxesOutputs
XmlElement nTaxesOutputs = doc.CreateElement(string.Empty, FACTURA_E_TaxesOutputs_NAME, string.Empty);
res = grabaImpuestos(Impuesto, doc, nTaxesOutputs);
if(res != null)
return res;
nbase.AppendChild(nTaxesOutputs);
//InvoiceTotals
res = grabaInvoiceTotals(doc, nbase);
if (res != null)
return res;
//Items
if(Items!= null && Items.Length>0)
{
XmlElement nItems = doc.CreateElement(string.Empty, FACTURA_E_Items_NAME, string.Empty);
foreach( var item in Items)
{
res = grabaItem(item, doc, nItems);
if (res != null)
return res;
}
nbase.AppendChild(nItems);
}
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaPartesInvolucradas) + ": " + e.Message;
}
return res;
} }
private string grabaTaxIdentification(INTERNO_Entidad_Factura_E_Modelo dat, XmlDocument doc, XmlElement nodo) private string grabaTaxIdentification(INTERNO_Entidad_Factura_E_Modelo dat, XmlDocument doc, XmlElement nodo)
@ -553,6 +647,292 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
} }
return res; return res;
} }
private string grabaCorreccion(INTERNO_Correcciones_Factura_E_Modelo dat, XmlDocument doc, XmlElement nodo)
{
string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_Corrective_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceNumber_NAME, string.Empty);
nod.InnerText = dat.NumeroFactura.ToString();
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceSeriesCode_NAME, string.Empty);
nod.InnerText = dat.SerieDelegacion.ToString();
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_ReasonCode_NAME, string.Empty);
nod.InnerText = FACTURA_E_ReasonCode;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_ReasonDescription_NAME, string.Empty);
nod.InnerText = dat.RazonCode;
nbase.AppendChild(nod);
XmlElement nTaxPeriod = doc.CreateElement(string.Empty, FACTURA_E_TaxPeriod_NAME, string.Empty);
nod = doc.CreateElement(string.Empty, FACTURA_E_StartDate_NAME, string.Empty);
nod.InnerText = toStr(dat.Inicio);
nTaxPeriod.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_EndDate_NAME, string.Empty);
nod.InnerText = toStr(dat.Fin);
nTaxPeriod.AppendChild(nod);
nbase.AppendChild(nTaxPeriod);
nod = doc.CreateElement(string.Empty, FACTURA_E_CorrectionMethod_NAME, string.Empty);
nod.InnerText = FACTURA_E_CorrectionMethod;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_CorrectionMethodDescription_NAME, string.Empty);
nod.InnerText = dat.RazonCorreccion;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_AdditionalReasonDescription_NAME, string.Empty);
nod.InnerText = dat.Observaciones;
nbase.AppendChild(nod);
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaCorreccion) + ": " + e.Message;
}
return res;
}
private string grabaInvoiceIssueData(XmlDocument doc, XmlElement nodo)
{
string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_InvoiceIssueData_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_IssueDate_NAME, string.Empty);
nod.InnerText = toStr(Fecha);
nbase.AppendChild(nod);
XmlElement nbase2 = doc.CreateElement(string.Empty, FACTURA_E_InvoiceIssueData_NAME, string.Empty);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoicingPeriod_NAME, string.Empty);
nod.InnerText = toStr(PeriodoInicio);
nbase2.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_StartDate_NAME, string.Empty);
nod.InnerText = toStr(PeriodoInicio);
nbase2.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_EndDate_NAME, string.Empty);
nod.InnerText = toStr(PeriodoFin);
nbase2.AppendChild(nod);
nbase.AppendChild(nbase2);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceCurrencyCode_NAME, string.Empty);
nod.InnerText = Moneda;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TaxCurrencyCode_NAME, string.Empty);
nod.InnerText = Moneda;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_LanguageName_NAME, string.Empty);
nod.InnerText = FACTURA_E_LanguageName;
nbase.AppendChild(nod);
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaInvoiceIssueData) + ": " + e.Message;
}
return res;
}
private string grabaImpuestos(INTERNO_Impuestos_Factura_E_modelo dat, XmlDocument doc, XmlElement nodo)
{
string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_Tax_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_TaxTypeCode_NAME, string.Empty);
nod.InnerText = toStr(dat.Tipo);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TaxRate_NAME, string.Empty);
nod.InnerText = toStr(dat.Porcentaje);
nbase.AppendChild(nod);
XmlElement nbase2 = doc.CreateElement(string.Empty, FACTURA_E_TaxableBase_NAME, string.Empty);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalAmount_NAME, string.Empty);
nod.InnerText = toStr(dat.Base);
nbase2.AppendChild(nod);
nbase.AppendChild(nbase2);
nbase2 = doc.CreateElement(string.Empty, FACTURA_E_TaxAmount_NAME, string.Empty);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalAmount_NAME, string.Empty);
nod.InnerText = toStr(dat.Importe);
nbase2.AppendChild(nod);
nbase.AppendChild(nbase2);
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaImpuestos) + ": " + e.Message;
}
return res;
}
private string grabaInvoiceTotals(XmlDocument doc, XmlElement nodo)
{
string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_InvoiceTotals_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_TotalGrossAmount_NAME, string.Empty);
nod.InnerText = toStr(TotalBruto);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalGeneralDiscounts_NAME, string.Empty);
nod.InnerText = toStr(TotalDescuento);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalGrossAmountBeforeTaxes_NAME, string.Empty);
nod.InnerText = toStr(TotalBase);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalTaxOutputs_NAME, string.Empty);
nod.InnerText = toStr(TotalImpuestos);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalTaxesWithheld_NAME, string.Empty);
nod.InnerText = FACTURA_E_TotalTaxesWithheld;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_InvoiceTotals_NAME, string.Empty);
nod.InnerText = toStr(TotalFactura);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalOutstandingAmount_NAME, string.Empty);
nod.InnerText = toStr(TotalPendiente);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalPaymentsOnAccount_NAME, string.Empty);
nod.InnerText = toStr(TotalAnticipo);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalExecutableAmount_NAME, string.Empty);
nod.InnerText = toStr(TotalEjecutable);
nbase.AppendChild(nod);
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaInvoiceTotals) + ": " + e.Message;
}
return res;
}
private string grabaItem(INTERNO_Item_Factura_E_modelo dat, XmlDocument doc, XmlElement nodo)
{
string res = null;
try
{
XmlElement nbase = doc.CreateElement(string.Empty, FACTURA_E_InvoiceLine_NAME, string.Empty);
XmlElement nbase2 = doc.CreateElement(string.Empty, FACTURA_E_DeliveryNote_NAME, string.Empty);
XmlElement nod = doc.CreateElement(string.Empty, FACTURA_E_DeliveryNoteNumber, string.Empty);
nod.InnerText = dat.Codigo;
nbase2.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_DeliveryNoteDate_NAME, string.Empty);
nod.InnerText = toStr(dat.FechaAlbaran);
nbase2.AppendChild(nod);
nbase.AppendChild(nbase2);
nod = doc.CreateElement(string.Empty, FACTURA_E_ItemDescription_NAME, string.Empty);
nod.InnerText = dat.Descripcion;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_Quantity_NAME, string.Empty);
nod.InnerText = toStr(dat.Cantidad);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_UnitOfMeasure_NAME, string.Empty);
nod.InnerText = FACTURA_E_UnitOfMeasure;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_UnitPriceWithoutTax_NAME, string.Empty);
nod.InnerText = toStr(dat.Precio);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_TotalCost_NAME, string.Empty);
nod.InnerText = toStr(dat.Total);
nbase.AppendChild(nod);
nbase2 = doc.CreateElement(string.Empty, FACTURA_E_DiscountsAndRebates_NAME, string.Empty);
var nbase3 = doc.CreateElement(string.Empty, FACTURA_E_Discount_NAME, string.Empty);
nod = doc.CreateElement(string.Empty, FACTURA_E_DiscontReason_NAME, string.Empty);
nod.InnerText = dat.DescuentoRazon;
nbase3.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_DiscountRate_NAME, string.Empty);
nod.InnerText = toStr(dat.DescuentoPorcentaje);
nbase3.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_DiscountAmount_NAME, string.Empty);
nod.InnerText = toStr(dat.Descuentoimporte);
nbase3.AppendChild(nod);
nbase2.AppendChild(nbase3);
nbase.AppendChild(nbase2);
nod = doc.CreateElement(string.Empty, FACTURA_E_GrossAmount_NAME, string.Empty);
nod.InnerText = toStr(dat.ImporteBruto);
nbase.AppendChild(nod);
res = grabaImpuestos(dat, doc, nbase);
if (res != null)
return res;
nod = doc.CreateElement(string.Empty, FACTURA_E_TransactionDate_NAME, string.Empty);
nod.InnerText = toStr(dat.FechaAlbaran);
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_AdditionalLineItemInformation_NAME, string.Empty);
nod.InnerText = dat.Adicional;
nbase.AppendChild(nod);
nod = doc.CreateElement(string.Empty, FACTURA_E_AdditionalLineItemInformation_NAME, string.Empty);
nod.InnerText = dat.CodigoArticulo;
nbase.AppendChild(nod);
nodo.AppendChild(nbase);
}
catch (Exception e)
{
res = "Error en " + nameof(grabaItem) + ": " + e.Message;
}
return res;
}
string toStr(DateTime t)
{
return t.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
}
string toStr(int t)
{
return t.ToString();
}
string toStr(float t)
{
return t.ToString();
}
string toStr(double t)
{
return t.ToString();
}
#endregion #endregion
#region LecturaXML #region LecturaXML
private string leeXML(XmlNode factura) private string leeXML(XmlNode factura)

View File

@ -8,9 +8,9 @@ namespace Exferia_Aplicacion.Modelos_Factura_E
{ {
public class INTERNO_Impuestos_Factura_E_modelo public class INTERNO_Impuestos_Factura_E_modelo
{ {
public double Porcentaje { get; set; } public float Porcentaje { get; set; }
public int Tipo { get; set; } public int Tipo { get; set; }
public double Base { get; set; } public float Base { get; set; }
public double Importe { get; set; } public double Importe { get; set; }
} }
} }