diff --git a/soong_workflow/__manifest__.py b/soong_workflow/__manifest__.py
index 3e48abaca..d4bc1fe3f 100644
--- a/soong_workflow/__manifest__.py
+++ b/soong_workflow/__manifest__.py
@@ -11,7 +11,6 @@
"security/soong_workflow_security.xml",
"security/ir.model.access.csv",
"views/kklw_workflow_approval_views.xml",
- "views/menuitem.xml",
"views/soong_approval_users_views.xml",
"views/soong_note_views.xml",
"views/soong_hr_employee_views.xml",
@@ -22,6 +21,8 @@
"views/soong_workflow_record.xml",
"views/soong_approval_group.xml",
"views/trans_link_views.xml",
+ "views/soong_workflow_entrust_views.xml",
+ "views/menuitem.xml",
'wizard/approval_notice_wizard_views.xml',
"wizard/soong_workflow_comment_wizard_view.xml",
"templates/soong_workflow_templates.xml",
diff --git a/soong_workflow/models/__init__.py b/soong_workflow/models/__init__.py
index 0a79550a9..1cc856685 100644
--- a/soong_workflow/models/__init__.py
+++ b/soong_workflow/models/__init__.py
@@ -13,3 +13,4 @@ from . import soong_note
from . import soong_workflow_log
from . import soong_approval_group
from . import trans_link
+from . import soong_workflow_entrust
diff --git a/soong_workflow/models/ir_model.py b/soong_workflow/models/ir_model.py
index 65104478f..255a53e01 100644
--- a/soong_workflow/models/ir_model.py
+++ b/soong_workflow/models/ir_model.py
@@ -11,11 +11,7 @@ _logger = logging.getLogger(__name__)
class IrModel(models.Model):
_inherit = "ir.model"
- is_workflow = fields.Boolean(
- string="is Workflow",
- default=False,
- help="Whether the model supports workflow approval",
- )
+ is_workflow = fields.Boolean(string="is Workflow", default=False, help="Whether the model supports workflow approval")
def _reflect_model_params(self, model):
vals = super(IrModel, self)._reflect_model_params(model)
diff --git a/soong_workflow/models/soong_workflow.py b/soong_workflow/models/soong_workflow.py
index 08240eb8a..860cea02e 100644
--- a/soong_workflow/models/soong_workflow.py
+++ b/soong_workflow/models/soong_workflow.py
@@ -165,6 +165,7 @@ class SoongWorkflow(models.Model):
"sequence": 99,
"node_name": "end",
"flow_end": True,
+ "is_visible": False,
},), ]
return super().create(values)
diff --git a/soong_workflow/models/soong_workflow_entrust.py b/soong_workflow/models/soong_workflow_entrust.py
new file mode 100644
index 000000000..b2f73d676
--- /dev/null
+++ b/soong_workflow/models/soong_workflow_entrust.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+import logging
+import datetime
+from odoo import models, fields, api, _, modules
+from odoo.exceptions import ValidationError, UserError
+
+_logger = logging.getLogger(__name__)
+
+MODEL_DOMAIN = """[
+ ('is_workflow', '=', True),
+ ('state', '=', 'base'),
+ ('transient', '=', False),
+ '!',
+ '|',
+ '|',
+ '|',
+ '|',
+ '|',
+ '|',
+ '|',
+ ('model', '=ilike', 'res.%'),
+ ('model', '=ilike', 'ir.%'),
+ ('model', '=ilike', 'soong.workflow%'),
+ ('model', '=ilike', 'bus.%'),
+ ('model', '=ilike', 'base.%'),
+ ('model', '=ilike', 'base_%'),
+ ('model', '=', 'base'),
+ ('model', '=', '_unknown'),
+ ]"""
+
+
+class SoongWorkflowEntrust(models.Model):
+ _name = "soong.workflow.entrust"
+ _description = "工作流委托"
+
+ name = fields.Many2one("ir.model", string="名称", domain=MODEL_DOMAIN, default=lambda self: self.env['ir.model'].search([('model', '=', 'entrust.all')]))
+ entrust_user_id = fields.Many2one('res.users', string='委托人')
+ entrust_user_id2 = fields.Many2one('res.users', string='被委托人')
+ is_expiration_date = fields.Boolean(string="一直有效", default=True)
+ start_time = fields.Datetime(string="生效日期", copy=False, default=fields.Datetime.now)
+ end_time = fields.Datetime(string="失效日期", copy=False)
+ is_enable = fields.Boolean(string="是否启用", default=False, compute="compute_is_enable", store=True)
+ entrust_notice = fields.Boolean(string="发送事务提醒消息", default=True)
+
+ @api.depends('start_time', 'end_time')
+ def compute_is_enable(self):
+ for rec in self:
+ if rec.start_time and rec.end_time:
+ if rec.start_time < datetime.datetime.now() and rec.end_time > datetime.datetime.now() or rec.is_enable:
+ rec.is_enable = True
+ else:
+ rec.is_enable = False
+ else:
+ rec.is_enable = False
+
+
+class EntrustAll(models.Model):
+ _name = "entrust.all"
+ _inherit = 'soong.workflow.mixin'
+ _description = "全部流程"
+
+ name = fields.Char(string='name')
\ No newline at end of file
diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py
index 75df25d99..4e319e468 100644
--- a/soong_workflow/models/soong_workflow_mixin.py
+++ b/soong_workflow/models/soong_workflow_mixin.py
@@ -194,21 +194,20 @@ class SoongWorkflowMixin(models.AbstractModel):
@api.constrains("state")
def _update_wkf_records(self):
for rec in self:
- record_obj = self.env["soong.workflow.record"].search(
- [("res_model", "=", rec._name), ("res_id", "=", rec.id)]
- )
+ record_obj = self.env["soong.workflow.record"].search([("res_model", "=", rec._name), ("res_id", "=", rec.id)])
+ current_user_id = self.env.user.id
if not record_obj:
- record_obj = self.env["soong.workflow.record"].create(
- {
+ record_obj = self.env["soong.workflow.record"].create({
"res_model": rec._name,
"res_id": rec.id,
"workflow_id": rec.workflow_id.id,
"node_id": rec.node_id.id,
- }
- )
- record_obj.update(
- {"workflow_id": rec.workflow_id.id, "node_id": rec.node_id.id}
- )
+ "users_ids": [(4, current_user_id)],
+ })
+ record_obj.update({"workflow_id": rec.workflow_id.id,
+ "node_id": rec.node_id.id,
+ "users_ids": [(4, current_user_id)],
+ })
def unlink(self):
self.mapped("log_ids").unlink()
diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py
index 7dad1ad01..cf0d248a1 100644
--- a/soong_workflow/models/soong_workflow_record.py
+++ b/soong_workflow/models/soong_workflow_record.py
@@ -22,22 +22,10 @@ class SoongWorkflowRecord(models.Model):
name = fields.Char(string="Name", compute="compute_name", store=True)
res_model = fields.Char(string="Res Model", required=True)
res_id = fields.Integer(string="Res ID", required=True)
- workflow_id = fields.Many2one(
- comodel_name="soong.workflow", string="Workflow Ref.", ondelete="restrict"
- )
- node_id = fields.Many2one(
- comodel_name="soong.workflow.node", string="Workflow Node Ref."
- )
- approve_state = fields.Selection(
- [
- ("start", "Start"),
- ("pending", "Pending"),
- ("end", "End"),
- ],
- default="start",
- string="Approve Status",
- compute="_compute_node_id",
- )
+ users_ids = fields.Many2many('res.users', string="用户")
+ workflow_id = fields.Many2one(comodel_name="soong.workflow", string="审批类型", ondelete="restrict")
+ node_id = fields.Many2one(comodel_name="soong.workflow.node", string="当前节点")
+ approve_state = fields.Selection([("start", "开始"), ("pending", "审批中"), ("end", "结束")], default="start", string="审批状态", compute="_compute_node_id",)
@api.depends("node_id")
def _compute_node_id(self):
diff --git a/soong_workflow/security/ir.model.access.csv b/soong_workflow/security/ir.model.access.csv
index 59aca108f..fc11f8e25 100644
--- a/soong_workflow/security/ir.model.access.csv
+++ b/soong_workflow/security/ir.model.access.csv
@@ -24,4 +24,6 @@ access_soong_approval_notice_wizard,soong_approval_notice_wizard,model_soong_app
access_soong_workflow_log_user,soong_workflow_log_user,model_soong_workflow_log,soong_workflow.group_soong_workflow_user,1,1,1,1
access_soong_workflow_comment_wizard_user,soong_workflow_comment_wizard_user,model_soong_workflow_comment_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1
-access_trans_link,trans_link,model_trans_link,soong_workflow.group_soong_workflow_user,1,1,1,1
\ No newline at end of file
+access_trans_link,trans_link,model_trans_link,soong_workflow.group_soong_workflow_user,1,1,1,1
+access_soong_workflow_entrust,soong_workflow_entrust,model_soong_workflow_entrust,soong_workflow.group_soong_workflow_user,1,1,1,1
+access_entrust_all,entrust_all,model_entrust_all,soong_workflow.group_soong_workflow_user,1,1,1,1
\ No newline at end of file
diff --git a/soong_workflow/templates/soong_workflow_templates.xml b/soong_workflow/templates/soong_workflow_templates.xml
index bbacc6d2b..00a646d49 100644
--- a/soong_workflow/templates/soong_workflow_templates.xml
+++ b/soong_workflow/templates/soong_workflow_templates.xml
@@ -9,8 +9,8 @@
style="width:100%%; margin-top: 10px;"
>
-
-
+
+
diff --git a/soong_workflow/views/menuitem.xml b/soong_workflow/views/menuitem.xml
index 04f5077a6..62f1103dc 100644
--- a/soong_workflow/views/menuitem.xml
+++ b/soong_workflow/views/menuitem.xml
@@ -20,13 +20,42 @@
name="新的请求"
parent="menu_workflow_approval_request"
action="action_kklw_workflow_approval_request"
- sequence="200"/>
+ sequence="1"/>
+ action="soong_workflow_record_action"
+ sequence="3"/>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/soong_workflow/views/soong_approval_group.xml b/soong_workflow/views/soong_approval_group.xml
index bc2326d2e..2606a9aea 100644
--- a/soong_workflow/views/soong_approval_group.xml
+++ b/soong_workflow/views/soong_approval_group.xml
@@ -31,10 +31,4 @@
tree,form
-
\ No newline at end of file
diff --git a/soong_workflow/views/soong_note_views.xml b/soong_workflow/views/soong_note_views.xml
index 9e3d00a56..da75ef87c 100644
--- a/soong_workflow/views/soong_note_views.xml
+++ b/soong_workflow/views/soong_note_views.xml
@@ -32,15 +32,4 @@
{'search_default_type': True,}
-
-
-
diff --git a/soong_workflow/views/soong_workflow_entrust_views.xml b/soong_workflow/views/soong_workflow_entrust_views.xml
new file mode 100644
index 000000000..29ac3b0a9
--- /dev/null
+++ b/soong_workflow/views/soong_workflow_entrust_views.xml
@@ -0,0 +1,70 @@
+
+
+
+ soong.workflow.entrust.tree
+ soong.workflow.entrust
+
+
+
+
+
+
+
+
+
+
+
+
+
+ soong.workflow.entrust.form
+ soong.workflow.entrust
+
+
+
+
+
+
+ 工作委托
+ soong.workflow.entrust
+ tree,form
+
+
+
+
+ entrust.all.tree
+ entrust.all
+
+
+
+
+
+
+
+ entrust.all.form
+ entrust.all
+
+
+
+
+
\ No newline at end of file
diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml
index df7295121..4beef8ad0 100644
--- a/soong_workflow/views/soong_workflow_record.xml
+++ b/soong_workflow/views/soong_workflow_record.xml
@@ -1,7 +1,6 @@
-
+entrust
-
soong.workflow.record.search
soong.workflow.record
@@ -21,11 +20,9 @@
-
-
-
-
-
+
+
+
@@ -36,13 +33,13 @@
ir.actions.act_window
soong.workflow.record
tree,form
+ [('users_ids', 'in', [uid])]
-
-
+
+
+
+
+
diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py
index 3cbd4485f..231769ae3 100644
--- a/soong_workflow/wizard/soong_workflow_comment_wizard.py
+++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py
@@ -37,10 +37,10 @@ class SoongWorkflowCommentWizard(models.TransientModel):
# 转交逻辑--单线
if not self.node_link_len and self.node_btn_name == '转交':
state = self.node_btn_id.node_id.out_link_ids.name.split('-> ')[-1]
- record_id.write({'state': state})
+ record_id.write({'state': 'end' if state == '结束' else state})
# 转交逻辑--多线
if self.node_link_len:
- record_id.write({'state': self.trans_link_id.name})
+ record_id.write({'state': 'end' if self.trans_link_id.name == '结束' else self.trans_link_id.name})
if self.node_btn_name == '退回':
record_id.write({'state': 'start' if self.return_link_id.name == '经办人' else self.return_link_id.name})
# 填写审批记录
diff --git a/yuthon_notice/models/yuthon_notice.py b/yuthon_notice/models/yuthon_notice.py
index 7c7d6f98d..8a9a3f6e4 100644
--- a/yuthon_notice/models/yuthon_notice.py
+++ b/yuthon_notice/models/yuthon_notice.py
@@ -20,12 +20,11 @@ class YuthonNotice(models.Model):
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="公司", compute="_compute_company", store=True)
notice_type_id = fields.Many2one('yuthon.notice.type', string="公告类型")
create_date = fields.Date(string="发布日期")
- start_date = fields.Date(string="生效日期")
+ start_date = fields.Date(string="生效日期", default=fields.Date.today())
end_date = fields.Date(string="终止日期")
sequence = fields.Integer(string="顺序", default=1)
- statu = fields.Selection([('new', '草稿'), ('approval', '审批中'), ('done', '已通过'),
- ('stop', '已拒绝'), ('no', '未发布'), ('yes', '已发布')], default='new', string="公告状态")
- notice_documents_ids = fields.Many2many('documents.document', string="通知公告文件")
+ notice_state = fields.Selection([('no', '未发布'), ('yes', '已发布'), ('stop', '已终止')], default='no', string="公告状态")
+ notice_documents_ids = fields.Many2many('documents.document', string="附件")
is_notice_roger = fields.Selection([('yes', '已读'), ('no', '未读')], default='no', string="确认状态")
is_change_notice = fields.Boolean(string="是否发送通知", default=True)
notice_text = fields.Html(string="正文")
@@ -111,7 +110,7 @@ class YuthonNotice(models.Model):
# 关联待办和不关联待办
# partner_ids = self.sudo().env['res.users'].search([('id', 'in', publish_user_list)]).mapped('partner_id').ids
# self.sudo().with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_notice.message_yuthon_confirm_users_data')
- self.write({"statu": 'yes'})
+ self.write({"notice_state": 'yes'})
def look_up_notice_users(self):
return {
@@ -127,6 +126,6 @@ class YuthonNotice(models.Model):
def stop_notice(self):
self.write({
- 'statu': 'stop',
- 'end_date': fields.Datetime.now(),
+ 'notice_state': 'stop',
+ 'end_date': fields.Date.today(),
})
diff --git a/yuthon_notice/views/yuthon_notice_views.xml b/yuthon_notice/views/yuthon_notice_views.xml
index e2a798b92..84d0d9a68 100644
--- a/yuthon_notice/views/yuthon_notice_views.xml
+++ b/yuthon_notice/views/yuthon_notice_views.xml
@@ -13,7 +13,6 @@
-
@@ -29,11 +28,8 @@