Example #1
0
        public IHttpActionResult Create(OrderCreatingModel orderModel)
        {
            var     client = ClientHelper.GetClient(context, orderModel.Identifier, orderModel.IdentifierType);
            HereApi api    = new HereApi();
            Order   order  = new Order()
            {
                Id = Guid.NewGuid(),
                CreationTimestamp    = DateTime.Now,
                State                = OrderStateEnum.Draft,
                Description          = orderModel.Description,
                Photo                = orderModel.Photo,
                RecipientDescription = orderModel.RecipientDescription,
                EndAddress           = api.GetAdress(orderModel.EndAddressCoords),
                EndAddressCoords     = orderModel.EndAddressCoords,
                StartAddress         = api.GetAdress(orderModel.StartAddressCoords),
                StartAddressCoords   = orderModel.StartAddressCoords,
                ClientId             = client.Id,
                StateChangeTimestamp = DateTime.Now
            };

            context.GetTable <Order>().InsertOnSubmit(order);

            context.SubmitChanges();

            return(Ok());
        }
Example #2
0
        /// <summary>
        /// Asynchronously get world map from REST API
        /// </summary>
        /// <remarks>Creates a Bitmap from fragments, gotten from REST API</remarks>
        /// <returns>Bitmap with world map</returns>
        public async Task <Bitmap> GetWorldMap()
        {
            // MapApi  is Square, so minRow == min Column and maxRow == max Column
            // 1 << zoom == Pow(2, zoom), google left shift to multiple 2. F**k the Math.Pow
            const int zoom                   = 1;
            const int minRowAndColumn        = 0;
            const int maxRowAndColumnPlusOne = (1 << zoom);

            var fragmentsOfMap = new List <List <Bitmap> >(maxRowAndColumnPlusOne);

            for (int i = minRowAndColumn; i < maxRowAndColumnPlusOne; ++i)
            {
                fragmentsOfMap.Add(new List <Bitmap>(maxRowAndColumnPlusOne));
                for (int j = minRowAndColumn; j < maxRowAndColumnPlusOne; ++j)
                {
                    fragmentsOfMap[i].Add(null);
                }
            }

            // TODO: Paralel load of fragments
            for (int i = minRowAndColumn; i < maxRowAndColumnPlusOne; ++i)
            {
                for (int j = minRowAndColumn; j < maxRowAndColumnPlusOne; ++j)
                {
                    fragmentsOfMap[i][j] = await HereApi.GetSquareAsync(i, j, zoom);
                }
            }

            // Fragments have equal size
            int fragmentWidth  = fragmentsOfMap[0][0].Width;
            int fragmentHeight = fragmentsOfMap[0][0].Height;
            int resWidth       = fragmentWidth * (maxRowAndColumnPlusOne - minRowAndColumn);
            int resHeight      = fragmentHeight * (maxRowAndColumnPlusOne - minRowAndColumn);

            // TODO: Exception handler
            Bitmap res = new Bitmap(resWidth, resHeight);

            using (Graphics g = Graphics.FromImage(res))
            {
                g.Clear(Color.Gray);

                int rowOffset    = 0;
                int columnOffset = 0;
                foreach (var column in fragmentsOfMap)
                {
                    foreach (var fragment in column)
                    {
                        g.DrawImage(fragment, new Rectangle(rowOffset, columnOffset, fragmentWidth, fragmentHeight));
                        rowOffset += fragmentWidth;
                    }
                    columnOffset += fragmentHeight;
                    rowOffset     = 0;
                }
            }

            return(res);
        }
Example #3
0
        public IHttpActionResult StartDelivery(StartDeliveryModel model)
        {
            Courier courier = CourierHelper.GetCourier(context, model.Identifier, model.IdentifierType);

            if (courier == null)
            {
                return(BadRequest());
            }
            var order = context.GetTable <Order>().Where(x => x.Id == model.OrderId).FirstOrDefault();

            order.State = OrderStateEnum.InDelivery;
            order.StateChangeTimestamp = DateTime.Now;
            order.CourierId            = courier.Id;
            context.SubmitChanges();
            HereApi api  = new HereApi();
            var     time = api.GetTimeTravel(order.StartAddressCoords, order.EndAddressCoords);

            return(Json(time));
        }
Example #4
0
        public IHttpActionResult GetOrders(string location, string identifier, IdentifierEnum identifierType)
        {
            var courier = CourierHelper.GetCourier(context, identifier, identifierType);

            if (courier == null)
            {
                return(BadRequest());
            }

            HereApi api = new HereApi();

            var wayPoints = new List <string> {
                identifier + ";" + location
            };

            context.GetTable <Order>()
            //.Where(x =>x.State == OrderStateEnum.Draft)
            .OrderBy(x => x.CreationTimestamp).Take(5).ToList()
            .ForEach(x => wayPoints.Add(x.Id + ";" + x.StartAddressCoords));
            if (wayPoints.Count == 1)
            {
                return(Json(new object[] { }));
            }
            var ordersIds = new List <string>()
            {
                "FAA08AD6-A736-45EB-8F22-126BAB4163AF", "AE16E32E-DD2A-45FA-83B6-29A1DFB3E7B9 "
            };
            //var ordersIds = api.GenerateOrdersForCourier(wayPoints, 2);
            var orders = new List <Order>();

            foreach (var item in ordersIds)
            {
                orders.Add(context.GetTable <Order>().Where(x => x.Id == new Guid(item)).FirstOrDefault());
            }
            ;
            return(Json(orders));
        }
Example #5
0
        public async Task <Bitmap> GetHeatMap(List <MeteorBase> data)
        {
            Bitmap res = await HereApi.GetHeatMap(data);

            return(res);
        }