Merge branch 'master' of https://gitee.com/jinan-pengyusen-data/gzth
This commit is contained in:
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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, '天'),
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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
|
||||
|
@@ -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
Reference in New Issue
Block a user