/// <summary> /// Funcion para obtener los datos del grid de pre despacho /// </summary> /// <param name="spoolID"></param> /// <param name="usuario"></param> /// <returns></returns> public object ObtenerGridPreDespacho(int odtID, Sam3_Usuario usuario) { try { List <int> proyectos = new List <int>(); List <int> patios = new List <int>(); UsuarioBd.Instance.ObtenerPatiosYProyectosDeUsuario(usuario.UsuarioID, out proyectos, out patios); using (SamContext ctx = new SamContext()) { proyectos = (from eqp in ctx.Sam3_EquivalenciaProyecto where eqp.Activo && proyectos.Contains(eqp.Sam3_ProyectoID) select eqp.Sam2_ProyectoID).Distinct().AsParallel().ToList(); proyectos = proyectos.Where(x => x > 0).ToList(); patios = (from p in ctx.Sam3_Proyecto join pa in ctx.Sam3_Patio on p.PatioID equals pa.PatioID join eq in ctx.Sam3_EquivalenciaPatio on pa.PatioID equals eq.Sam2_PatioID where p.Activo && pa.Activo && eq.Activo && proyectos.Contains(p.ProyectoID) select eq.Sam2_PatioID).Distinct().AsParallel().ToList(); patios = patios.Where(x => x > 0).ToList(); List <int> numerosUnicosAprobadosSam3 = (from nu in ctx.Sam3_NumeroUnico where nu.Activo && nu.EstatusDocumental == "Aprobado" && nu.EstatusFisico == "Aprobado" select nu.NumeroUnicoID).AsParallel().ToList(); List <int> numerosUnicosAprobadosSam2 = (from eq in ctx.Sam3_EquivalenciaNumeroUnico where eq.Activo && numerosUnicosAprobadosSam3.Contains(eq.Sam3_NumeroUnicoID) select eq.Sam2_NumeroUnicoID).AsParallel().ToList(); using (Sam2Context ctx2 = new Sam2Context()) { List <PreDespacho> listado = (from ots in ctx2.OrdenTrabajoSpool join ot in ctx2.OrdenTrabajo on ots.OrdenTrabajoID equals ot.OrdenTrabajoID join otm in ctx2.OrdenTrabajoMaterial on ots.OrdenTrabajoSpoolID equals otm.OrdenTrabajoSpoolID join ms in ctx2.MaterialSpool on otm.MaterialSpoolID equals ms.MaterialSpoolID join nu in ctx2.NumeroUnico on otm.NumeroUnicoCongeladoID equals nu.NumeroUnicoID join ic in ctx2.ItemCode on ms.ItemCodeID equals ic.ItemCodeID where ot.OrdenTrabajoID == odtID && proyectos.Contains(ot.ProyectoID) && ic.TipoMaterialID == 2 //&& !otm.TieneDespacho && numerosUnicosAprobadosSam2.Contains(nu.NumeroUnicoID) select new PreDespacho { ItemCodeID = ic.ItemCodeID.ToString(), ItemCode = ic.Codigo, NumeroControlID = ots.OrdenTrabajoSpoolID.ToString(), NumeroControl = ots.NumeroControl, //NumeroUnico = nu.Codigo, Descripcion = ic.DescripcionEspanol, Etiqueta = ms.Etiqueta, MaterialSpoolID = otm.MaterialSpoolID }).AsParallel().ToList(); foreach (PreDespacho item in listado) { int sam3_ItemCodeID = (from eqn in ctx.Sam3_EquivalenciaItemCode where eqn.Activo && eqn.Sam2_ItemCodeID.ToString() == item.ItemCodeID select eqn.Sam3_ItemCodeID).AsParallel().SingleOrDefault(); if (ctx.Sam3_PreDespacho .Where(x => x.OrdenTrabajoSpoolID.ToString() == item.NumeroControlID && x.ItemCodeID == sam3_ItemCodeID && x.MaterialSpoolID == item.MaterialSpoolID).Any()) { Sam3_PreDespacho preDespacho = ctx.Sam3_PreDespacho .Where(x => x.OrdenTrabajoSpoolID.ToString() == item.NumeroControlID && x.ItemCodeID == sam3_ItemCodeID && x.MaterialSpoolID == item.MaterialSpoolID && x.Activo).AsParallel().SingleOrDefault(); if (preDespacho != null) { item.PreDespachoID = preDespacho.PreDespachoID.ToString(); int sam3_NumeroUnicoID = preDespacho.NumeroUnicoID; //(from pre in ctx.Sam3_PreDespacho // where pre.Activo // && pre.OrdenTrabajoSpoolID.ToString() == item.NumeroControlID // && pre.ItemCodeID == sam3_ItemCodeID // && pre.MaterialSpoolID == item.MaterialSpoolID // select pre.NumeroUnicoID).AsParallel().SingleOrDefault(); int sam2_numeroUnicoID = (from eqn in ctx.Sam3_EquivalenciaNumeroUnico where eqn.Activo && eqn.Sam3_NumeroUnicoID == sam3_NumeroUnicoID select eqn.Sam2_NumeroUnicoID).AsParallel().SingleOrDefault(); NumeroUnico SAM2NumUnico = ctx2.NumeroUnico.Where(x => x.NumeroUnicoID == sam2_numeroUnicoID).AsParallel().SingleOrDefault(); item.NumeroUnico = SAM2NumUnico.Codigo; item.NumeroUnicoID = SAM2NumUnico.NumeroUnicoID.ToString(); } } } return(listado.OrderBy(x => x.NumeroControlID).ToList()); } } } catch (Exception ex) { //-----------------Agregar mensaje al Log ----------------------------------------------- LoggerBd.Instance.EscribirLog(ex); //-----------------Agregar mensaje al Log ----------------------------------------------- TransactionalInformation result = new TransactionalInformation(); result.ReturnMessage.Add(ex.Message); result.ReturnCode = 500; result.ReturnStatus = false; result.IsAuthenicated = true; return(result); } }
public object EliminarNumeroUnico(int numeroUnicoID, Sam3_Usuario usuario) { try { using (SamContext ctx = new SamContext()) { using (var ctx_tran = ctx.Database.BeginTransaction()) { using (Sam2Context ctx2 = new Sam2Context()) { using (var ctx2_tran = ctx2.Database.BeginTransaction()) { int sam2_NumeroUnicoID = (from eq in ctx.Sam3_EquivalenciaNumeroUnico where eq.Activo && eq.Sam3_NumeroUnicoID == numeroUnicoID select eq.Sam2_NumeroUnicoID).AsParallel().SingleOrDefault(); NumeroUnico NumeroUnicoSam2 = ctx2.NumeroUnico.Where(x => x.NumeroUnicoID == sam2_NumeroUnicoID).AsParallel().SingleOrDefault(); //buscamos si tiene procesos en ODTM bool tieneProcesos = (from odtm in ctx2.OrdenTrabajoMaterial where odtm.NumeroUnicoCongeladoID == NumeroUnicoSam2.NumeroUnicoID || odtm.NumeroUnicoDespachadoID == NumeroUnicoSam2.NumeroUnicoID || odtm.NumeroUnicoSugeridoID == NumeroUnicoSam2.NumeroUnicoID select odtm).Any(); bool tieneInventarioCongelado = (from nui in ctx.Sam3_NumeroUnicoInventario where nui.NumeroUnicoID == NumeroUnicoSam2.NumeroUnicoID select nui.InventarioCongelado).AsParallel().SingleOrDefault() > 0 ? true : false; bool tieneInventarioTransferenciaCorte = (from nui in ctx.Sam3_NumeroUnicoInventario where nui.NumeroUnicoID == NumeroUnicoSam2.NumeroUnicoID select nui.InventarioTransferenciaCorte).AsParallel().SingleOrDefault() > 0 ? true : false; if (!tieneProcesos && !tieneInventarioCongelado && !tieneInventarioTransferenciaCorte) { //Para eliminar el numero unico de sam 2 solo hay que ponerlo en estatus C NumeroUnicoSam2.Estatus = "C"; NumeroUnicoSam2.FechaModificacion = DateTime.Now; ctx2.SaveChanges(); Sam3_NumeroUnico numUnicoS3 = ctx.Sam3_NumeroUnico.Where(x => x.NumeroUnicoID == numeroUnicoID).AsParallel().SingleOrDefault(); numUnicoS3.Activo = false; numUnicoS3.FechaModificacion = DateTime.Now; numUnicoS3.UsuarioModificacion = usuario.UsuarioID; numUnicoS3.Sam3_NumeroUnicoInventario.Activo = false; numUnicoS3.Sam3_NumeroUnicoInventario.FechaModificacion = DateTime.Now; numUnicoS3.Sam3_NumeroUnicoInventario.UsuarioModificacion = usuario.UsuarioID; foreach (Sam3_NumeroUnicoSegmento segmento in numUnicoS3.Sam3_NumeroUnicoSegmento) { segmento.Activo = false; segmento.FechaModificacion = DateTime.Now; segmento.UsuarioModificacion = usuario.UsuarioID; } Sam3_Rel_NumeroUnico_RelFC_RelB relnu = ctx.Sam3_Rel_NumeroUnico_RelFC_RelB.Where(x => x.NumeroUnicoID == numeroUnicoID).AsParallel().SingleOrDefault(); relnu.Activo = false; relnu.FechaModificacion = DateTime.Now; relnu.UsuarioModificacion = usuario.UsuarioID; ctx.SaveChanges(); if (relnu.Rel_FolioCuantificacion_ItemCode_ID != null) { Sam3_Rel_FolioCuantificacion_ItemCode relfc = ctx.Sam3_Rel_FolioCuantificacion_ItemCode .Where(x => x.Rel_FolioCuantificacion_ItemCode_ID == relnu.Rel_FolioCuantificacion_ItemCode_ID).AsParallel().SingleOrDefault(); //if (ctx.Sam3_Rel_NumeroUnico_RelFC_RelB.Where(x => x.Rel_FolioCuantificacion_ItemCode_ID == relfc.Rel_FolioCuantificacion_ItemCode_ID // && x.Activo).Distinct().Count() <= 0) //{ relfc.TieneNumerosUnicos = false; //} ctx.SaveChanges(); } if (relnu.Rel_Bulto_ItemCode_ID != null) { Sam3_Rel_Bulto_ItemCode relbu = ctx.Sam3_Rel_Bulto_ItemCode.Where(x => x.Rel_Bulto_ItemCode_ID == relnu.Rel_Bulto_ItemCode_ID).AsParallel().SingleOrDefault(); //if (ctx.Sam3_Rel_NumeroUnico_RelFC_RelB.Where(x => x.Rel_Bulto_ItemCode_ID == relbu.Rel_Bulto_ItemCode_ID // && x.Activo).Distinct().Count() <= 0) //{ relbu.TieneNumerosUnicos = false; //} ctx.SaveChanges(); } ctx.SaveChanges(); } else { throw new Exception("No se puede Eliminar el Número Único pues tiene algun proceso capturado"); } ctx_tran.Commit(); ctx2_tran.Commit(); } } } } TransactionalInformation result = new TransactionalInformation(); result.ReturnMessage.Add("OK"); result.ReturnCode = 200; result.ReturnStatus = true; result.IsAuthenicated = true; return(result); } catch (Exception ex) { //-----------------Agregar mensaje al Log ----------------------------------------------- LoggerBd.Instance.EscribirLog(ex); //-----------------Agregar mensaje al Log ----------------------------------------------- TransactionalInformation result = new TransactionalInformation(); result.ReturnMessage.Add(ex.Message); result.ReturnCode = 500; result.ReturnStatus = false; result.IsAuthenicated = true; return(result); } }