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")); }
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); }
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); }
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)); } }
public async Task TestMethod2() { var x = await CloverClient.GetItemsAsync("02c5cac5-06ba-c31b-effd-9286db53d8a0", "HS4VTV8MXDMDM", true); Console.WriteLine(x.First().Name); }