From 5d4e9d7578d8d914281bcee3f35e237b99930cf4 Mon Sep 17 00:00:00 2001 From: ChameleonCircuit <191724746+chameleoncircuit@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:17:31 -0400 Subject: [PATCH 1/4] Skip processing orders with errors --- Controllers/SetupController.cs | 141 ++++++++++++++++++--------------- 1 file changed, 77 insertions(+), 64 deletions(-) diff --git a/Controllers/SetupController.cs b/Controllers/SetupController.cs index e6e86d0..05b2e52 100644 --- a/Controllers/SetupController.cs +++ b/Controllers/SetupController.cs @@ -28,12 +28,13 @@ public class SetupController { private IConfigurationRoot _config; private IKiCLogger _logger; + private ILogger _rootlogger; private KiCdbContext _db; private SquareClient _client; private IWebHostEnvironment _env; private readonly InventoryService _inventoryService; - public SetupController(IConfigurationRoot configuration, IKiCLogger logger, KiCdbContext context, IWebHostEnvironment appenv, InventoryService inventoryService) + public SetupController(IConfigurationRoot configuration, IKiCLogger logger, KiCdbContext context, IWebHostEnvironment appenv, InventoryService inventoryService, ILogger rootlogger, SquareClient client) { Square.Environment env = Square.Environment.Production; @@ -56,6 +57,7 @@ public SetupController(IConfigurationRoot configuration, IKiCLogger logger, KiCd _config = configuration; _env = appenv; _inventoryService = inventoryService; + _rootlogger = rootlogger; } [HttpPost] @@ -81,87 +83,98 @@ public IActionResult GenerateOrders([FromHeader(Name = "X-Api-Key")] string apiK } } var newOrders = 0; + var errorOrders = new List(); foreach (var orderId in orderIds) { - Square.Models.Order? squareOrder; try { - squareOrder = orderData.First(x => x.Id == orderId); - } - catch (InvalidOperationException e) - { - squareOrder = null; - } - var orderDate = DateTime.MinValue; - var attendee = _db.Attendees.Include(attendee => attendee.Ticket).First(x => x.OrderID == orderId); - var orderTotal = 0; - if (attendee.Ticket != null) - { - orderDate = attendee.Ticket.DatePurchased.GetValueOrDefault().ToDateTime(TimeOnly.MinValue); - orderTotal = (int) _db.Attendees.Where(x => x.OrderID == orderId && x.Ticket != null).Sum(x => x.Ticket!.Price) * 100; - } + Square.Models.Order? squareOrder; + try + { + squareOrder = orderData.First(x => x.Id == orderId); + } + catch (InvalidOperationException e) + { + squareOrder = null; + } + var orderDate = DateTime.MinValue; + var attendee = _db.Attendees.Include(attendee => attendee.Ticket).First(x => x.OrderID == orderId); + var orderTotal = 0; + if (attendee.Ticket != null) + { + orderDate = attendee.Ticket.DatePurchased.GetValueOrDefault().ToDateTime(TimeOnly.MinValue); + orderTotal = (int) _db.Attendees.Where(x => x.OrderID == orderId && x.Ticket != null).Sum(x => x.Ticket!.Price) * 100; + } - int taxesTotal = (int)Math.Round(orderTotal * 0.8); - int subTotal = orderTotal; - int grandTotal; - int paymentsTotal = 0; - int refundsTotal = 0; - if (squareOrder != null) - { - orderDate = DateTime.Parse(squareOrder.CreatedAt); - grandTotal = (int)squareOrder.TotalMoney.Amount.GetValueOrDefault(); - paymentsTotal = (int)squareOrder.Tenders.Sum(x => x.AmountMoney?.Amount ?? 0); - var paymentIds = squareOrder.Tenders.Select(x => x.PaymentId).ToList(); - foreach (var paymentId in paymentIds) + int taxesTotal = (int)Math.Round(orderTotal * 0.8); + int subTotal = orderTotal; + int grandTotal; + int paymentsTotal = 0; + int refundsTotal = 0; + if (squareOrder != null) { - var result = _client.PaymentsApi.GetPayment(paymentId); - if (result.Payment.RefundedMoney != null) + orderDate = DateTime.Parse(squareOrder.CreatedAt); + grandTotal = (int)squareOrder.TotalMoney.Amount.GetValueOrDefault(); + paymentsTotal = (int)squareOrder.Tenders.Sum(x => x.AmountMoney?.Amount ?? 0); + var paymentIds = squareOrder.Tenders.Select(x => x.PaymentId).ToList(); + foreach (var paymentId in paymentIds) { - refundsTotal += (int)result.Payment.RefundedMoney.Amount.GetValueOrDefault(); + var result = _client.PaymentsApi.GetPayment(paymentId); + if (result.Payment.RefundedMoney != null) + { + refundsTotal += (int)result.Payment.RefundedMoney.Amount.GetValueOrDefault(); + } + } + + if (squareOrder.Refunds != null) + { + refundsTotal = (int) squareOrder.Refunds.Sum(x => x.AmountMoney.Amount.GetValueOrDefault()); } } - - if (squareOrder.Refunds != null) + else { - refundsTotal = (int) squareOrder.Refunds.Sum(x => x.AmountMoney.Amount.GetValueOrDefault()); + grandTotal = orderTotal; } - } - else - { - grandTotal = orderTotal; - } - var existingOrder = _db.Orders.FirstOrDefault(x => x.SquareOrderId == orderId); - if (existingOrder == null) - { - var o = new Order + var existingOrder = _db.Orders.FirstOrDefault(x => x.SquareOrderId == orderId); + if (existingOrder == null) { - SquareOrderId = orderId, - ItemsTotal = orderTotal, - OrderDate = orderDate, - SubTotal = subTotal, - Taxes = taxesTotal, - GrandTotal = grandTotal, - PaymentsTotal = paymentsTotal, - RefundsTotal = refundsTotal, - }; - _db.Orders.Add(o); - newOrders++; + var o = new Order + { + SquareOrderId = orderId, + ItemsTotal = orderTotal, + OrderDate = orderDate, + SubTotal = subTotal, + Taxes = taxesTotal, + GrandTotal = grandTotal, + PaymentsTotal = paymentsTotal, + RefundsTotal = refundsTotal, + }; + _db.Orders.Add(o); + newOrders++; + } + else + { + existingOrder.ItemsTotal = orderTotal; + existingOrder.OrderDate = orderDate; + existingOrder.SubTotal = subTotal; + existingOrder.Taxes = taxesTotal; + existingOrder.GrandTotal = grandTotal; + existingOrder.PaymentsTotal = paymentsTotal; + existingOrder.RefundsTotal = refundsTotal; + _db.Orders.Update(existingOrder); + } } - else + catch (Exception e) { - existingOrder.ItemsTotal = orderTotal; - existingOrder.OrderDate = orderDate; - existingOrder.SubTotal = subTotal; - existingOrder.Taxes = taxesTotal; - existingOrder.GrandTotal = grandTotal; - existingOrder.PaymentsTotal = paymentsTotal; - existingOrder.RefundsTotal = refundsTotal; - _db.Orders.Update(existingOrder); + _rootlogger.LogError($"Exception occured while processing order {orderId}"); + _rootlogger.LogError(e.Message); + errorOrders.Add(orderId); + continue; } } _db.SaveChanges(); - return new OkResult(); + return new OkObjectResult(new { errors=errorOrders }); } [HttpPost] From db012a1435ae068d2f967ead9c5e4ffaec3d3d44 Mon Sep 17 00:00:00 2001 From: ChameleonCircuit <191724746+chameleoncircuit@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:25:47 -0400 Subject: [PATCH 2/4] Logging fix --- Controllers/SetupController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Controllers/SetupController.cs b/Controllers/SetupController.cs index 05b2e52..9f5e25d 100644 --- a/Controllers/SetupController.cs +++ b/Controllers/SetupController.cs @@ -34,7 +34,7 @@ public class SetupController private IWebHostEnvironment _env; private readonly InventoryService _inventoryService; - public SetupController(IConfigurationRoot configuration, IKiCLogger logger, KiCdbContext context, IWebHostEnvironment appenv, InventoryService inventoryService, ILogger rootlogger, SquareClient client) + public SetupController(IConfigurationRoot configuration, IKiCLogger logger, KiCdbContext context, IWebHostEnvironment appenv, InventoryService inventoryService, ILogger rootlogger) { Square.Environment env = Square.Environment.Production; From fd724a4f20391ea473374e87c00a4262b728d338 Mon Sep 17 00:00:00 2001 From: ChameleonCircuit <191724746+chameleoncircuit@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:28:05 -0400 Subject: [PATCH 3/4] Completely skip null tenders --- Controllers/SetupController.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Controllers/SetupController.cs b/Controllers/SetupController.cs index 9f5e25d..ae3f26b 100644 --- a/Controllers/SetupController.cs +++ b/Controllers/SetupController.cs @@ -116,7 +116,10 @@ public IActionResult GenerateOrders([FromHeader(Name = "X-Api-Key")] string apiK { orderDate = DateTime.Parse(squareOrder.CreatedAt); grandTotal = (int)squareOrder.TotalMoney.Amount.GetValueOrDefault(); - paymentsTotal = (int)squareOrder.Tenders.Sum(x => x.AmountMoney?.Amount ?? 0); + if (squareOrder.Tenders != null) + { + paymentsTotal = (int)squareOrder.Tenders.Sum(x => x?.AmountMoney?.Amount ?? 0); + } var paymentIds = squareOrder.Tenders.Select(x => x.PaymentId).ToList(); foreach (var paymentId in paymentIds) { From 49e3b24a5a958b5f65edd12a111d4a96f25646b2 Mon Sep 17 00:00:00 2001 From: ChameleonCircuit <191724746+chameleoncircuit@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:42:51 -0400 Subject: [PATCH 4/4] Only total successful payments --- Controllers/SetupController.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Controllers/SetupController.cs b/Controllers/SetupController.cs index ae3f26b..df80cfc 100644 --- a/Controllers/SetupController.cs +++ b/Controllers/SetupController.cs @@ -118,7 +118,13 @@ public IActionResult GenerateOrders([FromHeader(Name = "X-Api-Key")] string apiK grandTotal = (int)squareOrder.TotalMoney.Amount.GetValueOrDefault(); if (squareOrder.Tenders != null) { - paymentsTotal = (int)squareOrder.Tenders.Sum(x => x?.AmountMoney?.Amount ?? 0); + foreach (var tender in squareOrder.Tenders) + { + if (tender.CardDetails.Status is "APPROVED" or "CAPTURED") + { + paymentsTotal += (int)(tender.AmountMoney?.Amount ?? 0); + } + } } var paymentIds = squareOrder.Tenders.Select(x => x.PaymentId).ToList(); foreach (var paymentId in paymentIds)