[当我将收到产品的日期和数量更改为库存日期时创建一个方法。移动,我在班级声明为start_date = fields.Datetime()
def onchange_project(self, cr, uid,start_date):
"""
onchange handler of start date.
"""
pool_stockmove =self.pool.get('stock.move')
domain =[('date','>=',start_date)]
ids = pool_stockmove.search(cr, uid, domain)
此方法效果很好,但我想比较起始日期> =起始日期和日期<=起始日期之间的“库存日期”。我也想像hr_timesheet中的方法一样格式化日期
cr.execute('SELECT id \
FROM hr_timesheet_sheet_sheet \
WHERE (date_from <= %s and %s <= date_to) \
AND user_id=%s \
AND id <> %s',(sheet.date_to, sheet.date_from, new_user_id, sheet.id))
if cr.fetchall():
return False
谢谢
日期以字符串格式存储。您可以像在hr示例中一样使用sql进行比较,但是我建议使用ORM而不是原始sql进行比较。这样做更方便,建议始终使用它,因为sql
会避开用代码编写的安全性和其他检查(但在您的代码中可能并非如此)。
很难理解您想与哪个日期进行比较以及为什么不能这样做。
我猜你想做这样的事情:
[('date', '>=', 'start_date'), ('date', '<=', 'start_date')]
域被定义为元组列表。这种语法意味着默认情况下,在元组之间使用and
。您可以像这样指定它(但这是同一件事):
['&', ('date', '>=', 'start_date'), ('date', '<=', 'start_date')]
表示与上一行相同的内容(如果使用'|'
,则表示or
。]
Odoo damains使用波兰语表示法:https://en.wikipedia.org/wiki/Polish_notation
对于日期格式,如果需要,可以使用python模块datetime
更改日期格式。
您可以尝试这样的事情
cr.execute("SELECT id FROM hr_timesheet_sheet_sheet WHERE (date_from >= %s AND date_to <= %s) AND (user_id=%s) AND (id <> %s)",(sheet.date_from,sheet.date_to, new_user_id, sheet.id))
if cr.fetchall():
return False
我希望这对您有帮助:)
这是一个简单的例子:员工= self.env ['hr.employee']。search([],order ='姓名asc')
for employee in employees:
presence_count = self.env['hr.attendance'].search_count([
('employee_id', '=', employee.id),
('check_in', '>=', date_start_obj.strftime(DATETIME_FORMAT)),
('check_out', '<=', date_end_obj.strftime(DATETIME_FORMAT)),
])
absence_count = date_diff - presence_count
docs.append({
'employee': employee.name,
'presence': presence_count,
'absence': absence_count,
})