167 lines
8.2 KiB
Python
167 lines
8.2 KiB
Python
from odoo import models, fields, api, exceptions, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class PropertySplitApproval(models.Model):
|
|
_name = 'property.split.approval'
|
|
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
|
_description = '物业拆分审批'
|
|
|
|
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('property_split_approval_code'))
|
|
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
|
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
|
property_id = fields.Many2one('yuthon.property', string='物业名称')
|
|
units = fields.Char(related='property_id.units', string='单元')
|
|
effective_date = fields.Date(string='生效日期', default=fields.Date.today())
|
|
property_floor_id = fields.Many2one(related='property_id.property_floor_id', string='楼层')
|
|
asset_type_id = fields.Many2one(related='property_id.asset_type_id', string='资产类型')
|
|
building_area = fields.Float(related='property_id.building_area', string='建筑面积')
|
|
rent_area = fields.Float(related='property_id.rent_area', string='可租面积')
|
|
remarks = fields.Char(string='备注')
|
|
is_issues = fields.Boolean(string='是否上会')
|
|
issues_result = fields.Html(string="会议结果")
|
|
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
|
name = fields.Char(string='标题')
|
|
reason = fields.Text(string="正文")
|
|
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
|
property_split_approval_line_ids = fields.One2many('property.split.approval.line', 'property_split_approval_id', string='关联物业拆分明细行')
|
|
split_quantity = fields.Integer(string='拆分数量', default=2)
|
|
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
|
|
default='normal')
|
|
active = fields.Boolean('Active', default=True, tracking=True)
|
|
work_end = fields.Boolean(string="结束")
|
|
|
|
def _get_default_name_title(self):
|
|
return self._description if self._description else self._name
|
|
|
|
name_title = fields.Char(default=_get_default_name_title)
|
|
self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])])
|
|
|
|
@api.onchange('split_quantity', 'property_id')
|
|
def _onchange_split_quantity(self):
|
|
self.property_split_approval_line_ids = [(5, 0, 0)]
|
|
if self.split_quantity < 2:
|
|
raise UserError('拆分数量必须是大于2')
|
|
lines_to_create = []
|
|
for i in range(self.split_quantity):
|
|
lines_to_create.append({
|
|
'property_split_approval_id': self.id,
|
|
'split_property': f"{self.property_id.name}-{i + 1}"
|
|
})
|
|
self.property_split_approval_line_ids = [(0, 0, line) for line in lines_to_create]
|
|
|
|
def put_split_message(self):
|
|
property_list = []
|
|
for property_split in self.property_split_approval_line_ids:
|
|
main_property = self.property_id
|
|
property_id = self.env['yuthon.property'].create({
|
|
'name': property_split.split_property,
|
|
'asset_type_id': main_property.asset_type_id.id,
|
|
'property_merge_approval_id': main_property.id,
|
|
'is_electricity_meter': main_property.is_electricity_meter,
|
|
'is_meter': main_property.is_meter,
|
|
'is_message_fee': main_property.is_message_fee,
|
|
'units': main_property.units,
|
|
'district': main_property.district,
|
|
'property_building_id': main_property.property_building_id.id,
|
|
'property_orientation': main_property.property_orientation,
|
|
'street': main_property.street,
|
|
'property_source': main_property.property_source,
|
|
'live_room': main_property.live_room.id,
|
|
'house_type_id': main_property.house_type_id.id,
|
|
'feature_ids': main_property.feature_ids.ids,
|
|
'rental_conditions': main_property.rental_conditions,
|
|
'property_floor_id': main_property.property_floor_id.id,
|
|
'effective_date': self.effective_date,
|
|
'is_done_merge': True
|
|
})
|
|
|
|
if main_property.water_meter_ids:
|
|
water_vals = [
|
|
(0, 0, {
|
|
'property_meter_water_id': water.property_meter_water_id.id,
|
|
'yuthon_property_id': property_id.id
|
|
}) for water in main_property.water_meter_ids
|
|
]
|
|
property_id.water_meter_ids = water_vals
|
|
|
|
if main_property.energy_meter_ids:
|
|
energy_vals = [
|
|
(0, 0, {
|
|
'property_meter_archives_id': energy.property_meter_archives_id.id,
|
|
'yuthon_property_id': property_id.id
|
|
}) for energy in main_property.energy_meter_ids
|
|
]
|
|
property_id.energy_meter_ids = energy_vals
|
|
|
|
if main_property.title_information_ids:
|
|
title_vals = [
|
|
(0, 0, {
|
|
'property_message_id': line.property_message_id.id,
|
|
'start_time': line.start_time,
|
|
'end_date': line.end_date,
|
|
'yuthon_property_id': property_id.id
|
|
}) for line in main_property.title_information_ids
|
|
]
|
|
property_id.title_information_ids = title_vals
|
|
|
|
if main_property.manage_information_ids:
|
|
manage_vals = [
|
|
(0, 0, {
|
|
'management_area': property_split.split_building_area,
|
|
'rent_area': property_split.split_rent_area,
|
|
'purpose_id': line.purpose_id.id,
|
|
'precinct_id': line.precinct_id.id,
|
|
'tenure_type': line.tenure_type,
|
|
'admin_id': line.admin_id.id,
|
|
'company_id': line.company_id.id,
|
|
'start_time': line.start_time,
|
|
'end_date': line.end_date,
|
|
'yuthon_property_id': property_id.id
|
|
}) for line in main_property.manage_information_ids
|
|
]
|
|
property_id.manage_information_ids = manage_vals
|
|
|
|
if main_property.assessment_ids:
|
|
assessment_vals = [
|
|
(0, 0, {
|
|
'name': line.name, # 复制评估名称
|
|
'yuthon_property_id': property_id.id
|
|
}) for line in main_property.assessment_ids
|
|
]
|
|
property_id.assessment_ids = assessment_vals
|
|
|
|
if main_property.repair_ids:
|
|
repair_vals = [
|
|
(0, 0, {
|
|
'name': line.name,
|
|
'yuthon_property_id': property_id.id
|
|
}) for line in main_property.repair_ids
|
|
]
|
|
property_id.repair_ids = repair_vals
|
|
|
|
if main_property.produce_ids:
|
|
produce_vals = [
|
|
(0, 0, {
|
|
'produce_id': line.produce_id.id,
|
|
'yuthon_property_id': property_id.id
|
|
}) for line in main_property.produce_ids
|
|
]
|
|
property_id.produce_ids = produce_vals
|
|
|
|
self.property_id.write({
|
|
'is_done_split': True,
|
|
'disassembly_information_ids': property_list
|
|
})
|
|
|
|
class PropertySplitApprovalLine(models.Model):
|
|
_name = 'property.split.approval.line'
|
|
_description = '物业拆分明细行'
|
|
|
|
property_split_approval_id = fields.Many2one('property.split.approval', string='关联物业拆分审批')
|
|
split_property = fields.Char(string='物业名称')
|
|
split_building_area = fields.Float(string='管理面积', digits=(16, 4))
|
|
split_rent_area = fields.Float(string='可租面积', digits=(16, 4))
|
|
split_remarks = fields.Char(string='备注')
|
|
|