diff --git a/containers/odoo/odoo-entrypoint.sh b/containers/odoo/odoo-entrypoint.sh index 61c078a..dfd0d39 100644 --- a/containers/odoo/odoo-entrypoint.sh +++ b/containers/odoo/odoo-entrypoint.sh @@ -3,12 +3,17 @@ set -e # Valori di default ADMIN_PASSWD="${ADMIN_PASSWD:-Password123}" +WITH_DEMO="${WITH_DEMO:-False}" DB_HOST="${DB_HOST:-localhost}" DB_PORT="${DB_PORT:-5432}" DB_USER="${DB_USER:-odoo}" DB_PASSWORD="${DB_PASSWORD:-odoo}" DB_NAME="${DB_NAME:-}" DB_TEMPLATE="${DB_TEMPLATE:-template1}" +# Lingue da caricare all'inizializzazione del database (la prima diventa la +# lingua di default per i partner). CLI-only: in Odoo --load-language ha +# file_exportable=False, quindi va passata al comando di init, non in odoo.conf. +LOAD_LANGUAGE="${LOAD_LANGUAGE:-it_IT}" CONFIG_FILE=/etc/odoo/odoo.conf @@ -37,7 +42,7 @@ fi cat >> "$CONFIG_FILE" << EOF ; File Paths (installazione tramite pacchetto .deb ufficiale) -addons_path = /usr/lib/python3/dist-packages/odoo/addons,/var/lib/odoo/custom_addons +addons_path = /usr/lib/python3/dist-packages/odoo/addons,/var/lib/odoo/custom_addons,/opt/duckdoo-addons data_dir = /var/lib/odoo/.local/share/Odoo ; Logging @@ -52,27 +57,67 @@ gevent_port = 8072 max_cron_threads = 2 EOF -# Inizializza il database solo se DB_NAME è impostato e il file .odoo_initialized non esiste -if [ -n "$DB_NAME" ] && [ ! -f /var/lib/odoo/.odoo_initialized ]; then - echo "Inizializzazione del database..." +# Scopre i moduli custom installabili: ogni sottocartella con __manifest__.py +# in /var/lib/odoo/custom_addons (repo del progetto) e /opt/duckdoo-addons +# (moduli DuckDoo, presenti solo se l'immagine è buildata con --support-duckdoo). +discover_custom_modules() { + local modules="" + for addons_dir in /var/lib/odoo/custom_addons /opt/duckdoo-addons; do + [ -d "$addons_dir" ] || continue + for mod_dir in "$addons_dir"/*/; do + [ -f "${mod_dir}__manifest__.py" ] || continue + local mod_name + mod_name=$(basename "$mod_dir") + if [ -z "$modules" ]; then + modules="$mod_name" + else + modules="$modules,$mod_name" + fi + done + done + echo "$modules" +} - # Con DB_NAME impostato, DB_USER è volutamente senza privilegio CREATEDB: - # il database deve essere già stato creato a mano (vedi containers/postgres/postgres.README) - DB_EXISTS=$(PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d "$DB_TEMPLATE" -tAc "SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'" 2>/dev/null) - - if [ -z "$DB_EXISTS" ]; then - echo "ERRORE: il database '$DB_NAME' non esiste e $DB_USER non ha il privilegio CREATEDB." - echo "Crealo manualmente (vedi containers/postgres/postgres.README) prima di avviare questa istanza." - exit 1 +if [ -n "$DB_NAME" ]; then + if [ "$WITH_DEMO" = "True" ]; then + WITHOUT_DEMO_FLAG=False + else + WITHOUT_DEMO_FLAG=True fi - # Inizializza il database - /usr/bin/odoo -c "$CONFIG_FILE" -i base --stop-after-init --without-demo=True + CUSTOM_MODULES=$(discover_custom_modules) - # Crea il file di flag per indicare che l'inizializzazione è completata - touch /var/lib/odoo/.odoo_initialized + if [ ! -f /var/lib/odoo/.odoo_initialized ]; then + # Database nuovo: inizializza base + installa tutti i moduli custom. + echo "Inizializzazione del database..." - echo "Database inizializzato." + # Con DB_NAME impostato, DB_USER è volutamente senza privilegio CREATEDB: + # il database deve essere già stato creato a mano (vedi containers/postgres/postgres.README) + DB_EXISTS=$(PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d "$DB_TEMPLATE" -tAc "SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'" 2>/dev/null) + + if [ -z "$DB_EXISTS" ]; then + echo "ERRORE: il database '$DB_NAME' non esiste e $DB_USER non ha il privilegio CREATEDB." + echo "Crealo manualmente (vedi containers/postgres/postgres.README) prima di avviare questa istanza." + exit 1 + fi + + MODULES=base + [ -n "$CUSTOM_MODULES" ] && MODULES="$MODULES,$CUSTOM_MODULES" + /usr/bin/odoo -c "$CONFIG_FILE" -i "$MODULES" --load-language="$LOAD_LANGUAGE" --stop-after-init --without-demo=$WITHOUT_DEMO_FLAG + + touch /var/lib/odoo/.odoo_initialized + touch /var/lib/odoo/.modules_synced + echo "Database inizializzato." + + elif [ ! -f /var/lib/odoo/.modules_synced ] && [ -n "$CUSTOM_MODULES" ]; then + # Database restorato/importato: lo schema esiste gia' ma i moduli + # custom non sono installati (il flag .modules_synced viene rimosso + # da DuckDoo ad ogni restore, vedi services/podman.py). + echo "Installazione moduli custom su database esistente: $CUSTOM_MODULES" + /usr/bin/odoo -c "$CONFIG_FILE" -i "$CUSTOM_MODULES" --stop-after-init --without-demo=$WITHOUT_DEMO_FLAG + touch /var/lib/odoo/.modules_synced + echo "Moduli custom installati." + fi fi # Avvia Odoo