Пример #1
0
        public ActionResult Credit(CreditModel model)
        {
            if (ModelState.IsValid)
            {
                CreditConfigInfo creditConfigInfo = BSPConfig.CreditConfig;

                creditConfigInfo.PayCreditName              = model.PayCreditName;
                creditConfigInfo.PayCreditPrice             = model.PayCreditPrice;
                creditConfigInfo.DayMaxSendPayCredits       = model.DayMaxSendPayCredits;
                creditConfigInfo.OrderMaxUsePayCredits      = model.OrderMaxUsePayCredits;
                creditConfigInfo.RegisterPayCredits         = model.RegisterPayCredits;
                creditConfigInfo.LoginPayCredits            = model.LoginPayCredits;
                creditConfigInfo.VerifyEmailPayCredits      = model.VerifyEmailPayCredits;
                creditConfigInfo.VerifyMobilePayCredits     = model.VerifyMobilePayCredits;
                creditConfigInfo.CompleteUserInfoPayCredits = model.CompleteUserInfoPayCredits;
                creditConfigInfo.CompleteOrderPayCredits    = model.CompleteOrderPayCredits;
                creditConfigInfo.ReviewProductPayCredits    = model.ReviewProductPayCredits;

                creditConfigInfo.RankCreditName              = model.RankCreditName;
                creditConfigInfo.DayMaxSendRankCredits       = model.DayMaxSendRankCredits;
                creditConfigInfo.RegisterRankCredits         = model.RegisterRankCredits;
                creditConfigInfo.LoginRankCredits            = model.LoginRankCredits;
                creditConfigInfo.VerifyEmailRankCredits      = model.VerifyEmailRankCredits;
                creditConfigInfo.VerifyMobileRankCredits     = model.VerifyMobileRankCredits;
                creditConfigInfo.CompleteUserInfoRankCredits = model.CompleteUserInfoRankCredits;
                creditConfigInfo.CompleteOrderRankCredits    = model.CompleteOrderRankCredits;
                creditConfigInfo.ReviewProductRankCredits    = model.ReviewProductRankCredits;

                BSPConfig.SaveCreditConfig(creditConfigInfo);
                Credits.ResetCreditConfig();
                AddAdminOperateLog("修改积分设置");
                return(PromptView(Url.Action("credit"), "修改积分设置成功"));
            }
            return(View(model));
        }
Пример #2
0
        private void HandleEligibility(InsessionEligibility eligibility)
        {
            var watch = Stopwatch.StartNew();

            _logger.LogInformation($"Eligibility Received for crediting: {eligibility.ToJson()}");
            _logger.LogInformation($"Player {eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId} has been credited with {eligibility.CreditAmount} for offer {eligibility.OfferId}");

            CreditModel blockData = new CreditModel(eligibility, true);

            /////////Block
            var    transaction  = _creditBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result;
            IBlock lastBlock    = transaction.GetLastBlock();
            IBlock currentBlock = new Block(lastBlock.Index, "Player_Credited_v1", blockData.ToJson(), watch.Elapsed, lastBlock.Hash);

            transaction.Add(currentBlock);

            if (transaction.IsValid())
            {
                var conversion = new ConversionModel()
                {
                    Amount         = 500,
                    GamingSystemId = eligibility.GamingSystemId,
                    ProductId      = eligibility.ProductId,
                    UserId         = eligibility.UserId
                };

                PubishTransction(new TransactionMessage.Insession(transaction));
                Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(60), Self, conversion, Self);
            }
            ///////////
        }
Пример #3
0
        public async Task <ActionResult <CreditModel> > Put(int InvoiceId, int Id, CreditModel updatedModel)
        {
            try
            {
                var currentCredit = await _repository.GetCreditAsync(InvoiceId, Id);

                if (currentCredit == null)
                {
                    return(NotFound($"Could not find Credit with Id of {Id}"));
                }

                _mapper.Map(updatedModel, currentCredit);

                if (await _repository.UpdateCreditAsync(InvoiceId, currentCredit))
                {
                    return(_mapper.Map <CreditModel>(currentCredit));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "Database Failure"));
            }

            return(BadRequest());
        }
Пример #4
0
 public static Credit ToCredit(this CreditModel credit, ICommonService commonService)
 {
     Mapper.Initialize(e =>
     {
         e.CreateMap <ClientModel, Client>();
         e.CreateMap <PlanOfCreditModel, PlanOfCredit>();
         e.CreateMap <CreditModel, Credit>()
         .ForMember(t => t.Balance,
                    t => t.MapFrom(r => r.MainAccount.Balance))
         .ForMember(t => t.StartDate,
                    t => t.MapFrom(r => commonService.StartDate + new TimeSpan(r.StartDate, 0, 0, 0)))
         .ForMember(t => t.EndDate,
                    t => t.MapFrom(r => commonService.StartDate + new TimeSpan(r.EndDate, 0, 0, 0)))
         .ForMember(t => t.CurrentPercentAmount, t => t.MapFrom(r => Math.Abs(r.PercentAccount.Balance)))
         .ForMember(t => t.IsCanCloseToday,
                    t =>
                    t.MapFrom(
                        r =>
                        (r.EndDate <= commonService.CurrentBankDay) &&
                        r.Amount > 0))
         .ForMember(t => t.IsCanPayPercentToday,
                    t =>
                    t.MapFrom(
                        r =>
                        (commonService.CurrentBankDay - r.StartDate) % commonService.MonthLength == 0 &&
                        r.Amount > 0));
     });
     return(Mapper.Map <CreditModel, Credit>(credit));
 }
Пример #5
0
        public IActionResult CreditWallet([FromBody] CreditModel credit)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            var Ispermitted = isPermitted("ALL", User.FindFirstValue("RoleId"));

            if (!Ispermitted)
            {
                return(Unauthorized());
            }
            var Token = _context.Tokens.Where(x => x.Token == credit.VerificationToken).FirstOrDefault();

            if (Token == null)
            {
                return(BadRequest("Invalid Token"));
            }

            if (Token.isUsed || Token.ExpiryDate <= DateTime.Now)
            {
                return(BadRequest("Invalid Token"));
            }

            if (Token.Amount != credit.Amount)
            {
                return(BadRequest("Token Invalid for Specified Amount"));
            }
            if (Token.ResellerId != credit.ResellerId)
            {
                return(BadRequest("Token is for different reseller"));
            }

            var Reseller = _context.Users.Where(x => x.UserModelId == credit.ResellerId).FirstOrDefault();

            if (Reseller == null)
            {
                return(BadRequest("Reseller not recognised"));
            }
            Reseller.Balance += credit.Amount;
            _context.Entry(Reseller).State = EntityState.Modified;
            Token.isUsed = true;
            _context.Entry(Token).State = EntityState.Modified;


            var Histo = new CreditHistory
            {
                Amount     = credit.Amount,
                Id         = Guid.NewGuid().ToString(),
                IssuedDate = DateTime.Now,
                IssuerId   = User.FindFirstValue("Id"),
                ResellerId = credit.ResellerId,
            };

            _context.Histories.Add(Histo);
            _context.SaveChanges();


            return(Ok("Wallet Creditied Successfully"));
        }
Пример #6
0
        public async Task <ActionResult <CreditModel> > Post(int invoiceId, CreditModel model)
        {
            try
            {
                //Make sure CreditId is not already taken
                var existing = await _repository.GetCreditAsync(invoiceId, model.Id);

                if (existing != null)
                {
                    return(BadRequest("Credit Id in Use"));
                }

                //map
                var credit = _mapper.Map <Credit>(model);

                //save and return
                if (!await _creditService.SaveAndProcessCredit(_repository, invoiceId, credit))
                {
                    return(BadRequest("Bad request, could not create record!"));
                }
                else
                {
                    var location = _linkGenerator.GetPathByAction("Get",
                                                                  "Credit",
                                                                  new { credit.InvoiceId, credit.Id });

                    return(Created(location, _mapper.Map <CreditModel>(credit)));
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "Database Failure"));
            }
        }
Пример #7
0
        public void Create(CreditModel credit, bool isCardNeeded)
        {
            if (credit.Amount == 0)
            {
                throw new ServiceException("Amount cannot be zero.");
            }

            var dbCredit = Mapper.Map <CreditModel, ORMLibrary.Credit>(credit);

            dbCredit.PlanOfCredit = Context.PlanOfCredits.FirstOrDefault(e => e.Id == credit.PlanId);
            dbCredit.Client       = Context.Clients.FirstOrDefault(e => e.Id == credit.ClientId);
            AccountService.CreateAccountsForCredit(dbCredit);
            dbCredit.StartDate = SystemInformationService.CurrentBankDay;
            dbCredit.EndDate   = dbCredit.StartDate.AddMonths(dbCredit.PlanOfCredit.MonthPeriod);
            dbCredit.Amount    = credit.Amount;

            if (isCardNeeded)
            {
                InitializeCredidCardCredentials(dbCredit);
            }

            Context.Credits.Add(dbCredit);
            Context.SaveChanges();

            TakeMoneyForCredit(dbCredit);
            if (!isCardNeeded)
            {
                WithDrawCreditFromCashDesk(dbCredit);
            }
            Context.SaveChanges();
        }
Пример #8
0
 public static Credit ToCredit(this CreditModel credit, ISystemInformationService SystemInformationService)
 {
     Mapper.Initialize(e =>
     {
         e.CreateMap <ClientModel, Client>();
         e.CreateMap <PlanOfCreditModel, PlanOfCredit>();
         e.CreateMap <CreditModel, Credit>()
         .ForMember(t => t.Balance,
                    t => t.MapFrom(r => r.MainAccount.Balance))
         .ForMember(t => t.StartDate,
                    t => t.MapFrom(r => r.StartDate))
         .ForMember(t => t.EndDate,
                    t => t.MapFrom(r => r.EndDate))
         .ForMember(t => t.CurrentPercentAmount, t => t.MapFrom(r => Math.Abs(r.PercentAccount.Balance)))
         .ForMember(t => t.IsCanCloseToday,
                    t =>
                    t.MapFrom(
                        r =>
                        (r.EndDate <= SystemInformationService.CurrentBankDay) &&
                        r.Amount > 0))
         .ForMember(t => t.IsCanPayPercentToday,
                    t =>
                    t.MapFrom(
                        r =>
                        (SystemInformationService.CurrentBankDay - r.StartDate).TotalDays % SystemInformationService.CountDaysInMonth == 0 &&
                        r.Amount > 0));
     });
     return(Mapper.Map <CreditModel, Credit>(credit));
 }
Пример #9
0
        public ActionResult Credit()
        {
            CreditConfigInfo creditConfigInfo = BSPConfig.CreditConfig;

            CreditModel model = new CreditModel();

            model.PayCreditName              = creditConfigInfo.PayCreditName;
            model.PayCreditPrice             = creditConfigInfo.PayCreditPrice;
            model.DayMaxSendPayCredits       = creditConfigInfo.DayMaxSendPayCredits;
            model.OrderMaxUsePayCredits      = creditConfigInfo.OrderMaxUsePayCredits;
            model.RegisterPayCredits         = creditConfigInfo.RegisterPayCredits;
            model.LoginPayCredits            = creditConfigInfo.LoginPayCredits;
            model.VerifyEmailPayCredits      = creditConfigInfo.VerifyEmailPayCredits;
            model.VerifyMobilePayCredits     = creditConfigInfo.VerifyMobilePayCredits;
            model.CompleteUserInfoPayCredits = creditConfigInfo.CompleteUserInfoPayCredits;
            model.CompleteOrderPayCredits    = creditConfigInfo.CompleteOrderPayCredits;
            model.ReviewProductPayCredits    = creditConfigInfo.ReviewProductPayCredits;

            model.RankCreditName              = creditConfigInfo.RankCreditName;
            model.DayMaxSendRankCredits       = creditConfigInfo.DayMaxSendRankCredits;
            model.RegisterRankCredits         = creditConfigInfo.RegisterRankCredits;
            model.LoginRankCredits            = creditConfigInfo.LoginRankCredits;
            model.VerifyEmailRankCredits      = creditConfigInfo.VerifyEmailRankCredits;
            model.VerifyMobileRankCredits     = creditConfigInfo.VerifyMobileRankCredits;
            model.CompleteUserInfoRankCredits = creditConfigInfo.CompleteUserInfoRankCredits;
            model.CompleteOrderRankCredits    = creditConfigInfo.CompleteOrderRankCredits;
            model.ReviewProductRankCredits    = creditConfigInfo.ReviewProductRankCredits;

            return(View(model));
        }
Пример #10
0
 public static CreateCreditModel ToCreateCreditModel(this CreditModel credit, IPlanOfCreditService planService, IClientService clientService)
 {
     Mapper.Initialize(e => e.CreateMap <CreditModel, CreateCreditModel>()
                       .ForMember(t => t.CreditPlans, t => t.MapFrom(
                                      r => planService.GetAll().Select(Mapper.Map <PlanOfCreditModel, PlanOfCredit>)))
                       .ForMember(t => t.Clients,
                                  t => t.MapFrom(r => clientService.GetAll().Select(y => y.ToClient(clientService)))));
     return(Mapper.Map <CreditModel, CreateCreditModel>(credit));
 }
        public async Task <IActionResult> Index(Guid creditId)
        {
            CreditModel credit = await creditService.GetAsync(creditId);

            if (credit == null || string.IsNullOrEmpty(credit.CreditDescription))
            {
                return(NotFound());
            }
            return(View(credit));
        }
Пример #12
0
        public HttpResponseMessage SaveCredit([FromBody] CreditModel CreditModel)
        {
            try
            {
                if (CreditModel.CustomerId == 0)
                {
                    return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("error", "Customer Id is blank"), Configuration.Formatters.JsonFormatter));
                }
                if (CreditModel.Credits == null || CreditModel.Credits == "")
                {
                    return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("error", "Credit is blank"), Configuration.Formatters.JsonFormatter));
                }

                var customer = _CustomerService.GetCustomers().Where(c => c.CustomerId == CreditModel.CustomerId).FirstOrDefault();
                if (customer != null)
                {
                    var credits = _CreditService.GetCredits().Where(c => c.CustomerId == CreditModel.CustomerId).FirstOrDefault();
                    if (credits == null)
                    {
                        Mapper.CreateMap <CreditModel, Credit>();
                        var credit = Mapper.Map <CreditModel, Credit>(CreditModel);
                        _CreditService.InsertCredit(credit);
                        Mapper.CreateMap <Credit, CreditResponseModel>();
                        CreditResponseModel CreditResponseModel = Mapper.Map <Credit, CreditResponseModel>(credit);

                        return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("success", CreditResponseModel), Configuration.Formatters.JsonFormatter));
                    }
                    else
                    {
                        credits.Credits = (CreditModel.Credits != null || CreditModel.Credits != "")?CreditModel.Credits:credits.Credits;
                        _CreditService.UpdateCredit(credits);
                        Mapper.CreateMap <Credit, CreditResponseModel>();
                        CreditResponseModel CreditResponseModel = Mapper.Map <Credit, CreditResponseModel>(credits);

                        return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("success", CreditResponseModel), Configuration.Formatters.JsonFormatter));
                    }
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("error", "Customer id is wrong."), Configuration.Formatters.JsonFormatter));
                }
            }
            catch (Exception ex)
            {
                string ErrorMsg = ex.Message.ToString();
                ErrorLogging.LogError(ex);
                return(Request.CreateResponse(HttpStatusCode.OK, CommonCls.CreateMessage("error", "Please try again."), Configuration.Formatters.JsonFormatter));
            }
        }
Пример #13
0
        public ActionResult Index(CreditModel creditData)
        {
            if (ModelState.IsValid)
            {
                Calc   calculator = new Calc();
                double annuity    = calculator.Annuitet(creditData.Amount, creditData.Time, creditData.Term);
                TempData["annuitet"] = annuity;
                TempData["items"]    = calculator.GetItemsByMonth(creditData.Amount, creditData.Time, annuity, creditData.Term);

                TempData["overpayments"] = calculator.OverPayments(creditData.Amount, creditData.Time, annuity);
                TempData["total"]        = calculator.Total(creditData.Amount, creditData.Time, annuity);

                return(RedirectToAction("Table"));
            }

            return(View(creditData));
        }
Пример #14
0
        public async Task <CreditModel> GetCredits()
        {
            var request = (HttpWebRequest)WebRequest.Create(this.config.ResolveURL("get_credits"));

            request.Method      = Constants.GET;
            request.ContentType = Constants.JSON;
            request.Credentials = this.config.Credentials;
            request.Headers.Add("Authorization", this.config.AuthorizationHeader);
            return(await Task.Run(() => {
                using (var httpResponse = (HttpWebResponse)request.GetResponse()) {
                    using (StreamReader sr = new StreamReader(httpResponse.GetResponseStream())) {
                        string responseAsText = sr.ReadToEnd();
                        Console.WriteLine(responseAsText);
                        CreditModel responseModel = JsonConvert.DeserializeObject <CreditModel>(responseAsText);
                        return responseModel;
                    }
                }
            }));
        }
Пример #15
0
        public IActionResult Post([FromBody] CreditModel creditModel)
        {
            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri("http://207.154.196.92:5002/");
            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", HttpContext.Session.GetString("token"));

            HttpResponseMessage response = httpClient.GetAsync("api/customer").Result;

            string responseBody = response.Content.ReadAsStringAsync().Result;

            creditModel.aldigi_kredi_sayi = Convert.ToInt32(responseBody.Remove(0, responseBody.IndexOf("creditNumber") + 14).Split('}')[0]);
            string jsonData = JsonConvert.SerializeObject(creditModel);

            httpClient             = new HttpClient();
            httpClient.BaseAddress = new Uri("http://ml-python.herokuapp.com/");
            var content = new StringContent(jsonData.ToString(), Encoding.UTF8, "application/json");

            response = httpClient.PostAsync("/api", content).Result;

            responseBody = response.Content.ReadAsStringAsync().Result;

            if (responseBody.Contains("0"))
            {
                httpClient             = new HttpClient();
                httpClient.BaseAddress = new Uri("http://207.154.196.92:5002/");
                httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", HttpContext.Session.GetString("token"));
                var res = httpClient.PostAsync("api/customer", null).Result;

                return(Ok(new { status = "success", message = "Kredi başvurunuz olumlu sonuçlanmıştır." }));
            }
            else
            {
                return(BadRequest(new { status = "failed", message = "Maalesef size kredi veremiyoruz." }));
            }
        }
Пример #16
0
 /// <summary>
 ///     The Deposit response constructor.
 /// </summary>
 public DepositResponse(CreditModel transaction) => this.Transaction = transaction;
Пример #17
0
        public ActionResult Credit()
        {
            CreditConfigInfo creditConfigInfo = BSPConfig.CreditConfig;

            CreditModel model = new CreditModel();

            model.PayCreditName = creditConfigInfo.PayCreditName;
            model.PayCreditPrice = creditConfigInfo.PayCreditPrice;
            model.DayMaxSendPayCredits = creditConfigInfo.DayMaxSendPayCredits;
            model.OrderMaxUsePayCredits = creditConfigInfo.OrderMaxUsePayCredits;
            model.RegisterPayCredits = creditConfigInfo.RegisterPayCredits;
            model.LoginPayCredits = creditConfigInfo.LoginPayCredits;
            model.VerifyEmailPayCredits = creditConfigInfo.VerifyEmailPayCredits;
            model.VerifyMobilePayCredits = creditConfigInfo.VerifyMobilePayCredits;
            model.CompleteUserInfoPayCredits = creditConfigInfo.CompleteUserInfoPayCredits;
            model.CompleteOrderPayCredits = creditConfigInfo.CompleteOrderPayCredits;
            model.ReviewProductPayCredits = creditConfigInfo.ReviewProductPayCredits;

            model.RankCreditName = creditConfigInfo.RankCreditName;
            model.DayMaxSendRankCredits = creditConfigInfo.DayMaxSendRankCredits;
            model.RegisterRankCredits = creditConfigInfo.RegisterRankCredits;
            model.LoginRankCredits = creditConfigInfo.LoginRankCredits;
            model.VerifyEmailRankCredits = creditConfigInfo.VerifyEmailRankCredits;
            model.VerifyMobileRankCredits = creditConfigInfo.VerifyMobileRankCredits;
            model.CompleteUserInfoRankCredits = creditConfigInfo.CompleteUserInfoRankCredits;
            model.CompleteOrderRankCredits = creditConfigInfo.CompleteOrderRankCredits;
            model.ReviewProductRankCredits = creditConfigInfo.ReviewProductRankCredits;

            return View(model);
        }
Пример #18
0
        public ActionResult Credit(CreditModel model)
        {
            if (ModelState.IsValid)
            {
                CreditConfigInfo creditConfigInfo = BSPConfig.CreditConfig;

                creditConfigInfo.PayCreditName = model.PayCreditName;
                creditConfigInfo.PayCreditPrice = model.PayCreditPrice;
                creditConfigInfo.DayMaxSendPayCredits = model.DayMaxSendPayCredits;
                creditConfigInfo.OrderMaxUsePayCredits = model.OrderMaxUsePayCredits;
                creditConfigInfo.RegisterPayCredits = model.RegisterPayCredits;
                creditConfigInfo.LoginPayCredits = model.LoginPayCredits;
                creditConfigInfo.VerifyEmailPayCredits = model.VerifyEmailPayCredits;
                creditConfigInfo.VerifyMobilePayCredits = model.VerifyMobilePayCredits;
                creditConfigInfo.CompleteUserInfoPayCredits = model.CompleteUserInfoPayCredits;
                creditConfigInfo.CompleteOrderPayCredits = model.CompleteOrderPayCredits;
                creditConfigInfo.ReviewProductPayCredits = model.ReviewProductPayCredits;

                creditConfigInfo.RankCreditName = model.RankCreditName;
                creditConfigInfo.DayMaxSendRankCredits = model.DayMaxSendRankCredits;
                creditConfigInfo.RegisterRankCredits = model.RegisterRankCredits;
                creditConfigInfo.LoginRankCredits = model.LoginRankCredits;
                creditConfigInfo.VerifyEmailRankCredits = model.VerifyEmailRankCredits;
                creditConfigInfo.VerifyMobileRankCredits = model.VerifyMobileRankCredits;
                creditConfigInfo.CompleteUserInfoRankCredits = model.CompleteUserInfoRankCredits;
                creditConfigInfo.CompleteOrderRankCredits = model.CompleteOrderRankCredits;
                creditConfigInfo.ReviewProductRankCredits = model.ReviewProductRankCredits;

                BSPConfig.SaveCreditConfig(creditConfigInfo);
                Credits.ResetCreditConfig();
                AddAdminOperateLog("修改积分设置");
                return PromptView(Url.Action("credit"), "修改积分设置成功");
            }
            return View(model);
        }
Пример #19
0
 /// <summary>
 /// Добавление кредита к клиенту
 /// </summary>
 /// <param name="credit">Кредит</param>
 /// <param name="client">Клиент</param>
 public static void Add(this CreditModel credit, AClient client)
 {
     client.AddCredit(credit);
 }
        /*TODO: Set float point precision for outputs; Go over validation and required fields; Fix calc algorythm*/
        //public IActionResult Index(LeasingModel LeasingModel, string calculate)
        public IActionResult CreditCalc(double CreditAmount, double CreditTermMonths, double InterestRatePercentage, bool?AnualOrDecreasingInstallments, double?PromotionalPeriodMonths, double?PromotionalInterestPercentage,
                                        double?GratisPeriodMonths, double?ApplicationFee, bool?ApplicationFeeFlatOrPercentage, double?FilingFee, bool?FilingFeeFlatOrPercentage, double?OtherFee,
                                        bool?OtherFeeFlatOrPercentage, double?AnnualAdminFee, bool?AnnualAdminFeeFlatOrPercentage, double?OtherAnnualFee, bool?OtherAnnualFeeFlatOrPercentage, double?MonthlyAdminFee, double?OtherMonthlyFee,
                                        bool?MonthlyAdminFeeFlatOrPercentage, bool?OtherMonthlyFeeFlatOrPercentage, double monthlyInterest, double monthlyTax, double yearlyTax, double paidBackAlready, double montlyInterest)
        {
            try
            {
                CreditModel cm = new CreditModel(
                    creditAmount: CreditAmount,
                    creditTermMonths: CreditTermMonths,
                    interestRatePercentage: InterestRatePercentage,
                    anualOrDecreasingInstallments: AnualOrDecreasingInstallments,
                    promotionalPeriodMonths: PromotionalPeriodMonths,
                    promotionalInterestPercentage: PromotionalInterestPercentage,
                    gratisPeriodMonths: GratisPeriodMonths,
                    applicationFee: ApplicationFee,
                    applicationFeeFlatOrPercentage: ApplicationFeeFlatOrPercentage,
                    filingFee: FilingFee,
                    filingFeeFlatOrPercentage: FilingFeeFlatOrPercentage,
                    otherFee: OtherFee,
                    otherFeeFlatOrPercentage: OtherFeeFlatOrPercentage,
                    annualAdminFee: AnnualAdminFee,
                    annualAdminFeeFlatOrPercentage: AnnualAdminFeeFlatOrPercentage,
                    otherAnnualFee: OtherAnnualFee,
                    otherAnnualFeeFlatOrPercentage: OtherAnnualFeeFlatOrPercentage,
                    monthlyAdminFee: MonthlyAdminFee,
                    monthlyAdminFeeFlatOrPercentage: MonthlyAdminFeeFlatOrPercentage,
                    otherMonthlyFee: OtherMonthlyFee,
                    otherMonthlyFeeFlatOrPercentage: OtherMonthlyFeeFlatOrPercentage
                    );

                // Проверката не е нужна, всички числа се валидират през HTML, при въвеждане на негативно ще бъде показан popup гласящ
                // че това е невъзможно

                /* verifies all inputs are positive */
                //if (cm.CreditAmount < 0 || int.Parse(CreditTermMonths) < 0 || int.Parse(InterestRatePercentage) < 0 || int.Parse(PromotionalPeriodMonths) < 0 || int.Parse(PromotionalInterestPercentage) < 0
                //    || int.Parse(GratisPeriodMonths) < 0 || int.Parse(ApplicationFee) < 0 || int.Parse(FilingFee) < 0 || int.Parse(OtherFee) < 0 || int.Parse(AnnualAdminFee) < 0 || int.Parse(OtherAnnualFee) < 0
                //    || int.Parse(MonthlyAdminFee) < 0 || int.Parse(OtherMonthlyFee) < 0)
                //{
                //    ViewBag.NegNumError = "Моля въведете позитивни стойности";
                //}


                /* calculates if InitialFee has been selected as a percentage */

                /* If installments are Annual */
                if (cm.AnualOrDecreasingInstallments == true)
                {
                    cm.InterestRatePercentage /= 100;
                    double remainingDueAmount = cm.CreditAmount;
                    cm.PromotionalInterestPercentage /= 100;

                    /*int InterestRatePercent = int.Parse(InterestRatePercentage);*/
                    /*double monthlyInterest;*/

                    /*Първоначални такси = Такса кандидатстване + Такса обработка + Други такси*/
                    double initialTax = (double)(cm.ApplicationFee + cm.FilingFee + cm.OtherFee);

                    /*Такса кандидатстване = Размера на кредита * Такса кандидатстване/100 (ако е в проценти)*/
                    if (cm.ApplicationFeeFlatOrPercentage == false)
                    {
                        cm.ApplicationFee = cm.CreditAmount * cm.ApplicationFee / 100;
                    }
                    /*Такса обработка = Размера на кредита * Такса обработка/100 (ако е в проценти)*/
                    if (FilingFeeFlatOrPercentage == false)
                    {
                        cm.FilingFee = cm.CreditAmount * cm.FilingFee / 100;
                    }
                    /*Други такси = Размера на кредита * Други такси/100 (ако е в проценти)*/
                    if (OtherFeeFlatOrPercentage == false)
                    {
                        cm.OtherFee = cm.CreditAmount * cm.OtherFee / 100;
                    }

                    /*========================================================================================================================*/
                    /*==============================================probl relocate============================================================*/
                    /*========================================================================================================================*/

                    /*Годишни такси = Годишна такса управление + Други годишни такси (таксуват се при първа вносна главница от следващата година)*/
                    double realAnnualTax = (double)(cm.AnnualAdminFee + cm.OtherAnnualFee);

                    /*Годишна такса управление = входа (ако е във валута)*/
                    /*Годишна такса управление = Първата вносна главница на следващата година * входа/100 (ако е в проценти)*/
                    if (AnnualAdminFeeFlatOrPercentage == false)
                    {
                        /*TODO ot sledvashta godina*/
                        cm.AnnualAdminFee = cm.CreditAmount * cm.AnnualAdminFee / 100;
                    }

                    /*Други годишни такси = Първата вносна главница на следващата година * входа/100 (ако е в проценти)*/
                    if (OtherAnnualFeeFlatOrPercentage == false)
                    {
                        /*TODO ot sledvashta godina*/
                        cm.OtherAnnualFee = cm.CreditAmount * cm.AnnualAdminFee / 100;
                    }

                    /*Месечни такси = Месечна такса управление + Други месечни такси (таксуват се всеки месец)*/
                    double realMonthlyTax = (double)(cm.MonthlyAdminFee + cm.OtherMonthlyFee);

                    if (MonthlyAdminFeeFlatOrPercentage == false)
                    {
                        /*TODO creditAmount/creditTermMonths =SHOULD BE= VnosnaGlavnitsa/monthlyPayback*/
                        cm.MonthlyAdminFee = (cm.CreditAmount / cm.CreditTermMonths) * cm.MonthlyAdminFee / 100;
                    }

                    if (OtherMonthlyFeeFlatOrPercentage == false)
                    {
                        /*TODO creditAmount/creditTermMonths == VnosnaGlavnitsa/monthlyPayback*/
                        cm.OtherMonthlyFee = (cm.CreditAmount / cm.CreditTermMonths) * cm.OtherMonthlyFee / 100;
                    }

                    /*========================================================================================================================*/
                    /*========================================================================================================================*/
                    /*========================================================================================================================*/

                    while (cm.CreditTermMonths > 0)
                    {
                        /*if still in Gratis Period*/
                        while (cm.GratisPeriodMonths > 0)
                        {
                            /*TODO check if gratis period does not surpass credit term as validation*/

                            cm.GratisPeriodMonths--;
                            cm.CreditTermMonths--;
                        }

                        /*Ако все още планът е в промоционалния период, то:*/
                        if (cm.PromotionalPeriodMonths != 0)
                        {
                            /*Месечната лихва = Остатъкът по главницата * Промоционалната лихва/12 */
                            monthlyInterest = (double)(remainingDueAmount * cm.PromotionalInterestPercentage / 12);

                            cm.PromotionalPeriodMonths--;
                        }
                        /*Ако планът вече не е в промоционален период, то:*/
                        else
                        {
                            /* Месечната лихва = Остатъкът по главницата * Лихвата / 12*/
                            montlyInterest = remainingDueAmount * cm.InterestRatePercentage / 12;
                        }


                        /*Месечна вноска = Financial.Pmt(Промоционалната лихва / 12, Срокът месеци - текущия месец, -Остатъкът по главницата)(за анюитетни вноски)*/
                        double monthlyPayTotal = Financial.Pmt((double)(cm.PromotionalInterestPercentage / 12), cm.CreditTermMonths, -remainingDueAmount);
                        /*Вноската по главницата = Месечната вноска - Месечната лихва (за анюитетни вноски)*/
                        double monthlyPayback = monthlyPayTotal - monthlyInterest;
                        /* Остатъкът по главницата = Остатъкът по главницата -Вноската по главницата*/
                        remainingDueAmount -= monthlyPayback;

                        /*Месечната такса = Месечните такси за управление + Други месечни такси (анюитетни)*/
                        monthlyTax = (double)(cm.MonthlyAdminFee + cm.OtherMonthlyFee);

                        /*Годишната такса = Годишните такси за управление + Други годишни такси (анюитетни)*/
                        yearlyTax = (double)(cm.AnnualAdminFee + cm.OtherAnnualFee);

                        paidBackAlready = monthlyPayTotal + monthlyTax + yearlyTax;

                        cm.CreditTermMonths--;
                    }

                    ViewBag.monthlyTax = monthlyTax;
                    ViewBag.yearlyTax  = yearlyTax;

                    ViewBag.interestRate = cm.InterestRatePercentage;

                    ViewBag.paidBack       = paidBackAlready;
                    ViewBag.montlyInterest = montlyInterest;

                    return(View());
                }

                /*If Decreasing*/
                else if (AnualOrDecreasingInstallments == false)
                {
                    cm.InterestRatePercentage /= 100;
                    double remainingDueAmount = cm.CreditAmount;
                    //int promotionalInterestPercent = int.Parse(PromotionalInterestPercentage);
                    cm.PromotionalInterestPercentage /= 100;
                    /*int InterestRatePercent = int.Parse(InterestRatePercentage);*/
                    /*double monthlyInterest;*/

                    /*Такса кандидатстване = Размера на кредита * Такса кандидатстване/100 (ако е в проценти)*/
                    if (ApplicationFeeFlatOrPercentage == false)
                    {
                        cm.ApplicationFee = cm.CreditAmount * cm.ApplicationFee / 100;
                    }
                    /*Такса обработка = Размера на кредита * Такса обработка/100 (ако е в проценти)*/
                    if (FilingFeeFlatOrPercentage == false)
                    {
                        cm.FilingFee = cm.CreditAmount * cm.FilingFee / 100;
                    }
                    /*Други такси = Размера на кредита * Други такси/100 (ако е в проценти)*/
                    if (OtherFeeFlatOrPercentage == false)
                    {
                        cm.OtherFee = cm.CreditAmount * cm.OtherFee / 100;
                    }

                    if (cm.CreditTermMonths > 0)
                    {
                        /*if still in Gratis Period*/
                        if (cm.GratisPeriodMonths > 0)
                        {
                            /*TODO check if gratis period does not surpass credit term as validation*/

                            cm.GratisPeriodMonths--;
                            cm.CreditTermMonths--;
                        }

                        /* вноска по главницата за намаляващи вноски (гратисния период е приключил) - Вноската по главницата = Размера на кредита / (Срок месеци - Гратисен период) */
                        double monthlyPayback = cm.CreditAmount / (cm.CreditTermMonths);
                        /* Остатъкът по главницата = Остатъкът по главницата -Вноската по главницата*/
                        remainingDueAmount -= monthlyPayback;

                        /*Ако все още планът е в промоционалния период, то:*/
                        if (cm.PromotionalPeriodMonths != 0)
                        {
                            /*Месечната лихва = Остатъкът по главницата * Промоционалната лихва/12 */
                            monthlyInterest = (double)(remainingDueAmount * cm.PromotionalInterestPercentage / 12);

                            cm.PromotionalPeriodMonths--;
                        }
                        /*Ако планът вече не е в промоционален период, то:*/
                        else
                        {
                            /*TEMP Fix, non 0 output*/
                            cm.PromotionalInterestPercentage = 1;
                            /* Месечната лихва = Остатъкът по главницата * Лихвата / 12*/
                            montlyInterest = remainingDueAmount * cm.InterestRatePercentage / 12;
                        }

                        /*Месечна вноска = Вноската по главницата + Месечната лихва (за намаляващи вноски)*/
                        double monthlyPayTotal = monthlyPayback + monthlyInterest;

                        /*Месечните такси*/
                        monthlyTax = (double)(remainingDueAmount * cm.MonthlyAdminFee + remainingDueAmount * cm.OtherMonthlyFee);

                        /*Годишните такси*/
                        /*!!!!! ЗАДАДЕНО КАТО - Годишната такса = Остатъкът по главницата * Месечните такси за управление + Остатъкът по главницата * Други месечни такси (намаляващи)*/
                        yearlyTax = (double)(remainingDueAmount * cm.AnnualAdminFee + remainingDueAmount * cm.OtherAnnualFee);

                        paidBackAlready = monthlyPayTotal + monthlyTax + yearlyTax;

                        cm.CreditTermMonths--;
                    }

                    ViewBag.monthlyTax = monthlyTax;
                    ViewBag.yearlyTax  = yearlyTax;

                    ViewBag.paidBack       = paidBackAlready;
                    ViewBag.MontlyInterest = montlyInterest;

                    return(View());
                }
            }

            /* Not all fields are required?*/
            catch (ArgumentNullException ex)
            {
                string emptyValueError = ex.Message;
                ViewBag.ErrorMessageEmpty = "Моля въведете числени стойности и опитайте отново!";
            }

            catch (FormatException ex)
            {
                string formatError = ex.Message;
                ViewBag.ErrorFormat = "Моля въведете числени стойности и опитайте отново!";
            }


            return(View());

            /* if (lease == "calculate")
            *  {
            *   //LeasingModel.LeasingTotalResult = LeasingModel.LeasingValue1 + LeasingModel.LeasingValue2 + LeasingModel.LeasingValue3;
            *  }
            *  else
            *  {
            *  // LeasingModel.LeasingTotalResult = LeasingModel.LeasingValue1 + LeasingModel.LeasingValue2 - LeasingModel.LeasingValue3;
            *  }
            *
            *  return View(LeasingModel);*/
        }