/// <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); } } } }
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"; }
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; }
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; }