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
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