- Reordena los mensajes en odoo.es para mantener una secuencia lógica de números - Mejora el manejo de variables en el subshell de la barra de progreso para evitar pérdida de valor - Implementa un método más robusto para actualizar la descripción en README.md existentes - Añade respaldo automático de README.md antes de modificarlo - Mejora manejo de errores en la generación de archivos 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
310 lines
8.2 KiB
Bash
310 lines
8.2 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_REPO_WEB="$(cat ${HOME}/${DEVSPATH:=devs}/bin/config/odoo.repo.2)"
|
|
ODOO_REPO_SSH="$(cat ${HOME}/${DEVSPATH:=devs}/bin/config/odoo.repo.1)"
|
|
ODOO_REPO_ALT=""
|
|
ODOO_REPO_PKG=packs.repos
|
|
ODOO_PACK_DEV=packs
|
|
ODOO_VERSION="$(cat < ${ODOODEVS_PATH}/${ODOO_CFGS}/odoo.version)"
|
|
|
|
|
|
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
|
|
if [ ! -d "${ODOODEVS_PATH}/.git" ]; then
|
|
display_text_header "${head_000} ${odmsg_000}" "${odmsg_113} ${ODOO_REPO_SSH}"
|
|
git clone "${ODOO_REPO_SSH}" "${ODOODEVS_PATH}"
|
|
if [ $? -ne 0 ]; then
|
|
display_text_header "${head_000} ${odmsg_000}" "${odmsg_114} ${ODOO_REPO_ALT}"
|
|
git clone "${ODOO_REPO_ALT}" "${ODOODEVS_PATH}"
|
|
if [ $? -ne 0 ]; then
|
|
return 2
|
|
fi
|
|
fi
|
|
else
|
|
cd "${ODOODEVS_PATH}"
|
|
git pull
|
|
if [ $? -ne 0 ]; then
|
|
return 3
|
|
fi
|
|
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
|
|
}
|
|
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
|
|
}
|
|
|