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)
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