devs/bin/lib/odoo.lib
Mauro Rosero P. 322880209e
[FIXED] Eliminar dependencias de repositorios Odoo
- Elimina todas las referencias a odoo.repo que requerían archivos de configuración adicionales
- Simplifica la función odoo_developers para crear directorios sin depender de repositorios Git
- Reduce las dependencias externas para mejorar la portabilidad del script

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-12 05:46:07 -05:00

292 lines
7.6 KiB
Bash

#!/bin/bash
#
# Library: odoo.lib
# Description: Odoo Developers Tools Library
# Modified: 2024/12/09 08:20:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
#
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
ODOO_DEVS=${ODOODEVS:=odoo}
ODOO_CFGS=${ODOO_CFGS:=configs}
ODOODEVS_PATH="${HOME}/${DEVSPATH:=devs}/${ODOO_DEVS}"
ODOO_PACK_DEV=packs
ODOO_CFG_VERS=("18")
# Test library
function devslib_test() {
echo "Developers Library loaded!"
exit 1
}
function odoo_developers() {
clear
if [ -d "${ODOODEVS_PATH}" ]; then
return 1
else
# Crear el directorio base de Odoo si no existe
mkdir -p "${ODOODEVS_PATH}"
if [ $? -ne 0 ]; then
return 2
fi
fi
if [ ! -d "${ODOODEVS_PATH}/${ODOO_PACK_DEV}" ]; then
mkdir "${ODOODEVS_PATH}/${ODOO_PACK_DEV}"
fi
return 0
}
# Check for odoo version supported
function odoo_verscheck() {
local value=$1
for item in "${ODOO_CFG_VERS[@]}"
do
if [[ "$item" == "$value" ]]
then
return 0
fi
done
return 1
}
# Función para crear un nuevo proyecto Odoo
function odoo_create_project() {
local project_name=$1
local projects_folder=$2
local project_description=$3
local projects_path="${HOME}/${DEVSPATH}/${projects_folder}"
local project_path="${projects_path}/${project_name}"
# Verificar si el directorio de proyectos existe
if [ ! -d "${projects_path}" ]; then
mkdir -p "${projects_path}"
if [ $? -ne 0 ]; then
return 2 # No se pudo crear el directorio de proyectos
fi
fi
# Verificar si el proyecto ya existe
if [ -d "${project_path}" ]; then
# Si el proyecto existe y tiene un README.md, actualizar la descripción
if [ -f "${project_path}/README.md" ]; then
# Respaldar el README original
cp "${project_path}/README.md" "${project_path}/README.md.bak"
# Crear un nuevo README con la descripción actualizada
# Método más simple y robusto que awk, que podría fallar con sintaxis complejas
{
grep -i -B 1000 "^## Descripción" "${project_path}/README.md.bak" 2>/dev/null || echo -e "# Proyecto Odoo: ${project_name}\n\n## Descripción"
echo "${project_description}"
echo ""
echo "Este proyecto fue actualizado con las herramientas MRDevs."
echo ""
grep -i -A 1000 "^## " "${project_path}/README.md.bak" | grep -v "^## Descripción" | awk 'NR>1'
} > "${project_path}/README.md.new"
# Verificar que el archivo nuevo no está vacío antes de reemplazar
if [ -s "${project_path}/README.md.new" ]; then
mv "${project_path}/README.md.new" "${project_path}/README.md"
else
# Si algo falló, restaurar el backup
mv "${project_path}/README.md.bak" "${project_path}/README.md"
fi
fi
return 1 # El proyecto ya existe
fi
# Crear el directorio del proyecto
mkdir -p "${project_path}"
if [ $? -ne 0 ]; then
return 3 # Error al crear el directorio del proyecto
fi
# Crear estructura completa de carpetas para un proyecto Odoo
mkdir -p "${project_path}/addons" # Módulos personalizados
mkdir -p "${project_path}/addons/custom" # Desarrollo propio
mkdir -p "${project_path}/addons/third-party" # Módulos de terceros
mkdir -p "${project_path}/build" # Archivos para construcción de contenedor
mkdir -p "${project_path}/settings" # Configuraciones del proyecto
mkdir -p "${project_path}/data" # Datos y archivos CSV/XML
mkdir -p "${project_path}/docs" # Documentación del proyecto
mkdir -p "${project_path}/scripts" # Scripts auxiliares y de utilidades
mkdir -p "${project_path}/tests" # Pruebas y fixtures
# Crear archivo .typset en la raíz del proyecto
echo "odoo" > "${project_path}/.typset"
# Crear archivos básicos de configuración
cat > "${project_path}/settings/odoo.conf" << EOF
[options]
; Opciones básicas de configuración de Odoo
admin_passwd = admin
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo
addons_path = /mnt/extra-addons
; Configuración adicional
EOF
# Crear archivo básico de Docker/Podman
cat > "${project_path}/build/Dockerfile" << EOF
FROM odoo:latest
USER root
# Instalar dependencias adicionales
RUN pip3 install phonenumbers py-Asterisk python-slugify num2words
# Copiar módulos personalizados
COPY ./addons/custom /mnt/extra-addons/
# Copiar configuración
COPY ./settings/odoo.conf /etc/odoo/
USER odoo
EOF
# Crear docker-compose.yml básico
cat > "${project_path}/docker-compose.yml" << EOF
version: '3'
services:
odoo:
build:
context: .
dockerfile: build/Dockerfile
depends_on:
- db
ports:
- "8069:8069"
volumes:
- odoo-data:/var/lib/odoo
- ./addons/custom:/mnt/extra-addons/custom
- ./addons/third-party:/mnt/extra-addons/third-party
- ./settings:/etc/odoo
environment:
- PASSWORD_FILE=/run/secrets/postgresql_password
restart: always
db:
image: postgres:13
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=odoo
- POSTGRES_USER=odoo
volumes:
- db-data:/var/lib/postgresql/data
restart: always
volumes:
odoo-data:
db-data:
EOF
# Crear README.md completo
cat > "${project_path}/README.md" << EOF
# Proyecto Odoo: ${project_name}
## Descripción
${project_description}
Este proyecto fue creado con las herramientas MRDevs.
## Estructura
- \`addons/\`: Módulos Odoo
- \`custom/\`: Módulos personalizados desarrollados para este proyecto
- \`third-party/\`: Módulos de terceros
- \`build/\`: Archivos para construcción de contenedores
- \`settings/\`: Archivos de configuración de Odoo
- \`data/\`: Archivos de datos (CSV, XML) para importación
- \`docs/\`: Documentación del proyecto
- \`scripts/\`: Scripts de utilidad
- \`tests/\`: Pruebas y fixtures
## Cómo ejecutar
\`\`\`bash
cd ${project_path}
docker-compose up -d
\`\`\`
## Configuración
Edita el archivo \`settings/odoo.conf\` para personalizar la configuración de Odoo.
## Desarrollo
Para añadir nuevos módulos personalizados, colócalos en el directorio \`addons/custom/\`.
---
Creado en: $(date +"%Y-%m-%d %H:%M:%S")
EOF
# Crear un archivo .gitignore básico
cat > "${project_path}/.gitignore" << EOF
# Archivos Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# Archivos específicos de Odoo
*.pyc
*.pyo
*.mo
.idea/
.vscode/
.settings/
odoo.log
odoo.conf.local
data/filestore/
data/sessions/
# Directorios y archivos locales
local/*
!local/.gitkeep
.env
.DS_Store
EOF
# Crear un script de inicio rápido
cat > "${project_path}/scripts/start.sh" << EOF
#!/bin/bash
# Script para iniciar el entorno Odoo
cd ..
docker-compose up -d
echo "Odoo está iniciando en http://localhost:8069"
EOF
chmod +x "${project_path}/scripts/start.sh"
return 0 # Éxito
}