Exemple #1
0
        public static GetExpenseItemsResponse GetExpenseItemsByExpenseId(int expenseId)
        {
            GetExpenseItemsResponse response = new GetExpenseItemsResponse();
            ExpenseAppEntities      entity   = new ExpenseAppEntities();

            try
            {
                response.ExpenseItemDto = from expenseItem in entity.ExpenseItems
                                          where expenseItem.ExpenseId == expenseId
                                          select new ExpenseItemDto
                {
                    ID = expenseItem.ID,
                    ExpenseItemDate = expenseItem.ExpenseItemDate,
                    Description     = expenseItem.Description,
                    Amount          = expenseItem.Amount,
                    ExpenseId       = expenseItem.ExpenseId
                };

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

                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Get ExpenseItems By ExpenseId Unsuccessful", ex);
            }
            return(response);
        }
Exemple #2
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);
        }
Exemple #3
0
        public static GetRejectReasonResponse GetRejectReason(ExpenseGetRequest request)
        {
            GetRejectReasonResponse response = new GetRejectReasonResponse();
            ExpenseAppEntities      entity   = new ExpenseAppEntities();

            try
            {
                response.RejectReason = (from eh in entity.ExpenseHistories
                                         where eh.ExpenseId == request.ExpenseId && eh.ExpenseStatusId == (int)StatusEnum.Rejected
                                         orderby eh.CreatedDate descending
                                         select eh.RejectReason).FirstOrDefault();

                if (response.RejectReason == null)
                {
                    return(response);
                }
                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Get Reject Reason Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Exemple #4
0
        public static GetExpensesResponse GetExpenseByActionId(IdRequest request)
        {
            GetExpensesResponse response = new GetExpensesResponse();
            ExpenseAppEntities  entity   = new ExpenseAppEntities();

            try
            {
                response.ExpenseDto = from expense in entity.Expenses
                                      where expense.LastExpenseActionId == request.ID
                                      select new ExpenseDto
                {
                    ID          = expense.ID,
                    CreatedDate = expense.CreatedDate,
                    TotalAmount = expense.TotalAmount,
                    UserId      = expense.UserId,
                    UserName    = expense.User.FullName
                };

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

                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Get Expense By UserId Unsuccessful", ex);
            }

            return(response);
        }
Exemple #5
0
        public static BaseResponse Logoff()
        {
            ExpenseAppEntities entity   = new ExpenseAppEntities();
            BaseResponse       response = new BaseResponse();

            //Check if session exists
            if (HttpContext.Current.Session[SessionConstants.UserEmail] != null)
            {
                try
                {
                    //int userId = Convert.ToInt32(HttpContext.Current.Session["UserId"]);

                    //entity.SaveChanges();
                    HttpContext.Current.Session.Abandon();
                    response.IsSuccess = true;
                }
                catch (Exception ex)
                {
                    response.IsSuccess = false;
                    log.Error("Logoff Unsuccessful", ex);
                }
                //finally
                //{
                //    entity.Dispose();
                //}
                return(response);
            }
            response.IsSuccess = false;
            return(response);
        }
Exemple #6
0
        public static void SendEmail(ExpenseAppEntities entity, User user)
        {
            MailMessage mail   = new MailMessage("*****@*****.**", user.Email);
            SmtpClient  client = new SmtpClient();

            try
            {
                var    config       = entity.Configs.Where(c => c.ID == (int)ConfigEnum.PortConfig).First();
                String mailTemplate = "";
                client.Port                  = Int32.Parse(config.ConfigKey);
                client.Host                  = config.ConfigValue;
                client.Timeout               = 10000;
                client.DeliveryMethod        = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                mail.IsBodyHtml              = true;
                mailTemplate                 = "Hello " + user.FullName + ",<br />" +
                                               "There are expenses waiting for your approval. Please either approve or reject them as soon as possible.<br />" +
                                               "Thank you";
                mail.Subject = "Expense Approval";
                mail.Body    = mailTemplate;

                client.Send(mail);
            }
            catch (Exception ex)
            {
                log.Error("Sending Email Unsuccessful", ex);
            }
            finally
            {
                client.Dispose();
                mail.Dispose();
            }
        }
Exemple #7
0
        public static BaseResponse SendExpenseForApproval(IdRequest request)
        {
            BaseResponse       response = new BaseResponse();
            ExpenseAppEntities entity   = new ExpenseAppEntities();

            try
            {
                var expenseToBeSentForApproval = (from expense in entity.Expenses
                                                  where expense.ID == request.ID
                                                  select expense).FirstOrDefault();
                if (expenseToBeSentForApproval == null)
                {
                    response.IsSuccess = false;
                    return(response);
                }

                expenseToBeSentForApproval.LastExpenseActionId = (int)StatusEnum.WaitingForManagerApproval;
                ExpenseHandlers.CreateExpenseHistory(request.ID, entity, null);
                response.IsSuccess = true;
                entity.SaveChanges();
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Send Expense For Approval Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Exemple #8
0
        public static GetCurrentExpenseResponse GetCurrentExpenseStatus(int expenseId)
        {
            GetCurrentExpenseResponse response = new GetCurrentExpenseResponse();
            ExpenseAppEntities        entity   = new ExpenseAppEntities();

            try
            {
                response.LastExpenseActionId = (from expense in entity.Expenses
                                                where expense.ID == expenseId
                                                select expense.LastExpenseActionId).FirstOrDefault();

                if (response.LastExpenseActionId == null)
                {
                    response.IsSuccess = false;
                    return(response);
                }
                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Get Current Expense Status Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Exemple #9
0
        public static BaseResponse PayExpense(IdRequest request)
        {
            BaseResponse       response = new BaseResponse();
            ExpenseAppEntities entity   = new ExpenseAppEntities();

            try
            {
                var expenseToBePaid = (from expense in entity.Expenses
                                       where expense.ID == request.ID
                                       select expense).FirstOrDefault();
                if (expenseToBePaid == null)
                {
                    response.IsSuccess = false;
                    return(response);
                }
                expenseToBePaid.LastExpenseActionId = (int)StatusEnum.Completed;
                ExpenseHandlers.CreateExpenseHistory(request.ID, entity, null);
                entity.SaveChanges();
                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Pay Expense", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Exemple #10
0
        private static void DeleteExpenseHistory(Expense expense, ExpenseAppEntities entity)
        {
            var expenseHistories = (from histories in entity.ExpenseHistories
                                    where histories.ExpenseId == expense.ID
                                    select histories);

            foreach (var history in expenseHistories)
            {
                entity.ExpenseHistories.Remove(history);
            }
            entity.SaveChanges();
        }
Exemple #11
0
        public static BaseResponse DeleteExpenseById(IdRequest request)
        {
            BaseResponse       response = new BaseResponse();
            ExpenseAppEntities entity   = new ExpenseAppEntities();

            try
            {
                var expenseInDb = entity.Expenses.FirstOrDefault(e => e.ID == request.ID);

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

                var expenseItemsInDb = from e in entity.ExpenseItems
                                       where e.ExpenseId == request.ID
                                       select e;

                if (!expenseItemsInDb.Any())
                {
                    DeleteExpenseHistory(expenseInDb, entity);
                    DeleteExpense(expenseInDb, entity);

                    response.IsSuccess = true;
                    return(response);
                }

                foreach (var item in expenseItemsInDb)
                {
                    entity.ExpenseItems.Remove(item);
                }

                DeleteExpenseHistory(expenseInDb, entity);
                DeleteExpense(expenseInDb, entity);
                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Delete Expense Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }

            return(response);
        }
Exemple #12
0
        private static void RejectExpense(ExpenseApprovalRequest request, ExpenseAppEntities entity, ApprovalExpenseResponse response)
        {
            var expenseToBeRejected = (from expense in entity.Expenses
                                       where expense.ID == request.ExpenseId
                                       select expense).FirstOrDefault();

            if (expenseToBeRejected == null)
            {
                response.IsSuccess = false;
                return;
            }
            expenseToBeRejected.LastExpenseActionId = (int)StatusEnum.Rejected;
            entity.SaveChanges();
            response.ApprovalStatus = (int)ApprovalStatusEnum.Rejected;
            response.IsSuccess      = true;
        }
Exemple #13
0
        public static ShouldCheckEmailResponse CheckIfManagerShouldBeEmailed(ExpenseAppEntities entity)
        {
            ShouldCheckEmailResponse response = new ShouldCheckEmailResponse();

            var unapprovedExpenses = (from e in entity.GetUnApprovedExpenses
                                      select e).DefaultIfEmpty();

            if (unapprovedExpenses == null)
            {
                response.IsNeeded = false;
                return(response);
            }
            else
            {
                response.IsNeeded = true;
                return(response);
            }
        }
Exemple #14
0
        public void Execute(IJobExecutionContext context)
        {
            BaseResponse       response = new BaseResponse();
            ExpenseAppEntities entity   = new ExpenseAppEntities();

            try
            {
                ServiceHandler.CheckThenSendEmail(entity, response);
                response.IsSuccess = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            finally
            {
                entity.Dispose();
            }
        }
Exemple #15
0
        public static GetExpensesResponse GetExpenseByUserId(int userId)
        {
            GetExpensesResponse response = new GetExpensesResponse();
            ExpenseAppEntities  entity   = new ExpenseAppEntities();

            try
            {
                response.ExpenseDto = from expense in entity.Expenses.Where(e => e.UserId == userId)
                                      //where expense.UserId == userId
                                      //from user in Entity.Users.Where(user => user.ID == expense.UserId)
                                      //from history in Entity.ExpenseHistories.Where(history => history.ExpenseStatusId == expense.LastExpenseActionId)
                                      from status in entity.ExpenseStatus.Where(status => status.ID == expense.LastExpenseActionId)
                                      select new ExpenseDto
                {
                    ID                  = expense.ID,
                    CreatedDate         = expense.CreatedDate,
                    TotalAmount         = expense.TotalAmount,
                    UserId              = expense.UserId,
                    LastExpenseActionId = expense.LastExpenseActionId,
                    CurrentStatus       = status.StatusName
                };

                var user = (from u in entity.Users
                            where u.ID == userId
                            select u).Single();
                response.UserId = user.ID;

                //test
                //var expense = Entity.Expenses
                //            .Include(e => e.User)
                //            .Include(e => e.ExpenseHistories)
                //            .FirstOrDefault(x => x.ID == 4);
                //var a = expense.ExpenseHistories.LastOrDefault().ExpenseStatusId;

                response.IsSuccess = response.ExpenseDto == null ? false : true;
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Get Expense By UserId Unsuccessful", ex);
            }
            return(response);
        }
Exemple #16
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;
        }
Exemple #17
0
        public static void CreateExpenseHistory(int expenseId, ExpenseAppEntities entity, string rejectReason)
        {
            var expense = (from e in entity.Expenses
                           where e.ID == expenseId
                           select e).First();

            ExpenseHistory expenseHistory = new ExpenseHistory();

            expenseHistory.ExpenseId   = expense.ID;
            expenseHistory.CreatedBy   = expense.UserId;
            expenseHistory.CreatedDate = DateTime.Now;

            switch (expense.LastExpenseActionId)
            {
            case 1:
                expenseHistory.ExpenseStatusId = (int)StatusEnum.Ongoing;
                break;

            case 2:
                expenseHistory.ExpenseStatusId = (int)StatusEnum.WaitingForManagerApproval;
                break;

            case 3:
                expenseHistory.ExpenseStatusId = (int)StatusEnum.WaitingForAccountantApproval;
                break;

            case 4:
                expenseHistory.ExpenseStatusId = (int)StatusEnum.Completed;
                break;

            case 5:
                expenseHistory.ExpenseStatusId = (int)StatusEnum.Rejected;
                expenseHistory.RejectReason    = rejectReason;
                break;
            }
            entity.SaveChanges();

            entity.ExpenseHistories.Add(expenseHistory);
            entity.SaveChanges();
        }
Exemple #18
0
        public static BaseResponse CheckThenSendEmail(ExpenseAppEntities entity, BaseResponse response)
        {
            var managers = (from u in entity.Users
                            where u.UserRoleId == (int)UserRoleEnum.Manager
                            select u).ToList().DefaultIfEmpty();

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

            if (CheckIfManagerShouldBeEmailed(entity).IsNeeded)
            {
                foreach (var m in managers)
                {
                    SendEmail(entity, m);
                }
            }
            response.IsSuccess = true;
            return(response);
        }
Exemple #19
0
        public static ApprovalExpenseResponse ApproveOrRejectExpense(ExpenseApprovalRequest request)
        {
            ExpenseAppEntities      entity   = new ExpenseAppEntities();
            ApprovalExpenseResponse response = new ApprovalExpenseResponse();

            try
            {
                //to do:switch
                if (request.IsApproved)
                {
                    ApproveExpense(request, entity, response);
                    ExpenseHandlers.CreateExpenseHistory(request.ExpenseId, entity, request.RejectReason);
                    return(response);
                }
                else if (!request.IsApproved)
                {
                    RejectExpense(request, entity, response);
                    ExpenseHandlers.CreateExpenseHistory(request.ExpenseId, entity, request.RejectReason);
                    return(response);
                }
                else
                {
                    response.ApprovalStatus = (int)ApprovalStatusEnum.Unknown;
                    response.IsSuccess      = false;
                    return(response);
                }
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Approve or Reject Expense Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
Exemple #20
0
        public static LoginResponse Login(LoginRequest request)
        {
            ExpenseAppEntities entity   = new ExpenseAppEntities();
            LoginResponse      response = new LoginResponse();

            try
            {
                var user = (from u in entity.Users
                            where u.Email == request.Email && u.Password == request.Password
                            select u).SingleOrDefault();

                if (user != null)
                {
                    HttpContext.Current.Session[SessionConstants.UserId]     = user.ID;
                    HttpContext.Current.Session[SessionConstants.UserEmail]  = user.Email.ToString();
                    HttpContext.Current.Session[SessionConstants.UserName]   = user.FullName.ToString();
                    HttpContext.Current.Session[SessionConstants.UserRoleId] = user.UserRoleId;

                    response.UserId     = user.ID;
                    response.UserRoleId = user.UserRoleId;
                    response.IsSuccess  = true;
                }
                else
                {
                    response.IsSuccess = false;
                }
            }
            catch (Exception ex)
            {
                response.IsSuccess = false;
                log.Error("Login Unsuccessful", ex);
            }
            finally
            {
                entity.Dispose();
            }
            return(response);
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            try
            {
                var allowedOrigin = context.OwinContext.Get <string>("as:clientAllowedOrigin");

                if (allowedOrigin == null)
                {
                    allowedOrigin = "*";
                }

                context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

                // Validate your user and base on validation return claim identity or invalid_grant error
                using (var _dbcontext = new ExpenseAppEntities())
                {
                    var userInfo = _dbcontext.UserMasters.FirstOrDefault(u => u.Email == context.UserName);

                    if (userInfo != null && userInfo.IsActive == true)
                    {
                        byte[] saltBytes = new byte[8];

                        saltBytes = Convert.FromBase64String(userInfo.PasswordSalt);

                        if (ENCDEC.ComputeHash(context.Password, "MD5", saltBytes) == userInfo.PasswordHash)
                        {
                            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                            identity.AddClaim(new Claim(ClaimTypes.Name, userInfo.FirstName));
                            identity.AddClaim(new Claim(ClaimTypes.Role, userInfo.UserTypeMaster.Description));
                            identity.AddClaim(new Claim(ClaimTypes.Email, userInfo.Email));
                            identity.AddClaim(new Claim("UserID", userInfo.UserID.ToString()));
                            identity.AddClaim(new Claim("UserTypeID", userInfo.UserTypeMaster.UserTypeID.ToString()));

                            var props = new AuthenticationProperties(new Dictionary <string, string>
                            {
                                {
                                    "userName", userInfo.FirstName
                                },
                                {
                                    "role", userInfo.UserTypeMaster.Description
                                },
                                {
                                    "UserID", userInfo.UserID.ToString()
                                },
                                {
                                    "UserTypeID", userInfo.UserTypeID.ToString()
                                }
                            });
                            var ticket = new AuthenticationTicket(identity, props);
                            context.Validated(ticket);
                        }
                        else
                        {
                            context.SetError("invalid_grant", "The user name or password is incorrect.");
                            return;
                        }
                    }
                    else
                    {
                        if (userInfo.IsActive == false)
                        {
                            context.SetError("Not Approved", "The user account disabled by the admin.");
                        }
                        else
                        {
                            context.SetError("invalid_grant", "The user name or password is incorrect.");
                        }
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #22
0
 private static void DeleteExpense(Expense expense, ExpenseAppEntities entity)
 {
     entity.Expenses.Remove(expense);
     entity.SaveChanges();
 }
Exemple #23
0
 private static void UpdateExpenseItem(ExpenseItem expenseItemInDb, ExpenseItemDto expenseItemDto, ExpenseAppEntities entity)
 {
     expenseItemInDb.ExpenseItemDate = expenseItemDto.ExpenseItemDate;
     expenseItemInDb.Description     = expenseItemDto.Description;
     expenseItemInDb.Amount          = expenseItemDto.Amount;
     entity.SaveChanges();
 }
Exemple #24
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);
            }
        }
Exemple #25
0
        private static void CreateExpenseItem(Expense expenseInDb, ExpenseItemDto expenseItemDto, ExpenseAppEntities entity)
        {
            ExpenseItem expenseItem = new ExpenseItem();

            expenseItem.ExpenseId = expenseInDb.ID;
            entity.ExpenseItems.Add(expenseItem);

            expenseItem.ExpenseItemDate = expenseItemDto.ExpenseItemDate;
            expenseItem.Description     = expenseItemDto.Description;
            expenseItem.Amount          = expenseItemDto.Amount;

            entity.SaveChanges();
        }
Exemple #26
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;
        }