添加功能

This commit is contained in:
李鹏宇
2025-09-24 17:38:41 +08:00
parent 59f17be0a1
commit 66e4e8a893
8 changed files with 100 additions and 39 deletions
@@ -143,7 +143,7 @@ class MeterArchivesLine(models.Model):
archives_id = fields.Many2one('property.meter.archives', string='电表库', required=True, ondelete='cascade')
name = fields.Char(string='仪表编号')
epitope_values = fields.Char(string='表位置')
lessee_id = fields.Many2one('property.tenant.information', string='承租方', compute='_compute_lessee_id')
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
yuthon_property_ids = fields.Many2many('yuthon.property', string='物业信息')
last_meter = fields.Date(string='上次抄表日期')
last_dosage = fields.Float(string='上次用量', compute="compute_meter_values")
@@ -208,8 +208,8 @@ class MeterArchivesLine(models.Model):
else:
line.last_dosage = 0.0
@api.depends('yuthon_property_ids')
def _compute_lessee_id(self):
@api.onchange('yuthon_property_ids')
def onchange_lessee_id(self):
for record in self:
if record.yuthon_property_ids:
record.lessee_id = record.yuthon_property_ids[0].lessee_id
@@ -220,8 +220,7 @@ class MeterArchivesLine(models.Model):
meter_ids = self.env["meter.archives.line"].browse(
self._context.get('active_ids', self._context.get('active_id')))
for record in meter_ids:
if record.last_meter:
record.meter_date = record.last_meter
record.onchange_lessee_id()
class PropertyElectricReading(models.Model):
_name = 'property.electric.reading'
@@ -114,7 +114,7 @@ class MeterWaterLine(models.Model):
water_id = fields.Many2one('property.meter.water', string='水表库', required=True, ondelete='cascade')
name = fields.Char(string='仪表编号')
epitope_values = fields.Char(string='表位置')
lessee_id = fields.Many2one('property.tenant.information', string='承租方', compute='_compute_lessee_id')
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
yuthon_property_ids = fields.Many2many('yuthon.property', string='物业信息')
last_meter = fields.Date(string='上次抄表日期')
last_dosage = fields.Float(string='上次用量', compute="compute_meter_values")
@@ -184,9 +184,8 @@ class MeterWaterLine(models.Model):
else:
line.last_dosage = 0.0
@api.depends('yuthon_property_ids')
def _compute_lessee_id(self):
@api.onchange('yuthon_property_ids')
def onchange_lessee_id(self):
for record in self:
if record.yuthon_property_ids:
record.lessee_id = record.yuthon_property_ids[0].lessee_id
@@ -197,9 +196,7 @@ class MeterWaterLine(models.Model):
meter_ids = self.env["meter.water.line"].browse(
self._context.get('active_ids', self._context.get('active_id')))
for record in meter_ids:
if record.last_meter:
record.meter_date = record.last_meter
record.onchange_lessee_id()
class PropertyWaterReading(models.Model):
_name = 'property.water.reading'
@@ -21,7 +21,7 @@
<field name="name">property.bank.statements.tree</field>
<field name="model">property.bank.statements</field>
<field name="arch" type="xml">
<tree string="银行流水" editable="bottom" js_class="custom_bank_statements_button" edit="false" delete="false">
<tree string="银行流水" editable="bottom" js_class="custom_bank_statements_button" edit="false" delete="false" default_order="start_time desc">
<field name="your_own_account" optional="hide"/>
<field name="your_own_unit" optional="hide"/>
<header>
@@ -94,9 +94,9 @@
<field name="model">meter.archives.line</field>
<field name="arch" type="xml">
<tree string="电表任务" create="False" editable="bottom" js_class="custom_meter_button" decoration-success="not current_read" >
<header>
<button name="update_date" type="object" string="更新日期" class="oe_highlight"/>
</header>
<!-- <header>-->
<!-- <button name="update_date" type="object" string="更新合同" class="oe_highlight"/>-->
<!-- </header>-->
<field name="name" readonly="1"/>
<field name="epitope_values"/>
<field name="unit_number"/>
@@ -98,9 +98,9 @@
<field name="model">meter.water.line</field>
<field name="arch" type="xml">
<tree string="水表任务" create="0" editable="bottom" js_class="custom_water_button" decoration-success="not current_read" >
<header>
<button name="update_date" type="object" string="更新日期" class="oe_highlight"/>
</header>
<!-- <header>-->
<!-- <button name="update_date" type="object" string="更新" class="oe_highlight"/>-->
<!-- </header>-->
<field name="name" readonly="1"/>
<field name="yuthon_property_ids" string="地址" readonly="1" widget="many2many_tags" />
<field name="lessee_id" options="{'no_create': True}" readonly="1"/>
@@ -86,6 +86,7 @@
<field name="title_deed" invisible="1"/>
<field name="purpose_id" invisible="1"/>
<field name="admin_id" invisible="1"/>
<field name="lessee_id" invisible="1"/>
<field name="house_type_id"/>
<field name="property_source"/>
<field name="district"/>
@@ -58,25 +58,48 @@ class PropertyBankStatements(models.Model):
rec.start_time = rec.start_time - timedelta(hours=8)
def revocation(self):
for rec in self:
for modify in rec.receivable_modify_ids:
if modify.is_write:
new_delivered = modify.receivable_id.delivered1 - modify.amount
modify.receivable_id.delivered1 = max(new_delivered, 0)
modify.receivable_id.is_reconciliation = False
modify.receivable_id.reconciliation_time = False
modify.receivable_id.payout_date = False
if not modify.is_penalty:
modify.receivable_id.remark = None
else:
modify.receivable_id.unlink()
if rec.receivable_modify_ids:
rec.receivable_modify_ids.unlink()
rec.bank_state = 'not_reconciled'
rec.registered = 0
rec.no_amount = rec.original_amount
rec.yes_amount = 0
rec.reconciliation_time = None
self.ensure_one()
current_rec = self[0]
domain = [
('your_own_unit', '=', current_rec.your_own_unit),
('bank_state', '=', 'reconciled'),
('name', '=', current_rec.name)
]
same_group_records = self.env[self._name].search(domain)
# 按start_time倒序排序,找到最近的记录
sorted_records = sorted(
same_group_records,
key=lambda r: r.start_time or '',
reverse=True
)
latest_record = sorted_records[0]
# 检查当前记录是否是最近的一条
if current_rec.id != latest_record.id:
raise UserError(
f"只能从最近的记录开始撤销!\n"
f"当前记录时间: {current_rec.start_time + timedelta(hours=8)}\n"
f"最近记录时间: {latest_record.start_time + timedelta(hours=8)}"
)
for modify in self.receivable_modify_ids:
if modify.is_write:
new_delivered = modify.receivable_id.delivered1 - modify.amount
modify.receivable_id.delivered1 = max(new_delivered, 0)
modify.receivable_id.is_reconciliation = False
modify.receivable_id.reconciliation_time = False
modify.receivable_id.payout_date = False
if not modify.is_penalty:
modify.receivable_id.remark = None
else:
modify.receivable_id.unlink()
if self.receivable_modify_ids:
self.receivable_modify_ids.unlink()
self.bank_state = 'not_reconciled'
self.registered = 0
self.no_amount = self.original_amount
self.yes_amount = 0
self.reconciliation_time = None
def binding_information(self):
return {
@@ -483,7 +483,7 @@ class PropertyLeaseContract(models.Model):
('yuthon_property_id', '=', property_addr.id),
('lease_contract_id', '=', contract.id)
], limit=1)
property_addr.lessee_id = contract.lessee_id.id
# 准备要写入的数据
contract_data = {
'yuthon_property_id': property_addr.id,
@@ -503,6 +503,47 @@ class PropertyLeaseContract(models.Model):
'property_contract_ids': [(0, 0, contract_data)]
})
contract_lines = self.env['property.contract.line'].search([
('lease_contract_id', '=', contract.id)
])
for line in contract_lines:
# 从明细行中获取关键信息
start_time = line.start_time
end_date = line.end_date
yuthon_property_id = line.yuthon_property_id.id
if not (start_time and yuthon_property_id):
continue
# 获取当前物业记录
property_addr = self.env['yuthon.property'].browse(yuthon_property_id)
if not property_addr:
continue
date_domain = [
('meter_date', '>=', start_time)
]
if end_date:
date_domain.append(('meter_date', '<=', end_date))
# 处理水表
if property_addr.is_meter:
water_lines = self.env['meter.water.line'].search([
('yuthon_property_ids', 'in', [yuthon_property_id]),
*date_domain
])
for water_line in water_lines:
water_line.write({'lessee_id': line.lessee_id.id})
if property_addr.is_electricity_meter:
electric_lines = self.env['meter.archives.line'].search([
('yuthon_property_ids', 'in', [yuthon_property_id]),
*date_domain
])
for electric_line in electric_lines:
electric_line.write({'lessee_id': line.lessee_id.id})
@api.onchange('lessee_id')
def _onchange_lessee_id(self):
for record in self: