From e2e1b125e88dfe6addf7570689874ed02dfcf396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E6=9C=AA=E5=A4=AE?= <2996985766@qq.com> Date: Sun, 12 Oct 2025 17:34:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8C=89=E6=9C=88=E4=BB=BD=E5=88=86?= =?UTF-8?q?=E7=BB=84=E6=98=BE=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- estate/models/estate_property.py | 14 ++++++++++++++ estate/views/estate_property_views.xml | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 0bc7e4e7c..cd0c3a84a 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -82,6 +82,12 @@ class EstateProperty(models.Model): best_price = fields.Float( string="最佳报价", compute="_compute_best_price", store=True ) + create_date_month = fields.Char( + string="创建月份", + compute="_compute_create_date_month", + store=True, + index=True, + ) # 房产预期价格必须严格为正数 _sql_constraints = [ ("check_expected_price", "CHECK(expected_price > 0)", "预期价格必须为正数"), @@ -166,6 +172,7 @@ class EstateProperty(models.Model): def action_set_offer_accepted(self): """设置为已接受报价""" return self.write({"state": "offer_accepted"}) + def action_set_sold(self): """设置为已售出""" # 将状态设置为已售出 @@ -179,3 +186,10 @@ class EstateProperty(models.Model): def do_reject_offer(self): """拒绝报价""" return self.write({"state": "offer_received"}) + + def _compute_create_date_month(self): + for rec in self: + if rec.create_date: + rec.create_date_month = rec.create_date.strftime("%Y-%m") + else: + rec.create_date_month = False diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 9ef0ca9fb..b4e255412 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,7 +10,8 @@ estate.property.tree estate.property - + @@ -131,6 +132,7 @@ + From 032461dd8d4d1ba1046e47be26c513fda7b341e7 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, 12 Oct 2025 17:43:25 +0800 Subject: [PATCH 2/2] =?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 --- attendance_iot/__manifest__.py | 2 +- yuthon_hr_attendance/models/hr_attendance.py | 18 +++++---- .../models/yuthon_shift_approval.py | 16 ++++---- .../views/hr_attendance_views.xml | 2 +- .../views/yuthon_shift_approval_views.xml | 40 +++++++++---------- .../models/yuthon_hr_employee.py | 7 +--- .../views/yuthon_hr_employee_views.xml | 14 +++---- .../models/property_lease_contract.py | 34 ++++++---------- .../views/property_lease_contract.xml | 8 ++-- .../models/yuthon_contract_addition.py | 2 + .../views/yuthon_contract_addition_views.xml | 1 + 11 files changed, 68 insertions(+), 76 deletions(-) diff --git a/attendance_iot/__manifest__.py b/attendance_iot/__manifest__.py index 6d172bc95..b4823af7e 100644 --- a/attendance_iot/__manifest__.py +++ b/attendance_iot/__manifest__.py @@ -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, diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index ab33e285f..581c661f9 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -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 diff --git a/yuthon_hr_attendance/models/yuthon_shift_approval.py b/yuthon_hr_attendance/models/yuthon_shift_approval.py index f2981d15f..734bf16a7 100644 --- a/yuthon_hr_attendance/models/yuthon_shift_approval.py +++ b/yuthon_hr_attendance/models/yuthon_shift_approval.py @@ -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='是否上会') diff --git a/yuthon_hr_attendance/views/hr_attendance_views.xml b/yuthon_hr_attendance/views/hr_attendance_views.xml index 3a2bee653..3aa6821b5 100644 --- a/yuthon_hr_attendance/views/hr_attendance_views.xml +++ b/yuthon_hr_attendance/views/hr_attendance_views.xml @@ -179,7 +179,7 @@ - 批量更新异常 + 批量更新班次名称 code diff --git a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml index efdd37316..a651baeee 100644 --- a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml +++ b/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml @@ -65,16 +65,6 @@ - - - - @@ -83,18 +73,18 @@ + + + + - - - - @@ -103,6 +93,16 @@ + + + + diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py index a8438a724..cfaadbf0f 100644 --- a/yuthon_hr_employee/models/yuthon_hr_employee.py +++ b/yuthon_hr_employee/models/yuthon_hr_employee.py @@ -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): diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml index b8ee4bb11..30a2c8a44 100644 --- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml @@ -638,13 +638,13 @@ - - - - - - - + + 更新员工主角色 + + + code + action = model.action_hr_state() + diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py index d1a5debb4..9acf4358e 100644 --- a/yuthon_property_approval/models/property_lease_contract.py +++ b/yuthon_property_approval/models/property_lease_contract.py @@ -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: diff --git a/yuthon_property_approval/views/property_lease_contract.xml b/yuthon_property_approval/views/property_lease_contract.xml index ffc1550ec..d58c90464 100644 --- a/yuthon_property_approval/views/property_lease_contract.xml +++ b/yuthon_property_approval/views/property_lease_contract.xml @@ -800,7 +800,7 @@ - + @@ -947,12 +947,12 @@ code action = model.all_end_approval() - - 更新合同类型 + + 一次性 code - action = model.update_contract_sort() + action = model.update_contract() 调换 diff --git a/yuthon_trade/models/yuthon_contract_addition.py b/yuthon_trade/models/yuthon_contract_addition.py index 5754676f2..4c77250c6 100644 --- a/yuthon_trade/models/yuthon_contract_addition.py +++ b/yuthon_trade/models/yuthon_contract_addition.py @@ -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="结束") diff --git a/yuthon_trade/views/yuthon_contract_addition_views.xml b/yuthon_trade/views/yuthon_contract_addition_views.xml index 3351629c5..f7996e911 100644 --- a/yuthon_trade/views/yuthon_contract_addition_views.xml +++ b/yuthon_trade/views/yuthon_contract_addition_views.xml @@ -45,6 +45,7 @@ +