Example #1
0
        public static NitroBolt.Wui.HtmlResult<HElement> HView(MainState state, JsonData[] jsons, HttpRequestMessage request)
        {

            foreach (var json in jsons.OrEmpty())
            {
                switch (json.JPath("data", "command")?.ToString())
                {
                    case "new-order":
                        {
                            var name = json.JPath("data", "name")?.ToString() ?? "C";
                            var isDelivery = json.JPath("data", "is-delivery")?.ToString() == "True";
                            var toTime = ToTime(json.JPath("data", "to-time")?.ToString());
                            var status = toTime == null ? ProductStatus.New : ProductStatus.InQueue;
                            var products = name == "B" ? new[] { new Product("K", status) } : new[] { new Product("M", status), new Product("P", status) };
                            state = state.With(orders: state.Orders.Add(new Order(name: name, isDelivery: isDelivery, status: toTime == null ? OrderStatus.New : OrderStatus.InQueue, products: ImmutableArray.Create(products), toTime: toTime)));
                        }
                        break;
                    case "product-prepare":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var productId = ConvertHlp.ToGuid(json.JPath("data", "product"));
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            var product = order?.Products.OrEmpty().FirstOrDefault(_product => _product.Id == productId);
                            if (product != null && product.Status != ProductStatus.New)
                                product = null;
                            if (product != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(products: order.Products.Replace(product, product.With(status: ProductStatus.Prepare)))));
                            }
                        }
                        break;
                    case "product-ready":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var productId = ConvertHlp.ToGuid(json.JPath("data", "product"));
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            var product = order?.Products.OrEmpty().FirstOrDefault(_product => _product.Id == productId);
                            if (product != null && product.Status != ProductStatus.Prepare)
                                product = null;
                            if (product != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(products: order.Products.Replace(product, product.With(status: ProductStatus.Ready)))));
                            }
                        }
                        break;
                    case "order-build":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            if (order != null && order.Status != OrderStatus.Prepare && !order.IsReady)
                                order = null;
                            if (order != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(status: OrderStatus.Ready)));
                            }
                        }
                        break;
                    case "courier":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var courier = json.JPath("data", "courier")?.ToString();
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            if (order != null && order.Status != OrderStatus.Ready && !order.IsDelivery)
                                order = null;
                            if (order != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(status: OrderStatus.ToDelivery, courier: courier)));
                            }
                        }
                        break;
                    case "order-deliveried":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            if (order != null && order.Status != OrderStatus.ToDelivery)
                                order = null;
                            if (order != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(status: OrderStatus.Deliveried)));
                            }
                        }
                        break;
                    case "order-to-table":
                        {
                            var orderId = ConvertHlp.ToGuid(json.JPath("data", "order"));
                            var order = state.Orders.FirstOrDefault(_order => _order.Id == orderId);
                            if (order != null && order.Status != OrderStatus.Ready && order.IsDelivery)
                                order = null;
                            if (order != null)
                            {
                                state = state.With(orders: state.Orders.Replace(order, order.With(status: OrderStatus.ToTable)));
                            }
                        }
                        break;
                    default:
                        break;
                }
            }
            state = state.With(orders: DeQueue(state.Orders, DateTime.Now));

            var page = Page(state);
            return new NitroBolt.Wui.HtmlResult<HElement>
            {
                Html = page,
                State = state,
            };
        }