Exemple #1
0
        private void TxClienteTaxIdentificationNumber_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (!string.IsNullOrEmpty(txClienteTaxIdentificationNumber.Text))
            {
                // Bandera que indica si el NIF es o no es español

                bool IsNotNifES = false;

                TaxIdEs taxIdEs = null;


                try
                {
                    taxIdEs = new TaxIdEs(txClienteTaxIdentificationNumber.Text);
                }
                catch
                {
                    IsNotNifES = true;
                }

                if (taxIdEs != null)
                {
                    IsNotNifES = !taxIdEs.IsDCOK;
                }

                if (IsNotNifES)
                {
                    lblNifInf.Text = "Id. fiscal no español.";
                    string country = General.GetCountry();
                    if (string.IsNullOrEmpty(country))
                    {
                        string _msg = "Introducción de NIF cancelada. Para NIF no españoles debe seleccionar un país.";
                        MessageBox.Show(_msg, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        txClienteTaxIdentificationNumber.Text = "";
                        lblNifInf.Text    = "";
                        txCountry.Visible = false;
                    }
                    else
                    {
                        txCountry.Visible = true;
                        txCountry.Text    = country;
                    }
                }
                else
                {
                    txCountry.Visible = false;
                    txCountry.Text    = "";
                    lblNifInf.Text    = "";
                }
            }
            else
            {
                lblNifInf.Text    = "";
                txCountry.Visible = false;
            }
        }
Exemple #2
0
        private void TxNifBusqueda_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (!string.IsNullOrEmpty(txNifBusqueda.Text))
            {
                bool    IsNotNifES = false;
                TaxIdEs taxIdEs    = null;

                try
                {
                    taxIdEs = new TaxIdEs(txNifBusqueda.Text);
                }
                catch
                {
                    IsNotNifES = true;
                }

                if (taxIdEs != null)
                {
                    IsNotNifES = !taxIdEs.IsDCOK;
                }

                if (IsNotNifES)
                {
                    string country = General.GetCountry();
                    if (string.IsNullOrEmpty(country))
                    {
                        string _msg = "Introducción de NIF cancelada. Para NIF no españoles debe seleccionar un país.";
                        MessageBox.Show(_msg, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        txNifBusqueda.Text = "";
                    }
                    else
                    {
                        lbCountry.Text = country;
                    }
                }
                else
                {
                    lbCountry.Text = "";
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Crea un filtro de cobros relacionados con la factura
        /// utilizando como filtro los datos de la misma.
        /// </summary>
        /// <returns>Objeto XML de filtro para consulta de  de factura.</returns>
        internal FiltroConsultaCobrosPagos ToFilterPagosSII()
        {
            FiltroConsultaCobrosPagos siiFilter = new FiltroConsultaCobrosPagos();

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            if (InvoiceNumber == null)
            {
                throw new ArgumentNullException("InvoiceNumber 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)
            {
                siiFilter.IDFactura = new IDFactura();
                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");
                    }

                    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
                {
                    siiFilter.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber;
                }

                if (InvoiceNumber != null)
                {
                    siiFilter.IDFactura.NumSerieFacturaEmisor = InvoiceNumber;
                }

                if (IssueDate != null)
                {
                    siiFilter.IDFactura.FechaExpedicionFacturaEmisor =
                        (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");
                }
            }

            return(siiFilter);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        /// <summary>
        /// Devuelve un objeto Contraparte del SII mediante los datos de la
        /// factura actual.
        /// </summary>
        /// <param name="siiInvoice">Factura a la que pertenece la contraparte.</param>
        /// <param name="skipErrors">Indica si hay que omitir las excepciones.</param>
        /// <returns> Contraparte para el SII.</returns>
        internal Contraparte GetContraparte(RegistroLRFacturasRecibidas siiInvoice, bool skipErrors = false)
        {
            Contraparte contraparte = new Contraparte();
            // Gestionar los asuntos relacionados con el NIF del comprador
            // Si no es nacional o comienza con 'N' en lugar de DesgloseFactura
            // hay que informar DesgloseTipoOperacion

            TaxIdEs taxIdEs = null;

            // Si no es una factura simplificada o asiento resumen
            if (InvoiceType != InvoiceType.F4 && InvoiceType != InvoiceType.F2)
            {
                // Bandera que indica si el NIF es o no es español

                bool IsNotNifES = false;


                try
                {
                    taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber);
                }
                catch
                {
                    IsNotNifES = true;
                }

                if (taxIdEs != null)
                {
                    IsNotNifES = !taxIdEs.IsDCOK;
                }


                if (SellerParty != null)
                {
                    contraparte.NombreRazon = SellerParty.PartyName;

                    if (IsNotNifES)
                    {
                        if (CountryCode == null && IDOtroType != IDOtroType.NifIva && !skipErrors)
                        {
                            throw new ArgumentNullException(
                                      $"Invoice {InvoiceNumber}: 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');

                        if (CountryCode != null)
                        {
                            contraparte.IDOtro.CodigoPais = CountryCode;
                        }

                        if (!string.IsNullOrEmpty(SellerParty.TaxIdentificationNumber))
                        {
                            contraparte.IDOtro.ID = SellerParty.TaxIdentificationNumber;
                        }

                        siiInvoice.IDFactura.IDEmisorFactura.IDOtro = contraparte.IDOtro;
                    }
                    else
                    {
                        if (IDOtroType == IDOtroType.NoCensado)
                        {
                            /* SII_Descripcion_ServicioWeb_v0.7.pdf
                             * 8.1.1.4.Ejemplo mensaje XML de alta cuando la contraparte no está censada
                             * Para los casos en que se haya rechazado una factura emitida debido a que la contraparte (NIF y nombre) no está censada en la AEAT, podrá
                             * enviar dicha factura, en un segundo intento, suministrando el NIF en el bloque <IdOtro> con los siguientes contenidos:
                             * Código país: ES
                             * Clave ID: 07. No censado*/

                            contraparte.IDOtro        = new IDOtro();
                            contraparte.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0');

                            if ((CountryCode == null || CountryCode != "ES") && !skipErrors)
                            {
                                throw new ArgumentNullException(
                                          $"Invoice {InvoiceNumber}: For IDOtroType.NoCensado Country Code can't be null. Must be 'ES'");
                            }

                            contraparte.IDOtro.CodigoPais = CountryCode;

                            if (!string.IsNullOrEmpty(SellerParty.TaxIdentificationNumber))
                            {
                                contraparte.IDOtro.ID = SellerParty.TaxIdentificationNumber;
                            }

                            siiInvoice.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber;
                        }
                        else
                        {
                            siiInvoice.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber;
                            contraparte.NIF = SellerParty.TaxIdentificationNumber;
                        }
                    }
                }
            }
            else
            {
                // Para las simplificadas null en contraparte para evitar tag vacio
                contraparte = null;
            }

            return(contraparte);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        internal FiltroConsulta ToFilterSII()
        {
            FiltroConsulta siiFilter = new FiltroConsulta();

            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(BuyerParty.TaxIdentificationNumber);
            }
            catch
            {
                IsNotNifES = true;
            }

            if (taxIdEs != null)
            {
                IsNotNifES = !taxIdEs.IsDCOK;
            }

            if (BuyerParty != null)
            {
                siiFilter.ClavePaginacion = new ClavePaginacion();
                siiFilter.ClavePaginacion.IDEmisorFactura.NombreRazon = BuyerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    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         = BuyerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiFilter.ClavePaginacion.IDEmisorFactura.NIF = BuyerParty.TaxIdentificationNumber;
                }

                if (InvoiceNumber != null)
                {
                    siiFilter.ClavePaginacion.NumSerieFacturaEmisor = InvoiceNumber;
                }

                if (IssueDate != null)
                {
                    siiFilter.ClavePaginacion.FechaExpedicionFacturaEmisor =
                        (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");
                }
            }

            return(siiFilter);
        }
Exemple #9
0
        /// <summary>
        /// Obtiene un objeto RegistroLRDetOperacionIntracomunitaria, este objeto se utiliza
        /// para la serialización xml.
        /// </summary>
        /// <returns>Nueva instancia del objeto para serialización
        /// xml RegistroLRDetOperacionIntracomunitaria.</returns>
        internal RegistroLRDetOperacionIntracomunitaria ToSII()
        {
            RegistroLRDetOperacionIntracomunitaria siiInvoice = new RegistroLRDetOperacionIntracomunitaria();

            if (IssueDate == null)
            {
                throw new ArgumentNullException("IssueDate is null.");
            }

            if (!string.IsNullOrEmpty(ExternalReference) &&
                !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0))
            {
                siiInvoice.OperacionIntracomunitaria.RefExterna = ExternalReference;
            }

            if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0)
            {
                siiInvoice.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoImpositivo.Periodo   = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM");
            }
            else
            {
                siiInvoice.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoLiquidacion.Periodo   = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM");
            }

            TaxIdEs taxIdEs    = null;
            bool    IsNotNifES = false;

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

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

            if (BuyerParty != null)
            {
                siiInvoice.IDFactura.IDEmisorFactura.NombreRazon = BuyerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    // Si no es un nif español
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro            = new IDOtro();
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode;
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.ID         = BuyerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiInvoice.IDFactura.IDEmisorFactura.NIF = BuyerParty.TaxIdentificationNumber;
                }
            }

            siiInvoice.IDFactura.NumSerieFacturaEmisor        = InvoiceNumber;
            siiInvoice.IDFactura.FechaExpedicionFacturaEmisor = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");

            // Se procede a tratar el Seller, el cual puede ser extranjero.
            taxIdEs    = null;
            IsNotNifES = false;

            try
            {
                taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber);
            }
            catch
            {
                IsNotNifES = true;
            }

            if (taxIdEs != null)
            {
                IsNotNifES = !taxIdEs.IsDCOK;
            }

            if (SellerParty != null)
            {
                siiInvoice.Contraparte.NombreRazon = SellerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    // Si no es un nif español
                    siiInvoice.Contraparte.IDOtro            = new IDOtro();
                    siiInvoice.Contraparte.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiInvoice.Contraparte.IDOtro.CodigoPais = CountryCode;
                    siiInvoice.Contraparte.IDOtro.ID         = SellerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiInvoice.Contraparte.NIF = SellerParty.TaxIdentificationNumber;
                }
            }

            //
            // Tratamos el resto de información de la factura intracomunitaria.
            //
            siiInvoice.OperacionIntracomunitaria.TipoOperacion     = OperationType.ToString();
            siiInvoice.OperacionIntracomunitaria.ClaveDeclarado    = ClaveDeclarado.ToString();
            siiInvoice.OperacionIntracomunitaria.EstadoMiembro     = EstadoMiembro;
            siiInvoice.OperacionIntracomunitaria.DescripcionBienes = DescripcionBienes;
            siiInvoice.OperacionIntracomunitaria.DireccionOperador = DireccionOperador;

            return(siiInvoice);
        }
Exemple #10
0
        internal RegistroLRBajaBienesInversion ToRegistroLRBajaBienesInversionSII()
        {
            RegistroLRBajaBienesInversion siiDelete = new RegistroLRBajaBienesInversion();

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            if (InvoiceNumber == null)
            {
                throw new ArgumentNullException("InvoiceNumber is null.");
            }

            if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0)
            {
                siiDelete.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiDelete.PeriodoImpositivo.Periodo   = "0A"; // anual
            }
            else
            {
                siiDelete.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiDelete.PeriodoLiquidacion.Periodo   = "0A"; // anual
            }


            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)
                    {
                        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 =
                        (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");
                }
            }

            // Campos especificos para los bienes de inversión.

            siiDelete.IdentificacionBien = PropertyId;

            return(siiDelete);
        }
Exemple #11
0
        /// <summary>
        /// Obtiene un objeto RegistroLRBienesInversion, este objeto se utiliza
        /// para la serialización xml.
        /// </summary>
        /// <returns>Nueva instancia del objeto para serialización
        /// xml RegistroLRBienesInversion.</returns>
        public RegistroLRBienesInversion ToSII()
        {
            RegistroLRBienesInversion siiInvoice = new RegistroLRBienesInversion();

            if (IssueDate == null)
            {
                throw new ArgumentNullException("IssueDate is null.");
            }

            if (!string.IsNullOrEmpty(ExternalReference) &&
                !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0))
            {
                siiInvoice.BienesInversion.RefExterna = ExternalReference;
            }


            if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0)
            {
                siiInvoice.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoImpositivo.Periodo   = "0A"; // anual
            }
            else
            {
                siiInvoice.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoLiquidacion.Periodo   = "0A"; // anual
            }

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            siiInvoice.IDFactura.NumSerieFacturaEmisor        = InvoiceNumber;
            siiInvoice.IDFactura.FechaExpedicionFacturaEmisor = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");

            TaxIdEs taxIdEs = null;

            bool IsNotNifES = false;

            try
            {
                taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber);
            }
            catch
            {
                IsNotNifES = true;
            }

            if (taxIdEs != null)
            {
                IsNotNifES = !taxIdEs.IsDCOK;
            }

            if (SellerParty != null)
            {
                siiInvoice.IDFactura.IDEmisorFactura.NombreRazon = SellerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro            = new IDOtro();
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode;
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.ID         = SellerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiInvoice.IDFactura.IDEmisorFactura.NIF = SellerParty.TaxIdentificationNumber;
                }
            }

            // Campos especificos para los bienes de inversión.

            siiInvoice.BienesInversion.IdentificacionBien               = PropertyId;
            siiInvoice.BienesInversion.FechaInicioUtilizacion           = (InitialDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");;
            siiInvoice.BienesInversion.ProrrataAnualDefinitiva          = ProrrataAnual.ToString(Settings.DefaultNumberFormatInfo);
            siiInvoice.BienesInversion.RegularizacionAnualDeduccion     = RegAnualDeduc.ToString(Settings.DefaultNumberFormatInfo);
            siiInvoice.BienesInversion.IndentificacionEntrega           = DeliveryId;
            siiInvoice.BienesInversion.RegularizacionDeduccionEfectuada = RegDeducEfec.ToString(Settings.DefaultNumberFormatInfo);

            return(siiInvoice);
        }
Exemple #12
0
        internal RegistroLROpTrascendTribu ToRegistroLRBajaOpTrascendTribuSII()
        {
            RegistroLROpTrascendTribu siiDelete = new RegistroLROpTrascendTribu();

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0)
            {
                siiDelete.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiDelete.PeriodoImpositivo.Periodo   = "0A"; // anual
            }
            else
            {
                siiDelete.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiDelete.PeriodoLiquidacion.Periodo   = "0A"; // anual
            }

            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.Contraparte             = new Contraparte();
                siiDelete.Contraparte.NombreRazon = SellerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    siiDelete.Contraparte.IDOtro            = new IDOtro();
                    siiDelete.Contraparte.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiDelete.Contraparte.IDOtro.CodigoPais = CountryCode;
                    siiDelete.Contraparte.IDOtro.ID         = SellerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiDelete.Contraparte.NIF = SellerParty.TaxIdentificationNumber;
                }

                if (ClaveOperacion != null)
                {
                    siiDelete.ClaveOperacion = ClaveOperacion;
                }
            }

            return(siiDelete);
        }
Exemple #13
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);
        }