/// <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 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); }
/// <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); }
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); }
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); }