コード例 #1
0
        /// <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);
        }
コード例 #2
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;
        }