我目前正在处理两个课程,现在我处理得很乱。请帮我解决这个问题
我需要做的是在" roster_allocation" class想要取消他/她分配的名单,然后为了这个目的,你必须通过" roster_substitution"类,它保留原始分配的记录并替换分配和日期和时间。一旦您通过该表输入记录,我想更新该特定的" roster_allocation"使用**" roster_substitute" **表中的substitute_employee_id更新现有employee_id的表记录。
这是我的两个班级
名册分配类
class roster_allocation(osv.osv):
_name="roster.allocation"
_description ="Allocate rosters on employees"
_columns={
'emp_id':fields.many2one('hr.employee','Employee'),
'department_id':fields.many2one('hr.department','Department'),
'roster_allocation_allocation':fields.one2many('roster.days.allocation','roster_allocation_connection','Days connection'),
'roster_time':fields.char('Take the related field roster_time.name'),
'monthly allocation':fields.char('Month') ,
'roster_rest_allocation':fields.one2many('roster.rest.days','roster_id','Rest Days'),
'roster_substitute':fields.one2many('roster.substitution','allocation_id','Substitution'),
roster_allocation()
名册天分配类(保留开始日期,名册类型和时段的记录)
class roster_days_allocation(osv.osv):
_name="roster.days.allocation"
_description = "To allocate days in to the already defined time slots"
def get_domain_useer_id(self,cr,uid,ids,roster_type_list,context=None):
mach=[]
filter = self.pool.get('roster.type').search(cr,uid,[('id','=',roster_type_list)])
return {'domain':{'roster_time_list':[('rostertype','=',filter)]}}
_columns={
'name':fields.char('Days_Allocation'),
'allocation_start_day':fields.date('Start Date',required=True),
'allocation_end_day':fields.date('End Date',required=True),
'type_connection':fields.one2many('roster.type','date_allocation_connection','Roster Type'),
'roster_type_list':fields.many2one('roster.type','Rosters'),
'roster_time_list':fields.many2one('roster.time','Time Slot'),
'roster_allocation_connection':fields.many2one('roster.allocation','Allocation Connection')
}
roster_days_allocation()
名册替换课程(保留最初分配的员工和替代员工的记录)
class roster_substitution(osv.osv):
_name="roster.substitution"
_description="Substituting employees "
_columns={
'allocation_id':fields.many2one('roster.allocation','Allocation'),
'employee':fields.many2one('hr.employee','Employee'),
'sub_employee':fields.many2one('hr.employee','Employee'),
'time_slot':fields.many2one('roster.time','Roster'),
'roster_day':fields.date('Day'),
'reason':fields.text('Reason'),
'department_id':fields.many2one('hr.department','Department'),
}
def onchange_date(self, cr, uid, ids, roster_date):
result = {'value': {'type': False}}
if type_id:
type = self.pool.get('roster.time').browse(cr, uid, roster_date)
result['value'] = {'time_slot': type.name.id}
return result
roster_substitution()
请帮我解决这个问题
答案 0 :(得分:0)
对不起,我一遍又一遍地阅读你的帖子,但我不明白你究竟想做什么(可能是因为你在代码和文本中用不同的方式命名了一些字段)。但无论如何:
我认为您必须修改emp_id
课程中的roster_allocation
。
'emp_id': fields.function(_creation_function,
type="many2one",
obj='hr.employee',
string='Employee',
store={
'roster.substitution': (_modify_function,
['field_that_change'],
10)}),
使用_creation_function
创建它时必须为emp_id值定义的函数。
_modify_function
将在'roster.substitution'中修改field_that_change
时修改emp_id的函数。
这是因为onchange不允许您从model_B修改model_A中的字段。它不会在数据库中保存任何内容,除非在屏幕上修改了由于onchange而更新的字段,然后保存。
如果你想添加一些你想要留意的字段,可以在['field_that_change', 'second_field']
中添加它们,如果在同一个对象中,或者在商店中添加第二个具有相同语法的对象。