Ejemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public static bool IntervencionPermitida(CedEntidades.Evento Evento, CedEntidades.WF Wf)
 {
     List<CedEntidades.EsqSegEvenPos> listEsqSegEvenPos = new List<CedEntidades.EsqSegEvenPos>();
     listEsqSegEvenPos = LeerEsquemaSegEventosPosibles(Wf);
     CedEntidades.EsqSegEvenPos esqSegEvenPos = new CedEntidades.EsqSegEvenPos();
     List<CedEntidades.GrupoXUsuario> listGrupoXUsuario = new List<CedEntidades.GrupoXUsuario>();
     List<CedEntidades.Evento> listEventosPosibles = Wf.EventosPosibles;
     return IntervencionPermitida(Wf, Evento, ref listEventosPosibles, ref listEsqSegEvenPos, ref esqSegEvenPos, ref listGrupoXUsuario) == "SI";
 }
Ejemplo n.º 3
0
 public static bool IntervencionPermitida(CedEntidades.WF Wf, CedEntidades.Evento Evento, out bool UltimaIntervencion)
 {
     List<CedEntidades.EsqSegEvenPos> listEsqSegEvenPos = new List<CedEntidades.EsqSegEvenPos>();
     listEsqSegEvenPos = LeerEsquemaSegEventosPosibles(Wf);
     CedEntidades.EsqSegEvenPos esqSegEvenPos = new CedEntidades.EsqSegEvenPos();
     List<CedEntidades.GrupoXUsuario> listGrupoXUsuario = new List<CedEntidades.GrupoXUsuario>();
     List<CedEntidades.Evento> listEventosPosibles = Wf.EventosPosibles;
     bool intervPermitida = (IntervencionPermitida(Wf, Evento, ref listEventosPosibles, ref listEsqSegEvenPos, ref esqSegEvenPos, ref listGrupoXUsuario) == "SI");
     UltimaIntervencion = false;
     if (intervPermitida && esqSegEvenPos.CantInterv == 1)
     {
         UltimaIntervencion = true;
     }
     return intervPermitida;
 }
Ejemplo n.º 4
0
Archivo: db.cs Proyecto: pjeconde/eFact
		public System.Collections.Generic.List<CedEntidades.EsqSegEvenPos> WF_EsquemaSegEventosPosibles_qry(CedEntidades.WF Wf)
		{
			string ListaEventos = String.Empty;
			for(int i = 0; i < Wf.EventosPosibles.Count; i++)
			{
				ListaEventos = ListaEventos + "'" + Wf.EventosPosibles[i].Id + "'";
                if (i != Wf.EventosPosibles.Count - 1)
				{
					ListaEventos = ListaEventos + ", ";
				}
			}
			if(ListaEventos == String.Empty)
				ListaEventos = "''";
            string a = "select WF_EsquemaSeg.IdEvento, WF_EsquemaSeg.CantInterv, WF_EsquemaSeg.IdGrupo, WF_EsquemaSeg.DebeSerSP, WF_EsquemaSeg.SupervisorNivelDsd, WF_EsquemaSeg.SupervisorNivelHst, WCTbGrupos.Descr as DescrGrupo, WF_Evento.DescrEvento, WF_Evento.Automatico, WF_Evento.CXO, WF_Evento.XLote " +
				"from WF_EsquemaSeg, WCTbGrupos, WF_Evento " +
				"where WF_EsquemaSeg.IdFlow='" + Wf.IdFlow + "' and WF_EsquemaSeg.IdCircuito='" + Wf.IdCircuito + "' and (WF_EsquemaSeg.IdNivSeg=" + Wf.IdNivSeg + " or WF_EsquemaSeg.IdNivSeg=0) and WF_EsquemaSeg.IdEvento in (" + ListaEventos + ") " +
				"and WF_EsquemaSeg.IdGrupo=WCTbGrupos.IdGrupo " +
				"and WF_EsquemaSeg.IdFlow=WF_Evento.IdFlow and WF_EsquemaSeg.IdEvento=WF_Evento.IdEvento";
			System.Collections.Generic.List<CedEntidades.EsqSegEvenPos> listaEsqSegEvenPos = new List<CedEntidades.EsqSegEvenPos>();
            DataView dv = (DataView)Ejecutar(a,TipoRetorno.DV,Transaccion.NoAcepta,sesion.CnnStr);
            for(int i = 0; i< dv.Table.Rows.Count;i++)
            {
                CedEntidades.EsqSegEvenPos esqSegEvenPos = new CedEntidades.EsqSegEvenPos();
				esqSegEvenPos.Evento.Id = Convert.ToString(dv.Table.Rows[i]["IdEvento"]);
                esqSegEvenPos.Evento.Automatico = Convert.ToBoolean(dv.Table.Rows[i]["Automatico"]);
                esqSegEvenPos.Evento.CXO = Convert.ToBoolean(dv.Table.Rows[i]["CXO"]);
                esqSegEvenPos.Evento.XLote = Convert.ToBoolean(dv.Table.Rows[i]["XLote"]);
                esqSegEvenPos.Evento.Descr = Convert.ToString(dv.Table.Rows[i]["DescrEvento"]);
                esqSegEvenPos.CantInterv = Convert.ToInt32(dv.Table.Rows[i]["CantInterv"]);
                esqSegEvenPos.Grupo.Id = Convert.ToString(dv.Table.Rows[i]["IdGrupo"]);
                esqSegEvenPos.DebeSerSP = Convert.ToString(dv.Table.Rows[i]["DebeSerSP"]);
                esqSegEvenPos.SupervisorNivelDsd = Convert.ToInt32(dv.Table.Rows[i]["SupervisorNivelDsd"]);
                esqSegEvenPos.SupervisorNivelHst = Convert.ToInt32(dv.Table.Rows[i]["SupervisorNivelHst"]);
                esqSegEvenPos.Grupo.Descr = Convert.ToString(dv.Table.Rows[i]["DescrGrupo"]);
                listaEsqSegEvenPos.Add(esqSegEvenPos);
            }
            return listaEsqSegEvenPos;
		}