odoo-openupgrade-wizard/odoo_openupgrade_wizard/cli/cli_install_from_csv.py
2024-04-30 15:10:43 +02:00

84 lines
2.8 KiB
Python

import click
from loguru import logger
from odoo_openupgrade_wizard.cli.cli_options import (
database_option,
demo_option,
get_migration_step_from_options,
)
from odoo_openupgrade_wizard.tools.tools_odoo import (
get_odoo_modules_from_csv,
kill_odoo,
run_odoo,
)
from odoo_openupgrade_wizard.tools.tools_odoo_instance import OdooInstance
from odoo_openupgrade_wizard.tools.tools_postgres import ensure_database
@click.command()
@database_option
@demo_option
@click.pass_context
def install_from_csv(ctx, database, with_demo):
migration_step = get_migration_step_from_options(ctx, 1)
ensure_database(ctx, database, state="present")
# Get modules list from the CSV file
module_names = get_odoo_modules_from_csv(ctx.obj["module_file_path"])
module_names.sort()
logger.info(f"Found {len(module_names)} modules.")
logger.debug(module_names)
try:
logger.info(f"Install 'base' module on {database} database ...")
run_odoo(
ctx,
migration_step,
database=database,
detached_container=True,
init="base",
demo=with_demo,
publish_ports=True,
)
odoo_instance = OdooInstance(ctx, database)
odoo_default_company = ctx.obj["config"].get(
"odoo_default_company", False
)
if odoo_default_company:
# Then, set correct country to the company of the current user
# Otherwise, due to poor design of Odoo, when installing account
# the US localization will be installed.
# (l10n_us + l10n_generic_coa)
countries = odoo_instance.browse_by_search(
"res.country",
[("code", "=", odoo_default_company["country_code"])],
)
if len(countries) != 1:
raise Exception(
f"Unable to find a country, based on the"
f" code {odoo_default_company['country_code']}."
f" Countries found :"
f" {', '.join([x.name for x in countries])}"
)
vals = {
"country_id": countries[0].id,
"currency_id": countries[0].currency_id.id,
"phone": odoo_default_company.get("phone"),
"email": odoo_default_company.get("email"),
}
logger.info(
f"Configuring main company with values {vals}"
f" (country {countries[0].name}"
)
odoo_instance.env.user.company_id.write(vals)
# Install modules
odoo_instance.install_modules(module_names)
except (KeyboardInterrupt, SystemExit):
logger.info("Received Keyboard Interrupt or System Exiting...")
finally:
kill_odoo(ctx, database, migration_step)