diff --git a/app/static/css/custom-bootstrap.css b/app/static/css/custom-bootstrap.css index 3b84de3c..c68890f4 100644 --- a/app/static/css/custom-bootstrap.css +++ b/app/static/css/custom-bootstrap.css @@ -817,7 +817,7 @@ a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none} .btn-group-lg>.btn,.btn-lg{line-height:1.3333333;border-radius:8px} .btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:8px} .btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:8px} -.btn-block{display:block;width:100%} +.btn-block{display:block;width:100%;margin-top:5px} .btn-block+.btn-block{margin-top:5px} input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} diff --git a/applications/migrations/0058_auto_20250511_1425.py b/applications/migrations/0058_auto_20250511_1425.py new file mode 100644 index 00000000..1e7b7907 --- /dev/null +++ b/applications/migrations/0058_auto_20250511_1425.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.23 on 2025-05-11 14:25 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('applications', '0057_auto_20250203_2145'), + ] + + operations = [ + migrations.AddField( + model_name='hackerapplication', + name='dubious_type', + field=models.CharField(choices=[('OK', 'Not dubious'), ('INVALID_CV', 'Invalid CV'), ('LATE_GRAD', 'Invalid graduation year'), ('NOT_STUDENT', 'Not a student'), ('INVALID_SCHOOL', 'Invalid school')], default='OK', max_length=300), + ), + migrations.AddField( + model_name='hackerapplication', + name='dubioused_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dubioused_by', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/applications/migrations/0059_auto_20250511_1520.py b/applications/migrations/0059_auto_20250511_1520.py new file mode 100644 index 00000000..743bcf52 --- /dev/null +++ b/applications/migrations/0059_auto_20250511_1520.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.23 on 2025-05-11 15:20 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('applications', '0058_auto_20250511_1425'), + ] + + operations = [ + migrations.AddField( + model_name='hackerapplication', + name='dubious_comment', + field=models.TextField(blank=True, max_length=500, null=True), + ), + ] diff --git a/applications/migrations/0060_auto_20250511_1649.py b/applications/migrations/0060_auto_20250511_1649.py new file mode 100644 index 00000000..8f6dc6ab --- /dev/null +++ b/applications/migrations/0060_auto_20250511_1649.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.23 on 2025-05-11 16:49 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('applications', '0059_auto_20250511_1520'), + ] + + operations = [ + migrations.AlterField( + model_name='hackerapplication', + name='dubious_type', + field=models.CharField(choices=[('OK', 'Not dubious'), ('INVALID_CV', 'Invalid CV'), ('LATE_GRAD', 'Invalid graduation year'), ('NOT_STUDENT', 'Not a student'), ('INVALID_SCHOOL', 'Invalid school'), ('OTHER', 'Other')], default='OK', max_length=300), + ), + ] diff --git a/applications/models/constants.py b/applications/models/constants.py index dded778c..b80ca7c9 100644 --- a/applications/models/constants.py +++ b/applications/models/constants.py @@ -99,3 +99,19 @@ DEFAULT_YEAR = datetime.now().year + 1 ENGLISH_LEVEL = [(i, str(i)) for i in range(1, 5 + 1)] + +DUBIOUS_NONE = 'OK' +DUBIOUS_CV = 'INVALID_CV' +DUBIOUS_GRADUATION_YEAR = 'LATE_GRAD' +DUBIOUS_NOT_STUDENT = 'NOT_STUDENT' +DUBIOUS_SCHOOL = 'INVALID_SCHOOL' +DUBIOUS_OTHER = 'OTHER' + +DUBIOUS_TYPES = [ + (DUBIOUS_NONE, 'Not dubious'), + (DUBIOUS_CV, 'Invalid CV'), + (DUBIOUS_GRADUATION_YEAR, 'Invalid graduation year'), + (DUBIOUS_NOT_STUDENT, 'Not a student'), + (DUBIOUS_SCHOOL, 'Invalid school'), + (DUBIOUS_OTHER, 'Other') +] diff --git a/applications/models/hacker.py b/applications/models/hacker.py index 6e0a2dd9..4878f53a 100644 --- a/applications/models/hacker.py +++ b/applications/models/hacker.py @@ -34,16 +34,13 @@ class HackerApplication(BaseApplication): projects = models.TextField(max_length=500, blank=True, null=True) # META - contacted = models.BooleanField( - default=False - ) # If a dubious application has been contacted yet - contacted_by = models.ForeignKey( - User, - related_name="contacted_by", - blank=True, - null=True, - on_delete=models.SET_NULL, - ) + dubious_type = models.CharField(max_length=300, choices=DUBIOUS_TYPES, default=DUBIOUS_NONE) # Type of dubious application + dubioused_by = models.ForeignKey(User, related_name='dubioused_by', blank=True, null=True, + on_delete=models.SET_NULL) # User who marked this application as dubious + dubious_comment = models.TextField(max_length=500, blank=True, null=True) # Comment for dubious application + contacted = models.BooleanField(default=False) # If a dubious application has been contacted yet + contacted_by = models.ForeignKey(User, related_name='contacted_by', blank=True, null=True, + on_delete=models.SET_NULL) reviewed = models.BooleanField( default=False @@ -100,10 +97,13 @@ def invalidate(self): team.delete() self.save() - def set_dubious(self): + def set_dubious(self, user, dubious_type, dubious_comment_text): self.status = APP_DUBIOUS self.contacted = False self.status_update_date = timezone.now() + self.dubioused_by = user + self.dubious_type = dubious_type + self.dubious_comment = dubious_comment_text self.vote_set.all().delete() if hasattr(self, "acceptedresume"): self.acceptedresume.delete() @@ -112,6 +112,9 @@ def set_dubious(self): def unset_dubious(self): self.status = APP_PENDING self.status_update_date = timezone.now() + self.dubioused_by = None + self.dubious_type = DUBIOUS_NONE + self.dubious_comment = None self.save() def set_flagged_cv(self): diff --git a/applications/templates/application.html b/applications/templates/application.html index 31ca5a8f..e08d4978 100644 --- a/applications/templates/application.html +++ b/applications/templates/application.html @@ -24,16 +24,16 @@ {% endif %}
- Be careful, you can only edit the application until 2 hours after {{application.submission_date}}
+ {% if application.can_be_edit %} + + ++ Be careful, you can only edit the application until 2 hours after {{application.submission_date}}
{% else %} -Your application has been reviewed already. Editing has been disabled to make sure all reviewers get the +
Your application has been reviewed already. Editing has been disabled to make sure all reviewers get the same data. If you would like to change something important, please email us at {{ h_contact_email|urlize }}.
- {% endif %} + {% endif %}