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 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()
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)
예제 #4
0
    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