public async Task <IActionResult> Create([Bind("AmountWithDiscount,FirstName,LastName,MiddleName,RealAmount,Start,Periodicity,ActivePrivilegeEnd,ActivePrivilegeStart,PrivilegeType,LicenseNumber")] MembershipFee membershipFee)
        {
            //var rand = new Random();
            //var privileges = await _context.Privileges.ToListAsync();
            //for (int i = 1; i < 500; i++)
            //{
            //    var start = DateTime.Now.AddDays(rand.Next(1, 29)).AddMonths(rand.Next(1, 12));
            //    var fee = new MembershipFee()
            //    {
            //        Id = Guid.NewGuid().ToString(),
            //        RealAmount = i * 10000,
            //        AmountWithDiscount = i * 5000,
            //        CurrentState = rand.Next(2) == 1 ? FeeState.Active : FeeState.Pause,
            //        FirstName = "Firstname" + i,
            //        LastName = "LastName" + i,
            //        MiddleName = "MiddleName" + i,
            //        Start = start,
            //        End = start.AddMonths(12),
            //        LeftOver = i * 10000,
            //        MonthlyPay = i * 10000 / 12,
            //        Periodicity = FeePeriodicity.Year,
            //        PrivilegeType = rand.Next(0, 2) == 1 ? privileges[1].Type : privileges[0].Type,
            //        ActivePrivilegeStart = start,
            //        ActivePrivilegeEnd = start.AddMonths(12),
            //        ActivePrivilegeNo = rand.Next(),
            //    };
            //    _context.Add(fee);
            //}

            //for (int i = 0; i < 50; i++)
            //{
            //    var start = DateTime.Now.AddDays(rand.Next(1, 29)).AddMonths(rand.Next(1, 12));
            //    var payments = new TransferPayment()
            //    {
            //        Id = Guid.NewGuid().ToString(),
            //        Amount = i * 5100,
            //        Date = DateTime.Now.AddDays(i * 3),
            //        FullName = "FirstName" + i * 10 + " LastName" + i * 10,
            //        Destination = "chem manum",
            //        PaymentNo = (i * 1000).ToString(),
            //    };
            //    _context.Add(payments);
            //}


            //for (int i = 0; i < 100; i++)
            //{
            //    var cashes = new CashModel()
            //    {
            //        Id = Guid.NewGuid().ToString(),
            //        FullName = "FirstName" + i * 10 + " LastName" + i * 10,
            //        AccountingPass = (i * 123).ToString(),
            //        Amount = i * 4320,
            //        Date = DateTime.Now.AddDays(i * 2),
            //        Destination = "chem manum asi",
            //        OrdersNumber = (i * 10000 + i * 378).ToString(),
            //        Type = rand.Next(0, 2) == 1 ? BargainType.CashIn : BargainType.CashOut,
            //        //?ccount ="asfasfasfasfas"
            //    };
            //    _context.Add(cashes);
            //}

            //await _context.SaveChangesAsync();

            if (ModelState.IsValid)
            {
                membershipFee.AmountWithDiscount = membershipFee.RealAmount;
                membershipFee.LeftOver           = membershipFee.AmountWithDiscount;

                membershipFee.End = membershipFee.Periodicity == FeePeriodicity.Year
                    ? membershipFee.Start.AddMonths(12)
                    : membershipFee.Start.AddMonths(1);

                if (membershipFee.Periodicity != FeePeriodicity.Month)
                {
                    membershipFee.MonthlyPay = Math.Floor(membershipFee.RealAmount / 12);
                }

                if (!string.IsNullOrEmpty(membershipFee.PrivilegeType) && membershipFee.ActivePrivilegeStart != null &&
                    membershipFee.ActivePrivilegeEnd > membershipFee.ActivePrivilegeStart)
                {
                    var privilige = _context.Privileges.AsNoTracking().FirstOrDefault(p => p.Type == membershipFee.PrivilegeType);

                    var priviligeModel = new PrivilegeModel()
                    {
                        Start = membershipFee.ActivePrivilegeStart.Value,
                        End   = membershipFee.ActivePrivilegeEnd.Value,
                        Type  = membershipFee.PrivilegeType + $"({privilige.Discount})",
                        MembershipFeeFoeignKey = membershipFee.Id
                    };
                    _context.Add(priviligeModel);

                    var fullDays     = (int)(membershipFee.End - membershipFee.Start).TotalDays;
                    var discountDays = (int)(priviligeModel.End - priviligeModel.Start).TotalDays;

                    double priceWithDiscount =
                        Math.Floor(membershipFee.RealAmount - (membershipFee.RealAmount * privilige.Discount / 100));

                    membershipFee.AmountWithDiscount =
                        Math.Floor(((fullDays - discountDays) * (membershipFee.RealAmount / fullDays)) +
                                   (discountDays * priceWithDiscount / fullDays));

                    membershipFee.MonthlyPay = Math.Floor(membershipFee.AmountWithDiscount / 12);
                    membershipFee.LeftOver   = membershipFee.AmountWithDiscount;
                }

                _context.Add(membershipFee);
                await _context.SaveChangesAsync();

                SiteHelpers.AddPaymentsForFee(membershipFee.Id, _context);
                return(RedirectToAction("Index"));
            }

            return(View(membershipFee));
        }