public static void Insertar(string nombre, string apellido, int idTipoDocumento, decimal nroDocumento, DateTime fechaNacimiento, string email, string dirección, char sexo, int idCarrera) { using (var db = new SMPorresEntities()) { ValidarDatos(db, nombre, apellido, idTipoDocumento, nroDocumento, fechaNacimiento, email, dirección, sexo, idCarrera); var idCurso = CursosRepository.ObtenerCursoInicial(idCarrera); Alumno a; var trx = db.Database.BeginTransaction(); try { a = GrabarAlumno(db, nombre, apellido, idTipoDocumento, nroDocumento, fechaNacimiento, email, dirección, sexo); CursosAlumnosRepository.Insertar(db, idCurso, a.Id); PlanesPagoRepository.Insertar(db, a.Id, idCurso); trx.Commit(); _log.Info($"Se ha insertado el alumno {a.Id}."); } catch (Exception ex) { trx.Rollback(); throw new Exception("Error al grabar la inscripción.", ex); } try { SubirAWeb(db, a.Id); _log.Info("Se han subido los datos del alumno a la web."); } catch (Exception ex) { throw new Exception("Error al subir los datos a la web.", ex); } } }
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); }
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); }