예제 #1
0
        public JsonResult CambiarEstado(CambiarEstaudoViewModel viewModel)
        {
            var responseObject = new
            {
                responseCode = -1
            };

            if (viewModel == null)
            {
                return(Json(new { responseCode = "-10" }));
            }

            try
            {
                CambiarEstadoLogic(viewModel);
                responseObject = new
                {
                    responseCode = 0
                };
            }
            catch (Exception e)
            {
                responseObject = new
                {
                    responseCode = -10
                };
            }

            return(Json(responseObject));
        }
예제 #2
0
        private void CambiarEstadoLogic(CambiarEstaudoViewModel viewModel)
        {
            Order order       = db.Orders.Where(x => x.Id == viewModel.Id).Include(x => x.OrderProducts).FirstOrDefault();
            int   oldStatudId = order.StatusId;

            order.StatusId = viewModel.StatusId;
            bool esValidoElCambio = false;

            //Verifico si el cambio de estado es correcto
            switch (oldStatudId)
            {
            case (int)StatusOrder.Solicitado:
                //El solicitado Puede pasar a Aceptado, rechazado
                esValidoElCambio = (order.StatusId == (int)StatusOrder.Aceptado || order.StatusId == (int)StatusOrder.Rechazado);
                break;

            case (int)StatusOrder.Aceptado:
                //El entregado Puede pasar a Solicitado, Entregado o rechazado
                esValidoElCambio = (order.StatusId == (int)StatusOrder.Solicitado || order.StatusId == (int)StatusOrder.Entregado || order.StatusId == (int)StatusOrder.Rechazado);
                break;

            case (int)StatusOrder.Rechazado:
                //El solicitado Puede pasar a Aceptado
                esValidoElCambio = (order.StatusId == (int)StatusOrder.Aceptado);
                break;

            case (int)StatusOrder.Entregado:
                //El solicitado Puede pasar a Aceptado
                esValidoElCambio = (order.StatusId == (int)StatusOrder.Aceptado);
                break;

            default:
                esValidoElCambio = false;
                break;
            }

            //if (esValidoElCambio == false)
            //    return Json(new { responseCode = "-10" });


            //Si el estado es Entregado hace una actualizacion automatica del stock
            if (order.StatusId == (int)StatusOrder.Entregado)
            {
                //Recupero los que productos que tiene dados de alta
                var centerProducts = db.CenterProducts.Where(x => x.CenterId == order.CenterId).ToList();

                foreach (var item in order.OrderProducts)
                {
                    var prod = centerProducts.Where(x => x.ProductId == item.ProductId).FirstOrDefault();
                    if (prod != null)
                    {
                        //Ya axiste
                        prod.Stock = prod.Stock + item.QuantityDelivered;
                        //products_upd.Add(prod);
                        db.Entry(prod).State = EntityState.Modified;
                    }
                    else
                    {
                        //Si no existe, lo impacto
                        CenterProduct centerProduct = new CenterProduct
                        {
                            CenterId  = item.Order.CenterId,
                            ProductId = item.ProductId,
                            Stock     = item.QuantityDelivered
                        };

                        db.CenterProducts.Add(centerProduct);
                    }
                }
            }


            db.Entry(order).State = EntityState.Modified;

            OrderTracking tracking = new OrderTracking
            {
                Fecha         = DateTime.Now,
                OrderId       = viewModel.Id,
                ToStatusId    = oldStatudId,
                SinceStatusId = viewModel.StatusId,
                UsuarioId     = SessionHelper.GetUser(),
                Observation   = viewModel.Observation
            };

            db.OrderTrackings.Add(tracking);

            db.SaveChanges();

            AuditHelper.Auditar("Modificacion", order.Id.ToString(), className, ModuleDescription, WindowDescription);
        }
예제 #3
0
        public JsonResult EditOrder(OrderEditViewModel orderEdit)
        {
            Usuario usuario        = db.Usuarios.Find(SessionHelper.GetUser());
            bool    isAdmin        = usuario.Rol.IsAdmin;
            var     responseObject = new
            {
                responseCode = -1
            };

            if (orderEdit == null)
            {
                return(Json(new { responseCode = "-10" }));
            }

            try
            {
                int   usuarioId = SessionHelper.GetUser();
                Order order     = db.Orders.Find(orderEdit.Id);
                List <OrderProduct> order_add = new List <OrderProduct>();
                List <OrderProduct> order_upd = new List <OrderProduct>();
                List <OrderProduct> order_dtl = new List <OrderProduct>();


                //Estos son los que se modificaron o agregaron
                foreach (var item in orderEdit.OrderProductViewModels)
                {
                    var productoDB = order.OrderProducts.Where(x => x.ProductId == item.ProductId).FirstOrDefault();

                    OrderProduct orderProduct = new OrderProduct
                    {
                        OrderId   = orderEdit.Id,
                        ProductId = item.ProductId,
                        Quantity  = productoDB?.Quantity ?? 0
                    };

                    //Si es Admin modifica la cantidad entregada, si es un operador modifica la cantidad solicitada
                    if (isAdmin)
                    {
                        orderProduct.QuantityDelivered = item.QuantityDelivered;
                    }
                    else
                    {
                        orderProduct.Quantity = item.Quantity;
                    }

                    //Si el producto ya estaba dado de alta lo modifico
                    if (productoDB != null)
                    {
                        orderProduct.Id = productoDB.Id;
                        order_upd.Add(orderProduct);
                    }
                    else
                    {
                        order_add.Add(orderProduct);
                    }
                }


                //Ahora faltan los que ya no vienieron



                List <int> tempIdList = order_upd.Select(x => x.Id).ToList();

                order_dtl = order.OrderProducts.Where(x => x.QuantityDelivered == 0).Where(q => !tempIdList.Contains(q.Id)).ToList();

                foreach (var item in order.OrderProducts)
                {
                    var orden = order_upd.Where(x => x.Id == item.Id).FirstOrDefault();
                    if (orden != null)
                    {
                        if (isAdmin)
                        {
                            item.QuantityDelivered = orden.QuantityDelivered;
                        }
                        else
                        {
                            item.Quantity = orden.Quantity;
                        }
                    }
                }

                foreach (var item in order_add)
                {
                    //order.OrderProducts.Add(item);
                    db.OrderProducts.Add(item);
                }

                if (!isAdmin)
                {
                    foreach (var item in order_dtl)
                    {
                        //order.OrderProducts.Remove(item);
                        db.OrderProducts.Remove(item);
                    }
                }



                db.Entry(order).State = EntityState.Modified;



                db.SaveChanges();


                if (orderEdit.ChangeStatus)
                {
                    // order.StatusId = (int)StatusOrder.Entregado;
                    CambiarEstaudoViewModel cambiarEstado = new CambiarEstaudoViewModel
                    {
                        Id       = order.Id,
                        StatusId = (int)StatusOrder.Entregado
                    };
                    CambiarEstadoLogic(cambiarEstado);
                }


                AuditHelper.Auditar("Modificacion", order.Id.ToString(), className, ModuleDescription, WindowDescription);
                responseObject = new
                {
                    responseCode = 0
                };
            }
            catch (Exception e)
            {
                responseObject = new
                {
                    responseCode = -10
                };
            }

            return(Json(responseObject));
        }