!5412 添加功能

Merge pull request !5412 from 李鹏宇/zhou
This commit is contained in:
李鹏宇
2025-09-26 03:00:32 +00:00
committed by Gitee
12 changed files with 68 additions and 37 deletions
@@ -23,8 +23,8 @@
</group>
<header_search>
<quick_filter string="状态">
<filter string="草稿" name="approve_state" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'start')]" shownumber="1" />
<filter string="待办" name="to_do" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'pending'), ('employee_ids.user_id', '=', uid)]" shownumber="1" />
<filter string="草稿" name="approve_state" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'start')]" />
<filter string="待办" name="to_do" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'pending'), ('employee_ids.user_id', '=', uid)]" />
<filter string="已办" name="done" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'pending'), ('employee_ids.user_id', '!=', uid)]"/>
<filter string="结束" name="end" domain="[('users_ids', 'in', uid), ('reclaim_state', '=', False), ('approve_state', '=', 'end')]"/>
</quick_filter>
@@ -19,6 +19,7 @@ class PropertyMeterArchives(models.Model):
lessee_id = fields.Many2one('property.tenant.information', string='承租方', store=True, compute='_compute_lessee_id')
employee_ids = fields.Many2many('hr.employee', string='抄表人')
epitope_values = fields.Char(string='表位置')
epitope_values_id = fields.Many2one('yuthon.epitope.values', string='表位置')
other = fields.Char(string='其他')
unit = fields.Float(string='当月单价')
archives_state = fields.Selection([('stop', '停用'), ('use', '正常'), ('rent', '出租')], string='状态', compute='_compute_archives_state', store=True, default='use')
@@ -136,6 +136,7 @@ class MeterWaterLine(models.Model):
end_time = fields.Date(string="拆除日期")
water_state = fields.Selection([('stop', '停用'), ('use', '使用'), ('rent', '出租')], string='状态')
state = fields.Selection([('reading', '已抄'), ('unreading', '未抄')], string='抄表状态', default='unreading')
epitope_values_id = fields.Many2one('yuthon.epitope.values', string='表位置')
remarks = fields.Text(string='备注')
employee_ids = fields.Many2many('hr.employee', string='抄表人')
maximum_count = fields.Integer(string='最大位数')
@@ -5,8 +5,6 @@ class PropertyTariffList(models.Model):
_name = 'property.tariff.list'
_description = '电费列表'
property_id = fields.Many2one('yuthon.property', string='物业')
admin_id = fields.Many2one(related='property_id.admin_id', string="片区管理员", store=True)
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
tariff_meter_number = fields.Char(string='电费编号')
due_date = fields.Date(string='应收日期')
@@ -5,9 +5,7 @@ class PropertyWaterList(models.Model):
_name = 'property.water.list'
_description = '水费列表'
property_id = fields.Many2one('yuthon.property', string='物业')
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
admin_id = fields.Many2one(related='property_id.admin_id', string="片区管理员", store=True)
water_meter_number = fields.Char(string='水表编号')
due_date = fields.Date(string='应收日期')
water_meter_reading = fields.Float(string='水表读数')
@@ -6,7 +6,6 @@
<field name="arch" type="xml">
<tree string="电费列表" editable="bottom" edit="false" delete="false">
<field name="name"/>
<field name="property_id" options="{'no_create': True}"/>
<field name="lessee_id" options="{'no_create': True}"/>
<field name="tariff_meter_number" optional="hide"/>
<field name="due_date"/>
@@ -6,7 +6,6 @@
<field name="arch" type="xml">
<tree string="水费列表" editable="bottom" edit="false" delete="false">
<field name="name"/>
<field name="property_id" options="{'no_create': True}"/>
<field name="lessee_id" options="{'no_create': True}"/>
<field name="water_meter_number" optional="hide"/>
<field name="due_date"/>
@@ -820,6 +820,8 @@ class PropertyTariffList(models.Model):
_inherit = 'property.tariff.list'
contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批")
admin_id = fields.Many2one(related='contract_id.admin_id', string="片区管理员", store=True)
property_name = fields.Char(related='contract_id.property_name', string="物业信息", store=True)
def push_tariff(self):
for rec in self:
@@ -856,6 +858,8 @@ class PropertyWaterList(models.Model):
_inherit = 'property.water.list'
contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批")
admin_id = fields.Many2one(related='contract_id.admin_id', string="片区管理员", store=True)
property_name = fields.Char(related='contract_id.property_name', string="物业信息")
def push_water(self):
for rec in self:
@@ -69,7 +69,7 @@ class PropertyLeaseContract(models.Model):
rent_company = fields.Char(related='lessor_id.name', string="收租公司名称")
rent_account = fields.Char(related='lessor_id.rent_account', string="收租公司账号")
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user)
department_id = fields.Many2one('hr.department', string="部门", store=True, compute='_compute_admin_id')
department_id = fields.Many2one('hr.department', string="部门", default= lambda self: self.env.user.department_id)
company_id = fields.Many2one(related='users_id.employee_id.company_id', string="公司")
# 承租方的个人信息
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
@@ -270,7 +270,6 @@ class PropertyLeaseContract(models.Model):
for record in self:
if record.lease_ids:
record.admin_id = record.lease_ids[0].address_id.admin_id.id
record.department_id = record.lease_ids[0].address_id.admin_id.department_id.id
def contract_signature(self):
return {
@@ -399,8 +398,8 @@ class PropertyLeaseContract(models.Model):
'actual_start_time': contract.term_start_time,
'actual_end_time': contract.term_end_time,
'work_end': True})
contract.get_property_contract_time()
self._update_contract_lines(contract)
logs_to_update = self.env["soong.workflow.log"].search([
("model", "=", self._name),
("res_id", "=", contract.id),
@@ -84,6 +84,7 @@ class PropertyLeaseRenewal(models.Model):
else:
rec.contract_id.write({
'actual_end_time': rec.early_quitting_date})
rec.contract_id.get_property_contract_time()
rec.hide = True
@api.onchange('contract_id', 'renewal_type')
@@ -153,13 +153,13 @@
<field name="model">property.tariff.list</field>
<field name="arch" type="xml">
<search>
<field name="property_id"/>
<field name="property_name"/>
<field name="lessee_id"/>
<field name="contract_id"/>
<group expand="0" string="group_by">
<filter name="group_admin_id" string="管理员" context="{'group_by':'admin_id'}"/>
<filter name="group_due_date" string="应收日期" context="{'group_by':'due_date:month'}"/>
<filter name="group_property_id" string="物业" context="{'group_by':'property_id'}"/>
<filter name="group_property_name" string="物业" context="{'group_by':'property_name'}"/>
<filter name="group_lessee_id" string="承租方" context="{'group_by':'lessee_id'}"/>
</group>
</search>
@@ -176,8 +176,10 @@
<button name="unlink" string="删除" type="object" icon="fa-trash" groups="base.group_system" confirm="确定要删除选中的记录吗?"/>
</header>
</xpath>
<xpath expr="//field[@name='property_id']" position="before">
<xpath expr="//field[@name='name']" position="before">
<field name="property_name"/>
<field name="contract_id" string="合同编号" options="{'no_create': True}"/>
<field name="admin_id" column_invisible="1"/>
</xpath>
</field>
</record>
@@ -195,13 +197,13 @@
<field name="model">property.water.list</field>
<field name="arch" type="xml">
<search>
<field name="property_id"/>
<field name="property_name"/>
<field name="lessee_id"/>
<field name="contract_id"/>
<group expand="0" string="group_by">
<filter name="group_admin_id" string="管理员" context="{'group_by':'admin_id'}"/>
<filter name="group_due_date" string="应收日期" context="{'group_by':'due_date:month'}"/>
<filter name="group_property_id" string="物业" context="{'group_by':'property_id'}"/>
<filter name="group_property_name" string="物业" context="{'group_by':'property_name'}"/>
<filter name="group_lessee_id" string="承租方" context="{'group_by':'lessee_id'}"/>
</group>
</search>
@@ -218,8 +220,10 @@
<button name="unlink" string="删除" type="object" icon="fa-trash" groups="base.group_system" confirm="确定要删除选中的记录吗?"/>
</header>
</xpath>
<xpath expr="//field[@name='property_id']" position="before">
<xpath expr="//field[@name='name']" position="before">
<field name="property_name"/>
<field name="contract_id" string="合同编号" options="{'no_create': True}"/>
<field name="admin_id" column_invisible="1"/>
</xpath>
</field>
</record>
@@ -62,7 +62,7 @@ class PropertyRentalWizard(models.Model):
"month": self.select_month,
})
def create_water_fee_list(self, record):
def create_water_fee_list(self, record, start_date, end_date):
"""封装创建水费记录的逻辑"""
for lease in record.lease_ids:
if lease.address_id and lease.address_id.is_meter:
@@ -72,18 +72,30 @@ class PropertyRentalWizard(models.Model):
)
remarks = self._get_date_range_remark(record.actual_end_time)
for meter in active_water_meters:
water = meter.property_meter_water_id
target_line = water.line_ids.filtered(
lambda l: start_date <= l.meter_date <= end_date
)[:1]
if target_line:
receivables = target_line.receivables
current_meter = target_line.current_meter
meter_date = target_line.meter_date
else:
receivables = 0.0
current_meter = 0.0
meter_date = None
water_list = self.env['property.water.list'].search(
[('name', '=', meter.property_meter_water_id.name)], limit=1
)
[('name', '=', meter.property_meter_water_id.name)], limit=1
)
values = {
'contract_id': record.id,
'property_id': lease.address_id.id,
'lessee_id': record.lessee_id.id,
'original_amount': meter.property_meter_water_id.receivables,
'dosage': meter.property_meter_water_id.current_meter,
'original_amount': receivables,
'dosage':current_meter,
'name': meter.property_meter_water_id.name,
'unit': meter.property_meter_water_id.unit,
'due_date': meter.property_meter_water_id.meter_date + relativedelta(months=1) - timedelta(days=1) if meter.property_meter_water_id.meter_date else None,
'due_date': meter_date + relativedelta(months=1) - timedelta(days=1) if meter_date else None,
'remarks':remarks
}
if water_list:
@@ -91,30 +103,45 @@ class PropertyRentalWizard(models.Model):
else:
self.env['property.water.list'].create(values)
def create_ele_fee_list(self, record):
"""封装创建电费记录的逻辑 """
def create_ele_fee_list(self, record, start_date, end_date):
"""封装创建电费记录的逻辑,从明细行获取指定日期范围的数据"""
for lease in record.lease_ids:
if lease.address_id.is_electricity_meter:
# 获取有效的电表
active_electric_meters = lease.address_id.energy_meter_ids.filtered(
lambda m: not m.demolition_date or m.demolition_date > fields.Date.today()
lambda m: (not m.demolition_date or m.demolition_date > fields.Date.today())
and m.property_meter_archives_id.archives_state in ('use', 'rent')
)
remarks = self._get_date_range_remark(record.actual_end_time)
for meter in active_electric_meters:
archives = meter.property_meter_archives_id
target_line = archives.line_ids.filtered(
lambda l: start_date <= l.meter_date <= end_date
)[:1]
if target_line:
receivables = target_line.receivables
current_meter = target_line.current_meter
meter_date = target_line.meter_date
else:
receivables = 0.0
current_meter = 0.0
meter_date = None
tariff_list = self.env['property.tariff.list'].search(
[('name', '=', meter.property_meter_archives_id.name)], limit=1
[('name', '=', archives.name)], limit=1
)
values = {
'original_amount': meter.property_meter_archives_id.receivables,
'original_amount': receivables,
'contract_id': record.id,
'property_id': lease.address_id.id,
'lessee_id': record.lessee_id.id,
'dosage': meter.property_meter_archives_id.current_meter,
'name': meter.property_meter_archives_id.name,
'unit': meter.property_meter_archives_id.unit,
'remarks':remarks,
'due_date': meter.property_meter_archives_id.meter_date + relativedelta(months=1) - timedelta(days=1) if meter.property_meter_archives_id.meter_date else None,
'dosage': current_meter,
'name': archives.name,
'unit': archives.unit,
'remarks': remarks,
'due_date': meter_date + relativedelta(months=1) - timedelta(days=1) if meter_date else None,
}
if tariff_list:
tariff_list.write(values)
else:
@@ -251,8 +278,8 @@ class PropertyRentalWizard(models.Model):
self.process_rent_record(record, rent_id, date_field_year_month, days, period_month, multiplier, is_year)
self.create_deposit_list(record)
# 生成水电费列表
self.create_water_fee_list(record)
self.create_ele_fee_list(record)
self.create_water_fee_list(record, first_day, last_day)
self.create_ele_fee_list(record, first_day, last_day)
def _get_date_range_remark(self, end_date):
"""生成日期区间备注(格式:YYYYMMDD-YYYYMMDD)"""