コード例 #1
0
 def cycle_waitlist():
     # get the current waitlist
     waitlist = list(Hacker.objects.filter(waitlist=True).order_by('waitlist_date'))
     # while the event is not full and there are waitlisted hackers
     while not Settings.is_full() and len(waitlist) > 0:
         hacker = waitlist.pop(0)
         # Hacker can be waitlisted but not in waitlist(e.g late)
         if hacker.profile.state == 'waitlist':
             hacker.unwaitlist()
コード例 #2
0
ファイル: models.py プロジェクト: TalentoUnicamp/my
def calc_ticket_expires():
    # Calculates the ticket expire time based on the settings
    now = timezone.now()
    settings = Settings.get()
    if settings.ticket_expire != 0:
        expires_at = now + timedelta(minutes=settings.ticket_expire)
    else:
        # if expire is disabled, expire in 1 year
        expires_at = now + timedelta(weeks=52)
    return expires_at
コード例 #3
0
def calc_ticket_expires():
    # Calculates the ticket expire time based on the settings
    now = timezone.now()
    settings = Settings.get()
    if settings.ticket_expire != 0:
        expires_at = now + timedelta(minutes=settings.ticket_expire)
    else:
        # if expire is disabled, expire in 1 year
        expires_at = now + timedelta(weeks=52)
    return expires_at
コード例 #4
0
 def hacker_state(self):
     if self.checked_in:
         return 'checkedin'
     if self.confirmed:
         return "confirmed"
     if not Settings.can_confirm(self.waitlist):
         return "late"
     if self.withdraw:
         return "withdraw"
     if self.waitlist:
         return "waitlist"
     if self.admitted:
         return "admitted"
     if self.declined:
         return "declined"
     if hasattr(self, 'application'):
         return "submitted"
     if not Settings.registration_is_open():
         return "late"
     return "incomplete"
コード例 #5
0
 def change_email(self, email):
     user = self.user
     user.email = email
     user.save()
     if Settings.get().verify_email:
         self.verified = False
         self.new_verification_code()
         send_verify_email.delay(self.id)
     else:
         self.verified = True
         self.save()
コード例 #6
0
    def admit(self, send_email=True):
        # Admit hacker and send notification email
        # Also called when a hacker that has withdrowned changes their mind
        self.admitted = True
        self.declined = False
        self.waitlist = False
        self.withdraw = False
        self.save()

        if Settings.is_full():
            # If event is full
            return self.put_on_waitlist(send_email)
        if send_email:
            tasks.send_notify_admitted.delay(self.id)
コード例 #7
0
ファイル: models.py プロジェクト: TalentoUnicamp/my
    def admit(self, send_email=True):
        # Admit hacker and send notification email
        # Also called when a hacker that has withdrowned changes their mind
        self.admitted = True
        self.declined = False
        self.waitlist = False
        self.withdraw = False
        self.save()

        if Settings.is_full():
            # If event is full
            return self.put_on_waitlist(send_email)
        if send_email:
            tasks.send_notify_admitted.delay(self.id)
コード例 #8
0
 def hacker_state(self):
     # If the user submitted an application but didn't pay (i.e. asked for a refund or something)
     if Settings.get().require_payment and not self.payed and hasattr(
             self, 'application'):
         return 'unpaid'
     if self.checked_in:
         return 'checkedin'
     if self.confirmed:
         return "confirmed"
     if not Settings.can_confirm(self.waitlist):
         return "late"
     if self.withdraw:
         return "withdraw"
     if self.waitlist:
         return "waitlist"
     if self.admitted:
         return "admitted"
     if self.declined:
         return "declined"
     if hasattr(self, 'application'):
         return "submitted"
     if not Settings.registration_is_open():
         return "late"
     return "incomplete"
コード例 #9
0
ファイル: forms.py プロジェクト: TalentoUnicamp/my
    def save(self, commit=True, hacker=None):
        data = self.cleaned_data
        first_name = data['first_name']
        last_name = data['last_name']
        email = data['email']

        user = hacker.profile.user

        user.first_name = first_name
        user.last_name = last_name
        user.save()
        if email != user.email:
            user.profile.change_email(email)

        instance = forms.ModelForm.save(self, False)
        instance.hacker = hacker
        if commit:
            instance.save()
        if Settings.get().auto_admit_hackers():
            hacker.admit(False)
        return instance
コード例 #10
0
 def get_redirect_url(self, *args, **kwargs):
     sett = Settings.get()
     if not sett.require_payment:
         add_message(self.request, ERROR, 'Pagamentos desabilitados')
         return '/'
     item = PagSeguroItem(
         id='1',
         description=f'Ingresso para {settings.EVENT_NAME}',
         amount=f'{sett.ticket_price}',
         quantity=1
     )
     reference = get_random_string(length=32)
     api = PagSeguroApi(reference=reference)
     api.add_item(item)
     checkout = api.checkout()
     if checkout['success']:
         hacker = self.request.user.profile.hacker
         hacker.transaction_reference = reference
         hacker.save()
         return checkout['redirect_url']
     else:
         add_message(self.request, ERROR, 'Erro ao criar pedido de pagamento. Tente novamente mais tarde.')
         return '/'
コード例 #11
0
 def is_full(self):
     max_team_size = Settings.get().max_team_size
     return max_team_size != 0 and len(self.members) >= max_team_size
コード例 #12
0
ファイル: models.py プロジェクト: TalentoUnicamp/my
    def create_or_update(**kwargs):
        # Creates or updates a Social instance. Also creates User if email does not exist
        user = kwargs.pop('user')
        request = kwargs.pop('request', None)
        first_name = kwargs.pop('first_name')
        last_name = kwargs.pop('last_name')
        social_id = kwargs.pop('social_id')
        name = f'{first_name} {last_name}'
        user_created = False
        social_created = False

        temp_email = False
        email = kwargs.pop('email')
        if not email or email is None:
            email = Social.unique_email()
            temp_email = True

        social = Social.objects.filter(social_id=social_id)
        if social.exists():
            user = social.first().profile.user
            # If the social email is not temporary and the user is not verified
            if not temp_email and not user.profile.is_verified:
                # update the user email and verify them
                user.email = email
                user.save()
                profile = user.profile
                profile.verified = True
                profile.save()

        else:
            try:
                if user is None:
                    user = User.objects.get(email=email)
            except User.DoesNotExist:

                # Only create users if registration is open
                if not Settings.registration_is_open():
                    if request is not None:
                        messages.add_message(request, messages.INFO, 'Período de registro fechado!')
                    return None, user_created, social_created, request

                user = User(
                    first_name=first_name,
                    last_name=last_name,
                    username=Social.unique_username(name),
                    email=email
                )
                user.save()
                user_created = True
                if not temp_email:
                    profile = user.profile
                    profile.verified = True
                    profile.save()

                # New user created
                if Settings.default_hacker():
                    from hacker.models import Hacker
                    Hacker(profile=user.profile).save()
                if Settings.default_staff():
                    from staff.models import Staff
                    Staff(profile=user.profile).save()

        profile = user.profile
        try:
            social, social_created = Social.objects.update_or_create(
                profile=profile,
                social_id=social_id,
                provider=kwargs['provider'],
                defaults=kwargs
            )
        except IntegrityError:
            messages.add_message(request, messages.ERROR, f"Parece que alguém já tentou se inscrever com esse perfil do {kwargs['provider']}")
            return None, user_created, social_created, request
        return social, user_created, social_created, request
コード例 #13
0
ファイル: models.py プロジェクト: TalentoUnicamp/my
    def create_or_update(**kwargs):
        # Creates or updates a Social instance. Also creates User if email does not exist
        user = kwargs.pop('user')
        request = kwargs.pop('request', None)
        first_name = kwargs.pop('first_name')
        last_name = kwargs.pop('last_name')
        social_id = kwargs.pop('social_id')
        name = f'{first_name} {last_name}'
        user_created = False
        social_created = False

        temp_email = False
        email = kwargs.pop('email')
        if not email or email is None:
            email = Social.unique_email()
            temp_email = True

        social = Social.objects.filter(social_id=social_id)
        if social.exists():
            user = social.first().profile.user
            # If the social email is not temporary and the user is not verified
            if not temp_email and not user.profile.is_verified:
                # update the user email and verify them
                user.email = email
                user.save()
                profile = user.profile
                profile.verified = True
                profile.save()

        else:
            try:
                if user is None:
                    user = User.objects.get(email=email)
            except User.DoesNotExist:

                # Only create users if registration is open
                if not Settings.registration_is_open():
                    if request is not None:
                        messages.add_message(request, messages.INFO,
                                             'Período de registro fechado!')
                    return None, user_created, social_created, request

                user = User(first_name=first_name,
                            last_name=last_name,
                            username=Social.unique_username(name),
                            email=email)
                user.save()
                user_created = True
                if not temp_email:
                    profile = user.profile
                    profile.verified = True
                    profile.save()

                # New user created
                if Settings.default_hacker():
                    from hacker.models import Hacker
                    Hacker(profile=user.profile).save()
                if Settings.default_staff():
                    from staff.models import Staff
                    Staff(profile=user.profile).save()

        profile = user.profile
        try:
            social, social_created = Social.objects.update_or_create(
                profile=profile,
                social_id=social_id,
                provider=kwargs['provider'],
                defaults=kwargs)
        except IntegrityError:
            messages.add_message(
                request, messages.ERROR,
                f"Parece que alguém já tentou se inscrever com esse perfil do {kwargs['provider']}"
            )
            return None, user_created, social_created, request
        return social, user_created, social_created, request