@SuppressWarnings("unchecked") @ResponseBody @RequestMapping(value = "/order/updateOrderDelivery.ajax", method = RequestMethod.POST) public ResponseEntity<byte[]> updateOrderDelivery( HttpServletRequest request, @RequestParam(value = "body") String body) throws Exception { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Updating order delivery type"); } Map<String, Object> model = new HashMap<String, Object>(); try { // Extract request parameters Map<String, Object> params = (Map<String, Object>) jsonUtils.deserialize(body); String orderId = (String) params.get("orderId"); String deliveryType = (String) params.get("deliveryType"); Integer dayOffset = Integer.valueOf((String) params.get("dayIndex")); String time = (String) params.get("time"); // Get the order and update the delivery type Order order = orderRepository.findByOrderId(orderId); order.setDeliveryType(deliveryType); // Clear existing expected delivery/collection times order.setExpectedCollectionTime(null); order.setExpectedDeliveryTime(null); // If the selected time is 'ASAP' no need to do any processing if (!"ASAP".equals(time)) { DateTime now = new DateTime().plusDays(dayOffset); MutableDateTime expectedDate = new MutableDateTime( now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), 0, 0, 0, 0); Integer hour = Integer.valueOf(time.split(":")[0]); Integer minute = Integer.valueOf(time.split(":")[1]); expectedDate.setHourOfDay(hour); expectedDate.setMinuteOfHour(minute); if (Order.DELIVERY.equals(deliveryType)) { order.setExpectedDeliveryTime(expectedDate.toDateTime()); } else { order.setExpectedCollectionTime(expectedDate.toDateTime()); } } order = orderRepository.saveOrder(order); // Update order restaurant id session attribute if any items present HttpSession session = request.getSession(true); if (order.getOrderItems().size() > 0) { session.setAttribute("orderrestaurantid", order.getRestaurantId()); session.setAttribute("orderrestauranturl", order.getRestaurant().getUrl()); } else { session.removeAttribute("orderrestaurantId"); session.removeAttribute("orderrestauranturl"); } // Update can checkout status of order session.setAttribute("cancheckout", order.getCanCheckout()); // All worked ok model.put("success", true); model.put("order", order); } catch (Exception ex) { LOGGER.error("", ex); model.put("success", false); model.put("message", ex.getMessage()); } return buildOrderResponse(model); }