Merge pull request !5592 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-10-12 08:12:49 +00:00
committed by Gitee
14 changed files with 155 additions and 20 deletions
+25 -15
View File
@@ -45,6 +45,8 @@ class HrAttendance(models.Model):
abnormal = fields.Integer(string="异常计算")
shift_id = fields.Many2one('planning.slot', string="班次", store=True)
shift_name = fields.Char(string="班次", store=True)
is_week = fields.Boolean(string="是否为周末")
is_holiday = fields.Boolean(string="是否为节假日")
noon_duty = fields.Datetime(string="中值")
night_duty = fields.Datetime(string="晚值")
is_approval = fields.Boolean(string="是否审批修正", default=False)
@@ -58,7 +60,6 @@ class HrAttendance(models.Model):
workflow_id = fields.Many2one('soong.workflow.record', string="流程")
is_month = fields.Boolean(string="是否为本月数据", compute='_compute_month_status', store=True)
is_last_month = fields.Boolean(string="是否为上月数据", compute='_compute_month_status', store=True)
is_holiday = fields.Boolean(string="是否是假期")
correct_result = fields.Text(string="修正原因")
def create_attendance_data_holiday(self):
@@ -122,8 +123,8 @@ class HrAttendance(models.Model):
for att in self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))):
current_data = fields.Datetime.to_datetime(att.current_data) + timedelta(hours=8)
self.env["hr.attendance.detail"].compute_attendance_detail(att.employee_id, current_data.date(), is_manual=True)
if att.employee_id.company_id.name in ['集团本部', '天河粮储']:
att.shift_name = '行政班次'
# if att.employee_id.company_id.name in ['集团本部', '天河粮储']:
# att.shift_name = '行政班次'
# planning_slots = self.env['planning.slot'].search([
# ('employee_id', '=', att.employee_id.id),
# ('start_datetime', '=', att.current_data),
@@ -1156,26 +1157,35 @@ class HrAttendance(models.Model):
shift_days_list = []
is_shift_replacement = False
is_leave_day = False
is_holiday = False
is_weekend = False
# 判断排班员工
planning_ids = self.env['planning.role'].search([('name', 'in', ['保安部', '工程部', '联安粮储'])])
related_resources = set()
for role in planning_ids:
if role.resource_ids:
related_resources.update(role.resource_ids.ids)
related_resources_set = self.env['resource.resource'].browse(related_resources)
if record.employee_id.resource_id in related_resources_set:
record.shift_name = '休息'
record.is_week = True
continue
if record.current_data:
# 查询休假记录(假设"行政考勤工作日"是calendar_id的name)
leave_records = self.env['resource.calendar.leaves'].search([
("calendar_id.name", "=", "行政考勤工作日")
])
# 检查是否为休假日期
# 检查是否为节假日
for leave in leave_records:
if leave.date_from and leave.date_to:
from_date = fields.Date.to_date(leave.date_from) + timedelta(days=1)
to_date = fields.Date.to_date(leave.date_to) + timedelta(days=1)
if from_date <= record.current_data <= to_date:
is_leave_day = True
is_holiday = True # 标记为节假日
# 收集调班补班日期
if leave.shift_replacement_day:
shift_days_list.extend(leave.shift_replacement_day.split(','))
# 检查是否为调班补班日
target_day_str = f"{record.current_data.month}月{record.current_data.day}日"
if target_day_str in shift_days_list:
@@ -1186,16 +1196,16 @@ class HrAttendance(models.Model):
if weekday in [6, 7]: # 6=周六,7=周日
is_weekend = True
# 设置班次名称
if is_leave_day:
record.shift_name = ''
elif is_shift_replacement:
if is_shift_replacement:
record.shift_name = '行政班次'
elif is_weekend:
record.shift_name = ''
elif is_weekend or is_holiday:
record.shift_name = '休息'
else:
record.shift_name = '行政班次'
record.is_week = is_weekend
record.is_holiday = is_holiday
@api.model
def create(self, vals):
record = super(HrAttendance, self).create(vals)
@@ -172,7 +172,7 @@ class HrAttendanceDetail(models.Model):
('employee_id', '=', employee.id),
('start_datetime', '>=', slot_start),
('start_datetime', '<', slot_end),
])
], limit=1)
planning_name = planning_slots.planning_name if planning_slots else None
template_domain = []
if planning_name:
@@ -7,6 +7,8 @@
<tree string="出勤"
edit="false" delete="false" create="false" duplicate="false"
decoration-danger="is_workflow or is_approval"
decoration-muted = "is_week"
decoration-success="is_holiday"
editable="bottom">
<header>
<!-- <button name="compute_company_id" string="公司更新" type="object" class="btn btn-primary"/>-->
@@ -27,6 +29,8 @@
<field name="check_out" optional="show" widget="time" class="list_current_data" decoration-danger="is_check_out_red == 1"/>
<field name="shift_id" optional="hidden" column_invisible="1"/>
<field name="shift_name" optional="show" class="list_current_data"/>
<field name="is_week" column_invisible="1"/>
<field name="is_holiday" column_invisible="1"/>
<field name="create_date" optional="hidden"/>
<field name="user_id" column_invisible="1"/>
<field name="is_clock_card" column_invisible="1"/>
+5
View File
@@ -75,6 +75,11 @@
parent="administrative_offices_root_board"
action="yuthon_trade.view_business_approval_action"
sequence="70"/>
<menuitem id="yuthon_contract_addition_board"
name="合同补充协议"
parent="administrative_offices_root_board"
action="yuthon_trade.view_contract_addition_action"
sequence="72"/>
<menuitem id="yuthon_social_transfer_action_board"
name="移交社会化"
parent="administrative_offices_root_board"
@@ -184,7 +184,7 @@ class MeterArchivesLine(models.Model):
gauge_magnification = fields.Integer(string='仪表倍率', readonly=True, default=1, group_operator=None)
last_reading_time = fields.Date(string="最后读数时间")
receivables = fields.Float(string="应收", compute='_compute_receivables', store=True, group_operator=None)
unit = fields.Float(string='当月单价', group_operator=None)
unit = fields.Float(string='当月单价', group_operator=None, igits=(6, 4))
line_loss = fields.Float(string="线损", default=0.02)
type = fields.Selection([('public', '公共'), ('fees', '收费')], string='类型')
start_time = fields.Date(string="安装日期")
@@ -26,7 +26,7 @@ class PropertyMeterWater(models.Model):
epitope_values = fields.Char(string='表位置')
epitope_values_id = fields.Many2one('yuthon.epitope.values', string='表位置')
other = fields.Char(string='其他')
unit = fields.Float(string='当月单价')
unit = fields.Float(string='当月单价', igits=(6, 4))
start_time = fields.Date(string="安装日期")
end_time = fields.Date(string="拆除日期")
line_loss = fields.Float(string="线损", default=0.05)
+1 -1
View File
@@ -9,7 +9,7 @@ class MeterPriceWizard(models.TransientModel):
_description = '电表修改单价弹窗'
price_date = fields.Date(string='日期', default=fields.Datetime.today())
price = fields.Float(string='单价')
price = fields.Float(string='单价', igits=(6, 4))
line_loss = fields.Float(string='线损', default=0.02)
def confirm(self):
+1
View File
@@ -33,6 +33,7 @@
'views/yuthon_none_views.xml',
'views/yuthon_mutual_approval_views.xml',
'views/yuthon_care_condolences_views.xml',
'views/yuthon_contract_addition_views.xml',
'views/trade_project_approval_views.xml',
'views/yuthon_trade_setting_views.xml',
'views/yuthon_work_condolences_views.xml',
@@ -35,6 +35,13 @@
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="yuthon_contract_addition_code_sequence" model="ir.sequence">
<field name="name">合同补充协议</field>
<field name="code">yuthon_contract_addition_code</field>
<field name="prefix">BC%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="property_work_condolences_code_sequence" model="ir.sequence">
<field name="name">节日慰问编号</field>
<field name="code">property_work_condolences_code</field>
+1
View File
@@ -26,3 +26,4 @@ from . import inherit_workflow_record
from . import trade_project_approval
from . import parking_fee_approval
from . import yuthon_social_transfer
from . import yuthon_contract_addition
@@ -3,6 +3,7 @@
from odoo import models, fields, api, exceptions, _
class YuthonBusinessApproval(models.Model):
_name = 'yuthon.business.approval'
_description = '业务审批'
@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, exceptions, _
class YuthonContractAddition(models.Model):
_name = 'yuthon.contract.addition'
_description = '合同补充协议'
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
name = fields.Char(string='标题')
code = fields.Char(string="流水号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_contract_addition_code'))
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
default='normal')
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
is_issues = fields.Boolean(string='是否上会')
issues_result = fields.Html(string="会议结果")
related_issues_id = fields.Many2one('issue.library', string="关联议题")
reason = fields.Text(string="正文")
document_ids = fields.Many2many('ir.attachment', string="附件")
active = fields.Boolean('Active', default=True, tracking=True)
work_end = fields.Boolean(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])])
@api.onchange('is_issues')
def _onchange_is_issues(self):
if self.is_issues:
issue_id = self.env['issue.library'].create({'name': self.name, 'is_invisible_workflow': True})
self.related_issues_id = issue_id.id
self.env['issue.library.approval.line'].create({
'issue_library_id': issue_id.id,
'workflow_name': self.name,
'approval_type': self.workflow_id.name,
'res_model': self._name,
'res_id': self.id,
'code': self.code,
'approval_date': fields.Datetime.now(),
})
+1 -1
View File
@@ -37,6 +37,6 @@ access_parking_fee_approval,parking_fee_approval,model_parking_fee_approval,base
access_project_classify_setting,project_classify_setting,model_project_classify_setting,base.group_user,1,1,1,1
access_yuthon_social_transfer,yuthon_social_transfer,model_yuthon_social_transfer,base.group_user,1,1,1,1
access_yuthon_contract_addition,yuthon_contract_addition,model_yuthon_contract_addition,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
37 access_yuthon_social_transfer yuthon_social_transfer model_yuthon_social_transfer base.group_user 1 1 1 1
38 access_yuthon_contract_addition yuthon_contract_addition model_yuthon_contract_addition base.group_user 1 1 1 1
39
40
41
42
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_yuthon_contract_addition_tree" model="ir.ui.view">
<field name="name">yuthon.contract.addition.tree</field>
<field name="model">yuthon.contract.addition</field>
<field name="arch" type="xml">
<tree string="合同补充协议">
<field name="name"/>
</tree>
</field>
</record>
<record id="view_yuthon_contract_addition_form" model="ir.ui.view">
<field name="name">yuthon.contract.addition.form</field>
<field name="model">yuthon.contract.addition</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 != 'emergency'"/>
<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="is_issues == False"/>
</group>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group string="审批事项">
<field name="work_end" invisible="1"/>
<field name="name"/>
<field name="users_id"/>
<field name="reason"/>
<field name="document_ids" widget="preview_many2many"/>
<field name="department_id" invisible="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_contract_addition_action" model="ir.actions.act_window">
<field name="name">合同补充协议</field>
<field name="res_model">yuthon.contract.addition</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>