Для каждого участника и руководителя создается сущность assignment. В ней отображается текущий статус, а также хранится история статусов за год. Руководитель проекта по итогам цикла выставляет статус в поле Status. Также каждый цикл этот статус будет заноситься в историю статусов в соответствующий цикл, а номер цикла будет изменяться на следующий.
Если проект продолжается несколько лет, старый проект вместе с его данными об участниках будет архивирован и создан новый, при этом незакрытые задачи будут перенесены в новый проект. Таким образом можно будет продолжить проставлять статусы в новом для проекта году и сохранить историю статусов на прошедшие года.
assignments=env['project.assignment'].search([('project_id','=',record.id)])
assign=[]
for a in assignments:
text=text+str(a.user_id.id)
assign.append(a.user_id.id)
for x in record.x_members:
flag=0
for a in assign:
if x.id==a:
flag=1
if flag==0:
env['project.assignment'].create({
'role_id':6,
'user_id':x.id,
'project_id': record.id,
'company_id':1
})
date=record.create_date.strftime('%m-%d')
cycles=[[datetime.datetime( 2020,8, 31).strftime('%m-%d'),datetime.datetime( 2020,9, 27).strftime('%m-%d')],
[datetime.datetime( 2020,9, 28).strftime('%m-%d'),datetime.datetime( 2020,10, 25).strftime('%m-%d')],
[datetime.datetime( 2020,11, 2).strftime('%m-%d'),datetime.datetime( 2020,11, 29).strftime('%m-%d')],
[datetime.datetime( 2020,11, 30).strftime('%m-%d'),datetime.datetime( 2020,12, 27).strftime('%m-%d')],
[datetime.datetime( 2020,1, 11).strftime('%m-%d'),datetime.datetime( 2020,2, 7).strftime('%m-%d')],
[datetime.datetime( 2020,2, 8).strftime('%m-%d'),datetime.datetime( 2020,3, 7).strftime('%m-%d')],
[datetime.datetime( 2020,3, 8).strftime('%m-%d'),datetime.datetime( 2020,4, 4).strftime('%m-%d')],
[datetime.datetime( 2020,4, 5).strftime('%m-%d'),datetime.datetime( 2020,5, 2).strftime('%m-%d')],
[datetime.datetime( 2020,5, 10).strftime('%m-%d'),datetime.datetime( 2020,6, 6).strftime('%m-%d')],
[datetime.datetime( 2020,6,7).strftime('%m-%d'),datetime.datetime( 2020,7, 4).strftime('%m-%d')],
[datetime.datetime( 2020,6, 7).strftime('%m-%d'),datetime.datetime( 2020,7, 4).strftime('%m-%d')]
]
for cycle in cycles:
if date>cycle[0] and date<cycle[1]:
cycle_num=cycles.index(cycle)+1
record.write({'x_cycle_number':(cycle_num)})
assignments=env['project.assignment'].search([('project_id','=',record.id)])
assign=[]
for a in assignments:
text=text+str(a.user_id.id)
assign.append(a.user_id.id)
for x in record.x_members:
flag=0
for a in assign:
if x.id==a:
flag=1
if flag==0:
env['project.assignment'].create({
'role_id':6,
'user_id':x.id,
'project_id': record.id,
'company_id':1
})
env['project.assignment'].create({
'role_id':1,
'user_id':record.user_id.id,
'project_id': record.id,
'company_id':1
})
records=env['project.assignment'].search([('company_id','=',1)])
for record in records:
if record.x_cycle_number != 0:
cycle='x_cycle'+str(record.x_cycle_number)
record.write({cycle:record.role_id})
record.write({'x_cycle_number':record.x_cycle_number+1})
В группу Project Manager&Members добавить Access right на чтение и запись
Руководитель может изменять статусы участников
Добавить record rule для руководителя
Участник может видеть статусы всех участников проекта
Добавить record rule для участника
При импорте проектов, нужно создать их команд записи assignments. Для этого нужно создать scheduled action и запустить его 1 раз с помощью кнопки run manually.
records=env['project.project'].search([('x_project_number','>',0)])
for record in records:
for rec in record.x_members:
env['project.assignment'].create({
'role_id':5,
'user_id':rec.x_project_member.id,
'project_id': rec.id,
'company_id':1
})
env['project.assignment'].create({
'role_id':1,
'user_id':rec.user_id.id,
'project_id': rec.id,
'company_id':1
})