126 lines
5.8 KiB
Python
126 lines
5.8 KiB
Python
from email.policy import default
|
|
|
|
from odoo import models, fields, api
|
|
from odoo.exceptions import UserError, ValidationError
|
|
|
|
class PropertyMeterArchives(models.Model):
|
|
_name = 'property.meter.archives'
|
|
_description = '电表库'
|
|
|
|
name = fields.Char(string='仪表编号')
|
|
unit_number = fields.Char(string='单元编号')
|
|
installation_location = fields.Char(string='安装位置')
|
|
device_number = fields.Char(string='设备编号')
|
|
is_state = fields.Boolean(string='是否启用')
|
|
type = fields.Selection([('public', '公共'), ('fees', '收费')], string='类型')
|
|
gauge_magnification = fields.Float(string='仪表倍率', default=1)
|
|
maximum_count = fields.Float(string='最大计数', default=999999)
|
|
lessee_id = fields.Many2one(related='yuthon_property_id.lessee_id', string='承租方', store=True)
|
|
employee_ids = fields.Many2many('hr.employee', string='抄表人')
|
|
meter_type = fields.Selection([('electric', '电表'), ('water', '水表')], string='仪表类型')
|
|
other = fields.Char(string='其他')
|
|
meter_date = fields.Date(string='抄表年月')
|
|
last_dosage = fields.Float(string='上次用量')
|
|
last_meter = fields.Date(string='上次抄表日期')
|
|
current_meter = fields.Float(string='本次用量', tracking=True)
|
|
ratio = fields.Float(string='倍率')
|
|
archives_state = fields.Selection([('stop', '停用'), ('use', '正常'), ('rent', '出租')], string='状态', compute='_compute_archives_state', store=True, default='use')
|
|
dosage = fields.Float(string='用量')
|
|
is_push = fields.Boolean(string='已推送')
|
|
start_time = fields.Date(string="安装日期")
|
|
end_time = fields.Date(string="拆除日期")
|
|
last_reading_time = fields.Date(string="最后读数时间")
|
|
standards_id = fields.Many2one('yuthon.electricity.setting', string='标准')
|
|
yuthon_property_id = fields.Many2one('yuthon.property', string='关联物业信息')
|
|
|
|
@api.depends('lessee_id')
|
|
def _compute_archives_state(self):
|
|
for record in self:
|
|
if record.lessee_id:
|
|
record.archives_state = 'rent'
|
|
else:
|
|
record.archives_state = 'use'
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
record = super().create(vals)
|
|
if record.lessee_id:
|
|
record.archives_state = 'rent'
|
|
else:
|
|
record.archives_state = 'use'
|
|
return record
|
|
|
|
def button_archives_state(self):
|
|
archives_ids = self.env["property.meter.archives"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
|
for record in archives_ids:
|
|
record.archives_state = 'stop'
|
|
|
|
def update_meter(self):
|
|
meter_ids = self.env["property.meter.archives"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
|
for record in meter_ids:
|
|
if record.lessee_id:
|
|
record.archives_state = 'rent'
|
|
else:
|
|
record.archives_state = 'use'
|
|
|
|
@api.onchange('current_meter')
|
|
def _onchange_current_meter(self):
|
|
current_date = fields.Date.today()
|
|
if self.current_meter > 0:
|
|
self.is_push = False
|
|
self.meter_date = current_date
|
|
|
|
@api.onchange('last_dosage', 'current_meter')
|
|
def _onchange_dosage(self):
|
|
for record in self:
|
|
if record.current_meter > record.last_meter:
|
|
record.dosage = record.current_meter - record.last_meter
|
|
else:
|
|
record.dosage = record.maximum_count - record.last_meter + record.current_meter
|
|
|
|
@api.onchange('yuthon_property_id')
|
|
def _onchange_property(self):
|
|
if self.yuthon_property_id:
|
|
meter_list = []
|
|
property_id = self.env['yuthon.property'].search([('id', '=', self.yuthon_property_id.id)])
|
|
property_id.is_electricity_meter = True
|
|
meter_list.append((0, 0, {
|
|
'yuthon_property_id':property_id.id,
|
|
'property_meter_archives_id':self.id.origin,
|
|
}))
|
|
property_id.energy_meter_ids = meter_list
|
|
|
|
def action_property_meter_wizard(self):
|
|
return {
|
|
"type": "ir.actions.act_window",
|
|
"name": "批量导入物业电表",
|
|
"res_model": "property.meter.wizard",
|
|
"view_mode": "form",
|
|
"target": "new",
|
|
}
|
|
|
|
def reading_publish(self):
|
|
menu_id = self.env['ir.ui.menu'].search([('name', '=', '水表抄表')])
|
|
reading_ids = self.env["property.meter.archives"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
|
for record in reading_ids:
|
|
for employee_id in record.employee_ids:
|
|
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=property.meter.archives&view_type=list&menu_id={menu_id.id}'
|
|
we_id = self.env['hr.employee'].search([('id', '=', employee_id)]).wecom_userid
|
|
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=we_id,
|
|
title="通知公告",
|
|
description="您有抄表待处理,请及时处理",
|
|
url=url, btntxt="详细信息")
|
|
|
|
def batch_reading_push(self):
|
|
archives_ids = self.env["property.meter.archives"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
|
for record in archives_ids:
|
|
record.write({
|
|
'is_push': True,
|
|
})
|
|
record.last_dosage += record.current_meter
|
|
record.current_meter = 0
|
|
|
|
class PropertyElectricReading(models.Model):
|
|
_name = 'property.electric.reading'
|
|
current_meter = fields.Float(string='本次用量', tracking=True)
|