28 lines
1.1 KiB
Python
28 lines
1.1 KiB
Python
from . import models
|
|
from . import controllers
|
|
|
|
|
|
def sync_specs_from_code(cr, registry):
|
|
"""模块安装/升级后:把代码里的建筑产出规格刷进 build.item 字段,
|
|
并对所有世界做全量对账(速率 + 即时属性)。
|
|
|
|
彻底消除「noupdate XML 记录升级不重放 → 必须手动补写 DB」的坑:
|
|
改任何建筑产出,只需改 build_spec.BUILD_SPECS + 升级模块。
|
|
"""
|
|
from odoo import api
|
|
import odoo
|
|
env = api.Environment(cr, odoo.SUPERUSER_ID, {})
|
|
from odoo.addons.yt_world.build_spec import BUILD_SPECS
|
|
Item = env['yt.world.build.item'].sudo()
|
|
for code, spec in BUILD_SPECS.items():
|
|
items = Item.search([('code', '=', code)])
|
|
if items:
|
|
items.write({
|
|
'stat_yield_instant': spec.get('stat_yield_instant', {}) or {},
|
|
'stat_yield_tick': spec.get('stat_yield_tick', {}) or {},
|
|
})
|
|
# 全量对账:速率(tick)与即时属性(instant)都从实例重新计算,幂等 SET
|
|
for world in env['yt.world'].search([]):
|
|
world._recalc_rates()
|
|
world._reconcile_instant()
|