account.invoice のワークフローに、"open" と "paid" の間に別のステータス ("advanced") を追加したいと考えました。だから私はモジュールを継承しました
class advance_invoice_workflow(osv.osv) :
_name = 'account.invoice'
_inherit = "account.invoice"
_columns = {
'state': fields.selection([
('draft','Draft'),
('proforma','Pro-forma'),
('proforma2','Pro-forma'),
('open','Open'),
('advanced','Advanced'),
('paid','Paid'),
('paid_advanced','Paid advanced'),
('cancel','Cancelled'),
],'Status', select=True, readonly=True, track_visibility='onchange',
help='* The \'Draft\' status is used when a user is encoding a new and unconfirmed Invoice. \
\n* The \'Pro-forma\' when invoice is in Pro-forma status,invoice does not have an invoice number. \
\n* The \'Open\' status is used when user create invoice,a invoice number is generated.Its in open status till user does not pay invoice. \
\n* The \'Paid\' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled. \
\n* The \'Cancelled\' status is used when user cancel invoice. \
'),
}
を作成して、XML ファイルでステータスを宣言します。
<record id="act_advanced" model="workflow.activity">
<field name="wkf_id" ref="account.wkf" />
<field name="name">advanced</field>
<field name="kind">function</field>
<field name="action">set_advanced()</field>
</record>
したがって、2 つの遷移があります。
オープンからアドバンスへの最初のもの、
<record id="t2" model="workflow.transition"> <field name="act_from" ref="account.act_open" /> <field name="act_to" ref="act_advanced" /> <field name="trigger_model">account.move.line</field> <field name="trigger_expr_id">move_line_id_payment_get()</field> <field name="condition">test_advanced()</field> <field name="signal">button_confirm_advance</field> </record>
アドバンストからペイドへの2番目のもの
<record id="t1" model="workflow.transition"> <field name="act_from" ref="act_advanced"/> <field name="act_to" ref="account.act_paid"/> <field name="trigger_model">account.move.line</field> <field name="trigger_expr_id">move_line_id_payment_get()</field> <field name="condition">test_paid()</field> </record>
account.invoice から継承していないが、それを参照している外部モジュールから、「act_open」から「act_advanced」に移行するシグナルをワークフローに送信したいと考えています。そこで、このアクションをバインドする name="button_confirm_advance" のボタンを追加しました。
def button_confirm_advance(self,cr,uid,ids,context=None):
context = context or {}
for invoice in self.browse(cr,uid,ids,context=context):
wf_service = netsvc.LocalService("workflow")
self.write(cr, uid, [invoice.id],{})
wf_service.trg_validate(uid,'account.invoice',invoice.id,'button_confirm_advance',cr)
return {'type': 'ir.actions.act_window_close'}
すべての変数は正しいですが、trg_validate は False を返します。何が間違っていますか?
ありがとう、パトリツィオ