예제 #1
0
        /// <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);
                }
            }
        }
예제 #2
0
 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           = ""
                 });
             }
         }
     }
 }
예제 #3
0
        /// <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;
        }
예제 #4
0
        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
                                });
                            }
                        }
                    }
                }
            }
        }
예제 #5
0
        /// <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;
        }