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)); }