public ActionResult Crear(Guid? TipoMovimientoID, bool? HaciaExposicion)
        {
            bool HaciaExposicionValor = HaciaExposicion == null || HaciaExposicion == false ? false : true;

            bool esOK = true;

            var listaMovAceptados = new List<string>() { "externo", "ingreso", "salida", "traslado" };

            var tipoMov = db.TipoMovimientos.Find(TipoMovimientoID);

            esOK = tipoMov == null ? false : true;

            esOK = esOK ? listaMovAceptados.Any(a => a == tipoMov.Nombre.ToLower()) : false;

            List<string> listaCampos = new List<string>();

            if (esOK)
            {

                int UltimoFolioMov = db.Movimientos.Select(a => a.FolioMovimiento).OrderByDescending(a => a).FirstOrDefault();

                var mov = new Movimiento()
                {
                    EstadoMovimiento = EstadoMovimiento.EnRegistro,
                    FolioMovimiento = UltimoFolioMov + 1,
                    HaciaExposicion = HaciaExposicionValor,
                    TipoMovimiento = tipoMov,
                    TipoMovimientoID = tipoMov.TipoMovimientoID,
                    ColeccionTexto = "Museo Soumaya"
                };

                listaCampos = getListaCamposMostrar(tipoMov.Nombre, EstadoMovimiento.EnRegistro);

                if (HaciaExposicionValor)
                {
                    mov.MovimientoExposicion = new MovimientoExposicion();
                    listaCampos.Add("pestExpo");
                }

                switch (tipoMov.Nombre.ToLower())
                {
                    case "externo":
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                        //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                        break;
                    case "ingreso":
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                        mov.MovimientoResponsable = new MovimientoResponsable();
                        //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                        mov.MovimientoTransporte = new MovimientoTransporte();
                        mov.MovimientoSeguro = new MovimientoSeguro();

                        break;
                    case "salida":
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                        mov.MovimientoResponsable = new MovimientoResponsable();
                        //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                        mov.MovimientoTransporte = new MovimientoTransporte();
                        mov.MovimientoSeguro = new MovimientoSeguro();

                        break;
                    case "traslado":
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                        //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                        mov.MovimientoTransporte = new MovimientoTransporte();
                        break;

                    default:
                        //mov.MovimientoSolicitante = new MovimientoSolicitante();
                        //if (HaciaExposicion)
                        //    mov.MovimientoExposicion = new MovimientoExposicion();
                        //mov.MovimientoResponsable = new MovimientoResponsable();
                        //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                        //mov.MovimientoTransporte = new MovimientoTransporte();
                        //mov.MovimientoSeguro = new MovimientoSeguro();
                        esOK = false;
                        break;
                }

                if (esOK)
                {
                    mov.FechaRegistro = DateTime.Now;
                    mov.FechaHoraMovimiento = DateTime.Now;

                    if (HaciaExposicionValor)
                        mov.MovimientoExposicion.FechaInicial = DateTime.Now;

                    var listaUbicaciones = db.Ubicaciones.Where(a => a.Status).Select(a => new { a.Nombre, a.UbicacionID }).OrderBy(a => a.Nombre);
                    var listaUsuarios = db.Usuarios.Where(a => a.Status).Select(a => new { Nombre = a.Nombre + " " + a.Apellido, a.UsuarioID }).OrderBy(a => a.Nombre);

                    var tipoAttGuion = db.TipoAtributos.FirstOrDefault(a => a.Temp == "guion_clave");
                    var listaGuiones = tipoAttGuion.ListaValores.Where(a => a.Status).Select(a => new { Nombre = a.Valor, GuionID = a.ListaValorID }).OrderBy(a => a.Nombre);
                    var listaLetras = db.LetraFolios.Select(a => new { a.LetraFolioID, Nombre = a.Nombre, a.Status }).Where(a => a.Status).OrderBy(a => a.Nombre);

                    ViewBag.NombreMovimiento = tipoMov.Nombre.ToLower();

                    //ViewBag.MovimientoAutorizacion_Usuario1ID = new SelectList(listaUsuarios, "UsuarioID", "Nombre");
                    //ViewBag.MovimientoAutorizacion_Usuario2ID = new SelectList(listaUsuarios, "UsuarioID", "Nombre");

                    ViewBag.UbicacionDestinoID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre");
                    ViewBag.UbicacionOrigenID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre");

                    ViewBag.GuionID = new SelectList(listaGuiones, "GuionID", "Nombre");
                    ViewBag.LetraFolioID = new SelectList(listaLetras, "LetraFolioID", "Nombre", listaLetras.FirstOrDefault().LetraFolioID);
                    ViewBag.listaCampos = listaCampos;
                    Session["listaMov"] = new List<Guid>();

                    return PartialView("_Crear", mov);
                }
            }

            ViewBag.Mensaje = "Se encontro un error, solicite asistencia técnica.";
            return PartialView("_Error");
        }
        public ActionResult Crear(Movimiento mov)
        {
            //validar los campos:
            var listaGuidSessionPiezas = Session["listaMov"] == null ? new List<Guid>() : (List<Guid>)Session["listaMov"];
            var listaMovimientoPiezas = new List<MovimientoPieza>();

            bool todoOk = true;

            todoOk = (listaGuidSessionPiezas.Count == 0) ? false : true;

            if (todoOk)
            {
                //lista piezas
                var listaIDLLaves = Request.Form.AllKeys.Where(a => a.StartsWith("addPiezaID_")).ToList();

                foreach (var keyID in listaIDLLaves)
                {
                    var addOk = true;
                    string valor = Request.Form[keyID];
                    addOk = String.IsNullOrWhiteSpace(valor) ? false : true;
                    //validar el valorID, buscar el valor
                    Guid valorID = addOk ? new Guid(valor) : new Guid(new Byte[16]);

                    addOk = !addOk ? addOk : db.Piezas.Where(a => a.PiezaID == valorID).FirstOrDefault() == null ? false : true;

                    if (addOk)
                    {
                        listaMovimientoPiezas.Add(new MovimientoPieza()
                        {
                            PiezaID = valorID,
                            estaDisponible = false,
                        });
                    }

                }
            }
            else
            {
                ModelState.AddModelError("", "Movimiento sin piezas");
            }

            //validar fechas

            if (ModelState.IsValid)
            {
                //mov.MovientoID = Guid.NewGuid();
                //var movNew = new Movimiento()
                //{
                //    ColeccionTexto = mov.ColeccionTexto,
                //    EstadoMovimiento = mov.EstadoMovimiento,
                //    FechaHoraMovimiento = mov.FechaHoraMovimiento,
                //    FechaRegistro = mov.FechaRegistro,
                //    FechaRet = mov.FechaRet,
                //    FolioMovimiento = UltimoFolioMov + 1,
                //    HaciaExposicion = mov.HaciaExposicion,
                //    MovientoID = Guid.NewGuid(),
                //    Observaciones = mov.Observaciones,
                //    TipoMovimientoID = mov.TipoMovimientoID,
                //    UbicacionDestinoID = mov.UbicacionDestinoID,
                //    UbicacionOrigenID = mov.UbicacionOrigenID,
                //};

                if (mov.MovimientoAutorizacion != null)
                {
                    db.MovimientoAutorizaciones.Add(mov.MovimientoAutorizacion);
                    db.SaveChanges();
                    mov.MovimientoAutorizacionID = mov.MovimientoAutorizacion.MovimientoAutorizacionID;
                }

                if (mov.MovimientoExposicion != null)
                {
                    db.MovimientoExposiciones.Add(mov.MovimientoExposicion);
                    db.SaveChanges();
                    mov.MovimientoExposicionID = mov.MovimientoExposicion.MovimientoExposicionID;

                }

                if (mov.MovimientoResponsable != null)
                {
                    db.MovimientoResponsables.Add(mov.MovimientoResponsable);
                    db.SaveChanges();
                    mov.MovimientoResponsableID = mov.MovimientoResponsable.MovimientoResponsableID;

                }

                if (mov.MovimientoSeguro != null)
                {
                    db.MovimientoSeguros.Add(mov.MovimientoSeguro);
                    db.SaveChanges();
                    mov.MovimientoSeguroID = mov.MovimientoSeguro.MovimientoSeguroID;

                }

                if (mov.MovimientoSolicitante != null)
                {
                    db.MovimientoSolicitante.Add(mov.MovimientoSolicitante);
                    db.SaveChanges();
                    mov.MovimientoSolicitanteID = mov.MovimientoSolicitante.MovimientoSolicitanteID;

                }

                if (mov.MovimientoTransporte != null)
                {
                    db.MovimientoTransporte.Add(mov.MovimientoTransporte);
                    db.SaveChanges();
                    mov.MovimientoTransporteID = mov.MovimientoTransporte.MovimientoTransporteID;

                }

                int UltimoFolioMov = db.Movimientos.Select(a => a.FolioMovimiento).OrderByDescending(a => a).FirstOrDefault();
                mov.FolioMovimiento = UltimoFolioMov + 1;
                mov.MovientoID = Guid.NewGuid();
                mov.EstadoMovimiento = EstadoMovimiento.EnAutorizacion1;
                db.Movimientos.Add(mov);
                db.SaveChanges();

                //agregar las piezas

                foreach (var item in listaMovimientoPiezas)
                {
                    item.MovimientoID = mov.MovientoID;
                    item.estaDisponible = false;
                }

                db.MovimientoPiezas.AddRange(listaMovimientoPiezas);
                db.SaveChanges();

                //return RedirectToAction("Index");

                var url = Url.Action("Detalles", "Movimiento", new { id = mov.MovientoID });

                return Json(new { success = true, url = url });
            }

            //var success = false;
            bool HaciaExposicionValor = mov.HaciaExposicion;

            bool esOK = true;

            var listaMovAceptados = new List<string>() { "externo", "ingreso", "salida", "traslado" };

            var tipoMov = db.TipoMovimientos.Find(mov.TipoMovimientoID);

            esOK = tipoMov == null ? false : true;
            esOK = esOK ? listaMovAceptados.Any(a => a == tipoMov.Nombre.ToLower()) : false;

            List<string> listaCampos = new List<string>();

            int UltimoFolioMovc = db.Movimientos.Select(a => a.FolioMovimiento).OrderByDescending(a => a).FirstOrDefault();

            mov.EstadoMovimiento = EstadoMovimiento.EnRegistro;
            mov.FolioMovimiento = UltimoFolioMovc + 1;
            mov.TipoMovimiento = tipoMov;
            mov.TipoMovimientoID = tipoMov.TipoMovimientoID;

            if (HaciaExposicionValor && mov.MovimientoExposicion == null)
                mov.MovimientoExposicion = new MovimientoExposicion();

            listaCampos = getListaCamposMostrar(tipoMov.Nombre, EstadoMovimiento.EnRegistro);

            switch (tipoMov.Nombre.ToLower())
            {
                case "externo":
                    if (mov.MovimientoSolicitante == null)
                        mov.MovimientoSolicitante = new MovimientoSolicitante();

                    //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                    break;
                case "ingreso":
                    if (mov.MovimientoSolicitante == null)
                        mov.MovimientoSolicitante = new MovimientoSolicitante();

                    if (mov.MovimientoResponsable == null)
                        mov.MovimientoResponsable = new MovimientoResponsable();

                    //mov.MovimientoAutorizacion = new MovimientoAutorizacion();

                    if (mov.MovimientoTransporte == null)
                        mov.MovimientoTransporte = new MovimientoTransporte();

                    if (mov.MovimientoSeguro == null)
                        mov.MovimientoSeguro = new MovimientoSeguro();
                    break;
                case "salida":
                    if (mov.MovimientoSolicitante == null)
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                    if (mov.MovimientoResponsable == null)
                        mov.MovimientoResponsable = new MovimientoResponsable();

                    //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                    if (mov.MovimientoTransporte == null)
                        mov.MovimientoTransporte = new MovimientoTransporte();
                    if (mov.MovimientoSeguro == null)
                        mov.MovimientoSeguro = new MovimientoSeguro();

                    break;
                case "traslado":
                    if (mov.MovimientoSolicitante == null)
                        mov.MovimientoSolicitante = new MovimientoSolicitante();
                    //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                    if (mov.MovimientoTransporte == null)
                        mov.MovimientoTransporte = new MovimientoTransporte();

                    break;

                default:
                    //mov.MovimientoSolicitante = new MovimientoSolicitante();
                    //if (HaciaExposicion)
                    //    mov.MovimientoExposicion = new MovimientoExposicion();
                    //mov.MovimientoResponsable = new MovimientoResponsable();
                    //mov.MovimientoAutorizacion = new MovimientoAutorizacion();
                    //mov.MovimientoTransporte = new MovimientoTransporte();
                    //mov.MovimientoSeguro = new MovimientoSeguro();
                    esOK = false;
                    break;
            }

            if (esOK)
            {
                mov.FechaRegistro = DateTime.Now;
                //mov.FechaHoraMovimiento = DateTime.Now;

                var listaUbicaciones = db.Ubicaciones.Where(a => a.Status).Select(a => new { a.Nombre, a.UbicacionID }).OrderBy(a => a.Nombre);
                var listaUsuarios = db.Usuarios.Where(a => a.Status).Select(a => new { Nombre = a.Nombre + " " + a.Apellido, a.UsuarioID }).OrderBy(a => a.Nombre);

                var tipoAttGuion = db.TipoAtributos.FirstOrDefault(a => a.Temp == "guion_clave");
                var listaGuiones = tipoAttGuion.ListaValores.Where(a => a.Status).Select(a => new { Nombre = a.Valor, GuionID = a.ListaValorID }).OrderBy(a => a.Nombre);
                var listaLetras = db.LetraFolios.Select(a => new { a.LetraFolioID, Nombre = a.Nombre, a.Status }).Where(a => a.Status).OrderBy(a => a.Nombre);

                ViewBag.NombreMovimiento = tipoMov.Nombre.ToLower();

                //ViewBag.MovimientoAutorizacion_Usuario1ID = new SelectList(listaUsuarios, "UsuarioID", "Nombre");
                //ViewBag.MovimientoAutorizacion_Usuario2ID = new SelectList(listaUsuarios, "UsuarioID", "Nombre");

                ViewBag.UbicacionDestinoID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre", mov.UbicacionDestinoID);
                ViewBag.UbicacionOrigenID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre", mov.UbicacionOrigenID);

                ViewBag.GuionID = new SelectList(listaGuiones, "GuionID", "Nombre");
                ViewBag.LetraFolioID = new SelectList(listaLetras, "LetraFolioID", "Nombre", listaLetras.FirstOrDefault().LetraFolioID);
                ViewBag.listaCampos = listaCampos;

            }

            return PartialView("_Crear", mov);
        }
        public ActionResult Index()
        {
            ViewBag.TipoMovimientoID = new SelectList(db.TipoMovimientos, "TipoMovimientoID", "Nombre");

            var mov = new Movimiento()
            {
                HaciaExposicion = false,
                FechaHoraMovimiento = DateTime.Now
            };

            var listaUbicaciones = db.Ubicaciones.Where(a => a.Status).Select(a => new { a.Nombre, a.UbicacionID }).OrderBy(a => a.Nombre);

            ViewBag.UbicacionDestinoID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre");
            ViewBag.UbicacionOrigenID = new SelectList(listaUbicaciones, "UbicacionID", "Nombre");

            return View(mov);
        }