123 lines
5.5 KiB
Python
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() |