def get_case_data_source(app, case_type): default_case_property_datatypes = get_default_case_property_datatypes() def _make_indicator(property_name): return { "type": "raw", "column_id": property_name, "datatype": default_case_property_datatypes.get(property_name, "string"), 'property_name': property_name, "display_name": property_name, } property_builder = ParentCasePropertyBuilder(app, default_case_property_datatypes.keys()) return DataSourceConfiguration( domain=app.domain, referenced_doc_type='CommCareCase', table_id=_clean_table_name(app.domain, case_type), display_name=case_type, configured_filter={ 'type': 'property_match', 'property_name': 'type', 'property_value': case_type, }, configured_indicators=[ _make_indicator(property) for property in property_builder.get_properties(case_type) ] )
def handle(self, *args, **options): toggle_map = dict([(t.slug, t) for t in all_toggles()]) domains = [row['key'] for row in Domain.get_all(include_docs=False)] for domain in domains: if toggle_map['rich_text'].enabled(domain) or toggle_map['experimental_ui'].enabled(domain): #logger.info('migrating domain {}'.format(domain)) apps = get_apps_in_domain(domain, include_remote=False) for app in apps: app_dirty = False builder = ParentCasePropertyBuilder(app) relationships = builder.get_parent_type_map(app.get_case_types(), allow_multiple_parents=True) for module in app.modules: for form in module.forms: if form.doc_type == 'Form' and form.requires_case(): #logger.info('migrating form {}'.format(form.name.get('en', form.name))) base_case_type = form.get_module().case_type self._replace_in_form(form, relationships, base_case_type, 0) prefixes = re.findall(r'#case/\w+/', form.source) prefixes = set(prefixes) for p in prefixes: if p != "#case/parent/" and p != "#case/grandparent/": self._form_error(form, "Unknown prefix remaining: {}".format(p)) if options['save']: try: save_xform(form.get_app(), form, form.source) app_dirty = True except: self._form_error(form, "Form xml invalid") if app_dirty: app.save() logger.info('done with cmitfb_migrate_syntax')
def case_properties(self): props = set([]) if CALLCENTER.enabled(self.domain): from corehq.apps.custom_data_fields.models import CustomDataFieldsDefinition user_fields = CustomDataFieldsDefinition.get_or_create(self.domain, 'UserFields') props |= {field.slug for field in user_fields.fields} for app in self.applications: builder = ParentCasePropertyBuilder(app, ("name",)) props |= set(builder.get_properties(self.case_type)) return props
def get_case_data_source(app, case_type): property_builder = ParentCasePropertyBuilder(app, DEFAULT_CASE_PROPERTY_DATATYPES.keys()) return DataSourceConfiguration( domain=app.domain, referenced_doc_type='CommCareCase', table_id=_clean_table_name(app.domain, case_type), display_name=case_type, configured_filter=make_case_data_source_filter(case_type), configured_indicators=[ make_case_property_indicator(property) for property in property_builder.get_properties(case_type) ] )
def __init__(self, domain, app, source_type, source_id): assert (source_type in ['case', 'form']) self.domain = domain self.app = app self.source_type = source_type # source_id is a case type of form id self.source_id = source_id if self.source_type == 'form': self.source_form = Form.get_form(self.source_id) self.source_xform = XForm(self.source_form.source) if self.source_type == 'case': property_builder = ParentCasePropertyBuilder( self.app, DEFAULT_CASE_PROPERTY_DATATYPES.keys() ) self.case_properties = list( property_builder.get_properties(self.source_id) | {'closed'} )
def _setup_case_property_builder(app): defaults = ('name', 'date-opened', 'status', 'last_modified') if app.case_sharing: defaults += ('#owner_name',) per_type_defaults = None if is_usercase_in_use(app.domain): per_type_defaults = get_per_type_defaults(app.domain, [USERCASE_TYPE]) builder = ParentCasePropertyBuilder(app, defaults=defaults, per_type_defaults=per_type_defaults) return builder
def handle(self, *args, **options): toggle_map = dict([(t.slug, t) for t in all_toggles()]) domains = [row['key'] for row in Domain.get_all(include_docs=False)] for domain in domains: if toggle_map['rich_text'].enabled( domain) or toggle_map['experimental_ui'].enabled(domain): #logger.info('migrating domain {}'.format(domain)) apps = get_apps_in_domain(domain, include_remote=False) for app in apps: app_dirty = False builder = ParentCasePropertyBuilder(app) relationships = builder.get_parent_type_map( app.get_case_types(), allow_multiple_parents=True) for module in app.modules: for form in module.forms: if form.doc_type == 'Form' and form.requires_case( ): #logger.info('migrating form {}'.format(form.name.get('en', form.name))) base_case_type = form.get_module().case_type self._replace_in_form(form, relationships, base_case_type, 0) prefixes = re.findall(r'#case/\w+/', form.source) prefixes = set(prefixes) for p in prefixes: if p != "#case/parent/" and p != "#case/grandparent/": self._form_error( form, "Unknown prefix remaining: {}". format(p)) if options['save']: try: save_xform(form.get_app(), form, form.source) app_dirty = True except: self._form_error( form, "Form xml invalid") if app_dirty: app.save() logger.info('done with cmitfb_migrate_syntax')
def case_properties(self): props = set([]) for app in self.applications: builder = ParentCasePropertyBuilder(app, ("name",)) props |= set(builder.get_properties(self.case_type)) return props