public ActionResult UpdateReceipt(int receiptId, [FromBody] TransactionListDto[] transactionListDtos) { if (transactionListDtos == null || !transactionListDtos.Any()) { return(BadRequest()); } var receipt = context.Receipts.Find(receiptId); if (receipt == null) { return(BadRequest()); } var originalTransactionsDtos = transactionControllerLogic.GetTransactionsByReceiptId(receiptId); var receiptTransactions = context.Transactions.Where(t => t.ReceiptId == receiptId); var serviceIds = originalTransactionsDtos.Select(t => t.ServiceId).Concat(transactionListDtos.Select(t => t.ServiceId)).Distinct(); foreach (var serviceId in serviceIds) { // var originalDto = originalTransactionsDtos.Select ((t) => (t.ServiceId, t.Count)).FirstOrDefault ((_tuple) => _tuple.ServiceId == serviceId); var(ServiceId, Count) = originalTransactionsDtos.Select((t) => (t.ServiceId, t.Count)).FirstOrDefault((_tuple) => _tuple.ServiceId == serviceId); var newDto = transactionListDtos.Select((t) => (t.ServiceId, t.Count)).FirstOrDefault((_tuple) => _tuple.ServiceId == serviceId); var delta = newDto.Count - Count; List <int> removedTransactionIds = new List <int> (); if (delta == 0) { continue; } else if (delta > 0) { for (int i = 0; i < delta; i++) { context.Transactions.Add(new Transaction { ReceiptId = receiptId, ServiceId = serviceId }); } } else if (delta < 0) { for (int i = delta; i < 0; i++) { var transactionToRemove = receiptTransactions.First(t => t.ServiceId == serviceId && !removedTransactionIds.Any(usedId => usedId == t.Id)); removedTransactionIds.Add(transactionToRemove.Id); context.Transactions.Remove(transactionToRemove); } } } receipt.ModifyDate = DateTime.Now; context.Receipts.Update(receipt); context.SaveChanges(); return(Ok()); }
public ActionResult <TransactionListDto[]> GetTransactions([FromBody] Receipt receipt) { if (receipt == null) { return(BadRequest()); } return(transactionControllerLogic.GetTransactionsByReceiptId(receipt.Id)); }