@@ -85,7 +85,7 @@
|
||||
<field name="model">soong.workflow.record</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="流程查询" action="open_record" type="object"
|
||||
delete="false"
|
||||
delete="false" copy="false"
|
||||
create="false" default_order="display_end_time desc, write_date2 desc, id desc" expand="1" limit="10">
|
||||
<header>
|
||||
<button name="admin_end" type="object" string="管理员强制结束" class="oe_highlight"
|
||||
|
||||
@@ -566,32 +566,32 @@ class HolidaysRequestBatch(models.Model):
|
||||
vacation_report.this_year1 = 0.0
|
||||
vacation_report._compute_working_overtime()
|
||||
|
||||
domain = [
|
||||
('employee_id', '=', self.users_id.employee_ids.id),
|
||||
('is_visible', '=', False),
|
||||
('is_void', '=', False),
|
||||
('text', '!=', '上月额度继承'),
|
||||
]
|
||||
if self.users_id.employee_ids.company_id.name == '集团本部':
|
||||
domain.append(('start_time', '>=', datetime(2025, 12, 1)),)
|
||||
overtime_records = self.env['vacation.over.line'].search(domain, order='start_time ASC')
|
||||
remaining_deduct = hours
|
||||
for record in overtime_records:
|
||||
if remaining_deduct <= 0:
|
||||
break
|
||||
current_remaining = record.public_holidays + record.workday # 剩余数
|
||||
deduct_amount = min(remaining_deduct, current_remaining)
|
||||
if remaining_deduct < current_remaining:
|
||||
carry_state = 'partial'
|
||||
else:
|
||||
carry_state = 'completed'
|
||||
domain = [
|
||||
('employee_id', '=', self.users_id.employee_ids.id),
|
||||
('is_visible', '=', False),
|
||||
('is_void', '=', False),
|
||||
('text', '!=', '上月额度继承'),
|
||||
]
|
||||
if self.users_id.employee_ids.company_id.name == '集团本部':
|
||||
domain.append(('start_time', '>=', datetime(2025, 12, 1)),)
|
||||
overtime_records = self.env['vacation.over.line'].search(domain, order='start_time ASC')
|
||||
remaining_deduct = hours
|
||||
for record in overtime_records:
|
||||
if remaining_deduct <= 0:
|
||||
break
|
||||
current_remaining = record.public_holidays + record.workday # 剩余数
|
||||
deduct_amount = min(remaining_deduct, current_remaining)
|
||||
if remaining_deduct < current_remaining:
|
||||
carry_state = 'partial'
|
||||
else:
|
||||
carry_state = 'completed'
|
||||
|
||||
record.write({
|
||||
'carry_forward_date': fields.Date.to_string(period_start),
|
||||
'carry_forward_quantity': deduct_amount,
|
||||
'carry_forward_state': carry_state,
|
||||
})
|
||||
remaining_deduct -= deduct_amount
|
||||
record.write({
|
||||
'carry_forward_date': fields.Date.to_string(period_start),
|
||||
'carry_forward_quantity': deduct_amount,
|
||||
'carry_forward_state': carry_state,
|
||||
})
|
||||
remaining_deduct -= deduct_amount
|
||||
|
||||
|
||||
def _create_annual_leave_line(self, period_start, leave_data, hours, period):
|
||||
|
||||
@@ -66,7 +66,7 @@ class OvertimeApprovals(models.Model):
|
||||
workflow_records = self.env['soong.workflow.record'].search([
|
||||
('workflow_id.name', '=', '加班'),
|
||||
('create_uid', '=', self.env.user.id),
|
||||
('reclaim_state', '=', False),
|
||||
('reclaim_state', '!=', False),
|
||||
])
|
||||
if not workflow_records:
|
||||
continue
|
||||
|
||||
@@ -10,6 +10,26 @@ class HrPayrollStructureType(models.Model):
|
||||
sequence = fields.Char(related="default_struct_id.sequence",store=True)
|
||||
yuthon_company = fields.Selection([('thtz', 'thtz')], default="thtz")
|
||||
company_id = fields.Many2one(related='default_struct_id.company_id', default=lambda self: self.env.company, store=True)
|
||||
is_company = fields.Boolean(string="本公司", default=True, compute='_compute_is_company',
|
||||
search='_search_part_of_company')
|
||||
|
||||
@api.depends_context('uid', 'company')
|
||||
@api.depends('company_id')
|
||||
def _compute_is_company(self):
|
||||
active_company_ids = self.env.companies
|
||||
for employee in self:
|
||||
employee.is_company = employee.company_id in active_company_ids
|
||||
|
||||
def _search_part_of_company(self, operator, value):
|
||||
company_ids = self.env.companies.ids
|
||||
# 处理反向操作符
|
||||
if not value:
|
||||
operator = '!=' if operator == '=' else '='
|
||||
# 使用company_id in company_ids的结构
|
||||
if operator == '=':
|
||||
return [('company_id', 'in', company_ids)]
|
||||
else: # operator == '!='
|
||||
return [('company_id', 'not in', company_ids)]
|
||||
|
||||
def sort_sequence(self):
|
||||
structure_ids = self.env["hr.payroll.structure.type"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
|
||||
@@ -55,11 +55,6 @@
|
||||
<field name="model_id" ref="model_yuthon_payroll_retired"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_payroll_type_setting_rule">
|
||||
<field name="name">职级类别多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_payroll_type_setting"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_salary_documents_rule">
|
||||
<field name="name">附件管理多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_salary_documents"/>
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
<field name="name">职级类型</field>
|
||||
<field name="res_model">hr.payroll.structure.type</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
<field name="domain">[('is_company', '=', True)]</field>
|
||||
<field name="context">{'search_default_group_lv_id': 1}</field>
|
||||
</record>
|
||||
<record id="action_sequence" model="ir.actions.server">
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
parent="human_resources_menu_root_board"
|
||||
action="hr.open_view_employee_list_my"
|
||||
sequence="1"/>
|
||||
<menuitem id="hr_contract_menu_root_board1"
|
||||
name="合同"
|
||||
parent="human_resources_menu_root_board"
|
||||
action="hr_contract.action_hr_contract"
|
||||
sequence="2"/>
|
||||
<!-- <menuitem id="hr_cs_payslip_line"-->
|
||||
<!-- name="工资条"-->
|
||||
<!-- parent="human_resources_menu_root_board"-->
|
||||
|
||||
Reference in New Issue
Block a user