List <Materia>[] DividirListaMaterias(List <Materia> materias, int idAlumno)
        {
            var materiasDisponibles   = new List <Materia>();
            var materiasNoDisponibles = new List <Materia>();
            var vectorListas          = new List <Materia> [2];

            foreach (var materia in materias)
            {
                var horariosValidos = HorariosDisponibles(materia.Horarios, idAlumno);

                if (InscripcionRepository.ValidarMateriaAprobada(materia.Id, idAlumno) ||
                    (!InscripcionRepository.ValidarCorrelativas(materia.Id, idAlumno)) ||
                    (InscripcionRepository.ValidarMateriaEnCurso(materia.Id, idAlumno)) ||
                    (horariosValidos.Count == 0))
                {
                    materiasNoDisponibles.Add(materia);
                }
                else
                {
                    materiasDisponibles.Add(materia);
                    materiasDisponibles.Last().Horarios = new List <Horario>(horariosValidos);
                }
            }

            vectorListas[Constantes.MateriasDisponibles]   = materiasDisponibles;
            vectorListas[Constantes.MateriasNoDisponibles] = materiasNoDisponibles;

            return(vectorListas);
        }
        public ActionResult Confirmar(Inscripcion inscripcion)
        {
            string idinstitucion = HttpContext.Session["institucion"].ToString();

            List <Inscripcion> lista        = (List <Inscripcion>)Session["inscripciones"];
            Inscripcion        inscripcion1 = lista.Where(x => x.ID == Convert.ToInt64(inscripcion.ID)).SingleOrDefault();

            inscripcion1.listaPagares = InscripcionRepository.getPagares(inscripcion.ID.ToString());

            if (inscripcion1.Estado == "ACTIVO")
            {
                string mensaje = InscripcionRepository.validarPagares(inscripcion.ID.ToString());
                if (mensaje == "OK")
                {
                    InscripcionRepository.confirmarInscripcion(inscripcion.ID.ToString());
                    ViewBag.mensaje = "La inscripcion se confirmo exitosamente.";
                }
                else
                {
                    ViewBag.error = "Ha ocurrido un error inesperado, favor intente nuevamente mas tarde.";
                }
            }
            else
            {
                ViewBag.error = "Ha ocurrido un error inesperado, favor intente nuevamente mas tarde.";
            }

            CargarDatosListas(inscripcion1);

            return(View(inscripcion1.ID));
        }
        public JsonResult ConfirmarPago(List <string> IDs)
        {
            Factura factura = new Factura();

            factura.FacturaDetalle = new List <FacturaDetalle>();

            try
            {
                foreach (string id in IDs)
                {
                    PagareViewModel pagare = InscripcionRepository.getPagareById(id);
                    factura.FacturaDetalle.Add(new FacturaDetalle
                    {
                        PagareID     = Convert.ToInt64(id),
                        Descripcion  = pagare.Descripcion,
                        Monto        = pagare.Monto,
                        MontoDecimal = pagare.MontoDecimal
                    });
                }

                factura.MontoTotalDecimal = factura.FacturaDetalle.Sum(x => x.MontoDecimal);
                factura.MontoTotal        = factura.MontoTotalDecimal.ToString("#,###").Replace(",", ".");

                Session["FacturaConfirmar"] = factura;
            }
            catch (Exception ex)
            {
                return(Json("ERROR"));
            }

            return(Json("OK"));
        }
        public ActionResult Crear(Inscripcion inscripcion)
        {
            inscripcion.InstitucionID = Convert.ToInt64(Session["institucion"].ToString());
            inscripcion.Estado        = "A";
            inscripcion.listaPagares  = new List <PagareViewModel>();

            var mensaje = InscripcionRepository.createInscripcion(inscripcion);

            if (mensaje == "OK")
            {
                ViewBag.mensaje        = "La carga se realizó exitosamente.";
                Session["inscripcion"] = null;
                CargarDatosListas(new Inscripcion());

                /*aquí recuperamos de nuevo las inscripciones actualizadas y cargamos ya los pagares */
                List <Inscripcion> inscripciones = InscripcionRepository.getInscripciones(Session["institucion"].ToString());
                Session["inscripciones"] = inscripciones;
                Inscripcion inscripcioncargada = inscripciones.Where(x => x.AlumnoID == inscripcion.AlumnoID &&
                                                                     x.ArancelID == inscripcion.ArancelID && x.CursoID == inscripcion.CursoID).FirstOrDefault();
                InscripcionRepository.createPagares(inscripcioncargada);
                return(RedirectToAction("VerDetalle", "Inscripcion", new { id = inscripcioncargada.ID.ToString() }));
            }
            else
            {
                ViewBag.error = mensaje;
                return(View());
            }
        }
        public ActionResult Abonar()
        {
            string             idinstitucion = HttpContext.Session["institucion"].ToString();
            List <Inscripcion> inscripciones = InscripcionRepository.getInscripciones(idinstitucion).Where(x => x.Estado == "CONFIRMADO").ToList();

            ViewBag.Inscripciones    = inscripciones;
            Session["inscripciones"] = inscripciones;
            return(View());
        }
        List <Materia>[] Distinguir()
        {
            var materias     = new List <Materia>(InscripcionRepository.ObtenerMaterias());
            var vectorListas = new List <Materia> [2];

            vectorListas = DividirListaMaterias(materias, alumnoId);

            return(vectorListas);
        }
        public ActionResult Index()
        {
            string             idinstitucion = HttpContext.Session["institucion"].ToString();
            List <Inscripcion> inscripciones = InscripcionRepository.getInscripciones(idinstitucion);

            ViewBag.Inscripciones    = inscripciones;
            ViewBag.error            = (Session["errorInscripcion"] ?? string.Empty).ToString();
            Session["inscripciones"] = inscripciones;
            return(View());
        }
        public JsonResult Anular(string id, string motivo)
        {
            string             idinstitucion = HttpContext.Session["institucion"].ToString();
            List <Inscripcion> lista         = (List <Inscripcion>)Session["inscripciones"];
            Inscripcion        inscripcion   = lista.Where(x => x.ID == Convert.ToInt64(id)).SingleOrDefault();

            inscripcion.MotivoAnulacion = motivo;
            string mensaje = InscripcionRepository.AnularInscripcion(inscripcion);

            return(Json(mensaje));
        }
 void AgregarMateria(MateriaAlumno materia, int idAlumno)
 {
     if (ValidarMateria(materia.Id, materia.Dia, materia.Turno, idAlumno))
     {
         InscripcionRepository.AgregarMateria(idAlumno, materia.Id, materia.Dia, materia.Turno);
     }
     else
     {
         throw new Exception("Error al agregar la materia");
     }
 }
        public ActionResult Anular(string id)
        {
            string             idinstitucion = HttpContext.Session["institucion"].ToString();
            List <Inscripcion> lista         = (List <Inscripcion>)Session["inscripciones"];
            Inscripcion        inscripcion   = lista.Where(x => x.ID == Convert.ToInt64(id)).SingleOrDefault();

            inscripcion.listaPagares = InscripcionRepository.getPagares(inscripcion.ID.ToString());

            CargarDatosListas(inscripcion);

            return(View(inscripcion));
        }
        public JsonResult GuardarFecha(string fecha, string id)
        {
            DateTime fechaelegida = DateTime.ParseExact(fecha, "dd/MM/yyyy", null);

            if (fechaelegida.Date < DateTime.Now.Date)
            {
                return(Json("La fecha debe ser mayor o igual a la actual."));
            }

            InscripcionRepository.updatePagares(id, fecha);

            return(Json("OK"));
        }
        public ActionResult ReportePDFExtractos(string idCurso, string fechaHasta)
        {
            List <ExtractoPago> lista = InscripcionRepository.getExtractoPagos(idCurso, fechaHasta);

            lista = lista.OrderBy(x => x.Nombres).ToList();
            ExtractoReport rpt = new ExtractoReport();

            rpt.Load();
            rpt.SetDataSource(lista);
            Stream s = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);


            return(File(s, "application/pdf"));
        }
        public ActionResult ReportePDF(string idAlumno)
        {
            List <SituacionFinanciera> lista = InscripcionRepository.getSitaucionFinanciera(idAlumno);

            lista = lista.OrderBy(x => x.PagareID).ToList();
            SituacionFinancieraReport rpt = new SituacionFinancieraReport();

            rpt.Load();
            rpt.SetDataSource(lista);
            Stream s = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);


            return(File(s, "application/pdf"));
        }
        public ActionResult Eliminar(Inscripcion inscripcion)
        {
            var mensaje = InscripcionRepository.deleteInscripcion(inscripcion.ID);

            if (mensaje == "OK")
            {
                ViewBag.mensaje = "La inscripcion se elimino exitosamente.";
            }
            else
            {
                ViewBag.error = mensaje;
            }

            return(RedirectToAction("Index"));
        }
        public static string ValidarHorarioLibreDDBB(int idAlumno, Dias dia, Turnos turno)
        {
            var materia = "";

            try
            {
                materia = InscripcionRepository.ValidarHorarioLibre(idAlumno, dia, turno);
            }
            catch (Exception e)
            {
                var metodo = MethodBase.GetCurrentMethod().Name;
                logger.LogError(e.Message + "Metodo: {0}, Id: {1}", metodo, idAlumno);
            }

            return(materia);
        }
        public ActionResult Editar(Inscripcion inscripcion)
        {
            var mensaje = InscripcionRepository.updateInscripcion(inscripcion);

            if (mensaje == "OK")
            {
                ViewBag.mensaje = "La edición se realizó exitosamente.";
                CargarDatosListas(inscripcion);
                inscripcion = InscripcionRepository.getInscripcion(inscripcion.ID.ToString());
            }
            else
            {
                ViewBag.error = mensaje;
            }

            return(View(inscripcion));
        }
        public ActionResult Confirmar(string id)
        {
            string             idinstitucion = HttpContext.Session["institucion"].ToString();
            List <Inscripcion> lista         = (List <Inscripcion>)Session["inscripciones"];
            Inscripcion        inscripcion   = lista.Where(x => x.ID == Convert.ToInt64(id)).SingleOrDefault();

            if (inscripcion.Estado == "CONFIRMADO" || inscripcion.Estado == "INACTIVO")
            {
                ViewBag.error = $"La inscripcion ya se encuentra en estado {inscripcion.Estado} y no puede ser modificada.";
                return(RedirectToAction("Index"));
            }

            inscripcion.listaPagares = InscripcionRepository.getPagares(inscripcion.ID.ToString());

            CargarDatosListas(inscripcion);

            return(View(inscripcion));
        }
        public ActionResult CargarFactura()
        {
            Factura factura = new Factura();

            try
            {
                factura = (Factura)Session["FacturaConfirmar"];

                string idinstitucion = HttpContext.Session["institucion"].ToString();
                ViewBag.tiposPago = InscripcionRepository.getTiposPagoSelect2(idinstitucion, "0");
                ViewBag.tiposDcto = InscripcionRepository.getTiposDctoSelect2(idinstitucion, "0");
            }
            catch (Exception ex)
            {
                return(RedirectToAction("Abonar"));
            }

            return(View(factura));
        }
        public JsonResult PoblarGrillaExtractoPagos(DataTableAjaxPostModel model)
        {
            List <ExtractoPago> lista = new List <ExtractoPago>();

            try
            {
                lista = InscripcionRepository.getExtractoPagos(model.param1, model.param2);
            }
            catch { }


            return(Json(new
            {
                // this is what datatables wants sending back
                draw = model.draw,
                recordsTotal = lista.Count,
                recordsFiltered = lista.Count,
                data = lista
            }));
        }
        public ActionResult CargarFactura(Factura facturaModel)
        {
            Factura factura = new Factura();

            try
            {
                factura = (Factura)Session["FacturaConfirmar"];

                factura.TipoDctoID       = facturaModel.TipoDctoID;
                factura.TipoPagoID       = facturaModel.TipoPagoID;
                factura.RazonSocial      = facturaModel.RazonSocial;
                factura.NroDocumento     = facturaModel.NroDocumento;
                factura.FechaPagoFactura = DateTime.Now.ToShortDateString();
                factura.NroFactura       = facturaModel.NroFactura;

                string mensaje = InscripcionRepository.cargarFactura(factura);

                if (mensaje == "OK")
                {
                    ViewBag.mensaje = "La factura se cargó exitosamente.";
                }
                else
                {
                    ViewBag.error = "Ha ocurrido un error inesperado, favor intente nuevamente mas tarde.";
                }
            }
            catch (Exception ex)
            {
                ViewBag.error = "Ha ocurrido un error inesperado, favor intente nuevamente mas tarde.";
            }

            string idinstitucion = HttpContext.Session["institucion"].ToString();

            ViewBag.tiposPago = InscripcionRepository.getTiposPagoSelect2(idinstitucion, factura.TipoPagoID.ToString());
            ViewBag.tiposDcto = InscripcionRepository.getTiposDctoSelect2(idinstitucion, factura.TipoDctoID.ToString());
            return(View(factura));
        }
        List <Horario> HorariosDisponibles(List <Horario> horarios, int idAlumno)
        {
            var horariosValidos = new List <Horario>(horarios);

            for (int i = 0; i < horariosValidos.Count; i++)
            {
                for (int j = 0; j < horariosValidos[i].Turnos.Count; j++)
                {
                    if (!(InscripcionRepository.ValidarHorarioLibre(idAlumno, horariosValidos[i].Dia, horariosValidos[i].Turnos[j]) == Constantes.Default))
                    {
                        horariosValidos[i].Turnos.Remove(horariosValidos[i].Turnos[j]);
                        j--;
                    }
                }

                if (horariosValidos[i].Turnos.Count == 0)
                {
                    horariosValidos.Remove(horariosValidos[i]);
                    i--;
                }
            }

            return(horariosValidos);
        }
        bool ValidarMateria(int idMateria, Dias dia, Turnos turno, int idAlumno)
        {
            if (!InscripcionRepository.ValidarCorrelativas(idMateria, idAlumno))
            {
                return(false);
            }

            if (InscripcionRepository.ValidarMateriaAprobada(idMateria, idAlumno))
            {
                return(false);
            }

            if (InscripcionRepository.ValidarMateriaEnCurso(idMateria, idAlumno))
            {
                return(false);
            }

            if (!InscripcionRepository.ValidarHorarioLibre(idAlumno, dia, turno).Equals(Constantes.Default))
            {
                return(false);
            }

            return(true);
        }