Skip to content

Commit

Permalink
Merge pull request #18 from granzonchen/fix_upload_item_data
Browse files Browse the repository at this point in the history
fix item
  • Loading branch information
granzonchen authored Oct 31, 2022
2 parents 51b1452 + c2f27e5 commit 2dc80ce
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 52 deletions.
112 changes: 63 additions & 49 deletions syd_process_maker/models/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,62 +54,76 @@ def create(self, vals):
return case


def confirm_case(self, result="pass"):
def confirm_case(self, upload_data=False):
"""
/tasks/{task_id} Update a task
"""
# TODO 通过process_id找到对应Process的Dynamic Form, 在Dynamic Form找到同名的Case并获取所需的字段
if result not in ['pass', 'refuse']:
if not upload_data:
upload_data={}
_result = upload_data.get('result')

if not self.process_id:
raise UserError("没有相应的流程!")
if not self.pm_case_id:
raise UserError("没有相应的任务!")
if _result and _result not in ['pass', 'refuse']:
raise ValidationError("审批结论传值错误,必须是pass或者refuse!")

if not self.process_id.dynamic_form_ids and len(self.process_id.dynamic_form_ids) == 0:
raise UserError("没有相应的Screen!")
if not self.process_id.dynamic_form_ids[0] and len(self.process_id.dynamic_form_ids[0].dynamic_form_items) == 0:
raise UserError("没有相应的Screen Item!")

_screen_record = self.env['syd_bpm.dynamic_form'].search([('id','=',int(self.process_id.dynamic_form_ids[0]))])
_screen_item_record = self.env['syd_bpm.dynamic_form_item'].search([('id','=',int(self.process_id.dynamic_form_ids[0].dynamic_form_items[0]))])
_related_record = self.env[self.related_model].search([('id','=',int(self.related_id))])
if _related_record.order_line and len(_related_record.order_line)>0:
_total = sum(_related_record.order_line.mapped('price_subtotal'))
upload_data.update({_screen_item_record.pm_screen_item_name:int(_total)})
_data = {
"status": "COMPLETED",
"data": {
"result": result
}
"data": upload_data
}
if self.process_id:
res = self.process_id.process_group_id._call(f'tasks/{self.pm_case_id}', jsonobject=json.dumps(_data), method='PUT')
if res:
if res.get('status') and res.get('status')=='CLOSED':
self.state='completed'
params = {
'process_request_id': int(self.activity_id.pm_activity_id)
}
pm_tasks = self.process_id.process_group_id._call('tasks', params, method='GET')
if pm_tasks.get('data'):
for item in pm_tasks.get('data'):
print(item)
_domain = [
('pm_case_id', '=', item.get('id')),
]
task = self.env['syd_bpm.case'].search(_domain)
if not task:
_state='in_progress'
if item.get('status') and item.get('status')=='CLOSED':
_state = 'cancelled'
elif item.get('status') and item.get('status')=='COMPLETED':
_state = 'completed'
_val = {
'pm_case_id': item.get('id'),
'name': item.get('element_name'),
'activity_id': self.activity_id.id,
'process_id': self.process_id.id,
'related_model':self.related_model,
'related_id':int(self.related_id) if isinstance(self.related_id, int) else str(self.related_id),
'state':_state,
'date_deadline': TimeConverterDate(item.get("due_at")),
}
_user = self.env['res.users'].search([('pm_user_id', '=', item.get('user_id'))])
res = self.process_id.process_group_id._call(f'tasks/{self.pm_case_id}', jsonobject=json.dumps(_data), method='PUT')
if res:
if res.get('status') and res.get('status')=='CLOSED':
self.state='completed'
params = {
'process_request_id': int(self.activity_id.pm_activity_id)
}
pm_tasks = self.process_id.process_group_id._call('tasks', params, method='GET')
if pm_tasks.get('data'):
for item in pm_tasks.get('data'):
print(item)
_domain = [
('pm_case_id', '=', item.get('id')),
]
task = self.env['syd_bpm.case'].search(_domain)
if not task:
_state='in_progress'
if item.get('status') and item.get('status')=='CLOSED':
_state = 'cancelled'
elif item.get('status') and item.get('status')=='COMPLETED':
_state = 'completed'
_val = {
'pm_case_id': item.get('id'),
'name': item.get('element_name'),
'activity_id': self.activity_id.id,
'process_id': self.process_id.id,
'related_model':self.related_model,
'related_id':int(self.related_id) if isinstance(self.related_id, int) else str(self.related_id),
'state':_state,
'date_deadline': TimeConverterDate(item.get("due_at")),
}
_user = self.env['res.users'].search([('pm_user_id', '=', item.get('user_id'))])

if _user:
_val.update({'pm_assigned_to': _user.id})
else:
_val.update({'pm_assigned_to': self.env['res.users'].search([],limit=1).id})
self.env['syd_bpm.case'].create(_val)
else:
_logger.warning(pm_tasks)
if _user:
_val.update({'pm_assigned_to': _user.id})
else:
_val.update({'pm_assigned_to': self.env['res.users'].search([],limit=1).id})
self.env['syd_bpm.case'].create(_val)
else:
_logger.warning("更细task没有成功...")
return True
_logger.warning(pm_tasks)
else:
_logger.warning("更新task没有成功...")
return True

5 changes: 2 additions & 3 deletions syd_process_maker/models/mail_activity.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def _action_done(self, feedback=False, attachment_ids=None):
if not pm_case:
raise UserError("找不到相应的工作流任务!")

pm_case.confirm_case(result=activity.bpm_action)
pm_case.confirm_case(upload_data={'result':activity.bpm_action})

# post message on activity, before deleting it
record = self.env[activity.res_model].browse(activity.res_id)
Expand Down Expand Up @@ -107,8 +107,7 @@ def unlink(self):
pm_case = self.env['syd_bpm.case'].search([('odoo_activity_id', '=', activity.id)])
if not pm_case:
raise UserError("找不到相应的工作流任务!")

pm_case.confirm_case(result='refuse')
pm_case.confirm_case(upload_data={'result':'refuse'})

# post message on activity, before deleting it
record = self.env[activity.res_model].browse(activity.res_id)
Expand Down

0 comments on commit 2dc80ce

Please sign in to comment.