Python 3.x 如何通过修改考勤申请更新考勤字段
我用的是奥多11。我正在处理考勤模块,我想创建一个由经理批准的考勤修改请求(创建新的考勤或修改已存在的考勤),并自动更新考勤。问题是,当我按下Approve时,我的请求被批准,但出席人数没有更新(在hr.Attention模型中)。有什么好主意吗?? 这是我的密码 正则化Python 3.x 如何通过修改考勤申请更新考勤字段,python-3.x,odoo-11,Python 3.x,Odoo 11,我用的是奥多11。我正在处理考勤模块,我想创建一个由经理批准的考勤修改请求(创建新的考勤或修改已存在的考勤),并自动更新考勤。问题是,当我按下Approve时,我的请求被批准,但出席人数没有更新(在hr.Attention模型中)。有什么好主意吗?? 这是我的密码 正则化 class Regular(models.Model): _name = 'attendance.regular' _rec_name = 'employee' _description = 'Approval Reques
class Regular(models.Model):
_name = 'attendance.regular'
_rec_name = 'employee'
_description = 'Approval Request'
_inherit = ['mail.thread', 'mail.activity.mixin']
def _get_employee_id(self):
employee_rec = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
return employee_rec.id
reg_category = fields.Many2one('reg.categories',
string='Regularization Category', required=True)
from_date = fields.Datetime(string='Check in', required=False)
to_date = fields.Datetime(string='Check out', required=False)
reg_reason = fields.Text(string='Reason', required=False)
employee = fields.Many2one('hr.employee', string="Employee", default=_get_employee_id, readonly=False, required=True)
state_select = fields.Selection([('draft', 'Draft'), ('requested', 'Requested'), ('reject', 'Rejected'),
('approved', 'Approved')
], default='draft', track_visibility='onchange', string='State')
attendance_id = fields.Many2one('hr.attendance', string='Attendance')
@api.multi
def submit_reg(self):
self.ensure_one()
self.sudo().write({
'state_select': 'requested'
})
return
@api.multi
def regular_approval(self):
for record in self:
if self.reg_category.type ==" Check in":
record.attendance_id.check_in = record.from_date
record.attendance_id.employee_id = record.employee.id
elif self.reg_category.type ==" Check out":
record.attendance_id.check_out = record.to_date
record.attendance_id.employee_id = record.employee.id
return self.write({ 'state_select': 'approved' })
正则化.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="attendance_regular11" model="ir.ui.view">
<field name="name">attend.regular</field>
<field name="model">attendance.regular</field>
<field name="arch" type="xml">
<form string="Regularization">
<header>
<button name="submit_reg" string="Submit" type="object" class="btn-primary"
attrs="{'invisible': [('state_select','not in','draft')]}"/>
<button name="regular_approval" type="object" string="Approve" class="oe_highlight"
groups="hr_attendance.group_hr_attendance_manager"
attrs="{'invisible': [('state_select','not in','requested')]}"/>
<button name="regular_rejection" type="object" string="Reject" class="oe_highlight"
groups="hr_attendance.group_hr_attendance_manager"
attrs="{'invisible': [('state_select','not in','requested')]}"/>
<field name="state_select" widget="statusbar" statusbar_visible="draft,requested,approved"/>
</header>
<sheet>
<group col="4" colspan="4">
<field name="reg_category"/>
<field name="from_date" attrs="{'invisible':[('reg_category', '=',5)]}" />
<field name="reg_reason"/>
<field name="to_date" attrs="{'invisible':[('reg_category', '=',4)]}"/>
<field name="employee"/>
</group>
</sheet>
<field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</form>
</field>
</record>
定期参加
出席率
我想问题在于您选择的字段类型
字段。很多字段都是one
。
它应该是m2m型的。
我给你举了一个类似的例子
课程表
开放学院课程
这是笔记本电脑的一个例子
session.form
openacademy.session
课堂课程(models.Model):
_name='openacademy.course'
name=fields.Char(string=“Title”,required=True)
description=字段。Text()
responsible\u id=fields.manyOne('res.users',ondelete='set null',string='responsible',index=True)
session\u id=fields.One2many('openacademy.session','course\u id',string=“Sessions”)
# 去改寫行动的复制品
@api.multi
def副本(自身,默认值=无):
default=dict(默认值或{})
复制的_count=self.search_count([('name','=like',u“拷贝{}%.”格式(self.name)))
如果未复制\u计数:
new_name=u“拷贝{}”。格式(self.name)
其他:
new_name=u“复制{}({})”格式(self.name,复制的_计数)
默认值['name']=新名称
返回超级(课程,自我)。复制(默认)
#解除链接是 改寫行动的删除
_sql_约束=[
(“名称、说明、检查”,
'检查(名称!=说明)',
“课程名称不应为描述”),
('name_unique',
“唯一(名称)”,
“课程名称必须是唯一的”),
]
课堂会话(models.Model):
_name='openacademy.session'
name=fields.Char(必需=True)
开始日期=fields.date(默认值=fields.date.today)
持续时间=字段。浮点(数字=(6,2),help=“持续时间(以天为单位)”
席位=字段。整数(字符串=“席位数”)
active=fields.Boolean(默认值=True)
color=fields.Integer()
讲师id=fields.manyOne('res.partner',string=“讲师”,domain=['|',('讲师','=',True),('category\u id.name','ilike','Teacher”))
课程id=fields.manyOne('openacademy.course',ondelete='cascade',string='course',required=True)
attendee_id=fields.Many2many('res.partner',string=“Attendes”)
taked_seats=fields.Float(string=“taked seats”,compute=''taked_seats')
结束日期=字段.date(string=“结束日期”,store=True,compute=''获取结束日期',inverse=''设置结束日期')
小时数=字段。浮点(字符串=“持续时间(小时)”,计算=“”“获取小时数”,反转=“”“设置小时数”)
与会者人数=fields.Integer(string=“attendees count”,compute=''获取与会者人数,store=True)
状态=字段。选择([('draft','draft'),('confirmed','confirmed'),('done','done'),],默认值为'draft')
@api.multi
def行动计划草案(自我):
self.state='draft'
@api.multi
def动作确认(自我):
self.state=‘已确认’
@api.multi
def操作完成(自我):
self.state='done'
@api.视情况而定(“座位”、“与会者ID”)
def_已就座(自行):
对于r本身:
如果不是右座:
r、 就座率=0.0
其他:
r、 已就座=100.0*len(r.与会者ID)/r.座位
@api.dependens(‘与会者ID’)
def(获取)出席人数(自我):
对于r本身:
r、 与会者人数=len(r.与会者ID)
@api.dependens(‘持续时间’)
定义获取小时数(自我):
对于r本身:
r、 小时=持续时间*24
定义设置小时数(自):
对于r本身:
r、 持续时间=r.h/24
@api.dependens('开始日期','持续时间')
定义获取结束日期(自我):
对于r本身:
如果不是(r.开始日期和r.持续时间):
r、 结束日期=r.开始日期
持续
开始=字段.Datetime.from\u字符串(r.start\u日期)
持续时间=时间增量(天数=持续时间,秒=-1)
r、 结束日期=开始+持续时间
定义设置结束日期(自):
对于r本身:
如果不是(r.开始日期和r.结束日期):
持续
开始日期=fiel