from docxtpl import DocxTemplate
from yaml import load

doc = DocxTemplate('syllabus-template.docx')
context = load(open('syllabus.yaml'))
file_name = '-'.join('{} {}'.format(context['code'], context['title']).split())
doc.render(context)
doc.save('{}.docx'.format(file_name))
示例#2
0
    """ Return absolute path based on the current script. """
    if not path: return path
    return os.path.join(os.path.dirname(sys.argv[0]), path)


# ----------------------------------------------------------------------------
# Main code
# ----------------------------------------------------------------------------

if __name__ == '__main__':
    template_path = get_full_path(r'template.docx')
    generated_path = get_full_path(r'generated.docx')
    context_path = get_full_path(r'inject.json')

    # Open document
    doc = DocxTemplate(template_path)

    # Read context
    replacements = read_json(context_path)

    # Replace variable
    context = copy.copy(replacements['variables'])

    # Replace images
    for image, data in replacements['images'].items():
        context[image] = InlineImage(doc, data[0], width=Mm(data[1]))

    # Replace URLs
    for url, data in replacements['urls'].items():
        rt = RichText()
        rt.add(data[0], url_id=doc.build_url_id(data[1]))
示例#3
0
# from jinja2 import Environment, FileSystemLoader

################### example1 ############################
# file_loader = jinja2.FileSystemLoader('templates')

# env = jinja2.Environment(loader=file_loader)

# template = env.get_template('hello_world.txt')

# content = {'name': 'Yoni', 'lastname': 'gg'}
# output = template.render(data=content)
# print(output)

################## example 2 #############################

doc = DocxTemplate("Fishman_Daily_Check_FORMAT.docx")
# Where the magic happens

rt = RichText()

# rt.add("\u2713", color='#008000')
rt.add("\u2717", color='#FF0000')
context = {
    "current_date": "01/01/20",
    "DC2008": rt,
    "MEGA_PDC": rt,
    "Newdc": rt,
    "Cluster": rt,
    "ESXi01": rt,
    "ESXi02": rt,
    "ESXi03": rt,
示例#4
0
文件: lab3.py 项目: KindOfHeaven/mdc
                 places=2,
                 int_units=((u'рубль', u'рубля', u'рублей'), 'm'),
                 exp_units=((u'копейка', u'копейки', u'копеек'), 'f')):
    value = decimal.Decimal(value)
    q = decimal.Decimal(10)**-places

    integral, exp = str(value.quantize(q)).split('.')
    return u'{} {}'.format(num2text(int(integral), int_units),
                           num2text(int(exp), exp_units))


f = open('data.txt', 'r')
data = f.readlines()
f.close()

doc = DocxTemplate("draft.docx")

context = {
    'bank':
    'АО "Стоун банк" Г. МОСКВА',
    'BIK':
    '044525700',
    'N1':
    '30101810200000000700',
    'N2':
    '40702810900000002453',
    'INN':
    '7722737766',
    'KPP':
    '772201001',
    'dest':
# -*- coding: utf-8 -*-
'''
Created : 2015-03-12

@author: Eric Lapouyade
'''

from docxtpl import DocxTemplate
from docx.shared import Inches

tpl = DocxTemplate('templates/subdoc_tpl.docx')

sd = tpl.new_subdoc()
p = sd.add_paragraph('This is a sub-document inserted into a bigger one')
p = sd.add_paragraph('It has been ')
p.add_run('dynamically').style = 'dynamic'
p.add_run(' generated with python by using ')
p.add_run('python-docx').italic = True
p.add_run(' library')

sd.add_heading('Heading, level 1', level=1)
sd.add_paragraph('This is an Intense quote', style='IntenseQuote')

sd.add_paragraph('A picture :')
sd.add_picture('templates/python_logo.png', width=Inches(1.25))

sd.add_paragraph('A Table :')
table = sd.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
示例#6
0
文件: views.py 项目: zzoneee/web1
    def post(self, request, *args, **kwargs):
        try:
            try:
                payload = JwtQueryParamAuthentication.authenticate(
                    self, request)[0]
            except Exception as e:
                return Response({'status': 403, 'msg': '未登录', 'err': e.args})

            form = request.data.get('form')
            # form = {
            #     'group_id': '', # 团队ID
            #     'experiment_id': '', # 实验ID
            #     'exDate': '', # 实验日期 格式为2021-4-1
            #     'exPurpose': '', # 实验目的
            #     'exSteps': '', # 实验步骤
            #     'exResult': '', # 实验结果
            #     'systemScore': '', # 系统评分
            #     'exExperience': '', # 实验心得
            # }
            # print(form['time'])
            groupName = Group.objects.filter(id=form['group_id']).first().name
            exName = experiment.objects.filter(
                id=form['experiment_id']).first().name
            groupNumberMsg = ''
            i = 1
            for item in Student.objects.filter(group_id=form['group_id']):
                if i != 1:
                    groupNumberMsg += '\n'
                role = item.role
                if item.role == None or item.role == '':
                    role = '无'
                groupNumberMsg += '队员' + str(
                    i
                ) + ':' + '姓名:' + item.name + ' 学院:' + item.college + ' 班级:' + item.class_name + ' 学号:' + item.stu_num + ' 承担角色:' + role
                i += 1

            # 重复提交的实验报告时,覆盖之前的实验报告
            report = Report.objects.filter(
                Q(experiment_id=form['experiment_id'])
                & Q(owner_id=form['group_id'])).first()
            if report:
                id = report.id
                base_dir = os.path.dirname(
                    os.path.dirname(os.path.abspath(__file__)))  # 项目根目录
                length = len(base_dir)
                for i in range(length - 2, 0, -1):
                    if base_dir[i] == '\\':
                        base_dir = base_dir[0:i]
                        break
                file_path = os.path.join(base_dir, 'static', 'report',
                                         report.url)  # 下载文件的绝对路径
                if os.path.isfile(file_path):  # 判断下载文件是否存在
                    os.remove(file_path)
                report.delete()

            # 创建实验报告
            # form['exDate']
            # length = len(form['exDate'])
            year = 0
            month = 0
            day = 0
            ff = 0
            for item in form['exDate']:
                if item == '-':
                    ff += 1
                else:
                    if ff == 0:
                        year *= 10
                        year += int(item)
                    elif ff == 1:
                        month *= 10
                        month += int(item)
                    elif ff == 2:
                        day *= 10
                        day += int(item)
            # print(year,month,day)
            data_dic = {
                'exName': exName,
                'groupName': groupName,
                'groupNumberMsg': groupNumberMsg,
                'exPurpose': form['exPurpose'],
                'exSteps': form['exSteps'],
                'exResult': form['exResult'],
                'systemScore': form['systemScore'],
                'teacherScore': '未评分',
                'teamEvaluationScore': '未评分',
                'exExperience': form['exExperience'],
                'year': year,
                'month': month,
                'day': day,
            }
            docxName = 'ex_' + form['experiment_id'] + '_' + form[
                'group_id'] + '.docx'

            base_dir = os.path.dirname(
                os.path.dirname(os.path.abspath(__file__)))  # 项目根目录
            length = len(base_dir)
            for i in range(length - 2, 0, -1):
                if base_dir[i] == '\\':
                    base_dir = base_dir[0:i]
                    break
            file_path = os.path.join(base_dir, 'static', 'report',
                                     'tpl.docx')  # 下载文件的绝对路径
            file_path2 = os.path.join(base_dir, 'static', 'report',
                                      docxName)  # 下载文件的绝对路径
            doc = DocxTemplate(file_path)  #加载模板文件
            doc.render(data_dic)  #填充数据
            doc.save(file_path2)  #保存目标文件

            # print(type(form['group_id']))
            report = Report(id=str(form['group_id']) + '_' +
                            str(form['experiment_id']),
                            system_score=form['systemScore'],
                            teacher_score=-1,
                            url=docxName,
                            owner_id=form['group_id'],
                            experiment_id=form['experiment_id'])
            report.save()

            experimentData1 = experimentData(
                report_id=report.id,
                exPurpose=form['exPurpose'],
                systemScore=form['systemScore'],
                exTime=form['exDate'],
                experiment_id=form['experiment_id'],
                group_id=form['group_id'],
                exExperience=form['exExperience'],
                exResult=form['exResult'],
                exSteps=form['exSteps'])
            experimentData1.save()

            # exExperience = request.data.get('exExperience')
            # data_dic = {
            #     'exName': '无人机集群编队三维模拟实验',
            #     'groupName': 'group2',
            #     'groupNumberMsg': '张三/计算机171/2020003/项目统筹\n王五/计算机174/2020012/算法研究',
            #     'exPurpose': '按照要求完成无人机编队及灯光设计。',
            #     'exSteps': '1.H型编队设计;\n2.H型变换Z型路线设计;\n3.夜间灯光设计;\n4.N型变换Z型。',
            #     'exResult': exResult,
            #     'systemScore': '87',
            #     'teacherScore': '未评分',
            #     'teamEvaluationScore': '未评分',
            #     'exExperience': exExperience,
            #     'year': '2021',
            #     'month': '3',
            #     'day': '10',
            # }
            # base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 项目根目录
            # length = len(base_dir)
            # for i in range(length - 2,0,-1):
            #     if base_dir[i] == '\\':
            #         base_dir = base_dir[0:i]
            #         break
            # file_path = os.path.join(base_dir, 'static','report', 'tpl.docx')  # 下载文件的绝对路径
            # file_path2 = os.path.join(base_dir, 'static','report', '2_group2_8.docx')  # 下载文件的绝对路径
            # doc = DocxTemplate(file_path) #加载模板文件
            # doc.render(data_dic) #填充数据
            # doc.save(file_path2) #保存目标文件

            # report = Report(id='8',system_score=87,teacher_score=-1,url='2_group2_8.docx',owner_id=2,experiment_id=2)
            # report.save()

            return Response({
                "status": 200,
                "msg": '返回成功',
            })

        except Exception as e:
            return Response({'status': 204, 'msg': '遇到了异常错误', 'err': e.args})
示例#7
0
from docxtpl import DocxTemplate
from datetime import datetime
from num2t4ru import num2text
import math
expansion = 'docx'
filename = "template"
input_file = f"{filename}.{expansion}"
doc = DocxTemplate(input_file)
nds = 20
sum = 532000.80
round_sum = '{0:,}'.format(int(sum)).replace(',', ' ')
sum_kop = (math.floor(sum * 100) % 100)
if sum_kop == 0:
    sum_kop = str(sum_kop) + '0'
sum_nds = round(sum * nds / 100 / (1 + nds / 100), 2)
sum_nds_kop = (math.floor(sum_nds * 100) % 100)
if sum_nds_kop == 0:
    sum_nds_kop = str(sum_nds_kop) + '0'
male_units = ((u'рубль', u'рубля', u'рублей'), 'm')
female_units = ((u'копейка', u'копейки', u'копеек'), 'f')
context = {
    'ikz': "212621500152762150100100480000000244",
    'work': "сантехнические и отделочные работы в кабинетах 3-го этажа",
    'work_name': "Сантехнические и отделочные работы в кабинетах 3-го этажа",
    'company_work': "Общество с ограниченной ответственностью «РПК СТРОЙ»",
    'company_work_schief':
    "Генерального директора Кошелевой Светланы Евгеньевны",
    'na_osnovanii': "Приказа №2 от 11.04.2019 г. с правом первой подписи",
    'company_work_schief_sm': "С.Е. Кошелева",
    'summ':
    f"{round_sum} ({num2text(sum, male_units).rsplit(' ', 1)[0]}) {num2text(sum, male_units).rsplit(' ', 1)[-1]} {sum_kop} {num2text(int(sum_kop), female_units).rsplit(' ', 1)[-1]}",
示例#8
0
    budgetary_responsibility = document.tables[0].rows[8].cells[3].text

    job_type = document.tables[0].rows[2].cells[1].text

    location = document.tables[0].rows[2].cells[3].text

    supervises = document.tables[0].rows[5].cells[3].text

    internally_relates_with = document.tables[0].rows[7].cells[1].text

    externally_relates_with = document.tables[0].rows[7].cells[3].text

    education_and_requirements = document.tables[0].rows[12].cells[
        0].text.strip().split('\n')

    new_doc = DocxTemplate("template.docx")
    context = {
        'Job_title': Job_title,
        'reports_to': reports_to,
        'duties_and_responsiblities': duties_and_responsiblities,
        'education_and_requirements': education_and_requirements,
        'job_purpose': job_purpose,
        'budgetary_responsibility': budgetary_responsibility,
        'externally_relates_with': externally_relates_with,
        'internally_relates_with': internally_relates_with,
        'supervises': supervises
    }

    new_doc.render(context)
    new_doc.save('new_JDS/new_{}'.format(file))
示例#9
0
from docxtpl import DocxTemplate

doc = DocxTemplate(
    "C:/Users/furag/OneDrive/Рабочий стол/Python/Шаблоны/РЦК Деппром для прокуратуры11276-1-3.docx"
)
context = {
    'T1': "World company",
    'T2': "World company",
    'T3': "World company",
    'T4': "World company",
    'T5': "World company",
    'T6': "World company",
    'T7': "World company",
    'T8': "World company",
    'T9': "World company",
    'T10': "World company",
    'T11': "World company",
    'T12': "World company",
    'T13': "World company",
    'T14': "World company",
    'T15': "World company",
    'T16': "World company",
    'T17': "World company",
}

doc.render(context)
doc.save(
    "C:/Users/furag/OneDrive/Рабочий стол/Python/Документы/generated_doc.docx")
示例#10
0
from docxtpl import DocxTemplate

tpl = DocxTemplate('test_files/dynamic_table_tpl.docx')

context = {
    'col_labels': ['fruit', 'vegetable', 'stone', 'thing'],
    'tbl_contents': [
        {
            'label': 'yellow',
            'cols': ['banana', 'capsicum', 'pyrite', 'taxi']
        },
        {
            'label': 'red',
            'cols': ['apple', 'tomato', 'cinnabar', 'doubledecker']
        },
        {
            'label': 'green',
            'cols': ['guava', 'cucumber', 'aventurine', 'card']
        },
    ]
}

tpl.render(context)
tpl.save('test_files/dynamic_table.docx')
示例#11
0
文件: test.py 项目: victorChen201/tjh
# -*- coding: utf-8 -*-
import docx
from docxtpl import DocxTemplate
from docxtpl import Document
from docx.shared import Inches

tpl = DocxTemplate('test.docx')
import re
import json
import collections

sd = tpl.new_subdoc()
sd.add_paragraph('Drug Table :')
rows = 3
cols = 4
table = sd.add_table(rows=rows, cols=cols, style=None)

# header
cells = table.rows[0].cells
cells[0].text = "Gene"
cells[1].text = "Drug"
cells[2].text = "Rank"
cells[3].text = "Description"

table.cell(1, 0).text = "ALK"
table.cell(1, 1).text = "GENE1"
table.cell(1, 2).text = "GENE2"
table.cell(1, 3).text = "haha"
#
# #https://python-docx.readthedocs.io/en/latest/api/table.html#docx.table.Table.style
# #merge
# -*- coding: utf-8 -*-
'''
Created : 2015-03-26

@author: Eric Lapouyade
'''

from docxtpl import DocxTemplate, RichText

tpl = DocxTemplate('templates/richtext_and_if_tpl.docx')

context = {'foobar': RichText('Foobar!', color='ff0000')}

tpl.render(context)
tpl.save('output/richtext_and_if.docx')
示例#13
0
# -*- coding: utf-8 -*-
'''
Created : 2015-03-12

@author: Eric Lapouyade
'''

from docxtpl import DocxTemplate

tpl=DocxTemplate('test_files/header_footer_tpl.docx')

sd = tpl.new_subdoc()
p = sd.add_paragraph('This is a sub-document to check it does not break header and footer')

context = {
    'title' : 'Header and footer test',
    'company_name' : 'The World Wide company',
    'date' : '2016-03-17',
    'mysubdoc' : sd,
}

tpl.render(context)
tpl.save('test_files/header_footer.docx')
# -*- coding: utf-8 -*-
'''
Created : 2021-12-20

@author: Eric Lapouyade
'''

from docxtpl import DocxTemplate

tpl = DocxTemplate('templates/multi_rendering_tpl.docx')

documents_data = [
    {
        'dest_file': 'multi_render1.docx',
        'context': {
            'title': 'Title ONE',
            'body': 'This is the body for first document'
        }
    },
    {
        'dest_file': 'multi_render2.docx',
        'context': {
            'title': 'Title TWO',
            'body': 'This is the body for second document'
        }
    },
    {
        'dest_file': 'multi_render3.docx',
        'context': {
            'title': 'Title THREE',
            'body': 'This is the body for third document'
# -*- coding: utf-8 -*-
'''
Created : 2017-09-03

@author: Eric Lapouyade
'''

from docxtpl import DocxTemplate

DEST_FILE = 'output/header_footer_image.docx'

tpl = DocxTemplate('templates/header_footer_image_tpl.docx')

context = {
    'mycompany': 'The World Wide company',
}
tpl.replace_media('templates/dummy_pic_for_header.png', 'templates/python.png')
tpl.render(context)
tpl.save(DEST_FILE)
示例#16
0
文件: dodger2.py 项目: t0r1n88/Dodger
from docxtpl import DocxTemplate
import csv
from docxcompose.composer import Composer
from docx import Document as Document_compose
import os

# Считываем csv файл, не забывая что екселввский csv разделен на самомо деле не запятыми а точкой с запятой
reader = csv.DictReader(open('resources/data.csv'), delimiter=';')
# Конвертируем объект reader в список словарей
data = list(reader)

# Создаем в цикле документы
for row in data:
    doc = DocxTemplate('resources/template.docx')
    number = ''
    if len(row['number']) == 2:
        number = '000' + row['number']
    elif len(row['number']) == 3:
        number = '00' + row['number']
    elif len(row['number']) == 4:
        number = '0' + row['number']
    else:
        number = row['number']
    context = {
        'lastname': row['lastname'],
        'firstname': row['firstname'],
        'number': number,
        'profession': row['profession'],
        'date_expiry': row['date_expiry'],
        'date_issue': row['date_issue'],
        'qualification': row['qualification'],
示例#17
0
    def createPDF(self, is_fourniss=False, filedir=None, tpl_path=None):

        self.hide()

        base_tpl_path = getFromConfig('path', 'templates_contract')
        words_path = getFromConfig('path', 'words_contract')

        for i in range(0, self.ui.layout_langues.count()):
            widget = self.ui.layout_langues.itemAt(i).widget()
            if widget != 0 and isinstance(widget, langueRB):
                if widget.isChecked():
                    langue_data = widget.data

        if tpl_path is None:
            filters = "MS Word Documents (*" + langue_data["code"] + ".docx)"
            #            selected_filter = "MS Word Documents (*"+langue_data["code"]+".docx)"
            options = QtGui.QFileDialog.DontResolveSymlinks
            fileDialog = QtGui.QFileDialog(
                self, "Selectionnez un modèle de contrat")
            fileDialog.setFilter(filters)
            fileDialog.setOptions(options)
            fileDialog.setDirectory(base_tpl_path)
            tpl_path = fileDialog.getOpenFileName()[0]
            #            tpl_path = QtGui.QFileDialog.getOpenFileName(self, "Selectionnez un template", base_tpl_path, filters, selected_filter, options)[0]
            #            tpl_path = fileDialog.getOpenFileName(self, "Selectionnez un template", dir=base_tpl_path, filter = filters, selected_filter, options)[0]
            if tpl_path is None or tpl_path == "":
                return

        filename = self.ctr.n_contrat

        #################################################
        ##             NUMERO de CONTRAT             ##
        #################################################
        n_ctr = self.ctr.n_contrat

        #################################################
        ##               DATE CONTRAT                  ##
        #################################################
        date_ctr = self.ctr.date_contrat

        #################################################
        ##             VILLE DE LVR/CHARG              ##
        #################################################

        ville = self.ctr.getVilleCible()
        if len(ville) < 1:
            ville = "<VILLE>"

        #################################################
        ##             ADRESSE  FACTURATION            ##
        #################################################
        if is_fourniss is True:
            adr_fact = self.ctr.getFactFourniss()
        else:
            adr_fact = self.ctr.getFactClient()

        if isinstance(adr_fact, list):
            adr_fact = adr_fact[FacturationSelection.getFacturationAdress(
                self, adr_fact)]
        tab_adr_fact = '\t\t\t\t\t\t\t\t'
        adr_fact = adr_fact.replace('\n', '\n' + tab_adr_fact)

        #################################################
        ##             ADRESSE  CLIENT                 ##
        #################################################
        adr_client = self.ctr.getAdr_uClient()
        if langue_data['code'] != 'fr' and len(
                re.findall("\\n\w+$", adr_client)) > 0:
            print "ETRANGER, ", adr_client
            pays = re.findall("\\n\w+$", adr_client)[0]
            print "PAYS, ", pays
            adr_client = adr_client.replace(pays, pays.replace("\n", "\t\t\t"))
            print "NEW adr, ", adr_client
        tab_adr_client = '\t\t\t'
        adr_client = adr_client.replace('\n', '\n' + tab_adr_client)

        #################################################
        ##                 TVA  CLIENT                 ##
        #################################################
        tva_client = self.ctr.getTVA_uClient()

        #################################################
        ##             ADRESSE  FOURNISSEUR            ##
        #################################################
        adr_fourniss = self.ctr.getAdr_uFourniss()
        if langue_data['code'] != 'fr' and len(
                re.findall("\\n\w+$", adr_fourniss)) > 0:
            pays = re.findall("\\n\w+$", adr_fourniss)[0]
            adr_fourniss = adr_fourniss.replace(pays,
                                                pays.replace("\n", "\t\t\t"))
        tab_adr_fourniss = '\t\t\t'
        adr_fourniss = adr_fourniss.replace('\n', '\n' + tab_adr_fourniss)

        #################################################
        ##                 TVA  FOURNISSEUR            ##
        #################################################
        tva_fourniss = self.ctr.getTVA_U_Fourniss()

        #################################################
        ##                MARCHANDISE                  ##
        #################################################
        #        m_nom = self.ctr.marchandise.decode('utf-8')
        m_nom = self.oil_market.getMarchandiseFullName(self.ctr.marchandise,
                                                       langue_data['code'])
        #        marchandise_list = self.oil_market.marchandises_list[langue_data['code']]
        #        m_nom = marchandise_list[self.ctr.marchandise]#.decode('utf-8')
        m_quantite = self.ctr.quantite

        if self.ctr.unite == 'kg':
            if langue_data['code'] == 'fr':
                m_unite = 'le '
            elif langue_data['code'] == 'en':
                m_unite = 'per '
            elif langue_data['code'] == 'es':
                m_unite = 'el '
            m_unite += langue_data['kg_unite']
        elif self.ctr.unite == 't':
            if langue_data['code'] == 'fr':
                m_unite = 'la '
            elif langue_data['code'] == 'en':
                m_unite = 'per '
            elif langue_data['code'] == 'es':
                m_unite = 'la '
            m_unite += langue_data['t_unite']

        #################################################
        ##                  PAIEMENT                   ##
        #################################################

        str_prix = self.ctr.prix
        matches = re.findall(r"[-+]?\d*\.*\d+", str_prix.replace(',', '.'))
        if len(matches) > 0:
            prix_num = matches[0]
            prix_words = num2words(float(prix_num), lang=langue_data['code'])
        else:
            prix_num = str_prix
            prix_words = ""

        if self.ctr.monnaie == 0:
            monnaie = u'\u20ac'.encode('utf8')
            prix_words += ' euros'
        elif self.ctr.monnaie == 1:
            monnaie = u'\u00a3'.encode('utf8')
            prix_words += ' dollars'
        elif self.ctr.monnaie == 2:
            monnaie = u'\u0024'.encode('utf8')
            prix_words += ' livres'
        else:
            monnaie = ""

        if len(self.ctr.paiement) > 0:
            index = self.oil_market.paiements["fr"].index(self.ctr.paiement)
            paiement = self.oil_market.paiements[langue_data['code']][index]
            courtage = self.ctr.courtage
        else:
            paiement = ""
            courtage = ""

        #################################################
        ##                 LIVRAISON                   ##
        #################################################
#        dlv_dic = self.ctr.periode_livraison
        try:
            periode_livraison = self.ctr.descr_livraison
        except:
            periode_livraison = ""

#        month_names = langue_data['months']
#        ordered_years = sorted(dlv_dic.keys())
#        for i in range(0, len(ordered_years), 1):
#            if len(periode_livraison) > 0 :
#                periode_livraison += '\n'
#            y = ordered_years[i]
#            for j in range(0, 12):
#                m = month_names[j]
#                total = int(float(dlv_dic[y][str(j+1).zfill(2)]["total"]))
#                if total == 0: continue
#                if len(periode_livraison) > 0 :
#                    periode_livraison += ', '+m
#                else:
#                    periode_livraison += m
#            periode_livraison += ' - '+str(y)

        if len(self.ctr.logement) > 0:
            index = self.oil_market.logements["fr"].index(self.ctr.logement)
            format_livraison = self.oil_market.logements[
                langue_data['code']][index]
        else:
            format_livraison = ""

        if self.ctr.is_franco is True:
            if langue_data['code'] == "fr":
                ville = "usine acheteur à ".decode('utf8') + ville.decode(
                    'utf8')
            if langue_data['type_deliv'][1] == "":
                type_deliv = langue_data['type_deliv'][0].lower()
            else:
                type_deliv = langue_data['type_deliv'][1].lower()
        else:
            if langue_data['code'] == "fr":
                ville = "usine vendeur à ".decode('utf8') + ville.decode(
                    'utf8')

            if langue_data['type_deliv'][3] == "":
                type_deliv = langue_data['type_deliv'][2].lower()
            else:
                type_deliv = langue_data['type_deliv'][3].lower()

        has_tva_client = False
        if len(tva_client) > 0:
            tva_client += '\n'
            has_tva_client = True

        has_tva_fourniss = False
        if len(tva_fourniss) > 0:
            tva_fourniss += '\n'
            has_tva_fourniss = True

        context = {
            'is_fourniss': is_fourniss,
            'date_ctr': R(date_ctr, size=24),
            'n_ctr': R(n_ctr, size=24),
            'adr_fact': R(adr_fact, size=24),
            'adr_fourniss': R(adr_fourniss, size=24),
            'tva_fourniss': R(tva_fourniss, size=24),
            'has_tva_fourniss': has_tva_fourniss,
            'adr_client': R(adr_client, size=24),
            'tva_client': R(tva_client, size=24),
            'has_tva_client': has_tva_client,
            'm_nom': R(m_nom, size=24),
            'm_quantite': R(m_quantite, size=24),
            'm_unite': R(m_unite, size=24),
            'format_livraison': R(format_livraison, size=24),
            'date_livraison': R(periode_livraison, size=24),
            'type_delivery': R(type_deliv, size=24),
            'ville': R(ville, size=24),
            'monnaie': R(monnaie, size=24),
            'prix_num': R(prix_num, size=24),
            'prix_words': R(prix_words, size=24),
            'paiement': R(paiement, size=24),
            'courtage': R(courtage, size=24)
        }

        if filedir is None:
            #            filedir = QtCore.QDir.absoluteFilePath(words_path)
            filedir = QtCore.QFileInfo(words_path).absoluteFilePath()


#            selected_filter = "MS Word Documents (*"+langue_data["code"]+".docx)"
#            fileDialog2 = QtGui.QFileDialog(self, "Où enregistrer ?")
#            options2 = QtGui.QFileDialog.DontResolveSymlinks
#            fileDialog2.setOptions(options2)
#            fileDialog2.setDirectory(words_path)
#            filedir = fileDialog2.getExistingDirectory()

#            filedir = QtGui.QFileDialog.getExistingDirectory(self, "Où enregistrer ?", words_path, QtGui.QFileDialog.ShowDirsOnly)# | QtGui.QFileDialog.DontResolveSymlinks)

        if filedir is None:
            return

        if not filedir.endswith('/'):
            filedir += '/'

        ctr = DocxTemplate(tpl_path)
        ctr.render(context)
        if is_fourniss is False:
            ctr_doc = filedir + filename + "_client.docx"
            ctr.save(ctr_doc)
        else:
            ctr_doc = filedir + filename + ".docx"
            ctr.save(ctr_doc)

        startfile(ctr_doc)

        if is_fourniss is False:
            return self.createPDF(is_fourniss=True,
                                  filedir=filedir,
                                  tpl_path=tpl_path)
示例#18
0
def fill_tpl(context, doc_path):
    tpl = DocxTemplate(template)
    tpl.render(context)
    tpl.save(doc_path)
示例#19
0
def generate(data):
    try:
        domaine = data['metier']['domaine'].strip()
        nbp = len(data['parcours'])

        if nbp == 5: flimit = 288
        else: flimit = 403

        # Try to make a space between aspet&contrainte
        if len(data['metier']['aspectPositif']) < 45:
            data['metier']['aspectPositif'] += '\n'

        context = {
         'nom' : RichText(data['profil']['nom'], font='Arial', bold=True,\
          size = 22 if len(data['profil']['nom'])>50 else 24),

         'poste' : data['profil']['poste'],

         'biographie' : RichText(data['profil']['biographie'], font='Arial', \
          size = 22 if len(data['profil']['biographie'])>399 else 24),

         'competenceQualite' : RichText(data['metier']['competenceQualite'], font='Arial', color='#000000', \
          size = 22 if len(data['metier']['competenceQualite'])>185 else 24),

         'accessMetier' : RichText(data['metier']['accessMetier'], font='Arial', color='#000000',\
          size = 22 if len(data['metier']['accessMetier'])>160 else 24),

         'aspectPositif' : RichText(data['metier']['aspectPositif'], font='Arial', color='#000000',\
          size = 22 if len(data['metier']['aspectPositif'])>72 else 24),

         'contrainte' : RichText(data['metier']['contrainte'], font='Arial', color='#000000',\
          size = 22 if len(data['metier']['contrainte'])>72 else 24),

         'domaine' : domaine,

         'formation' : RichText(data['etudes']['formation'], font='Arial', color='#000000',\
          size = 22 if (len(data['etudes']['formation'])>flimit) else 24),

         'etablissement' : RichText(data['etudes']['etablissement'], font='Arial', color='#000000',\
          size = 28 if len(data['etudes']['etablissement'])>32 else 32),

         'insertionProfessionnel' : RichText(data['etudes']['insertionProfessionnel'], font='Arial', color='#000000',\
          size = 22 if len(data['etudes']['insertionProfessionnel'])>111 else 24)
        }

        for i in range(nbp):
            if i == nbp - 1: color = '#ffffff'
            else: color = '#000000'

            context[f'p{i}'] = RichText(data['parcours'][i][0], font='Arial', color=color,\
             size = 22 if len(data['parcours'][i][0])>11 else 24)

            context[f'v{i}'] = RichText(data[ 'parcours'][i][1], font='Arial', color=color, \
             size = 22 if len(data['parcours'][i][1])>34 else 24)

        col = None
        for kdom, vdom in verifJSON().items():
            if kdom == domaine:
                col = vdom
                break
        # Si aucune correspondance
        if not col: return

        # Get the template
        doc = DocxTemplate(f"template/Trame-vierge{nbp}-{col}.docx")

        # Change image on template if image set
        if data['profil']['profilImage'] != '':
            data['profil']['profilImage'] = forceJPG(
                data['profil']['profilImage'])
            doc.replace_pic('test.jpg', data['profil']['profilImage'])

        # Generate template
        doc.render(context)
        name = "FicheMetier_" + data['profil']['poste'].replace(' ', '_')

        # Save the doc generated
        doc.save(f"{gettempdir()}\\{name}.docx")

        # Convert to pdf
        convert(f"{gettempdir()}\\{name}.docx")

        return f"{gettempdir()}\\{name}.pdf"

    except Exception as err:
        print(err)
        return
示例#20
0
文件: pr1.py 项目: VadymRud/zampolit
from docxtpl import DocxTemplate
doc = DocxTemplate("templ1.docx")
##context = { 'dick' : "И.И.Иванов"}
##doc.render(context)
##doc.save("шаблон-final.docx")

kids = [{
    'first': 'John',
    'last': 'Williams',
    'addr1': '5555 NW 37th St',
    'addr2': 'Apt 2601',
    'city': 'Oklahoma City',
    'state': 'OK',
    'zip': '73112'
}, {
    'first': 'George',
    'last': 'Lucas',
    'addr1': '1234 Dobbs St.',
    'addr2': 'Suite 62',
    'city': 'Moore',
    'state': 'OK',
    'zip': '73160'
}]

doc = DocxTemplate("templ1.docx")
context = {'dick': "И.И.Иванов", 'kids': kids}
doc.render(context)
doc.save("шаблон-final.docx")
for kid in kids:
    print(kid['first'])
    print('___________')
from docxtpl import DocxTemplate, RichText, InlineImage
from docx.shared import Inches, Mm
from datetime import datetime
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, colors
from copy import copy

doc = DocxTemplate('MOP_DenHaag_V1.0.docx')
context = { 'site_name' : "TestUE1" ,}
context['site_name'] = "Site1"
context['Hub_PE'] = "Site1-CR102"
context['New_Hub_PE'] = 'Site1-CR102'
doc.render(context)

doc.save("MOP_Site1_V1.1.docx")
示例#22
0
from docxtpl import DocxTemplate, RichText
from jinja2.exceptions import TemplateError
import six

six.print_('=' * 80)
six.print_("Generating template error for testing (so it is safe to ignore) :")
six.print_('.' * 80)
try:
    tpl = DocxTemplate('templates/template_error_tpl.docx')
    tpl.render({'test_variable': 'test variable value'})
except TemplateError as the_error:
    six.print_(six.text_type(the_error))
    if hasattr(the_error, 'docx_context'):
        six.print_("Context:")
        for line in the_error.docx_context:
            six.print_(line)
tpl.save('output/template_error.docx')
six.print_('.' * 80)
six.print_(" End of TemplateError Test ")
six.print_('=' * 80)
示例#23
0
from docxtpl import DocxTemplate
from num2words import num2words

f = open('out1.txt', 'r')
f1 = f.read()
tel = int(f1)
f.close()
f = open('out2.txt', 'r')
f1 = f.read()
inet = int(f1)
f.close()

doc = DocxTemplate("Shablon.docx")
All = tel + inet
NDS = All / 5
if ((All % 10) == 1):
    Slovo = " рубль"
elif ((All % 10) == 2 or (All % 10) == 3 or (All % 10) == 4):
    Slovo = " рубля"
else:
    Slovo = " рублей"
Slova = num2words(All, lang='ru') + Slovo + " 00 копеек"
All = str(All) + " руб."
NDS = str(NDS) + " руб."
context = {
    'Slova': (Slova),
    'Inet': (str(inet)),
    'Tel': (str(tel)),
    'All': (All),
    'NDS': (NDS)
}
示例#24
0
    def createHeaderDocNew(self, gender=None):
        docs = self.env['intern.document'].search([('name', '=', "CV_HEAD")],
                                                  limit=1)
        logo = self.env['intern.document'].search([('name', '=', "Logo")],
                                                  limit=1)
        streamDoc = BytesIO(docs[0].attachment.decode("base64"))
        target_document = None
        tempFile1 = None
        lentmp = len(self.interns_exam_doc)
        if gender != None:
            lentmp = 0
            for intern in self.interns_exam_doc:
                if intern.gender == gender:
                    lentmp += 1

        if lentmp > 20:
            target_document = Document(streamDoc)
            tmp = lentmp / 20
            for i in range(1, tmp + 1):
                document = Document(streamDoc)
                for table in document.tables:
                    for row in table.rows:
                        for cell in row.cells:
                            if 'tbl_intern' in cell.text:
                                cell.text = cell.text.replace(
                                    'tbl_intern', 'tbl_intern%d' % i)
                                break
                # target_document.add_page_break()
                for element in document.element.body:
                    target_document.element.body.append(element)

            tempFile1 = NamedTemporaryFile(delete=False)
            target_document.save(tempFile1.name)
            tempFile1.flush()
            tempFile1.close()

        if docs:
            tpl = None
            if target_document is None:
                stream = BytesIO(docs[0].attachment.decode("base64"))
                tpl = DocxTemplate(stream)
            else:
                tpl = DocxTemplate(tempFile1.name)

            context = {}
            interns = self.interns_exam_doc.sorted(
                key=lambda x: x.sequence_exam)

            counter_index = 0
            for k in range(0, lentmp / 20 + 1):
                table_interns = []
                for i in range(20 * k, 20 * k + 20):
                    if i >= lentmp:
                        break
                    if gender == None:
                        intern = interns[i]
                    else:
                        while counter_index < len(interns):
                            if interns[counter_index].gender == gender:
                                intern = interns[counter_index]
                                counter_index += 1
                                break
                            counter_index += 1

                    info = {}
                    info['stt'] = str(i + 1)
                    info['htk'] = intern.name_without_signal.upper()
                    info['htn'] = intern.name_in_japan
                    if intern.gender == 'nu':
                        info['gt'] = u'女'
                    else:
                        info['gt'] = u'男'
                    info['ns'] = intern_utils.date_time_in_jp(
                        intern.day, intern.month, intern.year)
                    info['t'] = str(
                        intern_utils.get_age_jp(datetime.now(), intern.day,
                                                intern.month, intern.year))
                    info['nm'] = intern.blood_group

                    left = 1.5 - (10.0 - intern.vision_left) / 10.0
                    right = 1.5 - (10.0 - intern.vision_right) / 10.0
                    info['tlt'] = "%.1f" % (left)
                    info['tlp'] = "%.1f" % (right)
                    if intern.preferred_hand == '0':
                        info['tt'] = u'右'
                    elif intern.preferred_hand == '1':
                        info['tt'] = u'左'
                    else:
                        info['tt'] = u'両手'
                    info['cc'] = str(intern.height)
                    info['cn'] = str(intern.weight)
                    info['iq'] = "%s%%" % intern.iq_percentage
                    info['ktk'] = intern.check_kureperin
                    info['hn'] = intern.marital_status.name_in_jp
                    if intern.province:
                        info['pro'] = intern_utils.no_accent_vietnamese(
                            intern.province.name).upper()
                    info['bc'] = intern.certification.name_in_jp
                    table_interns.append(info)

                if k == 0:
                    context['tbl_intern'] = table_interns
                else:
                    context['tbl_intern%d' % k] = table_interns

            context['logo'] = InlineImage(
                tpl,
                BytesIO(logo[0].attachment.decode("base64")),
                width=Mm(35))
            if self.enterprise_doc:
                context['xn'] = self.enterprise_doc.name_jp
            context['nd'] = self.guild.name_in_jp
            context['now'] = intern_utils.date_time_in_jp(
                datetime.now().day,
                datetime.now().month,
                datetime.now().year)

            tpl.render(context)

            tempFile = NamedTemporaryFile(delete=False)
            tpl.save(tempFile)
            tempFile.flush()
            tempFile.close()

            if tempFile1 is not None:
                os.unlink(tempFile1.name)

            return tempFile
        if tempFile1 is not None:
            os.unlink(tempFile1.name)
        return None
示例#25
0
parser = argparse.ArgumentParser()

# setup firstname, lastname arguements
parser.add_argument('--startdate', help="Enter start date here")
parser.add_argument('--enddate', help="Enter end date here")

# get the dictionary of command line inputs entered by the user
args = parser.parse_args()

# access each command line input from the dictionary
sDate = args.startdate
eDate = args.enddate

tmplPath = "assets/docxtpl/template_example.docx"

doc = DocxTemplate(tmplPath)
try:
    connection = cx_Oracle.connect("system/torreto@localhost")
    cursor = connection.cursor()
    #print(connection.version)

    sql_fetch = """ SELECT * FROM IEGC_VIOLATION_DATA where date_time BETWEEN TO_DATE(:col1, 'YYYY-MM-DD')\
                and TO_DATE(:col2, 'YYYY-MM-DD')"""
    cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD' ")
    df = pd.read_sql(sql_fetch,
                     params={
                         'col1': sDate,
                         'col2': eDate
                     },
                     con=connection)
    '''cursor.execute(sql_fetch, {'col1':sDate, 'col2':eDate})
示例#26
0
def main():
    doc = DocxTemplate(f'templates/{settings["template_filename"]}.docx')
    context = get_context(settings, current_period_data)
    doc.render(context)
    doc.save(f'output/{context["output_doc_name"]}.docx')
    print_output_information(context)
示例#27
0
def run_report(cfg, table_data, table_species, table_findgse, table_scope,
               table_kmer, table_assembly, figure_base_quality,
               figure_base_content, figure_base_gc, figure_species,
               figure_findgse, figure_genomescope, figure_kmer,
               figure_gc_depth, tpl_docx, tpl_html, out_dir):

    out_dir = mkdir(out_dir)
    now = datetime.now()
    config = read_config(cfg)
    table_data = read_table_data(table_data)
    table_species = read_tsv(table_species, '\t')

    if config["general"]["assembly"].lower() == "true":
        if table_assembly.lower == "no":
            LOG.debug("Please enter the assembly result statistics file")

        assembly = True
        table_assembly = read_table_assembly(table_assembly)

    else:
        assembly = False
        table_assembly = [[0, 0, 0, 0], [0], [0], [0], [0], [0],
                          [0, 0, 0, 0, 0]]

    if config["general"]["homogeneous"].lower() == "true":
        if table_findgse.lower == "no" or table_scope.lower == "no":
            LOG.debug(
                "Please output the genomic prediction results of FindGSE and GenomeScope"
            )

        homogeneous = True
        table_findgse = read_table_findgse(table_findgse)
        table_scope = read_table_scope(table_scope)
        findgse_genome = table_findgse[0]
        scope_genome = table_scope[0]
        max_genome = max(findgse_genome, scope_genome)
        min_genome = min(findgse_genome, scope_genome)
        average_genome = (max_genome + min_genome) * 1.0 / 2
        software = "FindGSE和GenomeScope"
        estimate_size = '{0:,}-{1:,}'.format(min_genome, max_genome)
        heterozygosity = table_scope[1]
    else:
        if table_kmer.lower == "no":
            LOG.debug(
                "Please output the genomic prediction results of Kmerfreq")
        homogeneous = False
        table_kmer = read_table_kmer(table_kmer)
        software = "Kmerfreq"
        estimate_size = '{:,}'.format(int(table_kmer[4].replace(",", "")))
        heterozygosity = float(table_kmer[5].replace("%", ""))
        findgse_genome = 0
        scope_genome = 0
        max_genome = 0
        min_genome = 0
        average_genome = 0

    r = {
        "project": "",
        "id": "",
        "name": "",
        "species": "",
        "strain": "",
        "sequencer": "Illumina",
        "author": "",
        "reviewer": "",
        "year": now.year,
        "month": now.month,
        "day": now.day,
        "kmer": "",
        "raw_data": table_data[2],
        "clean_data": table_data[4],
        "estimate_size": estimate_size,
        "heterozygosity": '{}%'.format(heterozygosity),
        "software": software,
        "homogeneous": homogeneous,
        "assembly_size": '{:,}'.format(int(table_assembly[6][3])),
        "findgse_genome": '{:,}'.format(findgse_genome),
        "scope_genome": '{:,}'.format(scope_genome),
        "average_genome": '{:,}'.format(average_genome),
        "max_genome": '{:,}'.format(max_genome),
        "min_genome": '{:,}'.format(min_genome),
        "table_data": table_data,
        "table_species": table_species,
        "pollution_description": "",
        "table_findgse": table_findgse,
        "table_scope": table_scope,
        "table_kmer": table_kmer,
        "assembly": assembly,
        "table_assembly": table_assembly,
        "scaffold_length": '{:,}'.format(int(table_assembly[6][3])),
        "scaffold_n50": '{:,}'.format(int(table_assembly[0][3])),
        "scaffold_number": '{:,}'.format(int(table_assembly[6][4])),
        "contig_length": '{:,}'.format(int(table_assembly[6][1])),
        "contig_n50": '{:,}'.format(int(table_assembly[0][1])),
        "contig_number": '{:,}'.format(int(table_assembly[6][2])),
        "depth_description": ""
    }

    r.update(config["general"])

    tpl = DocxTemplate(tpl_docx)

    tpl.render(r)

    if homogeneous:
        if assembly:
            figure_name = [
                "base_quality.png", "base_content.png", "base_gc.png",
                "top10_species.png", "findgse.png", "genomescope.png",
                "gc_depth.png"
            ]
            figure_variable = [
                figure_base_quality, figure_base_content, figure_base_gc,
                figure_species, figure_findgse, figure_genomescope,
                figure_gc_depth
            ]
        else:
            figure_name = [
                "base_quality.png", "base_content.png", "base_gc.png",
                "top10_species.png", "findgse.png", "genomescope.png",
                "gc_depth.png"
            ]
            figure_variable = [
                figure_base_quality, figure_base_content, figure_base_gc,
                figure_species, figure_findgse, figure_genomescope
            ]

    else:
        if assembly:
            figure_name = [
                "base_quality.png", "base_content.png", "base_gc.png",
                "top10_species.png", "heterozygosity.png", "gc_depth.png"
            ]
            figure_variable = [
                figure_base_quality, figure_base_content, figure_base_gc,
                figure_species, figure_kmer, figure_gc_depth
            ]
        else:
            figure_name = [
                "base_quality.png", "base_content.png", "base_gc.png",
                "top10_species.png", "heterozygosity.png"
            ]
            figure_variable = [
                figure_base_quality, figure_base_content, figure_base_gc,
                figure_species, figure_kmer
            ]

    for i, j in zip(figure_name, figure_variable):
        tpl.replace_pic(i, j)

    tpl.save(os.path.join(out_dir, "report.docx"))

    #    html_report
    for i in ["images", "static"]:
        temp = os.path.join(out_dir, i)
        if os.path.exists(temp):
            shutil.rmtree(temp)
        shutil.copytree(os.path.join(tpl_html, i), temp)

    for i in figure_variable:
        shutil.copy(i, os.path.join(out_dir, "images/"))

    for j in ["index.html", "main.html"]:
        tpl = Template(open(os.path.join(tpl_html, j)).read().decode("utf-8"))

        with open(os.path.join(out_dir, j), "w") as fh:
            fh.write(tpl.render(r).encode("utf-8"))


#     html_report

    return r
示例#28
0
    def make_templated_report(self, options: Options, file_obj: Path, output_filename: str, picfile: Path,
                              template_path: Path):
        cif = CifContainer(file_obj)
        tpl_doc = DocxTemplate(Path(__file__).parent.parent.joinpath(template_path))
        ba = BondsAndAngles(cif, without_h=options.without_h)
        t = TorsionAngles(cif, without_h=options.without_h)
        h = HydrogenBonds(cif)
        context = {'options'               : options,
                   # {'without_h': True, 'atoms_table': True, 'text': True, 'bonds_table': True},
                   'cif'                   : cif,
                   'space_group'           : self.space_group_subdoc(tpl_doc, cif),
                   'structure_figure'      : self.make_picture(options, picfile, tpl_doc),
                   'crystallization_method': remove_line_endings(retranslate_delimiter(
                       cif['_exptl_crystal_recrystallization_method'])) or '[No crystallization method given!]',
                   'sum_formula'           : self.format_sum_formula(cif['_chemical_formula_sum'].replace(" ", "")),
                   'itnum'                 : cif['_space_group_IT_number'],
                   'crystal_size'          : this_or_quest(cif['_exptl_crystal_size_min']) + timessym +
                                             this_or_quest(cif['_exptl_crystal_size_mid']) + timessym +
                                             this_or_quest(cif['_exptl_crystal_size_max']),
                   'crystal_colour'        : this_or_quest(cif['_exptl_crystal_colour']),
                   'crystal_shape'         : this_or_quest(cif['_exptl_crystal_description']),
                   'radiation'             : self.get_radiation(cif),
                   'wavelength'            : cif['_diffrn_radiation_wavelength'],
                   'theta_range'           : self.get_from_to_theta_range(cif),
                   'diffr_type'            : gstr(cif['_diffrn_measurement_device_type'])
                                             or '[No measurement device type given]',
                   'diffr_device'          : gstr(cif['_diffrn_measurement_device'])
                                             or '[No measurement device given]',
                   'diffr_source'          : gstr(cif['_diffrn_source']).strip('\n\r')
                                             or '[No radiation source given]',
                   'monochromator'         : gstr(cif['_diffrn_radiation_monochromator']) \
                                             or '[No monochromator type given]',
                   'detector'              : gstr(cif['_diffrn_detector_type']) \
                                             or '[No detector type given]',
                   'lowtemp_dev'           : gstr(cif['_olex2_diffrn_ambient_temperature_device']) \
                                             or '',
                   'index_ranges'          : self.hkl_index_limits(cif),
                   'indepentent_refl'      : this_or_quest(cif['_reflns_number_total']),
                   'r_int'                 : this_or_quest(cif['_diffrn_reflns_av_R_equivalents']),
                   'r_sigma'               : this_or_quest(cif['_diffrn_reflns_av_unetI/netI']),
                   'completeness'          : self.get_completeness(cif),
                   'theta_full'            : cif['_diffrn_reflns_theta_full'],
                   'data'                  : this_or_quest(cif['_refine_ls_number_reflns']),
                   'restraints'            : this_or_quest(cif['_refine_ls_number_restraints']),
                   'parameters'            : this_or_quest(cif['_refine_ls_number_parameters']),
                   'goof'                  : this_or_quest(cif['_refine_ls_goodness_of_fit_ref']),
                   'ls_R_factor_gt'        : this_or_quest(cif['_refine_ls_R_factor_gt']),
                   'ls_wR_factor_gt'       : this_or_quest(cif['_refine_ls_wR_factor_gt']),
                   'ls_R_factor_all'       : this_or_quest(cif['_refine_ls_R_factor_all']),
                   'ls_wR_factor_ref'      : this_or_quest(cif['_refine_ls_wR_factor_ref']),
                   'diff_dens_min'         : self.get_diff_density_min(cif).replace('-', minus_sign),
                   'diff_dens_max'         : self.get_diff_density_max(cif).replace('-', minus_sign),
                   'exti'                  : self.get_exti(cif),
                   'flack_x'               : self.get_flackx(cif),
                   'integration_progr'     : self.get_integration_program(cif),
                   'abstype'               : gstr(cif['_exptl_absorpt_correction_type']) or '??',
                   'abs_details'           : self.get_absortion_correction_program(cif),
                   'solution_method'       : self.solution_method(cif),
                   'solution_program'      : self.solution_program(cif),
                   'refinement_prog'       : self.refinement_prog(cif),
                   'atomic_coordinates'    : self.get_atomic_coordinates(cif),
                   'bonds'                 : ba.bonds,
                   'angles'                : ba.angles,
                   'ba_symminfo'           : ba.symminfo,
                   'torsions'              : t.torsion_angles,
                   'torsion_symminfo'      : t.symminfo,
                   'hydrogen_bonds'        : h.hydrogen_bonds,
                   'hydrogen_symminfo'     : h.symminfo,
                   'literature'            : self.literature
                   }

        # Filter definition for {{foobar|filter}} things:
        jinja_env = jinja2.Environment()
        jinja_env.filters['inv_article'] = get_inf_article
        tpl_doc.render(context, jinja_env=jinja_env, autoescape=True)
        tpl_doc.save(output_filename)
def createDocument(patient: patient, observationDictionary) -> Document:
    doc = DocxTemplate("./templates/patientInformationTemplate.docx")
    context = { 'patient': patient, "homeNumbers": getPatientHomePhoneNumbers(patient), "mobileNumbers": getPatientMobilePhoneNumbers(patient), "addresses": getPatientAddresses(patient), 
                 "knownLanguages": getPatientKnownLanguages(patient), "observations": observationDictionary }
    doc.render(context)
    return doc
    def generate(self):
        template = self.template.file._get_file()
        doc = DocxTemplate(template)
        invoiceProducts = self.products.all()
        products__pk = [product.product.pk for product in invoiceProducts]

        if len(invoiceProducts) == 0:
            categories = Category.objects.all()
        else:
            categories = Category.objects.distinct().filter(
                products__pk__in=products__pk)

        for category in categories:
            if len(products__pk) > 0:
                category.products_all = category.products.filter(
                    pk__in=products__pk)
            else:
                category.products_all = category.products.all()
            for product in category.products_all:
                product.img = InlineImage(doc,
                                          product.image_full_url,
                                          width=Mm(32),
                                          height=Mm(32))
                delivery = round(
                    float(product.weight_delivery_pc) *
                    float(self.incoterms.price), 2)
                # SM
                if category.ignore_multiply:
                    sm_price = product.get_sm_price
                else:
                    sm_price = self.price.calc(product.get_sm_price)

                product.sm_price = round(sm_price, 2)
                product.sm_price_uah = round(sm_price * 26.6, 2)
                if delivery > 0:
                    sm_delivery = float(sm_price) + delivery
                    product.sm_delivery = round(sm_delivery, 2)
                    product.sm_delivery_uah = round(sm_delivery * 26.6, 2)
                else:
                    product.sm_delivery = '-'
                    product.sm_delivery_uah = '-'
                # MD
                if category.ignore_multiply:
                    md_price = product.get_md_price
                else:
                    md_price = self.price.calc(product.get_md_price)

                product.md_price = round(md_price, 2)
                product.md_price_uah = round(md_price * 26.6, 2)
                if delivery > 0:
                    md_delivery = float(md_price) + delivery
                    product.md_delivery = round(md_delivery, 2)
                    product.md_delivery_uah = round(md_delivery * 26.6, 2)
                else:
                    product.md_delivery = '-'
                    product.md_delivery_uah = '-'

                # BG
                if category.ignore_multiply:
                    bg_price = product.get_bg_price
                else:
                    bg_price = self.price.calc(product.get_bg_price)

                product.bg_price = round(bg_price, 2)
                product.bg_price_uah = round(bg_price * 26.6, 2)
                if delivery > 0:
                    bg_delivery = float(bg_price) + delivery
                    product.bg_delivery = round(bg_delivery, 2)
                    product.bg_delivery_uah = round(bg_delivery * 26.6, 2)
                else:
                    product.bg_delivery = '-'
                    product.bg_delivery_uah = '-'

        for product in invoiceProducts:
            product.img = InlineImage(doc,
                                      product.image_full_url,
                                      width=Mm(24),
                                      height=Mm(24))

        context = {
            'invoice': self,
            'products': invoiceProducts,
            'exporter': self.exporter,
            'importer': self.importer,
            'categories': categories,
        }

        jinja_env = jinja2.Environment(autoescape=True)
        doc.render(context, jinja_env)

        # name = unidecode('-'.join(['invoice',self.code, str(self.date), 'id', str(self.pk)]))

        formula = ''.join(x for x in self.price.formula if x.isdigit())
        if len(formula) == 0:
            formula = 0

        name = f"presentation_en_{str(int(formula))}_{str(int(self.incoterms.price))}"

        filename = f'Invoices/{name}.docx'
        doc.save(settings.MEDIA_ROOT + filename)
        self.file.name = filename
        self.save()
        # try: os.remove(settings.MEDIA_ROOT + filename)
        # except: pass
        return settings.MEDIA_URL + filename