public IActionResult PromoteStudent(PromoteRequest promote)
        {
            var res = _dbcontext.Studies.Any(e => e.Name == promote.Studies);

            if (res == true)
            {
                var res2    = _dbcontext.Studies.Where(e => e.Name == promote.Studies).Single();
                int idStudy = res2.IdStudy;
                var res3    = _dbcontext.Enrollment.Where(e => e.Semester == promote.Semester && e.IdStudy == idStudy).ToList();
                if (res3.Count > 0)
                {
                    _dbcontext.Database.ExecuteSqlRaw("exec Promote '" + promote.Studies + "'," + promote.Semester + " ;");
                    _dbcontext.SaveChanges();
                    return(Ok("succesfully promoted!"));
                }
                else
                {
                    return(NotFound("There is no record with this semester!"));
                }
            }
            else
            {
                return(NotFound("There is no such studies!"));
            }
        }
Beispiel #2
0
        private IEnumerable <Enrollment> GetEnrollmentsToPromote(PromoteRequest p)
        {
            var studies     = _studentContext.Studies;
            var enrollments = studies.First(s => s.Name.Equals(p.Studies))
                              .Enrollment.ToList();

            return(enrollments.Where(e => e.Semester == p.Semester).ToList());
        }
        public async Task <OperationResult <PromoteResponse> > FindPromoteBot(PromoteRequest promoteModel)
        {
            if (!EnableRead)
            {
                return(null);
            }

            var botsResponse = await HttpClient.Get <List <BidBot> >("https://steembottracker.net/bid_bots", CancellationToken.None);

            if (!botsResponse.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(botsResponse.Exception));
            }

            var priceResponse = await HttpClient.Get <Price>("https://postpromoter.net/api/prices", CancellationToken.None);

            if (!priceResponse.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(priceResponse.Exception));
            }

            var steemToUSD = priceResponse.Result.SteemPrice;
            var sbdToUSD   = priceResponse.Result.SbdPrice;

            var votersModel = new VotersModel(promoteModel.PostToPromote.Url, VotersType.Likes);
            var usersResult = await GetPostVoters(votersModel, CancellationToken.None);

            if (!usersResult.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(usersResult.Exception));
            }


            var postAge = (DateTime.Now - promoteModel.PostToPromote.Created).TotalDays;

            var suitableBot = botsResponse.Result
                              .Where(x => CheckBot(x, postAge, promoteModel, steemToUSD, sbdToUSD, usersResult.Result.Results))
                              .OrderBy(x => x.Next)
                              .FirstOrDefault();

            if (suitableBot == null)
            {
                return(new OperationResult <PromoteResponse>(new ValidationException()));
            }

            var response = await SearchUser(new SearchWithQueryModel(suitableBot.Name), CancellationToken.None);

            if (!response.IsSuccess)
            {
                return(new OperationResult <PromoteResponse>(response.Exception));
            }

            var promoteResponse = new PromoteResponse(response.Result.Results.First(), TimeSpan.FromMilliseconds(suitableBot.Next.Value));

            return(new OperationResult <PromoteResponse>(promoteResponse));
        }
Beispiel #4
0
 public IActionResult PromoteStudents(PromoteRequest request)
 {
     try
     {
         return(Ok(_dbService.PromoteStudents(request)));
     }catch (Exception exc)
     {
         return(BadRequest(exc.Message));
     }
 }
Beispiel #5
0
        public IActionResult PromoteStudents(PromoteRequest req)
        {
            var context = new uniContext();

            context.Database.BeginTransaction();
            context.Database.ExecuteSqlInterpolated($"call promote({req.Studies}, {req.Semester})");
            context.Database.CommitTransaction();
            //  still can't get pgsql to return a result set
            var res = context.Enrollment.Where(e => e.Idstudy == context.Studies.Where(s => s.Name == req.Studies).First().Idstudy&& e.Semester == req.Semester + 1).First();

            return(Created("api/enrollments/" + res.Idenrollment, res)); // api/enrollments isn't actually implemented
        }
 private bool CheckBot(BidBot bot, double postAge, PromoteRequest promoteModel, double steemToUSD, double sbdToUSD, List <UserFriend> users)
 {
     return(!bot.IsDisabled &&
            Constants.SupportedListBots.Contains(bot.Name) &&
            (!bot.MaxPostAge.HasValue || postAge < TimeSpan.FromDays(bot.MaxPostAge.Value).TotalDays) &&
            (!bot.MinPostAge.HasValue || postAge > TimeSpan.FromMinutes(bot.MinPostAge.Value).TotalDays) &&
            CheckAmount(promoteModel.Amount, steemToUSD, sbdToUSD, promoteModel.CurrencyType, bot) &&
            !users.Any(r => r.Author.Equals(bot.Name)) &&
            (promoteModel.CurrencyType == CurrencyType.Sbd
            ? (bot.MinBid.HasValue && bot.MinBid <= promoteModel.Amount)
            : (bot.MinBidSteem.HasValue && bot.AcceptsSteem && bot.MinBidSteem <= promoteModel.Amount)));
 }
Beispiel #7
0
        public async Task <ActionResult> PromoteToLibrarian([FromBody] PromoteRequest person)
        {
            var exists = personService.DoesPersonExists(person.Username);

            if (exists is null)
            {
                return(BadRequest(new ErrorResponse(ErrorTypes.Empty.EnumDescription())));
            }
            await personService.Promote(person);

            return(Ok(new PromoteResponse()));
        }
        public IActionResult Promote(PromoteRequest p)
        {
            var isPromoted = _studentService.PromoteStudents(p);

            if (isPromoted)
            {
                return(Ok("studesnt were promoted"));
            }
            else
            {
                return(BadRequest("an error occured"));
            }
        }
Beispiel #9
0
        public IActionResult PromoteStudent(PromoteRequest request)
        {
            Enrollment result = _service.PromoteStudents(request);

            if (result == null)
            {
                return(NotFound());
            }
            else
            {
                return(Created("", result));
            }
        }
Beispiel #10
0
        public PromoteAnswer promote(PromoteRequest r)
        {
            using (var con = new SqlConnection(constr))
                using (var com = new SqlCommand())
                {
                    com.Connection = con;
                    con.Open();
                    var tran = con.BeginTransaction();
                    com.Transaction = tran;
                    try
                    {
                        int id = 0;

                        com.CommandText = "Promote";
                        com.CommandType = CommandType.StoredProcedure;
                        com.Parameters.AddWithValue("@Semester", r.Semester);
                        com.Parameters.AddWithValue("@Sname", r.Studies);
                        com.Parameters.AddWithValue("@EnrId", SqlDbType.Int);
                        com.Parameters["@EnrId"].Direction = ParameterDirection.Output;

                        com.ExecuteNonQuery();

                        id = (int)com.Parameters["@EnrId"].Value;

                        if (id == 0)
                        {
                            code = 404;
                            return(null);
                        }

                        com.Parameters.Clear();
                        com.CommandType = CommandType.Text;
                        com.CommandText = "Select * From Enrollment WHERE IdEnrollment = @Id";
                        com.Parameters.AddWithValue("Id", id);
                        var           dr  = com.ExecuteReader();
                        PromoteAnswer ans = new PromoteAnswer();
                        ans.EnrId     = id;
                        ans.IdStudies = (int)dr["IdStudy"];
                        ans.Semester  = (int)dr["Semester"];
                        ans.StartDate = (DateTime)dr["StartDate"];
                        return(ans);
                    }
                    catch (SqlException e)
                    {
                        tran.Rollback();
                        code    = 400;
                        message = e.Message;
                        return(null);
                    }
                }
        }
Beispiel #11
0
        public IActionResult Promote(PromoteRequest request)
        {
            Enrollment enroll = dbService.GetEnrollment(request.StudyName, request.Semester);

            if (enroll == null)
            {
                return(NotFound("Enrollment not found"));
            }
            enroll = dbService.Promote(enroll);
            if (enroll == null)
            {
                return(StatusCode(500));
            }
            return(new CreatedResult("", enroll));
        }
Beispiel #12
0
        public bool PromoteStudents(PromoteRequest p)
        {
            var enrollments = GetEnrollmentsToPromote(p);

            try
            {
                IncrementEnrollments(enrollments);
            }
            catch (Exception e)
            {
                return(false);
            }

            return(true);
        }
Beispiel #13
0
        public async Task <IActionResult> Promote(PromoteRequest request)
        {
            var serviceStatus = await _service.PromoteStudents(request.Semester, request.Studies);

            var response = new PromoteResponse()
            {
                Semester = request.Semester + 1
            };

            if (serviceStatus.IsSucceeded)
            {
                return(NotFound());
            }

            return(Created(string.Empty, response));
        }
        private async Task FindPromoter()
        {
            var mainHolder = _adapter.MainHolder;

            if (string.IsNullOrEmpty(mainHolder.AmountEdit))
            {
                _adapter.MainHolder.ShowError($"{AppSettings.LocalizationManager.GetText(LocalizationKeys.MinBid)} {Constants.MinBid}");
                return;
            }

            if (!double.TryParse(mainHolder.AmountEdit, NumberStyles.Any, CultureInfo.InvariantCulture, out var amountEdit))
            {
                return;
            }

            if (amountEdit > mainHolder.Balances?.Find(x => x.CurrencyType == mainHolder.PickedCoin).Value)
            {
                mainHolder.ShowError(AppSettings.LocalizationManager.GetText(LocalizationKeys.NotEnoughBalance));
                return;
            }

            if (string.IsNullOrEmpty(mainHolder.AmountEdit) || !IsValidAmount(mainHolder.AmountEdit))
            {
                return;
            }

            _promoteRequest = new PromoteRequest
            {
                Amount        = amountEdit,
                CurrencyType  = mainHolder.PickedCoin,
                PostToPromote = _post
            };

            var promoter = await _presenter.FindPromoteBot(_promoteRequest);

            if (promoter.IsSuccess)
            {
                _promoterResult = promoter.Result;
                _adapter.FoundHolder.UpdatePromoterInfo(_promoterResult);
                _pager.SetCurrentItem((int)Pages.Promoter, true);
            }
            else
            {
                _adapter.MessageHolder.SetupMessage(AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoterNotFound), string.Empty);
                ShowResultMessage(AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoterSearchResult), AppSettings.LocalizationManager.GetText(LocalizationKeys.SearchAgain), false);
            }
        }
Beispiel #15
0
        public IActionResult promoteStudent(PromoteRequest promotion)
        {
            var enrollment = _service.PromoteStudents(promotion);

            if (enrollment != null)
            {
                return(new ObjectResult(enrollment)
                {
                    StatusCode = StatusCodes.Status201Created
                });
            }

            else
            {
                return(BadRequest("not found"));
            }
        }
Beispiel #16
0
        public IActionResult promote(PromoteRequest r)
        {
            PromoteAnswer ret = ienr.promote(r);

            if (ret == null)
            {
                if (ienr.code == 404)
                {
                    return(NotFound());
                }
                return(BadRequest(ienr.message));
            }
            else
            {
                return(Created("", ret));
            }
        }
Beispiel #17
0
        public IActionResult promote(PromoteRequest req)
        {
            var res = context.Enrollment.Join(context.Studies, enrollment => enrollment.IdStudy,
                                              studies => studies.IdStudy, ((enrollment, studies) => new
            {
                studies.Name,
                enrollment.Semester
            })).Where(res => res.Name == req.studies && res.Semester == req.semester);

            if (!res.Any())
            {
                return(new BadRequestResult());
            }
            context.Database.ExecuteSqlInterpolated($"exec promoteStudent {req.studies}, {req.semester}");
            context.SaveChanges();
            return(new OkObjectResult(req));
        }
Beispiel #18
0
        public IActionResult PromoteStudents(PromoteRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Data not delivered"));
            }

            var result = service.PromoteStudent(request.Semester, request.Studies);

            if (result != null)
            {
                return(Ok(result));
            }
            else

            {
                return(BadRequest("bad request"));
            }
        }
Beispiel #19
0
        /*public Enrollment EnrollStudent(EnrollRequest request)
         * {
         *
         *
         *  var st = new Student();
         *  st.IndexNumber = request.IndexNumber;
         *  st.FirstName = request.FirstName;
         *  st.LastName = request.LastName;
         *  st.Birthdate = request.Birthdate;
         *  st.Studies = request.Studies;
         *  Enrollment en = new Enrollment();
         *
         *
         *
         *  using (SqlConnection con = new SqlConnection("Data Source=db-mssql;Initial Catalog=s18312;Integrated Security=True"))
         *  {
         *
         *
         *      using (SqlCommand com = new SqlCommand())
         *      {
         *          com.Connection = con;
         *          con.Open();
         *          var tran = con.BeginTransaction();
         *          com.Transaction = tran;
         *
         *          try
         *          {
         *
         *
         *              //Sprawdzenie czy istnieją studia
         *              com.CommandText = "SELECT IdStudy from Studies WHERE name=@name";
         *              com.Parameters.AddWithValue("name", request.Studies);
         *              var dr = com.ExecuteReader();
         *              if (!dr.Read())
         *              {
         *                  dr.Close();
         *                  tran.Rollback();
         *                  return null;
         *              }
         *
         *
         *              //Sprawdzenie czy istnieje enrollment
         *              int idStudies = (int)dr["IdStudy"];
         *
         *              dr.Close();
         *              com.CommandText = "SELECT IdEnrollment FROM Enrollment WHERE IdStudy = @IdStudies AND Semester = 1 AND StartDate = (SELECT MAX(StartDate) FROM Enrollment)";
         *              com.Parameters.AddWithValue("IdStudies", idStudies);
         *              dr = com.ExecuteReader();
         *              if (!dr.Read())
         *              {
         *                  dr.Close();
         *                  com.CommandText = "SELECT MAX(IdEnrollment) FROM Enrollment";
         *                  dr = com.ExecuteReader();
         *                  Enrollment en1 = new Enrollment();
         *                  en1.IdEnrollment = (int)dr["IdEnrollment"] + 1;
         *                  dr.Close();
         *                  en1.IdStudy = idStudies;
         *                  en1.Semester = 1;
         *                  en1.StartDate = DateTime.Now;
         *                  st.IdEnrollment = en1.IdEnrollment;
         *                  en = en1;
         *                  dr.Close();
         *              }
         *              st.IdEnrollment = (int)dr["IdEnrollment"];
         *              en.IdEnrollment = st.IdEnrollment;
         *              en.IdStudy = idStudies;
         *              en.Semester = 1;
         *              en.StartDate = DateTime.Now;
         *              dr.Close();
         *
         *              //Dodanie Studenta
         *              com.CommandText = "SELECT IndexNumber from Student WHERE IndexNumber=@IndexNumber";
         *              com.Parameters.AddWithValue("IndexNumber", request.IndexNumber);
         *              dr = com.ExecuteReader();
         *              if (!dr.Read())
         *              {
         *                  dr.Close();
         *                  com.CommandText = "INSERT INTO Student(IndexNumber, FirstName, LastName, BirthDate, IdEnrollment) VALUES (@Index, @Fname, @Lname, @Bdate, @IdE)";
         *                  com.Parameters.AddWithValue("Index", st.IndexNumber);
         *                  com.Parameters.AddWithValue("Fname", st.FirstName);
         *                  com.Parameters.AddWithValue("Lname", st.LastName);
         *                  com.Parameters.AddWithValue("Bdate", st.Birthdate);
         *                  com.Parameters.AddWithValue("IdE", st.IdEnrollment);
         *                  com.ExecuteNonQuery();
         *                  tran.Commit();
         *              }
         *              else
         *              {
         *                  dr.Close();
         *                  tran.Rollback();
         *                  return null;
         *              }
         *              dr.Close();
         *              return  en;
         *          }
         *          catch (SqlException e)
         *          {
         *              Console.WriteLine(e.Message);
         *              tran.Rollback();
         *          }
         *      }
         *  }
         *  return null;
         * }*/



        public Enrollment PromoteStudents(PromoteRequest request)
        {
            using (var db = new StudentDbContext())
            {
                if (!db.Studies.Any(studies => studies.Name == request.Studies))
                {
                    throw new Exception("Studia nie istnieją");
                }
                else
                {
                    db.Database.ExecuteSqlRaw("exec Procedura @Studies, @Semester", request.Studies, request.Semester);


                    var studia     = db.Studies.Where(studies => studies.Name == request.Studies).FirstOrDefault();
                    var enrollment = db.Enrollment.Where(enroll => enroll.IdStudy == studia.IdStudy && enroll.Semester == request.Semester + 1).FirstOrDefault();

                    return(enrollment);
                }
            }
        }
Beispiel #20
0
        public PromoteResponse PromoteStudents(PromoteRequest request, s16796Context context)
        {
            PromoteResponse response = new PromoteResponse();

            var paramStudies  = request.Studies;
            var paramSemester = request.Semester;

            var result = context.Enrollment.FromSqlRaw("exec Promote {0}, {1}", paramStudies, paramSemester).AsEnumerable().FirstOrDefault();

            if (result != null)
            {
                response.IdEnrollment = result.IdEnrollment;
                response.IdStudy      = result.IdStudy;
                response.Semester     = result.Semester;
                response.StartDate    = result.StartDate;
                return(response);
            }
            else
            {
                throw new ArgumentException("Promotion failed, wrong arguments");
            }
        }
Beispiel #21
0
        public PromoteResponse PromoteStudents(PromoteRequest request)
        {
            //using (var client = new SqlConnection("Data Source=db-mssql.pjwstk.edu.pl;Initial Catalog=2019SBD;Integrated Security=True"))
            //using (var com = new SqlCommand())

            {
                //client.Open();
                //com.Connection = client;


                var result = _context.Enrollment.Join(_context.Studies, p => p.IdStudy, v => v.IdStudy, (p, v) => new { p, v }).Where(d => d.p.Semester == request.Semester && d.v.Name.Equals(request.Studies)).FirstOrDefault();

                //com.CommandText = "select * from Enrollment,Studies where Enrollment.IdStudy=Studies.IdStudy and Enrollment.semester=@semester and Studies.Name=@Studies";
                //com.Parameters.AddWithValue("semester", request.Semester);
                //com.Parameters.AddWithValue("Studies", request.Studies);

                //var dr = com.ExecuteReader();

                if (result == null)
                {
                    return(null);
                }

                //dr.Close();



                var name     = new SqlParameter("@name", request.Studies);
                var semester = new SqlParameter("@semester", request.Semester);

                var list1 = _context.Database.ExecuteSqlCommand("exec Promotion @name, @semester", name, semester);

                //com.CommandType = System.Data.CommandType.StoredProcedure;

                //com.CommandText = "Promotion";
                //com.ExecuteNonQuery();


                //com.CommandType = System.Data.CommandType.Text;

                var result3 = _context.Enrollment.Join(_context.Studies, p => p.IdStudy, v => v.IdStudy, (p, v) => new { p, v }).Where(d => d.p.Semester == request.Semester + 1 && d.v.Name.Equals(request.Studies)).FirstOrDefault();


                //com.CommandText = "select * from Enrollment,Studies where Enrollment.IdStudy=Studies.IdStudy and Name=@Studies and Semester=@semestern";

                //com.Parameters.AddWithValue("semestern", request.Semester + 1);

                //var dr2 = com.ExecuteReader();


                //dr2.Read();

                var enrollment = new Models.Enrollment();

                enrollment.IdStudy  = result3.p.IdStudy;
                enrollment.semester = result3.p.Semester;
                var StartDate = result3.p.StartDate;
                enrollment.StartDate = StartDate.ToString();

                var promotion = new PromoteResponse(enrollment);

                return(promotion);
            }
        }
Beispiel #22
0
 public IActionResult Promote(PromoteRequest req)
 {
     return(service.promote(req));
 }
Beispiel #23
0
 public async Task <OperationResult <PromoteResponse> > FindPromoteBot(PromoteRequest request)
 {
     return(await Api.FindPromoteBot(request));
 }
Beispiel #24
0
        public CustomAlertView Create(Post post, UINavigationController controller, UIView view)
        {
            _pickedCoin = CurrencyType.Steem;
            _coins      = new List <CurrencyType>();
            switch (AppSettings.User.Chain)
            {
            case KnownChains.Steem:
                _coins.AddRange(new[] { CurrencyType.Steem, CurrencyType.Sbd });
                break;

            case KnownChains.Golos:
                _coins.AddRange(new[] { CurrencyType.Golos, CurrencyType.Gbg });
                break;
            }

            var popup = new UIView();

            popup.ClipsToBounds      = true;
            popup.Layer.CornerRadius = 20;
            popup.BackgroundColor    = Constants.R255G255B255;

            var _alert = new CustomAlertView(popup, controller);

            var dialogWidth = UIScreen.MainScreen.Bounds.Width - 10 * 2;

            popup.AutoSetDimension(ALDimension.Width, dialogWidth);

            var commonMargin = 20;

            var title = new UILabel();

            title.Font          = Constants.Semibold14;
            title.Text          = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromotePost);
            title.TextAlignment = UITextAlignment.Center;
            popup.AddSubview(title);
            title.AutoPinEdgeToSuperviewEdge(ALEdge.Top);
            title.AutoPinEdgeToSuperviewEdge(ALEdge.Left);
            title.AutoPinEdgeToSuperviewEdge(ALEdge.Right);
            title.AutoSetDimension(ALDimension.Height, 70);

            var topSeparator = new UIView();

            topSeparator.BackgroundColor = Constants.R245G245B245;
            popup.AddSubview(topSeparator);

            topSeparator.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, title);
            topSeparator.AutoPinEdgeToSuperviewEdge(ALEdge.Left, commonMargin);
            topSeparator.AutoPinEdgeToSuperviewEdge(ALEdge.Right, commonMargin);
            topSeparator.AutoSetDimension(ALDimension.Height, 1);

            var container = new UIView();

            popup.AddSubview(container);

            container.AutoSetDimension(ALDimension.Height, 142);
            container.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, topSeparator);
            container.AutoPinEdgeToSuperviewEdge(ALEdge.Left, commonMargin);
            container.AutoPinEdgeToSuperviewEdge(ALEdge.Right, commonMargin);

            var promotionLabel = new UILabel();

            promotionLabel.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.Amount);
            promotionLabel.Font = Constants.Semibold14;

            container.AddSubview(promotionLabel);

            promotionLabel.AutoPinEdgeToSuperviewEdge(ALEdge.Top, 27);
            promotionLabel.AutoPinEdgeToSuperviewEdge(ALEdge.Left);

            balanceLoader = new UIActivityIndicatorView();
            balanceLoader.ActivityIndicatorViewStyle = UIActivityIndicatorViewStyle.White;
            balanceLoader.Color            = UIColor.Black;
            balanceLoader.HidesWhenStopped = true;
            balanceLoader.StartAnimating();

            container.AddSubview(balanceLoader);

            balanceLoader.AutoPinEdge(ALEdge.Left, ALEdge.Right, promotionLabel, 10);
            balanceLoader.AutoAlignAxis(ALAxis.Horizontal, promotionLabel);

            balanceLabel               = new UILabel();
            balanceLabel.Font          = Constants.Semibold14;
            balanceLabel.TextColor     = Constants.R151G155B158;
            balanceLabel.TextAlignment = UITextAlignment.Right;

            container.AddSubview(balanceLabel);

            balanceLabel.AutoAlignAxis(ALAxis.Horizontal, promotionLabel);
            balanceLabel.AutoPinEdgeToSuperviewEdge(ALEdge.Right);
            balanceLabel.AutoPinEdge(ALEdge.Left, ALEdge.Right, promotionLabel, 5);
            balanceLabel.SetContentHuggingPriority(1, UILayoutConstraintAxis.Horizontal);

            GetBalance();

            var rightView = new UIView();

            container.AddSubview(rightView);
            rightView.AutoSetDimension(ALDimension.Height, 50);

            UIImageView pickerImage = new UIImageView(UIImage.FromBundle("ic_currency_picker.png"));

            rightView.AddSubview(pickerImage);
            pickerImage.AutoAlignAxisToSuperviewAxis(ALAxis.Horizontal);
            pickerImage.AutoPinEdgeToSuperviewEdge(ALEdge.Right, 10);

            UILabel _pickerLabel = new UILabel();

            _pickerLabel.Text          = "STEEM";
            _pickerLabel.TextAlignment = UITextAlignment.Center;
            _pickerLabel.Font          = Constants.Semibold14;
            _pickerLabel.TextColor     = Constants.R255G71B5;
            rightView.AddSubview(_pickerLabel);
            _pickerLabel.AutoAlignAxisToSuperviewAxis(ALAxis.Horizontal);
            _pickerLabel.AutoPinEdgeToSuperviewEdge(ALEdge.Left);
            _pickerLabel.AutoPinEdge(ALEdge.Right, ALEdge.Left, pickerImage, -5);

            rightView.LayoutIfNeeded();

            _amountTextField = new SearchTextField(AppSettings.LocalizationManager.GetText(LocalizationKeys.TransferAmountHint),
                                                   new UIEdgeInsets(0, 20, 0, 0), new AmountFieldDelegate(), false, rightView);
            _amountTextField.KeyboardType       = UIKeyboardType.DecimalPad;
            _amountTextField.Layer.CornerRadius = 25;
            container.AddSubview(_amountTextField);

            _amountTextField.AutoPinEdgeToSuperviewEdge(ALEdge.Left);
            _amountTextField.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, promotionLabel, 16);
            _amountTextField.AutoSetDimension(ALDimension.Height, 50);

            errorMessage           = new UILabel();
            errorMessage.Font      = Constants.Semibold14;
            errorMessage.TextColor = Constants.R255G34B5;
            container.AddSubview(errorMessage);

            errorMessage.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, _amountTextField);
            errorMessage.AutoPinEdge(ALEdge.Left, ALEdge.Left, _amountTextField);
            errorMessage.AutoPinEdge(ALEdge.Right, ALEdge.Right, _amountTextField);

            _amountTextField.EditingChanged += IsEnoughBalance;
            var max = new UIButton();

            max.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.Max), UIControlState.Normal);
            max.SetTitleColor(UIColor.Black, UIControlState.Normal);
            max.Font = Constants.Semibold14;
            max.Layer.BorderWidth  = 1;
            max.Layer.BorderColor  = Constants.R245G245B245.CGColor;
            max.Layer.CornerRadius = 25;

            container.AddSubview(max);

            max.AutoPinEdgeToSuperviewEdge(ALEdge.Right);
            max.AutoPinEdge(ALEdge.Left, ALEdge.Right, _amountTextField, 10);
            max.AutoSetDimensionsToSize(new CGSize(80, 50));
            max.AutoAlignAxis(ALAxis.Horizontal, _amountTextField);
            max.TouchDown += MaxBtnOnClick;

            rightView.AutoAlignAxis(ALAxis.Horizontal, _amountTextField);
            rightView.AutoPinEdge(ALEdge.Right, ALEdge.Right, _amountTextField);
            container.BringSubviewToFront(rightView);

            UIPickerView picker = new UIPickerView();

            picker.Select(_coins.IndexOf(_pickedCoin), 0, true);
            picker.Model           = new CoinPickerViewModel(_coins);
            picker.BackgroundColor = Constants.R255G255B255;
            popup.AddSubview(picker);

            picker.AutoMatchDimension(ALDimension.Height, ALDimension.Height, container);
            picker.AutoMatchDimension(ALDimension.Width, ALDimension.Width, container);
            picker.AutoPinEdge(ALEdge.Top, ALEdge.Top, container);
            var pickerHidden  = picker.AutoPinEdge(ALEdge.Right, ALEdge.Left, container, -20);
            var pickerVisible = picker.AutoPinEdge(ALEdge.Right, ALEdge.Right, container);

            pickerVisible.Active = false;

            var promoteContainer = new UIView();

            promoteContainer.BackgroundColor = Constants.R255G255B255;
            popup.AddSubview(promoteContainer);

            promoteContainer.AutoMatchDimension(ALDimension.Height, ALDimension.Height, container);
            promoteContainer.AutoMatchDimension(ALDimension.Width, ALDimension.Width, container);
            promoteContainer.AutoPinEdge(ALEdge.Top, ALEdge.Top, container);
            var promoteHidden  = promoteContainer.AutoPinEdge(ALEdge.Left, ALEdge.Right, container, 20);
            var promoteVisible = promoteContainer.AutoPinEdge(ALEdge.Left, ALEdge.Left, container);

            promoteVisible.Active = false;

            var avatar = new UIImageView();

            avatar.Layer.CornerRadius = 20;
            avatar.ClipsToBounds      = true;
            promoteContainer.AddSubview(avatar);

            avatar.AutoPinEdgeToSuperviewEdge(ALEdge.Top, 16);
            avatar.AutoPinEdgeToSuperviewEdge(ALEdge.Left);
            avatar.AutoSetDimensionsToSize(new CGSize(40, 40));

            var promoterLogin = new UILabel();

            promoterLogin.Font      = Constants.Semibold14;
            promoterLogin.TextColor = Constants.R255G34B5;
            promoteContainer.AddSubview(promoterLogin);

            promoterLogin.AutoPinEdge(ALEdge.Left, ALEdge.Right, avatar, 20);
            promoterLogin.AutoPinEdgeToSuperviewEdge(ALEdge.Right);
            promoterLogin.AutoAlignAxis(ALAxis.Horizontal, avatar);

            var expectedTimeBackground = new UIView();

            expectedTimeBackground.Layer.CornerRadius = 10;
            expectedTimeBackground.BackgroundColor    = Constants.R250G250B250;
            promoteContainer.AddSubview(expectedTimeBackground);

            expectedTimeBackground.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, avatar, 15);
            expectedTimeBackground.AutoPinEdgeToSuperviewEdge(ALEdge.Left);
            expectedTimeBackground.AutoPinEdgeToSuperviewEdge(ALEdge.Right);
            expectedTimeBackground.AutoSetDimension(ALDimension.Height, 50);

            var expectedTimeLabel = new UILabel();

            expectedTimeLabel.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.ExpectedVoteTime);
            expectedTimeLabel.Font = Constants.Regular14;
            expectedTimeBackground.AddSubview(expectedTimeLabel);

            expectedTimeLabel.AutoPinEdgeToSuperviewEdge(ALEdge.Left, DeviceHelper.IsSmallDevice ? 10 : 20);
            expectedTimeLabel.AutoAlignAxisToSuperviewAxis(ALAxis.Horizontal);

            var expectedTimeValue = new UILabel();

            expectedTimeValue.TextAlignment = UITextAlignment.Right;
            expectedTimeValue.Font          = Constants.Light20;
            expectedTimeBackground.AddSubview(expectedTimeValue);

            expectedTimeValue.AutoPinEdge(ALEdge.Left, ALEdge.Right, expectedTimeLabel);
            expectedTimeValue.AutoPinEdgeToSuperviewEdge(ALEdge.Right, DeviceHelper.IsSmallDevice ? 10 : 20);
            expectedTimeValue.AutoAlignAxisToSuperviewAxis(ALAxis.Horizontal);

            var sureText = new UILabel();

            sureText.BackgroundColor = Constants.R255G255B255;
            sureText.Lines           = 4;
            sureText.TextAlignment   = UITextAlignment.Center;
            sureText.Font            = Constants.Regular20;
            popup.AddSubview(sureText);

            sureText.AutoMatchDimension(ALDimension.Height, ALDimension.Height, container);
            sureText.AutoMatchDimension(ALDimension.Width, ALDimension.Width, container);
            sureText.AutoPinEdge(ALEdge.Top, ALEdge.Top, container);
            var sureTextHidden  = sureText.AutoPinEdge(ALEdge.Left, ALEdge.Right, container, 20);
            var sureTextVisible = sureText.AutoPinEdge(ALEdge.Left, ALEdge.Left, container);

            sureTextVisible.Active = false;

            var completeText = new UILabel();

            completeText.BackgroundColor = Constants.R255G255B255;
            completeText.Lines           = 4;
            completeText.TextAlignment   = UITextAlignment.Center;
            completeText.Font            = Constants.Regular20;
            popup.AddSubview(completeText);

            completeText.AutoMatchDimension(ALDimension.Height, ALDimension.Height, container);
            completeText.AutoMatchDimension(ALDimension.Width, ALDimension.Width, container);
            completeText.AutoPinEdge(ALEdge.Top, ALEdge.Top, container);
            var completeTextHidden  = completeText.AutoPinEdge(ALEdge.Left, ALEdge.Right, container, 20);
            var completeTextVisible = completeText.AutoPinEdge(ALEdge.Left, ALEdge.Left, container);

            completeTextVisible.Active = false;

            var separator = new UIView();

            separator.BackgroundColor = Constants.R245G245B245;
            popup.AddSubview(separator);

            separator.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, container);
            separator.AutoPinEdgeToSuperviewEdge(ALEdge.Left, commonMargin);
            separator.AutoPinEdgeToSuperviewEdge(ALEdge.Right, commonMargin);
            separator.AutoSetDimension(ALDimension.Height, 1);

            var selectButton = new UIButton();

            selectButton.SetTitle(string.Empty, UIControlState.Disabled);
            selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.FindPromoter), UIControlState.Normal);
            selectButton.SetTitleColor(UIColor.White, UIControlState.Normal);
            selectButton.Layer.CornerRadius = 25;
            selectButton.Font = Constants.Bold14;
            popup.AddSubview(selectButton);

            selectButton.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, separator, 20);
            selectButton.AutoPinEdgeToSuperviewEdge(ALEdge.Right, commonMargin);
            selectButton.AutoPinEdgeToSuperviewEdge(ALEdge.Left, commonMargin);
            selectButton.AutoSetDimension(ALDimension.Height, 50);
            selectButton.LayoutIfNeeded();

            var loader = new UIActivityIndicatorView();

            loader.ActivityIndicatorViewStyle = UIActivityIndicatorViewStyle.White;
            loader.HidesWhenStopped           = true;

            selectButton.AddSubview(loader);

            loader.AutoCenterInSuperview();

            var tap = new UITapGestureRecognizer(() =>
            {
                if (balances == null)
                {
                    return;
                }

                _amountTextField.ResignFirstResponder();
                pickerHidden.Active  = false;
                pickerVisible.Active = true;

                UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                {
                    popup.LayoutIfNeeded();
                }, () =>
                {
                    title.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.SelectToken);
                    selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.Select), UIControlState.Normal);
                });
            });

            rightView.AddGestureRecognizer(tap);

            var cancelButton = new UIButton();

            cancelButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.Close), UIControlState.Normal);
            cancelButton.SetTitleColor(UIColor.Black, UIControlState.Normal);
            cancelButton.Layer.CornerRadius = 25;
            cancelButton.Font = Constants.Semibold14;
            cancelButton.Layer.BorderWidth = 1;
            cancelButton.Layer.BorderColor = Constants.R245G245B245.CGColor;
            popup.AddSubview(cancelButton);

            cancelButton.AutoPinEdge(ALEdge.Top, ALEdge.Bottom, selectButton, 20);
            cancelButton.AutoPinEdgeToSuperviewEdge(ALEdge.Left, commonMargin);
            cancelButton.AutoPinEdgeToSuperviewEdge(ALEdge.Right, commonMargin);
            cancelButton.AutoPinEdgeToSuperviewEdge(ALEdge.Bottom, commonMargin);
            cancelButton.AutoSetDimension(ALDimension.Height, 50);

            controller.View.EndEditing(true);

            Timer timer = null;

            OperationResult <PromoteResponse> promoter = null;

            selectButton.TouchDown += async(sender, e) =>
            {
                if (balanceLoader.IsAnimating)
                {
                    return;
                }

                IsEnoughBalance(null, null);

                if (pickerVisible.Active)
                {
                    _pickedCoin       = _coins[(int)picker.SelectedRowInComponent(0)];
                    _pickerLabel.Text = _pickedCoin.ToString().ToUpper();

                    var balance = balances?.Find(x => x.CurrencyType == _pickedCoin);
                    balanceLabel.Text = $"{AppSettings.LocalizationManager.GetText(LocalizationKeys.Balance)}: {balance?.Value}";

                    pickerHidden.Active  = true;
                    pickerVisible.Active = false;
                    UIView.Animate(0.5, () =>
                    {
                        popup.LayoutIfNeeded();
                    }, () =>
                    {
                        title.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromotePost);
                        selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.FindPromoter), UIControlState.Normal);
                        _amountTextField.UpdateRightViewRect();
                    });
                }
                else if (sureTextVisible.Active)
                {
                    if (!AppSettings.User.HasActivePermission)
                    {
                        _alert.Hidden = true;

                        controller.PushViewController(new LoginViewController(false), true);
                        return;
                    }

                    selectButton.Enabled = false;
                    loader.StartAnimating();

                    sureTextHidden.Active  = true;
                    sureTextVisible.Active = false;

                    var transferResponse = await _presenter.TryTransfer(AppSettings.User.UserInfo, promoter.Result.Bot.Author, _amountTextField.GetDoubleValue().ToString(), _pickedCoin, $"https://steemit.com{post.Url}");

                    if (transferResponse.IsSuccess)
                    {
                        completeText.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.SuccessPromote);
                    }
                    else
                    {
                        completeText.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.TokenTransferError);
                    }

                    completeTextHidden.Active  = false;
                    completeTextVisible.Active = true;

                    UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                    {
                        popup.LayoutIfNeeded();
                    }, () =>
                    {
                        selectButton.Enabled = true;
                        loader.StopAnimating();
                        title.Text = true ? AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoteComplete) : AppSettings.LocalizationManager.GetText(LocalizationKeys.TransferError);
                        selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoteAgain), UIControlState.Normal);

                        promoteVisible.Active = false;
                        promoteHidden.Active  = true;
                        popup.LayoutIfNeeded();
                        timer?.Dispose();
                    });
                }
                else if (promoteVisible.Active)
                {
                    var promoteConfirmation = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoteConfirmation,
                                                                                      _amountTextField.GetDoubleValue().ToString(),
                                                                                      _pickedCoin == CurrencyType.Sbd ? "SBD" : "Steem",
                                                                                      promoter.Result.Bot.Author);

                    sureText.Text          = promoteConfirmation;
                    sureTextHidden.Active  = false;
                    sureTextVisible.Active = true;

                    UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                    {
                        popup.LayoutIfNeeded();
                    }, () =>
                    {
                        selectButton.SetTitle("Yes", UIControlState.Normal);
                    });
                }
                else if (completeTextVisible.Active)
                {
                    completeTextHidden.Active  = true;
                    completeTextVisible.Active = false;

                    UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                    {
                        popup.LayoutIfNeeded();
                    }, () =>
                    {
                        title.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromotePost);
                        selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.FindPromoter), UIControlState.Normal);
                    });
                }
                else
                {
                    if (_amountTextField.GetDoubleValue() > balances?.Find(x => x.CurrencyType == _pickedCoin).Value)
                    {
                        errorMessage.Text   = AppSettings.LocalizationManager.GetText(LocalizationKeys.NotEnoughBalance);
                        errorMessage.Hidden = false;
                        return;
                    }

                    if (string.IsNullOrEmpty(_amountTextField.Text) || !IsValidAmount())
                    {
                        return;
                    }

                    selectButton.Enabled = false;
                    loader.StartAnimating();

                    var pr = new PromoteRequest()
                    {
                        Amount        = _amountTextField.GetDoubleValue(),
                        CurrencyType  = _pickedCoin,
                        PostToPromote = post,
                    };

                    promoter = await _presenter.FindPromoteBot(pr);

                    if (promoter.IsSuccess)
                    {
                        var expectedUpvoteTime = promoter.Result.ExpectedUpvoteTime;
                        if (expectedUpvoteTime.ToString().Length > 8)
                        {
                            expectedTimeValue.Text = expectedUpvoteTime.ToString().Remove(8);
                        }
                        timer = new Timer((obj) =>
                        {
                            expectedUpvoteTime = expectedUpvoteTime.Subtract(TimeSpan.FromSeconds(1));
                            view.InvokeOnMainThread(() =>
                            {
                                if (expectedUpvoteTime.ToString().Length > 8)
                                {
                                    expectedTimeValue.Text = expectedUpvoteTime.ToString().Remove(8);
                                }
                                else
                                {
                                    expectedTimeValue.Text = expectedUpvoteTime.ToString();
                                }
                            });
                        }, null, DateTime.Now.Add(expectedUpvoteTime).Millisecond, (int)TimeSpan.FromSeconds(1).TotalMilliseconds);

                        promoterLogin.Text = $"@{promoter.Result.Bot.Author}";

                        if (!string.IsNullOrEmpty(promoter.Result.Bot.Avatar))
                        {
                            ImageLoader.Load(promoter.Result.Bot.Avatar, avatar, size: new CGSize(300, 300));
                        }
                        else
                        {
                            avatar.Image = UIImage.FromBundle("ic_noavatar");
                        }

                        promoteHidden.Active  = false;
                        promoteVisible.Active = true;
                        UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                        {
                            popup.LayoutIfNeeded();
                        }, () =>
                        {
                            selectButton.Enabled = true;
                            loader.StopAnimating();
                            title.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoterFound);
                            selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.Promote), UIControlState.Normal);
                        });
                    }
                    else
                    {
                        completeText.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoterNotFound);

                        completeTextHidden.Active  = false;
                        completeTextVisible.Active = true;

                        UIView.Animate(0.2, 0, UIViewAnimationOptions.CurveEaseIn, () =>
                        {
                            popup.LayoutIfNeeded();
                        }, () =>
                        {
                            selectButton.Enabled = true;
                            loader.StopAnimating();
                            title.Text = AppSettings.LocalizationManager.GetText(LocalizationKeys.PromoterSearchResult);
                            selectButton.SetTitle(AppSettings.LocalizationManager.GetText(LocalizationKeys.SearchAgain), UIControlState.Normal);
                        });
                    }
                }
            };
            cancelButton.TouchDown += (sender, e) =>
            {
                _alert.Close();
            };

            var popuptap = new UITapGestureRecognizer(() =>
            {
                _amountTextField.ResignFirstResponder();
            });

            popup.AddGestureRecognizer(popuptap);

            Constants.CreateGradient(selectButton, 25);
            Constants.CreateShadowFromZeplin(selectButton, Constants.R231G72B0, 0.3f, 0, 10, 20, 0);
            popup.BringSubviewToFront(selectButton);

            _alert.Show();

            return(_alert);
        }