This commit is contained in:
pengyuthon
2026-05-18 16:53:19 +08:00
158 changed files with 1711 additions and 986 deletions
+14 -11
View File
@@ -82,26 +82,30 @@ class AttendanceIot(models.Model):
# 发送开门信号
def action_send_open_door_sigle(self):
for record in self:
msg = {
'cmd': 'setDoor',
'value': 'on'
}
msg.pop('face_template', None)
self.env['iot.message'].create([{
'name': '开门',
'topic': f'iot/device/{record.name}',
'device_sn': record.name,
'message_data': json.dumps({
'cmd': 'setDoor',
'value': 'on'
}, ensure_ascii=False)
'message_data': json.dumps(msg, ensure_ascii=False)
}])
def action_send_close_door_sigle(self):
for record in self:
msg = {
'cmd': 'setDoor',
'value': 'off'
}
msg.pop('face_template', None)
self.env['iot.message'].create([{
'name': '开门',
'topic': f'iot/device/{record.name}',
'device_sn': record.name,
'message_data': json.dumps({
'cmd': 'setDoor',
'value': 'off'
}, ensure_ascii=False)
'message_data': json.dumps(msg, ensure_ascii=False)
}])
def action_view_logs(self):
@@ -110,10 +114,9 @@ class AttendanceIot(models.Model):
return {
'name': '考勤机日志',
'type': 'ir.actions.act_window',
'res_model': 'attendance.iot.log',
'res_model': 'iot.message',
'view_mode': 'tree,form',
'domain': [('attendance_iot_id', '=', self.id)],
'context': {'default_attendance_iot_id': self.id},
'domain': [('device_sn', '=', self.name)],
}
@@ -13,9 +13,9 @@
<!-- <field name="broker" optional="hide"/>-->
<!-- <field name="port" optional="hide"/>-->
<!-- <field name="id_valid" optional="hide"/>-->
<field name="company_id"/>
<field name="company_id" column_invisible="1"/>
<field name="number"/>
<field name="remake"/>
<field name="remake" column_invisible="1"/>
<field name="is_connected"/>
<button name="open_record" type="object" string="详情" class="btn btn-blue"/>
<button name="action_view_logs" type="object" string="日志" class="btn btn-blue"/>
-6
View File
@@ -138,12 +138,6 @@
<button name="sync_wechat_room" string="同步企业微信" type="object" class="oe_highlight" invisible="not work_end"/>
<button name="action_print_room_booking_agenda" string="打印" type="object" class="btn-primary"/>
</header>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
+5 -9
View File
@@ -91,15 +91,11 @@ class SoongWorkflow(models.Model):
soong_ids = self.env["soong.workflow"].browse(
self._context.get('active_ids', self._context.get('active_id'))
)
for node in soong_ids.node_ids:
confirm_buttons = node.button_ids.filtered(lambda btn: btn.name == '确认')
if not confirm_buttons:
self.env['soong.workflow.node.button'].create({
'node_id': node.id,
'name': '确认',
'action_type': 'code',
"has_comment": True
})
for workflow in soong_ids:
nodes = workflow.node_ids.sorted('sequence')
for node in nodes[1:]:
node.is_apostille = True
node.onchange_is_apostille()
def change_opinions_wizard(self):
soong_ids = self.env["soong.workflow"].browse(
@@ -47,6 +47,8 @@ class SoongWorkflowLog(models.Model):
for rec in self:
if rec.name == '归档':
rec.name = '归档'
elif rec.name == '加签':
rec.name = '加签'
elif rec.node_id:
rec.name = "%(node_id_name)s" % {"node_id_name": rec.node_id.name}
else:
+159 -74
View File
@@ -90,6 +90,60 @@ class SoongWorkflowMixin(models.AbstractModel):
is_end = fields.Boolean(string="未结束", compute='_compute_is_confirm', store=False,)
is_done = fields.Boolean(string="已办", compute='_compute_is_done', store=False,)
is_send = fields.Boolean(string="是否分发", compute='_compute_is_send', store=False,)
is_show_add_sign = fields.Boolean(string="显示加签按钮", compute='_compute_is_show_add_sign')
is_show_transfer = fields.Boolean(string="显示加签确认按钮", compute='_compute_is_show_transfer')
approval_result = fields.Selection([('pass', '通过'), ('fail', '不通过')], string="审批结果")
def _compute_is_show_add_sign(self):
for record in self:
record.is_show_add_sign = True
domain_hide_01 = [
('workflow_id', '=', record.workflow_id.id),
('res_id', '=', record.id),
('name', '=', '加签'),
('approval_state', 'in', ['0', '1']),
]
has_01 = record.log_ids.search(domain_hide_01)
domain_hide_done = [
('workflow_id', '=', record.workflow_id.id),
('res_id', '=', record.id),
('name', '=', '加签'),
('approval_state', '=', '2'),
('done_by', '=', self.env.user.id),
]
has_done = record.log_ids.search(domain_hide_done)
# 如果有日志,取【第一个节点】的经办人 == 当前登录人 → 隐藏
has_first_user = False
if record.log_ids:
first_log = record.log_ids.sorted('sequence')[:1]
if first_log and first_log.done_by == self.env.user:
has_first_user = True
# :判断当前登录人是否在 log_ids2 中
has_log_ids2_user = False
if record.log_ids2:
has_log_ids2_user = self.env.user.id in record.log_ids2.mapped('done_by.id')
# 任意一个条件满足 → 隐藏
if has_01 or has_done or has_first_user or has_log_ids2_user:
record.is_show_add_sign = False
def _compute_is_show_transfer(self):
for record in self:
record.is_show_transfer = False
domain_has_sign = [
('workflow_id', '=', record.workflow_id.id),
('res_id', '=', record.id),
('name', '=', '加签'),
('approval_state', 'in', ['0', '1']),
('done_by', '=', self.env.user.id),
]
has_sign_ok = record.log_ids.search(domain_has_sign)
if has_sign_ok:
record.is_show_transfer = True
def _compute_is_send(self):
for record in self:
@@ -263,21 +317,11 @@ class SoongWorkflowMixin(models.AbstractModel):
"""
返回用于打印的审批日志列表:
- 按与界面相同的顺序(sequence 升序)
- 同名节点只保留最新一条
- 保留所有审批记录(包括重复节点,如申请人多次申请)
- 可选:申请人置顶
"""
self.ensure_one()
logs = self.log_ids.sorted('sequence')
seen = set()
ordered = []
# 逆序去重,保留最新
for log in reversed(logs):
key = log.name or ''
if key in seen:
continue
seen.add(key)
ordered.append(log)
ordered.reverse() # 恢复原有顺序(去重后)
ordered = self.log_ids.sorted('sequence')
if applicant_first:
applicants = [l for l in ordered if (l.name or '') == '申请人']
others = [l for l in ordered if (l.name or '') != '申请人']
@@ -365,60 +409,60 @@ class SoongWorkflowMixin(models.AbstractModel):
cx.update({"active_id": self.id, "active_ids": self.ids})
wkf_btn_obj = self.env["soong.workflow.node.button"]
btn_rec = wkf_btn_obj.search([("btn_key", "=", cx.get("btn_key", False))])
# 优化弹窗
# # 优化弹窗
if btn_rec:
log_obj = self._create_update_logs(btn_rec)
# 判断加签
if btn_rec.name in ["加签"]:
# 弹窗 进行填写 人员
wizard = self.env.ref("soong_workflow.view_soong_workflow_apostille_wizard")
return {
"name": _("添加加签人员"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "soong.workflow.apostille.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
"context": {
"default_res_id": self.id,
"default_res_model": self._name,
"default_log_ids": log_obj.ids,
"default_node_btn_id": btn_rec.id,
},
}
if btn_rec.name in ["加签确认"]:
# 弹窗 进行填写 人员
wizard = self.env.ref("soong_workflow.view_soong_workflow_apostille_ok_wizard")
return {
"name": _("添加加签人员"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "soong.workflow.apostille.ok.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
"context": {
"default_res_id": self.id,
"default_res_model": self._name,
"default_log_ids": log_obj.ids,
"default_node_btn_id": btn_rec.id,
},
}
if btn_rec.name not in ["加签", "加签确认"]:
# 判断当前是否所有加签都已经结束
apostille_log_obj = self.sudo().env["soong.workflow.log"].search(
[
("model", "=", self._name),
("res_id", "=", self.id),
("node_id", "=", btn_rec.node_id.id),
("workflow_id", "=", btn_rec.workflow_id.id),
("node_btn_name", "=", "2"),
("approval_state", "!=", "2")
]
)
if apostille_log_obj:
raise UserError("当前加签人员还有没有审批完成的!")
# # 判断加签
# if btn_rec.name in ["加签"]:
# # 弹窗 进行填写 人员
# wizard = self.env.ref("soong_workflow.view_soong_workflow_apostille_wizard")
# return {
# "name": _("添加加签人员"),
# "type": "ir.actions.act_window",
# "view_mode": "form",
# "res_model": "soong.workflow.apostille.wizard",
# "views": [(wizard.id, "form")],
# "view_id": wizard.id,
# "target": "new",
# "context": {
# "default_res_id": self.id,
# "default_res_model": self._name,
# "default_log_ids": log_obj.ids,
# "default_node_btn_id": btn_rec.id,
# },
# }
# if btn_rec.name in ["加签确认"]:
# # 弹窗 进行填写 人员
# wizard = self.env.ref("soong_workflow.view_soong_workflow_apostille_ok_wizard")
# return {
# "name": _("添加加签人员"),
# "type": "ir.actions.act_window",
# "view_mode": "form",
# "res_model": "soong.workflow.apostille.ok.wizard",
# "views": [(wizard.id, "form")],
# "view_id": wizard.id,
# "target": "new",
# "context": {
# "default_res_id": self.id,
# "default_res_model": self._name,
# "default_log_ids": log_obj.ids,
# "default_node_btn_id": btn_rec.id,
# },
# }
# if btn_rec.name not in ["加签", "加签确认"]:
# # 判断当前是否所有加签都已经结束
# apostille_log_obj = self.sudo().env["soong.workflow.log"].search(
# [
# ("model", "=", self._name),
# ("res_id", "=", self.id),
# ("node_id", "=", btn_rec.node_id.id),
# ("workflow_id", "=", btn_rec.workflow_id.id),
# ("node_btn_name", "=", "2"),
# ("approval_state", "!=", "2")
# ]
# )
# if apostille_log_obj:
# raise UserError("当前加签人员还有没有审批完成的!")
# 继续正常流程
# if btn_rec.has_comment:
return self.with_context(cx)._add_comment(log_obj, btn_rec)
@@ -1199,19 +1243,24 @@ class SoongWorkflowMixin(models.AbstractModel):
id_el = etree.Element("field")
id_el.set("name", "log_ids")
id_el.set("invisible", "1")
invisible += " or not log_ids or is_done"
invisible += " or not log_ids or is_done or is_show_transfer"
if button.name == "分发":
btn_exec_action_el.set("class", "btn btn-distribute")
invisible += " or not is_send"
if button.name == "转交":
btn_exec_action_el.set("class", "btn btn-transfer")
invisible += " or is_done"
invisible += " or is_done or is_show_transfer"
if button.name == "加签确认":
invisible += "or not is_show_transfer"
if button.name == "收回":
btn_exec_action_el.set("class", "btn btn-recall")
id_el = etree.Element("field")
id_el.set("name", "log_ids")
id_el.set("invisible", "1")
invisible += " or not log_ids or not is_back"
if button.name == "加签":
btn_exec_action_el.set("class", "btn btn-recall")
invisible += "or not is_show_add_sign"
if button.name == '归档':
btn_exec_action_el.set("class", "btn btn-archive")
invisible += "or not is_active"
@@ -1308,6 +1357,37 @@ class SoongWorkflowMixin(models.AbstractModel):
send_el.set("invisible", "1")
header_el.append(send_el)
sign_el = etree.Element("field")
sign_el.set("name", "is_show_add_sign")
sign_el.set("invisible", "1")
header_el.append(sign_el)
approval_el = etree.Element("field")
approval_el.set("name", "approval_result")
approval_el.set("invisible", "1")
header_el.append(approval_el)
if header_el:
# 彩带
ribbon_pass = etree.Element("widget")
ribbon_pass.set("name", "web_ribbon")
ribbon_pass.set("title", "通过")
ribbon_pass.set("bg_color", "text-bg-success")
ribbon_pass.set("invisible", "approval_result != 'pass'")
header_el.insert(0, ribbon_pass)
ribbon_fail = etree.Element("widget")
ribbon_fail.set("name", "web_ribbon")
ribbon_fail.set("title", "不通过")
ribbon_fail.set("bg_color", "text-bg-danger")
ribbon_fail.set("invisible", "approval_result != 'fail'")
header_el.insert(0, ribbon_fail)
is_transfer_el = etree.Element("field")
is_transfer_el.set("name", "is_show_transfer")
is_transfer_el.set("invisible", "1")
header_el.append(is_transfer_el)
done_el = etree.Element("field")
done_el.set("name", "is_done")
done_el.set("invisible", "1")
@@ -1461,7 +1541,9 @@ class SoongWorkflowMixin(models.AbstractModel):
def _get_external_id(group):
arr = []
ext_ids = group._get_external_ids()
_logger.info(f"--------{ext_ids}")
for ext_id in ext_ids:
_logger.info(f"--------{ext_id}")
arr.append(ext_ids[ext_id][0])
return arr
@@ -1503,14 +1585,17 @@ class SoongWorkflowMixin(models.AbstractModel):
user_rec = user_obj.browse(uid)
if user_rec not in field_attrs.user_ids:
flag_show = False
if field_attrs.group_ids:
has_group = False
user_rec = user_obj.browse(uid)
ext_ids = _get_external_id(field_attrs.group_ids)
for ext_id in ext_ids:
has_group = user_rec.has_group(ext_id)
if not has_group:
flag_show = False
# if field_attrs.group_ids:
# has_group = False
# user_rec = user_obj.browse(uid)
# _logger.info(f"-----{field_attrs.name}")
# _logger.info(f"-----{field_attrs.name.name}")
# _logger.info(f"-----{field_attrs.group_ids}")
# ext_ids = _get_external_id(field_attrs.group_ids)
# for ext_id in ext_ids:
# has_group = user_rec.has_group(ext_id)
# if not has_group:
# flag_show = False
if not flag_show and (field_attrs.group_ids or field_attrs.user_ids):
invisible_arr.append(node.node_name)
if readonly_arr:
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" readonly="1"/>
@@ -259,7 +259,7 @@
<field name="approve_state" string="审批状态" widget="badge"
decoration-danger="approve_state == 'end'" decoration-success="approve_state == 'pending'"/>
<field name="create_uid"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" class="list_ids_width" column_invisible="1"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" column_invisible="1"/>
<field name="soong_state" column_invisible="True"/><field name="display_end_time" string="到达时间" optional="show"/>
<field name="is_manager" column_invisible="1"/>
<field name="is_unlink" column_invisible="1"/>
@@ -329,7 +329,7 @@
<field name="approve_state" string="审批状态" widget="badge"
decoration-danger="approve_state == 'end'" decoration-success="approve_state == 'pending'"/>
<field name="create_uid"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" class="list_ids_width" column_invisible="True"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" column_invisible="True"/>
<field name="soong_state" column_invisible="True"/>
<field name="is_manager" column_invisible="1"/>
<field name="is_log2" column_invisible="1"/>
@@ -362,7 +362,7 @@
<field name="approve_state" string="审批状态" widget="badge"
decoration-danger="approve_state == 'end'" decoration-success="approve_state == 'pending'"/>
<field name="create_uid"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" class="list_ids_width" column_invisible="1"/>
<field name="employee_ids" widget="many2many_tags" string="当前经办人" column_invisible="1"/>
<field name="soong_state" column_invisible="True"/><field name="display_end_time" string="办结时间" optional="show"/>
<field name="is_manager" column_invisible="1"/>
</tree>
@@ -45,7 +45,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
employee_trans_domain_ids = fields.Many2many('hr.employee', 'employee_trans_domain_ids_rel', string="传阅人员", store=True)
employee_ids = fields.Many2many('hr.employee', 'employee_ids_rel', 'custom_id', 'employee_id', string="转交人员", store=True)
circulated_employee_ids = fields.Many2many('hr.employee', 'circulated_employee_rel', 'custom_id', 'employee_id', help='只可以看不可以评论,看过以后状态自动变为已阅', string="加签人员", store=True)
circulated_employee_ids = fields.Many2many('hr.employee', 'circulated_employee_rel', 'custom_id', 'employee_id', help='只可以看不可以评论,看过以后状态自动变为已阅', string="传阅人员", store=True)
dep_manager_employee_ids = fields.Many2many('hr.employee', 'dep_manager_employee_rel', 'custom_id', 'employee_id', string="承办", store=True)
add_employee_ids = fields.Many2many('hr.employee', 'add_employee_rel', 'custom_id', 'employee_id', string="加签人员", help='点击确认以后评论的人员', store=True)
supervising_employee_ids = fields.Many2many('hr.employee', 'supervising_employee_rel', 'custom_id', 'employee_id', string="督办人员", store=True)
@@ -54,38 +54,81 @@ class SoongWorkflowCommentWizard(models.TransientModel):
'串:都会收到消息,但任意一个人转交后,即到下一节点,其他人将不再显示,相当于收回.')
is_automatic = fields.Boolean('是否自动匹配')
company_id = fields.Many2one('res.company', '公司', default=lambda self: self.env.user.company_id)
is_this_company = fields.Boolean('本公司', default=True)
scope_type = fields.Selection(
[
('company', '本公司'),
('group', '本集团'),
('department', '本部门'),
],
string='范围类型',
default='company',
required=True,
)
employee_ids1 = fields.Many2many('hr.employee', 'employee_ids1_rel', 'custom_id1', 'employee_id1', string="人员范围", store=True)
employee_ids2 = fields.Many2many('hr.employee', 'employee_ids2_rel', 'custom_id2', 'employee_id2', string="加签传阅人员过滤")
@api.onchange('is_selection')
def _onchange_is_selection(self):
domain = [('id', 'in', self.employee_ids1.ids)]
if self.is_selection:
if self.is_this_company:
domain.append(('company_id', '=', self.company_id.id))
all_employees = self.env['hr.employee'].search(domain)
self.employee_ids = all_employees
else:
if not self.employee_ids1:
self.employee_ids = False
return
domain = [('id', 'in', self.employee_ids1.ids)]
if self.scope_type == 'company':
domain.append(('company_id', '=', self.company_id.id))
elif self.scope_type == 'group':
pass
elif self.scope_type == 'department':
department = self.env.user.department_id
if department:
all_depts = department.child_ids | department
domain.extend([
('company_id', '=', self.company_id.id),
'|',
('department_id', 'in', all_depts.ids),
('department_ids', 'in', all_depts.ids),
])
all_employees = self.env['hr.employee'].search(domain)
self.employee_ids = all_employees if self.is_selection else False
@api.onchange('employee_ids1')
@api.onchange('scope_type', 'employee_ids1', 'department_id', 'company_id')
def _onchange_employee_ids1(self):
if not self.employee_ids1:
self.employee_ids = False
return
filtered_employees = self.employee_ids1
if self.is_this_company:
# 范围过滤
if self.scope_type == 'company':
filtered_employees = self.employee_ids1.filtered(
lambda emp: emp.company_id.id == self.company_id.id
lambda e: e.company_id == self.company_id
)
elif self.scope_type == 'department':
department = self.env.user.department_id
if department:
all_depts = department.child_ids | department
filtered_employees = self.employee_ids1.filtered(
lambda e: e.department_id in all_depts or any(d in all_depts for d in e.department_ids)
)
if len(filtered_employees) == 1:
self.employee_ids = filtered_employees
else:
domain = [('id', 'in', self.employee_ids1.ids)]
if self.is_selection:
if self.is_this_company:
domain.append(('company_id', '=', self.company_id.id))
all_employees = self.env['hr.employee'].search(domain)
self.employee_ids = all_employees
else:
self.employee_ids = False
return
@api.onchange('scope_type', 'department_id', 'company_id')
def _onchange_employee_ids2(self):
domain = []
if self.scope_type == 'company':
domain.append(('company_id', '=', self.company_id.id))
elif self.scope_type == 'department':
department = self.env.user.department_id
if department:
all_depts = department.child_ids | department
domain.extend([
('company_id', '=', self.company_id.id),
'|',
('department_id', 'in', all_depts.ids),
('department_ids', 'in', all_depts.ids),
])
self.employee_ids2 = self.env['hr.employee'].search(domain)
@api.depends('comment_note_id', 'comment_note')
def _compute_comment(self):
@@ -170,9 +213,9 @@ class SoongWorkflowCommentWizard(models.TransientModel):
record.is_selection = False
if self.node_btn_name == '退回':
record.is_this_company = False
record.scope_type = 'group'
else:
record.is_this_company = True
record.scope_type = 'company'
if record.node_btn_id.employee_ids and record.node_btn_id.is_carbon_copy:
record.circulated_employee_ids = record.node_btn_id.employee_ids
@@ -259,8 +302,6 @@ class SoongWorkflowCommentWizard(models.TransientModel):
button = target_btn
break
if button:
if button.is_automatic_group:
record.is_this_company = False
if button.is_node_automatic:
record.is_selection = True
record._onchange_is_selection()
@@ -577,8 +618,149 @@ class SoongWorkflowCommentWizard(models.TransientModel):
user_id=employee.wecom_userid,
title=record_id._description + "退回",
description=description, url=url, btntxt="查看详情")
if self.node_btn_name == '加签':
current_node_log = self.sudo().env["soong.workflow.log"].search(
[
("model", "=", self.res_model),
("res_id", "=", self.res_id),
("done_by", "=", self.env.user.id),
("node_id", "=", self.node_btn_id.node_id.id),
],
order="create_date DESC",
limit=1
)
current_node_log.write({
"comment": self.comment,
"approval_state": "2", # 已完成
'document_ids': [(6, 0, self.document_ids.ids)],
"lase_click_date": fields.Datetime.now()
})
if hasattr(record_id, 'user_id') and record_id.user_id:
query_user_id = record_id.user_id
elif hasattr(record_id, 'users_id') and record_id.users_id:
query_user_id = record_id.users_id
description = f"标题:{record_id.name}\n申请人:{query_user_id.name}"
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
for employee_id in self.add_employee_ids:
next_node_log_records = self.sudo().env["soong.workflow.log"].create({
'name': '加签',
"code": self.code,
"model": self.res_model,
"res_id": self.res_id,
"node_id": self.node_btn_id.node_id.id,
"workflow_id": self.node_btn_id.workflow_id.id,
"done_by": employee_id.user_id.id,
"node_btn_id": self.node_btn_id.id,
"approval_state": "0",
})
url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&menu_id={record_id.id}&action={action_id.id}&model={self.res_model}&view_type=form'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
user_id=employee_id.wecom_userid,
title=record_id._description + "加签",
description=description, url=url,
btntxt="查看详情")
if result_data and 'msgid' in result_data[-1]:
msg_id = result_data[-1]['msgid']
target_logs = next_node_log_records.filtered(lambda l: l.done_by.id == employee_id.user_id.id)
if target_logs:
target_logs.msg_id = msg_id
workflow_record_id = self.env['soong.workflow.record'].sudo().search([('res_id', '=', record_id.id),
('res_model', '=', record_id._name)
])
workflow_record_id.employee_ids = self.add_employee_ids
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.add_employee_ids if
employee.user_id]
if self.node_btn_name == '加签确认':
if hasattr(record_id, 'user_id') and record_id.user_id:
query_user_id = record_id.user_id
elif hasattr(record_id, 'users_id') and record_id.users_id:
query_user_id = record_id.users_id
description = f"标题:{record_id.name}\n申请人:{query_user_id.name}"
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
user_log = record_id.log_ids.filtered(
lambda log: log.done_by == self.env.user.id and log.node_btn_name != '1' and log.approval_state in ['0',
'1']
)
current_node_log = self.sudo().env["soong.workflow.log"].search(
[
("model", "=", self.res_model),
("res_id", "=", self.res_id),
("done_by", "=", self.env.user.id),
("node_id", "=", self.node_btn_id.node_id.id),
],
order="create_date DESC",
limit=1
)
current_node_log.write({
"comment": self.comment,
"approval_state": "2", # 已完成
'document_ids': [(6, 0, self.document_ids.ids)],
"lase_click_date": fields.Datetime.now()
})
log_obj = self.sudo().env["soong.workflow.log"]
node_id = self.node_btn_id.node_id.id
last_sign_log = log_obj.search([
("model", "=", self.res_model),
("res_id", "=", self.res_id),
("node_id", "=", node_id),
("name", "!=", "加签"),
], order="create_date DESC", limit=1)
# 如果没有加签日志,直接跳过
if not last_sign_log:
return
# 最新加签的经办人
last_sign_user = last_sign_log.done_by
# 2. 找到当前节点所有日志(排除最新加签那条)
all_logs = log_obj.search([
("model", "=", self.res_model),
("res_id", "=", self.res_id),
("node_id", "=", node_id),
("name", "=", "加签"),
("id", "!=", user_log.id),
])
# 其他人是否都完成了
all_other_done = all(log.approval_state == "2" for log in all_logs)
# 4. 如果满足 → 创建一条新日志给【最新加签的经办人】
if all_other_done:
log_obj.create({
"model": self.res_model,
"res_id": self.res_id,
"workflow_id": self.node_btn_id.workflow_id.id,
"node_id": node_id,
"done_by": last_sign_user.id, # 最新加签的经办人
"approval_state": "0",
"create_date": fields.Datetime.now(),
})
workflow_record_id = self.env['soong.workflow.record'].sudo().search([('res_id', '=', record_id.id),
(
'res_model', '=', record_id._name)
])
workflow_record_id.employee_ids = [(6, 0, [last_sign_user.employee_ids.id])]
url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&menu_id={record_id.id}&action={action_id.id}&model={self.res_model}&view_type=form'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
user_id=last_sign_user.employee_ids.wecom_userid,
title=record_id._description + '加签返回',
description=description, url=url,
btntxt="查看详情")
if self.node_btn_name in ['结束', '确认']:
title = record_id._description
current_comment = self.comment or ''
# 自动设置审批结果为 不通过
if any(keyword in current_comment for keyword in ['不同意', '不批准', '不通过']):
if hasattr(record_id, 'approval_result'):
record_id.approval_result = 'fail'
else:
if hasattr(record_id, 'approval_result'):
record_id.approval_result = 'pass'
self.node_btn_id.with_context(cx).run()
if 'Room Booking' == record_id._description:
title = '会议通知'
is_work_remind = False
@@ -776,7 +958,6 @@ class SoongWorkflowCommentWizard(models.TransientModel):
title=title,
description=f"标题为{record_id.name}的{title}已结束,请归档",
url=url, btntxt="查看详情")
self.node_btn_id.with_context(cx).run()
if self.node_btn_name == "分发":
record_id.is_send = True
menu_id = self.env['ir.ui.menu'].search([('name', '=', '行政收文')], limit=1)
@@ -863,47 +1044,75 @@ class SoongWorkflowCommentWizard(models.TransientModel):
record = self.env[self.res_model].search([('id', '=', self.res_id)])
is_admin = current_user.has_group('base.group_system') or current_user.has_group('base.group_admin')
log_ids = record.log_ids.sorted('sequence')
log_to_delete = log_ids.filtered(lambda log: log.name == record.state)
if self.res_model == 'yuthon.official.incoming.normal':
director_logs = log_ids.filtered(lambda log: '董事长' in (log.name or ''))
if len(director_logs) == 2:
log_to_delete = log_ids[-1:]
if not is_admin:
invalid_logs = log_to_delete.filtered(
lambda log: log.approval_state in ['1', '2'] and log.node_btn_name != '1'
)
if invalid_logs:
raise UserError('当前状态不可以收回')
total_log_count = len(log_ids)
deleted_log_count = len(log_to_delete)
prev_log_index = (total_log_count - deleted_log_count) - 1
other_log_index = total_log_count - deleted_log_count
if prev_log_index < 0 or prev_log_index >= len(log_ids):
raise UserError('无有效的上一级审批明细行,无法执行收回操作')
prev_log = log_ids[prev_log_index]
has_sign_log = log_ids.filtered(lambda log: log.name == '加签' and log.node_id.name == record.state)
if has_sign_log:
# 加签日志
for log in has_sign_log:
if log.approval_state != '0':
raise UserError('加签流程已处理,不可收回!')
log_to_delete = has_sign_log
# 3. 删除后剩下的最后一条日志(取最后一个)
remaining_logs = log_ids - log_to_delete
if not remaining_logs:
raise UserError('无上级审批节点,无法收回')
prev_log = remaining_logs[-1] # 删除后的最后一条
# 4. 要删除的经办人 ID 列表
done_by_list = [log.done_by.id for log in log_to_delete]
else:
# 无加签日志
log_to_delete = log_ids.filtered(lambda log: log.name == record.state)
if self.res_model == 'yuthon.official.incoming.normal':
director_logs = log_ids.filtered(lambda log: '董事长' in (log.name or ''))
if len(director_logs) == 2:
log_to_delete = log_ids[-1:]
if not is_admin:
invalid_logs = log_to_delete.filtered(
lambda log: log.approval_state in ['1', '2'] and log.node_btn_name != '1'
)
if invalid_logs:
pass
total_log_count = len(log_ids)
deleted_log_count = len(log_to_delete)
prev_log_index = (total_log_count - deleted_log_count) - 1
other_log_index = total_log_count - deleted_log_count
if prev_log_index < 0 or prev_log_index >= len(log_ids):
raise UserError('无有效的上一级审批明细行,无法执行收回操作')
prev_log = log_ids[prev_log_index]
done_by_list = []
for index in range(other_log_index):
done_by_list.append(log_ids[index].done_by.id)
related_record = self.env[self.res_model].browse(self.res_id)
done_by_list = []
for index in range(other_log_index):
done_by_list.append(log_ids[index].done_by.id)
if hasattr(related_record, 'self_users_ids'):
related_record.self_users_ids = [(6, 0, [prev_log.done_by.id])]
self.env['soong.workflow.record'].search([('code', '=', record.code)]).write(
{"employee_ids": [(6, 0, [prev_log.done_by.employee_ids.id])],
"users_ids": [(6, 0, done_by_list)],
'soong_state': 'to_do'
})
# 核心写入:使用删除后的最后一条经办人
self.env['soong.workflow.record'].search([('code', '=', record.code)]).write({
"employee_ids": [(6, 0, [prev_log.done_by.employee_id.id])],
"users_ids": [(6, 0, done_by_list)] if not has_sign_log else [(3, user_id) for user_id in done_by_list],
'soong_state': 'to_do'
})
# 消息回退 + 删除日志
for log_delete in log_to_delete:
self.sudo().env["wecom.apps"].back_message(log_delete.msg_id, category='approval')
log_to_delete.unlink()
if record.log_ids2:
for log_id2 in record.log_ids2:
self.sudo().env["wecom.apps"].back_message(log_id2.msg_id, category='approval')
record.log_ids2.unlink()
# 把最后一条日志置为处理中
prev_log.write({'approval_state': '1'})
record.write({'state': prev_log.name,
'work_end': False,
})
# 回退状态
record.write({
'state': prev_log.name,
'work_end': False,
})
if self.node_btn_name == '归档':
menu_id = self.env['ir.ui.menu'].search([('name', '=', '行政收文')], limit=1)
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
@@ -14,7 +14,7 @@
<field name="user_role_ids"/>
<field name="comment"/>
</group>
<group invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档']">
<group invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档', '加签', '加签确认']">
<div class="oe_comment_block"
style=" width:1200%; border: 1px solid #dee2e6; border-radius: 4px; padding: 12px; margin-bottom: 16px;">
<label for="comment_note_id" string="常用意见"
@@ -43,9 +43,37 @@
<field name="document_ids" widget="preview_many2many" force_save="1"/>
</group>
<group>
<field name="is_this_company"/>
<field name="scope_type"/>
<field name="circulated_employee_ids" widget="many2many_tags" options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
</group>
<group invisible="node_btn_name != '加签确认'">
<div class="oe_comment_block"
style=" width:1200%; border: 1px solid #dee2e6; border-radius: 4px; padding: 12px; margin-bottom: 16px;">
<label for="comment_note_id" string="加签意见"
style="font-weight: bold; margin-bottom: 8px; display: block;"/>
<field name="comment_note_id" class="mb-3" style="width: 100%;" options="{'no_create': True}"
domain="[('note_setting_id.users_role_ids', 'in', user_role_ids)]"/>
<field name="comment_note" placeholder="请输入意见内容..." style="width: 100%;"/>
</div>
</group>
<group invisible="node_btn_name != '加签'">
<div class="oe_comment_block"
style=" width:1200%; border: 1px solid #dee2e6; border-radius: 4px; padding: 12px; margin-bottom: 16px;">
<label for="comment_note_id" string="意见"
style="font-weight: bold; margin-bottom: 8px; display: block;"/>
<field name="comment_note_id" class="mb-3" style="width: 100%;" options="{'no_create': True}"
domain="[('note_setting_id.users_role_ids', 'in', user_role_ids)]"/>
<field name="comment_note" placeholder="请输入意见内容..." style="width: 100%;"/>
</div>
<group>
<label for="scope_type" string="范围"/>
<field name="scope_type" nolabel="1"/>
<field name="company_id" invisible="1"/>
<field name="add_employee_ids" invisible="node_btn_name == '退回'"
widget="many2many_tags" options="{'no_create': True}"
domain="[('id', 'in', employee_ids2)]"/>
</group>
</group>
<group invisible="node_btn_name != '结束'">
@@ -63,7 +91,7 @@
<group>
<field name="document_ids" widget="preview_many2many"/>
<field name="circulated_employee_ids" widget="many2many_tags" options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
</group>
<group invisible="node_btn_name != '确认'">
@@ -76,8 +104,9 @@
<field name="comment_note" placeholder="请输入意见内容..." style="width: 100%;"/>
</div>
<group>
<field name="scope_type"/>
<field name="circulated_employee_ids" widget="many2many_tags" options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
</group>
<group invisible="node_btn_name != '分发'">
@@ -90,7 +119,7 @@
<field name="comment_note" placeholder="请输入意见内容..." style="width: 100%;"/>
</div>
</group>
<group invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档']">
<group invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档', '加签', '加签确认']">
<field name="user_id" invisible="1"/>
<field name="user_role_ids" widget="many2many_tags" invisible="1"/>
<field name="node_btn_id" invisible="1"/>
@@ -100,7 +129,7 @@
<field name="is_automatic" invisible="1"/>
<field name="is_supervising" invisible="1"/>
</group>
<group col="2" invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档']">
<group col="2" invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档', '加签', '加签确认']">
<group>
<!-- 转交人员 -->
<field name="workflow_record_id" string="测试流程record" invisible="1"/>
@@ -115,19 +144,20 @@
options="{'no_open': True, 'fg_color': 'red'}" widget="radio" force_save="1"/>
</group>
<group>
<label for="is_this_company" string="本公司"/>
<field name="is_this_company" nolabel="1"/>
<label for="scope_type" string="范围"/>
<field name="scope_type" nolabel="1"/>
<label for="is_selection" string="是否自动选择"/>
<field name="is_selection" nolabel="1"/>
<field name="company_id" invisible="1"/>
<field name="employee_ids1" widget="many2many_tags" string="人员范围" invisible="1"/>
<field name="employee_ids" widget="many2many_tags" string="人员范围"
domain="[('company_id', '=', company_id), ('id', 'in', employee_ids1)] if is_this_company else [('id', 'in', employee_ids1)]"
<field name="employee_ids1" widget="many2many_tags" string="人员" invisible="1"/>
<field name="employee_ids2" widget="many2many_tags" invisible="1"/>
<field name="employee_ids" widget="many2many_tags" string="人员"
domain="[('id', 'in', employee_ids1)]"
options="{'no_create': True}"
context="{'tree_view_ref':'yuthon_hr_employee.view_employee_phone_tree'}"/>
<field name="circulated_employee_ids" invisible="node_btn_name == '退回'"
widget="many2many_tags" options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
</group>
<div invisible="node_btn_name != '收回'">
@@ -140,17 +170,17 @@
groups="yuthon_salary.group_jtbb_user"/>
</group>
<group>
<!-- 分发弹窗:本公司开关控制人员筛选范围 -->
<field name="is_this_company"/>
<!-- 分发弹窗:范围开关控制人员筛选范围 -->
<field name="scope_type"/>
</group>
<group>
<field name="dep_manager_employee_ids" widget="many2many_tags" string="承办"
options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
<group>
<field name="circulated_employee_ids" widget="many2many_tags" options="{'no_create': True}"
domain="[('company_id', '=', company_id)] if is_this_company else []"/>
domain="[('id', 'in', employee_ids2)]"/>
</group>
<group>
<field name="supervising_employee_ids" widget="many2many_tags" invisible="not is_supervising"
+4 -3
View File
@@ -868,7 +868,7 @@ class HolidaysRequestBatch(models.Model):
"""
封装创建加班结转明细的逻辑
"""
carry_forward_date = (self.log_ids[-1].lase_click_date).date()
carry_forward_date = (self.log_ids[-2].lase_click_date).date()
self.env['overtime.carryover'].create({
'leave_id': self.id,
'over_line_id': over_line.id,
@@ -1069,8 +1069,9 @@ class HolidaysRequestBatch(models.Model):
record.holiday_allowance2 = record.holiday_allowance
if total_annual_leave_days > self.remaining_annual_leave:
raise UserError('年假天数额度不足,无法请假')
if total_compensatory_leave_days > self.remaining_compensatory_leave / 8:
raise UserError('补休天数额度不足,无法请假')
if total_compensatory_leave_days:
if total_compensatory_leave_days > self.remaining_compensatory_leave / 8:
raise UserError('补休天数额度不足,无法请假')
@api.onchange('leave_ids', 'hour_leave_ids', 'employee_id')
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string='假期延长审批' create="1">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
-6
View File
@@ -27,12 +27,6 @@
/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="计生假">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="假期修正审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
+1 -1
View File
@@ -94,7 +94,7 @@ class CustomerPortal(portal.CustomerPortal):
'旷工': format_vacation_value(record.is_work, '次'),
'异常': format_vacation_value(record.is_abnormal, '次'),
'年假': format_vacation_value(record.done_leave, '天'),
'加班时': format_vacation_value(record.done_working_overtime, '小时', 8),
'加班时': format_vacation_value(record.done_working_overtime, '小时'),
'补休': format_vacation_value(record.cop_leave, '小时', 8),
'调休': format_vacation_value(record.compensatory_leave, '天'),
'事假': format_vacation_value(record.leave_of_absence, '天'),
+5 -5
View File
@@ -46,11 +46,11 @@ class GoApprovals(models.Model):
is_this_department = fields.Boolean(string='是否是本部门', default=True)
department_ids = fields.Many2many('hr.department', string="多部门")
@api.constrains('is_day', 'start_day_selection', 'end_day_selection')
def _check_selection(self):
for rec in self:
if rec.is_day and (not rec.start_day_selection or not rec.end_day_selection):
raise UserError("勾选按天后,必须选择开始时段和结束时段!")
@api.constrains('is_day', 'is_hour')
def _check_is_day_or_hour(self):
for record in self:
if not record.is_day and not record.is_hour:
raise ValidationError("请至少选择【按天】或【按小时】其中一项!")
@api.constrains('start_date', 'end_date', 'employee_ids')
def _check_date_overlap(self):
@@ -1304,6 +1304,17 @@ class HrAttendance(models.Model):
pass #todo 待过
def update_attendance(self, employee, current_date):
# 判断当天入职:
if current_date <= employee.entry_date:
self.write({
'is_no_card': False,
'is_early_card': False,
'is_late_card': False,
'is_abnormal': False,
'absenteeism_card': False
})
return
if self.workflow_id:
if self.workflow_id.res_model == 'card.approval':
self.write({
@@ -21,12 +21,6 @@
<!-- <header>-->
<!-- <button name="confirm_approval" type="object" string="批准" class="btn-primary"/>-->
<!-- </header>-->
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -15,12 +15,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="外派驻点审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
+39 -43
View File
@@ -6,7 +6,7 @@
<field name="model">go.approval</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="name"/>
<field name="users_id" options="{'no_create': True}"/>
</tree>
</field>
@@ -16,14 +16,8 @@
<field name="name">go.approval.actions</field>
<field name="model">go.approval</field>
<field name="arch" type="xml">
<form create="0">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -35,7 +29,7 @@
<field name="is_issues"/>
</group>
<group>
<field name="is_this_department"/>
<field name="is_this_department"/>
</group>
</group>
<div class="col-12 text-center">
@@ -46,51 +40,53 @@
<div class="oe_title">
<label for="name" style="font-size: 1.05rem; font-weight: 600;"/>
<div>
<field name="name" required="1" placeholder="请输入标题" style="font-size: 1.05rem; font-weight: 600;"/>
<field name="name" required="1" placeholder="请输入标题"
style="font-size: 1.05rem; font-weight: 600;"/>
</div>
</div>
<group col="3">
<group>
<field name="is_day"/>
</group>
<group>
<field name="is_hour"/>
</group>
<group/>
<group col="3">
<group>
<field name="is_day"/>
</group>
<group col="3">
<group>
<field name="days" invisible="1"/>
<field name="is_back" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="start_date" invisible="not is_day"/>
<field name="end_date" invisible="not is_day"/>
</group>
<group>
<field name="start_day_selection" invisible="not is_day" required="is_day" string=" "/>
<field name="end_day_selection" invisible="not is_day" required="is_day" string=" "/>
</group>
<group/>
<group>
<field name="is_hour"/>
</group>
<group col="3">
<group>
<field name="date_start" invisible="not is_hour"/>
</group>
<group>
<field name="date_end" invisible="not is_hour"/>
</group>
<group>
<field name="hours" invisible="not is_hour"/>
</group>
<group/>
</group>
<group col="3">
<group>
<field name="days" invisible="1"/>
<field name="is_back" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="start_date" invisible="not is_day" required="is_day"/>
<field name="end_date" invisible="not is_day" required="is_day"/>
</group>
<group>
<field name="start_day_selection" invisible="not is_day" required="is_day" string=" "/>
<field name="end_day_selection" invisible="not is_day" required="is_day" string=" "/>
</group>
<group/>
</group>
<group col="3">
<group>
<field name="date_start" invisible="not is_hour" required="is_hour"/>
</group>
<group>
<field name="date_end" invisible="not is_hour" required="is_hour"/>
</group>
<group>
<field name="hours" invisible="not is_hour" required="is_hour"/>
</group>
</group>
<group col="2">
<group>
<field name="related_issues_id" invisible="is_issues == False"/>
<field name="reason_application"/>
<field name="company_id" invisible="1"/>
<field name="department_ids" widget="many2many_tags" invisible="1"/>
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}" domain="[('department_id', 'in', department_ids)] if department_ids else [('company_id', '=', company_id)]"/>
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}"
domain="[('department_id', 'in', department_ids)] if department_ids else [('company_id', '=', company_id)]"/>
<field name="is_issues" invisible="is_issues == False"/>
<field name="meal"/>
<field name="details"/>
@@ -25,12 +25,6 @@
<button name="leave_approval" string="发起申请" type="object" class="oe_highlight"/>
<field name="statu" widget="statusbar"/>
</header>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="报餐单">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="值班调休审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="值班调休审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="客服值班审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -65,21 +65,11 @@
</field>
</record>
<record id="view_yuthon_holiday_statement_action" model="ir.actions.act_window">
<field name="name">请假情况</field>
<field name="name">请假归档</field>
<field name="res_model">hr.leave</field>
<field name="view_mode">tree,search</field>
<field name="domain">[('is_filing','=', False)]</field>
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
<field name="view_id" ref="view_hr_leave_statement_tree"/>
<field name="search_view_id" ref="view_hr_leave_statement_search"/>
</record>
<record id="view_yuthon_holiday_statement_active_action" model="ir.actions.act_window">
<field name="name">请假归档</field>
<field name="res_model">hr.leave</field>
<field name="view_mode">tree,search</field>
<field name="domain">[('is_filing','=', True)]</field>
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
<field name="view_id" ref="view_hr_leave_statement_active_tree"/>
<field name="search_view_id" ref="view_hr_leave_statement_search"/>
</record>
</odoo>
@@ -20,12 +20,6 @@
<!-- <header>-->
<!-- <button name="button_shift_approval" type="object" string="批准" class="oe_highlight"/>-->
<!-- </header>-->
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -20,12 +20,6 @@
<!-- <header>-->
<!-- <button name="button_special_approval" type="object" string="批准" class="oe_highlight"/>-->
<!-- </header>-->
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -152,6 +152,9 @@ class YuthonHrEmployee(models.Model):
employment_registration = fields.Text(string="就业登记办理情况")
seniority_prize_pick_up_status = fields.Text(string="工龄相关年功奖领取情况")
# 考勤机信息
att_lot_ids = fields.One2many('attendance.iot.user', 'employee_id', string="考勤机信息")
# 紧急联系人
emergency_contact_ids = fields.One2many('yuthon.emergency.contact.line', 'employee_id', string="紧急联系人明细行")
# 工作经历
@@ -422,6 +422,15 @@
</tree>
</field>
</page>
<page string="考勤机信息">
<field name="att_lot_ids">
<tree editable="bottom">
<field name="employee_id" column_invisible="1"/>
<field name="attendance_iot_id"/>
<field name="attendance_address"/>
</tree>
</field>
</page>
<page string="专项扣除" name="deduction">
<group string="3岁以下婴幼儿照护">
<field name="care_line_ids" string=" ">
@@ -23,12 +23,6 @@
class="btn-primary" invisible="not work_end"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="model">property.reimbursement.form</field>
<field name="arch" type="xml">
<form string="报销单" create="0">
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -20,12 +20,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="部门变更审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="员工合同补充协议">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<button name="put_interview_wizard" string="结束" type="object" class='btn btn-primary'/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -25,12 +25,6 @@
/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -25,12 +25,6 @@
<button name="pub_name_button" string="发送邀请链接" type="object" class='btn btn-primary'/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<button name="action_print_onboard_approval" string="打印" type="object" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="投资项目预审表">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -20,12 +20,6 @@
<!-- <header>-->
<!-- <button name="put_time_failure" type="object" string="Approve" class="btn btn-primary"/>-->
<!-- </header>-->
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -20,12 +20,6 @@
<button name="action_print_renewal_approval" string="打印" type="object" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form string="退休申请" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -33,12 +33,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
+10 -3
View File
@@ -351,9 +351,6 @@ class IssueLibrary(models.Model):
if push_update_vals:
rec.push_invisible = True
rec.write(push_update_vals)
rec.write({
'issue_state': 'to_approval',
})
def _compute_is_admin(self):
is_admin = self.env.user.has_group('base.group_system')
@@ -831,6 +828,16 @@ class IssueLibrary(models.Model):
raise UserError('议题已上会,不能删除')
return super().unlink()
def my_unlink(self):
is_admin = self.env.user.has_group('base.group_system')
current_user = self.env.user
for i in self:
if i.issue_state == 'on_meet':
raise UserError('议题已上会,不能删除')
if not is_admin:
if i.employee_id.user_id != current_user:
raise UserError('只能删除自己的记录,无权删除他人数据')
@api.depends('name')
def _compute_name(self):
for record in self:
@@ -6,12 +6,6 @@
<field name="arch" type="xml">
<form string="董事议题申报">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -6,12 +6,6 @@
<field name="arch" type="xml">
<form string="班子议题申报">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
+3 -3
View File
@@ -4,7 +4,7 @@
<field name="name">issue.library.tree</field>
<field name="model">issue.library</field>
<field name="arch" type="xml">
<tree string="我的议题"
<tree string="我的议题" delete="0"
decoration-info="issue_state == 'will'"
decoration-success="issue_state == 'done'"
decoration-muted="issue_state == 'cancel'">
@@ -39,7 +39,7 @@
invisible="issue_state == 'draft'" groups="soong_workflow.group_soong_workflow_manager"/>
<button name="issue_cancel" string="取消" type="object" class="btn btn-blue"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="unlink" string="删除" type="object" class="btn btn-blue"
<button name="my_unlink" string="删除" type="object" class="btn btn-blue"
invisible="is_push_depart == True"/>
<button name="approval_details" string="审批详情" type="object" class="btn btn-blue"
invisible="not issue_approval_id"/>
@@ -105,7 +105,7 @@
<field name="name">issue.library.tree</field>
<field name="model">issue.library</field>
<field name="arch" type="xml">
<tree string="部门议题库"
<tree string="部门议题库" create="0" delete="0" edit="0"
decoration-info="issue_state == 'will'"
decoration-success="issue_state == 'done'"
decoration-muted="issue_state == 'cancel'">
@@ -6,12 +6,6 @@
<field name="arch" type="xml">
<form string="党议题申报">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="报事报修审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="arch" type="xml">
<form string="处理单审批" create="1">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="处理编号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="arch" type="xml">
<form string="报事报修" create="1">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="保修编号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="arch" type="xml">
<form string="报事报修(物业)" create="1">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="保修编号" readonly="1"/>
+4 -10
View File
@@ -8,13 +8,13 @@
decoration-info="notice_state == 'no'"
decoration-muted="notice_state == 'stop'" default_order="create_date1 desc">
<field name="name" required="1"/>
<field name="notice_type_id" string="类型" class="list_ids_width"/>
<field name="users_id" string="发布人" class="list_ids_width"/>
<field name="notice_type_id" string="类型"/>
<field name="users_id" string="发布人"/>
<field name="department_id" column_invisible="1"/>
<field name="users_ids" column_invisible="1"/>
<field name="create_date1"/>
<field name="end_date"/>
<field name="notice_state" class="list_ids_width"/>
<field name="notice_state"/>
<button name="on_sequence" string="置顶" invisible="sequence != 0" type="object" class="btn btn-blue"/>
<button name="no_sequence" string="取消置顶" invisible="sequence != 1" type="object" class="btn btn-blue"/>
<button name="look_up_notice_users" string="查阅情况" type="object" class="btn btn-blue"/>
@@ -33,12 +33,6 @@
<button name="action_print_notice" string="打印" type="object" class="btn-primary" invisible="not work_end"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -128,7 +122,7 @@
js_class="custom_notice_tree_button" default_order="create_date1 desc">
<field name="name"/>
<field name="notice_type_id" string="类型"/>
<field name="users_id" string="发布人" class="list_ids_width"/>
<field name="users_id" string="发布人"/>
<field name="is_notice_roger"/>
<field name="department_id" column_invisible="1"/>
<field name="users_ids" column_invisible="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="跨部门协作">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -29,12 +29,6 @@
<!-- <button name="supervising_button" string="督办" type="object" class="btn-primary" invisible="not is_supervising"/>-->
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="statu" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="statu" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -21,12 +21,6 @@
<field name="statu" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -22,12 +22,6 @@
<field name="statu" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -23,12 +23,6 @@
<field name="statu" widget="statusbar"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'extra_urgent'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -35,12 +35,6 @@
class="btn-primary" invisible="not work_end"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -33,12 +33,6 @@
class="btn-primary" invisible="not work_end"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -28,12 +28,6 @@
class="btn-primary" invisible="not work_end"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'extra_urgent'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -7,4 +7,46 @@
.list_name_width{
width: 300px !important;
max-width: 300px !important;
}
/* Many2one/Many2many 下拉选项换行显示 - 仅影响弹窗 */
/* 精确选择 autocomplete 下拉列表 */
.o-autocomplete .dropdown-menu .dropdown-item {
white-space: normal !important;
word-break: break-all !important;
word-wrap: break-word !important;
max-width: 400px !important;
}
/* 精确选择 select2 下拉选项 */
.select2-container--odoo .select2-dropdown .select2-results__option {
white-space: normal !important;
word-break: break-all !important;
word-wrap: break-word !important;
max-width: 400px !important;
}
/* 精确选择 Many2One 搜索弹窗(仅弹窗内部)*/
.o_field_many2one .modal-dialog .o_list_view .o_list_table td.o_data_cell {
white-space: normal !important;
word-break: break-all !important;
word-wrap: break-word !important;
max-width: 300px !important;
}
/* 精确选择 Many2Many 标签换行 */
.o_field_many2many_tags .o_m2o_tags {
white-space: normal !important;
}
.o_field_many2many_tags .o_m2o_tag {
white-space: normal !important;
word-break: break-all !important;
max-width: 200px !important;
}
/* 主页面 tree 视图保持原样 - 防止被上面的样式影响 */
.o_main_content .o_view_controller .o_list_view .o_list_table td.o_data_cell {
white-space: nowrap !important;
word-break: normal !important;
word-wrap: normal !important;
}
@@ -118,7 +118,7 @@
<field name="name">receivable.modify.line.tree</field>
<field name="model">receivable.modify.line</field>
<field name="arch" type="xml">
<tree string="应收流水中间表" editable="top">
<tree string="应收流水中间表" editable="top" default_order="due_date desc">
<field name="bank_id"/>
<field name="no_amount"/>
<field name="bank_state"/>
@@ -63,12 +63,12 @@
<field name="arch" type="xml">
<tree string="物业信息">
<field name="name" required="1" class="list_name_width"/>
<field name="management_area" digits="[16, 4]" class="list_ids_width"/>
<field name="rent_area" digits="[16, 4]" class="list_ids_width"/>
<field name="equity_area" digits="[16, 4]" class="list_ids_width"/>
<field name="management_area" digits="[16, 4]" />
<field name="rent_area" digits="[16, 4]" />
<field name="equity_area" digits="[16, 4]" />
<field name="title_deed"/>
<field name="title_address" optional="hide"/>
<field name="property_state" class="list_ids_width"/>
<field name="property_state"/>
</tree>
</field>
</record>
@@ -14,14 +14,14 @@
<button name="put_property_management" string="物业变更" type="object" class="btn btn-primary"/>
</header>
<field name="name" required="1" class="list_name_width"/>
<field name="management_area" digits="[16, 4]" class="list_ids_width"/>
<field name="rent_area" digits="[16, 4]" class="list_ids_width"/>
<field name="equity_area" digits="[16, 4]" class="list_ids_width"/>
<field name="management_area" digits="[16, 4]"/>
<field name="rent_area" digits="[16, 4]"/>
<field name="equity_area" digits="[16, 4]"/>
<field name="title_deed"/>
<field name="title_address" optional="hide"/>
<field name="property_state" class="list_ids_width"/>
<field name="property_leasing" class="list_ids_width"/>
<field name="purpose_id" class="list_ids_width"/>
<field name="property_state"/>
<field name="property_leasing"/>
<field name="purpose_id"/>
<field name="property_type"/>
<field name="is_new" column_invisible="1"/>
<field name="first_letter" column_invisible="1"/>
@@ -4,6 +4,44 @@ from odoo.modules import get_module_resource
from datetime import datetime, timedelta, date
def rmb_upper(value):
"""
人民币大写转换
:param value: 阿拉伯数字
:return: 中文大写金额
"""
if not value or value == 0:
return ''
rmbmap = [u"零", u"壹", u"贰", u"叁", u"肆", u"伍", u"陆", u"柒", u"捌", u"玖"]
unit = [u"分", u"角", u"元", u"拾", u"佰", u"仟", u"万", u"拾", u"佰", u"仟", u"亿",
u"拾", u"佰", u"仟", u"万", u"拾", u"佰", u"仟", u"兆"]
xflag = 0
if value < 0:
xflag = value
value = abs(value)
nums = list(map(int, list(str('%0.2f' % value).replace('.', ''))))
words = []
zflag = 0
start = len(nums) - 3
for i in range(start, -3, -1):
if 0 != nums[start - i] or len(words) == 0:
if zflag:
words.append(rmbmap[0])
zflag = 0
words.append(rmbmap[nums[start - i]])
words.append(unit[i + 2])
elif 0 == i or (0 == i % 4 and zflag < 3):
words.append(unit[i + 2])
zflag = 0
else:
zflag += 1
if words[-1] != unit[0]:
words.append(u"整")
if xflag < 0:
words.insert(0, u"负")
return ''.join(words)
class PropertyBillsPayable(models.Model):
_name = 'property.bills.payable'
_description = '应付账单申请'
@@ -23,21 +61,34 @@ class PropertyBillsPayable(models.Model):
amount_payable = fields.Float('应付金额')
deduction_amount = fields.Float('扣除金额')
actual_amount = fields.Float('实付金额')
amount_upper = fields.Char(string='金额大写', compute='_compute_amount_upper')
remake = fields.Text(string='备注')
@api.depends('actual_amount')
def _compute_amount_upper(self):
for record in self:
record.amount_upper = rmb_upper(record.actual_amount)
remarks = fields.Text(string='正文')
document_ids = fields.Many2many('ir.attachment', string="附件")
attachment_count = fields.Char(string='附件张数')
active = fields.Boolean('Active', default=True, tracking=True)
work_end = fields.Boolean(string="结束")
payment_type = fields.Selection([
('deposit_refund', '退押'),
('lease_refund', '退租'),
('engineering', '工程款'),
('agency_fee', '中介费'),
('other', '其他')
], string='付款类型')
business_type_id = fields.Many2one('property.business.type', string='业务类型')
payment_account = fields.Selection([
('basic', '基本户'),
('loan', '贷款户'),
('bank_of_china', '中行'),
('subsidy', '补贴专户'),
('return', '回笼户'),
('operating', '经营性专户')
], string='支付账户')
payee_id = fields.Many2one('property.tenant.information', string='收款单位/收款人')
payee_bank = fields.Char(string='开户行')
payee_account = fields.Char(string='银行账号')
payment_type_id = fields.Many2one('property.payment.type', string='付款类型')
def _get_default_name_title(self):
return self._description if self._description else self._name
return '付款申请单'
name_title = fields.Char(default=_get_default_name_title)
self_users_ids = fields.Many2many('res.users', string="当前经办人",
default=lambda self: [(6, 0, [self.env.user.id])])
@@ -47,6 +98,13 @@ class PropertyBillsPayable(models.Model):
if self.amount_payable and self.deduction_amount:
self.actual_amount = self.amount_payable - self.deduction_amount
@api.onchange('payee_id')
def _onchange_payee_id(self):
if self.payee_id and self.payee_id.bank_ids:
bank_line = self.payee_id.bank_ids[0]
self.payee_bank = bank_line.name
self.payee_account = bank_line.bank
def end_approval(self):
self.write({'work_end': True})
management_type_id = self.env['yuthon.management.type'].search([('name', '=', '押金')], limit=1)
@@ -69,3 +127,21 @@ class PropertyBillsPayable(models.Model):
class PropertyBillsLine(models.Model):
_name = 'property.bills.line'
_description = '账单明细'
class PropertyBusinessType(models.Model):
_name = 'property.business.type'
_description = '业务类型'
name = fields.Char(string='业务类型名称', required=True)
code = fields.Char(string='编码')
active = fields.Boolean('Active', default=True)
class PropertyPaymentType(models.Model):
_name = 'property.payment.type'
_description = '付款类型'
name = fields.Char(string='付款类型名称', required=True)
code = fields.Char(string='编码')
active = fields.Boolean('Active', default=True)
@@ -44,9 +44,9 @@ class PropertyOpenRent(models.Model):
# 租期
term_start_time = fields.Date(string="租期开始")
term_end_time = fields.Date(string="租期结束")
lease_term_year = fields.Integer(string="租期(年)", compute='_compute_lease_term', store=True)
lease_term_month = fields.Integer(string="租期(月)", compute='_compute_lease_term', store=True)
lease_term_day = fields.Integer(string="租期(日)", compute='_compute_lease_term', store=True)
lease_term_year = fields.Integer(string="租期(年)", store=True)
lease_term_month = fields.Integer(string="租期(月)", store=True)
lease_term_day = fields.Integer(string="租期(日)", store=True)
# 递增
first_years_begin = fields.Integer(string="第几年开始", default=2)
@@ -140,4 +140,6 @@ access_property_fee_form,property_fee_form,model_property_fee_form,base.group_us
access_property_fee_form_line,property_fee_form_line,model_property_fee_form_line,base.group_user,1,1,1,1
access_refund_wizard,refund_wizard,model_refund_wizard,base.group_user,1,1,1,1
access_refund_wizard_line,refund_wizard_line,model_refund_wizard_line,base.group_user,1,1,1,1
access_refund_wizard_line,refund_wizard_line,model_refund_wizard_line,base.group_user,1,1,1,1
access_property_business_type,property_business_type,model_property_business_type,base.group_user,1,1,1,1
access_property_payment_type,property_payment_type,model_property_payment_type,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
140
141
142
143
144
145
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="支付流程">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="建设工程委托监理合同审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="应收账单生成审批单">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form string="新增物业审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,51 +17,90 @@
<field name="arch" type="xml">
<form string="应付账单审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
<field name="urgency_level" string="紧急度"/>
</group>
<group>
<field name="due_date" string="单据日期"/>
</group>
<group/>
<group/>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
<field name="name_title" string="标题" readonly="1"/>
</h1>
</div>
<group string="审批事项">
<group col="2">
<group>
<field name="is_back" invisible="1"/>
<field name="name"/>
<field name="payment_type"/>
<field name="users_id"/>
<field name="work_end" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="remarks"/>
<field name="document_ids" widget="preview_many2many"/>
<field name="department_id" string="申请部门"/>
</group>
<group>
<field name="users_id" string="申请人"/>
</group>
</group>
<group string="详情">
<separator string="业务核心信息"/>
<group col="2">
<group>
<field name="lease_contract_id"/>
<field name="property_name"/>
<field name="lessee_id" string="收款方"/>
<field name="amount_payable"/>
<field name="deduction_amount"/>
<field name="remake" invisible="not deduction_amount"/>
<field name="actual_amount"/>
<field name="payment_type_id" string="付款类型"/>
<field name="lease_contract_id" string="合同信息" options="{'no_create': True}"/>
<field name="payment_account" string="支付账户"/>
</group>
<group>
<field name="business_type_id" string="业务类型"/>
<field name="property_name" string="物业信息"/>
</group>
</group>
<separator string="收款方信息"/>
<group col="1">
<group>
<field name="payee_id" string="收款单位/收款人"/>
</group>
</group>
<group col="2">
<group>
<field name="payee_bank" string="开户行"/>
</group>
<group>
<field name="payee_account" string="银行账号"/>
</group>
</group>
<separator string="金额信息"/>
<div class="oe_form_box">
<group col="3">
<group>
<field name="amount_payable" string="应付金额"/>
<field name="amount_upper" string="金额大写" readonly="1"/>
</group>
<group>
<field name="deduction_amount" string="扣除金额"/>
<field name="attachment_count" string="附件张数"/>
</group>
<group>
<field name="actual_amount" string="实付金额"/>
</group>
</group>
</div>
<group col="1">
<group>
<field name="remarks" string="付款说明" style="height: 150px; width: 100%;"/>
</group>
</group>
<field name="document_ids" widget="preview_many2many" invisible="1"/>
<field name="is_back" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="lessee_id" invisible="1"/>
<field name="remake" invisible="1"/>
<field name="self_users_ids" invisible="1"/>
<field name="name" invisible="1"/>
</sheet>
</form>
</field>
@@ -72,6 +111,3 @@
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form string="借支审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -16,12 +16,6 @@
<field name="arch" type="xml">
<form string="增容审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -20,12 +20,6 @@
<button name="action_print_property_confirm" string="打印" type="object" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="施工合同合同审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="合同编号" readonly="1"/>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form string="租赁合同审批表">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form string="零星工程" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="建设工程设计合同审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<button name="action_print_property_eligibility" string="打印" type="object" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="工程合同审批表">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -24,12 +24,6 @@
<field name="arch" type="xml">
<form string="费用支出">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特级" bg_color="text-bg-danger"
invisible="urgency_level != 'extra_urgent'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -4,7 +4,7 @@
<field name="name">property.fee.spending.tree</field>
<field name="model">property.fee.spending</field>
<field name="arch" type="xml">
<tree string="费用支出">
<tree string="费用支出" default_order="creart_datetime desc">
<field name="code" string="流水号"/>
<field name="name"/>
<field name="spending_fee"/>
@@ -22,12 +22,6 @@
<field name="arch" type="xml">
<form string="费用支出">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特级" bg_color="text-bg-danger"
invisible="urgency_level != 'extra_urgent'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -18,12 +18,6 @@
<field name="arch" type="xml">
<form string="移交审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -17,12 +17,6 @@
<field name="arch" type="xml">
<form create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -19,12 +19,6 @@
<field name="arch" type="xml">
<form string="续租审批" create="0">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
@@ -21,12 +21,6 @@
<button name="action_print_lease_renewal" string="打印" type="object" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>

Some files were not shown because too many files have changed in this diff Show More