Exemplo n.º 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);
        }
Exemplo n.º 2
0
        // Función para tratar el registro de factura que se acaba de leer.
        private RegistroLRFacturasEmitidas TratarFactEmitida(string[] _CamposReg)
        {
            RegistroLRFacturasEmitidas _RegLRFactEmitWRK = new RegistroLRFacturasEmitidas();

            // Informamos el periodo impositivo.
            PeriodoImpositivo _PeriodoWrk = new PeriodoImpositivo
            {
                Ejercicio = _CamposReg[1],
                Periodo   = _CamposReg[2]
            };

            _RegLRFactEmitWRK.PeriodoImpositivo = _PeriodoWrk;

            // Informamos el IDFactura.
            IDFactura _IDFactWrk = new IDFactura();

            _IDFactWrk.IDEmisorFactura.NIF          = _CamposReg[3];
            _IDFactWrk.NumSerieFacturaEmisor        = _CamposReg[4].Trim();
            _IDFactWrk.FechaExpedicionFacturaEmisor = _CamposReg[5];

            // En caso de que se trate de una factura de Asiento Resumen, hay que informar la última factura
            // que se incluye en este envío.
            if (!string.IsNullOrWhiteSpace(_CamposReg[14]))
            {
                _IDFactWrk.NumSerieFacturaEmisorResumenFin = _CamposReg[14];
            }
            _RegLRFactEmitWRK.IDFactura = _IDFactWrk;

            // Procedemos a tratar la factura actual.
            FacturaExpedida _FacturaActual = new FacturaExpedida
            {
                TipoFactura = _CamposReg[6],
                ClaveRegimenEspecialOTrascendencia = _CamposReg[7],

                ImporteTotal = ((_CamposReg[8]).Trim()).Replace(',', '.')
            };

            if (string.IsNullOrWhiteSpace(_CamposReg[9]))
            {
                _CamposReg[9] = "Hay que informar el concepto de la factura";
            }
            _FacturaActual.DescripcionOperacion = _CamposReg[9].Trim();

            // Informamos la contraparte, que cambiará dependiendo de si se trata de un cliente nacional o extranjero
            Contraparte _ClienteWrk = new Contraparte
            {
                NombreRazon = _CamposReg[10].Trim()
            };

            if (string.IsNullOrWhiteSpace(_CamposReg[12]))
            {
                _ClienteWrk.NIF = _CamposReg[11];
            }
            else
            {
                IDOtro _ClienteExtWrk = new IDOtro
                {
                    CodigoPais = _CamposReg[12],
                    IDType     = _CamposReg[13],
                    ID         = _CamposReg[11]
                };
                _ClienteWrk.IDOtro = _ClienteExtWrk;
            }
            _FacturaActual.Contraparte = _ClienteWrk;

            // Indicamos la fecha de operación, en el caso de que venga informada
            if (!string.IsNullOrWhiteSpace(_CamposReg[15]))
            {
                _FacturaActual.FechaOperacion = _CamposReg[15];
            }

            // Procedemos a informar los campos en el caso de que se trate del envio de una factura rectificativa.
            if (!string.IsNullOrWhiteSpace(_CamposReg[16]))
            {
                _FacturaActual.TipoRectificativa = _CamposReg[16];

                ImporteRectificacion _ImpRectifWrk = new ImporteRectificacion
                {
                    BaseRectificada  = ((_CamposReg[17]).Trim()).Replace(',', '.'),
                    CuotaRectificada = ((_CamposReg[18]).Trim()).Replace(',', '.')
                };
                _FacturaActual.ImporteRectificacion = _ImpRectifWrk;
            }

            // Procedemos a tratar el caso de que se trate del deslgose no Sujeto
            TipoDesglose    tipoDesglose    = new TipoDesglose();
            DesgloseFactura desgloseFactura = new DesgloseFactura();
            NoSujeta        noSujeta        = new NoSujeta();

            if (!string.IsNullOrWhiteSpace(_CamposReg[19]) || !string.IsNullOrWhiteSpace(_CamposReg[20]))
            {
                if (!string.IsNullOrWhiteSpace(_CamposReg[19]))
                {
                    noSujeta.ImportePorArticulos7_14_Otros = ((_CamposReg[19]).Trim()).Replace(',', '.');
                }

                if (!string.IsNullOrWhiteSpace(_CamposReg[20]))
                {
                    noSujeta.ImporteTAIReglasLocalizacion = ((_CamposReg[20]).Trim()).Replace(',', '.');
                }

                desgloseFactura.NoSujeta = noSujeta;

                tipoDesglose.DesgloseFactura = desgloseFactura;

                _FacturaActual.TipoDesglose = tipoDesglose;
            }

            _RegLRFactEmitWRK.FacturaExpedida = _FacturaActual;

            return(_RegLRFactEmitWRK);
        }