Skip to content

Commit

Permalink
Sairam | #4815 | Save column customization to couch
Browse files Browse the repository at this point in the history
  • Loading branch information
sairamkrish committed Oct 7, 2015
1 parent 51fdd0e commit 8342c65
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 17 deletions.
2 changes: 1 addition & 1 deletion mangrove/datastore/documents.py
Expand Up @@ -427,7 +427,7 @@ def __init__(self):
class UserQuestionnairePreferenceDocument(DocumentBase):
user_id = IntegerField()
project_id = TextField()
analysis_fields = ListField(DictField())
analysis_fields = DictField()

def __init__(self):
DocumentBase.__init__(self, document_type='UserQuestionnairePreference')
46 changes: 30 additions & 16 deletions mangrove/datastore/user_questionnaire_preference.py
Expand Up @@ -4,43 +4,57 @@

def get_analysis_field_preferences(manager, user_id, project):
preferences = []
rows = manager.load_all_rows_in_view('user_questionnaire_preference', key=[user_id, project.id])
user_questionnaire_preference = UserQuestionnairePreference(manager, user_id, project.id)
if len(rows):
user_questionnaire_preference = UserQuestionnairePreference.new_from_doc(manager,
UserQuestionnairePreferenceDocument.wrap(rows[0]['doc']))
user_questionnaire_preference = get_user_questionnaire_preference(manager, user_id, project.id)
preferences = [_convert_field_to_preference(manager, field, user_questionnaire_preference, project.id) for field in project.form_fields]
preferences.insert(0, _get_datasender_preferences(user_questionnaire_preference))
return preferences

def _convert_field_to_preference(manager, field, user_questionnaire_preference, project_id, key=None):
data = project_id+'_'+field.get('code') if not key else key

def save_analysis_field_preferences(manager, user_id, project, preferences):
user_questionnaire_preference = get_user_questionnaire_preference(manager, user_id, project.id)
if user_questionnaire_preference is None:
user_questionnaire_preference = UserQuestionnairePreference(manager, user_id, project.id)
user_questionnaire_preference.analysis_fields = preferences
user_questionnaire_preference.save()

def get_user_questionnaire_preference(manager, user_id, project_id):
rows = manager.load_all_rows_in_view('user_questionnaire_preference', key=[user_id, project_id])
user_questionnaire_preference = None
if len(rows):
user_questionnaire_preference = UserQuestionnairePreference.new_from_doc(manager,
UserQuestionnairePreferenceDocument.wrap(rows[0]['value']))
return user_questionnaire_preference

def _convert_field_to_preference(manager, field, preferences, project_id, key=None):
data = project_id+'_'+field.get('code') if not key else key +'.'+field.get('name')
analysis_field_preference={
"data":data,
"title":field.get('label'),
"visibility":_detect_visibility(user_questionnaire_preference, data)
"visibility":_detect_visibility(preferences, data)
}

if field.get('type') in ['unique_id']:
key = data + "_details"
id_number_fields = get_form_model_fields_by_entity_type(manager, [field.get('unique_id_type')])
analysis_field_preference["children"] = [_convert_field_to_preference(
manager, child_field,
user_questionnaire_preference,
preferences,
project_id, key)
for child_field in id_number_fields]

return analysis_field_preference

def _detect_visibility(user_questionnaire_preference, data):
return True
def _detect_visibility(preferences, data):
if preferences is None:
return True #Default behaviour - should be based on data, rules
return preferences.analysis_fields.get(data,False)


def _get_datasender_preferences(user_questionnaire_preference):
def _get_datasender_preferences(preferences):
data = "datasender"
analysis_field_preference={
"data":data,
"title":"Datasender",
"visibility":_detect_visibility(user_questionnaire_preference, data)
"visibility":_detect_visibility(preferences, data)
}
children = []
datasender_columns = {'datasender.name': 'Datasender Name',
Expand All @@ -53,7 +67,7 @@ def _get_datasender_preferences(user_questionnaire_preference):
children.append({
"data":column_id,
"title":column_title,
"visibility":_detect_visibility(user_questionnaire_preference, column_id)
"visibility":_detect_visibility(preferences, column_id)
})
analysis_field_preference["children"] = children
return analysis_field_preference
Expand All @@ -62,7 +76,7 @@ def _get_datasender_preferences(user_questionnaire_preference):
class UserQuestionnairePreference(DataObject):
__document_class__ = UserQuestionnairePreferenceDocument

def __init__(self, dbm, user_id, project_id, **kwargs):
def __init__(self, dbm, user_id=None, project_id=None, **kwargs):
super(UserQuestionnairePreference, self).__init__(dbm)
doc = UserQuestionnairePreferenceDocument()
doc.user_id = user_id
Expand Down

0 comments on commit 8342c65

Please sign in to comment.