Skip to main content
 首页 » 编程设计

python之如何在 OpenERP 7 中按下按钮时获取工作流状态的日期

2024年11月01日16webabcd

您好,我有一个工作流程,状态为待定、已批准和已完成,我试图在“WO_APPROVE_DATE”字段中自动获取日期,当按下批准按钮时,我该如何实现?请帮助..

按钮

<header>  
<button name="pending_draft" string="Pending" states="pending" class="oe_highlight"   type="workflow"/> 
<button name="approved_draft" string="Approved" states="approved" class="oe_highlight" type="workflow"/> 
<button name="complete" string="Active" states="active" class="oe_highlight" type="workflow"/> 
</header> 

类

class work_order(osv.osv): 
 
 
sel_states = [ 
    ('pending', 'Pending'), 
    ('approved', 'Approved'), 
    ('active', 'Complete') 
] 
 
_name = "work_order.work_order" 
_description = "Work Order Details" 
 
_rec_name = "WO_CODE" 
_columns = { 
    'WO_CODE' : fields.char("Work Order Code", size=64, required=True, readonly=True ), 
    'WO_ASSIGNED_TO' : fields.many2one("hr.employee", "Assigned To", ondelete="no action", domain=[('job_id', '=', ('Crew Supervisor'))]), 
    'WO_NOTES' : fields.text("Description"), 
    'WO_APPROVE_DATE' : fields.datetime("EngineerApproval Date"), 
    'state' : fields.selection(sel_states, "Workflow"), 
} 
 
def workorder_pending(self, cr, uid, ids): 
    self.write(cr, uid, ids, {'state' : 'pending'}) 
    return True 
 
def workorder_approved(self, cr, uid, ids): 
    self.write(cr, uid, ids, {'state' : 'approved'}) 
    return True 
 
def workorder_complete(self, cr, uid, ids): 
    self.write(cr, uid, ids, {'state' : 'active'}) 
    return True 

工作流.xml

<?xml version="1.0" encoding="utf-8"?> 

    <record id="workorder_workflow" model="workflow"> 
        <field name="name">work_order.workflow</field> 
        <field name="osv">work_order.work_order</field> 
        <field name="on_create">True</field> 
    </record> 
 
    <!--workflow activity--> 
    <record id="act_pending" model="workflow.activity"> 
        <field name="wkf_id" ref="workorder_workflow"/> 
        <field name="flow_start">True</field> 
        <field name="name">pending</field> 
        <field name="kind">function</field> 
        <field name="action">workorder_pending()</field> 
    </record> 
 
    <record id="act_approved" model="workflow.activity"> 
        <field name="wkf_id" ref="workorder_workflow"/> 
        <field name="name">approved</field> 
        <field name="kind">function</field> 
        <field name="action">workorder_approved()</field> 
    </record> 
 
<record id="act_complete" model="workflow.activity"> 
        <field name="wkf_id" ref="workorder_workflow"/> 
        <field name="flow_stop">True</field> 
        <field name="name">complete</field> 
        <field name="kind">function</field> 
        <field name="action">workorder_complete()</field> 
    </record> 
 
<record id="trans_pending_approved" model="workflow.transition"> 
        <field name="act_from" ref="act_pending"/> 
        <field name="act_to" ref="act_approved"/> 
        <field name="signal">pending_draft</field> 
    </record> 
 
<record id="trans_approved_complete" model="workflow.transition"> 
        <field name="act_from" ref="act_approved"/> 
        <field name="act_to" ref="act_complete"/> 
        <field name="signal">complete</field> 
    </record> 

请您参考如下方法:

首先添加这行用于导入包

from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare 
import time 
from datetime import datetime 

然后像这样改变函数

def workorder_approved(self, cr, uid, ids): 
        self.write(cr, uid, ids, {'state' : 'approved','WO_APPROVE_DATE':time.strftime(DEFAULT_SERVER_DATE_FORMAT)}) 
        return True