/// <summary>
        ///  Retorna lista  <see cref="HealthInstitutions_SuscriptionRequestsList"/> con solo id , nombre + datos de la subscripción
        /// </summary>
        /// <param name="healthInstituteId"></param>
        /// <returns></returns>
        internal static HealthInstitutions_SuscriptionRequestsList Retrive_Subscriptions_SimpleList(Guid healthInstituteId)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var AllProfesionals = from p in dc.HealthInstitutions_SuscriptionRequests
                                      from prof in dc.Profesionals
                                      where

                                      p.HealthInstitutionId.Equals(healthInstituteId) &&
                                      prof.IdProfesional.Equals(p.Profesional_To)
                                      select new HealthInstitutions_SuscriptionRequestsBE
                {
                    Profesional_To = prof.IdProfesional,
                    Nombre_To      = prof.Persona.Nombre,
                    Apellido_To    = prof.Persona.Apellido,
                    RequestSend    = p.RequestSend,
                    Status         = p.State,
                    Message        = p.Message
                };


                wProfesionalsBEList.AddRange(AllProfesionals.ToList <HealthInstitutions_SuscriptionRequestsBE>());
            }
            return(wProfesionalsBEList);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="pHealthInstitutionId"></param>
        /// <param name="pIdProfesional_To"></param>
        /// <param name="status"></param>
        public static void Update_Subscriptions_Status(Guid pHealthInstitutionId, int pIdProfesional_To, SubscriptionRequestStatus status)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To) &&
                                                                                   p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();

                wSuscription.State = (int)status;
                dc.SubmitChanges();
            }
        }
        internal static void Remove_SubscriptionReq(Guid pHealthInstitutionId, int pIdProfesional_To)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To) &&
                                                                                   p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();



                dc.HealthInstitutions_SuscriptionRequests.DeleteOnSubmit(wSuscription);
                dc.SubmitChanges();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="pHealthInstitutionId"></param>
        /// <param name="pIdProfesional_To"></param>
        /// <param name="status"></param>
        public static void Acept_Subscriptions_Req(Guid pHealthInstitutionId, int pIdProfesional_To, Guid user_guid)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To) &&
                                                                                   p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();



                //Asociar el profecional
                Profesional_Associate_As_AdminOwner(pHealthInstitutionId, pIdProfesional_To, user_guid, wSuscription.RoleName);


                //Elimina la subscripcion
                dc.HealthInstitutions_SuscriptionRequests.DeleteOnSubmit(wSuscription);
                dc.SubmitChanges();
            }
        }
        /// <summary>
        /// Lista brebe de posibles profecionales para invitar con
        /// IdProfesional,Nombre,Apellido
        /// </summary>
        /// <param name="nombreapellido">Filtro</param>
        /// <returns>HealthInstitutions_SuscriptionRequestsList</returns>
        public static HealthInstitutions_SuscriptionRequestsList SearchProfesionals_ToSuscriptionInfo(int profesionalId, Guid healthInstituteId, string nombreapellido)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (Health.Back.BE.HealthEntities dc = new Health.Back.BE.HealthEntities(Common.CnnString_Entities))
            {
                ///Busca a los que ya se le enviaron solicitudes
                var profesionals_pendings = HealthInstitutionDAC.Retrive_Subscriptions_SimpleList(healthInstituteId);

                ///Profesionales que ya pertenecen  a la institución Esta es un alista para quitar
                var profesionals_exist = from hp in dc.HealthInstitution_Profesional
                                         from p in dc.Profesional_FullView
                                         where
                                         hp.HealthInstitutionId.Equals(healthInstituteId) &&
                                         hp.ProfesionalId.Equals(p.IdProfesional) &&
                                         hp.ProfesionalId.Equals(profesionalId) == false
                                         select new HealthInstitutions_SuscriptionRequestsBE {
                    Profesional_To = p.IdProfesional, Nombre_To = p.Nombre, Apellido_To = p.Apellido
                };


                Int32[] ids_pendings = (from s in profesionals_pendings select s.Profesional_To).ToArray();
                Int32[] ids_exists   = (from s in profesionals_exist select s.Profesional_To).ToArray();

                var profesionals_All = from p in dc.Profesional_FullView
                                       where
                                       !(ids_pendings.Contains(p.IdProfesional)) && //excluye profesionals_pendings
                                       !(ids_exists.Contains(p.IdProfesional)) &&   // excluye profesionals_exist
                                       (String.IsNullOrEmpty(nombreapellido) || p.Nombre.Contains(nombreapellido) || p.Apellido.Contains(nombreapellido))
                                       select new HealthInstitutions_SuscriptionRequestsBE {
                    Profesional_To = p.IdProfesional, Nombre_To = p.Nombre, Apellido_To = p.Apellido, Status = (int)SubscriptionRequestStatus.Null
                };

                wProfesionalsBEList.AddRange(profesionals_pendings.ToList <HealthInstitutions_SuscriptionRequestsBE>());
                wProfesionalsBEList.AddRange(profesionals_All.ToList <HealthInstitutions_SuscriptionRequestsBE>());
            }
            return(wProfesionalsBEList);
        }
        /// <summary>
        /// Lista usada para ver las solicitudes al profecional
        /// Retorna lista  <see cref="HealthInstitutions_SuscriptionRequestsList"/> con solo id , nombre + datos de la subscripción
        /// Se retorna Nombre y apellido es del usuario que solicita
        /// </summary>
        /// <param name="pIdProfesional">Id del profesional que desea ver sus solicitudes pendientes</param>
        /// <returns></returns>
        internal static HealthInstitutions_SuscriptionRequestsList Retrive_PendingSubscriptions_SimpleList(int pIdProfesional)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var AllProfesionals = from p in dc.HealthInstitutions_SuscriptionRequests
                                      from h in dc.HealthInstitutions
                                      from prof_from in dc.Profesionals

                                      where

                                      p.Profesional_To.Equals(pIdProfesional) &&
                                      h.HealthInstitutionId.Equals(p.HealthInstitutionId) &&
                                      prof_from.IdProfesional.Equals(p.ProfesionalId_From)

                                      && !p.State.Equals(SubscriptionRequestStatus.Rechazado) &&
                                      !p.State.Equals(SubscriptionRequestStatus.Expirado)
                                      select new HealthInstitutions_SuscriptionRequestsBE
                {
                    Profesional_To   = p.Profesional_To,
                    Profesional_From = p.ProfesionalId_From,
                    Nombre_From      = prof_from.Persona.Nombre,
                    Apellido_From    = prof_from.Persona.Apellido,
                    RequestSend      = p.RequestSend,
                    Status           = p.State,
                    HealthInsId      = h.HealthInstitutionId,
                    HealthInstName   = h.RazonSocial,
                    SenderIsOwner    = p.SenderIsOwner,
                    Message          = p.Message
                };


                wProfesionalsBEList.AddRange(AllProfesionals.ToList <HealthInstitutions_SuscriptionRequestsBE>());
            }
            return(wProfesionalsBEList);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pHealthInstitutionId"></param>
        /// <param name="pIdProfesional_To"></param>
        /// <param name="status"></param>
        public static void Acept_Subscriptions_Req(Guid pHealthInstitutionId, int pIdProfesional_To, Guid user_guid)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();
            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To)
                                          && p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();



                //Asociar el Profesional
                Profesional_Associate_As_AdminOwner(pHealthInstitutionId, pIdProfesional_To, user_guid, wSuscription.RoleName);


                //Elimina la subscripcion
                dc.HealthInstitutions_SuscriptionRequests.DeleteOnSubmit(wSuscription);
                dc.SubmitChanges();



            }

        }
        internal static void Remove_SubscriptionReq(Guid pHealthInstitutionId, int pIdProfesional_To)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();
            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To)
                                          && p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();



                dc.HealthInstitutions_SuscriptionRequests.DeleteOnSubmit(wSuscription);
                dc.SubmitChanges();
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pHealthInstitutionId"></param>
        /// <param name="pIdProfesional_To"></param>
        /// <param name="status"></param>
        public static void Update_Subscriptions_Status(Guid pHealthInstitutionId, int pIdProfesional_To, SubscriptionRequestStatus status)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();
            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var wSuscription = dc.HealthInstitutions_SuscriptionRequests.Where(p => p.Profesional_To.Equals(pIdProfesional_To)
                                   && p.HealthInstitutionId.Equals(p.HealthInstitutionId)).FirstOrDefault();

                wSuscription.State = (int)status;
                dc.SubmitChanges();
            }

        }
        /// <summary>
        /// Lista usada para ver las solicitudes al Profesional 
        /// Retorna lista  <see cref="HealthInstitutions_SuscriptionRequestsList"/> con solo id , nombre + datos de la subscripción 
        /// Se retorna Nombre y apellido es del usuario que solicita
        /// </summary>
        /// <param name="pIdProfesional">Id del profesional que desea ver sus solicitudes pendientes</param>
        /// <returns></returns>
        internal static HealthInstitutions_SuscriptionRequestsList Retrive_PendingSubscriptions_SimpleList(int pIdProfesional)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();
            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var AllProfesionals = from p in dc.HealthInstitutions_SuscriptionRequests
                                      from h in dc.HealthInstitutions
                                      from prof_from in dc.Profesionals
                                  
                                      where

                                          p.Profesional_To.Equals(pIdProfesional)
                                                && h.HealthInstitutionId.Equals(p.HealthInstitutionId)
                                          && prof_from.IdProfesional.Equals(p.ProfesionalId_From)
                                    
                                          && !p.State.Equals(SubscriptionRequestStatus.Rechazado)
                                          && !p.State.Equals(SubscriptionRequestStatus.Expirado)
                                      select new HealthInstitutions_SuscriptionRequestsBE
                                      {
                                          Profesional_To = p.Profesional_To,
                                          Profesional_From = p.ProfesionalId_From,
                                          Nombre_From = prof_from.Persona.Nombre,
                                          Apellido_From = prof_from.Persona.Apellido,
                                          RequestSend = p.RequestSend,
                                          Status = p.State,
                                          HealthInsId = h.HealthInstitutionId,
                                          HealthInstName = h.RazonSocial,
                                          SenderIsOwner = p.SenderIsOwner,
                                          Message = p.Message
                                      };


                wProfesionalsBEList.AddRange(AllProfesionals.ToList<HealthInstitutions_SuscriptionRequestsBE>());
            }
            return wProfesionalsBEList;
        }
        /// <summary>
        ///  Retorna lista  <see cref="HealthInstitutions_SuscriptionRequestsList"/> con solo id , nombre + datos de la subscripción 
        /// </summary>
        /// <param name="healthInstituteId"></param>
        /// <returns></returns>
        internal static HealthInstitutions_SuscriptionRequestsList Retrive_Subscriptions_SimpleList(Guid healthInstituteId)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();
            using (HealthLinQDataContext dc = new HealthLinQDataContext(Common.CnnString))
            {
                var AllProfesionals = from p in dc.HealthInstitutions_SuscriptionRequests
                                      from prof in dc.Profesionals
                                      where

                                          p.HealthInstitutionId.Equals(healthInstituteId)
                                          && prof.IdProfesional.Equals(p.Profesional_To)
                                      select new HealthInstitutions_SuscriptionRequestsBE
                                      {
                                          Profesional_To = prof.IdProfesional,
                                          Nombre_To = prof.Persona.Nombre,
                                          Apellido_To = prof.Persona.Apellido,
                                          RequestSend = p.RequestSend,
                                          Status = p.State,
                                          Message = p.Message
                                      };


                wProfesionalsBEList.AddRange(AllProfesionals.ToList<HealthInstitutions_SuscriptionRequestsBE>());
            }
            return wProfesionalsBEList;
        }
        /// <summary>
        /// Lista brebe de posibles Profesionales para invitar con 
        /// IdProfesional,Nombre,Apellido
        /// </summary>
        /// <param name="nombreapellido">Filtro</param>
        /// <returns>HealthInstitutions_SuscriptionRequestsList</returns>
        public static HealthInstitutions_SuscriptionRequestsList SearchProfesionals_ToSuscriptionInfo(int profesionalId, Guid healthInstituteId, string nombreapellido)
        {
            HealthInstitutions_SuscriptionRequestsList wProfesionalsBEList = new HealthInstitutions_SuscriptionRequestsList();

            using (Health.Back.BE.HealthEntities dc = new Health.Back.BE.HealthEntities(Common.CnnString_Entities))
            {

                ///Busca a los que ya se le enviaron solicitudes
                var profesionals_pendings = HealthInstitutionDAC.Retrive_Subscriptions_SimpleList(healthInstituteId);

                ///Profesionales que ya pertenecen  a la institución Esta es un alista para quitar
                var profesionals_exist = from hp in dc.HealthInstitution_Profesional
                                         from p in dc.Profesional_FullView
                                         where
                                             hp.HealthInstitutionId.Equals(healthInstituteId) &&
                                             hp.ProfesionalId.Equals(p.IdProfesional) &&
                                             hp.ProfesionalId.Equals(profesionalId) == false
                                         select new HealthInstitutions_SuscriptionRequestsBE { Profesional_To = p.IdProfesional, Nombre_To = p.Nombre, Apellido_To = p.Apellido };


                Int32[] ids_pendings = (from s in profesionals_pendings select s.Profesional_To).ToArray();
                Int32[] ids_exists = (from s in profesionals_exist select s.Profesional_To).ToArray();

                var profesionals_All = from p in dc.Profesional_FullView
                                       where
                                        !(ids_pendings.Contains(p.IdProfesional)) &&  //excluye profesionals_pendings
                                        !(ids_exists.Contains(p.IdProfesional)) &&// excluye profesionals_exist
                                         (String.IsNullOrEmpty(nombreapellido) || p.Nombre.Contains(nombreapellido) || p.Apellido.Contains(nombreapellido))
                                       select new HealthInstitutions_SuscriptionRequestsBE { Profesional_To = p.IdProfesional, Nombre_To = p.Nombre, Apellido_To = p.Apellido, Status = (int)SubscriptionRequestStatus.Null };

                wProfesionalsBEList.AddRange(profesionals_pendings.ToList<HealthInstitutions_SuscriptionRequestsBE>());
                wProfesionalsBEList.AddRange(profesionals_All.ToList<HealthInstitutions_SuscriptionRequestsBE>());
            }
            return wProfesionalsBEList;
        }