private IEnumerable <Cuota> CalcularCuotas(DateTime fechaCupon, double importe, int cantidadCuotas, Tarjeta tarjeta)
        {
            var fechaCierreTarjeta = TarjetaFechaCierreRepository.GetFechaDeCierrePorMesYAnio(tarjeta, fechaCupon.Month, fechaCupon.Year);

            if (fechaCierreTarjeta == null)
            {
                var posicionCierreTarjeta = tarjeta.TarjetaOpcionCierre.FirstOrDefault().Posicion;
                var diaCierreTarjeta      = tarjeta.TarjetaOpcionCierre.FirstOrDefault().DiaDeSemana;

                var fechaCierre = TraerFechaCorte(fechaCupon, posicionCierreTarjeta.CastEnumByName <PosicionCierre>(),
                                                  diaCierreTarjeta.CastEnumByName <DiaCierre>());
                // le asigno la fecha calculada
                fechaCierreTarjeta = new TarjetaFechaCierre
                {
                    Tarjeta     = tarjeta,
                    FechaCierre = fechaCierre
                };
                tarjeta.TarjetaFechaCierre.Add(fechaCierreTarjeta);
            }

            var cuotas = DistribuirCuotas(fechaCupon, importe, cantidadCuotas, fechaCierreTarjeta.FechaCierre);

            return(cuotas);
        }
        public void GrabarFechaDeCierre(int tarjetaId, int anio, int mes, DateTime fechaCierre)
        {
            var fecha = TraerFechaDeCierre(tarjetaId, anio, mes);

            if (fecha != null)
            {
                throw new Exception("Fecha de cierre existente");
            }
            var tarjeta = TarjetaRepository.GetById(tarjetaId);

            if (tarjeta == null)
            {
                throw new Exception("Tarjeta inexistente");
            }
            var tarjetaFechaCierre = new TarjetaFechaCierre
            {
                Tarjeta     = tarjeta,
                Anio        = anio,
                Mes         = mes,
                FechaCierre = fechaCierre
            };

            TarjetaFechaCierreRepository.Add(tarjetaFechaCierre);
        }