From 295668b53b1e2299d6deadadd699783e90e6a913 Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Thu, 16 Jan 2025 11:27:41 +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 --- yuthon_hr_attendance/models/hr_attendance.py | 31 ++++- yuthon_issue/views/issue_library_views.xml | 2 +- .../models/property_deposit_list.py | 2 +- .../models/property_electric_reading.py | 24 ++-- yuthon_property/models/property_rent_list.py | 2 +- .../models/property_tariff_list.py | 2 +- yuthon_property/models/property_water_list.py | 4 +- .../models/property_water_reading.py | 15 ++- .../models/yuthon_resource_mgmt_config.py | 2 + .../views/property_electric_reading_views.xml | 8 +- .../views/property_tariff_list_views.xml | 2 +- .../views/property_water_list_views.xml | 2 +- .../views/property_water_reading_views.xml | 7 +- .../yuthon_resource_mgmt_config_views.xml | 2 + .../models/property_lease_contract.py | 107 ++++++++++++++---- 15 files changed, 163 insertions(+), 49 deletions(-) diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index f134cd0e8..22f647f45 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -286,10 +286,10 @@ class HrAttendance(models.Model): 'department': user.department_id.name, }) self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name) - # 工程部 - 白班 白值 + # 工程部 - 白班 def gc_white_in_remind(self): ba_up_users = self.env['planning.slot'].search( - [('role_id.name', '=', '工程部'), ('template_id.planning_name', 'in', ['白班', '白值'])]) + [('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')]) for user in ba_up_users: if user.start_datetime.date() == fields.date.today(): self.env['card.remind.form'].create({ @@ -313,7 +313,7 @@ class HrAttendance(models.Model): def gc_white_out_remind(self): ba_up_users = self.env['planning.slot'].search( - [('role_id.name', '=', '工程部'), ('template_id.planning_name', 'in', ['白班', '白值'])]) + [('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')]) for user in ba_up_users: if user.start_datetime.date() == fields.date.today(): self.env['card.remind.form'].create({ @@ -323,6 +323,31 @@ class HrAttendance(models.Model): 'department': user.department_id.name, }) self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name) + # 工程部 - 白值 + def gc_white_remind_in(self): + ba_up_users = self.env['planning.slot'].search( + [('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')]) + for user in ba_up_users: + if user.start_datetime.date() == fields.date.today(): + self.env['card.remind.form'].create({ + 'name': user.resource_id.employee_id.name, + 'start_time': datetime.now(), + 'shift': user.template_id.planning_name, + 'department': user.department_id.name, }) + self.card_in_comment(user.resource_id, user.template_id.planning_name) + + def gc_white_remind_out(self): + ba_up_users = self.env['planning.slot'].search( + [('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')]) + for user in ba_up_users: + if user.start_datetime.date() == fields.date.today(): + self.env['card.remind.form'].create({ + 'name': user.resource_id.employee_id.name, + 'start_time': datetime.now(), + 'shift': user.template_id.planning_name, + 'department': user.department_id.name, }) + self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name) + # 工程部-中值夜 def gc_night_remind_in(self): ba_up_users = self.env['planning.slot'].search( diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml index fbbe7a1be..ec4bc15aa 100644 --- a/yuthon_issue/views/issue_library_views.xml +++ b/yuthon_issue/views/issue_library_views.xml @@ -2673,7 +2673,7 @@ issue.library tree,form diff --git a/yuthon_property/models/property_deposit_list.py b/yuthon_property/models/property_deposit_list.py index 4073aa170..d940dda74 100644 --- a/yuthon_property/models/property_deposit_list.py +++ b/yuthon_property/models/property_deposit_list.py @@ -6,4 +6,4 @@ class PropertyDepositList(models.Model): _description = '押金列表' property_id = fields.Many2one('yuthon.property', string='物业') - lessee_id = fields.Many2one(related='property_id.lessee_id', string='承租方') \ No newline at end of file + lessee_id = fields.Many2one('property.tenant.information', string='承租方') \ No newline at end of file diff --git a/yuthon_property/models/property_electric_reading.py b/yuthon_property/models/property_electric_reading.py index 347f5943d..73414855f 100644 --- a/yuthon_property/models/property_electric_reading.py +++ b/yuthon_property/models/property_electric_reading.py @@ -11,7 +11,7 @@ class PropertyElectricReading(models.Model): position = fields.Char(string='单元编号') property_id = fields.Many2one('yuthon.property', string='地址') users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) - lessee_id = fields.Many2one(related='property_id.lessee_id', string="承租方") + lessee_id = fields.Many2one('property.tenant.information', string='承租方') state = fields.Char(string='状态') employee_ids = fields.Many2many('hr.employee', string='抄表人') meter_type = fields.Selection([('electric', '电表'), ('water', '水表')], string='仪表类型') @@ -19,13 +19,14 @@ class PropertyElectricReading(models.Model): other = fields.Char(string='其他') billing_period = fields.Date(string='账期') meter_date= fields.Date(string='抄表年月') - last_meter = fields.Date(string='上次') + last_dosage = fields.Float(string='上次') + last_meter = fields.Date(string='上次抄表日期') current_meter = fields.Float(string='本次', tracking=True) - apply_standards = fields.Char(string='应用标准') + fee_id = fields.Many2one('yuthon.water.setting', string="收费标准") price_unit = fields.Float(string='单价') ratio = fields.Float(string='倍率') amount_wastage = fields.Float(string='损耗量') - dosage = fields.Float(string='用量') + dosage = fields.Float(string='用量', compute='_compute_dosage') is_push = fields.Boolean(string='已推送') generate_charges = fields.Float(string='生成费用') type = fields.Selection([('public', '公共'), ('fees', '收费')], string='收费类型') @@ -61,8 +62,13 @@ class PropertyElectricReading(models.Model): raise UserError(f"该仪表已经推送,不能重复推送") self.env["property.tariff.list"].create({ 'code': rec.name, - 'property_id': rec.yuthon_property_id.id if rec.yuthon_property_id else None, - 'ratio': rec.gauge_magnification, - 'position': rec.unit_number, - 'type': rec.type, - }) \ No newline at end of file + 'property_id': rec.yuthon_property_id.id if rec.yuthon_property_id else None, + 'ratio': rec.gauge_magnification, + 'position': rec.unit_number, + 'type': rec.type, + }) + + @api.depends('last_dosage', 'current_meter') + def _compute_dosage(self): + for record in self: + record.dosage = record.current_meter - record.last_meter \ No newline at end of file diff --git a/yuthon_property/models/property_rent_list.py b/yuthon_property/models/property_rent_list.py index 063fde13a..c43900bfd 100644 --- a/yuthon_property/models/property_rent_list.py +++ b/yuthon_property/models/property_rent_list.py @@ -6,7 +6,7 @@ class PropertyRentList(models.Model): _description = '租金列表' property_id = fields.Many2one('yuthon.property', string='物业') - lessee_id = fields.Many2one(related='property_id.lessee_id', string='承租方') + lessee_id = fields.Many2one('property.tenant.information', string='承租方') admin_id = fields.Many2one(related='property_id.admin_id', string="片区管理员") company_id = fields.Many2one(related='property_id.company_id', string="所属公司") rent_month = fields.Float(string='当月租金') diff --git a/yuthon_property/models/property_tariff_list.py b/yuthon_property/models/property_tariff_list.py index eebce76db..9ef7fedb2 100644 --- a/yuthon_property/models/property_tariff_list.py +++ b/yuthon_property/models/property_tariff_list.py @@ -13,7 +13,7 @@ class PropertyTariffList(models.Model): year = fields.Char(string='所属年') month = fields.Char(string='所属月') tariff_meter_reading = fields.Float(string='电费读数') - tariff_fee_standard = fields.Float(string='电费标准') + fee_id = fields.Many2one('yuthon.water.setting', string="收费标准") original_amount = fields.Float(string='金额') deduction_amount = fields.Float(string='减免金额') remarks = fields.Text(string='备注') diff --git a/yuthon_property/models/property_water_list.py b/yuthon_property/models/property_water_list.py index 8b0475e84..7a72a2a6b 100644 --- a/yuthon_property/models/property_water_list.py +++ b/yuthon_property/models/property_water_list.py @@ -13,8 +13,8 @@ class PropertyWaterList(models.Model): year = fields.Char(string='所属年') month = fields.Char(string='所属月') water_meter_reading = fields.Float(string='水表读数') - water_fee_standard = fields.Float(string='水费标准') - original_amount = fields.Float(string='原金额') + fee_id = fields.Many2one('yuthon.water.setting', string="水费标准") + original_amount = fields.Float(string='金额') deduction_amount = fields.Float(string='减免金额') remarks = fields.Text(string='备注') is_cancel = fields.Boolean(string='作废') diff --git a/yuthon_property/models/property_water_reading.py b/yuthon_property/models/property_water_reading.py index bc2027162..f15b75cf2 100644 --- a/yuthon_property/models/property_water_reading.py +++ b/yuthon_property/models/property_water_reading.py @@ -1,4 +1,5 @@ from odoo import models, fields, api +from odoo.odoo.tools.populate import compute class PropertyWaterReading(models.Model): @@ -11,7 +12,7 @@ class PropertyWaterReading(models.Model): property_id = fields.Many2one('yuthon.property', string='地址') users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) contract = fields.Char(string='合同') - lessee_id = fields.Many2one(related='property_id.lessee_id', string="承租方") + lessee_id = fields.Many2one('property.tenant.information', string='承租方') state = fields.Char(string='状态') employee_ids = fields.Many2many('hr.employee', string='抄表人') meter_type = fields.Selection([('electric', '电表'), ('water', '水表')], string='仪表类型') @@ -19,13 +20,14 @@ class PropertyWaterReading(models.Model): other = fields.Char(string='其他') billing_period = fields.Date(string='账期') meter_date= fields.Date(string='抄表年月') - last_meter = fields.Date(string='上次') + last_dosage = fields.Float(string='上次') + last_meter = fields.Date(string='上次抄表日期') current_meter = fields.Float(string='本次', tracking=True) - apply_standards = fields.Char(string='应用标准') + fee_id = fields.Many2one('yuthon.water.setting', string="收费标准") price_unit = fields.Float(string='单价') ratio = fields.Float(string='倍率') amount_wastage = fields.Float(string='损耗量') - dosage = fields.Float(string='用量') + dosage = fields.Float(string='用量', compute='_compute_dosage') is_push = fields.Boolean(string='已推送') generate_charges = fields.Float(string='生成费用') type = fields.Selection([('public', '公共'), ('fees', '收费')], string='收费类型') @@ -43,6 +45,11 @@ class PropertyWaterReading(models.Model): description="您有抄表待处理,请及时处理", url=str, btntxt="详细信息") + @api.depends('last_dosage', 'current_meter') + def _compute_dosage(self): + for record in self: + record.dosage = record.current_meter - record.last_meter + def button_details(self): return { 'name': '抄表详情', diff --git a/yuthon_property/models/yuthon_resource_mgmt_config.py b/yuthon_property/models/yuthon_resource_mgmt_config.py index 5b40ba804..37d26fe16 100644 --- a/yuthon_property/models/yuthon_resource_mgmt_config.py +++ b/yuthon_property/models/yuthon_resource_mgmt_config.py @@ -70,6 +70,7 @@ class YuthonElectricitySetting(models.Model): _description = '电费标准配置' name = fields.Char(string="电费标准") + amount = fields.Float(string="金额") class YuthonWaterSetting(models.Model): @@ -77,6 +78,7 @@ class YuthonWaterSetting(models.Model): _description = '水费标准配置' name = fields.Char(string="水费标准") + amount = fields.Float(string="金额") class YuthonPropertySetting(models.Model): diff --git a/yuthon_property/views/property_electric_reading_views.xml b/yuthon_property/views/property_electric_reading_views.xml index 483644fa2..644257af1 100644 --- a/yuthon_property/views/property_electric_reading_views.xml +++ b/yuthon_property/views/property_electric_reading_views.xml @@ -9,14 +9,16 @@ + - + + - + @@ -53,7 +55,7 @@ - + diff --git a/yuthon_property/views/property_tariff_list_views.xml b/yuthon_property/views/property_tariff_list_views.xml index d8b6cedde..5233a15a9 100644 --- a/yuthon_property/views/property_tariff_list_views.xml +++ b/yuthon_property/views/property_tariff_list_views.xml @@ -11,7 +11,7 @@ - + diff --git a/yuthon_property/views/property_water_list_views.xml b/yuthon_property/views/property_water_list_views.xml index b805acf3f..7486decce 100644 --- a/yuthon_property/views/property_water_list_views.xml +++ b/yuthon_property/views/property_water_list_views.xml @@ -11,7 +11,7 @@ - + diff --git a/yuthon_property/views/property_water_reading_views.xml b/yuthon_property/views/property_water_reading_views.xml index 302d55da4..b3d2a14cb 100644 --- a/yuthon_property/views/property_water_reading_views.xml +++ b/yuthon_property/views/property_water_reading_views.xml @@ -14,9 +14,10 @@ - + + - + @@ -53,7 +54,7 @@ - + diff --git a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml index 5ec5474ae..2b6bad568 100644 --- a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml +++ b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml @@ -138,6 +138,7 @@ + @@ -152,6 +153,7 @@ + diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py index 44800de78..60467220f 100644 --- a/yuthon_property_approval/models/property_lease_contract.py +++ b/yuthon_property_approval/models/property_lease_contract.py @@ -57,6 +57,7 @@ class PropertyTariffList(models.Model): contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批") + class PropertyWaterList(models.Model): _inherit = 'property.water.list' @@ -68,23 +69,82 @@ class PropertyElectricReading(models.Model): contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批") def button_push_electric(self): - pass - + for rec in self: + if rec.is_push: + raise UserError("该抄表已经推送,不能重复推送") + self.env["property.tariff.list"].create({ + 'tariff_meter_number': rec.code, + 'property_id': rec.property_id.id if rec.property_id else None, + 'contract_id': rec.contract_id.id if rec.contract_id else None, + 'lessee_id':rec.contract_id.lessee_id.id if rec.contract_id.lessee_id else None, + 'fee_id': rec.fee_id.id if rec.fee_id else None, + 'due_date': rec.meter_date, + 'original_amount':rec.fee_id.amount * rec.dosage if rec.fee_id.amount else 0, + 'tariff_meter_reading': rec.dosage + }) + rec.write({ + 'is_push': True, + }) def batch_reading_electric(self): - pass - - + archives_ids = self.env["property.electric.reading"].browse( + self._context.get('active_ids', self._context.get('active_id'))) + for record in archives_ids: + if record.is_push: + raise UserError(f"该{record.name}仪表已经推送,不能重复推送") + self.env["property.water.list"].create({ + 'tariff_meter_number': record.code, + 'property_id': record.property_id.id if record.property_id else None, + 'contract_id': record.contract_id.id if record.contract_id else None, + 'lessee_id': record.contract_id.lessee_id.id if record.contract_id.lessee_id else None, + 'fee_id': record.fee_id.id if record.fee_id else None, + 'due_date': record.meter_date, + 'original_amount': record.fee_id.amount * record.dosage if record.fee_id.amount else 0, + 'tariff_meter_reading': record.dosage + }) + record.write({ + 'is_push': True, + }) class PropertyWaterReading(models.Model): _inherit = 'property.water.reading' contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批") def button_push_water(self): - pass - + for rec in self: + if rec.is_push: + raise UserError("该抄表已经推送,不能重复推送") + self.env["property.water.list"].create({ + 'water_meter_number': rec.code, + 'property_id': rec.property_id.id if rec.property_id else None, + 'fee_id': rec.fee_id.id if rec.fee_id else None, + 'lessee_id': rec.contract_id.lessee_id.id if rec.contract_id.lessee_id else None, + 'contract_id': rec.contract_id.id if rec.contract_id else None, + 'original_amount': rec.fee_id.amount * rec.dosage if rec.fee_id.amount else 0, + 'due_date': rec.meter_date, + 'water_meter_reading':rec.dosage + }) + rec.write({ + 'is_push': True, + }) def batch_reading_water(self): - pass - + archives_ids = self.env["property.water.reading"].browse( + self._context.get('active_ids', self._context.get('active_id'))) + for record in archives_ids: + if record.is_push: + raise UserError(f"该{record.name}仪表已经推送,不能重复推送") + self.env["property.water.list"].create({ + 'water_meter_number': record.code, + 'property_id': record.property_id.id if record.property_id else None, + 'contract_id': record.contract_id.id if record.contract_id else None, + 'lessee_id': record.contract_id.lessee_id.id if record.contract_id.lessee_id else None, + 'fee_id': record.fee_id.id if record.fee_id else None, + 'due_date': record.meter_date, + 'original_amount': record.fee_id.amount * record.dosage if record.fee_id.amount else 0, + 'water_meter_reading':record.dosage + }) + record.write({ + 'is_push': True, + }) class PropertyMeterArchives(models.Model): _inherit = 'property.meter.archives' @@ -101,36 +161,41 @@ class PropertyMeterArchives(models.Model): def button_reading_push(self): for rec in self: - rec.write({ - 'is_push': True, - }) if rec.is_push: raise UserError("该仪表已经推送,不能重复推送") self.env["property.electric.reading"].create({ 'code': rec.name, 'property_id': rec.yuthon_property_id.id if rec.yuthon_property_id else None, + 'fee_id': rec.fee_id.id if rec.standards_id else None, + 'lessee_id': rec.contract_id.lessee_id.id if rec.contract_id.lessee_id else None, 'ratio': rec.gauge_magnification, 'position': rec.unit_number, 'type': rec.type, 'contract_id':rec.contract_id.id }) + rec.write({ + 'is_push': True, + }) def batch_reading_push(self): archives_ids = self.env["property.meter.archives"].browse(self._context.get('active_ids', self._context.get('active_id'))) for record in archives_ids: - record.write({ - 'is_push': True, - }) if record.is_push: raise UserError(f"该{record.name}仪表已经推送,不能重复推送") self.env["property.electric.reading"].create({ 'code': record.name, 'property_id': record.yuthon_property_id.id if record.yuthon_property_id else None, + 'fee_id': record.standards_id.id if record.standards_id else None, + 'lessee_id': record.contract_id.lessee_id.id if record.contract_id.lessee_id else None, 'ratio': record.gauge_magnification, 'position': record.unit_number, 'type': record.type, 'contract_id':record.contract_id.id }) + record.write({ + 'is_push': True, + }) + class PropertyMeterWater(models.Model): _inherit = 'property.meter.water' @@ -139,19 +204,21 @@ class PropertyMeterWater(models.Model): def button_reading_water_push(self): for rec in self: - rec.write({ - 'is_push': True, - }) if rec.is_push: raise UserError(f"该仪表已经推送,不能重复推送") self.env["property.water.reading"].create({ 'code': rec.name , 'property_id': rec.yuthon_property_id.id if rec.yuthon_property_id else None, 'ratio': rec.gauge_magnification, + 'fee_id': rec.standards_id.id if rec.standards_id else None, + 'lessee_id': rec.contract_id.lessee_id.id if rec.contract_id.lessee_id else None, 'position': rec.unit_number , 'type': rec.type, 'contract_id': rec.contract_id.id }) + rec.write({ + 'is_push': True, + }) def batch_reading_water_push(self): water_ids = self.env["property.meter.water"].browse(self._context.get('active_ids', self._context.get('active_id'))) @@ -164,6 +231,8 @@ class PropertyMeterWater(models.Model): self.env["property.water.reading"].create({ 'code': record.name, 'property_id': record.yuthon_property_id.id if record.yuthon_property_id else None, + 'fee_id': record.standards_id.id if record.standards_id else None, + 'lessee_id': record.contract_id.lessee_id.id if record.contract_id.lessee_id else None, 'ratio': record.gauge_magnification, 'position': record.unit_number, 'type': record.type, @@ -187,7 +256,7 @@ class PropertyContractLine(models.Model): yuthon_property_id = fields.Many2one('yuthon.property', string="关联物业信息") lease_contract_id = fields.Many2one('property.lease.contract', string="合同名称") - lessee_id = fields.Many2one(related='yuthon_property_id.lessee_id', string="承租方") + lessee_id = fields.Many2one('property.tenant.information', string='承租方') start_time = fields.Date(string="生效日期") end_date = fields.Date(string="失效日期")