コード例 #1
0
ファイル: app_manager.py プロジェクト: bradmerlin/commcare-hq
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)
        ]
    )
コード例 #2
0
 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')
コード例 #3
0
ファイル: models.py プロジェクト: aristide/commcare-hq
    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
コード例 #4
0
ファイル: app_manager.py プロジェクト: aristide/commcare-hq
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)
        ]
    )
コード例 #5
0
ファイル: forms.py プロジェクト: aristide/commcare-hq
    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'}
            )
コード例 #6
0
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
コード例 #7
0
 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')
コード例 #8
0
 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