88 lines
3.4 KiB
Python
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)
|