private bool EjecutarMovimiento(MovimientoTemp mov, EstadoMovimientoTemp Estado, DateTime Fecha, string Motivo = null) { bool bandera = false; try { db = new RecordFCSContext(); Motivo = Motivo ?? "Ejecución del movimiento."; //Revalidar las piezas del movimiento que fueron validas y que no se hayan movido y sean pendientes int contadorPMovidas = 0; foreach (var PiezaID in mov.MovimientoTempPiezas.Where(a => !a.EnError && !a.SeMovio && a.EsPendiente).Select(a => a.PiezaID).ToList()) { #region Buscar la pieza con su movimiento //Buscar la pieza y la pieza en el movimiento var pieza = db.Piezas.Find(PiezaID); var piezaEnMovReal = pieza.MovimientoTempPiezas.FirstOrDefault(a => a.MovimientoTempID == mov.MovimientoTempID); #endregion #region Declaracion y asignaciones piezaEnMovReal.EnError = false; piezaEnMovReal.EsPendiente = true; piezaEnMovReal.SeMovio = false; string comentario = ""; #endregion #region Validacion 1: Asignada en movimientos #region Buscar donde sea Pendiente y sin errores //lista de movimientos ID //Buscar la pieza en todos los movimientos excepto este, donde sea pendiente y no tenga errrores. List<int> listaMov_ID = db.MovimientoTempPiezas .Where(a => a.PiezaID == PiezaID && a.MovimientoTempID != mov.MovimientoTempID && a.EsPendiente && !a.EnError ) .Select(a => a.MovimientoTemp.Folio).ToList(); #endregion #region Buscar en Concluido sin validar listaMov_ID.AddRange( db.MovimientoTempPiezas.Where(a => a.PiezaID == PiezaID && a.MovimientoTempID != mov.MovimientoTempID && a.MovimientoTemp.EstadoMovimiento == EstadoMovimientoTemp.Concluido_SinValidar && a.SeMovio).Select(a => a.MovimientoTemp.Folio).ToList() ); #endregion #region Buscar en Cancelado listaMov_ID.AddRange( db.MovimientoTempPiezas.Where(a => a.PiezaID == PiezaID && a.MovimientoTempID != mov.MovimientoTempID && a.MovimientoTemp.EstadoMovimiento == EstadoMovimientoTemp.Cancelado && a.SeMovio).Select(a => a.MovimientoTemp.Folio).ToList() ); #endregion #region Buscar en Retornado listaMov_ID.AddRange( db.MovimientoTempPiezas.Where(a => a.PiezaID == PiezaID && a.MovimientoTempID != mov.MovimientoTempID && a.MovimientoTemp.EstadoMovimiento == EstadoMovimientoTemp.Retornado && a.SeMovio).Select(a => a.MovimientoTemp.Folio).ToList() ); #endregion //Si existe con estas condiciones entonces no es disponible foreach (var Folio in listaMov_ID) comentario += " [" + Folio + "]"; //Comprobar que no haya estado en algun movimiento if (!string.IsNullOrWhiteSpace(comentario)) { piezaEnMovReal.Comentario = "Asignada en:" + comentario + ". "; piezaEnMovReal.EnError = true; } #endregion #region Validacion 2: Ubicacion //validar que la ubicacion de la pieza sea la misma que este movimiento //puede haber piezas que UbicacionID sea null y en este caso se concidera valida. if (pieza.UbicacionID != null) { //Validar que la ubicacion Origen sea igual a la de la pieza if (mov.UbicacionOrigenID != pieza.UbicacionID) { piezaEnMovReal.Comentario += "No comparte la misma ubicación origen. "; piezaEnMovReal.EnError = true; } } #endregion #region Validacion 3: En ultimo movimiento if (pieza.MovimientoTempPiezas.Where(a => a.Orden > piezaEnMovReal.Orden && !a.EnError).Count() > 0) { piezaEnMovReal.Comentario += "No esta en su último movimiento. "; piezaEnMovReal.EnError = true; } #endregion //Sin errores entoces proceder a realizar el cambio de ubicacion #region Cambio de Ubicacion if (!piezaEnMovReal.EnError) { //Sin errores #region Asignar un orden al movimiento de la pieza if (piezaEnMovReal.Orden == 0) { var ordenActual = pieza.MovimientoTempPiezas.Count > 0 ? pieza.MovimientoTempPiezas.OrderByDescending(a => a.Orden).FirstOrDefault().Orden : 0; piezaEnMovReal.Orden = piezaEnMovReal.EnError ? 0 : ordenActual + 1; } #endregion //Ejecutar el cambio de ubicacion pieza.UbicacionID = mov.UbicacionDestinoID; //------ Logica HISTORIAL #region Generar el historial //objeto del formulario var objeto = pieza; //Objeto de la base de datos var objetoDB = db.Piezas.Find(pieza.PiezaID); //tabla o clase a la que pertenece var tablaNombre = "Pieza"; //llave primaria del objeto var llavePrimaria = objetoDB.PiezaID.ToString(); //generar el historial var historialLog = HistorialLogica.EditarEntidad( objeto, objetoDB, tablaNombre, llavePrimaria, User.UsuarioID, db, Motivo + "[Forzado]", Fecha ); #endregion #region Guardar el historial if (historialLog != null) { //Cambiar el estado a la entidad a modificada db.Entry(objetoDB).State = EntityState.Modified; //Guardamos la entidad modificada db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog); db.SaveChanges(); contadorPMovidas++; piezaEnMovReal.SeMovio = true; piezaEnMovReal.EsPendiente = false; piezaEnMovReal.EnError = false; piezaEnMovReal.Comentario = ""; } else { throw new Exception(); } #endregion //------ } else { //Con errores piezaEnMovReal.Orden = 0; } pieza = null; #endregion #region Asignacion de nuevos valores //buscar el objeto var itemTemp = db.MovimientoTempPiezas.Find(mov.MovimientoTempID, PiezaID); itemTemp.Comentario = piezaEnMovReal.Comentario; itemTemp.EnError = piezaEnMovReal.EnError; itemTemp.EsPendiente = piezaEnMovReal.EsPendiente; itemTemp.Orden = piezaEnMovReal.Orden; itemTemp.SeMovio = piezaEnMovReal.SeMovio; piezaEnMovReal = null; #endregion //------ Logica HISTORIAL #region Generar el historial //objeto del formulario var objeto2 = itemTemp; //Objeto de la base de datos var objetoDB2 = db.MovimientoTempPiezas.Find(mov.MovimientoTempID, PiezaID); //tabla o clase a la que pertenece var tablaNombre2 = "MovimientoTempPieza"; //llave primaria del objeto var llavePrimaria2 = objetoDB2.MovimientoTempID + "," + objetoDB2.PiezaID; //generar el historial var historialLog2 = HistorialLogica.EditarEntidad( objeto2, objetoDB2, tablaNombre2, llavePrimaria2, User.UsuarioID, db, Motivo + "[Forzado]", Fecha ); #endregion #region Guardar el historial if (historialLog2 != null) { //Cambiar el estado a la entidad a modificada db.Entry(objetoDB2).State = EntityState.Modified; //Guardamos la entidad modificada db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog2); db.SaveChanges(); } else { throw new Exception(); } #endregion //------ } //Cambio del estatus //Solo si se actualizo la ubicacion de por lo menos 1 pieza if (contadorPMovidas > 0) { //saber cual sera el estatus Concluido ó Concluido_SinValidar if (mov.EsValido) mov.EstadoMovimiento = EstadoMovimientoTemp.Concluido; else mov.EstadoMovimiento = EstadoMovimientoTemp.Concluido_SinValidar; } //------ Logica HISTORIAL #region Generar el historial //objeto del formulario var objeto3 = mov; //Objeto de la base de datos var objetoDB3 = db.MovimientosTemp.Find(mov.MovimientoTempID); //tabla o clase a la que pertenece var tablaNombre3 = "MovimientoTemp"; //llave primaria del objeto var llavePrimaria3 = objetoDB3.MovimientoTempID.ToString(); //generar el historial var historialLog3 = HistorialLogica.EditarEntidad( objeto3, objetoDB3, tablaNombre3, llavePrimaria3, User.UsuarioID, db, Motivo + "[Forzado]", Fecha ); #endregion #region Guardar el historial if (historialLog3 != null) { //Cambiar el estado a la entidad a modificada db.Entry(objetoDB3).State = EntityState.Modified; //Guardamos la entidad modificada db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog3); db.SaveChanges(); } else { throw new Exception(); } #endregion //------ } catch (Exception) { bandera = false; } return bandera; }
public ActionResult BuscarMovimientos(int? FolioMovimiento, string FechaInicial, string FechaFinal, Guid? UbicacionOrigenID, Guid? UbicacionDestinoID, string PalabraFrase, EstadoMovimientoTemp? EstadoMovimiento, int? pagina = null) { db = new RecordFCSContext(); int pagTamano = 50; int pagIndex = 1; pagIndex = pagina.HasValue ? Convert.ToInt32(pagina) : 1; IQueryable<MovimientoTemp> listaMovimientos = db.MovimientosTemp; IPagedList<MovimientoTemp> listaMovimientosEnPagina; if (FolioMovimiento != null && FolioMovimiento > 0) { //realizar la busqueda exclusiva del folio de movimiento listaMovimientos = listaMovimientos.Where(a => a.Folio == FolioMovimiento); } else { //if (!string.IsNullOrWhiteSpace(FolioObraPieza)) //{ // //realizar la busqueda exclusica del folio de la obra o pieza // listaMovimientos = listaMovimientos.Where(a => a.MovimientoTempPiezas.Any(b => (b.Pieza.Obra.LetraFolio.Nombre + b.Pieza.Obra.NumeroFolio) == FolioObraPieza || (b.Pieza.Obra.LetraFolio.Nombre + b.Pieza.Obra.NumeroFolio + b.Pieza.SubFolio) == FolioObraPieza)); //} //Buscar por fecha Iniciar if (!string.IsNullOrWhiteSpace(FechaInicial)) { //Fecha menor DateTime Fecha = DateTime.ParseExact(FechaInicial, "dd/MM/yyyy hh:mm tt", CultureInfo.InvariantCulture); listaMovimientos = listaMovimientos.Where(a => DateTime.Compare(a.FechaSalida.Value, Fecha) > 0); } //Buscar por fecha Final if (!string.IsNullOrWhiteSpace(FechaFinal)) { //Fecha mayor DateTime Fecha = DateTime.ParseExact(FechaFinal, "dd/MM/yyyy hh:mm tt", CultureInfo.InvariantCulture); listaMovimientos = listaMovimientos.Where(a => DateTime.Compare(a.FechaSalida.Value, Fecha) < 0); } //Buscar por Ubicacion Origen if (UbicacionOrigenID != null) listaMovimientos = listaMovimientos.Where(a => a.UbicacionOrigenID == UbicacionOrigenID); //Buscar por Ubicacion Destino if (UbicacionDestinoID != null) listaMovimientos = listaMovimientos.Where(a => a.UbicacionDestinoID == UbicacionDestinoID); //Buscar por Palabra o Frase if (!string.IsNullOrEmpty(PalabraFrase)) listaMovimientos = listaMovimientos.Where(a => a.Observaciones.Contains(PalabraFrase) || a.Exposicion_Titulo.Contains(PalabraFrase) || a.Seguro_Notas.Contains(PalabraFrase) || a.Transporte_Notas.Contains(PalabraFrase) || a.Transporte_Recorrido.Contains(PalabraFrase) ); //Buscar por Estado del movimiento if (EstadoMovimiento != null) listaMovimientos = listaMovimientos.Where(a => a.EstadoMovimiento == EstadoMovimiento); } listaMovimientosEnPagina = listaMovimientos.OrderByDescending(a => a.FechaSalida).Select(x => x).ToList().ToPagedList(pagIndex, pagTamano); return PartialView("_Lista", listaMovimientosEnPagina); }
public bool EjecutarMovimiento(Guid? id, EstadoMovimientoTemp Estado, DateTime? Fecha = null) { db = new RecordFCSContext(); bool bandera = false; Fecha = Fecha ?? DateTime.Now; try { if (id != null) { MovimientoTemp mov = db.MovimientosTemp.Find(id); if (mov != null) if (mov.MovimientoTempPiezas.Where(a => !a.SeMovio && a.EsPendiente && !a.EnError).Count() > 0) EjecutarMovimiento(mov, Estado, Fecha.Value); } } catch (Exception) { bandera = false; } return bandera; }