def save_doc(docdef, baseform, data, user, eid=None): """ Saves doc to given eid, using doc from index as a base. If eid is not given, lets elastic search create one. """ doctype = docdef['meta']['document_type'] original_meta_field = None if eid: basedata = get_doc_from_index( settings.INDEX_NAME, doctype, eid) if eid: authorization = authorize(user, basedata['_source']) if not authorization: raise PermissionDenied("ei oikeuksia") if basedata: orig = basedata['_source'] original_meta_field = orig.get('meta') form = baseform(data) else: form = baseform(data) # This data is used by kir.form_elements.validators.test_cyclic_hierarchy form.document_id = eid if data and form.validate(): form_data = form.data if doctype == 'organisation': form_data['default_attachment'] = get_default_attachment(form_data.get('attachments')) #print(form_data['default_attachment']) # validation destroys fields not present in the # form, so metadata has to be passed separately msg = save(form_data, docdef['meta'], user, eid, GlobalForm(data).data, preserved_metadata = original_meta_field) if msg['ok']: eid = msg['_id'] saved = True else: saved = False else: saved = False if form.errors: errors = print_form_errors(parse_form(form)) else: errors = None return {"errors" : errors, "saved" : saved, "doc_id" : eid, "form" : form, 'formdata' : data}
def open_doc(docdef, baseform, user, eid): """ Creates form for given doc id from database, form being otherwise empty. """ basedata = get_doc_from_index( settings.INDEX_NAME, docdef['meta']['document_type'], eid) if eid: authorization = authorize(user, basedata['_source']) if not authorization: raise PermissionDenied("ei oikeuksia") if basedata: form = baseform(**basedata['_source']) return {"form" : form, "doc_id" : eid, 'objdata' : basedata['_source']} else: return None