Exemple #1
0
        public async Task OnGetAsync()
        {
            IdentifyCostumer();

            ViewData["City"] = "/css/patterns/city_3.png";

            if (IsAuthorized())
            {
                Session = await _holderService.LastSession(Costumer.Id);

                // REDIRECT
            }
        }
Exemple #2
0
        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);
        }