/// <summary> /// Devuelve un objeto XML con un filtro consulta de facturas emitidas. /// </summary> /// <returns>Objeto XML con un filtro consulta de facturas emitidas.</returns> internal ConsultaFactInformadasProveedor ToFilterExternSII() { PostingDate = RegisterDate = IssueDate; RegistroLRFacturasRecibidas siiInvoice = ToSII(); ConsultaFactInformadasProveedor siiFilter = new ConsultaFactInformadasProveedor(); if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } siiFilter.FiltroConsulta.PeriodoImputacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiFilter.FiltroConsulta.PeriodoImputacion.Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM"); if (SellerParty != null) { siiFilter.FiltroConsulta.Proveedor = siiInvoice.FacturaRecibida.Contraparte; } // Tratamiento del Desde/Hasta Fecha Presentación. if (SinceDate != null && UntilDate != null) { if (siiFilter.FiltroConsulta.FechaExpedicion == null) { siiFilter.FiltroConsulta.FechaExpedicion = new RangoFechaPresentacion(); } siiFilter.FiltroConsulta.FechaExpedicion.Desde = SIIParser.FromDate(SinceDate); siiFilter.FiltroConsulta.FechaExpedicion.Hasta = SIIParser.FromDate(UntilDate); } return(siiFilter); }
/// <summary> /// Devuelve el cuerpo de una operación sujeta. /// </summary> /// <param name = "skipErrors" > Indica si hay que omitir las excepciones.</param> /// <returns>Operación sujeta correspondiente a la factura.</returns> internal DesgloseIVA GetDesgloseIVA(bool skipErrors = false) { DesgloseIVA desgloseIVA = new DesgloseIVA(); if (TaxesOutputs.Count > 0) { foreach (KeyValuePair <decimal, decimal[]> taxOut in TaxesOutputs) { DetalleIVA detalleIVA = new DetalleIVA() { TipoImpositivo = (taxOut.Value[2] == 0 && taxOut.Value[3] == 0) ? SIIParser.FromDecimal(taxOut.Key) : "0", BaseImponible = SIIParser.FromDecimal(taxOut.Value[0]), CuotaSoportada = SIIParser.FromDecimal(taxOut.Value[1]), }; if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0 && IsAsset) { detalleIVA.BienInversion = "S"; } if (taxOut.Value[2] != 0) { detalleIVA.TipoRecargoEquivalencia = SIIParser.FromDecimal(taxOut.Key); detalleIVA.CuotaRecargoEquivalencia = SIIParser.FromDecimal(taxOut.Value[2]); } if (taxOut.Value[3] != 0) { if (taxOut.Value[2] != 0 && !skipErrors) { throw new Exception("Only one value can be non zero: taxAmountCompensacionREAGYP != 0 and taxAmountRecargoEquivalencia != 0."); } if (ClaveRegimenEspecialOTrascendencia != ClaveRegimenEspecialOTrascendencia.ExportacionREAGYP && !skipErrors) { throw new Exception("ClaveRegimenEspecialOTrascendencia must be ClaveRegimenEspecialOTrascendencia.ExportacionREAGYP."); } detalleIVA.TipoImpositivo = detalleIVA.CuotaSoportada = null; detalleIVA.PorcentCompensacionREAGYP = SIIParser.FromDecimal(taxOut.Key); detalleIVA.ImporteCompensacionREAGYP = SIIParser.FromDecimal(taxOut.Value[3]); } desgloseIVA.DetalleIVA.Add(detalleIVA); } } else { desgloseIVA.DetalleIVA.Add(new DetalleIVA() { BaseImponible = SIIParser.FromDecimal(GrossAmount) }); } return(desgloseIVA); }
/// <summary> /// Constructor de ARInvoice. /// </summary> /// <param name="registroLRFacturasEmitidas">Objeto serialización xml facturas emitidas.</param> public ARInvoiceAV(RegistroLRFacturasEmitidas registroLRFacturasEmitidas) : base(registroLRFacturasEmitidas) { RegistroLRFacturasEmitidas siiInvoice = registroLRFacturasEmitidas; // Gestión del tipo desglose NoSujeta noSujeta = siiInvoice?.FacturaExpedida?.TipoDesglose?.DesgloseFactura?.NoSujeta; if (noSujeta != null) { if (noSujeta.ImporteTAIReglasLocalizacion != null) { IsTAIRules = true; GrossAmount = SIIParser.ToDecimal(noSujeta.ImporteTAIReglasLocalizacion); } } }
/// <summary> /// Constructor clase Envelope. /// </summary> /// <param name="stream">Ruta al archivo xml que contiene el mensaje SOAP.</param> public Envelope(Stream stream) { Envelope envelope = null; XmlSerializer serializer = new XmlSerializer(this.GetType()); using (StreamReader r = new StreamReader(stream)) envelope = serializer.Deserialize(r) as Envelope; if (envelope == null) { throw new Exception("XML SOAP selerailization error"); } Header = envelope.Header; Body = envelope.Body; SIIParser.ClearNulls(Body); }
private void GetLinesFR() { if (DesgloseIVA != null) { if (DesgloseIVA.DetalleIVA != null) { foreach (var iva in DesgloseIVA.DetalleIVA) { Lines.Add(new QueryAeatInvoiceLine() { BaseImponible = SIIParser.ToDecimal(iva.BaseImponible), TipoImpositivo = SIIParser.ToDecimal(iva.TipoImpositivo), TipoRE = SIIParser.ToDecimal(iva.TipoRecargoEquivalencia), Cuota = SIIParser.ToDecimal(iva.CuotaSoportada), CuotaRE = SIIParser.ToDecimal(iva.CuotaRecargoEquivalencia), TipoREAGYP = SIIParser.ToDecimal(iva.PorcentCompensacionREAGYP), CuotaREAGYP = SIIParser.ToDecimal(iva.ImporteCompensacionREAGYP), Tipo = "" }); } } } }
/// <summary> /// Devuelve una cadena con el envelope representado /// en xml en formato binario con codificaión UTF8. /// </summary> /// <returns>Envelope en xml en binario con codificaión UTF8.</returns> public byte[] ToArray(SIINamespaces ns = SIINamespaces.siiLR, SIINamespaces nsSum = SIINamespaces.sii) { byte[] result = null; SIIParser.ClearNulls(this); // Limpia nulos XmlSerializer xmlSerializer = new XmlSerializer(GetType()); XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); namespaces.Add(ns.ToString(), SIIParser.Namespaces[ns]); namespaces.Add(nsSum.ToString(), SIIParser.Namespaces[nsSum]); var ms = new MemoryStream(); using (StreamWriter sw = new StreamWriter(ms, Encoding.GetEncoding("UTF-8"))) { xmlSerializer.Serialize(sw, this, namespaces); result = ms.ToArray(); } return(result); }
/// <summary> /// Constructor clase Envelope. /// </summary> /// <param name="xmlPath">Ruta al archivo xml que contiene el mensaje SOAP.</param> public Envelope(string xmlPath) { Envelope envelope = null; XmlSerializer serializer = new XmlSerializer(this.GetType()); if (File.Exists(xmlPath)) { using (StreamReader r = new StreamReader(xmlPath)) { envelope = serializer.Deserialize(r) as Envelope; } } if (envelope == null) { throw new Exception("XML SOAP selerailization error"); } Header = envelope.Header; Body = envelope.Body; SIIParser.ClearNulls(Body); }
public void GenerarXMLIntracomEnvel(string _NombreFichero) { IntracomEnvel funcion = new IntracomEnvel(); string _NomFicheroWrk = _NombreFichero; try { Envelope _EnvelWrk = new Envelope(); SuministroLRDetOperacionIntracomunitaria _SumLROperIntracom = new SuministroLRDetOperacionIntracomunitaria(); RegistroLRDetOperacionIntracomunitaria _RegLROperIntracom = new RegistroLRDetOperacionIntracomunitaria(); Cabecera _Cabecera = new Cabecera(); using (StreamReader _Lector = new StreamReader(_NomFicheroWrk)) { while (_Lector.Peek() > -1) { string _RegFichero = _Lector.ReadLine(); if (!String.IsNullOrEmpty(_RegFichero)) { // Con creamos un Array con los distintos campos que contiene el registro separados por ";" string[] _CamposReg = _RegFichero.Split(';'); string _TipoReg = _CamposReg[0]; switch (_TipoReg) { case "CABE": _Cabecera = funcion.TratarRegCabecera(_CamposReg); _SumLROperIntracom.Cabecera = _Cabecera; break; case "FACT": _RegLROperIntracom = new RegistroLRDetOperacionIntracomunitaria(); _RegLROperIntracom = funcion.TratarOperIntracom(_CamposReg); _SumLROperIntracom.RegistroLRDetOperacionIntracomunitaria.Add(_RegLROperIntracom); break; case "FINI": // Incluimos todas las facturas tratadas en el Envelope. _EnvelWrk.Body.SuministroLRDetOperacionIntracomunitaria = _SumLROperIntracom; //Obtenemos la fecha actual sin la hora y procedemos a crear la ruta/nombre del fichero resultante DateTime _FechaActual = DateTime.Today; string nombrefichero = "SII_Intracom_" + _Cabecera.Titular.NIF + "_" + _FechaActual.ToString("yyyyMMdd") + ".XML"; string XmlResult = "C:/Temp/" + nombrefichero; // Con la siguiente instruccion se genera el XML en la direccion anteriormente indicada. XmlDocument tmpXML = SIIParser.GetXml(_EnvelWrk, XmlResult); string _msg = "Fichero XML generado: " + XmlResult; MessageBox.Show(_msg, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); break; default: string _msgAviso = "Tipo Registro incorrecto: " + _TipoReg; MessageBox.Show(_msgAviso, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } } } } } catch (Exception ex) { string _msgError = "Error: " + ex.Message; MessageBox.Show(_msgError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
internal FiltroConsulta ToFilterSII() { FiltroConsulta siiFilter = new FiltroConsulta(); if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0) { siiFilter.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiFilter.PeriodoImpositivo.Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM"); } else { siiFilter.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiFilter.PeriodoLiquidacion.Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM"); } TaxIdEs taxIdEs = null; bool IsNotNifES = false; try { taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } siiFilter.ClavePaginacion = new ClavePaginacion(); siiFilter.IDFactura = new IDFactura(); if (SellerParty != null) { if (IsFiltroClavePag == true) { siiFilter.ClavePaginacion.IDEmisorFactura.NombreRazon = SellerParty.PartyName; } else { siiFilter.IDFactura.IDEmisorFactura.NombreRazon = SellerParty.PartyName; } if (IsNotNifES) { if (CountryCode == null) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } if (IsFiltroClavePag == true) { siiFilter.ClavePaginacion.IDEmisorFactura.IDOtro = new IDOtro(); siiFilter.ClavePaginacion.IDEmisorFactura.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); siiFilter.ClavePaginacion.IDEmisorFactura.IDOtro.CodigoPais = CountryCode; siiFilter.ClavePaginacion.IDEmisorFactura.IDOtro.ID = SellerParty.TaxIdentificationNumber; } else { siiFilter.IDFactura.IDEmisorFactura.IDOtro = new IDOtro(); siiFilter.IDFactura.IDEmisorFactura.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); siiFilter.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode; siiFilter.IDFactura.IDEmisorFactura.IDOtro.ID = SellerParty.TaxIdentificationNumber; } } else { if (IsFiltroClavePag == true) { siiFilter.ClavePaginacion.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber; } else { siiFilter.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber; } } if (InvoiceNumber != null) { if (IsFiltroClavePag == true) { siiFilter.ClavePaginacion.NumSerieFacturaEmisor = InvoiceNumber; } else { siiFilter.IDFactura.NumSerieFacturaEmisor = InvoiceNumber; } } if (IssueDate != null) { if (IsFiltroClavePag == true) { siiFilter.ClavePaginacion.FechaExpedicionFacturaEmisor = SIIParser.FromDate(IssueDate); } else { siiFilter.IDFactura.FechaExpedicionFacturaEmisor = SIIParser.FromDate(IssueDate); } } } // Tratamiento del Desde/Hasta Fecha Presentación. if (SinceDate != null && UntilDate != null) { if (siiFilter.FechaPresentacion == null) { siiFilter.FechaPresentacion = new RangoFechaPresentacion(); } siiFilter.FechaPresentacion.Desde = SIIParser.FromDate(SinceDate); siiFilter.FechaPresentacion.Hasta = SIIParser.FromDate(UntilDate); } return(siiFilter); }
/// <summary> /// Devuelve el lote de facturas como un archivo xml para soap según las /// especificaciones de la aeat. /// </summary> /// <param name="xmlPath">Ruta donde se guardará el archivo generado.</param> /// <returns>Xaml generado.</returns> public XmlDocument GetXml(string xmlPath) { return(SIIParser.GetXml(GetEnvelope(), xmlPath, SIINamespaces.con, SIINamespaces.sum)); }
/// <summary> /// Obtiene un objeto RegistroLRFacturasRecibidas, este objeto se utiliza /// para la serialización xml. /// </summary> /// <param name="updateInnerSII">Si es true, actualiza el objeto SII subyacente /// con el valor calculado.</param> /// <param name="skipErrors">Indica si hay que omitir las excepciones.</param> /// <returns>Nueva instancia del objeto para serialización /// xml RegistroLRFacturasEmitidas.</returns> public RegistroLRFacturasRecibidas ToSII(bool updateInnerSII = false, bool skipErrors = false) { if (InnerSII != null) { return(InnerSII); } RegistroLRFacturasRecibidas siiInvoice = new RegistroLRFacturasRecibidas(); if (IssueDate == null && !skipErrors) { throw new ArgumentNullException("IssueDate is null."); } if (PostingDate == null && !skipErrors) { throw new ArgumentNullException("PostingDate is null."); } if (RegisterDate == null && !skipErrors) { throw new ArgumentNullException("RegisterDate is null."); } if (!string.IsNullOrEmpty(ExternalReference) && !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0)) { siiInvoice.FacturaRecibida.RefExterna = ExternalReference; } if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0) { siiInvoice.PeriodoImpositivo.Ejercicio = (PostingDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiInvoice.PeriodoImpositivo.Periodo = (PostingDate ?? new DateTime(1, 1, 1)).ToString("MM"); } else { siiInvoice.PeriodoLiquidacion.Ejercicio = (PostingDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiInvoice.PeriodoLiquidacion.Periodo = (PostingDate ?? new DateTime(1, 1, 1)).ToString("MM"); } if (SellerParty == null && !skipErrors) { throw new ArgumentNullException("SellerParty is null."); } if (GrossAmount != 0) { siiInvoice.FacturaRecibida.ImporteTotal = SIIParser.FromDecimal(GrossAmount); } if (!(Settings.Current.IDVersionSii.CompareTo("1.1") < 0)) { if (GrossAmount > UpperLimit) { siiInvoice.FacturaRecibida.Macrodato = "S"; } } siiInvoice.IDFactura.NumSerieFacturaEmisor = InvoiceNumber; siiInvoice.IDFactura.FechaExpedicionFacturaEmisor = SIIParser.FromDate(IssueDate); /* B) Facturas Recibidas * * En un plazo de cuatro días naturales desde la fecha en que se produzca el registro * contable de la factura y, en todo caso, antes del día 16 del mes siguiente al periodo * de liquidación en que se hayan incluido las operaciones correspondientes * (período en que se deduce el IVA soportado). * Se entiende que el registro contable de la factura se produce en la fecha de entrada * en el sistema contable con independencia de la fecha reflejada en el asiento contable. */ siiInvoice.FacturaRecibida.FechaRegContable = SIIParser.FromDate(RegisterDate); if (OperationIssueDate != null) { siiInvoice.FacturaRecibida.FechaOperacion = SIIParser.FromDate(OperationIssueDate); } if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0 && TaxDate != null) { siiInvoice.FacturaRecibida.ADeducirEnPeriodoPosterior = "S"; siiInvoice.FacturaRecibida.EjercicioDeduccion = TaxDate?.ToString("yyyy"); siiInvoice.FacturaRecibida.PeriodoDeduccion = TaxDate?.ToString("MM");; } siiInvoice.FacturaRecibida.TipoFactura = InvoiceType.ToString(); siiInvoice.FacturaRecibida.ClaveRegimenEspecialOTrascendencia = ((int)ClaveRegimenEspecialOTrascendencia).ToString().PadLeft(2, '0'); siiInvoice.FacturaRecibida.DescripcionOperacion = InvoiceText; if (InvoiceType == InvoiceType.F5) { /* SII_Descripcion_ServicioWeb_v0.7.pdf (pag. 203) * 8.1.2.2.Ejemplo mensaje XML de alta de importación * En los datos identificativos correspondientes al proveedor se consignaran los del importador y titular del libro registro * Deberán consignarse, como número de factura y fecha de expedición, el número de referencia que figura en el propio DUA y la fecha de su * admisión por la Administración Aduanera respectivamente*/ SellerParty = BuyerParty; } siiInvoice.FacturaRecibida.Contraparte = GetContraparte(siiInvoice, skipErrors); // Tratamiento de las facturas rectificativas. if (InvoicesRectified.Count != 0) { siiInvoice.FacturaRecibida.TipoRectificativa = RectifiedType.ToString(); if (RectifiedBase != 0) { // Si consta el datos de importe rectificacion (tipo rectif 's'), lo ponemos ImporteRectificacion importeRectifica = new ImporteRectificacion(); importeRectifica.BaseRectificada = SIIParser.FromDecimal(RectifiedBase); importeRectifica.CuotaRectificada = SIIParser.FromDecimal(RectifiedAmount); importeRectifica.CuotaRecargoRectificado = SIIParser.FromDecimal(RectifiedEquivCharge); siiInvoice.FacturaRecibida.ImporteRectificacion = importeRectifica; } siiInvoice.FacturaRecibida.FacturasRectificadas = new List <IDFactura>(); foreach (var regRect in InvoicesRectified) { IDFactura FactRectificada = new IDFactura(); FactRectificada.NumSerieFacturaEmisor = regRect.RectifiedInvoiceNumber; FactRectificada.FechaExpedicionFacturaEmisor = SIIParser.FromDate(regRect.RectifiedIssueDate); // En este caso pongo a null IDEmisorFactura para que no serialice una etiqueta vacía. FactRectificada.IDEmisorFactura = null; siiInvoice.FacturaRecibida.FacturasRectificadas.Add(FactRectificada); } } else { if (InvoiceType.ToString().StartsWith("R") && !skipErrors) { throw new Exception("RectifiedInvoiceNumber for InvoiceType of kind 'R' must be not null."); } } // Desgloses DesgloseIVA desgloseIVA = GetDesgloseIVA(); if (IsInversionSujetoPasivo) { siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo = desgloseIVA; } else { siiInvoice.FacturaRecibida.DesgloseFactura.DesgloseIVA = desgloseIVA; } decimal cuotaDeducible = 0; foreach (KeyValuePair <decimal, decimal[]> kvp in TaxesOutputs) { cuotaDeducible += kvp.Value[1]; } siiInvoice.FacturaRecibida.CuotaDeducible = SIIParser.FromDecimal(cuotaDeducible); if (updateInnerSII) { InnerSII = siiInvoice; } return(siiInvoice); }
/// <summary> /// Constructor de ARInvoice. /// </summary> /// <param name="registroLRFacturasRecibidas">Objeto serialización xml facturas emitidas.</param> public APInvoice(RegistroLRFacturasRecibidas registroLRFacturasRecibidas) { APInvoicePayments = new List <APInvoicePayment>(); InvoicesRectified = new List <InvoiceRectified>(); RegistroLRFacturasRecibidas siiInvoice = registroLRFacturasRecibidas; InvoiceNumber = siiInvoice.IDFactura.NumSerieFacturaEmisor; IssueDate = Convert.ToDateTime(siiInvoice.IDFactura.FechaExpedicionFacturaEmisor); PostingDate = Convert.ToDateTime(siiInvoice.FacturaRecibida.FechaRegContable); if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0 && siiInvoice.FacturaRecibida.ADeducirEnPeriodoPosterior == "S") { TaxDate = new DateTime(Convert.ToInt32(siiInvoice.FacturaRecibida.EjercicioDeduccion), Convert.ToInt32(siiInvoice.FacturaRecibida.PeriodoDeduccion), 1); } if (siiInvoice.FacturaRecibida.FechaOperacion != null) { OperationIssueDate = Convert.ToDateTime(siiInvoice.FacturaRecibida.FechaOperacion); } SellerParty = new Party() { TaxIdentificationNumber = siiInvoice.IDFactura.IDEmisorFactura.NIF, PartyName = siiInvoice.FacturaRecibida.Contraparte.NombreRazon }; if (siiInvoice.FacturaRecibida.Contraparte.IDOtro != null) { // Si no es un nif español IDOtroType = (IDOtroType)Convert.ToInt32( siiInvoice.FacturaRecibida.Contraparte.IDOtro.IDType); CountryCode = siiInvoice.FacturaRecibida.Contraparte.IDOtro.CodigoPais; SellerParty.TaxIdentificationNumber = siiInvoice.FacturaRecibida.Contraparte.IDOtro.ID; } if (SellerParty == null) { throw new ArgumentNullException("SellerParty is null."); } if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } if (PostingDate == null) { throw new ArgumentNullException("PostingDate is null."); } InvoiceType invoiceType; if (!Enum.TryParse <InvoiceType>(siiInvoice.FacturaRecibida.TipoFactura, out invoiceType)) { throw new InvalidOperationException($"Unknown invoice type {siiInvoice.FacturaRecibida.TipoFactura}"); } InvoiceType = invoiceType; ClaveRegimenEspecialOTrascendencia = (ClaveRegimenEspecialOTrascendencia)Convert.ToInt32( siiInvoice.FacturaRecibida.ClaveRegimenEspecialOTrascendencia); // Gestion rectificativa if (siiInvoice.FacturaRecibida.TipoRectificativa != null) { if (!siiInvoice.FacturaRecibida.TipoFactura.StartsWith("R")) { throw new ArgumentException("For TipoRectificativa not null TipoFactura must begin with 'R'."); } FacturaRecibida facturaRecibidaRectificativa = siiInvoice.FacturaRecibida; if (facturaRecibidaRectificativa.ImporteRectificacion != null) { RectifiedBase = SIIParser.ToDecimal(facturaRecibidaRectificativa.ImporteRectificacion.BaseRectificada); RectifiedAmount = SIIParser.ToDecimal(facturaRecibidaRectificativa.ImporteRectificacion.CuotaRectificada); } RectifiedType rectifiedType; if (Enum.TryParse <RectifiedType>(facturaRecibidaRectificativa.TipoRectificativa, out rectifiedType)) { RectifiedType = rectifiedType; } if (facturaRecibidaRectificativa.FacturasRectificadas.Count == 0) { throw new ArgumentException("FacturasRectificadas without elements."); } foreach (var regRect in facturaRecibidaRectificativa.FacturasRectificadas) { InvoiceRectified invoiceRectified = new InvoiceRectified(); invoiceRectified.RectifiedInvoiceNumber = regRect.NumSerieFacturaEmisor; invoiceRectified.RectifiedIssueDate = Convert.ToDateTime(regRect.FechaExpedicionFacturaEmisor); InvoicesRectified.Add(invoiceRectified); } } // Gestion desgloses decimal taxRate, taxBase, taxAmount, taxRateRE, taxAmountRE; if (siiInvoice.FacturaRecibida.DesgloseFactura != null) { DesgloseIVA desgloseIVA = null; if (siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo != null && siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo.DetalleIVA.Count > 0) { desgloseIVA = siiInvoice.FacturaRecibida.DesgloseFactura.InversionSujetoPasivo; } else { if (siiInvoice.FacturaRecibida.DesgloseFactura.DesgloseIVA == null) { throw new ArgumentException("For InversionSujetoPasivo DesgloseIVA must be present on DesgloseFactura."); } desgloseIVA = siiInvoice.FacturaRecibida.DesgloseFactura.DesgloseIVA; } foreach (var iva in desgloseIVA.DetalleIVA) { taxRate = SIIParser.ToDecimal(iva.TipoImpositivo); taxBase = SIIParser.ToDecimal(iva.BaseImponible); taxAmount = SIIParser.ToDecimal(iva.CuotaSoportada); taxRateRE = SIIParser.ToDecimal(iva.TipoRecargoEquivalencia); taxAmountRE = SIIParser.ToDecimal(iva.CuotaRecargoEquivalencia); if (Settings.Current.IDVersionSii.CompareTo("1.1") >= 0) { IsAsset = (iva.BienInversion == "S"); } TaxesOutputs.Add(taxRate, new decimal[] { taxBase, taxAmount, taxRateRE, taxAmountRE }); } } else { throw new ArgumentException("DesgloseFactura no present in FacturaRecibida."); } // Gestión cuota deducible GrossAmount = SIIParser.ToDecimal(siiInvoice.FacturaRecibida.ImporteTotal); InvoiceText = siiInvoice.FacturaRecibida.DescripcionOperacion; }
internal RegistroLRBajaRecibidas ToRegistroLRBajaRecibidasSII() { RegistroLRBajaRecibidas siiDelete = new RegistroLRBajaRecibidas(); if (SellerParty == null) { throw new ArgumentNullException("SellerParty is null."); } if (InvoiceNumber == null) { throw new ArgumentNullException("InvoiceNumber is null."); } if (IssueDate == null) { throw new ArgumentNullException("PostingDate is null."); } if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0) { siiDelete.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiDelete.PeriodoImpositivo.Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM"); } else { siiDelete.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiDelete.PeriodoLiquidacion.Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM"); } TaxIdEs taxIdEs = null; bool IsNotNifES = false; try { taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } if (SellerParty != null) { siiDelete.IDFactura = new IDFactura(); siiDelete.IDFactura.IDEmisorFactura.NombreRazon = SellerParty.PartyName; if (IsNotNifES) { if (CountryCode == null && IDOtroType != IDOtroType.NifIva) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } siiDelete.IDFactura.IDEmisorFactura.IDOtro = new IDOtro(); siiDelete.IDFactura.IDEmisorFactura.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); siiDelete.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode; siiDelete.IDFactura.IDEmisorFactura.IDOtro.ID = SellerParty.TaxIdentificationNumber; } else { siiDelete.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber; } if (InvoiceNumber != null) { siiDelete.IDFactura.NumSerieFacturaEmisor = InvoiceNumber; } if (IssueDate != null) { siiDelete.IDFactura.FechaExpedicionFacturaEmisor = SIIParser.FromDate(IssueDate); } } return(siiDelete); }
public void GenerarXMLRecibidasEnvel(string _NombreFichero) { RecibidasEnvel funcion = new RecibidasEnvel(); string _NomFicheroWrk = _NombreFichero; try { Envelope _EnvelWrk = new Envelope(); SuministroLRFacturasRecibidas _SumLRFactReci = new SuministroLRFacturasRecibidas(); RegistroLRFacturasRecibidas _RegLRFactReci = new RegistroLRFacturasRecibidas(); Cabecera _Cabecera = new Cabecera(); bool _NuevaFact = false; int lineasFisc = 0; bool _NuevoDetalle = true; using (StreamReader _Lector = new StreamReader(_NomFicheroWrk)) { while (_Lector.Peek() > -1) { string _RegFichero = _Lector.ReadLine(); if (!String.IsNullOrEmpty(_RegFichero)) { // Con creamos un Array con los distintos campos que contiene el registro separados por ";" string[] _CamposReg = _RegFichero.Split(';'); string _TipoReg = _CamposReg[0]; switch (_TipoReg) { case "CABE": _Cabecera = funcion.TratarRegCabecera(_CamposReg); _SumLRFactReci.Cabecera = _Cabecera; break; case "FACT": if (_NuevaFact) // Si se trata de una nueva factura, añadiremos la 'antigua' al fichero { _SumLRFactReci.RegistroLRFacturasRecibidas.Add(_RegLRFactReci); _NuevaFact = false; } _RegLRFactReci = new RegistroLRFacturasRecibidas(); _RegLRFactReci = funcion.TratarFactRecibida(_CamposReg); lineasFisc = 0; _NuevoDetalle = true; break; case "RECT": _RegLRFactReci = funcion.AgregarFactRectifica(_CamposReg, _RegLRFactReci); break; case "FISC": _NuevaFact = true; lineasFisc++; if (lineasFisc > 1) { _NuevoDetalle = false; } _RegLRFactReci = funcion.AgregarDesgloseIVA(_CamposReg, _RegLRFactReci, _NuevoDetalle); break; case "FINI": // Tenemos que incluir la última factura que hemos tratado. _SumLRFactReci.RegistroLRFacturasRecibidas.Add(_RegLRFactReci); // Incluimos todas las facturas tratadas en el Envelope. _EnvelWrk.Body.SuministroLRFacturasRecibidas = _SumLRFactReci; //Obtenemos la fecha actual sin la hora y procedemos a crear la ruta/nombre del fichero resultante DateTime _FechaActual = DateTime.Today; string nombrefichero = "SII_Recibidas_" + _Cabecera.Titular.NIF + "_" + _FechaActual.ToString("yyyyMMdd") + ".XML"; string XmlResult = "C:/Temp/" + nombrefichero; // Con la siguiente instruccion se genera el XML en la direccion anteriormente indicada. XmlDocument tmpXML = SIIParser.GetXml(_EnvelWrk, XmlResult); string _msg = "Fichero XML generado: " + XmlResult; MessageBox.Show(_msg, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); break; default: string _msgAviso = "Tipo Registro incorrecto: " + _TipoReg; MessageBox.Show(_msgAviso, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } } } } } catch (Exception ex) { string _msgError = "Error: " + ex.Message; MessageBox.Show(_msgError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Devuelve el lote de facturas como un archivo xml para soap según las /// especificaciones de la aeat. /// </summary> /// <param name="xmlPath">Ruta donde se guardará el archivo generado.</param> /// <returns>Xaml generado.</returns> public XmlDocument GetXmlExtern(string xmlPath) { return(SIIParser.GetXml(GetEnvelopeExtern(), xmlPath, SIINamespaces.con)); }
/// <summary> /// Obtiene un objeto RegistroLRDetOperacionIntracomunitaria, este objeto se utiliza /// para la serialización xml. /// </summary> /// <param name="updateInnerSII">Si es true, actualiza el objeto SII subyacente /// con el valor calculado.</param> /// <returns>Nueva instancia del objeto para serialización /// xml RegistroLRDetOperacionIntracomunitaria.</returns> internal RegistroLRDetOperacionIntracomunitariaVentasEnConsigna ToSII(bool updateInnerSII = false) { if (InnerSII != null) { return(InnerSII); } RegistroLRDetOperacionIntracomunitariaVentasEnConsigna siiInvoice = new RegistroLRDetOperacionIntracomunitariaVentasEnConsigna(); if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } if (!string.IsNullOrEmpty(ExternalReference) && !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0)) { siiInvoice.OperacionIntracomunitaria.RefExterna = ExternalReference; } siiInvoice.IdRegistroDeclarado = new IdRegistroDeclarado() { Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"), Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM") }; siiInvoice.TipoOperacion = OperationType; TaxIdEs taxIdEs = null; bool IsNotNifES = false; if (BuyerParty == null) { throw new ArgumentNullException("BuyerParty is null."); } // Se puede tratar de un Buyer extranjero, de manera que tendremos que poner el tratamiento correspondiente try { taxIdEs = new TaxIdEs(BuyerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } Contraparte contraparte = null; if (BuyerParty != null) { contraparte = new Contraparte() { NombreRazon = BuyerParty.PartyName }; if (IsNotNifES) { if (CountryCode == null && IDOtroType != IDOtroType.NifIva) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } // Si no es un nif español contraparte.IDOtro = new IDOtro(); contraparte.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); contraparte.IDOtro.CodigoPais = CountryCode; contraparte.IDOtro.ID = BuyerParty.TaxIdentificationNumber; } else { siiInvoice.Contraparte.NIF = BuyerParty.TaxIdentificationNumber; } } siiInvoice.IdRegistroDeclarado.IdRegistro = InvoiceNumber; // Tratamos el resto de información de la factura intracomunitaria. siiInvoice.ClaveDeclarante = ClaveDeclarante.ToString(); if (OperationType == "01") { siiInvoice.Contraparte = contraparte; siiInvoice.OperacionIntracomunitaria = new OperacionIntracomunitariaVentasEnConsigna() { InfoExpedicionRecepcion = new InfoExpedicionRecepcion() { FechaExpedicion = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), FechaLlegada = (ReceptionDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), EmPartida = EstadoMiembroPartida, EmLlegada = EstadoMiembroLlegada, DescripBienes = DescripcionBienes, Cantidad = $"{Quantity}", ValorBienes = SIIParser.FromDecimal(GrossAmount) } }; siiInvoice.Deposito = new Deposito() { DireccionAlmacen = WarehouseAddress }; } else if (OperationType == "03") { siiInvoice.OperacionIntracomunitaria = new OperacionIntracomunitariaVentasEnConsigna() { DestinoFinalExpedRecep = new DestinoFinalExpedRecep() { FechaOpDeclarada = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), DescripBienes = DescripcionBienes, Cantidad = $"{Quantity}", BaseImponibleValor = SIIParser.FromDecimal(GrossAmount), PrecioUnitario = SIIParser.FromDecimal(GrossAmount / Quantity), DestinatarioFinal = contraparte } }; } // Para las ventas de bienes envíados anteriormente en consigna hay que indicar la // información del envío original. Esta información se incluye en InvoicesRectified if (InvoicesRectified != null && InvoicesRectified.Count > 0) { siiInvoice.OperacionIntracomunitaria.IdRegistroExpInicial = new IdRegistroExpInicial() { Ejercicio = (InvoicesRectified[0].RectifiedIssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"), Periodo = (InvoicesRectified[0].RectifiedIssueDate ?? new DateTime(1, 1, 1)).ToString("MM"), IdExpInicial = InvoicesRectified[0].RectifiedInvoiceNumber }; } if (updateInnerSII) { InnerSII = siiInvoice; } return(siiInvoice); }
/// <summary> /// Devuelve el registro de cobros relacionados con la factura /// en un objeto XML. /// </summary> /// <returns>Objeto XML de registro de cobros relacionados con la factura.</returns> internal RegistroLRPagos ToPaymentsSII() { RegistroLRPagos registroLRPagos = new RegistroLRPagos(); registroLRPagos.IDFactura.NumSerieFacturaEmisor = InvoiceNumber; registroLRPagos.IDFactura.FechaExpedicionFacturaEmisor = SIIParser.FromDate(IssueDate); TaxIdEs taxIdEs = null; bool IsNotNifES = false; try { taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } if (SellerParty != null) { registroLRPagos.IDFactura.IDEmisorFactura.NombreRazon = SellerParty.PartyName; if (IsNotNifES) { if (CountryCode == null) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } registroLRPagos.IDFactura.IDEmisorFactura.IDOtro = new IDOtro(); registroLRPagos.IDFactura.IDEmisorFactura.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); registroLRPagos.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode; registroLRPagos.IDFactura.IDEmisorFactura.IDOtro.ID = SellerParty.TaxIdentificationNumber; } else { registroLRPagos.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber; } } foreach (var payment in APInvoicePayments) { if (payment.PaymentDate == null) { throw new ArgumentNullException("PaymentDate is null."); } Cobro cobro = new Cobro() { Fecha = (payment.PaymentDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), Medio = ((int)payment.PaymentTerm).ToString().PadLeft(2, '0'), Importe = SIIParser.FromDecimal(payment.PaymentAmount), Cuenta_O_Medio = payment.AccountOrTermsText }; registroLRPagos.Pagos.Add(cobro); } return(registroLRPagos); }
private void GetLinesFE() { if (Desglose.NoSujeta != null) { Lines.Add(new QueryAeatInvoiceLine() { NoSujArt7_14 = SIIParser.ToDecimal(Desglose.NoSujeta.ImportePorArticulos7_14_Otros), NoSujTAI = SIIParser.ToDecimal(Desglose.NoSujeta.ImporteTAIReglasLocalizacion), Tipo = "NS" }); } if (Desglose.Sujeta != null) { if (Desglose.Sujeta.Exenta != null) { if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0) { Lines.Add(new QueryAeatInvoiceLine() { BaseImponible = SIIParser.ToDecimal(Desglose.Sujeta.Exenta.BaseImponible), Tipo = Desglose.Sujeta.Exenta.CausaExencion }); } else { foreach (var exenta in Desglose.Sujeta.Exenta.DetalleExenta) { Lines.Add(new QueryAeatInvoiceLine() { BaseImponible = SIIParser.ToDecimal(exenta.BaseImponible), Tipo = exenta.CausaExencion }); } } } if (Desglose.Sujeta.NoExenta != null) { if (Desglose.Sujeta.NoExenta.DesgloseIVA != null) { if (Desglose.Sujeta.NoExenta.DesgloseIVA.DetalleIVA != null) { foreach (var iva in Desglose.Sujeta.NoExenta.DesgloseIVA.DetalleIVA) { Lines.Add(new QueryAeatInvoiceLine() { BaseImponible = SIIParser.ToDecimal(iva.BaseImponible), TipoImpositivo = SIIParser.ToDecimal(iva.TipoImpositivo), TipoRE = SIIParser.ToDecimal(iva.TipoRecargoEquivalencia), Cuota = SIIParser.ToDecimal(iva.CuotaRepercutida), CuotaRE = SIIParser.ToDecimal(iva.CuotaRecargoEquivalencia), TipoREAGYP = SIIParser.ToDecimal(iva.PorcentCompensacionREAGYP), CuotaREAGYP = SIIParser.ToDecimal(iva.ImporteCompensacionREAGYP), Tipo = Desglose.Sujeta.NoExenta.TipoNoExenta }); } } } } } }
/// <summary> /// Obtiene un objeto RegistroLROpTranscendTribu, este objeto se utiliza /// para la serialización xml. /// </summary> /// <returns>Nueva instancia del objeto para serialización /// xml RegistroLROpTranscendTribu.</returns> internal RegistroLROpTrascendTribu ToSII() { RegistroLROpTrascendTribu siiTributo = new RegistroLROpTrascendTribu(); if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0) { siiTributo.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiTributo.PeriodoImpositivo.Periodo = "0A"; // anual } else { siiTributo.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"); siiTributo.PeriodoLiquidacion.Periodo = "0A"; // anual } if (SellerParty == null) { throw new ArgumentNullException("SellerParty is null."); } TaxIdEs taxIdEs = null; bool IsNotNifES = false; try { taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } if (SellerParty != null) { siiTributo.Contraparte.NombreRazon = SellerParty.PartyName; if (IsNotNifES) { if (CountryCode == null) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } siiTributo.Contraparte.IDOtro = new IDOtro(); siiTributo.Contraparte.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); siiTributo.Contraparte.IDOtro.CodigoPais = CountryCode; siiTributo.Contraparte.IDOtro.ID = SellerParty.TaxIdentificationNumber; } else { siiTributo.Contraparte.NIF = SellerParty.TaxIdentificationNumber; } } siiTributo.ClaveOperacion = ClaveOperacion; siiTributo.ImporteTotal = SIIParser.FromDecimal(GrossAmount); return(siiTributo); }
/// <summary> /// Devuelve el lote de Operaciones de Seguros como un archivo xml para soap según las /// especificaciones de la aeat. /// </summary> /// <param name="xmlPath">Ruta donde se guardará el archivo generado.</param> /// <returns>Xaml generado.</returns> public XmlDocument GetXml(string xmlPath) { return(SIIParser.GetXml(GetEnvelope(), xmlPath)); }
/// <summary> /// Constructor de ITInvoice. /// </summary> /// <param name="registroLRDetOperacionIntracomunitariaVentasEnConsigna">Objeto serialización xml venta consigna.</param> public ITConsignment(RegistroLRDetOperacionIntracomunitariaVentasEnConsigna registroLRDetOperacionIntracomunitariaVentasEnConsigna) { RegistroLRDetOperacionIntracomunitariaVentasEnConsigna siiInvoice = registroLRDetOperacionIntracomunitariaVentasEnConsigna; InvoiceNumber = siiInvoice.IdRegistroDeclarado.IdRegistro; OperationType = siiInvoice.TipoOperacion; IssueDate = Convert.ToDateTime(siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.FechaExpedicion); ReceptionDate = Convert.ToDateTime(siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.FechaLlegada); Quantity = Convert.ToInt32(siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.Cantidad); GrossAmount = SIIParser.ToDecimal(siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.ValorBienes); WarehouseAddress = siiInvoice.Deposito.DireccionAlmacen; // Tratamiento del BuyerParty BuyerParty = new Party() { TaxIdentificationNumber = siiInvoice.Contraparte.NIF, PartyName = siiInvoice.Contraparte.NombreRazon }; if (siiInvoice.Contraparte.IDOtro != null) { // Si no es un nif español IDOtroType = (IDOtroType)Convert.ToInt32( siiInvoice.Contraparte.IDOtro.IDType); CountryCode = siiInvoice.Contraparte.IDOtro.CodigoPais; } // Tratamiento del BuyerParty BuyerParty = new Party() { TaxIdentificationNumber = (siiInvoice.Contraparte.IDOtro == null) ? null : siiInvoice.Contraparte.IDOtro.ID, PartyName = siiInvoice.Contraparte.NombreRazon }; if (siiInvoice.Contraparte.IDOtro != null) { // Si no es un nif español IDOtroType = (IDOtroType)Convert.ToInt32( siiInvoice.Contraparte.IDOtro.IDType); CountryCode = siiInvoice.Contraparte.IDOtro.CodigoPais; } if (BuyerParty == null) { throw new ArgumentNullException("BuyerParty is null."); } if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } ClaveDeclarante claveDeclarante; if (!Enum.TryParse <ClaveDeclarante>(siiInvoice.ClaveDeclarante, out claveDeclarante)) { throw new InvalidOperationException($"Unknown clave declarado {siiInvoice.ClaveDeclarante}"); } ClaveDeclarante = claveDeclarante; EstadoMiembroPartida = siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.EmPartida; EstadoMiembroLlegada = siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.EmLlegada; DescripcionBienes = siiInvoice.OperacionIntracomunitaria.InfoExpedicionRecepcion.DescripBienes; }