public async Task ApproveLoan(Guid loanId, [FromBody] List <ApproveRuleDTO> approveRules)
        {
            ApproveLoanModel approveLoanModel = _mapper.Map <ApproveLoanModel>(approveRules);

            approveLoanModel.LoanId = loanId;
            CheckLoanValid checkLoanValid = await _managerLoansService.ApproveLoan(approveLoanModel);

            await _messageSession.Send(checkLoanValid)
            .ConfigureAwait(false);
        }
        public async Task Update(Guid loanId, [FromBody] LoanDTO loanToUpdate)//לבדוק שהמיפוי אכן עובד ולראות אם לקבל יד
        {
            LoanModel loanModel = _mapper.Map <LoanModel>(loanToUpdate);
            Guid      _loanId   = await _loansService.Update(loanId, loanModel);//האם צריך שיחזור היד

            CheckLoanValid loanToCheck = _mapper.Map <CheckLoanValid>(loanModel);

            loanToCheck.LoanDetails.LoanId = loanId;//לבדוק שאכן מאותחל בערך
            await _messageSession.Send(loanToCheck)
            .ConfigureAwait(false);
        }
        public async Task ApproveLoan(Guid loanId, List <ApproveRuleDTO> approveRules)
        {
            List <ApproveRuleModel> approveRulesModel = _mapper.Map <List <ApproveRuleModel> >(approveRules);
            ApproveLoanModel        approveLoanModel  = new ApproveLoanModel()
            {
                approveRules = approveRulesModel,
                LoanId       = loanId
            };
            CheckLoanValid checkLoanValid = await _managerLoansService.ApproveLoan(approveLoanModel);

            await _messageSession.Send(checkLoanValid);
        }
        public async Task Update(Guid loanId, [FromBody] LoanDTO loanToUpdate)
        {
            LoanModel loanModel = _mapper.Map <LoanModel>(loanToUpdate);
            await _loansService.Update(loanId, loanModel);

            CheckLoanValid loanToCheck = new CheckLoanValid();
            LoanDetails    loanDetails = _mapper.Map <LoanDetails>(loanModel);

            loanDetails.LoanId      = loanId;
            loanToCheck.LoanDetails = loanDetails;
            await _messageSession.Send(loanToCheck);
        }
Esempio n. 5
0
        public async Task <LoanChecked> CheckLegality(CheckLoanValid loanToCheck)
        {
            List <RuleModel> rulesTree = await _checkRulesRepository.getRules(loanToCheck.LoanDetails.LoanProviderId);

            if (rulesTree.Count() == 0)
            {
                throw new LoanProviderNotFoundException();
                //write to db log
            }
            LoanChecked loanChecked = ScanProviderTreeRules(rulesTree, loanToCheck);

            loanChecked.LoanId = loanToCheck.LoanDetails.LoanId;
            return(loanChecked);
        }
        public async Task <CheckLoanValid> ApproveLoan(ApproveLoanModel approveLoanModel)
        {
            bool isLoanExist = await _managerLoansRepository.CheckLoanExist(approveLoanModel.LoanId);

            if (!isLoanExist)
            {
                throw new LoanNotFoundException();
            }
            await ApproveFailureRulesInDB(approveLoanModel);

            CheckLoanValid checkLoanValid = await CreateCheckLoanValid(approveLoanModel);

            return(checkLoanValid);
        }
        public async Task <Guid> Create([FromBody] LoanDTO loan)
        {
            LoanModel loanModel = _mapper.Map <LoanModel>(loan);
            Guid      loanId    = await _loansService.Create(loanModel);

            CheckLoanValid loanToCheck = new CheckLoanValid();
            LoanDetails    loanDetails = _mapper.Map <LoanDetails>(loanModel);

            loanDetails.LoanId      = loanId;
            loanToCheck.LoanDetails = loanDetails;
            await _messageSession.Send(loanToCheck);

            return(loanId);
            //Ok($"Your loan created successfully. Loan Id:{loanId}");
        }
        public async Task <Guid> Create([FromBody] LoanDTO loan)//לבדוק שהמיפוי אכן עובד ולראות אם לקבל יד
        {
            LoanModel loanModel = _mapper.Map <LoanModel>(loan);
            Guid      loanId    = await _loansService.Create(loanModel);

            CheckLoanValid loanToCheck = new CheckLoanValid();
            LoanDetails    loanDetails = _mapper.Map <LoanDetails>(loanModel);

            loanDetails.LoanId      = loanId;
            loanToCheck.LoanDetails = loanDetails;
            await _messageSession.Send(loanToCheck)
            .ConfigureAwait(false);    //del api

            return(loanId);
        }
        private async Task <CheckLoanValid> CreateCheckLoanValid(ApproveLoanModel approveLoanModel)
        {
            List <int> ignoreRules = new List <int>();

            foreach (var r in approveLoanModel.approveRules)
            {
                ignoreRules.Add(r.ApproveRuleId);
            }
            LoanModel loanModel = await _managerLoansRepository.GetLoanById(approveLoanModel.LoanId);

            CheckLoanValid checkLoanValid = new CheckLoanValid();//האם המיםוי של יד נצרך
            LoanDetails    loanDetails    = _mapper.Map <LoanDetails>(loanModel);

            checkLoanValid.LoanDetails        = loanDetails;
            checkLoanValid.IgnoreRules        = ignoreRules;
            checkLoanValid.LoanDetails.LoanId = approveLoanModel.LoanId;
            return(checkLoanValid);
        }
Esempio n. 10
0
        private LoanChecked ScanProviderTreeRules(List <RuleModel> rulesTree, CheckLoanValid loanToCheck)
        {
            LoanChecked         loanChecked        = new LoanChecked();
            bool                isBranchRulesValid = true;
            List <RuleTreeNode> checkedRulesTree   = _mapper.Map <List <RuleTreeNode> >(rulesTree);
            List <RuleModel>    ruleRoots          = rulesTree.Where(rl => rl.ParentRule == null).ToList();
            List <RuleTreeNode> CheckedRulesRoots  = checkedRulesTree.Where(rl => rl.ParentRuleId == 0).ToList();

            for (int i = 0; i < ruleRoots.Count; i++)
            {
                isBranchRulesValid = CheckBranchRulesValid(ruleRoots[i], CheckedRulesRoots[i], loanToCheck);
                if (isBranchRulesValid)
                {
                    loanChecked = CreateValidCheckedLoan(checkedRulesTree);
                    return(loanChecked);
                }
            }
            loanChecked = CreateInvalidCheckedLoan(checkedRulesTree);
            return(loanChecked);
        }
Esempio n. 11
0
        private bool CheckBranchRulesValid(RuleModel ruleRoot, RuleTreeNode checkedRulesRoot, CheckLoanValid message)
        {
            //depth tree scan using stack
            bool isBranchValid = true;
            Stack <RuleModel>    rulesTreeStack        = new Stack <RuleModel>();
            Stack <RuleTreeNode> checkedRulesTreeStack = new Stack <RuleTreeNode>();

            rulesTreeStack.Push(ruleRoot);
            checkedRulesTreeStack.Push(checkedRulesRoot);
            while (!(rulesTreeStack.Count == 0))
            {
                var currentRuleToCheck         = rulesTreeStack.Pop();
                var currentCheckedRuleToUpdate = checkedRulesTreeStack.Pop();

                for (int j = 0; j < currentRuleToCheck.ChildrenRules.Count; j++)//create stack of branch nodes
                {
                    rulesTreeStack.Push(currentRuleToCheck.ChildrenRules[j]);
                    checkedRulesTreeStack.Push(currentCheckedRuleToUpdate.ChildrenRules[j]);
                }
                var  loanValueToCompare = message.LoanDetails.GetType().GetProperty(currentRuleToCheck.Parameter).GetValue(message.LoanDetails, null);
                bool isRuleValid        = CheckRuleValid(loanValueToCompare, currentRuleToCheck, message.IgnoreRules);
                isBranchValid = isRuleValid ? isBranchValid : false;
                UpdateCheckedRulesTree(loanValueToCompare, currentCheckedRuleToUpdate, currentRuleToCheck, isRuleValid);

                if (currentRuleToCheck.ChildrenRules.Count == 0)//at end of branch
                {
                    if (isBranchValid)
                    {
                        return(true);
                    }
                    isBranchValid = true;
                }
            }
            return(false);
        }