public List<vmCarteraxSaldos> GetSaldos(string ide_est, int r_vigencia)
        {
            List<vmCarteraxSaldos> lst = new List<vmCarteraxSaldos>();
            DateTime FechaCausacion = mCausacion.FechaCausacion();
            List<periodosDto> lPeriodos = new List<periodosDto>();
            int VigPerAct = int.Parse(FechaCausacion.Year.ToString() + FechaCausacion.Month.ToString().PadLeft(2, '0'));

            mPeriodos oPeriodos = new mPeriodos();
            lPeriodos = oPeriodos.Gets(r_vigencia);

            using (db = new ieEntities())
            {
                List<carterap> lCarteras = db.carterap.Where(t => t.id_estudiante == ide_est && (t.estado == "PR" || t.estado == "CA") && (t.vigencia * 100 + t.periodo) <= VigPerAct && t.vigencia == r_vigencia).ToList();
                foreach (periodosDto periodo in lPeriodos)
                {
                    int ValorCausado = 0;
                    int ValorPagado = 0;

                    mVigencias objVigencias = new mVigencias();
                    vigenciasDto vigencia = objVigencias.Get(r_vigencia);

                    ValorCausado = CalcularValorCausadoPeriodo(FechaCausacion, lCarteras, vigencia, ValorCausado, (int) periodo.periodo, db);

                    List<detalles_pago> lDetallesPago = db.detalles_pago.Where(t => t.vigencia == vigencia.vigencia && t.periodo == periodo.periodo && t.pagos.estado == "PA" && t.pagos.id_estudiante == ide_est).ToList();
                    lDetallesPago.ForEach(t => ValorPagado += (int)t.valor);

                    List<detalles_nota_credito> lDetallesNotas = db.detalles_nota_credito.Where(t => t.vigencia == vigencia.vigencia && t.periodo == periodo.periodo && t.notas_credito.estado == "PA" && t.notas_credito.id_estudiante == ide_est).ToList();
                    lDetallesNotas.ForEach(t => ValorPagado += (int)t.valor);

                    if ((ValorCausado > 0) || (ValorPagado > 0))
                    {
                        vmCarteraxSaldos objRes = new vmCarteraxSaldos();
                        objRes.Item = (int) periodo.periodo;
                        objRes.Pagado = ValorPagado;
                        objRes.Valor = ValorCausado;

                        lst.Add(objRes);
                    }
                }
                return lst;
            }
        }
 public List<ByARpt> Post(List<vigenciasDto> lReg)
 {
     mVigencias o = new mVigencias();
     return o.InsertOrUpdate(lReg);
 }
 public List<vigenciasDto> GetsAll()
 {
     mVigencias o = new mVigencias();
     return o.Gets();
 }
 private static List<vigenciasDto> GetsVigencias(List<vigenciasDto> lVigencias)
 {
     mVigencias oVigencias = new mVigencias();
     lVigencias = oVigencias.GetsActivas();
     return lVigencias;
 }
        public List<vmCarteraxSaldosxConceptos> GetSaldos(string ide_est, int r_vigencia, int periodo)
        {
            List<vmCarteraxSaldosxConceptos> lst = new List<vmCarteraxSaldosxConceptos>();
            DateTime FechaCausacion = mCausacion.FechaCausacion();
            List<periodosDto> lPeriodos = new List<periodosDto>();
            int VigPerAct = int.Parse(FechaCausacion.Year.ToString() + FechaCausacion.Month.ToString().PadLeft(2, '0'));

            using (db = new ieEntities())
            {
                mVigencias objVigencias = new mVigencias();
                vigenciasDto vigencia = objVigencias.Get(r_vigencia);

                List<carterap> lCarteras = db.carterap.Where(t => t.id_estudiante == ide_est && (t.estado == "PR" || t.estado == "CA") && (t.vigencia * 100 + t.periodo) <= VigPerAct && t.vigencia == r_vigencia && t.periodo == periodo).ToList();
                foreach (carterap cartera in lCarteras)
                {
                    vmCarteraxSaldosxConceptos objValorC = new vmCarteraxSaldosxConceptos();
                    objValorC.Item = new conceptosDto();
                    objValorC.Item.id = cartera.id_concepto;
                    objValorC.Item.nombre = cartera.conceptos.nombre;
                    objValorC.Valor = cartera.valor;
                    objValorC.Pagado = cartera.pagado;
                    lst.Add(objValorC);

                    int ValorIntereses = 0;
                    int ValorPagadoIntereses = 0;
                    ValorIntereses = PreCalcularInteresesCartera(FechaCausacion, cartera, ValorIntereses);

                    List<detalles_pago> lDet = db.detalles_pago.Where(t => t.id_cartera == cartera.id && t.tipo == "IN" && t.pagos.estado == "PA").ToList();
                    lDet.ForEach(t => ValorPagadoIntereses += (int)t.valor);

                    List<detalles_nota_credito> lDetNota = db.detalles_nota_credito.Where(t => t.id_cartera == cartera.id && t.tipo == "IN" && t.notas_credito.estado == "PA").ToList();
                    lDetNota.ForEach(t => ValorPagadoIntereses += (int)t.valor);

                    vmCarteraxSaldosxConceptos objValorI = new vmCarteraxSaldosxConceptos();
                    objValorI.Item = new conceptosDto();
                    objValorI.Item.id = 6;
                    objValorI.Item.nombre = "Intereses: Pensión, Periodo: " + cartera.periodo;
                    objValorI.Valor = ValorIntereses;
                    objValorI.Pagado = ValorPagadoIntereses;
                    lst.Add(objValorI);
                }
                List<detalles_pago> lPagos = db.detalles_pago.Where(t => t.vigencia == vigencia.vigencia && t.periodo == periodo && t.pagos.estado == "PA" && t.pagos.id_estudiante == ide_est && (t.vigencia * 100 + t.periodo) > VigPerAct).ToList();
                foreach (detalles_pago item in lPagos)
                {
                    vmCarteraxSaldosxConceptos objValor = new vmCarteraxSaldosxConceptos();
                    objValor.Item = new conceptosDto();
                    objValor.Item.id = item.id_concepto;
                    objValor.Item.nombre = item.nombre_concepto;
                    objValor.Valor = 0;
                    objValor.Pagado = item.valor;
                    lst.Add(objValor);
                }

                List<detalles_nota_credito> lNotas = db.detalles_nota_credito.Where(t => t.vigencia == vigencia.vigencia && t.periodo == periodo && t.notas_credito.estado == "PA" && t.notas_credito.id_estudiante == ide_est && (t.vigencia * 100 + t.periodo) > VigPerAct).ToList();
                foreach (detalles_nota_credito item in lNotas)
                {
                    vmCarteraxSaldosxConceptos objValor = new vmCarteraxSaldosxConceptos();
                    objValor.Item = new conceptosDto();
                    objValor.Item.id = item.id_concepto;
                    objValor.Item.nombre = item.nombre_concepto;
                    objValor.Valor = 0;
                    objValor.Pagado = item.valor;
                    lst.Add(objValor);
                }
                return lst;
            }
        }
        public List<cEstadoCuenta> GetEstadoCuentaResumido(string id_estudiante)
        {
            List<cEstadoCuenta> lEstadoCuenta = new List<cEstadoCuenta>();
            DateTime FechaCausacion = mCausacion.FechaCausacion();
            int VigPerAct = int.Parse(FechaCausacion.Year.ToString() + FechaCausacion.Month.ToString().PadLeft(2, '0'));
            mVigencias objVigencias = new mVigencias();
            List<vigenciasDto> lVigencias = objVigencias.GetsActivas();

            using (ctx = new ieEntities())
            {
                foreach (vigenciasDto vigencia in lVigencias)
                {
                    cEstadoCuenta objEstCuenta = new cEstadoCuenta();
                    objEstCuenta.vigencia = vigencia.vigencia;
                    objEstCuenta.saldo_vigencia = 0;
                    objEstCuenta.intereses_vigencia = 0;
                    objEstCuenta.pagado_vigencia = 0;
                    objEstCuenta.saldo_vigencia = 0;
                    objEstCuenta.ban_agregar = false;
                    objEstCuenta.l_items = new List<itemPorVigencia>();

                    List<carterap> lCarteras = ctx.carterap.Where(t => t.id_estudiante == id_estudiante && (t.estado == "PR" || t.estado == "CA") && (t.vigencia * 100 + t.periodo) <= VigPerAct && t.vigencia == vigencia.vigencia).ToList();
                    foreach (carterap cartera in lCarteras)
                    {
                        itemPorVigencia item = new itemPorVigencia();
                        item.id_concepto = cartera.id_concepto;
                        item.nombre_concepto = cartera.conceptos.nombre;
                        item.periodo = cartera.periodo;
                        item.causado = (int) cartera.valor;

                        int ValorIntereses = 0;
                        int ValorPagadoIntereses = 0;
                        ValorIntereses = PreCalcularInteresesCartera(FechaCausacion, cartera, ValorIntereses);

                        List<detalles_pago> lDet = ctx.detalles_pago.Where(t => t.id_cartera == cartera.id && t.tipo == "IN" && t.pagos.estado == "PA").ToList();
                        lDet.ForEach(t => ValorPagadoIntereses += (int)t.valor);

                        List<detalles_nota_credito> lDetNO = ctx.detalles_nota_credito.Where(t => t.id_cartera == cartera.id && t.tipo == "IN" && t.notas_credito.estado == "PA").ToList();
                        lDetNO.ForEach(t => ValorPagadoIntereses += (int)t.valor);

                        item.intereses = ValorIntereses;
                        item.pagado = (int) cartera.pagado + ValorPagadoIntereses;
                        item.saldo = item.causado + item.intereses - item.pagado;

                        detalles_pago detalle = ctx.detalles_pago.Where(t => t.pagos.estado == "PA" && t.id_cartera == cartera.id).OrderByDescending(t => t.pagos.fecha_pago).FirstOrDefault();
                        if(detalle != null){
                            if(detalle.pagos.fecha_pago != null) item.fecha_pago = detalle.pagos.fecha_pago;
                            else item.fecha_pago = null;
                        } else item.fecha_pago = null;

                        objEstCuenta.causado_vigencia += item.causado;
                        objEstCuenta.intereses_vigencia += item.intereses;
                        objEstCuenta.pagado_vigencia += item.pagado;
                        objEstCuenta.saldo_vigencia += item.saldo;

                        objEstCuenta.l_items.Add(item);
                    }
                    List<carterap> lCarterasNoCausadas = ctx.carterap.Where(t => t.id_estudiante == id_estudiante && (t.estado == "PR" || t.estado == "CA") && (t.vigencia * 100 + t.periodo) > VigPerAct && t.vigencia == vigencia.vigencia).ToList();
                    if (lCarteras.Count() > 0) objEstCuenta.ban_agregar = true;
                    foreach (carterap itemC in lCarterasNoCausadas)
                    {
                        itemPorVigencia item = new itemPorVigencia();
                        item.id_concepto = itemC.id_concepto;
                        item.nombre_concepto = itemC.conceptos.nombre;
                        item.periodo = itemC.periodo;
                        item.causado = 0;
                        item.intereses = 0;
                        item.pagado = 0;
                        List<detalles_pago> lDet = ctx.detalles_pago.Where(t => t.id_cartera == itemC.id && t.pagos.estado == "PA").ToList();
                        lDet.ForEach(t => item.pagado += (int) t.valor);
                        item.saldo = item.causado + item.intereses - item.pagado;

                        detalles_pago detalle = ctx.detalles_pago.Where(t => t.pagos.estado == "PA" && t.id_cartera == itemC.id).OrderByDescending(t => t.pagos.fecha_pago).FirstOrDefault();
                        if(detalle != null){
                            if(detalle.pagos.fecha_pago != null) item.fecha_pago = detalle.pagos.fecha_pago;
                            else item.fecha_pago = null;
                        } else item.fecha_pago = null;

                        objEstCuenta.causado_vigencia += item.causado;
                        objEstCuenta.intereses_vigencia += item.intereses;
                        objEstCuenta.pagado_vigencia += item.pagado;
                        objEstCuenta.saldo_vigencia += item.saldo;

                        objEstCuenta.l_items.Add(item);
                    }
                    objEstCuenta.l_items = objEstCuenta.l_items.OrderBy(t => t.periodo).ToList();
                    if(objEstCuenta.l_items.Count() > 0) lEstadoCuenta.Add(objEstCuenta);
                }
            }

            int MaxVig = lEstadoCuenta.Max(t => t.vigencia);

            return lEstadoCuenta.Where(t=> t.saldo_vigencia != 0 || t.vigencia == MaxVig || t.ban_agregar).OrderBy(t => t.vigencia).ToList();
        }