private bool ProcessStep101(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { var dbPlayer = GetPlayer(c, t); if (!string.IsNullOrWhiteSpace(enroll.AvatarImgUrl)) { // Update the userdata record c.Execute("UPDATE users SET avatarImgUrl = @img WHERE id = @idUser", new { idUser = GetUserId(), img = enroll.AvatarImgUrl }, t); } //dbPlayer.AvatarImgUrl = enroll.AvatarImgUrl; dbPlayer.Height = enroll.Height; dbPlayer.Weight = enroll.Weight; dbPlayer.Motto = enroll.Motto; dbPlayer.FacebookKey = enroll.FacebookKey; dbPlayer.InstagramKey = enroll.InstagramKey; dbPlayer.TwitterKey = enroll.TwitterKey; //if (!enroll.IsEditing) dbPlayer.EnrollmentStep = 102; c.Update(dbPlayer, t); if (enroll.IsEditing) { return(true); } var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); dbTeamPlayer.EnrollmentStep = 102; c.Update(dbTeamPlayer, t); return(true); }
private bool ProcessStep4(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { var dbPlayer = GetPlayer(c, t); var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); if (!dbPlayer.Approved) { // Get the latest upload from the DB instead of enroll.IdCardXImgUrl. Don't trust the client (and the app doesn't send it anyway) dbPlayer.IdCard1ImgUrl = GetLastUploadUrlForType(c, t, GetUserId(), UploadType.PlayerIdCard1); dbPlayer.IdCard2ImgUrl = GetLastUploadUrlForType(c, t, GetUserId(), UploadType.PlayerIdCard2); } dbTeamPlayer.Status |= (int)TeamPlayerStatusFlags.RegistrationCompleted; dbTeamPlayer.Status |= (int)TeamPlayerStatusFlags.IdCardUploaded; if (!enroll.IsEditing) { dbPlayer.EnrollmentStep = 10; dbTeamPlayer.EnrollmentStep = 10; } c.Update(dbPlayer, t); c.Update(dbTeamPlayer, t); return(true); }
private int ProcessStep2(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { // at this point, user has to be logged in (even if there is no password yet, only used the enrollment PIN). // Save data, encode password var result = 1; var dbPlayer = GetPlayer(c, t); if (!dbPlayer.Approved) { if (dbPlayer.Name != enroll.Name || dbPlayer.Surname != enroll.Surname) { // update user record too c.Execute("UPDATE users SET name = @name WHERE id = @idUser", new { idUser = GetUserId(), name = enroll.Name + " " + enroll.Surname }, t); } dbPlayer.Name = enroll.Name; dbPlayer.Surname = enroll.Surname; dbPlayer.Address1 = enroll.Address1; dbPlayer.Address2 = enroll.Address2; dbPlayer.City = enroll.City; dbPlayer.State = enroll.State; dbPlayer.CP = enroll.CP; dbPlayer.Country = enroll.Country; dbPlayer.IdCardNumber = enroll.IdCardNumber; dbPlayer.BirthDate = enroll.BirthDate; if (!enroll.IsEditing) { dbPlayer.EnrollmentStep = 3; } c.Update(dbPlayer, t); // Get current team var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); if (dbTeamPlayer != null) { // TeamPlayer fields dbTeamPlayer.FieldPosition = enroll.FieldPosition; dbTeamPlayer.FieldSide = enroll.FieldSide; c.Update(dbTeamPlayer, t); } result = 2; } // Join this to the case above that also edits the user, so only db update is needed. if (enroll.Password != null && enroll.Password != "") { var dbUser = c.Get <User>(GetUserId(), t); UsersController.UpdatePassword(dbUser, enroll.Password); c.Update(dbUser, t); } return(result); }
private bool ProcessStep100(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); dbTeamPlayer.EnrollmentStep = 101; c.Update(dbTeamPlayer, t); // NOTIFY org admin that a new player has paid enrollment. return(true); }
private bool ProcessStep20(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { // Save the payment data var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); dbTeamPlayer.EnrollmentData = enroll.SelectedOptionsJson; // Do not change the enrollment step so if the app rehydrates, it will go back to selecting the options. //dbTeamPlayer.EnrollmentStep = 20; // We stay on 20 instead of moving to the next screen so if the app rehydrates here, it will show the payment summary screen. c.Update(dbTeamPlayer, t); return(true); }
private bool ProcessStep3(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { // Save the enrollmentStep and idpicture url var dbPlayer = GetPlayer(c, t); if (!enroll.IsEditing) { dbPlayer.EnrollmentStep = 4; } if (!dbPlayer.Approved) { // Get the latest upload from the DB instead of enroll.FichaPictureImgUrl. Don't trust the client (and the app doesn't send it anyway) dbPlayer.IdPhotoImgUrl = GetLastUploadUrlForType(c, t, GetUserId(), UploadType.PlayerIdPhoto); } c.Update(dbPlayer, t); return(true); }
public IActionResult SaveEnrollmentData([FromBody] EnrollmentData enroll) { return(DbTransaction((c, t) => { if (enroll == null) { throw new NoDataException(); } if (!IsLoggedIn() && enroll.IdStep > 2) { throw new UnauthorizedAccessException(); } Audit.Information(this, "{0}: Players.EnrollmentStep: {1}", GetUserId(), enroll.IdStep); switch (enroll.IdStep) { case 2: return ProcessStep2(c, t, enroll); case 3: return ProcessStep3(c, t, enroll); case 4: return ProcessStep4(c, t, enroll); case 10: return ProcessStep10(c, t, enroll); case 20: return ProcessStep20(c, t, enroll); case 21: return ProcessStep21(c, t, enroll).Run(); case 100: return ProcessStep100(c, t, enroll); case 101: return ProcessStep101(c, t, enroll); default: throw new Exception("Error.NoStep"); } })); }
private async Task <bool> ProcessStep21(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { var dbTeamPlayer = GetTeamPlayer(c, t, enroll.IdTeam); // Calculate the amount of selected options (from teamData.enrollmentData) // To do that, get the aplicable workflow to this player and team var(total, selectedOptionsTotal) = GetPaymentAmounts(c, t, GetUserId(), enroll.IdTeam, enroll.IdTournament, dbTeamPlayer.EnrollmentData); if (selectedOptionsTotal > 0) { // Total before fees is more than 0, process charge. var amount = total; Audit.Information(this, "{0}: Players.Enrollment: Payment: {0}", GetUserId(), amount); // We get the card token from the client var cardToken = enroll.PaymentGatewayResult; if (cardToken == null) { throw new Exception("Error.NoCardToken"); } var orgSecrets = GetOrgWithSecrets(c, t); if (orgSecrets.PaymentGetawayType != "paypal") // Stripe { // Now, call the payment gateway with the card token and amount. var charge = await StripeApi.SendCharge(orgSecrets.PaymentKey, cardToken, orgSecrets.PaymentCurrency, amount, orgSecrets.PaymentDescription); if (!charge.Paid) { throw new Exception("Error.PaymentFailed"); } dbTeamPlayer.EnrollmentPaymentData = charge.Id; // Add user event for payment LogPaymentEvent(c, t, charge, enroll.IdPlayer, enroll.IdTeam, enroll.IdTournament); } else { // Paypal has already process the payment. var ev = new UserEvent { IdCreator = GetUserId(), IdUser = GetUserId(), TimeStamp = DateTime.Now, Description = Localization.Get("Pago de inscripción", null), Type = (int)UserEventType.PlayerPaymentSuccess, Data1 = enroll.PaymentGatewayResult, Data2 = amount.ToString("N2"), Data3 = enroll.IdTeam.ToString() }; c.Insert(ev, t); } // Notify org admins there is a new enrollment pending verification var(userName, teamName, tournamentName) = GetPlayerTeamTournament(c, t, GetUserId(), dbTeamPlayer.IdTeam, enroll.IdTournament); mNotifications.NotifyAdminsGenericEmail(Request, c, t, GetUserId(), Localization.Get("Nuevo pago de jugador", null), Localization.Get("El jugador '{0}' ha hecho un pago de inscripción de {1:0.00} {2} en el equipo '{3}', torneo '{4}'", null, userName, amount, orgSecrets.PaymentCurrency, teamName, tournamentName), null); } // Set player status as paid. If amount before fees was 0, we still do this to move to next step. dbTeamPlayer.Status |= (int)TeamPlayerStatusFlags.Paid; dbTeamPlayer.EnrollmentStep = 100; dbTeamPlayer.EnrollmentDate = DateTime.Now; c.Update(dbTeamPlayer, t); return(true); }
private bool ProcessStep10(IDbConnection c, IDbTransaction t, EnrollmentData enroll) { // Save the selected payment options? or do nothing until there is a payment result. // Maybe to store the insurance declaration ? But then, there is already an upload... return(true); }