示例#1
0
        public async Task <IHttpActionResult> SyncWithClover()
        {
            using (var context = new TasteContext())
            {
                var restaurants = context.Restaurants.ToList();
                foreach (var restaurant in restaurants)
                {
                    var restaurantId = restaurant.Id;
                    var result       = await CloverClient.GetItemsAsync(restaurant.AccessToken, restaurant.CloverId, restaurant.IsSandbox);

                    var existingMenu = context.Dishes.Where(d => !d.Deleted && d.RestaurantId == restaurantId).ToList();
                    var ids          = existingMenu.Select(d => d.CloverId).ToList();
                    ids.RemoveAll(s => s == null);

                    if (result != null)
                    {
                        var newMenu = result.Select(r => r.Id).ToList();

                        var itemsToBeDeleted = ids.Where(m => !newMenu.Contains(m)).ToList();
                        var itemsToBeAdded   = newMenu.Where(m => !ids.Contains(m)).ToList();

                        foreach (var i in itemsToBeAdded)
                        {
                            var r = result.First(re => re.Id == i);
                            context.Dishes.Add(new Dish
                            {
                                Name         = r.Name,
                                Price        = r.Price / 100.0,
                                CuisineId    = -1,
                                RestaurantId = restaurantId,
                                CloverId     = r.Id,
                                Deleted      = false
                            });
                        }

                        foreach (var i in itemsToBeDeleted)
                        {
                            var r = existingMenu.First(re => re.CloverId == i);
                            context.Dishes.Remove(r);
                        }

                        context.SaveChanges();
                    }
                    else
                    {
                        // nothing
                    }
                }
            }
            return(Ok("Success"));
        }
示例#2
0
        public async Task TestMethod1()
        {
            var x = await CloverClient.CreateOrderAsync(new List <CloverLineItemModel>
            {
                new CloverLineItemModel
                {
                    Name           = "test",
                    PriceInPennies = 12,
                    Printed        = true,
                    UnitQuantity   = 2
                }
            }, "02c5cac5-06ba-c31b-effd-9286db53d8a0", "HS4VTV8MXDMDM", true);

            Console.WriteLine(x.Total);
        }
示例#3
0
        public void SendToAccounting(DateTime date, ILogging logger)
        {
            var databaseClient = new DatabaseClient <QuickBooksOnlineConnection>(new AmazonDynamoDBClient(), logger);
            var qboClient      = new QuickBooksOnlineClient(PrivateAccounting.Constants.LakelandMiPuebloRealmId, databaseClient, logger);

            var originalMonth = date.Month;

            var client = new CloverClient(
                Environment.GetEnvironmentVariable("CLOVER_MI_PUEBLO_CHICKEN_ACCESS_TOKEN"),
                Environment.GetEnvironmentVariable("CLOVER_MI_PUEBLO_CHICKEN_MERCHANT_ID"),
                logger
                );

            var restaurantCustomer = qboClient
                                     .QueryAll <Customer>($"select * from Customer where Id = '{PrivateAccounting.Constants.LakelandMiPuebloAccountRestaurant}'")
                                     .First();

            var cashTenderType = client.QueryAll <Tender>($"tenders")
                                 .Single(x => string.Equals(x.LabelKey, "com.clover.tender.cash", StringComparison.OrdinalIgnoreCase));

            do
            {
                var salesReceipts = qboClient.QueryAll <SalesReceipt>(
                    $"select * from SalesReceipt where CustomerRef = '{PrivateAccounting.Constants.LakelandMiPuebloAccountRestaurant}' and TxnDate = '{date:yyyy-MM-dd}'");

                if (salesReceipts.Any())
                {
                    logger.Log($"Skipping {date:yyyy-MM-dd}, because a sales receipt already exists.");
                }
                else
                {
                    var today    = new DateTimeOffset(date).ToUnixTimeMilliseconds();
                    var tomorrow = new DateTimeOffset(date.AddDays(1)).ToUnixTimeMilliseconds();
                    var result   =
                        client.QueryAll <Payment>($"payments?filter=createdTime>={today}&filter=createdTime<{tomorrow}");

                    var cashPayments = result.Where(x => x.Tender.Id == cashTenderType.Id).ToList();
                    var cardPayments = result.Where(x => x.Tender.Id != cashTenderType.Id).ToList();
                    var cashTotal    = GetTotal(cashPayments);
                    var cardTotal    = GetTotal(cardPayments);
                    if (cashTotal > 0)
                    {
                        CreateSalesReceipt(
                            qboClient,
                            restaurantCustomer.Id,
                            restaurantCustomer.DefaultTaxCodeRef.Value,
                            PrivateAccounting.Constants.LakelandMiPuebloProductRestaurant,
                            date,
                            GetTotal(cashPayments),
                            "Restaurant sales using cash in Clover Register");
                    }

                    if (cardTotal > 0)
                    {
                        CreateSalesReceipt(
                            qboClient,
                            restaurantCustomer.Id,
                            restaurantCustomer.DefaultTaxCodeRef.Value,
                            PrivateAccounting.Constants.LakelandMiPuebloProductRestaurant,
                            date,
                            cardTotal,
                            "Restaurant sales using credit card in Clover Register");
                    }
                }
                date = date.AddDays(1);
            } while (date.Month == originalMonth);
        }
示例#4
0
        public async Task <IHttpActionResult> SubmitOrder(OrderRequestModel model)
        {
            using (var context = new TasteContext())
            {
                var user = context.Users.FirstOrDefault(u => u.UserId == model.UserId);
                if (user == null)
                {
                    return(Ok(GetErrorModel(ApiErrorCode.UserDoesNotExist)));
                }
                var restaurant = context.Restaurants.FirstOrDefault(r => r.Id == model.RestaurantId);
                if (restaurant == null)
                {
                    return(Ok(GetErrorModel(ApiErrorCode.RestaurantDoesNotExist)));
                }


                string orderId;
                var    order = context.Orders.FirstOrDefault(o =>
                                                             !o.Paid && o.RestaurantId == model.RestaurantId && o.UserId == model.UserId);
                if (order != null)
                {
                    orderId = order.OrderId;
                }
                else
                {
                    orderId = $"{user.UserId} {DateTime.Now}";
                    context.Orders.Add(new Order
                    {
                        Datetime     = DateTime.Now,
                        OrderId      = orderId,
                        Paid         = false,
                        RestaurantId = model.RestaurantId,
                        TableName    = model.Table.ToString(),
                        UserId       = user.UserId,
                        Details      = ""
                    });
                }

                var cloverLineItems = new List <CloverLineItemModel>();

                foreach (var i in model.Items)
                {
                    var dish = context.Dishes.FirstOrDefault(d => d.Id == i.DishId);
                    if (dish == null)
                    {
                        continue;
                    }

                    cloverLineItems.Add(new CloverLineItemModel
                    {
                        PriceInPennies = Convert.ToInt32(dish.Price * 100),
                        Name           = dish.Name,
                        Printed        = true,
                        UnitQuantity   = i.Quantity
                    });

                    context.OrderedDishes.Add(new OrderedDish
                    {
                        DishId    = i.DishId,
                        Quantity  = i.Quantity,
                        UserId    = user.UserId,
                        OrderId   = orderId,
                        CuisineId = dish.CuisineId.GetValueOrDefault()
                    });

                    var pref = context.Preferences.FirstOrDefault(p =>
                                                                  p.UserId == user.UserId && p.CuisineId == dish.CuisineId);
                    if (pref != null)
                    {
                        pref.Count += i.Quantity;
                    }
                    else
                    {
                        context.Preferences.Add(new Preference
                        {
                            Count     = i.Quantity,
                            CuisineId = dish.CuisineId,
                            UserId    = user.UserId
                        });
                    }
                }

                //send printing request to clover
                if (!restaurant.AccessToken.IsNullOrWhiteSpace())
                {
                    await CloverClient.CreateOrderAsync(cloverLineItems, restaurant.AccessToken, restaurant.CloverId,
                                                        restaurant.IsSandbox);
                }
                context.SaveChanges();
                return(Ok(orderId));
            }
        }
示例#5
0
        public async Task TestMethod2()
        {
            var x = await CloverClient.GetItemsAsync("02c5cac5-06ba-c31b-effd-9286db53d8a0", "HS4VTV8MXDMDM", true);

            Console.WriteLine(x.First().Name);
        }