/// <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);
            }
        }
示例#2
0
        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);
            }
        }