Changeset 472

Show
Ignore:
Timestamp:
07/14/10 18:30:32 (3 years ago)
Author:
rafael.soares
Message:

Updated achievement report, refs #88

Location:
trunk/clinicaltrials
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/clinicaltrials/repository/templates/repository/trial_index.html

    r468 r472  
    1111            <th>{% trans "Part" %}</th> 
    1212            <th>{% trans "Form name" %}</th> 
    13             <th>{% trans "Status" %} ({{ submission.language }})</th> 
    14             {% for lang in submission.get_trans_languages %} 
    15                 <th>{% trans lang %}</th> 
     13 
     14            {% for lang in submission.get_mandatory_languages %} 
     15                <th>{% trans "Status" %} ({% trans lang %})</th> 
    1616            {% endfor %}     
    1717        </tr> 
     
    2121            <td>{{forloop.counter}}</td> 
    2222            <td><a href="{{link.url}}">{{ link.label }}</a></td> 
    23             <td><img src="{{link.icon}}" alt="{{link.msg}}" title="{{link.msg}}"/>&nbsp;&nbsp;{{link.msg}} {{link.status}}</td> 
    2423            {% for lang in link.trans %} 
    2524                <td><img src="{{lang.icon}}" alt="{{lang.msg}}" title="{{lang.msg}}"/>&nbsp;&nbsp;{{lang.msg}}</td> 
  • trunk/clinicaltrials/repository/trds_forms.py

    r468 r472  
    8585        if commit: 
    8686            self.save_translations(obj) 
    87  
     87            # to check fields after the update of the translations 
     88            obj = super(ReviewModelForm, self).save(commit=commit) 
     89         
    8890        return obj 
    8991 
  • trunk/clinicaltrials/repository/views.py

    r468 r472  
    8383            data['url'] = reverse('step_' + str(i + 1), args=[trial_pk]) 
    8484             
    85             step_status = fields_status.get(ct.submission.language.lower(), {}).get('step_' + str(i + 1), None) 
    86             if step_status == "MISSING": 
    87                 data['icon'] = settings.MEDIA_URL + 'media/img/admin/icon_error.gif' 
    88             elif step_status == "BLANK":  
    89                 data['icon'] = settings.MEDIA_URL + 'media/img/admin/icon_alert.gif' 
    90             elif step_status == "OK": 
    91                 data['icon'] = settings.MEDIA_URL + 'media/img/admin/icon_success.gif' 
    92             else: 
    93                 data['icon'] = settings.MEDIA_URL + 'media/img/admin/icon_error.gif' 
    94              
    95             if step_status is None: 
    96                 data['msg'] = _('Error') 
    97             else: 
    98                 data['msg'] = _(step_status.title() + ' fields') 
    99              
    10085            trans_list = [] 
    101             for lang in ct.submission.get_trans_languages(): 
     86            for lang in ct.submission.get_mandatory_languages(): 
    10287                trans = {} 
     88                lang = lang.lower() 
    10389                step_status = fields_status.get(lang, {}).get('step_' + str(i + 1), None) 
    10490                if step_status == "MISSING": 
     
    195181            return HttpResponseRedirect(reverse('step_1',args=[trial_pk])) 
    196182    else: 
    197         form = TrialIdentificationForm(instance=ct) 
     183        form = TrialIdentificationForm(instance=ct,  
     184                                       default_second_language=ct.submission.get_secondary_language()) 
    198185        SecondaryIdSet = inlineformset_factory(ClinicalTrial, TrialNumber, 
    199186                                               form=SecondaryIdForm, 
     
    209196                               'steps': step_list(trial_pk), 
    210197                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[0])), 
     198                               'default_second_language': ct.submission.get_secondary_language(), 
     199                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()], 
    211200                               }, 
    212201                               context_instance=RequestContext(request)) 
     
    233222        return HttpResponseRedirect(reverse('step_2',args=[trial_pk])) 
    234223    else: 
    235         form = PrimarySponsorForm(instance=ct) 
     224        form = PrimarySponsorForm(instance=ct,  
     225                                  default_second_language=ct.submission.get_secondary_language()) 
    236226        SecondarySponsorSet = inlineformset_factory(ClinicalTrial, TrialSecondarySponsor, 
    237227            form=SecondarySponsorForm,extra=EXTRA_FORMS, can_delete=True) 
     
    249239                               'title':TRIAL_FORMS[1], 
    250240                               'steps': step_list(trial_pk), 
    251                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[1])),}, 
     241                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[1])), 
     242                               'default_second_language': ct.submission.get_secondary_language(), 
     243                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    252244                               context_instance=RequestContext(request)) 
    253245 
     
    296288            return HttpResponseRedirect(reverse('step_3',args=[trial_pk])) 
    297289    else: 
    298         form = HealthConditionsForm(instance=ct) 
     290        form = HealthConditionsForm(instance=ct, 
     291                                    default_second_language=ct.submission.get_secondary_language()) 
    299292        general_desc_formset = GeneralDescriptorSet(queryset=general_qs,prefix='g') 
    300293        specific_desc_formset = SpecificDescriptorSet(queryset=specific_qs,prefix='s') 
     
    308301                               'title':TRIAL_FORMS[2], 
    309302                               'steps': step_list(trial_pk), 
    310                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[2])),}, 
     303                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[2])), 
     304                               'default_second_language': ct.submission.get_secondary_language(), 
     305                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    311306                               context_instance=RequestContext(request)) 
    312307 
     
    340335            return HttpResponseRedirect(reverse('step_4',args=[trial_pk])) 
    341336    else: 
    342         form = InterventionForm(instance=ct) 
     337        form = InterventionForm(instance=ct, 
     338                                default_second_language=ct.submission.get_secondary_language()) 
    343339        specific_desc_formset = DescriptorFormSet(queryset=queryset) 
    344340 
     
    350346                               'title':TRIAL_FORMS[3], 
    351347                               'steps': step_list(trial_pk), 
    352                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[3])),}, 
     348                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[3])), 
     349                               'default_second_language': ct.submission.get_secondary_language(), 
     350                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    353351                               context_instance=RequestContext(request)) 
    354352 
     
    365363            return HttpResponseRedirect(reverse('step_5',args=[trial_pk])) 
    366364    else: 
    367         form = RecruitmentForm(instance=ct) 
     365        form = RecruitmentForm(instance=ct, 
     366                               default_second_language=ct.submission.get_secondary_language()) 
    368367 
    369368    forms = [form] 
     
    373372                               'title':TRIAL_FORMS[4], 
    374373                               'steps': step_list(trial_pk), 
    375                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[4])),}, 
     374                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[4])), 
     375                               'default_second_language': ct.submission.get_secondary_language(), 
     376                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    376377                               context_instance=RequestContext(request)) 
    377378 
     
    388389            return HttpResponseRedirect(reverse('step_6',args=[trial_pk])) 
    389390    else: 
    390         form = StudyTypeForm(instance=ct) 
     391        form = StudyTypeForm(instance=ct,  
     392                             default_second_language=ct.submission.get_secondary_language()) 
    391393 
    392394    forms = [form] 
     
    396398                               'title':TRIAL_FORMS[5], 
    397399                               'steps': step_list(trial_pk), 
    398                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[5])),}, 
     400                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[5])), 
     401                               'default_second_language': ct.submission.get_secondary_language(), 
     402                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    399403                               context_instance=RequestContext(request)) 
    400404 
     
    441445                               'title':TRIAL_FORMS[6], 
    442446                               'steps': step_list(trial_pk), 
    443                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[6])),}, 
     447                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[6])), 
     448                               'default_second_language': ct.submission.get_secondary_language(), 
     449                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    444450                               context_instance=RequestContext(request)) 
    445451 
     
    492498                               'title':TRIAL_FORMS[7], 
    493499                               'steps': step_list(trial_pk), 
    494                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[7])),}, 
     500                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[7])), 
     501                               'default_second_language': ct.submission.get_secondary_language(), 
     502                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    495503                               context_instance=RequestContext(request)) 
    496504 
     
    533541                               'host': request.get_host(), 
    534542                               'steps': step_list(trial_pk), 
    535                                'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[8])),}, 
     543                               'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[8])), 
     544                               'default_second_language': ct.submission.get_secondary_language(), 
     545                               'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, 
    536546                               context_instance=RequestContext(request)) 
    537547 
  • trunk/clinicaltrials/reviewapp/models.py

    r466 r472  
    105105        return self.get_mandatory_languages() - set([self.language]) 
    106106 
    107  
     107    def get_secondary_language(self): 
     108        sec = None 
     109        for lang in self.get_mandatory_languages(): 
     110            # fixme: get from settings 
     111            if lang != 'en': 
     112                sec = lang.lower() 
     113                break 
     114        return sec 
    108115 
    109116    def get_absolute_url(self): 
     
    205212    def __unicode__(self): 
    206213        return '%s' % (self.short_title()) 
    207          
    208          
     214 
    209215 
    210216post_save.connect(create_user_profile, sender=User) 
  • trunk/clinicaltrials/reviewapp/signals.py

    r471 r472  
    44 
    55def check_trial_fields(sender, instance,**kwargs): 
     6 
     7    if not hasattr(instance, 'submission'): 
     8        return 
    69     
    7     REQUIRED_FIELDS = { 
     10    FIELDS = { 
    811        'step_1': { 
    9             'scientific_title': {'type': 'text', 'poly': True} 
     12            'scientific_title': {'required': True, 'type': 'text', 'poly': True}, 
     13            'scientific_acronym': {'required': False, 'type': 'text', 'poly': True}, 
     14            'scientific_acronym_expansion': {'required': False, 'type': 'text', 'poly': True}, 
     15            'public_title': {'required': False, 'type': 'text', 'poly': True}, 
     16            'acronym': {'required': False, 'type': 'text', 'poly': True}, 
     17            'acronym_expansion': {'required': False, 'type': 'text', 'poly': True} 
    1018        },  
    1119        'step_2': { 
    12             'primary_sponsor': {'type': 'text', 'poly': False} 
     20            'primary_sponsor': {'required': True, 'type': 'text', 'poly': False} 
    1321        }, 
    1422        'step_3': { 
    15             'hc_freetext': {'type': 'text', 'poly': True} 
     23            'hc_freetext': {'required': True, 'type': 'text', 'poly': True} 
    1624        }, 
    1725        'step_4': { 
    18             'i_freetext': {'type': 'text', 'poly': True},  
    19             'intervention_code': {'type': 'mult', 'poly': False, 'queryset': instance.intervention_code()} 
     26            'i_freetext': {'required': True, 'type': 'text', 'poly': True},  
     27            'intervention_code': {'required': True, 'type': 'mult', 'poly': False,  
     28                                  'queryset': instance.intervention_code()} 
    2029        }, 
    2130        'step_5': { 
    22             'recruitment_status': {'type': 'text', 'poly': False},  
    23             'recruitment_country': {'type': 'mult', 'poly': False, 'queryset': instance.recruitment_country.all()},  
    24             'enrollment_start_planned': {'type': 'text', 'poly': False},  
    25             'target_sample_size': {'type': 'text', 'poly': False},  
    26             'inclusion_criteria': {'type': 'text', 'poly': True},  
    27             'gender': {'type': 'text', 'poly': False},  
    28             'agemin_value': {'type': 'text', 'poly': False},  
    29             'agemin_unit': {'type': 'text', 'poly': False},  
    30             'agemax_value': {'type': 'text', 'poly': False},  
    31             'agemax_unit': {'type': 'text', 'poly': False},  
    32             'exclusion_criteria': {'type': 'text', 'poly': True} 
     31            'recruitment_status': {'required': True, 'type': 'text', 'poly': False},  
     32            'recruitment_country': {'required': True, 'type': 'mult', 'poly': False,  
     33                                    'queryset': instance.recruitment_country.all()},  
     34            'enrollment_start_planned': {'required': True, 'type': 'text', 'poly': False},  
     35            'target_sample_size': {'required': True, 'type': 'text', 'poly': False},  
     36            'inclusion_criteria': {'required': True, 'type': 'text', 'poly': True},  
     37            'gender': {'required': True, 'type': 'text', 'poly': False},  
     38            'agemin_value': {'required': True, 'type': 'text', 'poly': False},  
     39            'agemin_unit': {'required': True, 'type': 'text', 'poly': False},  
     40            'agemax_value': {'required': True, 'type': 'text', 'poly': False},  
     41            'agemax_unit': {'required': True, 'type': 'text', 'poly': False},  
    3342        }, 
    3443        'step_6': { 
    35             'study_type': {'type': 'text', 'poly': False},  
    36             'study_design': {'type': 'text', 'poly': True},  
    37             'phase': {'type': 'text', 'poly': False} 
    38         }, 
    39         'step_7': {}, 
    40         'step_8': {} 
    41     } 
    42      
    43     OPTIONAL_FIELDS = { 
    44         'step_1': { 
    45             'scientific_acronym': {'type': 'text', 'poly': True}, 
    46             'scientific_acronym_expansion': {'type': 'text', 'poly': True}, 
    47             'public_title': {'type': 'text', 'poly': True}, 
    48             'acronym': {'type': 'text', 'poly': True}, 
    49             'acronym_expansion': {'type': 'text', 'poly': True} 
    50         },  
    51         'step_2': {}, 
    52         'step_3': {}, 
    53         'step_4': {}, 
    54         'step_5': {}, 
    55         'step_6': { 
    56             'expanded_access_program': {'type': 'text', 'poly': False},  
    57             'intervention_assignment': {'type': 'text', 'poly': False},  
    58             'number_of_arms': {'type': 'text', 'poly': False}, 
    59             'masking': {'type': 'text', 'poly': False}, 
    60             'allocation': {'type': 'text', 'poly': False} 
     44            'study_type': {'required': True, 'type': 'text', 'poly': False},  
     45            'study_design': {'required': True, 'type': 'text', 'poly': True},  
     46            'phase': {'required': True, 'type': 'text', 'poly': False}, 
     47            #'expanded_access_program': {'required': False, 'type': 'text', 'poly': False},  
     48            'intervention_assignment': {'required': False, 'type': 'text', 'poly': False},  
     49            'number_of_arms': {'required': False, 'type': 'text', 'poly': False}, 
     50            'masking': {'required': False, 'type': 'text', 'poly': False}, 
     51            'allocation': {'required': False, 'type': 'text', 'poly': False} 
    6152        }, 
    6253        'step_7': {}, 
     
    6657    from repository.trds_forms import STEP_FORM_MATRIX 
    6758    from repository.models import ClinicalTrial 
    68     from reviewapp.models import Submission 
    69     from settings import MANAGED_LANGUAGES 
    7059    import re 
    7160    import pickle 
    7261 
    73     fields_status = {'en': {'step_9': 'OK'}, 'es': {'step_9': 'OK'}, 'pt-br': {'step_9': 'OK'}} 
     62    fields_status = {} 
     63 
     64    # attachment 
     65    count = instance.submission.attachment_set.all().count() 
     66    for lang in instance.submission.get_mandatory_languages(): 
     67        lang = lang.lower() 
     68        if count == 0: 
     69            fields_status.update({lang: {'step_9': 'BLANK'}}) 
     70        else: 
     71            fields_status.update({lang: {'step_9': 'OK'}}) 
    7472 
    7573    for step, forms in STEP_FORM_MATRIX.items(): 
     
    8078                count = form.Meta.queryset.filter(trial=instance).count() 
    8179                 
    82                 if form.Meta.min_required != 0: 
    83                     for lang in MANAGED_LANGUAGES: 
    84                         lang = lang.lower() 
    85                         if count < form.Meta.min_required: 
    86                          
    87                             step_status.update({lang: 'MISSING'}) 
    88                         elif count == 0: 
    89                             if step_status.get(lang, '') != 'MISSING': 
    90                                 step_status.update({lang: 'BLANK'}) 
     80                for lang in instance.submission.get_mandatory_languages(): 
     81                    lang = lang.lower() 
     82                    if count < form.Meta.min_required: 
     83                        step_status.update({lang: 'MISSING'}) 
     84                    elif count == 0: 
     85                        if step_status.get(lang, '') != 'MISSING': 
     86                            step_status.update({lang: 'BLANK'}) 
     87                    else: 
     88                        if not form.Meta.polyglot: 
     89                            if step_status.get(lang, '') == '': 
     90                                step_status.update({lang: 'OK'}) 
    9191                        else: 
    92                             if not form.Meta.polyglot: 
    93                                 if step_status.get(lang, '') == '': 
    94                                     step_status.update({lang: 'OK'}) 
    95                             else: 
    96                                 for out in form.Meta.queryset.filter(trial=instance): 
    97                                     for field in form.Meta.polyglot_fields: 
    98                                         if lang == 'en': 
    99                                             value = [getattr(out, field)] 
    100                                         else: 
    101                                             list_value = out.translations.filter(language=lang) 
    102                                             if len(list_value) > 0: 
    103                                                 value = getattr(list_value[0], field) 
    104                                             else: 
    105                                                 value = None 
    106  
    107                                         if value is None: 
     92                            for out in form.Meta.queryset.filter(trial=instance): 
     93                                for field in form.Meta.polyglot_fields: 
     94                                    if lang == 'en': 
     95                                        value = [getattr(out, field)] 
     96                                    else: 
     97                                        list_value = out.translations.filter(language=lang) 
     98                                        if len(list_value) > 0: 
     99                                            value = getattr(list_value[0], field) 
     100                                        else: 
     101                                            value = None 
     102 
     103                                    if value is None: 
     104                                        if form.Meta.min_required != 0: 
    108105                                            step_status.update({lang: 'MISSING'}) 
    109                                         elif type(value) is str or type(value) is unicode: 
    110                                             if re.match('^\s*$', value): 
    111                                                 step_status.update({lang: 'MISSING'}) 
    112                                             else: 
    113                                                 if step_status.get(lang, '') == '': 
    114                                                     step_status.update({lang: 'OK'}) 
    115                                         else: 
    116                                             if len(str(value)) == 0: 
    117                                                 step_status.update({lang: 'MISSING'}) 
    118                                             else: 
    119                                                 if step_status.get(lang, '') == '': 
    120                                                     step_status.update({lang: 'OK'}) 
    121                 else: 
    122                     for lang in MANAGED_LANGUAGES: 
    123                         lang = lang.lower() 
    124                         if count == 0: 
    125                             if step_status.get(lang, '') != 'MISSING': 
    126                                 step_status.update({lang: 'BLANK'}) 
    127                         else: 
    128                             if not form.Meta.polyglot: 
    129                                 if step_status.get(lang, '') == '': 
    130                                     step_status.update({lang: 'OK'}) 
    131                             else: 
    132                                 for out in form.Meta.queryset.filter(trial=instance): 
    133                                     for field in form.Meta.polyglot_fields: 
    134                                         if lang == 'en': 
    135                                             value = [getattr(out, field)] 
    136                                         else: 
    137                                             list_value = out.translations.filter(language=lang) 
    138                                             if len(list_value) > 0: 
    139                                                 value = getattr(list_value[0], field) 
    140                                             else: 
    141                                                 value = None 
    142                                         if value is None: 
     106                                        else: 
    143107                                            if step_status.get(lang, '') != 'MISSING': 
    144108                                                step_status.update({lang: 'BLANK'}) 
    145                                         elif type(value) is str or type(value) is unicode: 
    146                                             if re.match('^\s*$', value): 
     109                                    elif type(value) is str or type(value) is unicode: 
     110                                        if re.match('^\s*$', value): 
     111                                            if step_status.get(lang, '') != 'MISSING': 
     112                                                step_status.update({lang: 'MISSING'}) 
     113                                            else: 
    147114                                                if step_status.get(lang, '') != 'MISSING': 
    148115                                                    step_status.update({lang: 'BLANK'}) 
    149                                             else: 
    150                                                 if step_status.get(lang, '') == '': 
    151                                                     step_status.update({lang: 'OK'}) 
    152                                         else: 
    153                                             if len(str(value)) == 0: 
    154                                                 if step_status.get(lang, '') != 'MISSING': 
    155                                                     step_status.update({lang: 'BLANK'}) 
    156                                             else: 
    157                                                 if step_status.get(lang, '') == '': 
    158                                                     step_status.update({lang: 'OK'}) 
    159                                      
    160             elif hasattr(form.Meta,'model'): 
    161                 if form.Meta.model == ClinicalTrial: 
    162                     required_fields = REQUIRED_FIELDS[step] 
    163                     optional_fields = OPTIONAL_FIELDS[step] 
    164                     for field in form.declared_fields.keys(): 
    165                         values = {} 
    166                         if field in required_fields.keys(): 
    167                             if required_fields[field]['type'] == 'text': 
    168                                 values.update({'en': getattr(instance, field)}) 
    169                                  
    170                                 for trans in instance.translations.all(): 
    171                                     if required_fields[field]['poly']: 
    172                                         values.update({trans.language.lower(): getattr(trans, field)}) 
    173                                     else: 
    174                                         values.update({trans.language.lower(): values['en']}) 
    175                                              
    176                                 for lang, value in values.items(): 
    177  
    178                                     if value is None: 
    179                                         step_status.update({lang: 'MISSING'}) 
    180                                     elif type(value) is str or type(value) is unicode: 
    181                                         if re.match('^\s*$', value): 
    182                                             step_status.update({lang: 'MISSING'}) 
    183116                                        else: 
    184117                                            if step_status.get(lang, '') == '': 
     
    186119                                    else: 
    187120                                        if len(str(value)) == 0: 
    188                                             step_status.update({lang: 'MISSING'}) 
     121                                            if form.Meta.min_required != 0: 
     122                                                step_status.update({lang: 'MISSING'}) 
     123                                            else: 
     124                                                if step_status.get(lang, '') != 'MISSING': 
     125                                                    step_status.update({lang: 'BLANK'}) 
    189126                                        else: 
    190127                                            if step_status.get(lang, '') == '': 
    191128                                                step_status.update({lang: 'OK'}) 
    192                                                      
    193                             elif required_fields[field]['type'] == 'mult': 
    194                                 count = required_fields[field]['queryset'].count() 
    195                                 if count < 1: 
    196                                     for lang in MANAGED_LANGUAGES: 
    197                                         lang = lang.lower() 
    198                                         step_status.update({lang: 'MISSING'}) 
    199                                 else: 
    200                                     for lang in MANAGED_LANGUAGES: 
    201                                         lang = lang.lower() 
    202                                         if step_status.get(lang, '') == '': 
    203                                             step_status.update({lang: 'OK'}) 
    204                              
    205                         elif field in optional_fields.keys(): 
    206                             if optional_fields[field]['type'] == 'text': 
    207                                 values.update({'en': getattr(instance, field)}) 
    208  
    209                                 for trans in instance.translations.all(): 
    210                                     if optional_fields[field]['poly']: 
    211                                         values.update({trans.language.lower(): getattr(trans, field)}) 
    212                                     else: 
    213                                         values.update({trans.language.lower(): values['en']}) 
     129             
     130            else: 
     131                if hasattr(form.Meta,'model'): 
     132                    if form.Meta.model == ClinicalTrial: 
     133                        check_fields = FIELDS[step] 
     134                        for field in form.declared_fields.keys(): 
     135                            values = {} 
     136                            if field in check_fields.keys(): 
     137                                if check_fields[field]['type'] == 'text': 
     138                                    values.update({'en': getattr(instance, field)}) 
     139                                     
     140                                    for trans in instance.translations.all(): 
     141                                        if check_fields[field]['poly']: 
     142                                            values.update({trans.language.lower(): getattr(trans, field)}) 
     143                                        else: 
     144                                            values.update({trans.language.lower(): values['en']}) 
     145                                                 
     146                                    for lang, value in values.items(): 
     147                                        if value is None: 
     148                                            if check_fields[field]['required']: 
     149                                                step_status.update({lang: 'MISSING'}) 
     150                                            else: 
     151                                                if step_status.get(lang, '') != 'MISSING': 
     152                                                    step_status.update({lang: 'BLANK'}) 
     153                                        elif type(value) is str or type(value) is unicode: 
     154                                            if re.match('^\s*$', value): 
     155                                                if check_fields[field]['required']: 
     156                                                    step_status.update({lang: 'MISSING'}) 
     157                                                else: 
     158                                                    if step_status.get(lang, '') != 'MISSING': 
     159                                                        step_status.update({lang: 'BLANK'}) 
     160                                            else: 
     161                                                if step_status.get(lang, '') == '': 
     162                                                    step_status.update({lang: 'OK'}) 
     163                                        else: 
     164                                            if len(str(value)) == 0: 
     165                                                if check_fields[field]['required']: 
     166                                                    step_status.update({lang: 'MISSING'}) 
     167                                                else: 
     168                                                    if step_status.get(lang, '') != 'MISSING': 
     169                                                        step_status.update({lang: 'BLANK'}) 
     170                                            else: 
     171                                                if step_status.get(lang, '') == '': 
     172                                                    step_status.update({lang: 'OK'}) 
    214173                                 
    215                                 for lang, value in values.items(): 
    216                                     if field == 'expanded_access_program': 
    217                                         value = 'Ok' # because unknown value is None 
    218                                          
    219                                     if value is None: 
    220                                         if step_status.get(lang, '') != 'MISSING': 
    221                                             step_status.update({lang: 'BLANK'}) 
    222                                     elif type(value) is str or type(value) is unicode: 
    223                                         if re.match('^\s*$', value): 
    224                                             if step_status.get(lang, '') != 'MISSING': 
    225                                                 step_status.update({lang: 'BLANK'}) 
    226                                         else: 
    227                                             if step_status.get(lang, '') == '': 
    228                                                 step_status.update({lang: 'OK'}) 
    229                                     else: 
    230                                         if len(str(value)) == 0: 
    231                                             if step_status.get(lang, '') != 'MISSING': 
    232                                                 step_status.update({lang: 'BLANK'}) 
    233                                         else: 
    234                                             if step_status.get(lang, '') == '': 
    235                                                 step_status.update({lang: 'OK'}) 
    236                        
     174                                else:  
     175                                    if check_fields[field]['type'] == 'mult': 
     176                                        count = check_fields[field]['queryset'].count() 
     177 
     178                                        for lang in instance.submission.get_mandatory_languages(): 
     179                                            lang = lang.lower() 
     180                                            if count < 1: 
     181                                                step_status.update({lang: 'MISSING'}) 
     182                                            else: 
     183                                                if step_status.get(lang, '') == '': 
     184                                                    step_status.update({lang: 'OK'}) 
     185                                 
     186 
    237187        for language, status in step_status.items(): 
    238188            if fields_status.get(language) is None: 
     
    246196    # bulk data load. 
    247197    # Remove try/except (fix and revise code) 
    248     try: 
    249         instance.submission.fields_status = pickle.dumps(fields_status) 
    250         instance.submission.save() 
    251     except Submission.DoesNotExist: 
    252         pass 
     198 
     199    instance.submission.fields_status = pickle.dumps(fields_status) 
     200    instance.submission.save() 
     201 
    253202    # The exception: 
    254203    #Installing json fixture 'initial_data' from '/home/luciano/prj/ct/svn/trunk/clinicaltrials/repository/fixtures'. 
     
    269218        #% self.model._meta.object_name) 
    270219    #DoesNotExist: Submission matching query does not exist. 
    271      
    272      
    273  
     220