public void Run(APIGatewayProxyRequest request, APIGatewayProxyResponse response, FinanceUser user) { var receipt = JsonConvert.DeserializeObject <Receipt>(request.Body); var dbClient = new AmazonDynamoDBClient(); var logger = new ConsoleLogger(); var receiptDbClient = new DatabaseClient <ReceiptSaveResult>(dbClient, logger); var spotReservationDbClient = new DatabaseClient <SpotReservation>(dbClient, logger); var vendorDbClient = new DatabaseClient <Vendor>(dbClient, logger); var qboClient = new QuickBooksOnlineClient(PrivateAccounting.Constants.LakelandMiPuebloRealmId, new DatabaseClient <QuickBooksOnlineConnection>(dbClient, logger), logger); var allActiveCustomers = qboClient .QueryAll <Customer>("select * from customer") .ToDictionary(x => x.Id); var activeVendors = new ActiveVendorSearch() .GetActiveVendors(allActiveCustomers, vendorDbClient) .ToList(); var spotClient = new DatabaseClient <Spot>(dbClient, logger); var spotReservationCheck = new SpotReservationCheck(spotClient, spotReservationDbClient, activeVendors, allActiveCustomers); var validation = new ReceiptValidation(spotReservationCheck).Validate(receipt).Result; if (validation.Any()) { response.StatusCode = 400; response.Body = new JObject { { "error", JArray.FromObject(validation) } }.ToString(); return; } var taxRate = new Tax().GetTaxRate(qboClient, PropertyRentalManagement.Constants.QUICKBOOKS_RENTAL_TAX_RATE); var cardPayment = new CardPayment(logger, Configuration.CLOVER_MI_PUEBLO_PRIVATE_TOKEN); var receiptService = new ReceiptSave(receiptDbClient, qboClient, taxRate, spotReservationDbClient, logger, cardPayment); string customerId = receipt.Customer.Id; if (string.IsNullOrWhiteSpace(customerId)) { var customer = new Customer { DisplayName = receipt.Customer.Name }; customer = qboClient.Create(customer); customerId = customer.Id.ToString(); } var vendor = activeVendors.FirstOrDefault(x => x.QuickBooksOnlineId.GetValueOrDefault().ToString() == customerId) ?? vendorDbClient.Create(VendorService.CreateModel(int.Parse(customerId), null, null, null)); receipt.Id = string.IsNullOrWhiteSpace(receipt.Id) ? Guid.NewGuid().ToString() : receipt.Id; // Needed until UI is deployed. var receiptResult = receiptService.SaveReceipt(receipt, customerId, user.FirstName, user.LastName, user.Email, vendor, IpLookup.GetIp(request)); response.Body = JsonConvert.SerializeObject(receiptResult); }
public void Run(APIGatewayProxyRequest request, APIGatewayProxyResponse response, FinanceUser user) { var dbClient = new AmazonDynamoDBClient(); var qboDbClient = new DatabaseClient <QuickBooksOnlineConnection>(dbClient, new ConsoleLogger()); var qboClient = new QuickBooksOnlineClient(PrivateAccounting.Constants.LakelandMiPuebloRealmId, qboDbClient, new ConsoleLogger()); var vendorClient = new DatabaseClient <PropertyRentalManagement.DatabaseModel.Vendor>(dbClient, new ConsoleLogger()); var nonRentalCustomerIds = PropertyRentalManagement.Constants.NonRentalCustomerIds; var allActiveCustomers = qboClient.QueryAll <Customer>("select * from customer") .Where(x => !nonRentalCustomerIds.Contains(x.Id.GetValueOrDefault())) .ToDictionary(x => x.Id); var activeVendors = new ActiveVendorSearch().GetActiveVendors(allActiveCustomers, vendorClient) .ToDictionary(x => x.QuickBooksOnlineId); var newCustomers = allActiveCustomers.Where(x => !activeVendors.ContainsKey(x.Key)); foreach (var newCustomer in newCustomers) { var vendor = VendorService.CreateModel(newCustomer.Key, null, null, null); vendorClient.Create(vendor); activeVendors.Add(vendor.QuickBooksOnlineId, vendor); } var json = new List <CustomerPaymentSettingsModel>(); foreach (var vendor in activeVendors.Values) { var customer = allActiveCustomers[vendor.QuickBooksOnlineId]; json.Add(new CustomerPaymentSettingsModel { Id = vendor.Id, QuickBooksOnlineId = vendor.QuickBooksOnlineId, PaymentFrequency = vendor.PaymentFrequency, RentPrice = vendor.RentPrice, Memo = vendor.Memo, FirstName = customer.GivenName, LastName = customer.FamilyName, DisplayName = customer.DisplayName, Balance = customer.Balance, Spots = vendor.Spots }); } response.Body = JsonConvert.SerializeObject(json); }