@@ -22,16 +22,17 @@ class YuthonOvertimeLine(models.Model):
|
||||
valid_date = fields.Date(string="有效至")
|
||||
workday = fields.Float(string='工作日')
|
||||
public_holidays = fields.Float(string='公休日')
|
||||
remainder_year = fields.Float(string='本年剩余')
|
||||
vacation_sum = fields.Float(string='合计数', compute='_compute_vacation_sum', store=True)
|
||||
carry_forward_quantity = fields.Float(string="结转时长")
|
||||
carry_forward_quantity = fields.Float(string="已结转")
|
||||
carry_forward_date = fields.Date(string="结转日期")
|
||||
archive_state = fields.Selection([('to_do', '待归档'), ('done', '已归档')], default='to_do', string='状态')
|
||||
remaining_quantity = fields.Float(string="剩余数")
|
||||
|
||||
@api.depends('workday', 'public_holidays', 'carry_forward_quantity')
|
||||
@api.depends('last_balance', 'remainder_year')
|
||||
def _compute_vacation_sum(self):
|
||||
for rec in self:
|
||||
rec.vacation_sum = rec.public_holidays + rec.workday + rec.last_balance
|
||||
rec.vacation_sum = rec.last_balance + rec.remainder_year
|
||||
|
||||
def open_record(self):
|
||||
self.ensure_one()
|
||||
|
||||
@@ -1939,14 +1939,21 @@ class YuthonVacationReports(models.Model):
|
||||
|
||||
@api.model
|
||||
def overtime_line(self):
|
||||
# 1. 清空历史数据(先删除所有旧记录)
|
||||
self.env['yuthon.overtime.line'].search([]).unlink()
|
||||
|
||||
# 2. 定义时间范围
|
||||
today = date.today()
|
||||
last_month_first = (today - relativedelta(months=1)).replace(day=1)
|
||||
current_month_first = today.replace(day=1)
|
||||
last_month_first = (today - relativedelta(months=1)).replace(day=1) # 上月1号
|
||||
current_month_first = today.replace(day=1) # 本月1号
|
||||
current_month_first_dt = datetime.combine(current_month_first, datetime.min.time())
|
||||
dec_2025_end = datetime(2025, 12, 31, 23, 59, 59)
|
||||
|
||||
# 3. 仅处理集团本部的数据
|
||||
if self.env.user.company_id.name == '集团本部':
|
||||
# 数据筛选条件
|
||||
domain = [
|
||||
('employee_id.name', '=', '叶华锋'),
|
||||
'|',
|
||||
('is_initial_number', '=', True),
|
||||
'&', ('is_initial_number', '=', False),
|
||||
@@ -1955,48 +1962,42 @@ class YuthonVacationReports(models.Model):
|
||||
'&', ('start_time', '>=', dec_2025_end),
|
||||
'&', ('vacation_id', '!=', False),
|
||||
('start_time', '<', current_month_first_dt),
|
||||
('carry_forward_state', '!=', 'completed'),
|
||||
('employee_id.is_annual_salary', '!=', True)
|
||||
]
|
||||
all_records = self.env['vacation.over.line'].search(domain)
|
||||
over_lines = all_records.filtered(lambda r: abs(r.remaining_quantity) > 1e-6)
|
||||
employee_summary = {}
|
||||
for line in over_lines:
|
||||
|
||||
for line in all_records:
|
||||
emp_id = line.employee_id.id
|
||||
if not emp_id:
|
||||
continue
|
||||
|
||||
if emp_id not in employee_summary:
|
||||
report_id = self.env['yuthon.vacation.reports'].search(
|
||||
[
|
||||
('vacation_date', '=', last_month_first),
|
||||
('employee_id', '=', emp_id),
|
||||
],
|
||||
limit=1 # 避免多条记录,只取第一条
|
||||
)
|
||||
employee_summary[emp_id] = {
|
||||
'employee_id': emp_id,
|
||||
'valid_date': line.valid_date,
|
||||
'workday': 0.0,
|
||||
'public_holidays': 0.0,
|
||||
'vacation_sum': 0.0,
|
||||
'last_balance': report_id.dynamic_previous_year1 * 8 if report_id else 0.0,
|
||||
'remainder_year': 0.0,
|
||||
'carry_forward_quantity': 0.0,
|
||||
'carry_forward_date': line.carry_forward_date,
|
||||
'archive_state': 'done' if line.carry_forward_date else 'to_do',
|
||||
'select_month': str(last_month_first.month),
|
||||
'select_year': str(last_month_first.year)
|
||||
'select_year': str(last_month_first.year),
|
||||
}
|
||||
|
||||
summary = employee_summary[emp_id]
|
||||
if line.workday:
|
||||
if line.is_initial_number:
|
||||
summary['last_balance'] = (line.remaining_quantity or 0.0)
|
||||
else:
|
||||
summary['workday'] += line.remaining_quantity or 0.0
|
||||
if line.public_holidays:
|
||||
summary['public_holidays'] += line.remaining_quantity or 0.0
|
||||
summary['carry_forward_quantity'] += line.carry_forward_quantity or 0.0
|
||||
summary['remaining_quantity'] = (
|
||||
summary.get('workday', 0.0) +
|
||||
summary.get('public_holidays', 0.0) +
|
||||
summary.get('last_balance', 0.0)
|
||||
)
|
||||
summary['remainder_year'] += line.duration or 0.0
|
||||
create_vals = []
|
||||
for emp_id, vals in employee_summary.items():
|
||||
create_vals.append(vals)
|
||||
|
||||
if create_vals:
|
||||
self.env['yuthon.overtime.line'].create(create_vals)
|
||||
|
||||
|
||||
@@ -13,13 +13,12 @@
|
||||
<field name="select_month"/>
|
||||
<field name="last_balance"/>
|
||||
<field name="valid_date"/>
|
||||
<field name="workday"/>
|
||||
<field name="public_holidays"/>
|
||||
<field name="remainder_year"/>
|
||||
<field name="vacation_sum" options='{ "fg_color": "red: vacation_sum > 40"}'/>
|
||||
<field name="carry_forward_quantity" options='{ "fg_color": "blue: carry_forward_quantity > 0"}'/>
|
||||
<field name="carry_forward_date"/>
|
||||
<field name="remaining_quantity"/>
|
||||
<field name="archive_state"/>
|
||||
<field name="carry_forward_quantity" column_invisible="1"/>
|
||||
<field name="carry_forward_date" column_invisible="1"/>
|
||||
<field name="remaining_quantity" column_invisible="1"/>
|
||||
<field name="archive_state" column_invisible="1"/>
|
||||
<button name="open_record" type="object" string="详情" class="oe_highlight"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -34,13 +33,12 @@
|
||||
<field name="select_month"/>
|
||||
<field name="last_balance"/>
|
||||
<field name="valid_date"/>
|
||||
<field name="workday"/>
|
||||
<field name="public_holidays"/>
|
||||
<field name="remainder_year"/>
|
||||
<field name="vacation_sum" options='{ "fg_color": "red: vacation_sum > 40"}'/>
|
||||
<field name="carry_forward_quantity" options='{ "fg_color": "blue: carry_forward_quantity > 0"}'/>
|
||||
<field name="carry_forward_date"/>
|
||||
<field name="remaining_quantity"/>
|
||||
<field name="archive_state"/>
|
||||
<field name="carry_forward_quantity" column_invisible="1"/>
|
||||
<field name="carry_forward_date" column_invisible="1"/>
|
||||
<field name="remaining_quantity" column_invisible="1"/>
|
||||
<field name="archive_state" column_invisible="1"/>
|
||||
<button name="open_record" type="object" string="详情" class="oe_highlight"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
Reference in New Issue
Block a user