public string GetStreamVentas(Empresas empresa, int anio, int mes) { DateTime fechaDesde = new DateTime(anio, mes, 1); DateTime fechaHasta = fechaDesde.AddMonths(1).AddSeconds(-1); StringBuilder builder = new StringBuilder(); LibroVentasTotal total = new LibroVentasTotal(); StringBuilder registroTotal = new StringBuilder(); IList comprobantes = GetComprobantes(empresa, fechaDesde, fechaHasta); foreach (Comprobantes comprobante in comprobantes) { builder.Append(GetStreamVentas(comprobante, total)); } #region Registro Tipo 2 //Campo 1: Tipo de Registro registroTotal.Append("2"); //Campo 2: Período registroTotal.Append(String.Format("{0:yyyyMM}", fechaDesde)); //Campo 3: Relleno - 29 caracteres registroTotal.Append(String.Empty.PadLeft(29)); //Campo 4: Cantidad de Registros de tipo 1 - 12 caracteres registroTotal.Append(total.CantidadRegistros.ToString().PadLeft(12, '0')); //Campo 5: Relleno - 10 caracteres registroTotal.Append(String.Empty.PadLeft(10)); //Campo 6: CUIT del informante registroTotal.Append(empresa.Cuit.Replace("-", "").PadLeft(11)); //Campo 7: Relleno - 30 caracteres registroTotal.Append(String.Empty.PadLeft(30)); //Campo 8: Importe total de la operación registroTotal.Append(total.ImporteTotal.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 9: Importe total de conceptos que no integran el precio neto gravado registroTotal.Append("000000000000000"); //Campo 10: Importe neto gravado registroTotal.Append(total.ImporteNeto.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 11: Relleno - 4 caracteres registroTotal.Append(String.Empty.PadLeft(4)); //Campo 12: Impuesto liquidado registroTotal.Append(total.ImporteImpuesto.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 13: Impuesto liquidado a RNI o percepción a no categorizados registroTotal.Append("000000000000000"); //Campo 14: Importe de operaciones exentas registroTotal.Append("000000000000000"); //Campo 15: Importe de percepciones o pagos a cuenta sobre impuestos nacionales registroTotal.Append("000000000000000"); //Campo 16: Importe de percepción de ingresos brutos registroTotal.Append("000000000000000"); //Campo 17: Importe de percepción de impuestos municipales registroTotal.Append("000000000000000"); //Campo 18: Importe de impuestos internos registroTotal.Append("000000000000000"); //Campo 19: Relleno - 122 caracteres registroTotal.Append(String.Empty.PadLeft(122)); //Fin de registro registroTotal.Append("\r\n"); #endregion builder.Append(registroTotal); return(builder.ToString()); }
protected string GetStreamVentas(Comprobantes comp, LibroVentasTotal total) { StringBuilder ret1 = new StringBuilder(); StringBuilder ret2 = new StringBuilder(); StringBuilder ret3 = new StringBuilder(); IDictionary <Ivas, IList <DetallesComprobantes> > detallesPorIva = GetDetallesPorIva(comp); #region Campos 1 a 10 (comunes) //Campo 1: Tipo de registro ret1.Append("1"); //Campo 2: Fecha del comprobante ret1.Append(comp.Emision.ToString("yyyyMMdd")); //Campo 3: Tipo de Comprobante ret1.Append(comp.Tipo.Codigo.Substring(0, 2)); //Campo 4: Controlador Fiscal ret1.Append(" "); //Campo 5: Punto de Venta ret1.Append(comp.NroCbante.Substring(0, 4)); //Campo 6: Número de Comprobante ret1.Append(comp.NroCbante.Substring(5, 8).PadLeft(20, '0')); //Campo 7: Número de Comprobante Registrado ret1.Append(comp.NroCbante.Substring(5, 8).PadLeft(20, '0')); //Campo 8: Código de documento identificatorio del comprador ret1.Append(GeneralSettings.Instance.CodigoCUIT.Substring(0, 2)); //Campo 9: Número de identificación del comprador ret1.Append(comp.CUITCliente.Replace("-", "").PadRight(11, ' ')); //Campo 10: Apellido y nombres o denominación del comprador ret1.Append((comp.NombreCliente.Length < 30) ? comp.NombreCliente.PadRight(30, ' ') : comp.NombreCliente.Substring(0, 30)); #endregion #region Campos 22 a 30 (comunes) //Campo 22: Tipo de responsable ret3.Append(comp.TipoCliente.Codigo.Substring(0, 2)); //Campo 23: Códigos de Moneda ret3.Append(GeneralSettings.Instance.CodigoMoneda.Substring(0, 3)); //Campo 24: Tipo de Cambio ret3.Append("0001000000"); //Campo 25: Cantidad de alícuotas de IVA ret3.Append("1"); //Campo 26: Código de operación ret3.Append(" "); //Campo 27: CAI ret3.Append(comp.Empresa.CAI.ToString().PadRight(14, ' ')); //Campo 28: Fecha de vencimiento ret3.Append(comp.Empresa.FechaVtoCAI.ToString("yyyyMMdd")); //Campo 29: Fecha anulación del comprobante if (comp.Estado != Comprobantes.EstadoAnulado) { ret3.Append("00000000"); } else { ret3.Append(comp.Anulacion.Value.ToString("yyyyMMdd")); } //Campo 30: Información adicional ret3.Append(String.Empty.PadRight(75, ' ')); #endregion #region Campos 11 a 21 (por alicuota de iva) foreach (KeyValuePair <Ivas, IList <DetallesComprobantes> > pair in detallesPorIva) { Comprobantes comprobanteAuxiliar = new Comprobantes(); comprobanteAuxiliar.Items = pair.Value; comprobanteAuxiliar.Cliente = comp.Cliente; comprobanteAuxiliar.Empresa = comp.Empresa; comprobanteAuxiliar.CalcularTotales(comprobanteAuxiliar); total.CantidadRegistros++; total.ImporteTotal += comprobanteAuxiliar.Total; total.ImporteNeto += comprobanteAuxiliar.SubtotalNeto; total.ImporteImpuesto += (comprobanteAuxiliar.Iva1 + comprobanteAuxiliar.Iva2); //Campo 11: Importe total de la operación ret2.Append(comprobanteAuxiliar.Total.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 12: Importe total de conceptos que no integran el precio neto gravado ret2.Append("000000000000000"); //Campo 13: Importe Neto Gravado ret2.Append(comprobanteAuxiliar.SubtotalNeto.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 14: Alicuota de iva ret2.Append(pair.Key.Alicuota.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(4, '0')); //Campo 15: Impuesto liquidado //ret2.Append((comprobanteAuxiliar.Iva1 + comprobanteAuxiliar.Iva2).ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); ret2.Append((comprobanteAuxiliar.Iva1 + comprobanteAuxiliar.Iva2).ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 16: Impuesto liquidado a RNI o percepción a no categorizados //TODO: si el comprador es no inscripto o no categorizado (campo 23 = 02 o 07), esto es el 50% del campo 15 ret2.Append("000000000000000"); //Campo 17: Importe de operaciones exentas ret2.Append("000000000000000"); //Campo 18: Importe de percepciones o pagos a cuenta sobre impuestos nacionales ret2.Append("000000000000000"); //Campo 19: Importe de percepción de ingresos brutos ret2.Append(comprobanteAuxiliar.Percepciones.ToString("#0.#0").Replace(".", "").Replace(",", "").PadLeft(15, '0')); //Campo 20: Importe de percepciones por impuestos municipales ret2.Append("000000000000000"); //Campo 21: Importe de impuestos internos ret2.Append("000000000000000"); } #endregion //Registro return(ret1.Append(ret2).Append(ret3).Append("\r\n").ToString()); }