public static void InsertarPagosCuotas(SMPorresEntities db, Curso curso, int id) { short minC = CursosRepository.ObtieneMinCuota(curso.Modalidad); short maxC = CursosRepository.ObtieneMaxCuota(curso.Modalidad); var cuotas = from c in CuotasRepository.ObtenerCuotasActuales() select new { c.NroCuota, c.VtoCuota }; if (minC != maxC) { //for (short i = 0; i <= Configuration.MaxCuotas; i++) for (short i = minC; i <= maxC; i++) { var p = new Pago(); p.Id = db.Pagos.Any() ? db.Pagos.Max(p1 => p1.Id) + 1 : 1; p.IdPlanPago = id; p.NroCuota = i; p.ImporteCuota = (i == 0) ? curso.ImporteMatricula : curso.ImporteCuota; p.Estado = (byte)EstadoPago.Impago; p.FechaVto = cuotas.First(c => c.NroCuota == i).VtoCuota; db.Pagos.Add(p); db.SaveChanges(); } } }
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 Pago ObtenerDetallePago(int idPago, DateTime fechaCompromiso) { Pago pago = ObtenerPago(idPago); if (pago == null) { return(null); } var impBase = pago.ImporteCuota; var cc = ConfiguracionRepository.ObtenerConfiguracion().CicloLectivo; pago.PorcBeca = 0; pago.ImporteBeca = 0; pago.PorcDescPagoTermino = 0; pago.ImportePagoTermino = 0; pago.PorcRecargo = 0; pago.ImporteRecargo = 0; pago.ImportePagado = pago.ImporteCuota; if (pago.NroCuota == 0) { pago.FechaVto = new DateTime(cc, 12, 31); var curso = CursosRepository.ObtenerCursoPorId(pago.PlanPago.Curso.Id); if (fechaCompromiso <= curso.FechaVencDescuento) { decimal descuentoMatrícula = Convert.ToDecimal(curso.DescuentoMatricula); pago.ImportePagoTermino = descuentoMatrícula; pago.ImportePagado = impBase - descuentoMatrícula; } return(pago); } var descBeca = (decimal)0; if (pago.BecaAlumno == null) { descBeca = (decimal)pago.PlanPago.PorcentajeBeca; } else { descBeca = (decimal)pago.BecaAlumno.PorcentajeBeca; } decimal beca = 0; if (descBeca > 0) { beca = Math.Round(impBase * (descBeca / 100)); } var cuota = CuotasRepository.ObtenerCuotas().Where(c => c.NroCuota == pago.NroCuota).FirstOrDefault(); if (cuota == null) { return(null); } pago.FechaVto = cuota.VtoCuota; var totalAPagar = (decimal)0; var impBecado = impBase - beca; var conf = ConfiguracionRepository.ObtenerConfiguracion(); if (fechaCompromiso <= pago.FechaVto) { var dpt = (decimal)(conf.DescuentoPagoTermino / 100); var descPagoTérmino = Math.Round(impBecado * dpt, 2); if (fechaCompromiso > pago.FechaVto.Value.AddDays(-conf.DiasVtoPagoTermino ?? 0)) { dpt = 0; descPagoTérmino = 0; } totalAPagar = impBase - beca - descPagoTérmino; pago.PorcDescPagoTermino = (double)Math.Truncate(dpt * 100); pago.ImportePagoTermino = descPagoTérmino; } else { var porcRecargo = (conf.InteresPorMora / 100) / 30.0; var díasAtraso = Math.Truncate((fechaCompromiso - pago.FechaVto.Value).TotalDays); var porcRecargoTotal = (decimal)(porcRecargo * díasAtraso); //impBecado = impBase; //var recargoPorMora = Math.Round(impBecado * porcRecargoTotal, 2); //totalAPagar = impBase - beca + recargoPorMora; decimal recargoPorMora = 0; if (pago.PlanPago.TipoBeca == (byte)TipoBeca.AplicaSiempre) { recargoPorMora = Math.Round(impBecado * porcRecargoTotal, 2); } else { recargoPorMora = Math.Round(pago.ImporteCuota * porcRecargoTotal, 2); beca = 0; } totalAPagar = impBase - beca + recargoPorMora; pago.PorcRecargo = porcRecargo; pago.ImporteRecargo = recargoPorMora; } pago.PorcBeca = (double)descBeca; pago.ImporteBeca = beca; pago.IdBecaAlumno = null; pago.ImportePagado = totalAPagar; return(pago); }