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);
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }