<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="th">
	<id>http://158.108.32.49/wiki/index.php?action=history&amp;feed=atom&amp;title=Openerp%2Fmodule_4</id>
	<title>Openerp/module 4 - ประวัติรุ่นแก้ไข</title>
	<link rel="self" type="application/atom+xml" href="http://158.108.32.49/wiki/index.php?action=history&amp;feed=atom&amp;title=Openerp%2Fmodule_4"/>
	<link rel="alternate" type="text/html" href="http://158.108.32.49/wiki/index.php?title=Openerp/module_4&amp;action=history"/>
	<updated>2026-05-06T16:47:23Z</updated>
	<subtitle>ประวัติรุ่นแก้ไขของหน้านี้ในวิกิ</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>http://158.108.32.49/wiki/index.php?title=Openerp/module_4&amp;diff=42897&amp;oldid=prev</id>
		<title>Chaiporn: หน้าที่ถูกสร้างด้วย &#039; == สร้างโมเดล Department และเชื่อมโยงกับ Appointment เพื่อค้นหา...&#039;</title>
		<link rel="alternate" type="text/html" href="http://158.108.32.49/wiki/index.php?title=Openerp/module_4&amp;diff=42897&amp;oldid=prev"/>
		<updated>2014-05-01T06:44:35Z</updated>

		<summary type="html">&lt;p&gt;หน้าที่ถูกสร้างด้วย &amp;#039; == สร้างโมเดล Department และเชื่อมโยงกับ Appointment เพื่อค้นหา...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;หน้าใหม่&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== สร้างโมเดล Department และเชื่อมโยงกับ Appointment เพื่อค้นหาและสร้างรายงาน ==&lt;br /&gt;
&lt;br /&gt;
=== histest.py ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class HISAppointment(osv.Model):&lt;br /&gt;
    _name = &amp;#039;histest.appointment&amp;#039;&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;#039;date&amp;#039;: fields.date(string=u&amp;#039;วันที่&amp;#039;,&lt;br /&gt;
                            required=True),&lt;br /&gt;
        &amp;#039;patient_id&amp;#039;: fields.many2one(&amp;#039;histest.patient&amp;#039;,&lt;br /&gt;
                                      &amp;#039;Patient&amp;#039;),&lt;br /&gt;
        &amp;#039;department_id&amp;#039;: fields.many2one(&amp;#039;histest.department&amp;#039;,&lt;br /&gt;
                                         &amp;#039;Department&amp;#039;),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
class HISDepartment(osv.Model):&lt;br /&gt;
    _name = &amp;#039;histest.department&amp;#039;&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;#039;name&amp;#039;: fields.char(size=200,&lt;br /&gt;
                            string=u&amp;#039;แผนก&amp;#039;,&lt;br /&gt;
                            required=True),&lt;br /&gt;
        &amp;#039;appointment_ids&amp;#039;: fields.one2many(&amp;#039;histest.appointment&amp;#039;,&lt;br /&gt;
                                           &amp;#039;department_id&amp;#039;,&lt;br /&gt;
                                           &amp;#039;Appointments&amp;#039;),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
class HISDepartmentSearch(osv.TransientModel):&lt;br /&gt;
    _name = &amp;#039;histest.departmentsearch&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    def appointment_search(self, cr, uid, ids, field_name=None,&lt;br /&gt;
                           arg=None, context=None):&lt;br /&gt;
&lt;br /&gt;
        appointment_obj = self.pool.get(&amp;#039;histest.appointment&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        dsearches = self.browse(cr, uid, ids)&lt;br /&gt;
        result = {}&lt;br /&gt;
        for dsearch in dsearches:&lt;br /&gt;
            result[dsearch.id] = (&lt;br /&gt;
                appointment_obj.search(cr, uid,&lt;br /&gt;
                                       [(&amp;#039;department_id&amp;#039;,&amp;#039;=&amp;#039;,dsearch.department_id.id),&lt;br /&gt;
                                        (&amp;#039;date&amp;#039;,&amp;#039;=&amp;#039;,dsearch.search_date)],&lt;br /&gt;
                                       context=context))&lt;br /&gt;
        return result&lt;br /&gt;
&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;#039;department_id&amp;#039;: fields.many2one(&amp;#039;histest.department&amp;#039;,&lt;br /&gt;
                                         &amp;#039;Department&amp;#039;),&lt;br /&gt;
        &amp;#039;search_date&amp;#039;: fields.date(string=u&amp;#039;วันที่ต้องการหา&amp;#039;),&lt;br /&gt;
&lt;br /&gt;
        &amp;#039;appointment_ids&amp;#039;: fields.function(appointment_search,&lt;br /&gt;
                                           type=&amp;#039;one2many&amp;#039;,&lt;br /&gt;
                                           relation=&amp;#039;histest.appointment&amp;#039;,&lt;br /&gt;
                                           string=&amp;#039;Appointment by date&amp;#039;),&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== histest_view.xml ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ส่วน department form:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.ui.view&amp;quot; id=&amp;quot;view_histest_department_form&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;histest.department.form&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;model&amp;quot;&amp;gt;histest.department&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;arch&amp;quot; type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;form string=&amp;quot;Patient&amp;quot; version=&amp;quot;7.0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;group&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;appointment_ids&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/group&amp;gt;&lt;br /&gt;
        &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.actions.act_window&amp;quot; id=&amp;quot;action_histest_department&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;Department&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;res_model&amp;quot;&amp;gt;histest.department&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;view_type&amp;quot;&amp;gt;form&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;view_mode&amp;quot;&amp;gt;form,tree&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;menuitem name=&amp;quot;แผนก&amp;quot; id=&amp;quot;menu_histest_department&amp;quot;&lt;br /&gt;
              parent=&amp;quot;menu_histest_main&amp;quot; sequence=&amp;quot;4&amp;quot;&lt;br /&gt;
              action=&amp;quot;histest.action_histest_department&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ส่วน department search form:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.ui.view&amp;quot; id=&amp;quot;view_histest_departmentsearch_form&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;histest.departmentsearch.form&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;model&amp;quot;&amp;gt;histest.departmentsearch&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;arch&amp;quot; type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;form string=&amp;quot;Patient&amp;quot; version=&amp;quot;7.0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;group&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;department_id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;search_date&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;appointment_ids&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/group&amp;gt;&lt;br /&gt;
        &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.actions.act_window&amp;quot; id=&amp;quot;action_histest_departmentsearch&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;Department Appointment Search&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;res_model&amp;quot;&amp;gt;histest.departmentsearch&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;view_type&amp;quot;&amp;gt;form&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;view_mode&amp;quot;&amp;gt;form,tree&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;menuitem name=&amp;quot;แผนก search&amp;quot; id=&amp;quot;menu_histest_departmentsearch&amp;quot;&lt;br /&gt;
              parent=&amp;quot;menu_histest_main&amp;quot; sequence=&amp;quot;5&amp;quot;&lt;br /&gt;
              action=&amp;quot;histest.action_histest_departmentsearch&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;appointment tree view:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.ui.view&amp;quot; id=&amp;quot;view_histest_appointment_tree&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;histest.appointment.tree&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;model&amp;quot;&amp;gt;histest.appointment&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;arch&amp;quot; type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tree string=&amp;quot;Message&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;field name=&amp;quot;patient_id&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;field name=&amp;quot;date&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/tree&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== แฟ้มเกี่ยวกับรายงาน ===&lt;br /&gt;
&lt;br /&gt;
เพิ่มรายละเอียดใน histest_report.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;report&lt;br /&gt;
      auto=&amp;quot;True&amp;quot;&lt;br /&gt;
      id=&amp;quot;report_histest_departmentsearch&amp;quot;&lt;br /&gt;
      model=&amp;quot;histest.departmentsearch&amp;quot;&lt;br /&gt;
      name=&amp;quot;histest.departmentsearch&amp;quot;&lt;br /&gt;
      rml=&amp;quot;histest/report/histest_departmentsearch.rml&amp;quot;&lt;br /&gt;
      string=&amp;quot;Print Appointments&amp;quot;&lt;br /&gt;
      header=&amp;quot;False&amp;quot;&lt;br /&gt;
      menu=&amp;quot;True&amp;quot;&lt;br /&gt;
      /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
สร้าง histest_departmentsearch.rml โดยอาจจะสร้างจากการแก้แฟ้ม odt ด้วย LibreOffice ก็ได้  ให้สุดท้ายใน rml มีข้อมูลประมาณด้านล่างนี้:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;section&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;[[ repeatIn(objects, &amp;#039;departmentsearch&amp;#039;) ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;Department: [[ departmentsearch.department_id.name ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;Date: [[ departmentsearch.search_date ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;Appointment Dates:&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;para&amp;gt;Patients: [[ len(departmentsearch.appointment_ids) ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;&lt;br /&gt;
        &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;[[ repeatIn(departmentsearch.appointment_ids, &amp;#039;appointment&amp;#039;) ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
        &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;- [[ appointment.patient_id.full_name ]]&amp;lt;/para&amp;gt;&lt;br /&gt;
      &amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;para style=&amp;quot;P1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;font color=&amp;quot;white&amp;quot;&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;lt;/para&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== กระบวนการทำงาน ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Openerp-histest-workflow.png]]&lt;br /&gt;
&lt;br /&gt;
เพิ่ม columns ชื่อ state ใน HISAppointment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class HISAppointment(osv.Model):&lt;br /&gt;
    _name = &amp;#039;histest.appointment&amp;#039;&lt;br /&gt;
    _columns = {&lt;br /&gt;
        &amp;#039;date&amp;#039;: fields.date(string=u&amp;#039;วันที่&amp;#039;,&lt;br /&gt;
                            required=True),&lt;br /&gt;
        &amp;#039;patient_id&amp;#039;: fields.many2one(&amp;#039;histest.patient&amp;#039;,&lt;br /&gt;
                                      &amp;#039;Patient&amp;#039;),&lt;br /&gt;
        &amp;#039;department_id&amp;#039;: fields.many2one(&amp;#039;histest.department&amp;#039;,&lt;br /&gt;
                                         &amp;#039;Department&amp;#039;),&lt;br /&gt;
        &amp;#039;state&amp;#039;: fields.selection([(&amp;#039;new&amp;#039;, &amp;#039;New Appointment&amp;#039;),&lt;br /&gt;
                                   (&amp;#039;arrived&amp;#039;, &amp;#039;Arrived&amp;#039;),&lt;br /&gt;
                                   (&amp;#039;examining&amp;#039;, &amp;#039;Examining&amp;#039;),&lt;br /&gt;
                                   (&amp;#039;wait_medicine&amp;#039;,&amp;#039;Awaiting Medicine&amp;#039;),&lt;br /&gt;
                                   (&amp;#039;done&amp;#039;,&amp;#039;Done&amp;#039;),&lt;br /&gt;
                                   (&amp;#039;cancel&amp;#039;,&amp;#039;Canceled&amp;#039;)],&lt;br /&gt;
                                  &amp;#039;Status&amp;#039;, readonly=False),&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== histest_workflow.xml ===&lt;br /&gt;
&lt;br /&gt;
ระบบ workflow ในแฟ้ม histest_workflow.xml  โดยระบุสามส่วน&lt;br /&gt;
&lt;br /&gt;
* workflow model&lt;br /&gt;
* activities&lt;br /&gt;
* transitions&lt;br /&gt;
&lt;br /&gt;
ดังด้านล่าง&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;openerp&amp;gt;&lt;br /&gt;
  &amp;lt;data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Workflow model --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow&amp;quot; id=&amp;quot;wkf_appointment&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;histest.appointment.workflow&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;osv&amp;quot;&amp;gt;histest.appointment&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;on_create&amp;quot;&amp;gt;True&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Activities --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow.activity&amp;quot; id=&amp;quot;act_new&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;wkf_id&amp;quot; ref=&amp;quot;wkf_appointment&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;new&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;flow_start&amp;quot;&amp;gt;True&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;kind&amp;quot;&amp;gt;function&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;action&amp;quot;&amp;gt;write({ &amp;#039;state&amp;#039;: &amp;#039;new&amp;#039; })&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow.activity&amp;quot; id=&amp;quot;act_arrived&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;wkf_id&amp;quot; ref=&amp;quot;wkf_appointment&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;arrived&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;kind&amp;quot;&amp;gt;function&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;action&amp;quot;&amp;gt;write({ &amp;#039;state&amp;#039;: &amp;#039;arrived&amp;#039; })&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow.activity&amp;quot; id=&amp;quot;act_done&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;wkf_id&amp;quot; ref=&amp;quot;wkf_appointment&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;done&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;flow_stop&amp;quot;&amp;gt;True&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;kind&amp;quot;&amp;gt;function&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;action&amp;quot;&amp;gt;write({ &amp;#039;state&amp;#039;: &amp;#039;done&amp;#039; })&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Transitions --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow.transition&amp;quot; id=&amp;quot;new_arrived&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;act_from&amp;quot; ref=&amp;quot;act_new&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;act_to&amp;quot; ref=&amp;quot;act_arrived&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;signal&amp;quot;&amp;gt;arrive&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;record model=&amp;quot;workflow.transition&amp;quot; id=&amp;quot;arrived_done&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;act_from&amp;quot; ref=&amp;quot;act_arrived&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;act_to&amp;quot; ref=&amp;quot;act_done&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;signal&amp;quot;&amp;gt;done&amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/openerp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เพิ่มรายการไฟล์ใน __openerp__.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;#039;data&amp;#039;: [&lt;br /&gt;
        &amp;#039;histest_view.xml&amp;#039;,&lt;br /&gt;
        &amp;#039;histest_report.xml&amp;#039;,&lt;br /&gt;
        &amp;#039;histest_workflow.xml&amp;#039;,&lt;br /&gt;
    ],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== เพิ่ม form view เพื่อให้ส่ง signal ไปที่ workflow ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;record model=&amp;quot;ir.ui.view&amp;quot; id=&amp;quot;view_histest_appointment_form&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;name&amp;quot;&amp;gt;histest.appointment.form&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;model&amp;quot;&amp;gt;histest.appointment&amp;lt;/field&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;arch&amp;quot; type=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;form string=&amp;quot;Patient&amp;quot; version=&amp;quot;7.0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;group&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;patient_id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;date&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;department_id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;state&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;button name=&amp;quot;arrive&amp;quot; string=&amp;quot;Patient Arrived&amp;quot; states=&amp;quot;new&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;button name=&amp;quot;done&amp;quot; string=&amp;quot;Done&amp;quot; states=&amp;quot;arrived&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/group&amp;gt;&lt;br /&gt;
        &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;/field&amp;gt;&lt;br /&gt;
    &amp;lt;/record&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== เอกสารครั้งก่อน ๆ ==&lt;br /&gt;
* [[Openerp/histest1|โค้ดสำหรับการทดสอบครั้งที่ 1 วันที่ 27 มี.ค. 2557]] - เกี่ยวกับ web module และการเรียก message&lt;br /&gt;
* [[Openerp/histest2|โค้ดสำหรับการทดสอบครั้งที่ 2 วันที่ 3 เม.ย. 2557]] - การทำ responsive css และ asynchronous request&lt;br /&gt;
* [[Openerp/histest3|โค้ดสำหรับการทดสอบครั้งที่ 3]] - การทำรายงาน&lt;/div&gt;</summary>
		<author><name>Chaiporn</name></author>
		
	</entry>
</feed>