예제 #1
0
        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());
        }
예제 #2
0
        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());
        }