0

Menu の葉セクションの割り当てリクエストで簡単な計算を行うという問題に直面しています。ビュー xml ファイルにボタンを追加しました。

<record model="ir.ui.view" id="view_edit_holiday_allocation_form">
            <field name="name">allocation</field>
            <field name="model">hr.holidays</field>
            <field name="inherit_id" ref="hr_holidays.allocation_leave_new"/>
            <field name="arch" type="xml">
                <data>
                        <field name="department_id" position="after">
                <field name="monthly_quota"/>
                        <field name="refusal_date"/>
                        <button name="calc_monthly_quota" type="object" string="Calculate Monthly Quota"/>
                        </field>
            </data>
        </field>
    </record>

そして.pyファイルで

class hr_holidays(osv.osv):
    _inherit = "hr.holidays"
def calc_monthly_quota(self, cr, uid, ids, context=None):

    for record in self.browse(cr, uid, ids):
        if record.state :
            self.write(cr, uid, [record.id],{'monthly_quota':\
    record.number_of_days_temp/12})
    return True

_columns = {
        "monthly_quota": fields.float("Monthly Quota", readonly=True,
     states={'draft':[('readonly',False)]}, help="If monthly leave \
     limit is more then xero then employee can not take leave more \
     then monthly allocation in total allocation. If monthly quota \
     is zero user can take leave as per his allocation limit."),
        "refusal_date" : fields.date('Date of Refusal'),
        "create_date" : fields.date('Create Date'),
         }

ここでは、ボタンのクリックでリーフの毎月のクォータを計算したいだけです。allocation(number_of_days_temp) に 12 を入力すると、毎月 1 になるはずです。レコードの状態を除いて、すべてが期待どおりにうまく機能しています。ボタンをクリックすると、レコードの状態が「送信予定」(下書き)から「承認予定」(確認)に変わります。フォームを保存する前に、フォームの状態自体が変化します。理想的には、保存ボタンを押した後にのみフォームの状態が変化する必要があります。そこでopenerp 7.0のドキュメントを読みまし た

After a button has been clicked, the record should always be reloaded.

フォームを保存せずに状態を変更するために必要なものをまだ取得していません。どのコメントも非常に高く評価されます。

4

2 に答える 2

0

この問題を解決するために、openerp にサポート メールとビデオを送信して、返信としてメールを送ってもらいました。

I have tested your issue by applying your code at my end and the reason
that the state is 'To Approve' before you save the record is: In Allocation
Request , whenever a record(allocation request) is created , it will be
directly in 'To Approve' state as per the workflow.

According to workflow, an allocation request when created is always in
state confirm i.e 'To Approve' because a request after creating is to be
submited only so it is directly passed to 'To Approve' state.

Now as in your case, when you click on the button 'Calculate Monthly
Quota',first that record is created and saved in the database to perform
further action on that record and then after browsing that record from
database then you write to that record. So even if you don't click on Save,
the record is actually saved to your database and as the record is created
it will be transfered to state 'To Approve' as per the workflow of holidays.

返信が遅くなり申し訳ありませんが、サポートからの返信です。よろしくお願いします。

于 2013-07-23T12:03:38.627 に答える
0
def calc_monthly_quota(self, cr, uid, ids, context=None):

   for record in self.browse(cr, uid, ids):
        if record.state :
                result=record.number_of_days_temp/12
   return  self.write(cr, uid, [record.id],{'monthly_quota':result,})

私はこれを試しましたが、これはうまくいきます

于 2013-06-14T06:13:58.220 に答える