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