public async Task <LoanApplicant> FillInFormForLoanAsync(LoanApplicantDto loanApplicantDto)
        {
            ValidatorLoanService.ValidatorDetailsOfLoanIfAreNull(loanApplicantDto);

            ValidatorLoanService.ValidatorGmailId(loanApplicantDto);

            ValidatorLoanService.ValidatorDetailsOfLoan(loanApplicantDto);

            var isEgnCorrect = CheckEGNForDigit(loanApplicantDto.EGN);

            ValidatorLoanService.ValidatorEGN(isEgnCorrect);

            var user = await this.context.Users
                       .Include(l => l.LoanApplicant)
                       .Where(userId => userId.Id == loanApplicantDto.UserId)
                       .FirstOrDefaultAsync();


            var encodeName        = this.encodeDecodeService.Encrypt(loanApplicantDto.Name);
            var encodeEGN         = this.encodeDecodeService.Encrypt(loanApplicantDto.EGN);
            var encodePhoneNumber = this.encodeDecodeService.Encrypt(loanApplicantDto.PhoneNumber);


            var email = await this.context.Emails
                        .Where(gmailId => gmailId.GmailId == loanApplicantDto.GmailId)
                        .SingleOrDefaultAsync();

            var loan = new LoanApplicant
            {
                Name        = encodeName,
                EGN         = encodeEGN,
                PhoneNumber = encodePhoneNumber,
                UserId      = loanApplicantDto.UserId,
                User        = user,
                Emails      = email,
                GmailId     = loanApplicantDto.GmailId
            };

            email.SetCurrentStatus = DateTime.Now;
            email.EmailStatusId    = (int)EmailStatusesType.Open;

            await this.context.LoanApplicants.AddAsync(loan);

            await this.context.SaveChangesAsync();

            return(loan);
        }
        public async Task <bool> ApproveLoanAsync(ApproveLoanDto approveLoanDto)
        {
            ValidatorLoanService.ValidatorApproveLoan(approveLoanDto);

            int expectedResult = int.Parse(approveLoanDto.IsApprove);

            var loan = await this.context.LoanApplicants
                       .Where(gmailId => gmailId.GmailId == approveLoanDto.GmailId)
                       .FirstOrDefaultAsync();

            var email = await this.context.Emails
                        .Where(gmailId => gmailId.GmailId == approveLoanDto.GmailId)
                        .FirstOrDefaultAsync();

            var user = await this.context.Users
                       .Where(id => id.Id == approveLoanDto.UserId)
                       .SingleOrDefaultAsync();

            if (expectedResult == rejectLoan)
            {
                loan.IsApproved = false;
                loan.User       = user;
            }

            if (expectedResult == approveLoan)
            {
                loan.IsApproved = true;
                loan.User       = user;
            }

            email.SetCurrentStatus = DateTime.Now;
            email.EmailStatusId    = (int)EmailStatusesType.Closed;
            email.SetTerminalState = DateTime.Now;

            await this.context.SaveChangesAsync();

            return(true);
        }