@@ -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)"""
|
||||
|
||||
Reference in New Issue
Block a user