Files
gzth/yuthon_property_approval/wizard/binding_information_wizard.py
T
2025-11-24 17:00:42 +08:00

123 lines
5.5 KiB
Python

from odoo import models, fields, api, _, SUPERUSER_ID
from odoo.exceptions import UserError, ValidationError
class BindingInformationWizard(models.Model):
_name = 'binding.information.wizard'
_description = '绑定信息弹窗'
bank_id = fields.Many2one('property.bank.statements',string="银行")
property_ids = fields.Many2many('yuthon.property', string='物业')
contract_ids = fields.Many2many('property.lease.contract',string="新增绑定合同")
lessee_ids = fields.Many2many('property.tenant.information', string="承租方")
your_own_unit = fields.Char(string="账号单位")
available_contract_ids = fields.Many2many(
'property.lease.contract',
'binding_information_wizard_available_contract_rel',
'wizard_id',
'contract_id',
string='已绑定合同',
)
@api.onchange('contract_ids')
def onchange_contract_ids(self):
if not self.contract_ids:
return
new_property_ids = []
for contract_id in self.contract_ids:
for line in contract_id.lease_ids:
if line.address_id:
new_property_ids.append(line.address_id.id)
new_property_ids = list(set(new_property_ids) - set(self.property_ids.ids))
if new_property_ids:
self.property_ids = [(4, property_id) for property_id in new_property_ids]
new_lessee_ids = []
for contract in self.contract_ids:
if contract.lessee_id:
new_lessee_ids.append(contract.lessee_id.id)
new_lessee_ids = list(set(new_lessee_ids) - set(self.lessee_ids.ids))
if new_lessee_ids:
self.lessee_ids = [(4, lid) for lid in new_lessee_ids]
@api.onchange('bank_id')
def _onchange_bank_id(self):
"""计算不可用的合同ID"""
for record in self:
record.available_contract_ids = [(6, 0, self.bank_id.contract_ids.ids)] if self.bank_id.contract_ids else [(5,)]
def confirm(self):
if self.bank_id.name:
latest_contract_ids = self.available_contract_ids + self.contract_ids
# 根据银行账号查找承租方信息
bank_accounts = self.env['property.bank.line'].search([
('bank', '=', self.bank_id.name),
('tenant_id.name', '!=', False),
])
if bank_accounts:
for bank_account in bank_accounts:
# 删除空记录
invalid_bank_lines = self.env['property.bank.line'].search([
('name', '=', False),
('user', '=', False),
('bank', '=', False),
])
if invalid_bank_lines:
invalid_bank_lines.unlink()
old_lines = self.env['property.tenant.line'].search([
('tenant_id', '=', bank_account.tenant_id.id)
])
if old_lines:
old_lines.unlink()
for contract_id in latest_contract_ids:
self.env['property.tenant.line'].sudo().create({
'tenant_id': bank_account.tenant_id.id,
'lease_contract_id': contract_id.id,
})
if self.contract_ids:
for new_contract in self.contract_ids:
lessee_id = new_contract.lessee_id
existing_bank = lessee_id.bank_ids.filtered(
lambda b: b.bank == self.bank_id.name
)
if not existing_bank:
self.env['property.bank.line'].create({
'tenant_id': lessee_id.id,
'bank': self.bank_id.name,
'user': self.bank_id.name_account,
'name': self.bank_id.bank_branch,
})
else:
if self.contract_ids:
first_contract = self.contract_ids[0]
lessee_id = first_contract.lessee_id
bank_line = self.env['property.bank.line'].search(
[('tenant_id', '=', lessee_id.id)],
limit=1
)
name = bank_line.bank
if not bank_line or not bank_line.bank:
raise UserError(f"承租方【{lessee_id.name}】未填写银行账号,请补全信息后再操作!")
for contract_id in self.contract_ids.ids:
existing_line = self.env['property.tenant.line'].sudo().search([
('tenant_id', '=', bank_line.id),
('lease_contract_id', '=', contract_id),
], limit=1)
if not existing_line:
self.env['property.tenant.line'].sudo().create({
'tenant_id': bank_line.id,
'lease_contract_id': contract_id,
})
self.bank_id.write({
'name': name,
})
bank_ids = self.env['property.bank.statements'].search([('name', '=', self.bank_id.name),
('your_own_unit', '=', self.bank_id.your_own_unit),
('bank_state', '=', 'not_reconciled'),
])
for bank_id in bank_ids:
bank_id._compute_property_employee_id()