Skip to content

Commit 5789538

Browse files
committed
[IMP] fill module countries
Since saas~17.1[^1], the modules can be tied to countries. Such modules, when auto-install, are only installed if there are *any* active company in those countries. [^1]: odoo/odoo#144586 Part-of: #123 Signed-off-by: Christophe Simonis (chs) <[email protected]>
1 parent f234ed4 commit 5789538

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

src/util/modules.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,33 @@ def _set_module_category(cr, module, category):
689689
cr.execute("UPDATE ir_module_module SET category_id=%s WHERE name=%s", [cid, module])
690690

691691

692-
def new_module(cr, module, deps=(), auto_install=False, category=None):
692+
def _set_module_countries(cr, module, countries):
693+
if not table_exists(cr, "module_country"):
694+
return
695+
clean_query = """
696+
DELETE
697+
FROM module_country mc
698+
USING ir_module_module m
699+
WHERE m.id = mc.module_id
700+
AND m.name = %s
701+
"""
702+
cr.execute(clean_query, [module])
703+
704+
if not countries:
705+
return
706+
707+
insert_query = """
708+
INSERT INTO module_country(module_id, country_id)
709+
SELECT m.id, c.id
710+
FROM ir_module_module m,
711+
res_country c
712+
WHERE m.name = %s
713+
AND c.code IN %s
714+
"""
715+
cr.execute(insert_query, [module, tuple(c.upper() for c in countries)])
716+
717+
718+
def new_module(cr, module, deps=(), auto_install=False, category=None, countries=()):
693719
if deps:
694720
_assert_modules_exists(cr, *deps)
695721

@@ -732,6 +758,7 @@ def new_module(cr, module, deps=(), auto_install=False, category=None):
732758

733759
if category is not None:
734760
_set_module_category(cr, module, category)
761+
_set_module_countries(cr, module, countries)
735762

736763
module_auto_install(cr, module, auto_install)
737764
trigger_auto_install(cr, module)
@@ -822,19 +849,25 @@ def _trigger_auto_discovery(cr):
822849
graph = {}
823850
for module in odoo.modules.get_modules():
824851
manifest = get_manifest(module)
825-
graph[module] = (set(manifest["depends"]), manifest["auto_install"], manifest["category"])
852+
graph[module] = (
853+
set(manifest["depends"]),
854+
manifest["auto_install"],
855+
manifest["category"],
856+
manifest.get("countries"),
857+
)
826858

827859
for module in topological_sort({k: v[0] for k, v in graph.items()}):
828-
deps, auto_install, category = graph[module]
860+
deps, auto_install, category, countries = graph[module]
829861
if module not in existing:
830-
new_module(cr, module, deps=deps, auto_install=auto_install, category=category)
862+
new_module(cr, module, deps=deps, auto_install=auto_install, category=category, countries=countries)
831863
else:
832864
current_deps = set(existing[module])
833865
plus = deps - current_deps
834866
minus = current_deps - deps
835867
if plus or minus:
836868
module_deps_diff(cr, module, plus=plus, minus=minus)
837869
_set_module_category(cr, module, category)
870+
_set_module_countries(cr, module, countries)
838871
module_auto_install(cr, module, auto_install)
839872

840873
if module in force_installs:

0 commit comments

Comments
 (0)