public ActionResult <DTO.Transaction> Get(int id) { DTO.Transaction transaction; using (var db = new TransactionServiceDbContext()) { transaction = db.Transactions .Include(t => t.LineItems) .Include(t => t.AssociatedClient) .Where(t => !t.Deleted && t.TransactionId == id) .Select(t => t.toDto()) .FirstOrDefault(); } // Set default for new transactions if (transaction == null) { transaction = new DTO.Transaction { TransactionId = -1, TransactionType = Enums.TransactionTypeEnum.Sale, Status = "Draft", LineItems = new List <DTO.LineItem>() }; } return(transaction); }
public void Post([FromBody] DTO.Transaction transaction) { Console.WriteLine($"DEBUG: Entering {nameof(Post)}"); Console.WriteLine($"DEBUG: Request body contained: {JsonConvert.SerializeObject(transaction, Formatting.Indented)}"); // TODO: updatedBy var updatedBy = "SYSTEM"; using (var db = new TransactionServiceDbContext()) { // TODO: Only change Updated* values if the other values are actually different. Override SaveChanges method? var dbTransaction = db.Transactions.FindAsync(transaction.TransactionId).Result; if (dbTransaction == null && transaction.TransactionId == -1) { Console.WriteLine($"DEBUG: Creating new transaction"); // PK is serial, so should be automatically generated dbTransaction = new Domain.Entities.Transaction { CreatedOn = DateTime.UtcNow, CreatedBy = updatedBy }; db.Add(dbTransaction); } if (dbTransaction != null) { Console.WriteLine("DEBUG: Updating transaction properties"); dbTransaction.Status = transaction.Status; dbTransaction.TransactionType = transaction.TransactionType.ToString(); dbTransaction.UpdatedOn = DateTime.UtcNow; dbTransaction.UpdatedBy = updatedBy; dbTransaction.DeliverAfter = transaction.DeliverAfter?.ToUniversalTime(); dbTransaction.DeliverBefore = transaction.DeliverBefore?.ToUniversalTime(); dbTransaction.Priority = (int)transaction.Priority; dbTransaction.SiteName = transaction.SiteName; dbTransaction.SiteLatitude = transaction.SiteLatitude; dbTransaction.SiteLongitude = transaction.SiteLongitude; // Unsure why LineItems is null instead of empty list if (transaction.LineItems != null) { Console.WriteLine($"DEBUG: Updating {transaction.LineItems.Count} line items"); foreach (var lineItem in transaction.LineItems) { var dbLineItem = db.LineItems.FindAsync(lineItem.LineItemId).Result; if (dbLineItem == null) { // Transaction IDs start empty for new incoming line items dbLineItem = new Domain.Entities.LineItem { LineItemId = lineItem.LineItemId, TransactionId = dbTransaction.TransactionId, CreatedOn = DateTime.UtcNow, CreatedBy = updatedBy }; db.Add(dbLineItem); } dbLineItem.ProductId = lineItem.ProductId; dbLineItem.Quantity = lineItem.Quantity; dbLineItem.Price = lineItem.Price; dbLineItem.UpdatedOn = DateTime.UtcNow; dbLineItem.UpdatedBy = updatedBy; } } Console.WriteLine($"DEBUG: Updating client ID"); dbTransaction.ClientId = transaction.AssociatedClient?.ClientId; Console.WriteLine($"DEBUG: Saving changes"); db.SaveChangesAsync(); } } Console.WriteLine($"DEBUG: Exiting {nameof(Post)}"); }