@@ -49,6 +49,10 @@ class PropertyLeaseContract(models.Model):
|
||||
cycle_mode = fields.Selection([('fixed','合同月'), ('floating','自然月')],string='周期方式')
|
||||
expected_reminders = fields.Char(string="逾期提醒")
|
||||
increment_method = fields.Selection([('percentage','百分比'),('increment_price','递增单价'),('increment_amount','递增金额')], string='每月递增')
|
||||
|
||||
first_years_begin = fields.Integer(string="第几年开始")
|
||||
increments_every_few_years = fields.Integer(string="每几年递增")
|
||||
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
@@ -114,7 +118,7 @@ class PropertyLeaseContract(models.Model):
|
||||
|
||||
def action_generate_rental_charges(self):
|
||||
"""
|
||||
生成租金明细
|
||||
生成租金费用明细
|
||||
:return:
|
||||
"""
|
||||
for record in self:
|
||||
@@ -123,64 +127,62 @@ class PropertyLeaseContract(models.Model):
|
||||
if not record.term_end_time:
|
||||
raise UserError(_("请填写租期结束时间!"))
|
||||
self.sudo().env["property.rent.list"].search([("contract_id", "=", record.id)]).unlink()
|
||||
# 按照月度计算明细
|
||||
if record.cycle_dict == "monthly":
|
||||
months = 1
|
||||
elif record.cycle_dict == "quarter":
|
||||
months = 3
|
||||
elif record.cycle_dict == "half":
|
||||
months = 6
|
||||
elif record.cycle_dict == "year":
|
||||
months = 12
|
||||
else:
|
||||
raise UserError(_("请填写付款方式!"))
|
||||
|
||||
# unit_price = fields.Float(string="单价")
|
||||
# monthly_amount = fields.Float(string="月租金")
|
||||
# start_data = fields.Date(string="开始日期")
|
||||
# end_data = fields.Date(string="结束日期")
|
||||
# month_number = fields.Integer(string="期间月数")
|
||||
# period_rent = fields.Float(string="期间租金")"""
|
||||
start_date = record.term_start_time
|
||||
end_date = record.term_end_time
|
||||
# 先按照年分组
|
||||
divided_year_segments = self.divide_time_range_fixed(start_date, end_date, 12)
|
||||
index = 0 # 第几年
|
||||
period_rent = 0 # 月租金
|
||||
unit_price = 0 # 单价
|
||||
for segment_year in divided_year_segments:
|
||||
index += 1
|
||||
"""
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
"""
|
||||
if index > 1:
|
||||
first_years_begin = record.first_years_begin if record.first_years_begin else 0
|
||||
increments_every_few_years = record.increments_every_few_years
|
||||
period_rent = record.total_area * record.unit_price # 月租金
|
||||
unit_price = record.unit_price # 单价
|
||||
# 先计算免租期
|
||||
first_index = 0 # 第几递增周期年
|
||||
increments_start = start_date # 递增开始
|
||||
all_period_rent = 0
|
||||
# 第几年不递增
|
||||
if first_years_begin:
|
||||
divided_year_segments = self.divide_time_range_fixed(start_date, end_date, 12)
|
||||
for segment_year in divided_year_segments:
|
||||
first_index += 1
|
||||
if first_years_begin and first_index > first_years_begin:
|
||||
increments_start = segment_year[0]
|
||||
break
|
||||
delta = relativedelta(increments_start, start_date)
|
||||
months = delta.years * 12 + delta.months
|
||||
all_period_rent += period_rent * months
|
||||
|
||||
if not increments_every_few_years:
|
||||
delta = relativedelta(end_date, increments_start)
|
||||
months = delta.years * 12 + delta.months
|
||||
all_period_rent += period_rent * months
|
||||
else:
|
||||
# 开始递增
|
||||
divided_increments_segments = self.divide_time_range_fixed(increments_start, end_date, increments_every_few_years * 12)
|
||||
index = 0 # 第几递增周期年
|
||||
for increments_year in divided_increments_segments:
|
||||
index += 1
|
||||
"""
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
"""
|
||||
delta = relativedelta(increments_year[1], increments_year[0])
|
||||
months = delta.years * 12 + delta.months
|
||||
if record.increment_price:
|
||||
unit_price = unit_price + record.increment_price
|
||||
if record.increment_percentage:
|
||||
period_rent = record.total_area * unit_price * record.increment_percentage
|
||||
unit_price = period_rent / record.total_area
|
||||
if record.increment_amount:
|
||||
period_rent = period_rent + record.increment_amount
|
||||
else:
|
||||
period_rent = record.total_area * record.unit_price
|
||||
unit_price = record.unit_price
|
||||
divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# if record.cycle_mode == "fixed":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# elif record.cycle_mode == "floating":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_floating(segment_year[0], segment_year[1], months)
|
||||
# else:
|
||||
# raise UserError(_("请填写周期方式!"))
|
||||
for segment in divided_time_segments:
|
||||
self.sudo().env["property.rent.list"].create({
|
||||
"contract_id": record.id,
|
||||
"contract_code": record.code,
|
||||
"due_date": segment[0],
|
||||
"original_amount": period_rent * months,
|
||||
})
|
||||
unit_price = period_rent / record.total_area
|
||||
all_period_rent += period_rent * months
|
||||
|
||||
self.sudo().env["property.rent.list"].create({
|
||||
"contract_id": record.id,
|
||||
"contract_code": record.code,
|
||||
"due_date": start_date,
|
||||
"original_amount": all_period_rent,
|
||||
})
|
||||
|
||||
def action_generate_administrative_expenses(self):
|
||||
"""
|
||||
@@ -193,72 +195,18 @@ class PropertyLeaseContract(models.Model):
|
||||
if not record.term_end_time:
|
||||
raise UserError(_("请填写租期结束时间!"))
|
||||
self.sudo().env["property.management.list"].search([("contract_id", "=", record.id)]).unlink()
|
||||
# 按照月度计算明细
|
||||
if record.cycle_dict == "monthly":
|
||||
months = 1
|
||||
elif record.cycle_dict == "quarter":
|
||||
months = 3
|
||||
elif record.cycle_dict == "half":
|
||||
months = 6
|
||||
elif record.cycle_dict == "year":
|
||||
months = 12
|
||||
else:
|
||||
raise UserError(_("请填写付款方式!"))
|
||||
|
||||
# unit_price = fields.Float(string="单价")
|
||||
# monthly_amount = fields.Float(string="月租金")
|
||||
# start_data = fields.Date(string="开始日期")
|
||||
# end_data = fields.Date(string="结束日期")
|
||||
# month_number = fields.Integer(string="期间月数")
|
||||
# period_rent = fields.Float(string="期间租金")"""
|
||||
start_date = record.term_start_time
|
||||
end_date = record.term_end_time
|
||||
# 先按照年分组
|
||||
divided_year_segments = self.divide_time_range_fixed(start_date, end_date, 12)
|
||||
index = 0 # 第几年
|
||||
for segment_year in divided_year_segments:
|
||||
index += 1
|
||||
"""
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
"""
|
||||
divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# if record.cycle_mode == "fixed":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# elif record.cycle_mode == "floating":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_floating(segment_year[0], segment_year[1], months)
|
||||
# else:
|
||||
# raise UserError(_("请填写周期方式!"))
|
||||
for segment in divided_time_segments:
|
||||
"""
|
||||
contract_code = fields.Char(string='合同编号', required=True)
|
||||
property_id = fields.Many2one('yuthon.property', string='物业')
|
||||
lessee_id = fields.Many2one('yuthon.property.lessee', string='承租方')
|
||||
due_date = fields.Date(string='应收日期')
|
||||
year = fields.Char(string='所属年')
|
||||
month = fields.Char(string='所属月')
|
||||
management_fee_standard = fields.Float(string='管理费标准')
|
||||
original_amount = fields.Float(string='原金额')
|
||||
reduction_amount = fields.Float(string='减免金额')
|
||||
remarks = fields.Text(string='备注')
|
||||
is_cancel = fields.Boolean(string='是否作废')
|
||||
is_red = fields.Boolean(string='是否红冲')
|
||||
red_date = fields.Date(string='红冲日期')
|
||||
charge_status = fields.Selection([('not_paid', '未收'), ('paid', '已收')], string='收费状态')
|
||||
is_invoice = fields.Boolean(string='是否开票')
|
||||
is_suspend = fields.Boolean(string='是否挂起')
|
||||
create_time = fields.Datetime(string='创建时间')
|
||||
last_update_time = fields.Datetime(string='最后修改时间')
|
||||
"""
|
||||
self.sudo().env["property.management.list"].create({
|
||||
"contract_id": record.id,
|
||||
"contract_code": record.code,
|
||||
"due_date": segment[0],
|
||||
"original_amount": record.total_area * record.management_fee * months,
|
||||
})
|
||||
delta = relativedelta(end_date, start_date)
|
||||
months = delta.years * 12 + delta.months
|
||||
self.sudo().env["property.management.list"].create({
|
||||
"contract_id": record.id,
|
||||
"contract_code": record.code,
|
||||
"due_date": start_date,
|
||||
"original_amount": record.total_area * record.management_fee * months,
|
||||
})
|
||||
|
||||
|
||||
def action_generate_details(self):
|
||||
"""
|
||||
@@ -274,68 +222,82 @@ class PropertyLeaseContract(models.Model):
|
||||
if not record.term_end_time:
|
||||
raise UserError(_("请填写租期结束时间!"))
|
||||
self.sudo().env["property.rent.breakdown.line"].search([("breakdown_id", "=", record.id)]).unlink()
|
||||
# 按照月度计算明细
|
||||
if record.cycle_dict == "monthly":
|
||||
months = 1
|
||||
elif record.cycle_dict == "quarter":
|
||||
months = 3
|
||||
elif record.cycle_dict == "half":
|
||||
months = 6
|
||||
elif record.cycle_dict == "year":
|
||||
months = 12
|
||||
else:
|
||||
raise UserError(_("请填写付款方式!"))
|
||||
|
||||
# unit_price = fields.Float(string="单价")
|
||||
# monthly_amount = fields.Float(string="月租金")
|
||||
# start_data = fields.Date(string="开始日期")
|
||||
# end_data = fields.Date(string="结束日期")
|
||||
# month_number = fields.Integer(string="期间月数")
|
||||
# period_rent = fields.Float(string="期间租金")"""
|
||||
start_date = record.term_start_time
|
||||
end_date = record.term_end_time
|
||||
# 先按照年分组
|
||||
divided_year_segments = self.divide_time_range_fixed(start_date, end_date, 12)
|
||||
index = 0 # 第几年
|
||||
period_rent = 0 # 月租金
|
||||
unit_price = 0 # 单价
|
||||
for segment_year in divided_year_segments:
|
||||
index += 1
|
||||
"""
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
"""
|
||||
if index > 1:
|
||||
if record.increment_price:
|
||||
unit_price = unit_price + record.increment_price
|
||||
if record.increment_percentage:
|
||||
period_rent = record.total_area * unit_price * record.increment_percentage
|
||||
if record.increment_amount:
|
||||
period_rent = period_rent + record.increment_amount
|
||||
else:
|
||||
period_rent = record.total_area * record.unit_price
|
||||
unit_price = record.unit_price
|
||||
divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# if record.cycle_mode == "fixed":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_fixed(segment_year[0], segment_year[1], months)
|
||||
# elif record.cycle_mode == "floating":
|
||||
# # 按照月份、季度、年份进行分组
|
||||
# divided_time_segments = self.divide_time_range_floating(segment_year[0], segment_year[1], months)
|
||||
# else:
|
||||
# raise UserError(_("请填写周期方式!"))
|
||||
for segment in divided_time_segments:
|
||||
first_years_begin = record.first_years_begin if record.first_years_begin else 0
|
||||
increments_every_few_years = record.increments_every_few_years
|
||||
|
||||
period_rent = record.total_area * record.unit_price # 月租金
|
||||
unit_price = record.unit_price # 单价
|
||||
|
||||
# 先计算免租期
|
||||
first_index = 0 # 第几递增周期年
|
||||
increments_start = start_date # 递增开始
|
||||
# 第几年不递增
|
||||
if not increments_every_few_years:
|
||||
delta = relativedelta(end_date, increments_start)
|
||||
months = delta.years * 12 + delta.months
|
||||
self.sudo().env["property.rent.breakdown.line"].create({
|
||||
"unit_price": unit_price,
|
||||
"monthly_amount": period_rent,
|
||||
"breakdown_id": record.id,
|
||||
"start_data": increments_start,
|
||||
"end_data": end_date,
|
||||
"month_number": months,
|
||||
"period_rent": period_rent * months,
|
||||
})
|
||||
else:
|
||||
if first_years_begin:
|
||||
divided_year_segments = self.divide_time_range_fixed(start_date, end_date, 12)
|
||||
for segment_year in divided_year_segments:
|
||||
first_index += 1
|
||||
if first_years_begin and first_index > first_years_begin:
|
||||
increments_start = segment_year[0]
|
||||
break
|
||||
delta = relativedelta(increments_start, start_date)
|
||||
months = delta.years * 12 + delta.months
|
||||
self.sudo().env["property.rent.breakdown.line"].create({
|
||||
"unit_price": unit_price,
|
||||
"monthly_amount": period_rent,
|
||||
"breakdown_id": record.id,
|
||||
"start_data": segment[0],
|
||||
"end_data": segment[1],
|
||||
"start_data": start_date,
|
||||
"end_data": increments_start,
|
||||
"month_number": months,
|
||||
"period_rent": period_rent * months,
|
||||
})
|
||||
|
||||
# 开始递增
|
||||
divided_increments_segments = self.divide_time_range_fixed(increments_start, end_date, increments_every_few_years*12)
|
||||
index = 0 # 第几递增周期年
|
||||
for increments_year in divided_increments_segments:
|
||||
index += 1
|
||||
"""
|
||||
increment_percentage = fields.Float(string="递增百分比")
|
||||
increment_price = fields.Float(string="递增单价")
|
||||
increment_amount = fields.Float(string="递增金额")
|
||||
"""
|
||||
if record.increment_price:
|
||||
unit_price = unit_price + record.increment_price
|
||||
if record.increment_percentage:
|
||||
period_rent = record.total_area * unit_price * record.increment_percentage
|
||||
unit_price = period_rent / record.total_area
|
||||
if record.increment_amount:
|
||||
period_rent = period_rent + record.increment_amount
|
||||
unit_price = period_rent / record.total_area
|
||||
|
||||
delta = relativedelta(increments_year[1], increments_year[0])
|
||||
months = delta.years * 12 + delta.months
|
||||
self.sudo().env["property.rent.breakdown.line"].create({
|
||||
"unit_price": unit_price,
|
||||
"monthly_amount": period_rent,
|
||||
"breakdown_id": record.id,
|
||||
"start_data": increments_year[0],
|
||||
"end_data": increments_year[1],
|
||||
"month_number": months,
|
||||
"period_rent": period_rent * months,
|
||||
})
|
||||
|
||||
class PropertyLeaseContractLine(models.Model):
|
||||
_name = 'property.lease.contract.line'
|
||||
_description = '物业列表明细行'
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="物业合同管理">
|
||||
<header>
|
||||
<button name="action_generate_rental_charges" class="oe_link" type="object" string="生成租金费用"/>
|
||||
<button name="action_generate_administrative_expenses" class="oe_link" type="object" string="生成管理费用"/>
|
||||
<button name="action_generate_rental_charges" class="oe_link btn btn-primary" type="object" string="生成租金费用"/>
|
||||
<button name="action_generate_administrative_expenses" class="oe_link btn btn-primary" type="object" string="生成管理费用"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group string="基本信息">
|
||||
@@ -67,6 +67,10 @@
|
||||
<field name="increment_price"/>
|
||||
<field name="increment_amount"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="first_years_begin"/>
|
||||
<field name="increments_every_few_years"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="term_start_time" />
|
||||
<field name="term_end_time" />
|
||||
@@ -109,7 +113,7 @@
|
||||
</field>
|
||||
</page>
|
||||
<page string="租金明细">
|
||||
<button name="action_generate_details" class="oe_link" type="object" string="生成明细"/>
|
||||
<button name="action_generate_details" class="oe_link btn btn-primary" type="object" string="生成明细"/>
|
||||
<field name="breakdown_ids" string=" ">
|
||||
<tree editable="bottom">
|
||||
<field name="breakdown_id" colunm_invisible="1"/>
|
||||
|
||||
Reference in New Issue
Block a user