102 lines
5.2 KiB
Python
102 lines
5.2 KiB
Python
from odoo import models, fields, api, _, SUPERUSER_ID
|
|
from datetime import datetime, timedelta
|
|
from dateutil.relativedelta import relativedelta
|
|
from datetime import datetime, timedelta, date
|
|
|
|
|
|
class RefundWizard(models.TransientModel):
|
|
_name = 'refund.wizard'
|
|
_description = '批量退押'
|
|
|
|
refund_type = fields.Selection([('out','外退'),('in','内退')],string='退押类型',default='out')
|
|
refund_line_ids = fields.One2many('refund.wizard.line','refund_id',string='退押明细')
|
|
start_index = fields.Date(string='生效时间', default=fields.Date.today())
|
|
payment_unit_ids = fields.Many2many('yuthon.property.company', string="付款单位")
|
|
pay_unit_id = fields.Many2one('yuthon.property.company', string="收款单位")
|
|
|
|
def confirm(self):
|
|
deposit_management_type = self.env['yuthon.management.type'].search([('name', '=', '押金')], limit=1)
|
|
if self.refund_type == 'out':
|
|
bills_line_list = []
|
|
for line in self.refund_line_ids:
|
|
existing_bill = self.env['property.bills.list'].search([
|
|
('contract_id', '=', line.contract_id.id),
|
|
('due_date', '=', self.start_index),
|
|
('management_type_id', '=', deposit_management_type.id),
|
|
], limit=1)
|
|
if existing_bill:
|
|
continue
|
|
bills_line_list.append({
|
|
'lessor_id': line.contract_id.lessor_id.id,
|
|
'due_date': self.start_index,
|
|
'management_type_id': deposit_management_type.id,
|
|
'amount': line.deposit,
|
|
'contract_id': line.contract_id.id,
|
|
})
|
|
if bills_line_list:
|
|
self.env['property.bills.list'].create(bills_line_list)
|
|
|
|
elif self.refund_type == 'in':
|
|
for line in self.refund_line_ids:
|
|
lessor_id = line.contract_id.lessor_id
|
|
company_id = self.env['res.company'].search([('name', '=', '集团本部')], limit=1)
|
|
if lessor_id.referred in ['天河物管']:
|
|
company_id = self.env['res.company'].search([('name', '=', '天河物管')], limit=1)
|
|
elif lessor_id.referred in ['天河粮储']:
|
|
company_id = self.env['res.company'].search([('name', '=', '天河粮储')], limit=1)
|
|
|
|
bank_accounts = self.env['property.bank.line'].search([
|
|
('tenant_id', '=', line.lessee_id.id)
|
|
]).mapped('bank')
|
|
bank_accounts = [acc for acc in bank_accounts if acc]
|
|
bank_account = bank_accounts[0] if bank_accounts else False
|
|
|
|
existing_receivable = self.env['property.accounts.receivable'].search([
|
|
('contract_id', '=', line.contract_id.id),
|
|
('management_type_id', '=', deposit_management_type.id),
|
|
('due_date', '=', self.start_index),
|
|
('original_amount', '=', line.deposit),
|
|
('remark', '=', '出租方变更调整'),
|
|
], limit=1)
|
|
if not existing_receivable:
|
|
self.env['property.accounts.receivable'].create({
|
|
'contract_id': line.contract_id.id,
|
|
'management_type_id': deposit_management_type.id,
|
|
'due_date': self.start_index,
|
|
'original_amount': line.deposit,
|
|
'remark': '出租方变更调整',
|
|
})
|
|
existing_bank_statement = self.env['property.bank.statements'].sudo().search([
|
|
('start_time', '=', self.start_index),
|
|
('original_amount', '=', line.deposit),
|
|
('name_account', '=', line.lessee_id.name),
|
|
('remake', '=', '出租方变更调整'),
|
|
], limit=1)
|
|
if not existing_bank_statement and bank_account:
|
|
bank_id = self.env['property.bank.statements'].sudo().create({
|
|
'start_time': self.start_index,
|
|
'name': bank_account,
|
|
'original_amount': line.deposit,
|
|
'name_account': line.lessee_id.name,
|
|
'remake': '出租方变更调整',
|
|
'lending_direction': 'loan',
|
|
'company_id': company_id.id if company_id else False,
|
|
'your_own_unit': lessor_id.referred,
|
|
'your_own_account': lessor_id.rent_account,
|
|
})
|
|
bank_id._compute_property_employee_id()
|
|
|
|
|
|
class RefundWizardLine(models.TransientModel):
|
|
_name = 'refund.wizard.line'
|
|
_description = '退押明细'
|
|
|
|
refund_id = fields.Many2one('refund.wizard',string='退押单')
|
|
contract_id = fields.Many2one('property.lease.contract',string='合同编号')
|
|
property_name = fields.Char(related='contract_id.property_name',string='物业名称')
|
|
lessee_id = fields.Many2one(related='contract_id.lessee_id', string='承租方')
|
|
lessor_id = fields.Many2one(related='contract_id.lessor_id', string='出租方')
|
|
deposit= fields.Float(related='contract_id.deposit',string='押金')
|
|
|
|
|