Newer
Older
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from submissions.models import Submission
from scipost.models import Contributor
from .models import Fellowship
class AddFellowshipForm(forms.ModelForm):
class Meta:
model = Fellowship
fields = (
'guest',
'contributor',
'start_date',
'until_date',
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['contributor'].queryset = Contributor.objects.fellows()
self.fields['contributor'].label = "Fellow"
def clean(self):
start = self.cleaned_data.get('start_date')
until = self.cleaned_data.get('until_date')
if start and until:
if until <= start:
self.add_error('until_date', 'The given dates are not in chronological order.')
class FellowshipForm(forms.ModelForm):
class Meta:
model = Fellowship
fields = (
'guest',
'start_date',
'until_date',
)
def clean(self):
start = self.cleaned_data.get('start_date')
until = self.cleaned_data.get('until_date')
if start and until:
if until <= start:
self.add_error('until_date', 'The given dates are not in chronological order.')
class FellowshipTerminateForm(forms.ModelForm):
class Meta:
model = Fellowship
fields = []
def save(self):
today = datetime.date.today()
fellowship = self.instance
if fellowship.until_date > today:
fellowship.until_date = today
return fellowship.save()
class FellowshipRemoveSubmissionForm(forms.ModelForm):
"""
Use this form in admin-accessible views only! It could possibly reveal the
identity of the Editor-in-charge!
"""
class Meta:
model = Fellowship
fields = []
def __init__(self, *args, **kwargs):
self.submission = kwargs.pop('submission')
super().__init__(*args, **kwargs)
def clean(self):
if self.submission.editor_in_charge == self.instance.contributor:
self.add_error(None, ('Submission cannot be removed as the Fellow is'
' Editor-in-charge of this Submission.'))
def save(self):
fellowship = self.instance
fellowship.pool.remove(self.submission)
return fellowship
class FellowshipAddSubmissionForm(forms.ModelForm):
submission = forms.ModelChoiceField(queryset=None, to_field_name='arxiv_identifier_w_vn_nr',
class Meta:
model = Fellowship
fields = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pool = self.instance.pool.values_list('id', flat=True)
self.fields['submission'].queryset = Submission.objects.exclude(id__in=pool)
def save(self):
submission = self.cleaned_data['submission']
fellowship = self.instance
fellowship.pool.add(submission)
return fellowship
class SubmissionAddFellowshipForm(forms.ModelForm):
fellowship = forms.ModelChoiceField(queryset=None, to_field_name='id',
empty_label="Please choose the Fellow to add to the Pool")
class Meta:
model = Submission
fields = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pool = self.instance.fellows.values_list('id', flat=True)
self.fields['fellowship'].queryset = Fellowship.objects.active().exclude(id__in=pool)
def save(self):
fellowship = self.cleaned_data['fellowship']
submission = self.instance
submission.fellows.add(fellowship)
return submission
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class FellowshipRemoveProceedingsForm(forms.ModelForm):
"""
Use this form in admin-accessible views only! It could possibly reveal the
identity of the Editor-in-charge!
"""
class Meta:
model = Fellowship
fields = []
def __init__(self, *args, **kwargs):
self.proceedings = kwargs.pop('proceedings')
super().__init__(*args, **kwargs)
def clean(self):
if self.proceedings.lead_fellow == self.instance:
self.add_error(None, 'Fellowship cannot be removed as it is assigned as lead fellow.')
def save(self):
fellowship = self.instance
self.proceedings.fellowships.remove(fellowship)
return fellowship
class FellowshipAddProceedingsForm(forms.ModelForm):
proceedings = forms.ModelChoiceField(queryset=None, to_field_name='id',
empty_label="Please choose the Proceedings to add to the Pool")
class Meta:
model = Fellowship
fields = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
proceedings = self.instance.proceedings.values_list('id', flat=True)
self.fields['proceedings'].queryset = Proceedings.objects.exclude(id__in=proceedings)
def save(self):
proceedings = self.cleaned_data['proceedings']
fellowship = self.instance
proceedings.fellowships.add(fellowship)
return fellowship