コード例 #1
0
ファイル: Sesion.cs プロジェクト: pjeconde/eFact
 public static void VerificarAssemblyVersion(CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     string a = Convert.ToString(db.WF_GetAssemblyVersion_qry());
     if (a != Sesion.VersionParaControl)
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Aplicacion.AssemblyVersionInvalida(Sesion.Version, a);
     }
     db = null;
 }
コード例 #2
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static void Leer(CedEntidades.WF Wf)
		{
            Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
            db.WF_Op_get(Wf);
            if (Wf.IdFlow == string.Empty)
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.OpInexistente();
            }
            else
            {
                Wf.Log = LeerLog(Wf);
                Wf.EventosPosibles = LeerEventosPosiblesOpExist(Wf);
                Wf.EventosXLotePosibles = LeerEventosXLotePosiblesOpExist(Wf);
            }
		}
コード例 #3
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static CedEntidades.WF Nueva(string IdFlow, string IdCircuito, int IdNivSeg, string DescrOp, CedEntidades.Sesion Sesion)
		{
			CedEntidades.WF wf = new CedEntidades.WF();
			wf.Sesion = Sesion;
			Cedeira.SV.db db = new Cedeira.SV.db(wf.Sesion);
			CedEntidades.Flow flow = db.WF_Flow_get(IdFlow);
			if (flow.IdFlow == IdFlow)
			{
				wf.IdFlow = flow.IdFlow;
				wf.DescrFlow = flow.DescrFlow;
			}
			else
			{
				throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.FlowInvalido();
			}
			CedEntidades.Circuito circuito = db.WF_Circuito_get(IdCircuito);
			if (circuito.IdCircuito == IdCircuito)
			{
				wf.IdCircuito = circuito.IdCircuito;
				wf.IdCircuitoOrig = circuito.IdCircuito;
				wf.DescrCircuito = circuito.DescrCircuito;
			}
			else
			{
				throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.CircuitoInvalido();
			}
			CedEntidades.NivSeg nivSeg = db.WF_NivSeg_get(IdNivSeg);
			if (nivSeg.IdNivSeg == IdNivSeg)
			{
				wf.IdNivSeg = nivSeg.IdNivSeg;
				wf.DescrNivSeg = nivSeg.DescrNivSeg;
			}
			else
			{
				throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.NivSegInvalido();
			}
			wf.DescrOp = DescrOp;
			wf.IdOp = 0;
			wf.IdEstado = String.Empty;
			wf.UltActualiz = String.Empty;
			wf.DescrEstado = String.Empty;
			wf.Log = LeerLog(wf);
			wf.EventosPosibles = LeerEventosPosiblesOpNueva(wf);
			return wf;
		}
コード例 #4
0
ファイル: Usuario.cs プロジェクト: pjeconde/CedForecast
 public static void Leer(CedEntidades.Usuario Usuario, CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     DataView dv = db.US_Usuario_get(Usuario.IdUsuario);
     if (dv.Table.Rows.Count != 0)
     {
         Usuario.IdUsuario = Convert.ToString(dv.Table.Rows[0]["IdUsuario"]);
         Usuario.Nombre = Convert.ToString(dv.Table.Rows[0]["Nombre"]);
         Usuario.Activo = Convert.ToBoolean(dv.Table.Rows[0]["Activo"]);
         if (dv.Table.Rows[0]["Alias"] != System.DBNull.Value)
         {
             Usuario.Alias = Convert.ToString(dv.Table.Rows[0]["Alias"]);
         }
         else
         {
             Usuario.Alias = String.Empty;
         }
         Usuario.FecAlta = Convert.ToDateTime(dv.Table.Rows[0]["FecAlta"]);
         Usuario.FecBaja = Convert.ToDateTime(dv.Table.Rows[0]["FecBaja"]);
         if (dv.Table.Rows[0]["Email"] != System.DBNull.Value)
         {
             Usuario.Email = Convert.ToString(dv.Table.Rows[0]["Email"]);
         }
         else
         {
             Usuario.Email = String.Empty;
         }
         dv = null;
         Usuario.PerteneceA = db.US_PerteneceA(Usuario.IdUsuario);
         Usuario.NoPerteneceA = db.US_NoPerteneceA(Usuario.IdUsuario);
     }
     else
     {
         throw new Microsoft.ApplicationBlocks.ExceptionManagement.Usuario.Inexistente();
     }
 }
コード例 #5
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		private static List<CedEntidades.Evento> LeerEventosPosiblesOpNueva(CedEntidades.WF Wf)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
            return db.WF_EventosIniciales_qry(Wf); ;
		}
コード例 #6
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 public static void LeerEstado(CedEntidades.Estado Estado, CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     db.WF_Estado_get(Estado);
 }
コード例 #7
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 /// <summary>
 /// Obtener todos los datos relacionados al evento solicitado
 /// </summary>
 /// <param name="Evento">Evento cuyo detalle se solicita</param>
 /// <param name="Sesion">Sesion</param>
 public static void LeerEvento(CedEntidades.Evento Evento, CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     db.WF_Evento_get(Evento);
 }
コード例 #8
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		/// <summary>
		/// 
		/// </summary>
		/// <param name="Wf"></param>
		public static void EjecutarHandler(CedEntidades.WF Wf)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
			db.WF_EjecutarHandler(Wf.Handler);
		}
コード例 #9
0
ファイル: Sesion.cs プロジェクト: pjeconde/eFact
 public static DateTime FechaDB(CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     return db.FechaDB;
 }
コード例 #10
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.NivSeg> IdNivSegCombo(CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_NivSeg_lst();
		}
コード例 #11
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.Circuito> IdCircuitoCombo(CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_Circuito_lst();
		}
コード例 #12
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 public static List<CedEntidades.Evento> EventosIniciales(CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     return db.WF_EventosIniciales_qry();
 }
コード例 #13
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.Grupo> GruposXAcceso(string IdAcceso, CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_GruposXAcceso(IdAcceso);
        }
コード例 #14
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		private static List<CedEntidades.Log> LeerLog(CedEntidades.WF Wf)
		{
			
			Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
			return  db.WF_LogXOp_qry(Wf.IdOp);
		}
コード例 #15
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.Acceso> IdAccesoCombo(CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_Acceso_lst();
		}
コード例 #16
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
        public static List<CedEntidades.Estado> IdEstadoXFlowCombo(CedEntidades.WF Wf, CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_Estado_qry(Wf.IdFlow);
		}
コード例 #17
0
ファイル: Usuario.cs プロジェクト: pjeconde/CedForecast
 public static List<CedEntidades.Usuario> Lista(List<CedEntidades.Grupo> ExcluirGrupos, CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     DataView dv = db.US_Usuario_qry(ExcluirGrupos);
     return (List<CedEntidades.Usuario>) ArmarLista(dv, Sesion);
 }
コード例 #18
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 public static List<CedEntidades.Evento> EventosXLote(string IdFlow, CedEntidades.Sesion Sesion)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
     return db.WF_EventosXLote_qry(IdFlow);
 }
コード例 #19
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		private static List<CedEntidades.Evento> LeerEventosXLotePosiblesOpExist(CedEntidades.WF Wf)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
			return db.WF_EventosXLotePosibles_qry(Wf);
		}
コード例 #20
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.Flow> IdFlowCombo(CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_Flow_lst();
		}
コード例 #21
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 private static List<CedEntidades.EsqSegEvenPos> LeerEsquemaSegEventosPosibles(CedEntidades.WF Wf)
 {
     Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
     List<CedEntidades.EsqSegEvenPos> esquemaSegEventosPosibles = db.WF_EsquemaSegEventosPosibles_qry(Wf);
     // "Restar" intervenciones registradas en el Log
     if (Wf.Log.Count > 0)
     {
         // Ubico el evento que seteo el estado actual
         int j = -1;	// primera intervencion posterior al seteo del estado actual
         for (int i = Wf.Log.Count - 1; i >= 0; i--)
         {
             if (Wf.Log[i].Estado != Wf.IdEstado)
             {
                 break;
             }
             else
             {
                 j = i;
             }
         }
         if (j != -1)
         {
             // Hay intervenciones posteriores al seteo del estado actual
             bool SeRestaronIntervenciones = false;
             for (int i = j + 1; i < Wf.Log.Count; i++)
             {
                 // Encontrar el EsquemaSeg al que corresponde la intervencion
                 List<CedEntidades.EsqSegEvenPos> subEsquemaSegEventosPosibles = esquemaSegEventosPosibles.FindAll((delegate(CedEntidades.EsqSegEvenPos e){return e.Evento.Id == Wf.Log[i].Evento.Id;}));
                 for (int h = 0; h < subEsquemaSegEventosPosibles.Count; h++)
                 {
                     if (Wf.Log[i].Grupo.Id == subEsquemaSegEventosPosibles[h].Grupo.Id)
                     {
                         bool CumpleDebeSerSP = false;
                         switch (subEsquemaSegEventosPosibles[h].DebeSerSP)
                         {
                             case "S":
                                 if (Wf.Log[i].Supervisor)
                                 {
                                     CumpleDebeSerSP = true;
                                 }
                                 break;
                             case "N":
                                 if (!Wf.Log[i].Supervisor)
                                 {
                                     CumpleDebeSerSP = true;
                                 }
                                 break;
                             case "NA":
                                 CumpleDebeSerSP = true;
                                 break;
                         }
                         if (CumpleDebeSerSP)
                         {
                             if (Wf.Log[i].SupervisorNivel >= subEsquemaSegEventosPosibles[h].SupervisorNivelDsd &&
                                 Wf.Log[i].SupervisorNivel <= subEsquemaSegEventosPosibles[h].SupervisorNivelHst)
                             {
                                     // En eventos que no producen cambios de estado: CantInterv debe ser 0, 
                                     // en esos casos no se lleva control de intervenciones
                                     if (subEsquemaSegEventosPosibles[h].CantInterv != 0)
                                     {
                                         // Restar intervencion
                                         subEsquemaSegEventosPosibles[h].CantInterv =subEsquemaSegEventosPosibles[h].CantInterv - 1;
                                         SeRestaronIntervenciones = true;
                                         //Elimino registro
                                         if (subEsquemaSegEventosPosibles[h].CantInterv == 0)
                                         {
                                             subEsquemaSegEventosPosibles.RemoveAt(h);
                                         }
                                     }
                                     break;
                             }
                         }
                     }
                 }
             }
             if (!SeRestaronIntervenciones)
             {
                 esquemaSegEventosPosibles = db.WF_EsquemaSegEventosPosibles_qry(Wf);
             }
         }
     }
     // Chequeo que a todos los eventos posibles les hayan quedado al menos
     // un EsquemaSeg, si no: lo elimino.
     return esquemaSegEventosPosibles;
 }
コード例 #22
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
 private static bool GrupoHabilitadoParaAcceso(string idGrupo, CedEntidades.WF Wf)
 {
     try
     {
         Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
         List<CedEntidades.Grupo> listGrupos = db.WF_GruposXAcceso(Wf.Sesion.IdAcceso);
         listGrupos.Find(delegate(CedEntidades.Grupo e) { return e.Id == idGrupo; });
         return listGrupos.Count != 0;
     }
     catch
     {
         return false;
     }
 }
コード例 #23
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
        /// <summary>
        /// Ejecutar evento
        /// </summary>
        /// <param name="Wf">Objeto de WF</param>
        /// <param name="Evento">Evento a ejecutar</param>
        /// <param name="DevolverHandler">Devuelve un handler ?</param>
        /// <returns></returns>
        public static string EjecutarEvento(CedEntidades.WF Wf, CedEntidades.Evento Evento, bool DevolverHandler)
        {
            Cedeira.SV.db db = new Cedeira.SV.db(Wf.Sesion);
            List<CedEntidades.Evento> eventosPosibles = Wf.EventosPosibles.FindAll(delegate(CedEntidades.Evento e){return e.Id == Evento.Id;});
            List<CedEntidades.EsqSegEvenPos> esquemaSegEventosPosibles = LeerEsquemaSegEventosPosibles(Wf).FindAll(delegate(CedEntidades.EsqSegEvenPos e) { return e.Evento.Id == Evento.Id; });
            CedEntidades.EsqSegEvenPos esquemaSegEventosPosiblesUsado = new CedEntidades.EsqSegEvenPos();
            List<CedEntidades.GrupoXUsuario> gruposXUsuario = new List<CedEntidades.GrupoXUsuario>();
            switch (IntervencionPermitida(Wf, Evento, ref eventosPosibles, ref esquemaSegEventosPosibles, ref esquemaSegEventosPosiblesUsado, ref gruposXUsuario))
            {
                case "EventoInvalido":
                    throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.EventoInvalido();
                case "EventoSinSeg":
                    throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.EventoSinSeg();
                case "UsuarioNoCumpleSeg":
                    throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.UsuarioNoCumpleSeg();
                case "CXO":
                    throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.CXO();
                default:
                    break;
            }
            if (Evento.IdEstadoHst.IdEstado.Equals(string.Empty))
            {
                throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.EstadoHstNoDefinido();
            }
            if (Evento.IdEstadoDsd.IdEstado.Equals(string.Empty))
            {
                // Evento inicial (alta de operacion)
                if (!(esquemaSegEventosPosibles.Count == 1 && esquemaSegEventosPosiblesUsado.CantInterv == 1))
                {
                    // (los eventos iniciales no pueden tener varias intervenciones)
                    throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.EstadoHstInvalido();
                }
                else
                {
                    Wf.IdEstado = Evento.IdEstadoHst.IdEstado;
                    Wf.DescrEstado = Evento.IdEstadoHst.DescrEstado;
                    if (!DevolverHandler)
                    {
						Wf.IdOp = db.WF_Op_ins(Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Wf.DescrOp, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel);
                        return String.Empty;
                    }
                    else
                    {
						return db.WF_Op_insHandler(Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Wf.DescrOp, Evento.Id, Wf.Sesion.Usuario.IdUsuario.ToString(), Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel);
                    }
                }
            }
            else
            {
                // Chequeo si esta es la ultima intervencion (que posibilita el cambio de estado)
                if (esquemaSegEventosPosibles.Count == 1 && esquemaSegEventosPosiblesUsado.CantInterv == 1)
                {
                    // Cambio el estado
                    switch (Evento.IdEstadoHst.IdEstado)
                    {
                        case ("<EstadoAnt>"):
                            // Estado virtual
                            for (int i = Wf.Log.Count - 1; i >= 0; i--)
                            {
                                if (Wf.Log[i].Estado != Wf.IdEstado)
                                {
                                    Wf.IdCircuito = Wf.Log[i].Circuito.IdCircuito;
                                    Wf.IdEstado = Wf.Log[i].Estado;
                                    //Revisar que la decripcion del estado sea el campo comentario de Wf.log[i]
                                    Wf.DescrEstado = Wf.Log[i].Comentario;
                                    if (!DevolverHandler)
                                    {
										db.WF_Op_upd(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                                        return String.Empty;
                                    }
                                    else
                                    {
										return db.WF_Op_updHandler(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                                    }
                                }
                            }
                            throw new Microsoft.ApplicationBlocks.ExceptionManagement.WF.EstadoVirtualMalConfigurado();
                        case ("<ElMismo>"):
                            List<CedEntidades.Estado> listaEstados = IdEstadoCombo(Wf.Sesion);
                            CedEntidades.Estado estado = listaEstados.Find((delegate(CedEntidades.Estado e) { return e.DescrEstado == Wf.Log[Wf.Log.Count - 1].Estado; }));
                            string idEstado = "";
                            if (estado != null)
                            {
                                idEstado = estado.IdEstado;
                            }
                            Wf.IdEstado = idEstado;
                            if (!DevolverHandler)
                            {
                                db.WF_Op_upd(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                                return String.Empty;
                            }
                            else
                            {
                                return db.WF_Op_updHandler(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                            } 
                        default:
                            // Estado determinado
                            Wf.IdEstado = Evento.IdEstadoHst.IdEstado;
                            Wf.DescrEstado = Evento.IdEstadoHst.DescrEstado;
                            if (!DevolverHandler)
                            {
								db.WF_Op_upd(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                                return String.Empty;
                            }
                            else
                            {
								return db.WF_Op_updHandler(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                            }
                    }
                }
                else
                {
                    // Registro intervencion sin cambiar el estado, pero
                    // actualizo WF_Op por si cambio el Circuito o el NivSeg
                    if (!DevolverHandler)
                    {
						db.WF_Op_upd(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                        return String.Empty;
                    }
                    else
                    {
						return db.WF_Op_updHandler(Wf.IdOp, Wf.IdFlow, Wf.IdCircuito, Wf.IdNivSeg, Wf.IdEstado, Evento.Id, Wf.Sesion.Usuario.IdUsuario, Evento.Comentario, gruposXUsuario[0].Id, gruposXUsuario[0].Supervisor, gruposXUsuario[0].SupervisorNivel, Wf.UltActualiz);
                    }
                }
            }
        }
コード例 #24
0
ファイル: WF.cs プロジェクト: pjeconde/CedForecast
		public static List<CedEntidades.Estado> IdEstadoCombo(CedEntidades.Sesion Sesion)
		{
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
			return db.WF_Estado_qry();
		}
コード例 #25
0
ファイル: Sesion.cs プロジェクト: pjeconde/eFact
        public static void Crear(string IdUsuario, string Password, string Dominio, string CnnStr, string IdAcceso, string Version, string VersionParaControl, CedEntidades.Sesion Sesion)
		{
			Sesion.IdAcceso = IdAcceso;
			// Leo el CnnStr de la base de datos
			Sesion.CnnStr = CnnStr;
			Sesion.Version = Version;
			Sesion.VersionParaControl = VersionParaControl;
			// Chequeo de version del assembly
			VerificarAssemblyVersion(Sesion);
			Cedeira.SV.db db = new Cedeira.SV.db(Sesion);
            List<CedEntidades.Acceso> acceso = db.WF_Acceso_lst().FindAll(delegate(CedEntidades.Acceso e) { return e.IdAcceso == IdAcceso; });
			if (acceso.Count == 0)
			{
				throw new Microsoft.ApplicationBlocks.ExceptionManagement.Sesion.AplicInvalida();
			}
			try
			{
				// Verifico que el usuario tenga acceso a la base de datos 
				db.TesteoConexion(Sesion.CnnStr);
				// Obtengo Parametros
				Sesion.CXO = db.CXO();
				// Obtengo info del usuario
				CedEntidades.Usuario u = new CedEntidades.Usuario();
				u.IdUsuario = IdUsuario;
				Cedeira.SV.Usuario.Leer(u, Sesion);
				u.Password = Password;
				Sesion.Usuario = u;
				Sesion.Dominio = Dominio;
				// Chequeo si esta activo
				if (!Sesion.Usuario.Activo)
				{
					throw new Microsoft.ApplicationBlocks.ExceptionManagement.Sesion.Usuario.NoActivo();
				}
				// Chequeo si no esta dado de baja
				if (Sesion.Usuario.FecBaja.Date < DateTime.Now.Date)
				{
					throw new Microsoft.ApplicationBlocks.ExceptionManagement.Sesion.Usuario.DeBaja();
				}
				// Verifico si el usuario tiene acceso a la aplicacion
				List<CedEntidades.Grupo> gruposConAccPermitido = db.WF_GruposXAcceso(IdAcceso);
				bool PuedeEntrar = false;
				for (int i = 0; i < gruposConAccPermitido.Count; i++)
				{
					List<CedEntidades.GrupoXUsuario> perteneceAConAccPermitido = Sesion.Usuario.PerteneceA.FindAll(delegate(CedEntidades.GrupoXUsuario e)
					{
						return e.Id == gruposConAccPermitido[i].Id;
					});
					if (perteneceAConAccPermitido.Count > 0)
					{
						PuedeEntrar = true;
						break;
					}
				}
				if (!PuedeEntrar)
				{
					throw new Microsoft.ApplicationBlocks.ExceptionManagement.Sesion.Usuario.NoHabilitado();
				}
			}
			catch (Exception ex)
			{
				throw new Microsoft.ApplicationBlocks.ExceptionManagement.Sesion.Crear(ex);
			}
		}