Files
gzth/yuthon_property/wizard/meter_price_wizard.py
T
2025-12-15 16:35:50 +08:00

88 lines
3.4 KiB
Python

from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError
from datetime import date, datetime, time
from datetime import timedelta
class MeterPriceWizard(models.TransientModel):
_name = 'meter.price.wizard'
_description = '电表修改单价弹窗'
select_time = fields.Selection([('1', '一月'), ('2', '二月'), ('3', '三月'), ('4', '四月'),
('5', '五月'), ('6', '六月'), ('7', '七月'), ('8', '八月'),
('9', '九月'), ('10', '十月'), ('11', '十一月'),
('12', '十二月')], string='月份',
default=lambda self: self._get_default_month())
select_year = fields.Selection(selection=[(str(i), str(i)) for i in range(2024, 2040)], string='年份',
default=lambda self: str(datetime.now().year))
price = fields.Float(string='计费单价', digits=(16, 4))
@api.onchange("select_time", "select_year")
def _get_price(self):
current_month = int(self.select_time)
current_year = int(self.select_year)
if current_month == 1:
last_month = 12
last_year = current_year - 1
else:
last_month = current_month - 1
last_year = current_year
logs_id = self.env['hydropower.logs'].search([
('select_year', '=', last_year),
('select_time', '=', str(last_month)),
('meter_type', '=', 'electric')
], limit=1)
# 3. 赋值价格
self.price = logs_id.price if logs_id else 0.0
def confirm(self):
year = int(self.select_year)
month = int(self.select_time)
start_date = datetime(year, month, 1).date()
if month == 12:
next_month = 1
next_year = year + 1
else:
next_month = month + 1
next_year = year
end_date = (datetime(next_year, next_month, 1).date() - timedelta(days=1))
valid_contract_lines = self.env['meter.archives.line'].search([
('meter_date', '>=', start_date),
('meter_date', '<=', end_date),
])
for valid in valid_contract_lines:
if valid.archives_id.type == 'fees':
if valid.contract_id.id:
electric_id = self.env['property.electric.fee.line'].search([
('property_meter_archives_id.name', '=', '950404861125'),
('contract_id', '=', valid.contract_id.id),
])
if electric_id:
if electric_id.unit_price > 0:
unit = electric_id.unit_price
else:
unit = self.price
else:
unit = self.price
else:
unit = self.price
else:
unit = 0
valid.write({
'unit': unit,
})
valid.onchange_receivables()
self.env['hydropower.logs'].create({
'meter_type': 'electric',
'select_time': self.select_time,
'select_year': self.select_year,
'price': self.price,
})
def _get_default_month(self):
current_month = datetime.now().month
return str(current_month)