예제 #1
0
        /// <summary>
        /// Crea un lote de facturas emitidas para su envío al SII
        /// de la aeat.
        /// </summary>
        /// <returns></returns>
        private static ARInvoicesBatch CreaLoteDeFacturasEmitidas()
        {
            // Creamos al titular del envío
            Party titular = new Party()
            {
                TaxIdentificationNumber =
                    "B12959755",
                PartyName = "IRENE SOLUTIONS SL"
            };


            ARInvoicesBatch LoteDeFacturasEmitidas = new ARInvoicesBatch
            {
                Titular           = titular,
                CommunicationType = CommunicationType.A0 // alta facturas:
            };
            // utilizando el tipo de comunicación podemos modificar datos de facturas envíadas
            // anteriormente. En lugar de alta de facturas, podemos elegir modificación.

            // El titular del envío también es el emisor de las facturas
            Party emisor = titular;

            // Creo las facturas y las anexo al lote

            ARInvoice facturaEnviadaPrimera = new ARInvoice
            {
                IssueDate   = new DateTime(2017, 1, 15), // Fecha factura
                SellerParty = emisor,                    // El emisor de la factura

                BuyerParty = new Party()                 // El cliente
                {
                    //TaxIdentificationNumber =
                    //"NIF_EXTRANJERO",
                    PartyName = "MAC ORGANIZACION SL"
                },


                InvoiceNumber = "E00001",       // El número de factura
                InvoiceType   = InvoiceType.F1, // Factura normal
                ClaveRegimenEspecialOTrascendencia =
                    ClaveRegimenEspecialOTrascendencia.RegimenComun,
                GrossAmount = 231m,                             // Importe bruto
                InvoiceText = "Servicios consultoria"           // Descripción
            };                                                  // Primera factura

            facturaEnviadaPrimera.AddTaxOtuput(21m, 100m, 21m); // Añadimos las líneas de IVA
            facturaEnviadaPrimera.AddTaxOtuput(10m, 100m, 10m);

            LoteDeFacturasEmitidas.ARInvoices.Add(facturaEnviadaPrimera); // Añadimos la primera factura al lote



            return(LoteDeFacturasEmitidas);
        }
예제 #2
0
        private void BindModelFactura()
        {
            _FacturaEnCurso.InvoiceNumber = txInvoiceNumber.Text;
            _FacturaEnCurso.GrossAmount   = Convert.ToDecimal(txGrossAmount.Text);
            _FacturaEnCurso.InvoiceText   = txInvoiceText.Text;
            _FacturaEnCurso.IssueDate     = Convert.ToDateTime(txIssueDate.Text);

            decimal netAmount = ToAmount(grdIva.Rows[0].Cells[1].Value) +
                                ToAmount(grdIva.Rows[1].Cells[1].Value) +
                                ToAmount(grdIva.Rows[2].Cells[1].Value);

            decimal taxAmount = ToAmount(grdIva.Rows[0].Cells[2].Value) +
                                ToAmount(grdIva.Rows[1].Cells[2].Value) +
                                ToAmount(grdIva.Rows[2].Cells[2].Value);

            if (netAmount + taxAmount != _FacturaEnCurso.GrossAmount)
            {
                MessageBox.Show("Descuadre en el IVA.");
            }

            foreach (DataGridViewRow row in grdIva.Rows)
            {
                decimal curTax = ToAmount(row.Cells[2].Value);

                if (curTax != 0)
                {
                    decimal curTaxRate = ToAmount(row.Cells[0].Value);
                    decimal curTaxBase = ToAmount(row.Cells[1].Value);
                    _FacturaEnCurso.AddTaxOtuput(curTaxRate, curTaxBase, curTax);
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Crea un asiento resumen de facturas simplificadas para su envío al SII
        /// de la aeat.
        /// </summary>
        /// <returns></returns>
        private static ARInvoicesBatch CreaAsientoResumenFacturasSimplificadas()
        {
            // Creamos al titular del envío
            Party titular = new Party()
            {
                TaxIdentificationNumber =
                    "B12959755",
                PartyName = "IRENE SOLUTIONS SL"
            };


            ARInvoicesBatch asientoResumenFacturasSimplificadas = new ARInvoicesBatch
            {
                Titular           = titular,
                CommunicationType = CommunicationType.A0 // alta facturas:
            };
            // utilizando el tipo de comunicación podemos modificar datos de facturas envíadas
            // anteriormente. En lugar de alta de facturas, podemos elegir modificación.

            // El titular del envío también es el emisor de las facturas
            Party emisor = titular;

            // Creo la factura 'asiento resumen' y las anexo al lote

            ARInvoice facturaAsientoResumentFacturasSimplificadas = new ARInvoice
            {
                IssueDate   = new DateTime(2017, 1, 15), // Fecha factura
                SellerParty = emisor,                    // El emisor de la factura
                BuyerParty  = new Party()                // El cliente
                {
                    TaxIdentificationNumber =
                        "B12756474",
                    PartyName = "MAC ORGANIZACION SL"
                },
                InvoiceNumber         = "D00100",       // El número de factura de la primera factura simplificada
                InvoiceNumberLastItem = "D00199",       // El número de la última factura simplificada
                InvoiceType           = InvoiceType.F4, // Asiento resumen
                ClaveRegimenEspecialOTrascendencia =
                    ClaveRegimenEspecialOTrascendencia.RegimenComun,
                InvoiceText = "Factura"                                                                      // Descripción
            };                                                                                               // Factura asiento resumen

            facturaAsientoResumentFacturasSimplificadas.AddTaxOtuput(21m, 100m, 21m);                        // Añadimos las líneas resumen de IVA

            asientoResumenFacturasSimplificadas.ARInvoices.Add(facturaAsientoResumentFacturasSimplificadas); // Añadimos la factura de asiento resumen
            // sólo se permite una factura de este tipo en un lote de facturas a enviar.
            // si en el lote se incluyen más facturas saltará una excepción

            return(asientoResumenFacturasSimplificadas);
        }
예제 #4
0
        /// <summary>
        /// Rutina para añadir los desgloses de IVA correspondientes por cada factura.
        /// </summary>
        /// <param name="_CamposReg"></param>
        /// <param name="_FacturaActual"></param>
        /// <returns></returns>

        private ARInvoice AgregarDesgloseIVA(string[] _CamposReg, ARInvoice _FacturaActual)
        {
            // Procedemos a tratar la factura actual.
            // En este caso añadiremos las líneas de fiscalidad que hayamos leido a la factura que estemos tratando en ese momento

            // En este caso, a este nivel, tampoco podemos añadir el valor correspondiente a 'TipoNoExenta'.
            string _RegImpos = _CamposReg[1];

            if (_CamposReg[6] == "S")
            {
                _FacturaActual.IsTaxExcluded = false;
                _FacturaActual.IsService     = true;
            }


            if (_RegImpos != "E ")
            {
                _FacturaActual.Sujeta = (SujetaType)Enum.Parse(typeof(SujetaType), _CamposReg[2]);

                decimal _TipoImpos  = 0;
                decimal _BaseImpos  = 0;
                decimal _CuotaImpos = 0;

                if (!string.IsNullOrWhiteSpace(_CamposReg[3]))
                {
                    _TipoImpos = Convert.ToDecimal(_CamposReg[3]);
                }

                if (!string.IsNullOrWhiteSpace(_CamposReg[4]))
                {
                    _BaseImpos = Convert.ToDecimal(_CamposReg[4]);
                }

                if (!string.IsNullOrWhiteSpace(_CamposReg[5]))
                {
                    _CuotaImpos = Convert.ToDecimal(_CamposReg[5]);
                }


                _FacturaActual.AddTaxOtuput(_TipoImpos, _BaseImpos, _CuotaImpos);
            }
            else
            {
                _FacturaActual.CausaExencion = (CausaExencion)Enum.Parse(typeof(CausaExencion), _CamposReg[7]);
            }

            return(_FacturaActual);
        }
예제 #5
0
        /// <summary>
        /// Factura: Actualiza los datos del modelo 
        /// con los datos actuales de la vista.
        /// </summary>
        private void BindModelFactura()
        {

            // Chequear datos

            DateTime issueDate;

            if (!DateTime.TryParse(txIssueDate.Text, out issueDate))
            {
                MessageBox.Show("Debe introducir una fecha correcta");
                txIssueDate.Focus();
                return;
            }

            if (string.IsNullOrEmpty(txClienteTaxIdentificationNumber.Text))
            {
                MessageBox.Show("Debe introducir un NIF de cliente");
                txClienteTaxIdentificationNumber.Focus();
                return;
            }


            if (!string.IsNullOrEmpty(txCountry.Text))
            {
                _FacturaEnCurso.CountryCode = txCountry.Text;
            }

            _FacturaEnCurso.InvoiceNumber = txInvoiceNumber.Text;
            _FacturaEnCurso.GrossAmount = Convert.ToDecimal(txGrossAmount.Text);
            _FacturaEnCurso.InvoiceText = txInvoiceText.Text;
            _FacturaEnCurso.IssueDate = Convert.ToDateTime(issueDate);

            decimal netAmount = 0;
            decimal taxAmount = 0;

            _FacturaEnCurso.TaxesOutputs.Clear();

            foreach (DataGridViewRow row in grdIva.Rows)
            {
                decimal curTax = ToAmount(row.Cells[2].Value);

                if (curTax != 0)
                {
                    decimal curTaxRate = ToAmount(row.Cells[0].Value);
                    decimal curTaxBase = ToAmount(row.Cells[1].Value);

                    netAmount += curTaxBase;
                    taxAmount += curTax;

                    _FacturaEnCurso.AddTaxOtuput(curTaxRate, curTaxBase, curTax);
                }

            }

            if (netAmount + taxAmount != _FacturaEnCurso.GrossAmount && _FacturaEnCurso.TaxesOutputs.Count > 0)
                MessageBox.Show("Descuadre en el IVA.");

            // Cliente
            BindModelCliente();


        }
예제 #6
0
        /// <summary>
        /// Crea un lote de facturas emitidas para su envío al SII
        /// de la aeat.
        /// </summary>
        /// <returns></returns>
        private static ARInvoicesBatch CreaLoteDeFacturasEmitidas()
        {
            // Creamos un lote de facturas recibidas
            ARInvoicesBatch LoteDeFacturasEmitidas = new ARInvoicesBatch();

            // Creamos el titular del envío
            Party titular = new Party()
            {
                TaxIdentificationNumber =
                    "B12959755",
                PartyName = "IRENE SOLUTIONS SL"
            };

            LoteDeFacturasEmitidas.Titular           = titular;
            LoteDeFacturasEmitidas.CommunicationType = CommunicationType.A0; // alta facturas:
            // utilizando el tipo de comunicación podemos modificar datos de facturas envíadas
            // anteriormente. En lugar de alta de facturas, podemos elegir modificación.



            // Creo las facturas y las anexo al lote


            // Ejemplo de factura con cliente extranjero con NIF no español
            // en este caso el programa serializa Party en Contraparte.IDOtro
            // hay que establecer la propieda CountryCode ( si no lanza una excepción)
            // y por defecto asigna el tipo de documento otro '06' (se puede cambiar
            // mediante la propiedad IDOtroType de la factura.
            // Cuando el nif comienza por 'N', no residente o no es español, en lugar
            // de informarse el tipo DesgloseFactura se informara el tipo TipoDesglose.
            // En TipoDesglose si la propiedad IsService de la factura es true, se
            // serializa el detalle como prestación de servicios, en caso contrario como
            // entrega de bienes

            //  Consideramos que el titular del envío también es el emisor de las facturas
            Party emisor = titular;

            ARInvoice facturaEnviadaPrimera = new ARInvoice
            {
                IssueDate   = new DateTime(2017, 1, 15), // Fecha factura
                SellerParty = emisor,                    // El emisor de la factura


                CountryCode = "DK",


                BuyerParty = new Party() // El cliente
                {
                    TaxIdentificationNumber =
                        "DK12345678",
                    PartyName = "CLIENTE EXTRANJERO LTD"
                },
                InvoiceNumber = "E00027",       // El número de factura
                InvoiceType   = InvoiceType.F1, // Factura normal
                ClaveRegimenEspecialOTrascendencia =
                    ClaveRegimenEspecialOTrascendencia.RegimenComun,
                GrossAmount = 231m,                             // Importe bruto
                InvoiceText = "Servicios consultoria"           // Descripción
            };                                                  // Primera factura (Ejemplo un poco raro: Sujeta con NIF extranjero)

            facturaEnviadaPrimera.AddTaxOtuput(21m, 100m, 21m); // Añadimos las líneas de IVA
            facturaEnviadaPrimera.AddTaxOtuput(10m, 100m, 10m);

            LoteDeFacturasEmitidas.ARInvoices.Add(facturaEnviadaPrimera); // Añadimos la primera factura al lote

            ARInvoice facturaEnviadaSegunda = new ARInvoice
            {
                IssueDate   = new DateTime(2017, 1, 15), // Fecha factura
                SellerParty = emisor,                    // Emisor factura
                BuyerParty  = new Party()                // Cliente
                {
                    TaxIdentificationNumber =
                        "B12756474",
                    PartyName = "MAC ORGANIZACION SL"
                },
                InvoiceNumber = "E00028",                            // Número de factura
                InvoiceType   = InvoiceType.F1,                      // Factura normal
                ClaveRegimenEspecialOTrascendencia =
                    ClaveRegimenEspecialOTrascendencia.RegimenComun, // Regimen común
                GrossAmount = 55m,                                   // Importe bruto
                InvoiceText = "Licencia software"                    // Descripción
            };                                                       // Segunda factura (factura exenta)

            // SI NO AÑADIMOS LÍNEAS DE IVA COGE EL IMPORTE BRUTO COMO BASE EXENTA

            LoteDeFacturasEmitidas.ARInvoices.Add(facturaEnviadaSegunda); // Añadimos la segunda factura al lote

            ARInvoice facturaEnviadaRectificativa = new ARInvoice
            {
                IssueDate   = new DateTime(2017, 1, 15), // Fecha factura
                SellerParty = emisor,                    // Emisor factura
                BuyerParty  = new Party()                // Cliente
                {
                    TaxIdentificationNumber =
                        "B12756474",
                    PartyName = "MAC ORGANIZACION SL"
                },
                InvoiceNumber = "E00029",                            // Número de factura
                InvoiceType   = InvoiceType.R2,                      // Factura rectificativa
                ClaveRegimenEspecialOTrascendencia =
                    ClaveRegimenEspecialOTrascendencia.RegimenComun, // Regimen común
                GrossAmount = -231m,                                 // Importe bruto
                InvoiceText = "Servicios consultoria"                // Descripción
            };                                                       // Tercera factura (factura rectificativa)

            // Para las rectificaciones
            facturaEnviadaRectificativa.InvoicesRectified[0].RectifiedInvoiceNumber = "00000000022";
            facturaEnviadaRectificativa.InvoicesRectified[0].RectifiedIssueDate     = new DateTime(2017, 1, 5); // Fecha factura rectificada


            facturaEnviadaRectificativa.AddTaxOtuput(21m, -100m, -21m); // Añadimos las líneas de IVA
            facturaEnviadaRectificativa.AddTaxOtuput(10m, -100m, -10m);



            LoteDeFacturasEmitidas.ARInvoices.Add(facturaEnviadaRectificativa); // Añadimos la segunda factura al lote


            return(LoteDeFacturasEmitidas);
        }