public IHttpActionResult DeletePurchaseLog(int id)
        {
            PurchaseLog purchaseLog = db.PurchaseLogs.Find(id);

            if (purchaseLog == null)
            {
                return(NotFound());
            }

            db.PurchaseLogs.Remove(purchaseLog);
            db.SaveChanges();

            PurchaseLogDetailsDto response = new PurchaseLogDetailsDto
            {
                ID      = purchaseLog.ID,
                Name    = purchaseLog.Name,
                Budgets = purchaseLog.Budgets.Select(x => new BudgetDetailsDto
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                Savings = purchaseLog.Savings.Select(x => new SavingDetailsDto
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    GoalBalance   = x.GoalBalance,
                    Deadline      = x.Deadline,
                    Description   = x.Description,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                PurchaseItems = purchaseLog.PurchaseItems.Select(x => new PurchaseItemDetailsDto
                {
                    ID            = x.ID,
                    Amount        = x.Amount,
                    Date          = x.Date,
                    Comment       = x.Comment,
                    CategoryID    = x.CategoryID,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList()
            };

            return(Ok(response));
        }
        public IHttpActionResult GetPurchaseLog(int id)
        {
            PurchaseLog           purchaseLogTmp = db.PurchaseLogs.Find(id);
            PurchaseLogDetailsDto purchaseLog    = new PurchaseLogDetailsDto
            {
                ID      = purchaseLogTmp.ID,
                Name    = purchaseLogTmp.Name,
                Budgets = purchaseLogTmp.Budgets.Select(x => new BudgetDetailsDto
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                Savings = purchaseLogTmp.Savings.Select(x => new SavingDetailsDto
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    GoalBalance   = x.GoalBalance,
                    Deadline      = x.Deadline,
                    Description   = x.Description,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                PurchaseItems = purchaseLogTmp.PurchaseItems.Select(x => new PurchaseItemDetailsDto
                {
                    ID            = x.ID,
                    Amount        = x.Amount,
                    Date          = x.Date,
                    Comment       = x.Comment,
                    CategoryID    = x.CategoryID,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList()
            };

            if (purchaseLog == null)
            {
                return(NotFound());
            }

            return(Ok(purchaseLog));
        }
        public IHttpActionResult PostPurchaseLog(PurchaseLogDetailsDto purchaseLog)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.PurchaseLogs.Add(new PurchaseLog
            {
                ID      = purchaseLog.ID,
                Name    = purchaseLog.Name,
                Budgets = purchaseLog.Budgets.Select(x => new Budget
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                Savings = purchaseLog.Savings.Select(x => new Saving
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    GoalBalance   = x.GoalBalance,
                    Deadline      = x.Deadline,
                    Description   = x.Description,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                PurchaseItems = purchaseLog.PurchaseItems.Select(x => new PurchaseItem
                {
                    ID            = x.ID,
                    Amount        = x.Amount,
                    Date          = x.Date,
                    Comment       = x.Comment,
                    CategoryID    = x.CategoryID,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList()
            });
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = purchaseLog.ID }, purchaseLog));
        }
        public IHttpActionResult PutPurchaseLog(int id, PurchaseLogDetailsDto purchaseLog)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != purchaseLog.ID)
            {
                return(BadRequest());
            }

            PurchaseLog currentPurchaseLog = new PurchaseLog
            {
                ID      = purchaseLog.ID,
                Name    = purchaseLog.Name,
                Budgets = purchaseLog.Budgets.Select(x => new Budget
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                Savings = purchaseLog.Savings.Select(x => new Saving
                {
                    ID            = x.ID,
                    Balance       = x.Balance,
                    GoalBalance   = x.GoalBalance,
                    Deadline      = x.Deadline,
                    Description   = x.Description,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList(),
                PurchaseItems = purchaseLog.PurchaseItems.Select(x => new PurchaseItem
                {
                    ID            = x.ID,
                    Amount        = x.Amount,
                    Date          = x.Date,
                    Comment       = x.Comment,
                    CategoryID    = x.CategoryID,
                    PurchaseLogID = x.PurchaseLogID
                }).ToList()
            };

            db.Entry(purchaseLog).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PurchaseLogExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }