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)); }
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); }
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)); }