!5611 Merge branch 'master' into dev_zhou
Merge pull request !5611 from 李鹏宇/dev_zhou
This commit is contained in:
@@ -450,8 +450,8 @@ class HrAttendanceDetail(models.Model):
|
||||
|
||||
holidays_list = [self.remove_leading_zero(date) for date in holidays_list]
|
||||
shift_days_list = [self.remove_leading_zero(date) for date in shift_days_list]
|
||||
|
||||
if (current_data in holidays_list) or (current_data.weekday() in [5, 6]):
|
||||
result = [f"{current_data.month}月{current_data.day}日"]
|
||||
if (result in holidays_list) or (current_data.weekday() in [5, 6]):
|
||||
return False
|
||||
elif current_data in shift_days_list:
|
||||
return True
|
||||
|
||||
@@ -239,7 +239,7 @@ class MeterArchivesLine(models.Model):
|
||||
)
|
||||
last_reading_time = fields.Date(string="最后读数时间")
|
||||
receivables = fields.Float(
|
||||
string="应收", compute="_compute_receivables", store=True, group_operator=None
|
||||
string="应收", compute="_compute_receivables", store=True, group_operator=None, help="应收金额=本次用量*单价*(1+线损)"
|
||||
)
|
||||
unit = fields.Float(string="当月单价", group_operator=None, igits=(6, 4))
|
||||
line_loss = fields.Float(string="线损", default=0.02)
|
||||
@@ -260,16 +260,14 @@ class MeterArchivesLine(models.Model):
|
||||
)
|
||||
maximum_count = fields.Integer(string="最大位数")
|
||||
|
||||
@api.depends("line_loss", "current_meter", "unit")
|
||||
@api.depends('line_loss', 'current_meter', 'unit')
|
||||
def _compute_receivables(self):
|
||||
for record in self:
|
||||
if record.line_loss and record.current_meter and record.unit:
|
||||
record.receivables = (
|
||||
record.current_meter
|
||||
* record.unit
|
||||
* (1 + record.line_loss)
|
||||
* record.gauge_magnification
|
||||
)
|
||||
raw_value = record.current_meter * record.unit * (1 + record.line_loss) * record.gauge_magnification
|
||||
record.receivables = round(raw_value, 1)
|
||||
else:
|
||||
record.receivables = 0.0
|
||||
|
||||
def update_meter(self):
|
||||
current_year = datetime.now().year
|
||||
|
||||
@@ -183,6 +183,28 @@ class MeterWaterLine(models.Model):
|
||||
index=True,
|
||||
)
|
||||
|
||||
current_read = fields.Float(string='本次读数', group_operator=None)
|
||||
unit_number = fields.Char(string='单元编号/用途')
|
||||
unit = fields.Float(string='当月单价', group_operator=None)
|
||||
receivables = fields.Float(string="应收", compute='_compute_receivables', store=True, group_operator=None, help="应收金额=本次用量*单价*(1+线损)")
|
||||
gauge_magnification = fields.Integer(string='仪表倍率', readonly=True, default=1, group_operator=None)
|
||||
last_reading_time = fields.Date(string="最后读数时间")
|
||||
type = fields.Selection([("public", "公共"), ("fees", "收费")], string="类型")
|
||||
start_time = fields.Date(string="安装日期")
|
||||
line_loss = fields.Float(string="线损", default=0.02)
|
||||
end_time = fields.Date(string="拆除日期")
|
||||
water_state = fields.Selection([('stop', '停用'), ('use', '使用'), ('rent', '出租')], string='状态')
|
||||
state = fields.Selection([('reading', '已抄'), ('unreading', '未抄')], string='抄表状态', default='unreading')
|
||||
remarks = fields.Text(string='备注')
|
||||
employee_ids = fields.Many2many('hr.employee', string='抄表人')
|
||||
maximum_count = fields.Integer(string='最大位数')
|
||||
meter_date_month = fields.Char(
|
||||
string="任务日期月份",
|
||||
compute="_compute_meter_date_month",
|
||||
store=True,
|
||||
index=True,
|
||||
)
|
||||
|
||||
def _compute_meter_date_month(self):
|
||||
for rec in self:
|
||||
if rec.meter_date:
|
||||
@@ -190,39 +212,6 @@ class MeterWaterLine(models.Model):
|
||||
else:
|
||||
rec.meter_date_month = False
|
||||
|
||||
current_meter = fields.Float(
|
||||
string="本次用量",
|
||||
store=True,
|
||||
compute="compute_meter_values",
|
||||
group_operator=None,
|
||||
)
|
||||
|
||||
current_read = fields.Float(string="本次读数", group_operator=None)
|
||||
unit_number = fields.Char(string="单元编号/用途")
|
||||
unit = fields.Float(string="当月单价", group_operator=None)
|
||||
receivables = fields.Float(
|
||||
string="应收", compute="_compute_receivables", store=True, group_operator=None
|
||||
)
|
||||
gauge_magnification = fields.Integer(
|
||||
string="仪表倍率", readonly=True, default=1, group_operator=None
|
||||
)
|
||||
last_reading_time = fields.Date(string="最后读数时间")
|
||||
type = fields.Selection([("public", "公共"), ("fees", "收费")], string="类型")
|
||||
start_time = fields.Date(string="安装日期")
|
||||
line_loss = fields.Float(string="线损", default=0.02)
|
||||
end_time = fields.Date(string="拆除日期")
|
||||
water_state = fields.Selection(
|
||||
[("stop", "停用"), ("use", "使用"), ("rent", "出租")], string="状态"
|
||||
)
|
||||
state = fields.Selection(
|
||||
[("reading", "已抄"), ("unreading", "未抄")],
|
||||
string="抄表状态",
|
||||
default="unreading",
|
||||
)
|
||||
remarks = fields.Text(string="备注")
|
||||
employee_ids = fields.Many2many("hr.employee", string="抄表人")
|
||||
maximum_count = fields.Integer(string="最大位数")
|
||||
|
||||
@api.onchange("name")
|
||||
def _onchange_line_ids(self):
|
||||
if self.line_ids:
|
||||
@@ -233,12 +222,10 @@ class MeterWaterLine(models.Model):
|
||||
def _compute_receivables(self):
|
||||
for record in self:
|
||||
if record.line_loss and record.current_meter and record.unit:
|
||||
record.receivables = (
|
||||
record.current_meter
|
||||
* record.unit
|
||||
* (1 + record.line_loss)
|
||||
* record.gauge_magnification
|
||||
)
|
||||
raw_value = record.current_meter * record.unit * (1 + record.line_loss) * record.gauge_magnification
|
||||
record.receivables = round(raw_value, 1)
|
||||
else:
|
||||
record.receivables = 0.0
|
||||
|
||||
def update_meter(self):
|
||||
current_year = datetime.now().year
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
<field name="line_loss" column_invisible="1"/>
|
||||
<field name="archives_state"/>
|
||||
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}" readonly="1"/>
|
||||
<field name="line_loss" column_invisible="1"/>
|
||||
<field name="line_loss"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -96,28 +96,26 @@
|
||||
<field name="name">meter.water.line.tree</field>
|
||||
<field name="model">meter.water.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="水表任务" create="0" editable="bottom"
|
||||
js_class="custom_water_button" decoration-success="not current_read"
|
||||
default_order="meter_date_month desc">
|
||||
<field name="sequence" column_invisible="1" />
|
||||
<field name="meter_date" readonly="1" />
|
||||
<field name="water_id" string="水表名" />
|
||||
<field name="unit_number" />
|
||||
<field name="gauge_magnification" readonly="1" />
|
||||
<field name="last_read" readonly="1" />
|
||||
<field name="current_read" />
|
||||
<field name="current_meter" readonly="1" />
|
||||
<field name="unit" />
|
||||
<field name="receivables" />
|
||||
<field name="number" column_invisible="1" />
|
||||
<tree string="水表任务" create="0" editable="bottom" js_class="custom_water_button" decoration-success="not current_read"
|
||||
default_order="meter_date_month desc">
|
||||
<field name="sequence" column_invisible="1"/>
|
||||
<field name="meter_date" readonly="1"/>
|
||||
<field name="water_id" string="水表名"/>
|
||||
<field name="unit_number"/>
|
||||
<field name="gauge_magnification" readonly="1"/>
|
||||
<field name="last_read" readonly="1"/>
|
||||
<field name="current_read"/>
|
||||
<field name="current_meter" readonly="1"/>
|
||||
<field name="unit"/>
|
||||
<field name="receivables"/>
|
||||
<field name="number" column_invisible="1"/>
|
||||
<field name="yuthon_property_ids" string="地址" readonly="1" widget="many2many_tags" />
|
||||
<field name="lessee_id" options="{'no_create': True}" readonly="1" />
|
||||
<field name="epitope_values_id" domain="[('type', '=', 'watermeter')]" />
|
||||
<field name="last_meter" readonly="1" />
|
||||
<field name="last_dosage" readonly="1" />
|
||||
<field name="line_loss" column_invisible="1" />
|
||||
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}"
|
||||
readonly="1" />
|
||||
<field name="lessee_id" options="{'no_create': True}" readonly="1"/>
|
||||
<field name="epitope_values_id" domain="[('type', '=', 'watermeter')]"/>
|
||||
<field name="last_meter" readonly="1"/>
|
||||
<field name="last_dosage" readonly="1"/>
|
||||
<field name="line_loss"/>
|
||||
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}" readonly="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -143,8 +141,7 @@
|
||||
<field name="yuthon_property_ids" />
|
||||
<field name="lessee_id" />
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="按月" name="group_by_meter_date_month" domain="[]"
|
||||
context="{'group_by': 'meter_date_month'}" />
|
||||
<filter string="按月" name="group_by_meter_date_month" domain="[]" context="{'group_by': 'meter_date_month'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -7,6 +7,26 @@ from dateutil.relativedelta import relativedelta
|
||||
import calendar
|
||||
|
||||
|
||||
class PropertyMeterWater(models.Model):
|
||||
_inherit = 'property.meter.water'
|
||||
|
||||
contract_id = fields.Many2one('property.lease.contract', string="合同")
|
||||
|
||||
class PropertyMeterArchives(models.Model):
|
||||
_inherit = 'property.meter.archives'
|
||||
|
||||
contract_id = fields.Many2one('property.lease.contract', string="合同")
|
||||
|
||||
class MeterArchivesLine(models.Model):
|
||||
_inherit = 'meter.archives.line'
|
||||
|
||||
contract_id = fields.Many2one('property.lease.contract', string="合同")
|
||||
|
||||
class MeterWaterLine(models.Model):
|
||||
_inherit = 'meter.water.line'
|
||||
|
||||
contract_id = fields.Many2one('property.lease.contract', string="合同")
|
||||
|
||||
class YuthonProperty(models.Model):
|
||||
_inherit = 'yuthon.property'
|
||||
|
||||
|
||||
@@ -1,5 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id ="inherit_property_meter_archives_form" model="ir.ui.view">
|
||||
<field name="name">inherit.property.meter.archives.form</field>
|
||||
<field name="model">property.meter.archives</field>
|
||||
<field name="inherit_id" ref="yuthon_property.property_meter_archives_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='yuthon_property_ids']" position="after">
|
||||
<field name="contract_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="inherit_property_meter_water_form" model="ir.ui.view">
|
||||
<field name="name">inherit.property.meter.water.form</field>
|
||||
<field name="model">property.meter.water</field>
|
||||
<field name="inherit_id" ref="yuthon_property.property_meter_water_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='yuthon_property_ids']" position="after">
|
||||
<field name="contract_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="inherit_view_meter_archives_line_tree" model="ir.ui.view">
|
||||
<field name="name">inherit.view.meter.archives.line.tree</field>
|
||||
<field name="model">meter.archives.line</field>
|
||||
<field name="inherit_id" ref="yuthon_property.view_meter_archives_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='yuthon_property_ids']" position="after">
|
||||
<field name="contract_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_meter_water_line_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">view.meter.water.line.tree.inherit</field>
|
||||
<field name="model">meter.water.line</field>
|
||||
<field name="inherit_id" ref="yuthon_property.view_meter_water_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='yuthon_property_ids']" position="after">
|
||||
<field name="contract_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="yuthon_property_form_inherit" model="ir.ui.view">
|
||||
<field name="name">yuthon.property.form.inherit</field>
|
||||
<field name="model">yuthon.property</field>
|
||||
|
||||
@@ -667,7 +667,20 @@
|
||||
<field name="ele_price" invisible="contract_sort != 'property'"/>
|
||||
</group>
|
||||
<notebook class="o_collapsible_notebook">
|
||||
<page string="租金明细">
|
||||
<page string="租金明细" invisible="contract_sort != 'property'">
|
||||
<field name="breakdown_ids" string=" ">
|
||||
<tree editable="bottom" delete="false">
|
||||
<field name="breakdown_id" column_invisible="1"/>
|
||||
<field name="unit_price"/>
|
||||
<field name="monthly_amount"/>
|
||||
<field name="start_data"/>
|
||||
<field name="end_data"/>
|
||||
<field name="month_number"/>
|
||||
<field name="period_rent"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="管理费明细" invisible="contract_sort == 'property'">
|
||||
<field name="breakdown_ids" string=" ">
|
||||
<tree editable="bottom" delete="false">
|
||||
<field name="breakdown_id" column_invisible="1"/>
|
||||
|
||||
@@ -177,7 +177,7 @@ class PropertyRentalWizard(models.Model):
|
||||
"original_amount": amount,
|
||||
})
|
||||
|
||||
def create_management_list(self, record, start_date):
|
||||
def create_management_list(self, record, start_date, rent_amount):
|
||||
"""封装创建管理费记录的逻辑"""
|
||||
first_day_of_month = start_date.replace(day=1)
|
||||
last_day_of_month = first_day_of_month + relativedelta(months=1) - timedelta(days=1)
|
||||
@@ -189,27 +189,33 @@ class PropertyRentalWizard(models.Model):
|
||||
('due_date', '>=', first_day_of_month),
|
||||
('due_date', '<=', last_day_of_month)
|
||||
])
|
||||
if property_id.message_standard_id:
|
||||
standard_id = property_id.message_standard_id
|
||||
original_amount = property_id.management_area * standard_id.amount
|
||||
if not management_id:
|
||||
self.sudo().env["property.management.list"].create({
|
||||
"contract_id": record.id,
|
||||
"property_id": property_id.id,
|
||||
'original_amount':original_amount,
|
||||
'message_standard_id': property_id.message_standard_id.id,
|
||||
'lessee_id': record.lessee_id.id,
|
||||
"due_date":start_date
|
||||
})
|
||||
if record.contract_sort == 'property':
|
||||
if property_id.message_standard_id:
|
||||
standard_id = property_id.message_standard_id
|
||||
original_amount = int(round(property_id.management_area * standard_id.amount))
|
||||
else:
|
||||
management_id.write({
|
||||
"contract_id": record.id,
|
||||
"property_id": property_id.id,
|
||||
'original_amount': original_amount,
|
||||
'message_standard_id': property_id.message_standard_id.id,
|
||||
'lessee_id': record.lessee_id.id,
|
||||
"due_date": start_date
|
||||
})
|
||||
original_amount = 0
|
||||
else:
|
||||
original_amount = rent_amount
|
||||
|
||||
if not management_id:
|
||||
self.sudo().env["property.management.list"].create({
|
||||
"contract_id": record.id,
|
||||
"property_id": property_id.id,
|
||||
'original_amount':original_amount,
|
||||
'message_standard_id': property_id.message_standard_id.id,
|
||||
'lessee_id': record.lessee_id.id,
|
||||
"due_date":start_date
|
||||
})
|
||||
else:
|
||||
management_id.write({
|
||||
"contract_id": record.id,
|
||||
"property_id": property_id.id,
|
||||
'original_amount': original_amount,
|
||||
'message_standard_id': property_id.message_standard_id.id,
|
||||
'lessee_id': record.lessee_id.id,
|
||||
"due_date": start_date
|
||||
})
|
||||
|
||||
def process_rent_record(self, record, rent_id, date_field_year_month, days, period_month=0, multiplier=1, is_year=0):
|
||||
"""封装处理租金逻辑,增加 multiplier 参数用于乘法"""
|
||||
@@ -224,8 +230,10 @@ class PropertyRentalWizard(models.Model):
|
||||
start_date = datetime.strptime(date_str, "%Y-%m-%d")
|
||||
# 当期应收日期
|
||||
if start_year_month <= date_field_year_month <= end_year_month:
|
||||
self.create_rent_list(record, rent_id, rent_amount, start_date, multiplier)
|
||||
self.create_management_list(record, start_date)
|
||||
if record.contract_sort == 'property':
|
||||
self.create_rent_list(record, rent_id, rent_amount, start_date, multiplier)
|
||||
else:
|
||||
self.create_management_list(record, start_date, rent_amount)
|
||||
|
||||
def get_multiplier(self, cycle_dict):
|
||||
"""根据周期类型返回相应的租金乘数"""
|
||||
@@ -246,6 +254,7 @@ class PropertyRentalWizard(models.Model):
|
||||
records = self.env['property.lease.contract'].search([
|
||||
('actual_start_time', '<=', last_day),
|
||||
('actual_end_time', '>=', first_day),
|
||||
('contract_code','=', '租(2025)001')
|
||||
])
|
||||
filtered_records = [
|
||||
rec for rec in records
|
||||
|
||||
Reference in New Issue
Block a user