public static LoanApplicationStatu ChangeStatus(LoanApplication loanApplication, LoanApplicationStatusType statusTo, DateTime today)
 {
     LoanApplicationStatu status = GetActive(loanApplication);
     if (CanChangeStatusTo(status.LoanApplicationStatusType, statusTo))
     {
         return CreateOrUpdateCurrent(status, statusTo, today);
     }
     return status;
 }
        public static bool CanChangeStatusTo(LoanApplication loanApplication, LoanApplicationStatusType statusTo)
        {
            LoanApplicationStatu status = GetActive(loanApplication);

            if (status == null)
                return true;

            return CanChangeStatusTo(status.LoanApplicationStatusType, statusTo);
        }
        public static LoanApplicationStatu CreateOrUpdateCurrent(LoanApplication loanApplication, LoanApplicationStatusType statusType, DateTime today)
        {
            LoanApplicationStatu loanAppStatus = GetActive(loanApplication);
            if (loanAppStatus != null && loanAppStatus.LoanApplicationStatusType.Id != statusType.Id)
                loanAppStatus.IsActive = false;

            if (loanAppStatus == null || loanAppStatus.LoanApplicationStatusType.Id != statusType.Id)
            {
                LoanApplicationStatu loanStatus = new LoanApplicationStatu();
                loanStatus.LoanApplication = loanApplication;
                loanStatus.LoanApplicationStatusType = statusType;
                loanStatus.Remarks = null;
                loanStatus.TransitionDateTime = today;
                loanStatus.IsActive = true;

                Context.LoanApplicationStatus.AddObject(loanStatus);
                Context.SaveChanges();
                return loanStatus;
            }
            return loanAppStatus;
        }
 public static bool CanChangeStatusTo(LoanApplicationStatusType statusFrom, LoanApplicationStatusType statusTo)
 {
     if (statusTo == LoanApplicationStatusType.CancelledType)
     {
         return (statusFrom.Id == LoanApplicationStatusType.PendingApprovalType.Id
             || statusFrom.Id == LoanApplicationStatusType.ApprovedType.Id
             || statusFrom.Id == LoanApplicationStatusType.PendingInFundingType.Id);
     }
     else if(statusTo == LoanApplicationStatusType.RejectedType
         || statusTo == LoanApplicationStatusType.ApprovedType)
     {
         return statusFrom.Id == LoanApplicationStatusType.PendingApprovalType.Id;
     }
     else if (statusTo == LoanApplicationStatusType.ClosedType)
     {
         return (statusFrom.Id == LoanApplicationStatusType.PendingApprovalType.Id
             || statusFrom.Id == LoanApplicationStatusType.PendingInFundingType.Id);
     }
     else if (statusTo == LoanApplicationStatusType.PendingInFundingType)
     {
         return (statusFrom.Id == LoanApplicationStatusType.PendingApprovalType.Id);
     }
     return false;
 }
 public static LoanApplicationStatusType GetByName(LoanApplicationStatusType status)
 {
     return Context.LoanApplicationStatusTypes.SingleOrDefault(entity => entity.Name == status.Name);
 }
 public static IQueryable<LoanApplicationStatusType> All(LoanApplicationStatusType status)
 {
     return Context.LoanApplicationStatusTypes.Where(entity => entity.Name == status.Name);
 }
        private static LoanApplicationStatu CreateOrUpdateCurrent(LoanApplicationStatu current, LoanApplicationStatusType statusType, DateTime today)
        {
            if (current != null && current.LoanApplicationStatusType.Id != statusType.Id)
                current.IsActive = false;

            if (current == null || current.LoanApplicationStatusType.Id != statusType.Id)
            {
                LoanApplicationStatu loanStatus = new LoanApplicationStatu();
                loanStatus.LoanApplication = current.LoanApplication;
                loanStatus.LoanApplicationStatusType = statusType;
                loanStatus.Remarks = null;
                loanStatus.TransitionDateTime = today;
                loanStatus.IsActive = true;

                Context.LoanApplicationStatus.AddObject(loanStatus);
                return loanStatus;
            }
            return current;
        }
 public static LoanApplicationStatu GetStatus(LoanApplication loanApplication, LoanApplicationStatusType type)
 {
     return loanApplication.LoanApplicationStatus.FirstOrDefault(entity => entity.StatusTypeId == type.Id);
 }