#!/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. ] # # 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 . 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 2>/dev/null || echo "")" ODOO_REPO_SSH="$(cat ${HOME}/${DEVSPATH:=devs}/bin/config/odoo.repo.1 2>/dev/null || echo "")" ODOO_REPO_ALT="" ODOO_REPO_PKG=packs.repos 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 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 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 }