From 140daaa181c65f44f66a99e168bff29ad5345f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Sun, 28 Sep 2025 14:31:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/applet_attendance.py | 5 +- .../models/property_meter_archives.py | 30 +++++------ .../models/property_meter_water.py | 54 ++++++++++--------- yuthon_property/models/yuthon_property.py | 2 +- yuthon_salary/wizard/salary_compute_wizard.py | 24 ++++++--- 5 files changed, 63 insertions(+), 52 deletions(-) diff --git a/yuthon_hr_attendance/controllers/applet_attendance.py b/yuthon_hr_attendance/controllers/applet_attendance.py index a922b0fc8..6c9479cfb 100644 --- a/yuthon_hr_attendance/controllers/applet_attendance.py +++ b/yuthon_hr_attendance/controllers/applet_attendance.py @@ -753,6 +753,7 @@ class AppletAttendance(Controller): # 去掉 数据为 0 的数据. electric_records = request.env(user=SUPERUSER_ID)['meter.archives.line'].search([ ('archives_state', '=', 'use'), + ('name', '=', 'X_新主机'), ('meter_date', '>=', first_day_str), ('meter_date', '<=', last_day_str) ]) @@ -782,7 +783,7 @@ class AppletAttendance(Controller): employee_name = property_info.lessee_id.name if property_info.lessee_id else '' else: building = '天河商贸大厦' - floor = '' + floor = electric.epitope_values_id.name if electric.epitope_values_id else '' room = '' address = '' employee_name = '' @@ -841,7 +842,7 @@ class AppletAttendance(Controller): employee_name = property_info.lessee_id.name if property_info.lessee_id else '' else: building = '天河商贸大厦' - floor = '' + floor = water.epitope_values_id.name if water.epitope_values_id else '' room = '' address = '' employee_name = '' diff --git a/yuthon_property/models/property_meter_archives.py b/yuthon_property/models/property_meter_archives.py index c6056aabb..147946653 100644 --- a/yuthon_property/models/property_meter_archives.py +++ b/yuthon_property/models/property_meter_archives.py @@ -43,18 +43,17 @@ class PropertyMeterArchives(models.Model): ('yuthon_property_id', '=', property.id), ('property_meter_archives_id', '=', meter.id) ], limit=1) - if not existing_energy: self.env['yuthon.property.energy'].create({ 'property_meter_archives_id': meter.id, 'yuthon_property_id': property.id, }) - invalid_energy = self.env['yuthon.property.energy'].search([ - ('yuthon_property_id', '=', property.id), - ('property_meter_archives_id', '=', False) - ]) - if invalid_energy: - invalid_energy.unlink() + + empty_meter_energy = self.env['yuthon.property.energy'].search([ + ('property_meter_archives_id', '=', False) + ]) + if empty_meter_energy: + empty_meter_energy.unlink() @api.onchange('name') def _onchange_line_ids(self): @@ -115,16 +114,15 @@ class PropertyMeterArchives(models.Model): @api.onchange('yuthon_property_ids') def _onchange_property(self): + if not self.line_ids: + return + sync_vals = {} if self.yuthon_property_ids: - meter_list = [] - for yuthon_property_id in self.yuthon_property_ids: - property_id = self.env['yuthon.property'].search([('id', '=', yuthon_property_id.id.origin)]) - property_id.is_electricity_meter = True - meter_list.append((0, 0, { - 'yuthon_property_id': property_id.id, - 'property_meter_archives_id': self.id.origin, - })) - property_id.energy_meter_ids = meter_list + sync_vals['yuthon_property_ids'] = [(6, 0, self.yuthon_property_ids.ids)] + if sync_vals: + self.line_ids.write(sync_vals) + self.update_epitope_values() + def action_property_meter_wizard(self): return { diff --git a/yuthon_property/models/property_meter_water.py b/yuthon_property/models/property_meter_water.py index bc22adc74..cc84c23c8 100644 --- a/yuthon_property/models/property_meter_water.py +++ b/yuthon_property/models/property_meter_water.py @@ -37,15 +37,23 @@ class PropertyMeterWater(models.Model): meter_ids = self.env["property.meter.water"].browse( self._context.get('active_ids', self._context.get('active_id'))) for meter in meter_ids: - if meter.epitope_values: - epitope_id = self.env['yuthon.epitope.values'].search([('name', '=', meter.epitope_values)]) - if not epitope_id: - epitope_id = self.env['yuthon.epitope.values'].create({'name': meter.epitope_values, - 'type': 'watermeter' - }) - meter.epitope_values_id = epitope_id.id - for line in meter.line_ids: - line.epitope_values_id = epitope_id.id + for property in meter.yuthon_property_ids: + existing_energy = self.env['yuthon.property.water'].search([ + ('yuthon_property_id', '=', property.id), + ('property_meter_water_id', '=', meter.id) + ], limit=1) + if not existing_energy: + self.env['yuthon.property.water'].create({ + 'property_meter_water_id': meter.id, + 'yuthon_property_id': property.id, + }) + + empty_meter_energy = self.env['yuthon.property.water'].search([ + ('property_meter_water_id', '=', False) + ]) + if empty_meter_energy: + empty_meter_energy.unlink() + def open_record(self): return { @@ -88,17 +96,14 @@ class PropertyMeterWater(models.Model): @api.onchange('yuthon_property_ids') def _onchange_property(self): + if not self.line_ids: + return + sync_vals = {} if self.yuthon_property_ids: - meter_list = [] - for yuthon_property_id in self.yuthon_property_ids: - property_id = self.env['yuthon.property'].search([('id', '=', yuthon_property_id.id.origin)]) - property_id.is_meter = True - meter_list.append((0, 0, { - 'yuthon_property_id': property_id.id, - 'property_meter_water_id': self.id.origin, - })) - property_id.water_meter_ids = meter_list - + sync_vals['yuthon_property_ids'] = [(6, 0, self.yuthon_property_ids.ids)] + if sync_vals: + self.line_ids.write(sync_vals) + self.update_epitope_values() def action_property_water_wizard(self): return { @@ -186,12 +191,11 @@ class MeterWaterLine(models.Model): 'yuthon_property_id': property.id, }) - invalid_water = self.env['yuthon.property.water'].search([ - ('yuthon_property_id', '=', property.id), - ('property_meter_water_id', '=', False) - ]) - if invalid_water: - invalid_water.unlink() + empty_meter_energy = self.env['yuthon.property.water'].search([ + ('property_meter_archives_id', '=', False) + ]) + if empty_meter_energy: + empty_meter_energy.unlink() @api.depends('current_read', 'last_read', 'meter_date', 'maximum_count', 'water_id') def compute_meter_values(self): diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py index 2fa88675e..9618ebefd 100644 --- a/yuthon_property/models/yuthon_property.py +++ b/yuthon_property/models/yuthon_property.py @@ -516,7 +516,7 @@ class YuthonProperty(models.Model): } class YuthonPropertyWater(models.Model): - _name = 'yuthon.property.water' + _name = 'property_meter_water_id' _description = '水表' property_meter_water_id = fields.Many2one('property.meter.water', string="水表库") diff --git a/yuthon_salary/wizard/salary_compute_wizard.py b/yuthon_salary/wizard/salary_compute_wizard.py index d3fe444a8..c015d8e57 100644 --- a/yuthon_salary/wizard/salary_compute_wizard.py +++ b/yuthon_salary/wizard/salary_compute_wizard.py @@ -311,18 +311,26 @@ class SalaryComputeWizard(models.Model): else: result = abs(line.total)*-1 # 或其他合理默认值 elif field_name == 'b_year': - # 获取合同转正日期的年份和月份 - if contract_end_date: # 确保转正日期存在 - contract_end_year = str(contract_end_date.year) - contract_end_month = str(contract_end_date.month) - # 判断是否为转正当月 - if contract_end_year == self.select_year and contract_end_month == self.select_time: + if contract_end_date: + select_year = self.select_year + select_month = self.select_time + next_month = contract_end_date.month + 1 + next_year = contract_end_date.year + if next_month > 12: + next_month = 1 + next_year += 1 + next_year_str = str(next_year) + next_month_str = str(next_month) + # 判断:选中年月 >= 转正后下个月 + if (select_year > next_year_str) or \ + (select_year == next_year_str and select_month >= next_month_str): last_year_salary = internship_id.employee_id.last_year_salary or 0 result = last_year_salary * 0.002 else: - result = 0 # 非转正当月默认值 + # 不满足条件(转正当月或之前) + result = 0 else: - result = 0 # 无转正日期时的默认值 + result = 0 else: if work_days != days: result = line.total * 0.8 * internship_days / days + line.total * work_days / days