public decimal getGanancia()
        {
            decimal gananciaTotal = 0;

            SMART_PAYMENT_DBEntities db = new SMART_PAYMENT_DBEntities();

            chofer = db.CHOFERs.FirstOrDefault(x => x.CHO_CORREO_ELECTRONICO == System.Web.HttpContext.Current.User.Identity.Name);

            List <PaymentsTableViewModel> lstPayment;

            lstPayment = (from d in db.PAGOes
                          select new PaymentsTableViewModel
            {
                Id = d.PAG_ID,
                Id_Client = d.PAG_IDENTIFICACION_CLIENTE,
                Id_Driver = d.PAG_IDENTIFICACION_CHOFER,
                Id_Route = d.PAG_CODIGO_CTP_RUTA,
                DateOfPayment = d.PAG_FECHA,
                State = d.RECHAZADO
            }).ToList();

            List <RoutesTableViewModel> lstRoutes;

            lstRoutes = (from d in db.RUTAs
                         select new RoutesTableViewModel
            {
                Code = d.RUT_CODIGO_CTP,
                Provincia = d.RUT_PROVINCIA,
                Canton = d.RUT_CANTON,
                Nombre = d.RUT_NOMBRE,
                Costo = d.RUT_COSTO,
                State = d.RUT_ESTADO
            }).ToList();

            System.DateTime today = new System.DateTime(System.DateTime.Today.Ticks);
            string          td    = today.ToShortDateString();

            foreach (var payment in lstPayment)
            {
                System.DateTime recordDate = payment.DateOfPayment;
                string          rd         = recordDate.ToShortDateString();

                if (chofer.CHO_IDENTIFICACION.Equals(payment.Id_Driver) && !payment.State && td.Equals(rd))
                {
                    foreach (var route in lstRoutes)
                    {
                        if (payment.Id_Route == route.Code)
                        {
                            gananciaTotal += route.Costo;
                            break;
                        }
                    }
                }
            }

            return(gananciaTotal);
        }
        public ActionResult MakePayment(string cedula, string ruta)
        {
            if (string.IsNullOrEmpty(cedula) || string.IsNullOrEmpty(ruta))
            {
                return(RedirectToAction("Index", new { message = "Campos en blanco", email = currentEmail, cedula = cedula, ruta = ruta }));
            }

            int rutaId = Int32.Parse(ruta);
            SMART_PAYMENT_DBEntities db = new SMART_PAYMENT_DBEntities();

            var client = db.CLIENTEs.FirstOrDefault(x => x.CLI_IDENTIFICACION == cedula);
            var route  = db.RUTAs.FirstOrDefault(x => x.RUT_CODIGO_CTP == rutaId);

            chofer = db.CHOFERs.FirstOrDefault(x => x.CHO_CORREO_ELECTRONICO == System.Web.HttpContext.Current.User.Identity.Name);


            decimal  total = client.CLI_MONEDERO - route.RUT_COSTO;
            DateTime today = System.DateTime.Now;

            var pago = new PAGO();

            pago.PAG_IDENTIFICACION_CLIENTE = client.CLI_IDENTIFICACION;
            pago.PAG_IDENTIFICACION_CHOFER  = chofer.CHO_IDENTIFICACION;
            pago.PAG_CODIGO_CTP_RUTA        = route.RUT_CODIGO_CTP;
            pago.PAG_FECHA = today;
            pago.RECHAZADO = false;


            if (total < 0)
            {
                pago.RECHAZADO = true;

                db.Entry(pago).State = System.Data.Entity.EntityState.Added;
                db.SaveChanges();
                return(RedirectToAction("Index", new { message = "Saldo Insuficiente", email = currentEmail, cedula = cedula, ruta = ruta }));
            }
            else
            {
                client.CLI_MONEDERO    = total;
                db.Entry(client).State = System.Data.Entity.EntityState.Modified;
                db.Entry(pago).State   = System.Data.Entity.EntityState.Added;
                db.SaveChanges();

                return(RedirectToAction("Index", new { message = "Pago Exitoso", email = currentEmail, cedula = cedula, ruta = ruta }));
            }
        }
        public List <PaymentsTableViewModel> GetReports()
        {
            SMART_PAYMENT_DBEntities db = new SMART_PAYMENT_DBEntities();

            chofer = db.CHOFERs.FirstOrDefault(x => x.CHO_CORREO_ELECTRONICO == System.Web.HttpContext.Current.User.Identity.Name);

            List <PaymentsTableViewModel> lstPayment;

            lstPayment = (from d in db.PAGOes
                          select new PaymentsTableViewModel
            {
                Id = d.PAG_ID,
                Id_Client = d.PAG_IDENTIFICACION_CLIENTE,
                Id_Driver = d.PAG_IDENTIFICACION_CHOFER,
                Id_Route = d.PAG_CODIGO_CTP_RUTA,
                DateOfPayment = d.PAG_FECHA,
                State = d.RECHAZADO
            }).ToList();



            List <PaymentsTableViewModel> filteredListPayment = new List <PaymentsTableViewModel>();

            foreach (var payment in lstPayment)
            {
                if (chofer.CHO_IDENTIFICACION.Equals(payment.Id_Driver))
                {
                    if (payment.State)
                    {
                        filteredListPayment.Add(payment);
                    }
                }
            }

            return(filteredListPayment);
        }
        public ActionResult AddNewDriver(string id, DateTime dateOfBirth, string name, string lastName, string secondLastName, string email, string password, string password2)
        {
            if (string.IsNullOrEmpty(id) || dateOfBirth == null || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(lastName) || string.IsNullOrEmpty(secondLastName) || string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(password2))
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "Campos vacíos", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            if (dateOfBirth > DateTime.Today)
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "La fecha de nacimiento no puede ser mayor a la fecha actual", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            if (Int32.Parse(id) <= 0)
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "El número de identificación debe ser mayor a 0", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            if (!IsValidEmailAddress(email.Trim()))
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "Correo electrónico inválido", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            if (string.Equals(password.Trim(), password2.Trim()))
            {
                if (password.Trim().Length < 8)
                {
                    return(RedirectToAction("Drivers", "Admin", new { message = "La longitud de la contraseña debe ser mayor o igual 8", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
                }
                else if (!IsValidPassword(password.Trim()))
                {
                    return(RedirectToAction("Drivers", "Admin", new { message = "La contraseña debe contener números y letras", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
                }
            }
            else
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "Contraseñas no coinciden", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            if (IsRegisteredID(id.Trim()))
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "Identificación ya se encuentra registrada", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }


            if (IsRegisteredEmail(email.Trim()))
            {
                return(RedirectToAction("Drivers", "Admin", new { message = "Correo electrónico ya está registrado", id = id, name = name, lastName = lastName, secondLastName = secondLastName, email = email, password = password, password2 = password2 }));
            }

            var chofer = new CHOFER();

            chofer.CHO_IDENTIFICACION     = id.Trim();
            chofer.CHO_FECHA_NACIMIENTO   = dateOfBirth;
            chofer.CHO_NOMBRE             = name.Trim();
            chofer.CHO_PRIMER_APELLIDO    = lastName.Trim();
            chofer.CHO_SEGUNDO_APELLIDO   = secondLastName.Trim();
            chofer.CHO_CORREO_ELECTRONICO = email.Trim();
            chofer.CHO_CONTRASENNA        = password.Trim();
            chofer.CHO_ESTADO             = true;

            SMART_PAYMENT_DBEntities db = new SMART_PAYMENT_DBEntities();

            db.Entry(chofer).State = System.Data.Entity.EntityState.Added;
            db.SaveChanges();

            return(RedirectToAction("Drivers", "Admin", new { message = "Chofer agregado correctamente" }));
        }