diff --git a/yuthon_property_approval/models/inherit_yuthon_property.py b/yuthon_property_approval/models/inherit_yuthon_property.py index 8715d6092..9950c43a5 100644 --- a/yuthon_property_approval/models/inherit_yuthon_property.py +++ b/yuthon_property_approval/models/inherit_yuthon_property.py @@ -44,6 +44,28 @@ class PropertyBankStatements(models.Model): } } + def unbind(self): + statements_ids = self.env["property.bank.statements"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) + + for statement in statements_ids: + bank_account = self.env['property.bank.line'].search([ + ('bank', '=', statement.name) # 假设statement.name存储银行账号 + ]) + if bank_account.tenant_id: + # 获取需要删除的合同明细行 + lines_to_delete = self.env['property.tenant.line'].search([ + ('tenant_id', '=', bank_account.tenant_id.id), + ('lease_contract_id', 'in', statement.contract_ids.ids) + ]) + # 删除合同明细行 + if lines_to_delete: + lines_to_delete.unlink() + + statement.contract_ids = [(5,)] + statement.property_ids = [(5,)] + def button_bank_state(self): receivable_ids = self.env["property.bank.statements"].browse( self._context.get('active_ids', self._context.get('active_id'))) diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py index a4bac0426..559d7f888 100644 --- a/yuthon_property_approval/models/property_lease_contract.py +++ b/yuthon_property_approval/models/property_lease_contract.py @@ -29,10 +29,21 @@ class PropertyTenantLine(models.Model): tenant_id = fields.Many2one('property.tenant.information', string="关联租户信息") property_ids = fields.Many2many('yuthon.property', string="物业信息") lease_contract_id = fields.Many2one('property.lease.contract', string="合同编号") - rent = fields.Float(string="租金") + rent = fields.Float(related='lease_contract_id.rent', string="租金") start_time = fields.Date(related='lease_contract_id.actual_start_time', string="生效日期") end_date = fields.Date(related='lease_contract_id.actual_end_time',string="失效日期") + @api.model + def create(self, vals): + """在创建记录时自动关联合同对应的物业""" + if vals.get('lease_contract_id'): + # 获取合同关联的物业明细行并直接提取物业ID列表 + contract = self.env['property.lease.contract'].browse(vals['lease_contract_id']) + property_ids = contract.lease_ids.mapped('address_id.id') + if property_ids: + vals['property_ids'] = [(6, 0, property_ids)] + return super(PropertyTenantLine, self).create(vals) + class PropertyLeaseContract(models.Model): _name = 'property.lease.contract' _description = '租赁合同审批' diff --git a/yuthon_property_approval/views/inherit_property_tenant_information_views.xml b/yuthon_property_approval/views/inherit_property_tenant_information_views.xml index b7d519384..901632fac 100644 --- a/yuthon_property_approval/views/inherit_property_tenant_information_views.xml +++ b/yuthon_property_approval/views/inherit_property_tenant_information_views.xml @@ -7,7 +7,7 @@ - + diff --git a/yuthon_property_approval/views/inherit_yuthon_property_views.xml b/yuthon_property_approval/views/inherit_yuthon_property_views.xml index 39a52bd2e..92b39818d 100644 --- a/yuthon_property_approval/views/inherit_yuthon_property_views.xml +++ b/yuthon_property_approval/views/inherit_yuthon_property_views.xml @@ -589,6 +589,11 @@ property.bank.statements + +
+
+
diff --git a/yuthon_property_approval/wizard/binding_information_wizard.py b/yuthon_property_approval/wizard/binding_information_wizard.py index 54c6f6dab..d5c55b82d 100644 --- a/yuthon_property_approval/wizard/binding_information_wizard.py +++ b/yuthon_property_approval/wizard/binding_information_wizard.py @@ -8,21 +8,18 @@ class BindingInformationWizard(models.Model): bank_id = fields.Many2one('property.bank.statements',string="银行") property_ids = fields.Many2many('yuthon.property', string='物业') contract_ids = fields.Many2many('property.lease.contract',string="租赁合同审批") - # 可用物业ID字段(显式指定关联表) available_property_ids = fields.Many2many( 'yuthon.property', - 'binding_information_wizard_available_property_rel', # 唯一表名 + 'binding_information_wizard_available_property_rel', 'wizard_id', 'property_id', compute='_compute_available_records', string='可用物业ID', store=True ) - - # 可用合同ID字段(显式指定关联表) available_contract_ids = fields.Many2many( 'property.lease.contract', - 'binding_information_wizard_available_contract_rel', # 唯一表名 + 'binding_information_wizard_available_contract_rel', 'wizard_id', 'contract_id', compute='_compute_available_records', @@ -30,6 +27,39 @@ class BindingInformationWizard(models.Model): store = True ) + @api.onchange('property_ids') + def onchange_property_ids(self): + if not self.property_ids: + return + new_contract_ids = [] + for property_id in self.property_ids: + # 获取物业关联的合同明细行 + for line in property_id.property_contract_ids: + if line.lease_contract_id: + new_contract_ids.append(line.lease_contract_id.id) + + # 过滤掉已选择的合同,避免重复 + new_contract_ids = list(set(new_contract_ids) - set(self.contract_ids.ids)) + if new_contract_ids: + self.contract_ids = [(4, contract_id) for contract_id in new_contract_ids] + + @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)) + # 追加新物业(使用操作码4) + if new_property_ids: + self.property_ids = [(4, property_id) for property_id in new_property_ids] + + @api.onchange('bank_id') def _onchange_bank_id(self): """计算可用的物业和合同ID""" @@ -61,3 +91,18 @@ class BindingInformationWizard(models.Model): bank_id.write({ 'contract_ids': [(4, cont.id) for cont in new_contracts] }) + + # 根据银行账号查找承租方信息 + bank_account = self.env['property.bank.line'].search([ + ('bank', '=', self.bank_id.name) + ]) + if bank_account.tenant_id: + # 获取已存在的合同明细行的合同ID + existing_contract_ids = bank_account.tenant_id.property_contract_ids.mapped('lease_contract_id.id') + # 过滤出需要新增的合同(排除已存在的) + new_contracts = self.contract_ids.filtered(lambda c: c.id not in existing_contract_ids) + for contract in new_contracts: + self.env['property.tenant.line'].sudo().create({ + 'tenant_id': bank_account.tenant_id.id, + 'lease_contract_id': contract.id, + }) \ No newline at end of file