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!")); } }
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)); }
public IActionResult PromoteStudents(PromoteRequest request) { try { return(Ok(_dbService.PromoteStudents(request))); }catch (Exception exc) { return(BadRequest(exc.Message)); } }
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))); }
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")); } }
public IActionResult PromoteStudent(PromoteRequest request) { Enrollment result = _service.PromoteStudents(request); if (result == null) { return(NotFound()); } else { return(Created("", result)); } }
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); } } }
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)); }
public bool PromoteStudents(PromoteRequest p) { var enrollments = GetEnrollmentsToPromote(p); try { IncrementEnrollments(enrollments); } catch (Exception e) { return(false); } return(true); }
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); } }
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")); } }
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)); } }
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)); }
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")); } }
/*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); } } }
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"); } }
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); } }
public IActionResult Promote(PromoteRequest req) { return(service.promote(req)); }
public async Task <OperationResult <PromoteResponse> > FindPromoteBot(PromoteRequest request) { return(await Api.FindPromoteBot(request)); }
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); }