// GET: PreparacionBarro/Edit/5
        public ActionResult Edit(int id)
        {
            ViewBag.Loc = (int)HttpContext.Application["Locacion"];
            PreparacionBarroConsumo PreBarCon = tsvc.detallePreparacionBarroConsumo(id);

            ViewBag.lstRecervas   = tsvc.getReservasFrom((int)PreBarCon.Locacion);
            ViewBag.lstLocaciones = tsvc.obtenerSucursales(ViewBag.Loc);
            return(View(PreBarCon));
        }
        // GET: PreparacionBarro/Create
        public ActionResult Create()
        {
            ViewBag.Loc            = (int)HttpContext.Application["Locacion"];
            ViewBag.NombreLocacion = tsvc.getNombreSucursal(ViewBag.Loc);
            List <ReservaBarro> lstReservas = tsvc.getReservasFrom(ViewBag.Loc);

            ViewBag.lstLuz        = lstReservas;
            ViewBag.lstLocaciones = tsvc.obtenerSucursales(ViewBag.Loc);

            PreparacionBarroConsumo PreBar = new PreparacionBarroConsumo();

            PreBar.FechaPreparacion     = DateTime.Today;
            PreBar.NumPreparado         = tsvc.getNumeroPreparado(ViewBag.Loc);
            PreBar.BarroBlanco          = 105;
            PreBar.BarroNegro           = 150;
            PreBar.Locacion             = ViewBag.Loc;
            PreBar.lstConsumoBarroNegro = lstReservas.Where(x => x.Tipo == "Negro")
                                          .Select(y => new ReservaBarroPreparado()
            {
                CodigoBarro = y.CodigoBarro,
                Tipo        = y.Tipo,
                Capacidad   = y.Capacidad,
                Unidades    = y.Unidades,
                TotalKg     = y.TotalKg
            }).ToList();

            PreBar.lstConsumoBarroBlanco = lstReservas.Where(x => x.Tipo == "Blanco")
                                           .Select(y => new ReservaBarroPreparado()
            {
                CodigoBarro = y.CodigoBarro,
                Tipo        = y.Tipo,
                Capacidad   = y.Capacidad,
                Unidades    = y.Unidades,
                TotalKg     = y.TotalKg
            }).ToList();

            return(View(PreBar));
        }
        public ActionResult Create(PreparacionBarroConsumo pPreBar)
        {
            ViewBag.Loc = (int)HttpContext.Application["Locacion"];
            if (ModelState.IsValid)
            {
                double?tmpBarNeg = pPreBar.BarroNegro;
                double?SumBN     = pPreBar.lstConsumoBarroNegro.Select(x => new { TotalSolicitado = x.Capacidad * x.BarroUsado }).Sum(x => x.TotalSolicitado);
                double?SumBB     = pPreBar.lstConsumoBarroBlanco.Select(x => new { TotalSolicitado = x.Capacidad * x.BarroUsado }).Sum(x => x.TotalSolicitado);

                List <BarroMovimientos> lst = new List <BarroMovimientos>();
                pPreBar.Estado = "Disponible";
                PreparacionBarro PB = new PreparacionBarro()
                {
                    Id = pPreBar.Id,
                    FechaPreparacion  = pPreBar.FechaPreparacion,
                    NumPreparado      = pPreBar.NumPreparado,
                    BarroNegro        = pPreBar.BarroNegro,
                    BarroBlanco       = pPreBar.BarroBlanco,
                    Recuperado        = pPreBar.Recuperado,
                    EnPiedra          = pPreBar.EnPiedra,
                    TiempoAgitacion   = pPreBar.TiempoAgitacion,
                    NumTambos         = pPreBar.NumTambos,
                    DesperdicioMojado = pPreBar.DesperdicioMojado,
                    Comentario        = pPreBar.Comentario,
                    Estado            = pPreBar.Estado,
                    Locacion          = pPreBar.Locacion,
                    Editor            = User.Identity.Name,
                    FechaEdicion      = DateTime.Now
                };

                //Si las recercas asignadas para cubrir el barro Negro solicitado son mayores, se cubre el pedido, en caso contrario se solicita asignar mas recervas.
                if (pPreBar.BarroNegro <= SumBN)
                {
                    //Si las recercas asignadas para cubrir el barro Blanco solicitado son mayores, se cubre el pedido, en caso contrario se solicita asignar mas recervas.
                    if (pPreBar.BarroBlanco <= SumBB)
                    {
                        int idPreparacion = tsvc.addPreparacionBarro(PB);
                        if (idPreparacion != -1)
                        {
                            var lstBarMovNegro = calculaBarroMovimientos(pPreBar.lstConsumoBarroNegro, (int)pPreBar.BarroNegro, PB, idPreparacion);
                            lst.AddRange(lstBarMovNegro);

                            var lstBarMovBlanco = calculaBarroMovimientos(pPreBar.lstConsumoBarroBlanco, (int)pPreBar.BarroBlanco, PB, idPreparacion);
                            lst.AddRange(lstBarMovBlanco);

                            List <BarroMovimientos> lstVariaciones = calculaBarroMovimientosVariaciones(PB, idPreparacion);

                            //Por ultimo se registran los movimientos en BD.
                            int res2 = tsvc.addMovimientosBarro(lst);
                            if (res2 > 0)
                            {
                                if (lstVariaciones.Count > 0)
                                {
                                    int res3 = tsvc.addMovimientosBarro(lstVariaciones);
                                    if (res3 > 0)
                                    {
                                        return(RedirectToAction("Index", new { pLoc = ViewBag.Loc }));
                                    }
                                }
                                else
                                {
                                    return(RedirectToAction("Index", new { pLoc = ViewBag.Loc }));
                                }
                            }
                        }
                        else
                        {
                            ViewBag.txtMensaje = "No se pudo crear la preparación, vuelva a intentarlo más tarde.";
                        }
                    }
                    else //Como las recervas son menores al barro solicitado, se pide una cantidad mayor de recervas.
                    {
                        ViewBag.txtMensaje = "Es necesario que asignes reservas de barro blanco mayores que el barro blanco solicitado para la preparación.";
                    }
                }
                else //Como las recervas son menores al barro solicitado, se pide una cantidad mayor de recervas.
                {
                    ViewBag.txtMensaje = "Es necesario que asignes reservas de barro mayores que el barro negro solicitado para la preparación.";
                }
            }

            List <ReservaBarro> lstReservas = tsvc.getReservasFrom((int)pPreBar.Locacion);

            ViewBag.lstLuz        = lstReservas;
            ViewBag.lstLocaciones = tsvc.obtenerSucursales(ViewBag.Loc);
            return(View(pPreBar));
        }