Files
odoo_source/addons/mrp/__init__.py
T
Denis Ledoux b4a7996e96 [IMP] base, *: change the API of init hooks to pass env
This is mostly a cleaning/refactoring change.

The current API for init hooks (pre, post, uninstall) is to pass
`cr, registry`.
But the first thing which was done by most
post init and uninstall hooks was to create an env using
the cr passed
e.g.
`env = api.Environment(cr, SUPERUSER_ID, {})`
and the `registry` argument was unused in all these hooks,
completely.

By changing the API of hooks to pass `env` instead
of `cr, registry`, we gain in average two lines in every
hooks:
- the line creating the env `env = api.Environment(cr, SUPERUSER_ID, {})`
- the line importing `api` and `SUPERUSER_ID`

Therefore removing ~250 lines of repeated code lines accross odoo/odoo and
odoo/enterprise.
In addition to these lines removed,
it also ease the API of init hooks for Odoo developers,
who are used to that `env` and not so much how to create an `env`
from a cursor.

Part-of: odoo/odoo#108254
2023-02-01 10:25:01 +01:00

43 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
from . import wizard
from . import report
from . import controller
from . import populate
def _pre_init_mrp(env):
""" Allow installing MRP in databases with large stock.move table (>1M records)
- Creating the computed+stored field stock_move.is_done and
stock_move.unit_factor is terribly slow with the ORM and leads to "Out of
Memory" crashes
"""
env.cr.execute("""ALTER TABLE "stock_move" ADD COLUMN "is_done" bool;""")
env.cr.execute("""UPDATE stock_move
SET is_done=COALESCE(state in ('done', 'cancel'), FALSE);""")
env.cr.execute("""ALTER TABLE "stock_move" ADD COLUMN "unit_factor" double precision;""")
env.cr.execute("""UPDATE stock_move
SET unit_factor=1;""")
def _create_warehouse_data(env):
""" This hook is used to add a default manufacture_pull_id, manufacture
picking_type on every warehouse. It is necessary if the mrp module is
installed after some warehouses were already created.
"""
warehouse_ids = env['stock.warehouse'].search([('manufacture_pull_id', '=', False)])
warehouse_ids.write({'manufacture_to_resupply': True})
def uninstall_hook(env):
warehouses = env["stock.warehouse"].search([])
pbm_routes = warehouses.mapped("pbm_route_id")
warehouses.write({"pbm_route_id": False})
# Fail unlink means that the route is used somewhere (e.g. route_id on stock.rule). In this case
# we don't try to do anything.
try:
with env.cr.savepoint():
pbm_routes.unlink()
except:
pass