| | 324 | class YearMonthWidget(forms.MultiWidget): |
| | 325 | """ |
| | 326 | This widget shows two combos with year and month and returns as a date of first day |
| | 327 | of that month |
| | 328 | """ |
| | 329 | |
| | 330 | def __init__(self, *args, **kwargs): |
| | 331 | MONTHS_CHOICES = [('','-------')] + MONTHS.items() |
| | 332 | YEARS_CHOICES = [('','-------')] + [(y,y) for y in range(2000,2050)] |
| | 333 | widgets = [ |
| | 334 | forms.Select(choices=MONTHS_CHOICES), |
| | 335 | forms.Select(choices=YEARS_CHOICES), |
| | 336 | ] |
| | 337 | |
| | 338 | super(YearMonthWidget, self).__init__(widgets=widgets, *args, **kwargs) |
| | 339 | |
| | 340 | def decompress(self, value): |
| | 341 | if not value: |
| | 342 | ret = ['', ''] |
| | 343 | else: |
| | 344 | ret = map(int, value.split('-')[:2]) |
| | 345 | ret.reverse() |
| | 346 | return ret |
| | 347 | |
| | 348 | def value_from_datadict(self, data, files, name): |
| | 349 | month, year = data[name+'_0'], data[name+'_1'] |
| | 350 | |
| | 351 | try: |
| | 352 | return date(int(year), int(month), 1) |
| | 353 | except ValueError: |
| | 354 | return None |
| | 355 | |
| | 356 | |
| 327 | | fields = ['recruitment_status', 'recruitment_country','enrollment_start_planned', |
| 328 | | 'enrollment_end_planned','target_sample_size', 'inclusion_criteria', |
| | 361 | fields = ['recruitment_status', 'recruitment_country', |
| | 362 | 'target_sample_size', 'inclusion_criteria', |
| | 418 | |
| | 419 | def __init__(self, *args, **kwargs): |
| | 420 | self.base_fields.keyOrder = ['recruitment_status', 'recruitment_country', |
| | 421 | 'enrollment_start_date', 'enrollment_end_date', 'target_sample_size', |
| | 422 | 'inclusion_criteria', 'gender', 'agemin_value', 'agemin_unit', |
| | 423 | 'agemax_value', 'agemax_unit', 'exclusion_criteria'] |
| | 424 | |
| | 425 | super(RecruitmentForm, self).__init__(*args, **kwargs) |
| | 426 | |
| | 427 | if self.instance: |
| | 428 | self.fields['enrollment_start_date'].initial = self.instance.enrollment_start_planned or\ |
| | 429 | self.instance.enrollment_start_actual |
| | 430 | self.fields['enrollment_end_date'].initial = self.instance.enrollment_end_planned or\ |
| | 431 | self.instance.enrollment_end_actual |
| | 432 | |
| | 433 | def save(self, commit=True, *args, **kwargs): |
| | 434 | obj = super(RecruitmentForm, self).save(commit=False, *args, **kwargs) |
| | 435 | |
| | 436 | obj.enrollment_start_planned = None |
| | 437 | obj.enrollment_start_actual = None |
| | 438 | if self.cleaned_data.get('enrollment_start_date', None): |
| | 439 | if self.cleaned_data['enrollment_start_date'] > date.today(): |
| | 440 | obj.enrollment_start_planned = self.cleaned_data['enrollment_start_date'] |
| | 441 | else: |
| | 442 | obj.enrollment_start_actual = self.cleaned_data['enrollment_start_date'] |
| | 443 | |
| | 444 | obj.enrollment_end_planned = None |
| | 445 | obj.enrollment_end_actual = None |
| | 446 | if self.cleaned_data.get('enrollment_end_date', None): |
| | 447 | if self.cleaned_data['enrollment_end_date'] > date.today(): |
| | 448 | obj.enrollment_end_planned = self.cleaned_data['enrollment_end_date'] |
| | 449 | else: |
| | 450 | obj.enrollment_end_actual = self.cleaned_data['enrollment_end_date'] |
| | 451 | |
| | 452 | if commit: |
| | 453 | obj.save() |
| | 454 | |
| | 455 | return obj |