/// <summary> /// Funcion para el boton Predespachar /// Pantalla pre despacho /// </summary> /// <param name="lista"></param> /// <param name="usuario"></param> /// <returns></returns> public object Predespachar(List <PreDespachoItems> lista, Sam3_Usuario usuario) { try { int preDespachoID = 0; using (SamContext ctx = new SamContext()) { using (var ctx_tran = ctx.Database.BeginTransaction()) { using (Sam2Context ctx2 = new Sam2Context()) { foreach (PreDespachoItems item in lista) { preDespachoID = item.PreDespachoID != "" ? Convert.ToInt32(item.PreDespachoID) : 0; bool tieneHold = (from sh in ctx2.SpoolHold where sh.SpoolID == (from odts in ctx2.OrdenTrabajoSpool where odts.OrdenTrabajoSpoolID.ToString() == item.NumeroControl select odts.SpoolID).FirstOrDefault() && (sh.TieneHoldCalidad || sh.TieneHoldIngenieria || sh.Confinado) select sh).AsParallel().Any(); if (!tieneHold) { DatabaseManager.Sam2.ItemCode itemCode = (from it in ctx2.ItemCode where it.ItemCodeID.ToString() == item.ItemCode select it).AsParallel().SingleOrDefault(); int proyectoID = itemCode.ProyectoID; int sam3_ProyectoID = (from eqp in ctx.Sam3_EquivalenciaProyecto where eqp.Activo && eqp.Sam2_ProyectoID == proyectoID select eqp.Sam3_ProyectoID).AsParallel().SingleOrDefault(); int sam3_ItemCodeID = (from eqi in ctx.Sam3_EquivalenciaItemCode where eqi.Activo && eqi.Sam2_ItemCodeID == itemCode.ItemCodeID select eqi.Sam3_ItemCodeID).AsParallel().SingleOrDefault(); //Dividimos el codigo del numero para buscarlo en sam3 string[] elementosCodigo = item.NumeroUnico.Split('-').ToArray(); int consecutivoNumeroUnico = Convert.ToInt32(elementosCodigo[1]); string prefijoNumeroUnico = elementosCodigo[0]; //int sam3_ProyectoID = (from nueq in ctx.Sam3_EquivalenciaProyecto // where nueq.Activo && nueq.Sam2_ProyectoID == proyectoID // select nueq.Sam3_ProyectoID).AsParallel().SingleOrDefault(); //traemos los datos de la orden de trabajo spool de Sam2 OrdenTrabajoSpool odtSpool = (from odts in ctx2.OrdenTrabajoSpool join odt in ctx2.OrdenTrabajo on odts.OrdenTrabajoID equals odt.OrdenTrabajoID where odts.OrdenTrabajoSpoolID.ToString() == item.NumeroControl && odt.ProyectoID == proyectoID select odts).AsParallel().SingleOrDefault(); //traemos los datos del material de Sam 2 MaterialSpool materialSpool = (from ms in ctx2.MaterialSpool join odts in ctx2.OrdenTrabajoSpool on ms.SpoolID equals odts.SpoolID where odts.OrdenTrabajoSpoolID == odtSpool.OrdenTrabajoSpoolID && ms.Etiqueta == item.Etiqueta select ms).AsParallel().SingleOrDefault(); //traemos los datos de la orden de trabajo material de Sam 2 OrdenTrabajoMaterial odtMaterial = (from odtm in ctx2.OrdenTrabajoMaterial where odtm.OrdenTrabajoSpoolID == odtSpool.OrdenTrabajoSpoolID && odtm.MaterialSpoolID == materialSpool.MaterialSpoolID select odtm).AsParallel().SingleOrDefault(); //buscamos el numero unico en SAM 3 if (ctx.Sam3_NumeroUnico.Where(x => x.Prefijo == prefijoNumeroUnico && x.Consecutivo == consecutivoNumeroUnico && x.ProyectoID == sam3_ProyectoID).AsParallel().Any()) { //int sam2_numeroUnicoID = 0; // numero unico seleccionado en el grid Sam3_NumeroUnico numeroUnico = ctx.Sam3_NumeroUnico.Where(x => x.Prefijo == prefijoNumeroUnico && x.Consecutivo == consecutivoNumeroUnico && x.ProyectoID == sam3_ProyectoID).AsParallel().SingleOrDefault(); if (preDespachoID > 0) // existe el predespacho { Sam3_PreDespacho preDespacho = (from pre in ctx.Sam3_PreDespacho where pre.Activo && pre.PreDespachoID == preDespachoID select pre).AsParallel().SingleOrDefault(); // si el numero Unico seleccionado es diferente del numero unico que se encuentra registrado en el predespacho if (preDespachoID > 0 && preDespacho.NumeroUnicoID != numeroUnico.NumeroUnicoID) { preDespacho.Activo = true; preDespacho.FechaModificacion = DateTime.Now; preDespacho.FechaPreDespacho = DateTime.Now; preDespacho.UsuarioModificacion = usuario.UsuarioID; preDespacho.ProyectoID = sam3_ProyectoID; preDespacho.NumeroUnicoID = numeroUnico.NumeroUnicoID; preDespacho.Cantidad = (int)odtMaterial.CantidadCongelada; ctx.SaveChanges(); } } else { Sam3_PreDespacho preDespacho = new Sam3_PreDespacho(); preDespacho.Activo = true; preDespacho.FechaModificacion = DateTime.Now; preDespacho.FechaPreDespacho = DateTime.Now; preDespacho.UsuarioModificacion = usuario.UsuarioID; preDespacho.ProyectoID = sam3_ProyectoID; preDespacho.OrdenTrabajoSpoolID = Convert.ToInt32(item.NumeroControl); preDespacho.NumeroUnicoID = numeroUnico.NumeroUnicoID; preDespacho.MaterialSpoolID = odtMaterial.MaterialSpoolID; preDespacho.ItemCodeID = sam3_ItemCodeID; preDespacho.Cantidad = (int)odtMaterial.CantidadCongelada; ctx.Sam3_PreDespacho.Add(preDespacho); ctx.SaveChanges(); } } } else { throw new Exception("El Spool cuenta con Hold, no se puede Pre-Despachar"); } } ctx_tran.Commit(); TransactionalInformation result = new TransactionalInformation(); //result.ReturnMessage.Add(preDespacho.PreDespachoID.ToString()); 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); } }
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); } }