def initIndexesForm(request): """ DocumentIndexForm/DocumentSearchForm initialization in case of GET returns an empty base form, in case of POST returns populated (from request) form instance. in both cases form is rendered with MDT index fields @param request: is a Django request object """ details = None search = determine_search_req(request) try: # Try to use cached MDT's details = request.session['mdts'] except KeyError: if search: session_var = 'search_docrule_id' else: session_var = 'indexing_docrule_id' # Get MDT's from CouchDB try: details = get_mdts_for_docrule(request.session[session_var]) # Store MDT's into improvised cache request.session['mdts'] = details except KeyError: pass initial_data = {} if not search: if 'document_keys_dict' in request.session.iterkeys(): initial_data = request.session['document_keys_dict'] # Selecting form depending on request type if search: form = DocumentSearchOptionsForm() else: form = DocumentIndexForm() if details and not details == 'error': # MDT's exist for ths docrule adding fields to form if search: fields = render_fields_from_docrules(details, request.POST or None, search=True) else: fields = render_fields_from_docrules(details, request.POST or None) if fields: form.setFields(fields) if request.POST: # Populating ata into form for POST data form.setData(request.POST) elif initial_data: # Populating initial data for partially proper form rendering form.populateFormSecondary(initial_data) form.validation_ok() return form
def initEditIndexesForm(request, doc, given_indexes=None): """ Edit form creating with population from existing document Inherits initIndexesForm with faking it's data to be rendered properly """ initial_indexes = None docrule_id = str(doc.get_docrule().id) POST = request.POST # TODO: cashe MDTS mdts = get_mdts_for_docrule(docrule_id) # Faking POST request to populate from with initial indexes properly if not POST: # Constructing form indexes from previous data or doc metadata if given_indexes or doc.db_info: initial_indexes = construct_edit_indexes_data(mdts, given_indexes or doc.db_info) # Converting dates into strings if relevant. for key, value in initial_indexes.iteritems(): # Metaclass based conversions to if value.__class__.__name__ == 'datetime': initial_indexes[key] = value.strftime(settings.DATE_FORMAT) request.POST = initial_indexes form = EditDocumentIndexForm() if mdts and not mdts == 'error': # MDT's exist for this docrule adding fields to form fields = render_fields_from_docrules(mdts, request.POST or None) if fields: form.setFields(fields) if not POST: form.setData(initial_indexes) # TODO: test validation working here, if relevant else: form.setData(POST) form.validation_ok() return form
def initEditIndexesForm(request, doc, given_indexes=None): """ Edit form creating with population from existing document Inherits initIndexesForm with faking it's data to be rendered properly @param request: is a Django request object @param doc: is a DMS Object() instance @param given_indexes: is a set of indexes to populate for upon initializations. e.g. instantiate form with provided data instead of empty fields. """ initial_indexes = None docrule_id = str(doc.get_docrule().id) POST = request.POST # TODO: cashe MDTS mdts = get_mdts_for_docrule(docrule_id) # Faking POST request to populate from with initial indexes properly if not POST: # Constructing form indexes from previous data or doc metadata if given_indexes or doc.db_info: initial_indexes = construct_edit_indexes_data(mdts, given_indexes or doc.db_info) # Converting dates into strings if relevant. for key, value in initial_indexes.iteritems(): # Metaclass based conversions to if value.__class__.__name__ == 'datetime': initial_indexes[key] = value.strftime(settings.DATE_FORMAT) request.POST = initial_indexes form = EditDocumentIndexForm() if mdts and not mdts == 'error': # MDT's exist for this docrule adding fields to form fields = render_fields_from_docrules(mdts, request.POST or None) if fields: form.setFields(fields) if not POST: form.setData(initial_indexes) # TODO: test validation working here, if relevant else: form.setData(POST) form.validation_ok() return form