添加功能

This commit is contained in:
李鹏宇
2025-10-12 17:43:25 +08:00
parent b5382bcad0
commit 032461dd8d
11 changed files with 68 additions and 76 deletions
+1 -1
View File
@@ -18,7 +18,7 @@
'views/attendance_iot_user_views.xml',
'views/attendance_iot_manager_views.xml',
'views/attendance_iot_views.xml',
'views/inherit_hr_employee_views.xml',
# 'views/inherit_hr_employee_views.xml',
'wizard/attendance_iot_manager_wizard_views.xml',
],
'installable': True,
+10 -8
View File
@@ -1145,11 +1145,9 @@ class HrAttendance(models.Model):
attendance_ids = self.env["hr.attendance"].browse(
self._context.get('active_ids', self._context.get('active_id')))
for attendance in attendance_ids:
if attendance.is_no_card:
attendance.absenteeism_card = True
attendance.is_abnormal = True
attendance.set_shift_name()
def _set_shift_name(self):
def set_shift_name(self):
"""抽取的统一班次名称设置逻辑"""
for record in self:
if record.shift_id:
@@ -1193,7 +1191,7 @@ class HrAttendance(models.Model):
# 检查是否为周末
weekday = record.current_data.isoweekday()
if weekday in [6, 7]: # 6=周六,7=周日
if weekday in [6, 7]:
is_weekend = True
if is_shift_replacement:
@@ -1203,7 +1201,11 @@ class HrAttendance(models.Model):
else:
record.shift_name = '行政班次'
record.is_week = is_weekend
if record.shift_name == "休息" and not is_holiday:
record.is_week = is_weekend
else:
record.is_week = False
record.is_holiday = is_holiday
@api.model
@@ -1215,14 +1217,14 @@ class HrAttendance(models.Model):
today = fields.Date.today()
if current_data > today:
return record
record._set_shift_name()
record.set_shift_name()
return record
def write(self, vals):
result = super(HrAttendance, self).write(vals)
# 当更新考勤日期或班次时,重新计算班次名称
if 'current_data' in vals or 'shift_id' in vals:
self._set_shift_name()
self.set_shift_name()
for record in self:
self._update_vacation_report(record)
return result
@@ -16,18 +16,18 @@ class YuthonShiftApproval(models.Model):
transferees_id = fields.Many2one('resource.resource', string="调班对象", domain="[('id', 'in', resource_ids)]")
alternate_id = fields.Many2one('resource.resource', string="替班对象", domain="[('id', 'in', resource_ids)]")
alternate_shifts = fields.Selection([('transferees', '调班'), ('alternate', '替班')], string="调替班" , default='transferees')
shift_start = fields.Datetime(string="开始时间")
shift_end = fields.Datetime(string="结束时间")
shift_id = fields.Many2one('planning.slot', string="申请人1")
shift_start = fields.Datetime(related='shift_id.start_datetime', string="开始时间")
shift_end = fields.Datetime(related='shift_id.end_datetime', string="结束时间")
shift_two_start = fields.Datetime(string="开始时间")
shift_two_end = fields.Datetime(string="结束时间")
shift_two_id = fields.Many2one('planning.slot', string="申请人2")
shift_two_start = fields.Datetime(related='shift_two_id.start_datetime', string="开始时间")
shift_two_end = fields.Datetime(related='shift_two_id.end_datetime', string="结束时间")
return_start = fields.Datetime(string="开始时间")
return_end = fields.Datetime(string="结束时间")
return_id = fields.Many2one('planning.slot', string="调班人1")
return_start = fields.Datetime(related='return_id.start_datetime', string="开始时间")
return_end = fields.Datetime(related='return_id.end_datetime', string="结束时间")
return_two_start = fields.Datetime(string="开始时间")
return_two_end = fields.Datetime(string="结束时间")
return_two_id = fields.Many2one('planning.slot', string="调班人2")
return_two_start = fields.Datetime(related='return_two_id.start_datetime', string="开始时间")
return_two_end = fields.Datetime(related='return_two_id.end_datetime', string="结束时间")
department_id = fields.Many2one('hr.department', string="部门", related='resource_id.employee_id.department_id')
resource_ids = fields.Many2many('resource.resource', string="资源用户列表")
is_issues = fields.Boolean(string='是否上会')
@@ -179,7 +179,7 @@
<field name="groups_id" eval="[(4, ref('yuthon_hr_attendance.group_he_attendance_sign_manager'))]"/>
</record>
<record id="action_update_abnormal_shift" model="ir.actions.server">
<field name="name">批量更新异常</field>
<field name="name">批量更新班次名称</field>
<field name="model_id" ref="yuthon_hr_attendance.model_hr_attendance"/>
<field name="binding_model_id" ref="yuthon_hr_attendance.model_hr_attendance"/>
<field name="state">code</field>
@@ -65,16 +65,6 @@
<field name="department_id" invisible="1"/>
</group>
<group col="3" string="班次1">
<group>
<field name="shift_id" domain="[('resource_id', '=', resource_id)]" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
<field name="return_id" domain="[('resource_id', '=', transferees_id)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
</group>
<group>
<field name="shift_start"/>
<field name="return_start"/>
@@ -83,18 +73,18 @@
<field name="shift_end"/>
<field name="return_end"/>
</group>
<group>
<field name="shift_id" domain="[('resource_id', '=', resource_id), ('start_datetime', '&gt;', shift_start), ('end_datetime', '&lt;', shift_end)]" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
<field name="return_id" domain="[('resource_id', '=', transferees_id), ('start_datetime', '&gt;', shift_start), ('end_datetime', '&lt;', shift_end)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
</group>
</group>
<group string="班次2" col="3">
<group>
<field name="shift_two_id" domain="[('resource_id', '=', resource_id)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
<field name="return_two_id" domain="[('resource_id', '=', transferees_id)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
</group>
<group>
<field name="shift_two_start"/>
<field name="return_two_start"/>
@@ -103,6 +93,16 @@
<field name="shift_two_end"/>
<field name="return_two_end"/>
</group>
<group>
<field name="shift_two_id" domain="[('resource_id', '=', resource_id), ('start_datetime', '&gt;', shift_start), ('end_datetime', '&lt;', shift_end)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
<field name="return_two_id" domain="[('resource_id', '=', transferees_id), ('start_datetime', '&gt;', shift_start), ('end_datetime', '&lt;', shift_end)]" invisible="alternate_shifts != 'transferees'" context="{'tree_view_ref': 'yuthon_hr_attendance.view_yuthon_shift_context',
'search_view_ref': 'yuthon_hr_attendance.search_yuthon_shift_context',
'order': 'start_datetime desc',
'search_default_group_by_month': True,}"/>
</group>
</group>
</sheet>
</form>
@@ -337,7 +337,7 @@ class YuthonHrEmployee(models.Model):
employee_id.late_allowed = 3
@api.onchange('user_role_id')
def _onchange_user_role_id(self):
def onchange_user_role_id(self):
if self.user_role_id:
user_id = self.env['soong.user.role'].search([('id', '=', self.user_role_id.id)])
user_id.write({'personnel_ids': [(4, self.id.origin)]})
@@ -605,10 +605,7 @@ class YuthonHrEmployee(models.Model):
employee = self.env["hr.employee"].browse(
self._context.get('active_ids', self._context.get('active_id')))
for employee_id in employee:
if employee_id.contract_id and employee_id.active == True:
employee_id.sudo().write({
'user_state': 'in'
})
employee_id.onchange_user_role_id()
@api.depends('confirmation_date')
def _compute_regularization_year(self):
@@ -638,13 +638,13 @@
<!-- <field name="state">code</field>-->
<!-- <field name="code">action = model.action_hr_time_form()</field>-->
<!-- </record>-->
<!-- <record id="all_data_write_employee_state" model="ir.actions.server">-->
<!-- <field name="name">更新员工状态</field>-->
<!-- <field name="model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="binding_model_id" ref="hr.model_hr_employee"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">action = model.action_hr_state()</field>-->
<!-- </record>-->
<record id="all_data_write_employee_state" model="ir.actions.server">
<field name="name">更新员工主角色</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.action_hr_state()</field>
</record>
<!-- <record id="view_employee_form_inherit_hr_attendance" model="ir.ui.view">-->
<!-- <field name="name">hr.employee.attendance.form</field>-->
@@ -347,20 +347,12 @@ class PropertyLeaseContract(models.Model):
])
self.not_received = sum(record.submitted for record in not_reconciled_records)
def update_contract_sort(self):
def update_contract(self):
contract_ids = self.env["property.lease.contract"].browse(
self._context.get('active_ids', self._context.get('active_id')))
for rec in contract_ids:
if rec.lease_ids:
if rec.lease_ids[0].address_id.asset_type_id.name == '广告位':
contract_sort = 'ads'
elif rec.lease_ids[0].address_id.asset_type_id.name == '管子间':
contract_sort = 'guan'
else:
contract_sort = 'property'
else:
contract_sort = 'property'
rec.write({'contract_sort': contract_sort})
rec.compute_expiration_coming()
def update_admin_id(self):
contract_ids = self.env["property.lease.contract"].browse(
@@ -618,23 +610,21 @@ class PropertyLeaseContract(models.Model):
else:
record.end_comparison = None
@api.depends('term_end_time', 'actual_end_time')
def _compute_expiration_coming(self):
@api.depends('actual_end_time')
def compute_expiration_coming(self):
for record in self:
if record.term_end_time and record.actual_end_time:
if record.actual_end_time < record.term_end_time:
delta = record.term_end_time - record.actual_end_time
if 30< delta.days < 90:
record.expiration_coming = 'coming'
elif delta.days <=30:
record.expiration_coming = 'due'
else:
record.expiration_coming = None
if record.actual_end_time:
delta = record.actual_end_time - date.today()
if 0< delta.days < 90:
record.expiration_coming = 'coming'
elif delta.days <=0:
record.expiration_coming = 'due'
else:
record.expiration_coming = None
else:
record.expiration_coming = None
@api.onchange('total_area', 'rent')
def _onchange_unit_price(self):
for i in self:
@@ -800,7 +800,7 @@
<filter string="待执行" name="to" domain="[('contact_state', '=', 'to')]" />
<filter string="已执行" name="complete" domain="[('contact_state', '=', 'complete')]" />
<filter string="已作废" name="done" domain="[('contact_state', '=', 'terminate')]"/>
<filter string="历史" name="early" domain="[('contact_state', '=', 'early_termination')]"/>
<filter string="历史" name="early" domain="[('expiration_coming', '=', 'due')]"/>
<filter string="即将到期" name="reclaim" domain="[('expiration_coming', '=', 'coming')]"/>
</quick_filter>
</header_search>
@@ -947,12 +947,12 @@
<field name="state">code</field>
<field name="code">action = model.all_end_approval()</field>
</record>
<record id="update_contract_sort" model="ir.actions.server">
<field name="name">更新合同类型</field>
<record id="update_contract" model="ir.actions.server">
<field name="name">一次性</field>
<field name="model_id" ref="yuthon_property_approval.model_property_lease_contract"/>
<field name="binding_model_id" ref="yuthon_property_approval.model_property_lease_contract"/>
<field name="state">code</field>
<field name="code">action = model.update_contract_sort()</field>
<field name="code">action = model.update_contract()</field>
</record>
<record id="all_data_action_use_admin" model="ir.actions.server">
<field name="name">调换</field>
@@ -20,7 +20,9 @@ class YuthonContractAddition(models.Model):
issues_result = fields.Html(string="会议结果")
related_issues_id = fields.Many2one('issue.library', string="关联议题")
reason = fields.Text(string="正文")
workflow_id = fields.Many2one('soong.workflow.record', string="流程")
document_ids = fields.Many2many('ir.attachment', string="附件")
active = fields.Boolean('Active', default=True, tracking=True)
work_end = fields.Boolean(string="结束")
@@ -45,6 +45,7 @@
<field name="name"/>
<field name="users_id"/>
<field name="reason"/>
<field name="workflow_id" required="1"/>
<field name="document_ids" widget="preview_many2many"/>
<field name="department_id" invisible="1"/>
</group>