Openerp/histest3
หน้านี้รวมข้อมูลสำหรับการทดสอบการพัฒนาระบบด้วย OpenERP
เนื้อหา
การสร้างรายงาน
- สร้างไดเรคตอรี่ชื่อ
report
และสร้างไฟล์__init__.py
ไว้ภายในนั้น - ดาวน์โหลด ไฟล์:Histest patient.odt เพื่อใช้เตรียมเทมเพลทสำหรับรายงาน เซฟไฟล์นี้ไว้ในไดเรคตอรี
report
- ใช้คำสั่ง
openerp_sxw2rml.py
แปลงไฟล์ของ OpenOffice ให้เป็นไฟล์ RML (Report Markup Language) เพื่อนำไปใช้กับระบบสร้างรายงานของ OpenERP ต่อไป (หมายเหตุ:<openerp-path>
หมายถึงพาธที่ติดตั้ง OpenERP)
python <openerp-path>/openerp/addons/base_report_designer/openerp_sxw2rml/openerp_sxw2rml.py histest_patient.odt > histest_patient.rml
ไฟล์ histest_patient.rml
อย่างไรก็ตาม หากไม่ต้องการใช้ OpenOffice/LibreOffice ในการสร้างเทมเพลท เราสามารถสร้างไฟล์ RML ขึ้นมาได้ด้วยตัวเองดังนี้
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="57.0" y1="57.0" width="481" height="728"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" fontName="Helvetica"/>
<paraStyle name="P2" fontName="Helvetica"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="Text_20_body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Caption" fontName="Helvetica-Oblique" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="Heading_20_1" fontName="Helvetica-Bold" fontSize="115%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="Table_20_Contents" fontName="Helvetica"/>
<images/>
</stylesheet>
<story>
<para style="P2">Patient Appointment Information</para>
<para style="P1">
<font color="white"> </font>
</para>
<section>
<para style="P1">[[ repeatIn(objects, 'patient') ]]</para>
<para style="P1">Patient ID: [[ patient.id_number ]]</para>
<para style="P1">Patient Name: [[ patient.full_name ]]</para>
<para style="P1">
<font color="white"> </font>
</para>
<para style="P1">Appointment Dates:</para>
<section>
<para style="P1">[[ repeatIn(patient.appointment_ids, 'appointment') ]]</para>
<para style="P1">- [[ appointment.date ]]</para>
</section>
<para style="P1">
<font color="white"> </font>
</para>
</section>
<para style="P1">
<font color="white"> </font>
</para>
<para style="P1">
<font color="white"> </font>
</para>
</story>
</document>
ไฟล์ histest.py
เพิ่มโมเดล HISAppointment และแก้ไขโมเดล HISPatient ให้เชื่อมโยงถึงกัน
from osv import osv, fields
class HISPatient(osv.Model):
_name='histest.patient'
def get_full_name(self, cr, uid, ids, field_name, arg, context):
patients = self.browse(cr, uid, ids)
result = {}
for p in patients:
result[p.id] = (u'%s %s %s' % (p.title,
p.first_name,
p.last_name))
return result
_rec_name='full_name'
_columns={
'title': fields.char(size=50,
string=u'คำนำหน้าชื่อ',
required=True),
'first_name': fields.char(size=256,
string=u'ชื่อ',
required=True),
'last_name': fields.char(size=256,
string=u'นามสกุล',
required=True),
'sex': fields.selection([('M',u'ชาย'),('F',u'หญิง'),],
string=u'เพศ',
required=True),
'id_number': fields.char(size=20,
string=u'เลขบัตรประชาชน',
required=True),
'full_name': fields.function(get_full_name,
type='char'),
'appointment_ids': fields.one2many('histest.appointment',
'patient_id',
'Appointments'),
}
:
class HISAppointment(osv.Model):
_name = 'histest.appointment'
_columns = {
'date': fields.date(string=u'วันนัดหมาย', required=True),
'patient_id': fields.many2one('histest.patient', 'Patient'),
}
ไฟล์ histest_view.xml
เพิ่มการแสดงผลฟิลด์ appointment_ids ในฟอร์มของโมเดล HISPatient
<record model="ir.ui.view" id="view_histest_patient_form">
<field name="name">histest.patient.form</field>
<field name="model">histest.patient</field>
<field name="arch" type="xml">
<form string="Patient" version="7.0">
<group cols="2">
<group colspan="1">
<field name="title"/>
<field name="first_name" widget="firstname" />
<field name="last_name" widget="lastname" />
</group>
<group colspan="1">
<field name="sex"/>
<field name="id_number" widget="person_id" />
<field name="appointment_ids" />
</group>
</group>
</form>
</field>
</record>
ไฟล์ histest_report.xml
ใช้ไฟล์นี้ระบุองค์ประกอบของรายงานการนัดหมายผู้ป่วย
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report
auto="True"
id="report_histest_patient"
model="histest.patient"
name="histest.patient"
rml="histest/report/histest_patient.rml"
string="Print Appointments"
header="False"
menu="True"
/>
</data>
</openerp>
ไฟล์ __openerp__.py
ระบุให้ใช้ไฟล์ histest_report.xml
เป็น data
{
:
'data': [
'histest_view.xml',
'histest_report.xml',
],
:
}
การทำให้รายงานรองรับการใช้งานภาษาไทย
แก้ไขไฟล์ <openerp-path>/openerp/report/render/rml2pdf/customfonts.py
เพื่อระบุให้ใช้ฟอนต์ Garuda แทนฟอนต์ Helvetica รวมถึงระบุพาธสำหรับการค้นหาไฟล์ True-Type Font ที่อ้างถึง
:
CustomTTFonts = [ ('Helvetica',"Garuda", "Garuda.ttf", 'normal'),
('Helvetica',"Garuda Bold", "Garuda-Bold.ttf", 'bold'),
('Helvetica',"Garuda Oblique", "Garuda-Oblique.ttf", 'italic'),
('Helvetica',"Garuda BoldOblique", "Garuda-BoldOblique.ttf", 'bolditalic'),
:
]
TTFSearchPath_Linux = [
'/usr/share/fonts/truetype', # SuSE
'/usr/share/fonts/dejavu', '/usr/share/fonts/liberation', # Fedora, RHEL
'/usr/share/fonts/truetype/*', # Ubuntu,
'/usr/share/fonts/thai-scalable', # CentOS
'/usr/share/fonts/TTF/*', # at Mandriva/Mageia
'/usr/share/fonts/TTF', # Arch Linux
]
:
เอกสารครั้งก่อน ๆ
- โค้ดสำหรับการทดสอบครั้งที่ 1 วันที่ 27 มี.ค. 2557 - เกี่ยวกับ web module และการเรียก message
- โค้ดสำหรับการทดสอบครั้งที่ 2 วันที่ 3 เม.ย. 2557 - การทำ responsive css และ asynchronous request