def indexing_details(request, step=None, template='mdtui/indexing.html'): """Indexing: Step 2 : Index Details""" # Context init context = {} document_keys = None warnings = [] errors = [] cleanup_search_session(request) docrule_id = None try: docrule_id = request.session['indexing_docrule_id'] except KeyError: warnings.append(MDTUI_ERROR_STRINGS['NO_DOCRULE']) try: document_keys = request.session["document_keys_dict"] except KeyError: pass log.debug('indexing_details view called with docrule_id: %s, document_keys: %s, warnings: %s' % (docrule_id, document_keys, warnings)) if request.POST: secondary_indexes = processDocumentIndexForm(request) if secondary_indexes: request.session["document_keys_dict"] = secondary_indexes # Checking for forbidden keys and changing view behaviour if found forbidden_keys = check_for_forbidden_new_keys_created(secondary_indexes, docrule_id, request.user) if forbidden_keys: for forbidden_key in forbidden_keys: if forbidden_key[1] == 'adminlock': errors.append(MDTUI_ERROR_STRINGS['ADMINLOCKED_KEY_ATTEMPT'] + forbidden_key[0]) elif forbidden_key[1] == 'locked': errors.append(MDTUI_ERROR_STRINGS['LOCKED_KEY_ATTEMPT'] + forbidden_key[0]) # Reinitializing form form = initIndexesForm(request) else: # Success, allocate barcode and move on if "barcode" in request.session and request.session["barcode"]: pass else: dtr = DocumentTypeRule.objects.get(pk=docrule_id) request.session["barcode"] = dtr.allocate_barcode() return HttpResponseRedirect(reverse('mdtui-index-source')) else: # Return validation with errors... form = initIndexesForm(request) else: form = initIndexesForm(request) autocomplete_list = extract_secondary_keys_from_form(form) context.update( { 'step': step, 'form': form, 'document_keys': document_keys, 'autocomplete_fields': autocomplete_list, 'warnings': warnings, 'error_warnings': errors, }) return render_to_response(template, context, context_instance=RequestContext(request))
def search_options(request, step, template='mdtui/search.html'): """Search Step 2: Search Options @param request: is a Django request object @param step: is a current step name (for template rendering) @param template: is a name of template for this view""" warnings = [] autocomplete_list = None mdt_id = None # Trying to get stuff we require OR warn user try: mdt_id = request.session['search_mdt_id'] except KeyError: pass if not mdt_id: try: request.session['searching_docrule_id'] except KeyError: warnings.append(MDTUI_ERROR_STRINGS['NO_MDTS']) # CouchDB connection Felt down warn user try: form = initIndexesForm(request) autocomplete_list = extract_secondary_keys_from_form(form) except (RequestError, AttributeError): form = DocumentSearchOptionsForm warnings.append(MDTUI_ERROR_STRINGS['NO_DB']) if request.POST: try: secondary_indexes = processDocumentIndexForm(request) except RequestError: secondary_indexes = None warnings.append(MDTUI_ERROR_STRINGS['NO_DB']) if secondary_indexes: request.session['document_search_dict'] = secondary_indexes return HttpResponseRedirect(reverse('mdtui-search-results')) context = { 'form': form, 'warnings': warnings, 'step': step, 'autocomplete_fields': autocomplete_list, } return render_to_response(template, context, context_instance=RequestContext(request))
def edit(request, code, step='edit', template='mdtui/indexing.html'): """Indexing step: Edit. Made for editing indexes of document that is indexed already. @param request: is a Django request object @param code: is a DMS Object() code for view interactions @param step: is a current step name (for template rendering) @param template: is a name of template for this view""" context = {} warnings = [] error_warnings = [] form = False processor = DocumentProcessor() autocomplete_list = None changed_indexes = None # Storing cancel (return back from edit) url try: return_url = request.session['edit_return'] except KeyError: try: return_url = request.META['HTTP_REFERER'] request.session['edit_return'] = return_url except KeyError: return_url = '/' pass pass # Only preserve indexes if returning from edit indexes confirmation step if 'HTTP_REFERER' in request.META and request.META['HTTP_REFERER'].endswith(reverse('mdtui-edit-finished')): try: changed_indexes = request.session['edit_processor_indexes'] except KeyError: pass log.debug('indexing_edit view called with return_url: %s, changed_indexes: %s' % (return_url, changed_indexes)) doc = processor.read(code, {'user': request.user, 'only_metadata': True}) if not processor.errors and not doc.marked_deleted: if not request.POST: form = initEditIndexesForm(request, doc, changed_indexes) # Setting context variables required for autocomplete docrule_id = str(doc.get_docrule().id) request.session['indexing_docrule_id'] = docrule_id request.session['edit_mdts'] = get_mdts_for_docrule(docrule_id) else: old_db_info = doc.get_db_info() secondary_indexes = processEditDocumentIndexForm(request, doc) request.session['edit_processor_indexes'] = secondary_indexes request.session['edit_index_barcode'] = code old_docs_indexes = {'description': old_db_info['description']} for index_name, index_value in old_db_info['mdt_indexes'].iteritems(): # Converting Old index dates to render according to DMS date format if index_value.__class__.__name__ == 'datetime': old_docs_indexes[index_name] = datetime.datetime.strftime(index_value, settings.DATE_FORMAT) else: old_docs_indexes[index_name] = index_value request.session['old_document_keys'] = old_docs_indexes return HttpResponseRedirect(reverse('mdtui-edit-finished')) else: for error in processor.errors: # Intercepting type Exception and using it's message or using error.__str__ if not error.__class__.__name__ == 'unicode' and 'parameter' in error.__dict__.iterkeys(): error_warnings.append(error.parameter) else: error_warnings.append(error) if doc.marked_deleted: error_warnings.append(MDTUI_ERROR_STRINGS['NO_DOC']) if form: autocomplete_list = extract_secondary_keys_from_form(form) # No form is possible when document does not exist context.update({'form': form, }) # In case of no doc type (empty document) fix type_name = None if doc.docrule: type_name = doc.get_docrule().title context.update({ 'step': step, 'doc_name': code, 'type_name': type_name, 'warnings': warnings, 'autocomplete_fields': autocomplete_list, 'edit_return': return_url, 'error_warnings': error_warnings, }) return render(request, template, context)
def indexing_details(request, step=None, template='mdtui/indexing.html'): """Indexing: Step 2 : Index Details @param request: is a Django request object @param step: is a current step name (for template rendering) @param template: is a name of template for this view""" # Context init context = {} document_keys = None warnings = [] errors = [] cleanup_search_session(request) docrule_id = None try: docrule_id = request.session['indexing_docrule_id'] except KeyError: warnings.append(MDTUI_ERROR_STRINGS['NO_DOCRULE']) try: document_keys = request.session["document_keys_dict"] except KeyError: pass log.debug( 'indexing_details view called with docrule_id: %s, document_keys: %s, warnings: %s' % (docrule_id, document_keys, warnings)) if request.POST: secondary_indexes = processDocumentIndexForm(request) if secondary_indexes: request.session["document_keys_dict"] = secondary_indexes # Checking for forbidden keys and changing view behaviour if found forbidden_keys = check_for_forbidden_new_keys_created( secondary_indexes, docrule_id, request.user) if forbidden_keys: for forbidden_key in forbidden_keys: if forbidden_key[1] == 'adminlock': errors.append( MDTUI_ERROR_STRINGS['ADMINLOCKED_KEY_ATTEMPT'] + forbidden_key[0]) elif forbidden_key[1] == 'locked': errors.append( MDTUI_ERROR_STRINGS['LOCKED_KEY_ATTEMPT'] + forbidden_key[0]) # Reinitializing form form = initIndexesForm(request) else: # Success, allocate barcode and move on if "barcode" in request.session and request.session["barcode"]: pass else: if docrule_id: dtr = DocumentTypeRule.objects.get(pk=docrule_id) request.session["barcode"] = dtr.allocate_barcode() return HttpResponseRedirect(reverse('mdtui-index-source')) else: # Return validation with errors... form = initIndexesForm(request) else: form = initIndexesForm(request) autocomplete_list = extract_secondary_keys_from_form(form) context.update({ 'step': step, 'form': form, 'document_keys': document_keys, 'autocomplete_fields': autocomplete_list, 'warnings': warnings, 'error_warnings': errors, }) return render_to_response(template, context, context_instance=RequestContext(request))
def edit(request, code, step='edit', template='mdtui/indexing.html'): """Indexing step: Edit. Made for editing indexes of document that is indexed already. @param request: is a Django request object @param code: is a DMS Object() code for view interactions @param step: is a current step name (for template rendering) @param template: is a name of template for this view""" context = {} warnings = [] error_warnings = [] form = False processor = DocumentProcessor() autocomplete_list = None changed_indexes = None # Storing cancel (return back from edit) url try: return_url = request.session['edit_return'] except KeyError: try: return_url = request.META['HTTP_REFERER'] request.session['edit_return'] = return_url except KeyError: return_url = '/' pass pass # Only preserve indexes if returning from edit indexes confirmation step if 'HTTP_REFERER' in request.META and request.META[ 'HTTP_REFERER'].endswith(reverse('mdtui-edit-finished')): try: changed_indexes = request.session['edit_processor_indexes'] except KeyError: pass log.debug( 'indexing_edit view called with return_url: %s, changed_indexes: %s' % (return_url, changed_indexes)) doc = processor.read(code, {'user': request.user, 'only_metadata': True}) if not processor.errors and not doc.marked_deleted: if not request.POST: form = initEditIndexesForm(request, doc, changed_indexes) # Setting context variables required for autocomplete docrule_id = str(doc.get_docrule().id) request.session['indexing_docrule_id'] = docrule_id request.session['edit_mdts'] = get_mdts_for_docrule(docrule_id) else: old_db_info = doc.get_db_info() secondary_indexes = processEditDocumentIndexForm(request, doc) request.session['edit_processor_indexes'] = secondary_indexes request.session['edit_index_barcode'] = code old_docs_indexes = {'description': old_db_info['description']} for index_name, index_value in old_db_info[ 'mdt_indexes'].iteritems(): # Converting Old index dates to render according to DMS date format if index_value.__class__.__name__ == 'datetime': old_docs_indexes[index_name] = datetime.datetime.strftime( index_value, settings.DATE_FORMAT) else: old_docs_indexes[index_name] = index_value request.session['old_document_keys'] = old_docs_indexes return HttpResponseRedirect(reverse('mdtui-edit-finished')) else: for error in processor.errors: # Intercepting type Exception and using it's message or using error.__str__ if not error.__class__.__name__ == 'unicode' and 'parameter' in error.__dict__.iterkeys( ): error_warnings.append(error.parameter) else: error_warnings.append(error) if doc.marked_deleted: error_warnings.append(MDTUI_ERROR_STRINGS['NO_DOC']) if form: autocomplete_list = extract_secondary_keys_from_form(form) # No form is possible when document does not exist context.update({ 'form': form, }) # In case of no doc type (empty document) fix type_name = None if doc.docrule: type_name = doc.get_docrule().title context.update({ 'step': step, 'doc_name': code, 'type_name': type_name, 'warnings': warnings, 'autocomplete_fields': autocomplete_list, 'edit_return': return_url, 'error_warnings': error_warnings, }) return render(request, template, context)