/// <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 ObtenerFormatos(int odtsID, int obtenerFormato, Sam3_Usuario usuario) { try { using (SamContext ctx = new SamContext()) { using (Sam2Context ctx2 = new Sam2Context()) { OrdenTrabajoSpool OrdenTSpool = ctx2.OrdenTrabajoSpool.Where(x => x.OrdenTrabajoSpoolID == odtsID).AsParallel().SingleOrDefault(); //int faltantesDespacho = (from int sam3_ProyectoID = (from eqp in ctx.Sam3_EquivalenciaProyecto where eqp.Activo && eqp.Sam2_ProyectoID == OrdenTSpool.OrdenTrabajo.ProyectoID select eqp.Sam3_ProyectoID).AsParallel().SingleOrDefault(); string nombreProyecto = ctx.Sam3_Proyecto.Where(x => x.ProyectoID == sam3_ProyectoID).Select(x => x.Nombre).AsParallel().SingleOrDefault(); string numeroControl = ctx2.OrdenTrabajoSpool.Where(x => x.OrdenTrabajoSpoolID == OrdenTSpool.OrdenTrabajoSpoolID) .Select(x => x.NumeroControl).SingleOrDefault(); if (obtenerFormato == 0) { List <MaterialSpool> listaMateriales = (from ms in ctx2.MaterialSpool join odtm in ctx2.OrdenTrabajoMaterial on ms.MaterialSpoolID equals odtm.MaterialSpoolID join odts in ctx2.OrdenTrabajoSpool on odtm.OrdenTrabajoSpoolID equals odts.OrdenTrabajoSpoolID where odts.OrdenTrabajoSpoolID == OrdenTSpool.OrdenTrabajoSpoolID && odtm.TieneDespacho == false select ms).AsParallel().Distinct().ToList(); List <ListadoImpresionDocumental> listaFaltantes = new List <ListadoImpresionDocumental>(); if (listaMateriales != null && listaMateriales.Count > 0) { listaFaltantes = (from r in listaMateriales join it in ctx2.ItemCode on r.ItemCodeID equals it.ItemCodeID join tp in ctx2.TipoMaterial on it.TipoMaterialID equals tp.TipoMaterialID select new ListadoImpresionDocumental { Cantidad = r.Cantidad.ToString(), ItemCodeSteelgo = it.Codigo, TipoMaterial = tp.Nombre, MaterialSpoolID = r.MaterialSpoolID.ToString() }).AsParallel().Distinct().ToList(); foreach (ListadoImpresionDocumental l in listaFaltantes) { string temp = (from it in ctx.Sam3_ItemCode join rits in ctx.Sam3_Rel_ItemCode_ItemCodeSteelgo on it.ItemCodeID equals rits.ItemCodeID join its in ctx.Sam3_ItemCodeSteelgo on rits.ItemCodeSteelgoID equals its.ItemCodeSteelgoID where it.Codigo == l.ItemCodeSteelgo select its.Codigo).AsParallel().SingleOrDefault(); l.ItemCodeSteelgo = string.IsNullOrEmpty(temp) ? "" : temp; } } return(listaFaltantes.OrderBy(x => x.TipoMaterial).ToList()); } else { //si el spool aun no tiene un folio de impresion documental se crea uno, si ya lo tiene solo se devuelve el documento if (!ctx.Sam3_FolioImpresionDocumental.Where(x => x.SpoolID == OrdenTSpool.OrdenTrabajoSpoolID).Any()) { #region Generar Folio impresion Documental using (var ctx_tran = ctx.Database.BeginTransaction()) { Sam3_FolioImpresionDocumental nuevoRegistro = new Sam3_FolioImpresionDocumental(); nuevoRegistro.Activo = true; nuevoRegistro.FechaModificacion = DateTime.Now; nuevoRegistro.SpoolID = OrdenTSpool.OrdenTrabajoSpoolID; nuevoRegistro.UsuarioModificacion = usuario.UsuarioID; ctx.Sam3_FolioImpresionDocumental.Add(nuevoRegistro); ctx.SaveChanges(); ctx_tran.Commit(); } #endregion } HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); string rutaBase = ConfigurationManager.AppSettings["SamFiles"]; string ruta = rutaBase + nombreProyecto + "\\Traveler\\" + numeroControl + ".pdf"; string fileName = numeroControl + ".pdf"; FileStream iStream = new FileStream(ruta, FileMode.Open); //, FileAccess.Read, FileShare.Read); response.Content = new StreamContent(iStream); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentDisposition.FileName = fileName; return(response); } } } } 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); } }