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