@@ -187,6 +187,10 @@ def exclude(self, *args, **kwargs):
187
187
kwargs = self .convert_kwargs (kwargs )
188
188
return super ().exclude (* args , ** kwargs )
189
189
190
+ def invited (self ):
191
+ return self .filter (status__in = [self .model .STATUS_INVITED , self .model .STATUS_LAST_REMINDER ,
192
+ self .model .STATUS_CONFIRMED , self .model .STATUS_ATTENDED ])
193
+
190
194
191
195
class Application (models .Model ):
192
196
STATUS_PENDING = 'P'
@@ -343,6 +347,15 @@ def save(self, *args, **kwargs):
343
347
self .last_modified = timezone .now ()
344
348
super ().save (* args , ** kwargs )
345
349
350
+ def get_permission_slip (self , raise_404 = False ):
351
+ try :
352
+ return PermissionSlip .objects .get (user_id = self .user_id , edition_id = self .edition_id )
353
+ except PermissionSlip .DoesNotExist :
354
+ if raise_404 :
355
+ from django .http import Http404
356
+ raise Http404
357
+ return None
358
+
346
359
class Meta :
347
360
unique_together = ('type' , 'user' , 'edition' )
348
361
permissions = (
@@ -437,3 +450,52 @@ def form_data(self, new_data: dict):
437
450
data = self .form_data
438
451
data .update (new_data )
439
452
self .data = json .dumps (data )
453
+
454
+
455
+ def get_permission_slip_file_name (instance , filename ):
456
+ return '%s/User/permission_slip/%s_%s.%s' % (instance .edition .name , instance .user .get_full_name ().replace (' ' , '-' ),
457
+ instance .user .id , filename .split ('.' )[- 1 ])
458
+
459
+
460
+ class PermissionSlip (models .Model ):
461
+ STATUS_ACCEPTED = 'A'
462
+ STATUS_UPLOADED = 'U'
463
+ STATUS_NONE = 'N'
464
+ STATUS_DENIED = 'D'
465
+ STATUS = (
466
+ (STATUS_NONE , _ ('Missing document' )),
467
+ (STATUS_DENIED , _ ('Not accepted' )),
468
+ (STATUS_UPLOADED , _ ('On review' )),
469
+ (STATUS_ACCEPTED , _ ('Accepted' )),
470
+ )
471
+ STATUS_DESCRIPTION = {
472
+ STATUS_NONE : _ ('Upload the permission slip signed by your parents or legal tutors' ),
473
+ STATUS_DENIED : _ ('The document has been reviewed and has some problem' ),
474
+ STATUS_UPLOADED : _ ('Document uploaded successfully, now we will review it' ),
475
+ STATUS_ACCEPTED : _ ('The document has been accepted!' ),
476
+ }
477
+ STATUS_COLORS = {
478
+ STATUS_NONE : 'danger' ,
479
+ STATUS_DENIED : 'warning' ,
480
+ STATUS_UPLOADED : 'info' ,
481
+ STATUS_ACCEPTED : 'success' ,
482
+ }
483
+
484
+ user = models .ForeignKey (settings .AUTH_USER_MODEL , on_delete = models .CASCADE )
485
+ edition = models .ForeignKey (Edition , null = True , on_delete = models .SET_NULL )
486
+ status = models .CharField (choices = STATUS , max_length = 2 , default = STATUS_NONE )
487
+ file = models .FileField (upload_to = get_permission_slip_file_name , null = True )
488
+
489
+ def __str__ (self ):
490
+ return '%s - %s' % (self .edition .name , self .user .get_full_name ())
491
+
492
+ def get_status_color (self ):
493
+ return self .STATUS_COLORS .get (self .status )
494
+
495
+ def get_status_description (self ):
496
+ return self .STATUS_DESCRIPTION .get (self .status )
497
+
498
+ class Meta :
499
+ permissions = (
500
+ ('can_review_permission_slip' , _ ('Can review permission slip' )),
501
+ )
0 commit comments