-
Notifications
You must be signed in to change notification settings - Fork 0
/
gen_form.py
277 lines (238 loc) · 14.8 KB
/
gen_form.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Frame, PageTemplate, FrameBreak, Table,TableStyle
from reportlab.platypus import PageBreak, NextPageTemplate
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.units import mm
from copy import deepcopy
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY, TA_LEFT
import datetime
import locale
import sys
import pytils
import os.path
"""
Ниже блок переменных, заменить из реальных объектов
"""
hospital_name = "ОГАУЗ \"Иркутская медикосанитарная часть № 2\""
organization_address = "г. Иркутс, ул. Байкальская 201"
hospital_kod_ogrn = "1033801542576"
number_health_passport = "1" # номер id patient из базы
individual_fio = "Иванов Иван Иванович"
individual_sex = "М"
individual_date_born = "01.01.1901"
individual_address = "г.Иркутск, ул. Сибирских-Партизан д. 8 кв. 9"
document_passport_number = "010503"
document_passport_serial = "0506"
document_passport_issued = "УВД Октябрьского р-на г. Братска"
document_polis_number = "77777777"
individual_work_organization = "Управление Федераньной службы по ветеринарному и фитосанитрному надзору по Иркутской области" \
"и Усть-Ордынскому бурятскому автономному округу" # реест организаций
work_organization_okved = "91.5 - Обслуживание и ремонт компютерной и оргтехники, заправка картриджей" \
"обслуживание принтеров"
individual_department = "отдел информационных технология, ораганизаци ремонта и обслуживания медицинского оборудования"
individual_profession = "старший государственный таможенный инспектор" # реест профессий
list_result = ['Общ. анализ крови','Общ.анализ мочи','Глюкоза крови','Холестерин','RW','Флюорография','ЭКГ',
'Спирометрия','УЗИ м/желёз (маммогр.)','Аудиометрия','УЗИ огр.м/таза','Исслед. вестибулярн. аппарата',
'Исслед.вибрационн. чувствительности','Острота зрения','Рефрактометрия','Объём аккомодации','Исслед.бинокулярн. зрения',
'Цветоощущение','Офтальмотонометрия','Биомикроскопия сред глаза','Поля зрения','Бактериоскопия мазка',
'Офтальмоскопия глазного дня','Мазок из зева и носа','Ретикулоциты','АЛК или КП в моче','Метгемоглобины',
'Базальн. Зернист. Эритроцитов'
] # список лабораторных, инструментальных исследований
list_doctor = ['Терапевт','Психиатр','Нарколог','Гинеколог','Офтальмолог','Лор','Невролог','Дерматолог',
'Хирург','Стоматолог'] # список врачей-специалистов
for i in range(0,3):
list_doctor.append('')
if sys.platform == 'win32':
locale.setlocale(locale.LC_ALL, 'rus_rus')
else:
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
FONTS_FOLDER = 'c:\\tmp\\iq200-pyth\\fonts1\\'
pdfmetrics.registerFont(TTFont('PTAstraSerifBold', os.path.join(FONTS_FOLDER, 'PTAstraSerif-Bold.ttf')))
pdfmetrics.registerFont(TTFont('PTAstraSerifReg', os.path.join(FONTS_FOLDER, 'PTAstraSerif-Regular.ttf')))
# http://www.cnews.ru/news/top/2018-12-10_rossijskim_chinovnikam_zapretili_ispolzovat
# Причина PTAstraSerif использовать
def form_health_passport():
doc = SimpleDocTemplate("health_passport2.pdf", pagesize=landscape(A4),
leftMargin=10 * mm,
rightMargin=10 * mm, topMargin=10 * mm,
bottomMargin=10 * mm, allowSplitting=1,
title="Форма {}".format("Паспорт здоровья"))
width, height = landscape(A4)
styleSheet = getSampleStyleSheet()
style = styleSheet["Normal"]
style.fontName = "PTAstraSerifBold"
style.fontSize = 9
style.leading = 5
styleBold = deepcopy(style)
styleBold.fontName = "PTAstraSerifBold"
styleCenter = deepcopy(style)
styleCenter.alignment = TA_CENTER
styleCenterBold = deepcopy(styleBold)
styleCenterBold.alignment = TA_CENTER
styleJustified = deepcopy(style)
styleJustified.alignment = TA_JUSTIFY
styleJustified.spaceAfter = 5.5*mm
styleJustified.fontSize = 12
styleJustified.leading = 4.5 * mm
righ_frame = Frame(148.5 * mm, 0 * mm, width=148.5 * mm, height=210 * mm,
leftPadding=10*mm, bottomPadding=6, rightPadding=10*mm, topPadding=6, showBoundary=1)
left_frame = Frame(0 * mm, 0 * mm, width=148.5 * mm, height=210 * mm,
leftPadding=10 * mm, bottomPadding=6, rightPadding=10 * mm, topPadding=6, showBoundary=1)
doc.addPageTemplates(PageTemplate(id='TwoCol', frames=[righ_frame, left_frame], pagesize=landscape(A4)))
space = 5.5 * mm
objs = [
Spacer(1, 3 * mm),
Paragraph('<font face="PTAstraSerifBold">Министерство здравоохранения Российской Федерации</font>',styleCenter),
Spacer(1, 3 * mm),
Paragraph('<font face="PTAstraSerifBold"><u>{}</u></font>'.format(hospital_name),styleCenter),
Spacer(1, 2 * mm),
Paragraph('<font face="PTAstraSerifReg"><font size=9>(наименование медицинской организации)</font></font>',
styleCenter),
Spacer(1, 3 * mm),
Paragraph('<font face="PTAstraSerifBold"><u>{}</u></font>'.format(organization_address),styleCenter),
Spacer(1, 5 * mm),
Paragraph('<font face="PTAstraSerifBold" size=12>Код ОГРН {}</font>'.format(hospital_kod_ogrn), styleCenter),
Spacer(1, 10 * mm),
Paragraph('<font face="PTAstraSerifBold" size=12>ПАСПОРТ ЗДОРОВЬЯ РАБОТНИКА № <u>{}</u></font>'.
format(number_health_passport),styleCenter),
Spacer(1, space),
Paragraph('<font face="PTAstraSerifReg"size=10><u>{} года</u></font>'.
format(pytils.dt.ru_strftime(u"%d %B %Y", inflected=True, date=datetime.datetime.now())),styleCenter),
Spacer(1, 7),
Paragraph('<font face="PTAstraSerifReg" size=7>(дата оформления)</font>',styleCenter),
Spacer(1, space),
Paragraph('<font face="PTAstraSerifReg">1.Фамилия, имя, отчество: '
'<u>{}</u> </font>'.format(individual_fio), styleJustified),
Paragraph('<font face="PTAstraSerifReg">2.Пол: <u>{}</u> <img src="img/FFFFFF-0.png" width="90" />'
'3.Дата Рождения: <u>{}</u> </font>'.format(individual_sex,individual_date_born), styleJustified),
Paragraph('<font face="PTAstraSerifReg">4.Паспорт: серия <u>{}</u> <img src="img/FFFFFF-0.png" width="20" />'
'номер: <u>{}</u> </font>'.format(document_passport_serial,document_passport_number), styleJustified),
Paragraph('<font face="PTAstraSerifReg">кем выдан: <u>{}</u></font>'.format(document_passport_issued),
styleJustified),
Paragraph('<font face="PTAstraSerifReg">5. Адрес регистрации по месту жительства (пребывания):'
' <u>{}</u></font>'.format(individual_address), styleJustified),
Paragraph('<font face="PTAstraSerifReg">6. Номер страхового полиса:'
' <u>{}</u></font>'.format(document_polis_number), styleJustified),
Paragraph('<font face="PTAstraSerifReg">7. Наименование работодателя:'
' <u>{}</u></font>'.format(individual_work_organization), styleJustified),
Paragraph('<font face="PTAstraSerifReg">7.1 Форма собственности и вид экономической деятельности '
'работодателя по ОКВЭД: <u>{}</u></font>'.format(work_organization_okved), styleJustified),
Paragraph('<font face="PTAstraSerifReg">7.2 Наименование структурного подразделения (цех, участок, отдел):'
' <u> {} </u></font>'.format(individual_department), styleJustified),
Paragraph('<font face="PTAstraSerifReg">8. Профессия (должность) (в настоящее время):'
' <u>{}</u></font>'.format(individual_profession), styleJustified),
FrameBreak(),
Spacer(1, space),
Paragraph('<font face="PTAstraSerifReg">12. Заключение:</font>',styleJustified),
]
styleT = deepcopy(style)
styleT.alignment = TA_CENTER
styleT.fontSize = 10
styleT.leading = 4.5 * mm
opinion = [
[Paragraph('<font face="PTAstraSerifReg">Заключение по результатам предварительного '
'и периодического медицинского осмотра</font>',styleT),
Paragraph('<font face="PTAstraSerifReg">Дата получения заключения</font>', styleT),
Paragraph('<font face="PTAstraSerifReg"> Подпись профпатолога</font>', styleT)],
]
for i in range(0,5):
para = [Paragraph('<font face="PTAstraSerifReg" size=11>Профпригоден/\nпрофнепригоден</font>', styleT)]
opinion.append(para)
tbl = Table(opinion,colWidths=(48*mm, 40*mm, 40*mm),hAlign='LEFT', style=[
('GRID', (0, 0), (-1, -1), 0.7, colors.black),
('VALIGN', (0,0), (-1, -1), 'MIDDLE'),
('TOPPADDING',(0,0), (-1,-1), 1.5 *mm),
('BOTTOMPADDING', (0, 0), (-1, -1), 1.5 * mm),
])
objs.append(tbl)
objs.append(Spacer(1, 10 * mm))
objs.append(Paragraph('<font face="PTAstraSerifReg">Для заметок:</font>', styleJustified))
s="___________________________________________________________"
for i in range(0,6):
objs.append(Spacer(1, 1 * mm))
objs.append(Paragraph('<font face="PTAstraSerifReg">{}</font>'.format(s), styleJustified))
objs.append(NextPageTemplate("TwoCol"))
objs.append(FrameBreak())
objs.append(Spacer(1, 7 * mm))
objs.append(Paragraph('<font face="PTAstraSerifReg">11. Результаты лабораторных и инструментальных исследований'
'</font>', styleJustified))
tbl_result = [
[Paragraph('<font face="PTAstraSerifReg" size=11>Вид исследования</font>', styleT),
Paragraph('<font face="PTAstraSerifReg" size=11>Даты исследований</font>', styleT),
'','','',''],
['','','','','','']
]
styleTR = deepcopy(styleT)
styleTR.alignment = TA_LEFT
styleTR.fontSize = 11
styleTR.spaceAfter = 12*mm
for i in list_result :
para = [Paragraph('<font face="PTAstraSerifReg">{}</font>'.format(i), styleTR)]
tbl_result.append(para)
tbl = Table(tbl_result, colWidths=(41 * mm, 22 * mm, 17 * mm, 17*mm, 17*mm, 17 * mm), hAlign='LEFT', style=[
('GRID', (0, 0), (-1, -1), 0.7, colors.black),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('TOPPADDING', (0, 0), (-1, -1), 0.01 * mm),
('BOTTOMPADDING', (0, 0), (-1, -1), 0.01 * mm),
('LEFTPADDING ', (0, 2), (0, -1),0.1 * mm),
('SPAN', (0, 0), (0,1 )),
('SPAN', (1, 0), (-1, 0)),
])
objs.append(tbl)
objs.append(FrameBreak())
objs.append(Spacer(1, 7*mm))
objs.append(Paragraph('<font face="PTAstraSerifReg">9. Условия труда в настоящее время</font>', styleJustified))
tbl_result = [
[Paragraph('<font face="PTAstraSerifReg" size=10>Наименование производственного фактора, вида работы с '
'указанием пункта</font>', styleT),
Paragraph('<font face="PTAstraSerifReg" size=10>Стаж работы с фактором</font>', styleT),]
]
for i in range(0,4):
para = ['','']
tbl_result.append(para)
row_height =[]
for i in tbl_result:
row_height.append(8*mm)
row_height[0]=None
tbl = Table(tbl_result, colWidths=(75 * mm, 55 * mm),rowHeights=row_height ,hAlign='LEFT', style=[
('GRID', (0, 0), (-1, -1), 0.7, colors.black),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('TOPPADDING', (0, 0), (-1, -1), 0.01 * mm),
('BOTTOMPADDING', (0, 0), (-1, -1), 0.01 * mm),
('LEFTPADDING ', (0, 2), (0, -1), 0.1 * mm),
('SPAN', (1, 1), (1, -1)),
])
objs.append(tbl)
objs.append(Spacer(1,5*mm))
styleDoc=deepcopy(styleJustified)
styleDoc.spaceAfter = 1*mm
objs.append(Paragraph('<font face="PTAstraSerifReg">10. Заключения врачей - специалистов:</font>', styleDoc,))
tbl_result = [
[Paragraph('<font face="PTAstraSerifReg" size=11>Врач-специалист</font>', styleT),
Paragraph('<font face="PTAstraSerifReg" size=11>Даты исследований</font>', styleT),
'', '', '', ''],
['', '', '', '', '', '']
]
for i in list_doctor:
para = [Paragraph('<font face="PTAstraSerifReg">{}</font>'.format(i), styleTR)]
tbl_result.append(para)
row_height = []
for i in tbl_result:
row_height.append(9 * mm)
row_height[0] = None
row_height[1] = None
tbl = Table(tbl_result, colWidths=(41 * mm, 22 * mm, 17 * mm, 17 * mm, 17 * mm, 17 * mm), rowHeights=row_height, hAlign='LEFT', style=[
('GRID', (0, 0), (-1, -1), 0.7, colors.black),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('TOPPADDING', (0, 0), (-1, -1), 0.01 * mm),
('BOTTOMPADDING', (0, 0), (-1, -1), 0.01 * mm),
('LEFTPADDING ', (0, 2), (0, -1), 0.1 * mm),
('SPAN', (0, 0), (0, 1)),
('SPAN', (1, 0), (-1, 0)),
])
objs.append(tbl)
doc.build(objs)
form_health_passport()