- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 hr_leave_rules.py 中创建了字段 half_day_allowed
from odoo import models, fields, api, _
class HRLeaveRules(models.Model):
_name = 'hr_leave_rules.leave_rules'
half_day_allowed = fields.Selection([
('yes',"Yes"),
('no',"No")],
string="Half Day Allowed", required=True)
而且,我还继承了字段get_number_of_days,它计算休假的天数和holiday_status_id,它指示休假类型。我想做的是,如果对于特定的 holiday_status_id 如果 half_day_allowed 是"is",那么在 get_number_of_days 中它应该采用 float 值,否则它将采用 整数 值。为此,我尝试了下面的代码,但它不起作用。请帮助我。
leave_type.py
from odoo import fields, models, api, _
from math import ceil
from datetime import timedelta
from openerp.exceptions import UserError
HOURS_PER_DAY = 8
class leave(models.Model):
_inherit = "hr.holidays"
@api.onchange('number_of_days_temp')
def _holiday_status_id(self):
current = self.env['hr_leave_rules.leave_rules'].search([(
'holiday_status_id','=',self.holiday_status_id.id)])
@api.onchange('date_from')
def _onchange_date_from(self):
date_from = self.date_from
date_to = self.date_to
if date_from and not date_to:
date_to_with_delta = fields.Datetime.from_string(date_from) + timedelta(hours=HOURS_PER_DAY)
self.date_to = str(date_to_with_delta)
current = self.env['hr_leave_rules.leave_rules'].search([(
'holiday_status_id','=',self.holiday_status_id.id)])
if current.half_day_allowed == 'yes':
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = self._get_number_of_days(
date_from, date_to, self.employee_id.id)
else:
self.number_of_days_temp = 0
else:
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = ceil(self._get_number_of_days(
date_from, date_to, self.employee_id.id))
else:
self.number_of_days_temp = 0
@api.onchange('date_to')
def _onchange_date_to(self):
date_from = self.date_from
date_to = self.date_to
current = self.env['hr_leave_rules.leave_rules'].search([(
'holiday_status_id','=',self.holiday_status_id.id)])
if current.half_day_allowed == 'yes':
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = self._get_number_of_days(
date_from, date_to, self.employee_id.id)
else:
self.number_of_days_temp = 0
else:
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = ceil(self._get_number_of_days(
date_from, date_to, self.employee_id.id))
else:
self.number_of_days_temp = 0
最佳答案
从哪里开始......
首先,如果您有一个是/否字段,则应将其定义为 Boolean
字段,而不是 Char
字段。 Fields Documentation .它将允许您执行更简单的 if
/else
逻辑,更不用说它只是一种更好的做法。
if half_day_allowed:
# Do this way
else:
# Do that way
其次,如果你有重复的代码,你应该把它分解成自己的方法以提高可读性。 Don't repeat yourself .
您已经将整个部分重复了两次:
if half_day_allowed == 'yes':
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = self._get_number_of_days(
date_from, date_to, self.employee_id.id)
else:
self.number_of_days_temp = 0
else:
if (date_to and date_from) and (date_from <= date_to):
self.number_of_days_temp = ceil(self._get_number_of_days(
date_from, date_to, self.employee_id.id))
else:
self.number_of_days_temp = 0
相反,只需创建一个新方法并在需要时调用它。
@api.multi
def get_number_of_days_temp(self, half_day_allowed=False):
self.ensure_one()
if half_day_allowed == 'yes':
# Do this
else:
# Do that
@api.onchange('date_from')
def _onchange_date_from(self):
...
self.number_of_days_temp = self.get_number_of_days_temp(current.half_day_allowed)
@api.onchange('date_to')
def _onchange_date_to(self):
...
self.number_of_days_temp = self.get_number_of_days_temp(current.half_day_allowed)
最后,为了确定未获得预期结果的问题所在,我们需要您提供更多信息。到目前为止你所说的是:
I tried the below code but it is not working.
Its not showing correct get_number_of_days in both the cases i.e., in 'yes' and 'no'
这对确定问题没有帮助。有错误信息吗?它是否返回无效数据?如果是这样,输入和输出是什么以及期望它应该是什么?
在一无所知的情况下,我唯一的猜测是您的 number_of_days_temp
字段(您没有在问题中包含字段定义)被定义为 Integer
字段,在这种情况下,它将始终忽略小数。它必须定义为 Float
才能工作。
关于python - 我想以浮点值显示休假时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027648/
我有一张像这样的 table staff_id | att_date | status 1 2014-09-04 A 1
我正在使用 Python/Django,但这更多的是关于“数据模型”以及我如何与信息交互——我真的只是想知道我是不是疯了。 我正在为我的公司(约 55 名员工)开发一个小应用程序,该应用程序将跟踪可用
关于 我正在使用 Laravel 学习 Vue.js。目前,正在练习在 2 个用户之间发送实时短信。 下面的代码向另一个用户发送消息 var url = "http://localhost:6001/
我是一名优秀的程序员,十分优秀!