Files
gzth/yuthon_property/models/property_electric_reading.py
T
2025-04-15 19:13:04 +08:00

68 lines
3.6 KiB
Python

from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError
class PropertyElectricReading(models.Model):
_name = 'property.electric.reading'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
_description = '抄表'
code = fields.Char(string='编号')
position = fields.Char(string='单元编号')
property_id = fields.Many2one('yuthon.property', string='地址')
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
property_state = fields.Char(string='状态')
employee_ids = fields.Many2many('hr.employee', string='抄表人')
meter_type = fields.Selection([('electric', '电表'), ('water', '水表')], string='仪表类型')
payment_account = fields.Selection([('prepaid', '电费'), ('postpaid', '水费')], string='缴费科目')
other = fields.Char(string='其他')
billing_period = fields.Date(string='账期')
meter_date= fields.Date(string='抄表年月')
last_dosage = fields.Float(string='上次用量')
maximum_count = fields.Float(string='最大计数', default=999999)
last_meter = fields.Date(string='上次抄表日期')
current_meter = fields.Float(string='本次用量', tracking=True)
fee_id = fields.Many2one('yuthon.water.setting', string="收费标准")
price_unit = fields.Float(string='单价')
ratio = fields.Float(string='倍率')
amount_wastage = fields.Float(string='损耗量')
dosage = fields.Float(string='用量')
is_push = fields.Boolean(string='已推送')
generate_charges = fields.Float(string='生成费用')
type = fields.Selection([('public', '公共'), ('fees', '收费')], string='收费类型')
reading_type = fields.Selection([('done', '已抄'), ('undone', '待抄')], string='类型')
def reading_publish(self):
menu_id = self.env['ir.ui.menu'].search([('name', '=', '电表抄表')])
reading_ids = self.env["property.electric.reading"].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.electric.reading&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="详细信息")
@api.onchange('current_meter')
def _onchange_current_meter(self):
current_date = fields.Date.today()
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
def button_details(self):
return {
'name': '抄表详情',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'property.electric.reading',
'res_id': self.id,
}