ผลต่างระหว่างรุ่นของ "Openerp/histest3"
ไปยังการนำทาง
ไปยังการค้นหา
ไฟล์
ไฟล์
ไฟล์
ไฟล์
ไฟล์
Chaiporn (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) ล (Openerp/histest ถูกเปลี่ยนชื่อเป็น Openerp/histest3) |
||
(ไม่แสดง 8 รุ่นระหว่างกลางโดยผู้ใช้ 1 คน) | |||
แถว 1: | แถว 1: | ||
หน้านี้รวมข้อมูลสำหรับการทดสอบการพัฒนาระบบด้วย OpenERP | หน้านี้รวมข้อมูลสำหรับการทดสอบการพัฒนาระบบด้วย 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 | |
− | <syntaxhighlight lang=" | + | === ไฟล์ <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> | </syntaxhighlight> | ||
− | == | + | === ไฟล์ <code>histest_view.xml</code> === |
+ | เพิ่มการแสดงผลฟิลด์ appointment_ids ในฟอร์มของโมเดล HISPatient | ||
− | + | <syntaxhighlight lang="xml"> | |
− | + | <record model="ir.ui.view" id="view_histest_patient_form"> | |
− | <syntaxhighlight lang=" | + | <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> | </syntaxhighlight> | ||
− | + | === ไฟล์ <code>histest_report.xml</code> === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ใช้ไฟล์นี้ระบุองค์ประกอบของรายงานการนัดหมายผู้ป่วย | |
− | |||
<syntaxhighlight lang="xml"> | <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> | </syntaxhighlight> | ||
− | + | === ไฟล์ <code>__openerp__.py</code> === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ระบุให้ใช้ไฟล์ <code>histest_report.xml</code> เป็น data | |
− | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
− | ' | + | { |
− | ' | + | : |
− | + | 'data': [ | |
− | + | 'histest_view.xml', | |
− | ' | + | 'histest_report.xml', |
], | ], | ||
+ | : | ||
+ | } | ||
</syntaxhighlight> | </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/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