/// <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); }
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); } } }
/// <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); }
/// <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); }
/// <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(); }
/// <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); }