コード例 #1
0
        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());
        }
コード例 #2
0
 public ActionResult <TransactionListDto[]> GetTransactions([FromBody] Receipt receipt)
 {
     if (receipt == null)
     {
         return(BadRequest());
     }
     return(transactionControllerLogic.GetTransactionsByReceiptId(receipt.Id));
 }