ผลต่างระหว่างรุ่นของ "Openerp/histest3"
ไปยังการนำทาง
ไปยังการค้นหา
ไฟล์
ไฟล์
ไฟล์
ไฟล์
ไฟล์
Jittat (คุย | มีส่วนร่วม) (Openerp/histest ถูกเปลี่ยนชื่อเป็น Openerp/histest1) |
Jittat (คุย | มีส่วนร่วม) ล (Openerp/histest ถูกเปลี่ยนชื่อเป็น Openerp/histest3) |
||
(ไม่แสดง 33 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
แถว 1: | แถว 1: | ||
− | # | + | หน้านี้รวมข้อมูลสำหรับการทดสอบการพัฒนาระบบด้วย OpenERP |
+ | == การสร้างรายงาน == | ||
+ | |||
+ | * สร้างไดเรคตอรี่ชื่อ <code>report</code> และสร้างไฟล์ <code>__init__.py</code> ไว้ภายในนั้น | ||
+ | * ดาวน์โหลด [[File:histest_patient.odt]] เพื่อใช้เตรียมเทมเพลทสำหรับรายงาน เซฟไฟล์นี้ไว้ในไดเรคตอรี <code>report</code> | ||
+ | * ใช้คำสั่ง <code>openerp_sxw2rml.py</code> แปลงไฟล์ของ OpenOffice ให้เป็นไฟล์ RML (Report Markup Language) เพื่อนำไปใช้กับระบบสร้างรายงานของ OpenERP ต่อไป (หมายเหตุ: <code><openerp-path></code> หมายถึงพาธที่ติดตั้ง OpenERP) | ||
+ | |||
+ | python <openerp-path>/openerp/addons/base_report_designer/openerp_sxw2rml/openerp_sxw2rml.py histest_patient.odt > histest_patient.rml | ||
+ | |||
+ | === ไฟล์ <code>histest_patient.rml</code> === | ||
+ | อย่างไรก็ตาม หากไม่ต้องการใช้ OpenOffice/LibreOffice ในการสร้างเทมเพลท เราสามารถสร้างไฟล์ RML ขึ้นมาได้ด้วยตัวเองดังนี้ | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <?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> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === ไฟล์ <code>histest.py</code> === | ||
+ | เพิ่มโมเดล HISAppointment และแก้ไขโมเดล HISPatient ให้เชื่อมโยงถึงกัน | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | 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'), | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === ไฟล์ <code>histest_view.xml</code> === | ||
+ | เพิ่มการแสดงผลฟิลด์ appointment_ids ในฟอร์มของโมเดล HISPatient | ||
+ | |||
+ | <syntaxhighlight lang="xml"> | ||
+ | <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> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === ไฟล์ <code>histest_report.xml</code> === | ||
+ | |||
+ | ใช้ไฟล์นี้ระบุองค์ประกอบของรายงานการนัดหมายผู้ป่วย | ||
+ | |||
+ | <syntaxhighlight lang="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> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === ไฟล์ <code>__openerp__.py</code> === | ||
+ | |||
+ | ระบุให้ใช้ไฟล์ <code>histest_report.xml</code> เป็น data | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | { | ||
+ | : | ||
+ | 'data': [ | ||
+ | 'histest_view.xml', | ||
+ | 'histest_report.xml', | ||
+ | ], | ||
+ | : | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == การทำให้รายงานรองรับการใช้งานภาษาไทย == | ||
+ | แก้ไขไฟล์ <code><openerp-path>/openerp/report/render/rml2pdf/customfonts.py</code> เพื่อระบุให้ใช้ฟอนต์ Garuda แทนฟอนต์ Helvetica รวมถึงระบุพาธสำหรับการค้นหาไฟล์ True-Type Font ที่อ้างถึง | ||
+ | <syntaxhighlight lang="python"> | ||
+ | : | ||
+ | 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 | ||
+ | ] | ||
+ | : | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == เอกสารครั้งก่อน ๆ == | ||
+ | * [[Openerp/histest1|โค้ดสำหรับการทดสอบครั้งที่ 1 วันที่ 27 มี.ค. 2557]] - เกี่ยวกับ web module และการเรียก message | ||
+ | * [[Openerp/histest2|โค้ดสำหรับการทดสอบครั้งที่ 2 วันที่ 3 เม.ย. 2557]] - การทำ responsive css และ asynchronous request |
รุ่นแก้ไขปัจจุบันเมื่อ 07:31, 24 เมษายน 2557
หน้านี้รวมข้อมูลสำหรับการทดสอบการพัฒนาระบบด้วย 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