def generate_all_document(self, field_values):
        all_templates = self.template_service.get_templates_by_company(self.company)
        for template in all_templates:
            content = template.content
            upload = template.upload
            if upload:
                # Template with upload mode
                content = ''
            elif content:
                # Template with content mode
                content = self.template_service.populate_content_with_field_values(content, field_values)
            else:
                # We cannot find the proper template, skip
                continue

            doc_name = "{} for employee".format(template.name)

            # Create a new document based on type
            doc = Document(company_id=self.company.id,
                           user_id=self.user.id,
                           name=doc_name,
                           content=content,
                           upload=upload,
                           signature=None)
            doc.save()
Example #2
0
def document_store():
    form = DocumentCreateForm(request.form)
    if form.validate():
        document = Document()
        document.create(data=form.data)
        return Success(message="操作成功!")
    return Fail(message=form.first_error)
    def post(self, request, pk, format=None):
        company_id = pk
        name = request.DATA['document_name']
        template_id = request.DATA['template_id']
        signature = None
        content = ''
        template = self._get_template(template_id)
        upload = template.upload

        if (not name or not upload):
            return Response(status.HTTP_400_BAD_REQUEST)

        result_data = []

        employees = CompanyUser.objects.filter(company=company_id, company_user_type=USER_TYPE_EMPLOYEE)
        for employee in employees:
            d = Document(company_id=company_id,
                         user_id=employee.user.id,
                         name=name,
                         signature=signature,
                         content=content,
                         upload_id=upload.id)
            d.save()
            serializer = DocumentSerializer(d)
            result_data.append(serializer.data)

        return Response(result_data, status=status.HTTP_201_CREATED)
 def process_csv(self): 
     uploads = self.components.upload.get_uploads()
     csv_file =  uploads['file'][0] # only one file should be uploaded
     if csv_file.content_type in ['text/csv', 'application/vnd.ms-excel']:
         Document.import_document(csv_file)
         return_value = "File Uploaded Successfully.  Check your Task Queue inthe Google App Engine Control Panel"
     else:
         print csv_file.content_type
         return_value = 'The file provided is not of type ''text/csv'' or ''application/vnd.ms-excel'''
     return return_value
Example #5
0
def test_get_document_data(client: CustomFlaskClient, auth_header: any):
    document = (DocumentModel.select().where(
        DocumentModel.deleted_at.is_null()).order_by(
            fn.Random()).limit(1).get())
    db_wrapper.database.close()
    document_id = document.id

    response = client.get(f'/api/documents/{document_id}',
                          json={},
                          headers=auth_header())
    json_response = response.get_json()
    json_data = json_response.get('data')

    parse_url = urlparse(json_data.get('url'))

    assert 200 == response.status_code
    assert document.created_by.id == json_data.get('created_by').get('id')
    assert document.name == json_data.get('name')
    assert document.mime_type == json_data.get('mime_type')
    assert document.size == json_data.get('size')
    assert parse_url.scheme and parse_url.netloc
    assert document.created_at.strftime('%Y-%m-%d %H:%M:%S') == json_data.get(
        'created_at')
    assert document.updated_at.strftime('%Y-%m-%d %H:%M:%S') == json_data.get(
        'updated_at')
    assert document.deleted_at == json_data.get('deleted_at')
Example #6
0
def test_update_document(client: CustomFlaskClient, auth_header: any):
    pdf_file = '%s/example.pdf' % current_app.config.get('MOCKUP_DIRECTORY')
    document = (DocumentModel.select().where(
        DocumentModel.deleted_at.is_null()).order_by(
            fn.Random()).limit(1).get())
    db_wrapper.database.close()
    document_id = document.id

    data = {
        'document': open(pdf_file, 'rb'),
    }

    headers = auth_header()
    headers['Content-Type'] = 'multipart/form-data'

    response = client.put(f'/api/documents/{document_id}',
                          data=data,
                          headers=headers)
    json_response = response.get_json()
    json_data = json_response.get('data')

    parse_url = urlparse(json_data.get('url'))

    assert 200 == response.status_code
    assert isinstance(json_data.get('created_by').get('id'), int)
    assert pdf_file == json_data.get('name')
    assert document.mime_type == json_data.get('mime_type')
    assert FileStorage.get_filesize(pdf_file) == json_data.get('size')
    assert parse_url.scheme and parse_url.netloc
    assert document.created_at.strftime('%Y-%m-%d %H:%M:%S') == json_data.get(
        'created_at')
    assert json_data.get('updated_at') > json_data.get('created_at')
    assert json_data.get('deleted_at') is None
Example #7
0
def document_edit(id):
    document = Document.get_by_id(id)
    columns = Column.get_all_for_select(is_group=True)
    attribute = document.attribute.split(',')
    return render_template('admin/document/edit.html',
                           document=document,
                           columns=columns,
                           attribute=attribute)
    def extract(self, infile):
        """Extract ``Document``\s from a ``DocumentFile``. This method uses the
        structure_file given in the constructor for rules to identify
        ``Document``\s.

        :param str infile: The path to the file to extract.
        :return list of DocumentFiles: The DocumentFile that contains the
            extracted documents.
        """
        documents = []

        # Check for unescaped special characters (tentative)
        doc = None

        try:
            doc = etree.parse(infile)
        except(etree.XMLSyntaxError) as e:
            self.project_logger.error("XML Error: %s; skipping file", str(e))
            self.project_logger.info(infile)
            return documents

        extracted_units = self.extract_unit_information(self.document_structure,
            doc)
        #TODO: this doc_num isn't very helpful
        doc_num = 0

        try:
            document_file = DocumentFile.query.filter(
                DocumentFile.path == infile
            ).one()
        except NoResultFound:
            self.project_logger.warning("Could not find file with path %s, making "
                "new one", infile)
            document_file = DocumentFile()
        except MultipleResultsFound:
            self.project_logger.error("Found multiple files with path %s, "
                "skipping.", infile)
            return DocumentFile()

        for extracted_unit in extracted_units:
            document = Document()
            document.properties = extracted_unit.properties
            document.sentences = extracted_unit.sentences
            document.title = _get_title(document.properties)
            document.children = extracted_unit.children
            document.number = doc_num

            assign_sentences(document)
            document_file.documents.append(document)
            document.save(False)

        db.session.commit()

        return document_file
Example #9
0
    def __init__(self):
        loader = Loader()
        document = Document(loader, "post", ["title", "content"])

        fields = {"index": ["title", "content"], "show": ["_id", "title"]}
        searcher = Searcher(document, fields)
        searcher.fit()
        while True:
            query = input("Enter your query: ")
            searcher.search(query)
Example #10
0
def document_update(id):
    edit_one_field = request.form.get('edit_one_field', None)
    if not edit_one_field:
        form = DocumentEditForm(formdata=request.form, id=id)
    else:
        form = DocumentEditOneKeyForm(formdata=request.form, id=id)
    if not form.validate():
        return Fail(message=form.first_error)
    document = Document.get_by_id(id=id)
    document.update(form.data, edit_one_field)

    return Success(message="操作成功!")
def documents(request):
    s = None
    if request.DATA['signature']:
        s = Signature(signature=request.DATA['signature'],
                      user_id=request.DATA['user'])
        s.save()


    if 'template' not in request.DATA:
        d = Document(company_id=request.DATA['company'],
                     user_id=request.DATA['user'],
                     name=request.DATA['document']['name'],
                     signature=s,
                     content=request.DATA['document']['content'],
                     upload_id=request.DATA['document']['upload']
                     )
    else:
        d = Document(company_id=request.DATA['company'],
                     user_id=request.DATA['user'],
                     name=request.DATA['document']['name'],
                     content=_generate_content(request.DATA['template'],
                                               request.DATA['document']['fields']),
                     upload_id=request.DATA['document']['upload'],
                     signature=s
                     )

    d.save()
    serializer = DocumentSerializer(d)
    return Response(serializer.data)
Example #12
0
def test_get_document_file(client: CustomFlaskClient, auth_header: any):
    document = (DocumentModel.select().where(
        DocumentModel.deleted_at.is_null()).order_by(
            fn.Random()).limit(1).get())
    document_id = document.id
    db_wrapper.database.close()

    headers = auth_header()
    headers['Content-Type'] = 'application/octet-stream'

    response = client.get(f'/api/documents/{document_id}', headers=headers)

    assert 200 == response.status_code
    assert isinstance(response.get_data(), bytes)
Example #13
0
def test_delete_document(client: CustomFlaskClient, auth_header: any):
    document_id = (DocumentModel.select(DocumentModel.id).where(
        DocumentModel.deleted_at.is_null()).order_by(
            fn.Random()).limit(1).get().id)
    db_wrapper.database.close()

    response = client.delete('/api/documents/%s' % document_id,
                             json={},
                             headers=auth_header())
    json_response = response.get_json()
    json_data = json_response.get('data')

    assert 200 == response.status_code
    assert document_id == json_data.get('id')
    assert json_data.get('deleted_at') is not None
    assert json_data.get('deleted_at') >= json_data.get('updated_at')
Example #14
0
def test_team_dataroom_roles(db: Session, data: Data, oso: Oso):
    # make sure that a user that does not have direct
    # room roles can still manage room because of a team
    # role
    user_roles_in_room_1: List = oso_roles.get_user_roles(
        db, data.member_team_1, Dataroom, data.room_1.id)

    # user does not have direct access to the room
    count_of_roles = len(user_roles_in_room_1)
    assert count_of_roles == 0

    # but still gets it via his team role (which is a members role)
    assert oso.is_allowed(data.member_team_1, "READ", data.room_1) is True
    assert oso.is_allowed(data.member_team_1, "LIST_DOCUMENTS",
                          data.room_1) is True
    assert oso.is_allowed(data.member_team_1, "DELETE", data.room_1) is False
    assert oso.is_allowed(data.member_team_1, "UPDATE", data.room_1) is False
    assert oso.is_allowed(data.member_team_1, "INVITE_GUESTS",
                          data.room_1) is False

    # does not have access to other rooms
    assert oso.is_allowed(data.member_team_1, "READ", data.room_2) is False
    assert oso.is_allowed(data.member_team_1, "LIST_DOCUMENTS",
                          data.room_2) is False

    # is allowed to create his own documents in a room
    new_document_team_member_1 = Document(
        name="New Doc Team Member 1",
        description="Test",
        file_name="new_doc_team_member_1",
        extension="txt",
        md5_sum=UUID("87a6909ab71ec463f013325dbf9f3543"),
        mime_type="text/plain",
        size=50,
        creator=data.member_team_1,
        dataroom=data.room_1,
    )

    assert (oso.is_allowed(data.member_team_1, "CREATE",
                           new_document_team_member_1) is True)
Example #15
0
def test_search_document(client: CustomFlaskClient, auth_header: any):
    document_name = (DocumentModel.select(DocumentModel.name).where(
        DocumentModel.deleted_at.is_null()).order_by(
            fn.Random()).limit(1).get().name)
    db_wrapper.database.close()

    json_body = {
        'search': [
            {
                'field_name': 'name',
                'field_operator': 'eq',
                'field_value': document_name,
            },
        ],
        'order': [
            {
                'field_name': 'name',
                'sorting': 'desc',
            },
        ],
    }

    response = client.post('/api/documents/search',
                           json=json_body,
                           headers=auth_header())
    json_response = response.get_json()

    document_data = json_response.get('data')
    records_total = json_response.get('records_total')
    records_filtered = json_response.get('records_filtered')

    assert 200 == response.status_code
    assert isinstance(document_data, list)
    assert records_total > 0
    assert 0 < records_filtered <= records_total
    assert document_data[0].get('name').find(document_name) != -1
Example #16
0
def test_dataroom_roles(db: Session, data: Data, oso: Oso):
    # Guest can access the documents for the room in which he is guest
    assert oso.is_allowed(data.guest_read_user_room_1, "READ",
                          data.room_1) is True
    assert (oso.is_allowed(data.guest_read_user_room_1, "LIST_DOCUMENTS",
                           data.room_1) is True)
    assert (oso.is_allowed(data.guest_read_user_room_1, "READ",
                           data.document_room_1) is True)

    # Guest cannot see other datarooms
    assert (oso.is_allowed(data.guest_read_user_room_1, "LIST_ROOMS",
                           data.first_org) is False)
    assert oso.is_allowed(data.guest_read_user_room_1, "READ",
                          data.room_2) is False
    assert (oso.is_allowed(data.guest_read_user_room_1, "READ",
                           data.document_room_2) is False)

    new_document_guest_1 = Document(
        name="Test Document",
        description="Test",
        file_name="hallo",
        extension="txt",
        md5_sum=UUID("87a6909ab71ec463f013325dbf9f3541"),
        mime_type="text/plain",
        size=50,
        creator=data.guest_read_user_room_1,
        dataroom=data.room_1,
    )

    new_document_guest_2 = Document(
        name="New Doc Guest 2",
        description="Test",
        file_name="new_doc_guest_2",
        extension="txt",
        md5_sum=UUID("87a6909ab71ec463f013325dbf9f3541"),
        mime_type="text/plain",
        size=50,
        creator=data.guest_write_user_room_1,
        dataroom=data.room_1,
    )

    # Only guest with write access can create a new document
    assert (oso.is_allowed(data.guest_write_user_room_1, "CREATE",
                           new_document_guest_2) is True)
    assert (oso.is_allowed(data.guest_read_user_room_1, "CREATE",
                           new_document_guest_1) is False)

    # add the second new document to db so that we can test edits
    db.add(new_document_guest_2)
    db.commit()
    db.refresh(new_document_guest_2)

    assert (oso.is_allowed(data.guest_write_user_room_1, "UPDATE",
                           new_document_guest_2) is True)
    assert (oso.is_allowed(data.guest_write_user_room_1, "DELETE",
                           new_document_guest_2) is True)
    assert (oso.is_allowed(data.guest_write_user_room_1, "UPDATE",
                           data.document_room_1) is False)
    assert (oso.is_allowed(data.guest_write_user_room_1, "DELETE",
                           data.document_room_1) is False)
    assert (oso.is_allowed(data.admin_user_room_1, "UPDATE",
                           data.document_room_1) is True)
    assert (oso.is_allowed(data.admin_user_room_1, "DELETE",
                           data.document_room_1) is True)

    # Only OWNERS can delete a dataroom
    assert oso.is_allowed(data.member_user_org_1, "DELETE",
                          data.room_1) is True
    assert oso.is_allowed(data.guest_read_user_room_1, "DELETE",
                          data.room_1) is False
    assert oso.is_allowed(data.guest_write_user_room_1, "DELETE",
                          data.room_1) is False

    # Admin are allowed to invite_guests
    assert oso.is_allowed(data.admin_user_room_1, "INVITE_GUESTS",
                          data.room_1) is True
    assert oso.is_allowed(data.admin_user_room_1, "INVITE_GUESTS",
                          data.room_2) is False

    new_document_member_1 = Document(
        name="New Doc Member 1",
        description="Test",
        file_name="new_doc_member_1",
        extension="txt",
        md5_sum=UUID("87a6909ab71ec463f013325dbf9f3543"),
        mime_type="text/plain",
        size=50,
        creator=data.member_user_room_1,
        dataroom=data.room_1,
    )

    # Members can create documents and edit and delete their own
    assert (oso.is_allowed(data.member_user_room_1, "CREATE",
                           new_document_member_1) is True)

    db.add(new_document_member_1)
    db.commit()
    db.refresh(new_document_member_1)

    assert (oso.is_allowed(data.member_user_room_1, "UPDATE",
                           new_document_member_1) is True)
    assert (oso.is_allowed(data.member_user_room_1, "DELETE",
                           new_document_member_1) is True)

    assert (oso.is_allowed(data.member_user_room_1, "UPDATE",
                           new_document_guest_2) is False)
    assert (oso.is_allowed(data.member_user_room_1, "DELETE",
                           new_document_guest_2) is False)
Example #17
0
def document_lists():
    total, result = Document.get_limit_all()
    return AjaxResponse(data=result, count=total)
Example #18
0
def document_delete(ids):
    ids = ids.split('-')
    documentes = Document.get_all_in_ids(ids=ids)
    for document in documentes:
        document.destroy()
    return Success(message="成功删除")