Пример #1
0
        public static SaveExpenseResponse SaveExpense(ExpenseSaveRequest request)
        {
            SaveExpenseResponse response = new SaveExpenseResponse();
            ExpenseAppEntities  entity   = new ExpenseAppEntities();

            try
            {
                if (request.ExpenseId == 0)
                {
                    CreateExpense(request.UserId, request.ExpenseItemsDto, entity, response);
                    CreateExpenseHistory(response.ExpenseId, entity, null);
                }
                else
                {
                    UpdateExpense(request, entity, response);
                }

                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Save Expense Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Пример #2
0
        public static SaveExpenseResponse ManageExpenses(ManageExpenseRequest request)  //Evaluate an Expense
        {
            using (var entities = new ExpenseProjectDBEntities())
            {
                try     //Correct?
                {
                    var expense = entities.Expenses.SingleOrDefault(e => e.ID == request.ExpenseID);
                    if (request.Approved)
                    {
                        if (expense.StatusId == 2)
                        {
                            expense.StatusId = 3;   //Status of the expense updates from waiting mng approval to waiting acc approval
                        }
                        else if (expense.StatusId == 3)
                        {
                            expense.StatusId = 5;   //What to do with Approved Expenses?
                        }
                    }
                    else
                    {
                        expense.StatusId          = 4;
                        expense.RejectDescription = request.RejectDescription;
                    }

                    entities.SaveChanges();

                    var response = new SaveExpenseResponse();

                    response.IsSuccess = true;
                    response.Message   = "The expense's status has been successfully updated.";

                    return(response);
                }
                catch (NullReferenceException)
                {
                    var response = new SaveExpenseResponse();

                    response.IsSuccess = false;
                    response.Message   = "The expense you're trying to evaluate doesn't exist.";

                    return(response);
                }
            }
        }
Пример #3
0
        private static void DeleteExpenseItem(IEnumerable <IdDto> deletedExpenseItems, ExpenseAppEntities entity, SaveExpenseResponse response)
        {
            foreach (var item in deletedExpenseItems)
            {
                var itemInDb = (from e in entity.ExpenseItems
                                where e.ID == item.ID
                                select e).FirstOrDefault();

                if (itemInDb == null)
                {
                    response.IsSuccess = false;
                    return;
                }
                entity.ExpenseItems.Remove(itemInDb);
            }
        }
Пример #4
0
        private static void UpdateExpense(ExpenseSaveRequest request, ExpenseAppEntities entity, SaveExpenseResponse response)
        {
            var expenseInDb = (from e in entity.Expenses
                               where e.ID == request.ExpenseId
                               select e).FirstOrDefault();

            if (expenseInDb == null)
            {
                response.IsSuccess = false;
                return;
            }

            expenseInDb.TotalAmount = 0;

            if (request.DeletedExpenseItems.Any())
            {
                DeleteExpenseItem(request.DeletedExpenseItems, entity, response);
            }

            foreach (var item in request.ExpenseItemsDto)
            {
                expenseInDb.TotalAmount += item.Amount;

                var expenseItemInDb = (from e in entity.ExpenseItems
                                       where e.ID == item.ID
                                       select e).FirstOrDefault();

                if (expenseItemInDb == null)
                {
                    CreateExpenseItem(expenseInDb, item, entity);
                }
                else
                {
                    UpdateExpenseItem(expenseItemInDb, item, entity);
                }
            }
            expenseInDb.LastExpenseActionId = (int)StatusEnum.Ongoing;
            entity.SaveChanges();
            response.IsSuccess = true;
        }
Пример #5
0
        private static void CreateExpense(int userId, IEnumerable <ExpenseItemDto> expenseItemsDto, ExpenseAppEntities entity, SaveExpenseResponse response)
        {
            Expense expense = new Expense();

            expense.CreatedDate = DateTime.Now;
            expense.UserId      = userId;
            entity.Expenses.Add(expense);
            entity.SaveChanges();

            foreach (var item in expenseItemsDto)
            {
                CreateExpenseItem(expense, item, entity);
                expense.TotalAmount += item.Amount;
            }
            expense.LastExpenseActionId = (int)StatusEnum.Ongoing;
            entity.SaveChanges();
            response.ExpenseId = expense.ID;
            response.IsSuccess = true;
        }
Пример #6
0
        public static SaveExpenseResponse SubmitExpenseToDatabase(SaveExpenseRequest request)   //Submit New Expense
        {
            var response = new SaveExpenseResponse();

            var expenseItemList = request.ExpenseItemList;

            using (var entities = new ExpenseProjectDBEntities())
            {
                //using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
                //{

                var currentExpenseID = request.ExpenseID;

                Expense.Data.Expense expense = new Data.Expense();
                if (currentExpenseID == 0)  //If Expense doesn't exist, creates a new one and pushes the ID to currentExpenseID
                {
                    expense = new Expense.Data.Expense
                    {
                        TotalAmount  = expenseItemList.Sum(x => x.ExpenseItemAmount), //Holy
                        CreatedDate  = DateTime.Now,
                        Created_User = 1,                                             //Session? Angular?
                        StatusId     = 2
                    };

                    entities.Expenses.Add(expense);     //Creates a new expense in db
                }


                Expense.Data.ExpenseItem expenseItem;

                if (entities.SaveChanges() > 0 || expenseItemList.Count > 0)     //???
                {
                    foreach (var item in expenseItemList)
                    {
                        expenseItem = new ExpenseItem();
                        expenseItem.ExpenseAmount      = item.ExpenseItemAmount;
                        expenseItem.ExpenseDate        = item.ExpenseItemDate;
                        expenseItem.ExpenseDescription = item.ExpenseItemDescription;
                        expenseItem.ExpenseId          = (currentExpenseID == 0) ? expense.ID : currentExpenseID; //This is where you tie the item to the expense

                        if (item.ExpenseItemID == 0)
                        {
                            entities.ExpenseItems.Add(expenseItem);
                        }
                        else
                        {
                            var expenseItemDb = entities.ExpenseItems.Where(e => e.ID == item.ExpenseItemID).First();
                            expenseItemDb.ExpenseDescription = expenseItem.ExpenseDescription;
                            expenseItemDb.ExpenseDate        = expenseItem.ExpenseDate;
                            expenseItemDb.ExpenseAmount      = expenseItem.ExpenseAmount;
                        }
                    }
                    currentExpenseID = (currentExpenseID == 0) ? expense.ID : currentExpenseID;
                    var expenseItemListDB      = entities.ExpenseItems.Where(i => i.ExpenseId == currentExpenseID).ToList();
                    var notMatchedExpenseItems = expenseItemListDB.Where(e => !expenseItemList.Select(i => i.ExpenseItemID).Contains(e.ID)).ToList();

                    foreach (var item in notMatchedExpenseItems)
                    {
                        entities.ExpenseItems.Remove(item);
                    }
                    entities.SaveChanges();
                }

                else
                {
                    response.IsSuccess = false;
                    response.Message   = "There was a problem.";
                }

                SetStatusToWaitingForManager(currentExpenseID);
                entities.SaveChanges();

                //scope.Commit();
            }

            response.IsSuccess = true;
            response.Message   = "Your expense has been successfully created.";

            return(response);
        }