public async Task OnGetAsync() { IdentifyCostumer(); ViewData["City"] = "/css/patterns/city_3.png"; if (IsAuthorized()) { Session = await _holderService.LastSession(Costumer.Id); // REDIRECT } }
public void ProceedPayment(PowerbankSessionModel session) { var secondsBetweenStartAndFinish = (session.Finish - session.Start).TotalSeconds; if (secondsBetweenStartAndFinish < 60) { return; } var client = new Client(shopId: Strings.YandexShopId, secretKey: Strings.YandexAPIKey); ICalculationStrategy strategy; switch (session.RentModel.RentStrategy) { case RentStrategy.Day: strategy = new DayCalculationStrategy(99, false); break; case RentStrategy.Hour: strategy = new OneHourCalculationStrategy(49, 99, false); break; case RentStrategy.FirstHourFree: strategy = new OneHourCalculationStrategy(49, 99, true); break; default: return; } var amount = strategy.Calculate(session.Start, session.Finish); if (amount <= 0) return; client.CreatePayment(new NewPayment { Amount = new Amount { Currency = "RUB", Value = new decimal(amount) }, PaymentMethodId = session.CardId, Capture = true, Description = $"{session.Costumer.Phone}, {session.Start} - {session.Finish}", Confirmation = new Confirmation { Type = ConfirmationType.Redirect, ReturnUrl = "" }, }); }
public async Task <bool> ProvidePowerBank(int idCostumer, int holderId, RentModel rentModel, string cardBindingId) { var costumer = await _appRepository.Costumers.Include(x => x.Sessions).FirstOrDefaultAsync(x => x.Id == idCostumer); var holder = await _appRepository.Holders.Include(x => x.Powerbanks).ThenInclude(x => x.Sessions).FirstOrDefaultAsync(x => x.Id == holderId); if (costumer == null || holder == null) { return(false); } PowerbankModel powerBankToProvide = null; var lastPowerbankSession = costumer.Sessions.OrderBy(x => x.Start).LastOrDefault(); if (lastPowerbankSession == null) { var powerBank = holder.Powerbanks.Where(x => x.Sessions.Where(y => y.IsActive).Count() == 0 && x.Electricity > 75).OrderBy(x => x.Position).FirstOrDefault(); if (powerBank == null) { return(false); } powerBankToProvide = powerBank; } else { var powerBanks = holder.Powerbanks.Where(x => x.Sessions.Where(y => y.IsActive).Count() == 0 && x.Electricity > 75).OrderBy(x => x.Position); if (powerBanks.Count() == 1) { powerBankToProvide = powerBanks.FirstOrDefault(); } else { powerBankToProvide = powerBanks.Where(x => x.Id != lastPowerbankSession.Powerbank.Id).FirstOrDefault(); } } //if (powerBankToProvide == null) //{ // var powerBank = holder.Powerbanks.Where(x => x.Sessions.Where(y => y.IsActive).Count() == 0 && x.Electricity > 75).OrderBy(x => x.Position).FirstOrDefault(); // if (powerBank == null) return false; // powerBankToProvide = powerBank; //} if (!await PrvidePowerBank(holder, powerBankToProvide)) { return(false); } var card = await _appRepository.CardBidnings.FirstOrDefaultAsync(x => x.BindingId == cardBindingId); card.IsLocked = true; _appRepository.Entry(card).Property(x => x.IsLocked).IsModified = true; var session = new PowerbankSessionModel { Costumer = costumer, Start = DateTime.Now, Powerbank = powerBankToProvide, CardId = cardBindingId, RentModel = rentModel }; await _appRepository.PowerbankSessions.AddAsync(session); await _appRepository.SaveChangesAsync(); return(true); }