Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
pengyuthon
2026-01-13 22:13:24 +08:00
116 changed files with 427 additions and 188 deletions
+11 -10
View File
@@ -16,7 +16,7 @@ class RoomBooking(models.Model):
_description = "Room Booking"
_order = "start_datetime desc, id"
name = fields.Char(string="标题", required=True, tracking=1)
name = fields.Char(string="标题", required=True, compute="_compute_name", store=True)
code = fields.Char(string="流水号", default=lambda self: self.env['ir.sequence'].next_by_code('room_booking_approval_code'))
room_id = fields.Many2one("room.room", string="Room", required=True, ondelete="cascade",
group_expand="_read_group_room_id", tracking=4)
@@ -30,7 +30,7 @@ class RoomBooking(models.Model):
company_id = fields.Many2one(related="user_id.employee_id.company_id", string="Company", readonly=True, store=True)
department_id = fields.Many2one('hr.department', related='user_id.employee_id.department_id', string="部门")
is_notice = fields.Boolean(string="是否发布通知", default=True)
user_id = fields.Many2many('res.users', string='申请人', default=lambda self: self.env.user.id)
user_id = fields.Many2one('res.users', string='申请人', default=lambda self: self.env.user.id)
task_time_ids = fields.Many2many('yuthon.task.time', string='提醒')
meeting_type = fields.Selection([('up', '线上'), ('down', '线下'), ('exterior', '外部')], default='down', string="会议形式",
required=True)
@@ -103,14 +103,15 @@ class RoomBooking(models.Model):
for room, bookings in bookings.grouped("room_id").items():
room._notify_booking_view("create", bookings)
data = vals_list[0]
self.env['calendar.event'].create({
'name': data['name'],
'start': data['start_datetime'],
'stop': data['stop_datetime'],
'partner_ids': data['partner_ids'],
'sth_type': 'meet',
'room_booking_id': bookings.id,
})
if data.get('partner_ids'):
self.env['calendar.event'].create({
'name': data['name'],
'start': data['start_datetime'],
'stop': data['stop_datetime'],
'partner_ids': data['partner_ids'],
'sth_type': 'meet',
'room_booking_id': bookings.id,
})
return bookings
@api.onchange('room_id')
+1 -1
View File
@@ -141,7 +141,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -115,8 +115,11 @@ class SoongWorkflowMixin(models.AbstractModel):
query_user_id = self.users_id.id
else:
query_user_id = current_user_id
if query_user_id == current_user_id and self.work_end and self.log_ids[-1].approval_state in ['0', '1']:
self.is_active = True
if self.log_ids:
if query_user_id == current_user_id and self.work_end and self.log_ids[-1].approval_state in ['0', '1']:
self.is_active = True
else:
self.is_active = False
else:
self.is_active = False
@@ -883,12 +886,11 @@ class SoongWorkflowMixin(models.AbstractModel):
id_el.set("name", "log_ids")
id_el.set("invisible", "1")
invisible += " or not log_ids or not is_back"
invisible += " or work_end"
if button.name == '归档':
id_el = etree.Element("field")
id_el.set("name", "log_ids")
id_el.set("invisible", "1")
invisible = "not is_active"
invisible += "or not is_active"
if model == 'purchase.order':
invisible = invisible.replace("询价", "draft")
btn_exec_action_el.set("invisible", invisible)
@@ -97,7 +97,7 @@ class SoongWorkflowRecord(models.Model):
@api.depends('create_uid', 'employee_ids')
def _compute_is_unlink(self):
for record in self:
if len(record.employee_ids) == 1 and record.employee_ids.user_id.id == record.create_uid.id:
if len(record.employee_ids) == 1 and record.employee_ids.user_id.id == record.create_uid.id == self.env.user.id and len(record.users_ids) == 1:
record.is_unlink = True
else:
record.is_unlink = False
@@ -230,6 +230,7 @@ class SoongWorkflowRecord(models.Model):
if not record_id:
continue
# 触发模型对应的结束方法
record_id.work_end = True
end_node = self.env["soong.workflow.node"].search(
[('workflow_id', '=', workflow.workflow_id.id), ('is_end', '=', True)],
limit=1
@@ -275,7 +276,6 @@ class SoongWorkflowRecord(models.Model):
'lase_click_date': current_datetime,
'sequence': 99,
})
workflow.approve_state = 'end'
workflow.soong_state = 'done'
workflow.employee_ids = [(6, 0, [])]
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -552,17 +552,17 @@ class SoongWorkflowCommentWizard(models.TransientModel):
current_user = self.env.user
current_datetime = fields.Datetime.now()
is_admin = current_user.has_group('soong_workflow.group_soong_workflow_manager')
# if is_admin:
# record_id.log_ids[-1].sudo().write({
# 'comment': self.comment,
# 'approval_state': "2",
# 'lase_click_date': fields.Datetime.now() - timedelta(hours=8),
# 'document_ids': [(6, 0, self.document_ids.ids)]
# })
# self.env['soong.workflow.record'].search([('code', '=', record_id.code)]).write({'approve_state': 'end',
# "employee_ids": False,
# "node_id": False, })
# record_id.work_end = True
if is_admin:
record_id.log_ids[-1].sudo().write({
'comment': self.comment,
'approval_state': "2",
'lase_click_date': fields.Datetime.now() - timedelta(hours=8),
'document_ids': [(6, 0, self.document_ids.ids)]
})
self.env['soong.workflow.record'].search([('code', '=', record_id.code)]).write({'approve_state': 'end',
"employee_ids": False,
"node_id": False, })
record_id.work_end = True
if record_id.log_ids:
user_log = record_id.log_ids.filtered(lambda log: log.done_by == current_user)
if user_log:
@@ -22,12 +22,20 @@
<field name="comment_note" placeholder="请输入意见内容..." style="width: 100%;"/>
</div>
</group>
<div invisible="node_btn_name != '归档'">
<h2>你确认要归档吗?</h2>
<group invisible="node_btn_name != '归档'">
<div>
<h2>当前流程是否归档,请确认</h2>
</div>
<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>
<field name="document_ids" widget="many2many_tags"/>
<field name="circulated_employee_ids" widget="many2many_tags" options="{'no_create': True}" domain = "[('company_id', '=', company_id)]"/>
<field name="document_ids" string="附件" widget="preview_many2many" force_save="1"/>
</group>
</div>
</group>
<group invisible="node_btn_name != '结束'">
<div>
<h2>当前流程是否结束,请确认</h2>
+1 -1
View File
@@ -30,7 +30,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
+1 -1
View File
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
+1 -1
View File
@@ -25,7 +25,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
+1 -1
View File
@@ -19,7 +19,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
+1 -1
View File
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -29,7 +29,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
+1 -1
View File
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -60,6 +60,7 @@ class YuthonLeavingApproval(models.Model):
record.employee_id.user_state = 'leave'
if record.employee_id.contract_id:
record.employee_id.contract_id.state = 'cancel'
record.employee_id.contract_id.termination_date = record.separation_date
record.is_execution = True
def action_print_leaving_approval(self):
@@ -27,7 +27,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -27,7 +27,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -37,7 +37,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
+27 -31
View File
@@ -11,6 +11,16 @@ class RoomBooking(models.Model):
number_of_meetings = fields.Integer(string='会议次数')
minutes_id = fields.Many2one('issue.meeting.minutes', string='会议纪要流程')
@api.depends('number_of_meetings', 'meeting_type_id', 'start_datetime')
def _compute_name(self):
if self.meeting_type_id and self.start_datetime:
if self.number_of_meetings:
self.name = str(self.start_datetime.date()) + f'第{self.number_of_meetings}次' + self.meeting_type_id.name
else:
self.name = str(self.start_datetime.date()) + self.meeting_type_id.name
else:
self.name = ''
def end_approval(self):
self.write({'work_end': True})
for meet in self.issue_meeting_line_ids:
@@ -22,14 +32,17 @@ class RoomBooking(models.Model):
meet.issue_library_id.class_char = str(self.start_datetime.date()) + f'第{self.number_of_meetings}' + self.meeting_type_id.name
if '董事' in meeting_type_name:
meet.issue_library_id.boss_char = str(self.start_datetime.date()) + self.meeting_type_id.name
if self.code:
self.env['issue.library.approval.line'].create({
'issue_library_id': meet.issue_library_id.id,
'code': self.code,
'approval_date': fields.Datetime.now() + timedelta(hours=8),
})
def bottom_meeting_approval(self):
library_data = []
for library in self.issue_meeting_line_ids:
if library.state == 'done':
raise UserError('当前纪要不允许重复提交')
library.state = 'done'
library_data.append((0, 0, {
'minutes_id': library.issue_library_id.id,
'decision_results': library.decision_results,
@@ -46,41 +59,26 @@ class RoomBooking(models.Model):
'default_host': self.host.id,
'default_meeting_type_id': self.meeting_type_id.id,
'default_meeting_date': self.start_datetime,
'default_room_id': self.room_id.id,
'default_number_of_meetings': self.number_of_meetings,
'default_meeting_minutes_ids': library_data
}}
@api.model_create_multi
def create(self, vals_list):
# 步骤1:先调用父类create方法,批量创建主记录,获取有效记录集
res = super().create(vals_list)
if not res:
return res
for idx, (main_record, vals) in enumerate(zip(res, vals_list)):
issue_meeting_lines = vals.get('issue_meeting_line_ids', [])
if not isinstance(issue_meeting_lines, list):
@api.constrains('issue_meeting_line_ids', 'room_id', 'meeting_type_id', 'start_datetime')
def _constrains_create_room_line(self):
for main_record in self:
if not (main_record.issue_meeting_line_ids and main_record.room_id and main_record.meeting_type_id):
continue
for line_triple in issue_meeting_lines:
if not (isinstance(line_triple, (list, tuple)) and len(line_triple) == 3):
continue
line_state, line_id, line_vals = line_triple
if line_state != 0 or not isinstance(line_vals, dict):
continue
issue_library_id = line_vals.get('issue_library_id')
room_id = vals.get('room_id')
meeting_type_id = vals.get('meeting_type_id')
approval_date = vals.get('start_datetime')
if not (issue_library_id and main_record.id and room_id and meeting_type_id):
for line in main_record.issue_meeting_line_ids:
if not line.issue_library_id:
continue
self.env['issue.library.room.line'].create({
'issue_library_id': issue_library_id,
'issue_library_id': line.issue_library_id.id,
'room_booking_id': main_record.id,
'room_id': room_id,
'meeting_type_id': meeting_type_id,
'approval_date': approval_date,
'room_id': main_record.room_id.id,
'meeting_type_id': main_record.meeting_type_id.id,
'approval_date': main_record.start_datetime,
})
return res
class IssueMeetingLine(models.Model):
_name = 'issue.meeting.line'
@@ -125,5 +123,3 @@ class IssueMeetingLine(models.Model):
self.issue_library_id.is_boss_passed = is_agree
original_boss_char = self.issue_library_id.boss_char or ""
self.issue_library_id.boss_char = original_boss_char + agree_name
self.issue_library_id.library_push()
+7
View File
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models
from datetime import datetime, timedelta, date
class IssueApproval(models.Model):
@@ -78,6 +79,12 @@ class IssueApproval(models.Model):
if rec.issue_approval_ids:
for issue_library in rec.issue_approval_ids:
issue_library.issue_library_id.write({'issue_state': 'will'})
if rec.code:
self.env['issue.library.approval.line'].create({
'issue_library_id': issue_library.issue_library_id.id,
'code': self.code,
'approval_date': fields.Datetime.now() + timedelta(hours=8),
})
class IssueApprovalLine(models.Model):
_name = 'issue.approval.line'
+51 -1
View File
@@ -51,7 +51,7 @@ class IssueLibrary(models.Model):
employee_id = fields.Many2one('hr.employee', string='创建人', default=lambda self: self.env.user.employee_id)
department_id = fields.Many2one('hr.department', string='部门', related='employee_id.department_id')
users_role_ids = fields.Many2many('soong.user.role', string='角色范围', related='employee_id.user_role_ids')
company_id = fields.Many2one('res.company', string='公司', related='employee_id.company_id', stroe=True)
company_id = fields.Many2one('res.company', string='公司', related='employee_id.company_id', store=True)
is_legal_trial = fields.Selection([('no', '否'), ('yes', '是')], string="是否法审", default='no')
workflow_id = fields.Many2one('soong.workflow.record', string="流程")
department_personnel_ids = fields.Many2many('res.users', string='部门人员')
@@ -68,11 +68,58 @@ class IssueLibrary(models.Model):
is_party_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_class_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
is_boss_passed = fields.Selection([('',''), ('pass', '通过'), ('reject', '未通过')])
push_invisible = fields.Boolean(string="推送隐藏", compute='_compute_push_invisible')
is_push_party = fields.Boolean(string="党推送")
is_push_class = fields.Boolean(string="班子推送")
is_push_boss = fields.Boolean(string="董事推送")
is_push_depart = fields.Boolean(string="部门推送")
@api.depends(
'is_party', 'is_class', 'is_boss',
'is_push_party', 'is_party_passed',
'is_push_class', 'is_class_passed',
'is_push_boss', 'is_boss_passed',
'is_push_depart'
)
def _compute_push_invisible(self):
for record in self:
record.push_invisible = False
type_mapping = {
'party': (record.is_party, record.is_party_passed),
'class': (record.is_class, record.is_class_passed),
'boss': (record.is_boss, record.is_boss_passed),
}
# 筛选开关为True的类型,收集其passed值
active_passed_values = []
for type_key, (type_switch, type_passed) in type_mapping.items():
if type_switch:
active_passed_values.append(type_passed)
# 所有激活类型的passed都为pass → 设为True
if active_passed_values and all(passed == 'pass' for passed in active_passed_values):
record.push_invisible = True
continue
if record.is_party:
if record.is_push_party and (record.is_party_passed == 'reject' or not record.is_party_passed):
record.push_invisible = True
continue
if record.is_class:
if record.is_push_class and (record.is_class_passed == 'reject' or not record.is_class_passed):
record.push_invisible = True
continue
if record.is_boss:
if record.is_push_boss and (record.is_boss_passed == 'reject' or not record.is_boss_passed):
record.push_invisible = True
continue
if record.issue_state in ['will', 'on_meet']:
if record.push_invisible:
record.issue_state = 'on_meet'
else:
record.issue_state = 'will'
@api.depends('issue_library_line_ids',
'issue_library_line_ids.issue_approval_decision_id',
'issue_library_line_ids.district_state_id',
@@ -343,6 +390,7 @@ class IssueLibrary(models.Model):
"views": [[form_id, "form"]],
"context": {
'default_is_issue': True,
'default_state': '申请人',
'default_start_datetime': fields.Datetime.now() + timedelta(hours=8),
'default_issue_meeting_line_ids': issue_details,
}
@@ -363,6 +411,7 @@ class IssueLibrary(models.Model):
"views": [[form_id, "form"]],
"context": {
'default_is_issue': True,
'default_state': '申请人',
'default_issue_meeting_line_ids': issue_details,
}
}
@@ -459,6 +508,7 @@ class IssueLibraryLine(models.Model):
class IssueLibraryApprovalLine(models.Model):
_name = "issue.library.approval.line"
_description = '关联流程明细'
_order = 'approval_date desc'
issue_library_id = fields.Many2one('issue.library', string="关联议题")
workflow_name = fields.Char(string="标题", compute='compute_issue_soong')
+37 -5
View File
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import UserError, ValidationError
from datetime import datetime, timedelta, date
class IssueMeetingMinutes(models.Model):
@@ -8,9 +9,9 @@ class IssueMeetingMinutes(models.Model):
_description = '会议纪要'
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
name = fields.Char(string='名称', compute='_compute_name')
number_of_meetings = fields.Integer(string='会议次数')
meeting_id = fields.Many2one('room.booking', string='会议名称', required=True)
name = fields.Char(related='meeting_id.name',string='会议名称')
meeting_id = fields.Many2one('room.booking', string='会议名称')
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
department_id = fields.Many2one(related='users_id.employee_ids.department_id', string="部门")
@@ -19,6 +20,7 @@ class IssueMeetingMinutes(models.Model):
user_id = fields.Many2one('res.users', string="记录人")
room_users_ids = fields.Many2many('res.users', string="出席人员")
host = fields.Many2one('hr.employee', string="主持人")
room_id = fields.Many2one('room.room', string="会议地点")
code = fields.Char(string='编号', required=True, copy=False,
default=lambda self: self.env['ir.sequence'].next_by_code('issue_meeting_minutes_code'))
meeting_minutes_ids = fields.One2many('issue.meeting.minutes.line', 'meeting_minutes_id', string="会议纪要明细")
@@ -34,19 +36,49 @@ class IssueMeetingMinutes(models.Model):
name_title = fields.Char(default=_get_default_name_title)
@api.depends('number_of_meetings', 'meeting_id', 'meeting_type_id', 'meeting_date')
@api.depends('number_of_meetings', 'meeting_type_id', 'meeting_date')
def _compute_name(self):
if self.number_of_meetings and self.meeting_id and self.meeting_type_id and self.meeting_date:
self.name = self.number_of_meetings + ' ' + self.meeting_id.name + ' ' + self.meeting_type_id.name + ' ' + self.meeting_date
if self.number_of_meetings and self.meeting_type_id and self.meeting_date:
self.name = self.number_of_meetings + ' ' + ' ' + self.meeting_type_id.name + ' ' + self.meeting_date
else:
self.name = ''
@api.depends('meeting_id.name')
def _compute_meeting_display_name(self):
for record in self:
if record.meeting_id:
record.meeting_display_name = record.meeting_id.name
else:
record.meeting_display_name = False
@api.constrains('meeting_id')
def _check_meeting_id(self):
for record in self:
if record.meeting_id:
record.meeting_id.minutes_id = self.id
@api.constrains('number_of_meetings', 'meeting_type_id', 'meeting_date')
def _constrains_create_room_booking(self):
for record in self:
if not (record.number_of_meetings and record.meeting_type_id and record.meeting_date):
continue
if record.meeting_id:
continue
booking_vals = {
'name': f"{record.meeting_date}第{record.number_of_meetings}次会议{record.meeting_type_id.name}",
'meeting_type_id': record.meeting_type_id.id,
'start_datetime': record.meeting_date + timedelta(hours=8),
'stop_datetime': record.meeting_date + timedelta(hours=9),
'organizer_id': record.users_id.id,
'number_of_meetings': record.number_of_meetings,
'room_id': record.room_id.id,
'host': record.host.id if record.host else False,
'room_users_ids': [(6, 0, record.room_users_ids.ids)] if record.room_users_ids else False,
}
booking_record = self.env['room.booking'].create(booking_vals)
record.meeting_id = booking_record.id
booking_record.minutes_id = record.id
def open_record(self):
return {
"type": "ir.actions.act_window",
+1 -1
View File
@@ -24,7 +24,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
+14 -17
View File
@@ -49,6 +49,7 @@
<button name="all_issue_pull" string="提交议题审批" type="object"/>
</header>
<field name="name" column_invisible="1"/>
<field name="department_id"/>
<field name="name_text" class="list_width"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
@@ -67,8 +68,9 @@
<field name="creart_datetime" column_invisible="1"/>
<field name="member_of_department" column_invisible="1"/>
<field name="is_push_depart" column_invisible="1"/>
<field name="push_invisible" column_invisible="1"/>
<!-- <button name="single_issue_pull" string="提交" type="object" class="oe_highlight"/>-->
<button name="library_push" string="推送" type="object" class="oe_highlight"/>
<button name="library_push" string="推送" type="object" class="oe_highlight" invisible="push_invisible"/>
<button name="revoke" string="撤销" type="object" class="oe_highlight" invisible="issue_state == 'draft'"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
@@ -90,7 +92,6 @@
</header>
<field name="name" column_invisible="1"/>
<field name="name_text" class="list_width"/>
<field name="department_id"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
<field name="party_char" />
@@ -108,11 +109,7 @@
<field name="creart_datetime" column_invisible="1"/>
<field name="member_of_department" column_invisible="1"/>
<field name="is_push_depart" column_invisible="1"/>
<!-- <button name="single_issue_pull" string="提交" type="object" class="oe_highlight"/>-->
<button name="library_push" string="推送" type="object" class="oe_highlight"/>
<button name="revoke" string="撤销" type="object" class="oe_highlight" invisible="issue_state == 'draft'"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
<!-- <button name="single_issue_pull" string="提交" type="object" class="oe_highligh"/>-->
<button name="approval_details" string="审批详情" type="object" class="oe_highlight" invisible="issue_state == 'draft'"/>
</tree>
</field>
@@ -129,7 +126,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -305,7 +302,7 @@
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="code"/>
<field name="department_id"/>
<field name="creart_datetime"/>
<field name="is_party" groups="yuthon_salary.group_jtbb_user" string="党总支"/>
<field name="is_party" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user" string="党支委会"/>
@@ -315,7 +312,7 @@
<field name="is_district_party"/>
<field name="issue_state"/>
<field name="company_id" optional="hide"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight" invisible="issue_state == 'on_meet'"/>
<button name="correction" string="修正" type="object" class="oe_highlight"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
@@ -333,7 +330,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -463,7 +460,7 @@
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="code"/>
<field name="department_id"/>
<field name="creart_datetime"/>
<field name="is_class"/>
<field name="class_char"/>
@@ -472,7 +469,7 @@
<field name="is_district_party"/>
<field name="issue_state"/>
<field name="company_id" optional="hide"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight" invisible="issue_state == 'on_meet'"/>
<button name="correction" string="修正" type="object" class="oe_highlight"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
@@ -490,7 +487,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -608,7 +605,7 @@
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="code"/>
<field name="department_id"/>
<field name="creart_datetime"/>
<field name="is_boss" groups="yuthon_salary.group_jtbb_user"/>
<field name="boss_char"/>
@@ -617,7 +614,7 @@
<field name="is_district_party"/>
<field name="issue_state"/>
<field name="company_id" optional="hide"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight"/>
<button name="single_meeting_issue" string="上会" type="object" class="oe_highlight" invisible="issue_state == 'on_meet'"/>
<button name="correction" string="修正" type="object" class="oe_highlight"/>
<button name="issue_cancel" string="取消" type="object" class="oe_highlight"/>
<button name="unlink" string="删除" type="object" class="oe_highlight"/>
@@ -635,7 +632,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -40,20 +40,20 @@
</div>
<group col="2">
<group>
<field name="name"/>
<field name="work_end" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="is_back" invisible="1"/>
<field name="meeting_id" invisible="1"/>
<field name="meeting_id"/>
<field name="host"/>
<field name="room_users_ids" widget="many2many_tags"/>
<field name="meeting_date"/>
<field name="room_id"/>
<field name="number_of_meetings"/>
<field name="meeting_type_id"/>
<button name="open_record" string="会议详情" type="object" class="btn btn-primary button_width"/>
<field name="meeting_resolution"/>
<button name="open_record" string="会议详情" type="object" class="btn btn-primary button_width"/>
</group>
</group>
<notebook>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
+1 -1
View File
@@ -34,7 +34,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'extra_urgent'"/>
<group col="4">
<group>
@@ -25,7 +25,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -26,7 +26,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -33,7 +33,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="5">
<group>
@@ -41,6 +41,7 @@
<group string="审批信息">
<field name="name"/>
<field name="users_id"/>
<field name="is_back" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="come_file_id"/>
<field name="official_partner_id"/>
+1
View File
@@ -25,6 +25,7 @@
'views/property_collection_confirm.xml',
'views/property_eligibility.xml',
'views/yuthon_property_ledger_views.xml',
'views/property_fee_spending_view.xml',
'views/property_lessee_analysis_viwes.xml',
'views/property_bills_list_views.xml',
'views/property_fitment.xml',
@@ -1,5 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="property_fee_spending_code_sequence" model="ir.sequence">
<field name="name">费用支出编号</field>
<field name="code">property_fee_spending_code</field>
<field name="prefix">FYZC%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="property_bills_payable_code_sequence" model="ir.sequence">
<field name="name">应付账单编号</field>
<field name="code">property_bills_payable_code</field>
+2 -1
View File
@@ -60,4 +60,5 @@ from . import payment_process
from . import contract_accounts_receivable
from . import property_bills_payable
from . import property_payment_notice
from . import property_bills_list
from . import property_bills_list
from . import property_fee_spending
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, exceptions, _
from odoo.exceptions import UserError, ValidationError
class PropertyFeeSpending(models.Model):
_name = 'property.fee.spending'
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
_description = '费用支出'
name = fields.Char(string='标题')
tip_description = fields.Text('事项名称')
property_address = fields.Text(string="物业地址")
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('property_fee_spending_code'))
is_issues = fields.Boolean(string='是否上会')
issues_result = fields.Html(string="会议结果")
related_issues_id = fields.Many2one('issue.library', string="关联议题")
property_documents_ids = fields.Many2many('documents.document', string="附件")
tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型')
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
default='normal')
active = fields.Boolean('Active', default=True, tracking=True)
work_end = fields.Boolean(string="结束")
company_id = fields.Many2one('yuthon.property.company', string="所属公司")
spending_fee = fields.Float(string="支付金额")
pay_date = fields.Date(string="支付日期")
expenses_type = fields.Many2one('yuthon.expenses.type', string="支出类型")
remake = fields.Text(string="备注")
def _get_default_name_title(self):
return self._description if self._description else self._name
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])])
class YuthonExpensesType(models.Model):
_name = 'yuthon.expenses.type'
_description = '支出类型'
name = fields.Char(string="支出类型")
@@ -125,4 +125,8 @@ access_property_bills_wizard,property_bills_wizard,model_property_bills_wizard,b
access_action_refuse_wizard,action_refuse_wizard,model_action_refuse_wizard,base.group_user,1,1,1,1
access_property_deposit_wizard,property_deposit_wizard,model_property_deposit_wizard,base.group_user,1,1,1,1
access_deposit_reconciliation_line,deposit_reconciliation_line,model_deposit_reconciliation_line,base.group_user,1,1,1,1
access_property_management_line2,property_management_line2,model_property_management_line2,base.group_user,1,1,1,1
access_property_management_line2,property_management_line2,model_property_management_line2,base.group_user,1,1,1,1
access_yuthon_expenses_type,yuthon.expenses.type,model_yuthon_expenses_type,base.group_user,1,1,1,1
access_property_fee_spending,property_fee_spending,model_property_fee_spending,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
125 access_yuthon_expenses_type yuthon.expenses.type model_yuthon_expenses_type base.group_user 1 1 1 1
126 access_property_fee_spending property_fee_spending model_property_fee_spending base.group_user 1 1 1 1
127
128
129
130
131
132
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -20,7 +20,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_property_fee_spending_tree" model="ir.ui.view">
<field name="name">property.fee.spending.tree</field>
<field name="model">property.fee.spending</field>
<field name="arch" type="xml">
<tree string="费用支出">
<field name="name"/>
<field name="spending_fee"/>
<field name="expenses_type"/>
<field name="users_id"/>
</tree>
</field>
</record>
<record id="view_property_fee_spending_form" model="ir.ui.view">
<field name="name">property.fee.spending.form</field>
<field name="model">property.fee.spending</field>
<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"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
</group>
<group>
<field name="is_issues"/>
</group>
<group>
<field name="related_issues_id" invisible="not is_issues"/>
</group>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group col="4">
<group>
<field name="is_back" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="pay_date"/>
<field name="department_id" invisible="1"/>
</group>
<group>
<field name="users_id"/>
</group>
<group>
<field name="company_id"/>
</group>
<group>
<field name="tenure_type"/>
</group>
</group>
<group>
<field name="name"/>
<field name="tip_description"/>
<field name="property_address"/>
<field name="remake"/>
<field name="expenses_type"/>
<field name="spending_fee"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_yuthon_expenses_type_tree" model="ir.ui.view">
<field name="name">yuthon.expenses.type.tree</field>
<field name="model">yuthon.expenses.type</field>
<field name="arch" type="xml">
<tree string="支出类型" editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
</odoo>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -25,7 +25,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -22,7 +22,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -27,7 +27,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -21,7 +21,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
@@ -27,7 +27,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
@@ -23,7 +23,7 @@
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"
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>

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