private ConsultasWeb.Pago[] ObtenerPagos(SMPorresEntities db, int idAlumno, int idCurso, int díasVtoPagoTermino) { _log.Debug("Obteniendo pagos"); var cuotasActuales = CuotasRepository.ObtenerCuotasActuales(); var query = (from pp in db.PlanesPago join p in db.Pagos on pp.Id equals p.IdPlanPago //join c in cuotasActuales on p.NroCuota equals c.NroCuota into pc //from c in pc.DefaultIfEmpty() join ca in db.CursosAlumnos on new { pp.IdAlumno, pp.IdCurso } equals new { ca.IdAlumno, ca.IdCurso } into ca2 where pp.IdAlumno == idAlumno && pp.IdCurso == idCurso //&& p.Fecha != null select new { p.Id, p.IdPlanPago, p.NroCuota, //Cuota = c, CursoAlumno = ca2.FirstOrDefault(), p.FechaVto, p.Fecha, p.ImporteCuota, p.ImporteBeca, p.ImporteRecargo, p.ImportePagado, pp.TipoBeca }) .ToList() .Select( p => new ConsultasWeb.Pago { Id = p.Id, IdPlanPago = p.IdPlanPago, NroCuota = p.NroCuota, //FechaVto = (p.Cuota == null) ? new DateTime(p.CursoAlumno.CicloLectivo, 12, 31) : p.Cuota.VtoCuota, FechaVto = p.FechaVto ?? default(DateTime), Fecha = p.Fecha ?? default(DateTime), ImporteCuota = p.ImporteCuota, ImporteBeca = p.ImporteBeca ?? 0, ImporteRecargo = p.ImporteRecargo ?? 0, ImportePagado = p.ImportePagado ?? 0, TipoBeca = p.TipoBeca }) .ToArray(); foreach (var p in query) { if (p.Fecha == default(DateTime)) { var pago = new PagosRepository(db).ObtenerDetallePago(p.Id, p.FechaVto.AddDays(-díasVtoPagoTermino)); p.ImportePagoTérmino = pago.ImportePagoTermino; p.PorcentajeBeca = (short)Math.Round(pago.PorcBeca ?? 0 * 100); p.ImporteBeca = pago.ImporteBeca; } p.FechaVtoPagoTérmino = p.FechaVto.AddDays(-díasVtoPagoTermino); } return(query); }
public static PlanPago Insertar(SMPorresEntities db, int idAlumno, int idCurso) { _log.Debug("Creando plan de pago"); if (idAlumno == 0) { throw new Exception("No se pudo determinar el alumno."); } if (idCurso == 0) { throw new Exception("No se pudo determinar el curso."); } if (db.PlanesPago.Any(pp => pp.IdAlumno == idAlumno && pp.IdCurso == idCurso & pp.Estado == (short)EstadoPlanPago.Vigente)) { throw new Exception("El alumno ya tiene un plan de pago vigente en este curso."); } var curso = CursosRepository.ObtenerCursoPorId(idCurso); if (curso == null) { throw new Exception("No se encontró el curso " + idCurso); } var id = db.PlanesPago.Any() ? db.PlanesPago.Max(c1 => c1.Id) + 1 : 1; //var trx = db.Database.BeginTransaction(); var plan = new PlanPago { Id = id, IdAlumno = idAlumno, IdCurso = idCurso, CantidadCuotas = CursosRepository.ObtieneMaxCuota(curso.Modalidad), //Configuration.MaxCuotas, NroCuota = CursosRepository.ObtieneMinCuota(curso.Modalidad), //1, ImporteCuota = curso.ImporteCuota, PorcentajeBeca = 0, TipoBeca = (byte)TipoBeca.AplicaHastaVto, Estado = (short)EstadoPlanPago.Vigente, IdUsuarioEstado = Session.CurrentUser.Id, FechaGrabacion = Configuration.CurrentDate, IdUsuario = Session.CurrentUser.Id, Modalidad = curso.Modalidad }; _log.Debug("Generando pagos"); try { db.PlanesPago.Add(plan); db.SaveChanges(); PagosRepository.InsertarMatricula(db, curso, id); PagosRepository.InsertarPagosCuotas(db, curso, id); } catch (Exception ex) { _log.Error(ex.Message, ex); //trx.Rollback(); throw; } return(plan); }