예제 #1
0
def all_case_properties_by_domain(domain,
                                  case_types=None,
                                  include_parent_properties=True):
    result = {}
    for app in all_apps_by_domain(domain):
        if app.is_remote_app():
            continue

        if case_types is None:
            case_types = app.get_case_types()

        property_map = get_case_properties(
            app,
            case_types,
            defaults=('name', ),
            include_parent_properties=include_parent_properties)

        for case_type, properties in six.iteritems(property_map):
            if case_type in result:
                result[case_type].extend(properties)
            else:
                result[case_type] = properties

    cleaned_result = {}
    for case_type, properties in six.iteritems(result):
        properties = list(set(properties))
        properties.sort()
        cleaned_result[case_type] = properties

    return cleaned_result
예제 #2
0
 def read_forms(question_item_map):
     """
     Return a dictionary that allows us to look up an OpenClinica item given a form XMLNS and question name
     """
     data = defaultdict(dict)
     openclinica_domains = (d for d, m in settings.DOMAIN_MODULE_MAP.iteritems() if m == 'custom.openclinica')
     for domain_ in openclinica_domains:
         for app in all_apps_by_domain(domain_):
             if app.name not in STUDY_APPS:
                 continue
             for ccmodule in app.get_modules():
                 for ccform in ccmodule.get_forms():
                     form = data[ccform.xmlns]
                     form['app'] = app.name
                     form['module'] = ccmodule.name['en']
                     form['name'] = ccform.name['en']
                     form['questions'] = {}
                     for question in ccform.get_questions(['en']):
                         name = question['value'].split('/')[-1]
                         # `question_item_map.get(name)` will return a list containing a single item in the
                         # case of imported apps, or list of possible items in the case of the KEMRI app.
                         # Determine which item this question maps to by filtering on module. A CommCare module
                         # maps (kinda) one-to-one to an OpenClinica event, and should narrow possible item
                         # matches to 1.
                         item = filter_items(question_item_map.get(name), form['module'], ccform.xmlns, name)
                         form['questions'][name] = item
     return data
def turn_on_secure_submissions_for_all_apps(domain):
    for app in all_apps_by_domain(domain):
        save = False
        if app.application_version == '1.0':
            continue
        if app.build_version < '2.8':
            app.build_spec = get_default_build_spec(APP_V2)
            save = True
        if not app.secure_submissions:
            app.secure_submissions = True
            save = True
        if save:
            app.save()
 def read_forms(question_item_map):
     data = defaultdict(dict)
     for domain, pymodule in settings.DOMAIN_MODULE_MAP.iteritems():
         if pymodule == 'custom.openclinica':
             for app in all_apps_by_domain(domain):
                 for ccmodule in app.get_modules():
                     for ccform in ccmodule.get_forms():
                         form = data[ccform.xmlns]
                         form['app'] = app.name
                         form['module'] = ccmodule.name['en']
                         form['name'] = ccform.name['en']
                         form['questions'] = {}
                         for question in ccform.get_questions(['en']):
                             name = question['value'].split('/')[-1]
                             form['questions'][name] = question_item_map.get(name)
     return data
    def _generate_sample_app(self, domain):
        name = 'Case Fixtures App'
        for app in all_apps_by_domain(domain):
            if app.name == name:
                return False

        factory = AppFactory(domain, name)
        factory.app.comment = "App auto generated with ./manage.py create_case_fixtures"
        adult, adult_form = factory.new_basic_module('adult', 'adult')
        child, child_form = factory.new_basic_module('child', 'child')
        factory.form_opens_case(child_form, 'child', is_subcase=True, parent_tag='parent')
        car, car_form = factory.new_basic_module('car', 'car')
        factory.form_opens_case(car_form, 'car', is_subcase=True, parent_tag='car')
        maintenance_record, maintenance_record_form = factory.new_basic_module(
            'maintenance_record', 'maintenance_record')
        factory.form_opens_case(maintenance_record_form, 'maintenance_record',
                                is_subcase=True, parent_tag='maintenance_record_of_car',
                                is_extension=True)

        factory.app.save()
        return True