Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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");
                }
            }));
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 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);
 }