feat: Botón Guardar Todo en conceptos y mejoras Docker

Cambios realizados:
- concept_view.php: Agregado botón 'Guardar Todo' arriba y abajo de la tabla, eliminado botón individual por fila
- dashboard.php: Agregado endpoint save_all_concept_payments para guardar múltiples pagos
- docker-entrypoint.sh: Corregidos permisos de volúmenes para ZimaOS/CasaOS (cambia dueño a www-data)
- docker/Dockerfile: Corregida ruta del entrypoint
- build-and-push.sh: Script interactivo para crear imagen Docker con opción de caché/sin caché

Los cambios permiten guardar todos los pagos de conceptos de una sola vez y mejoran la compatibilidad con despliegues en ZimaOS.
This commit is contained in:
2026-02-13 23:09:45 -06:00
parent 8f2f04951f
commit 23b527d3f5
27 changed files with 1517 additions and 19 deletions

208
build-and-push.sh Executable file
View File

@@ -0,0 +1,208 @@
#!/bin/bash
# Script interactivo para crear imagen Docker y subirla al registry
# Uso: ./build-and-push.sh
set -e
# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuración por defecto
REGISTRY_URL="10.10.4.3:5000"
IMAGE_NAME="condominio_ibiza"
DOCKERFILE_PATH="docker/Dockerfile"
PROJECT_DIR="/var/www/html/ibiza"
# Función para imprimir mensajes
print_info() {
echo -e "${BLUE} $1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
# Verificar que estamos en el directorio correcto
if [ ! -f "$DOCKERFILE_PATH" ]; then
print_error "No se encontró el Dockerfile en $DOCKERFILE_PATH"
print_info "Asegúrate de ejecutar este script desde el directorio raíz del proyecto"
exit 1
fi
# Mostrar banner
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║ 🐳 BUILD & PUSH - Condominio Ibiza Docker ║"
echo "╚════════════════════════════════════════════════════════╝"
echo ""
# Paso 1: Preguntar versión/tag
print_info "Paso 1: Versión de la imagen"
echo ""
read -p "Ingresa la versión/tag (ej: v2.1, latest, o deja en blanco para 'latest'): " VERSION
if [ -z "$VERSION" ]; then
VERSION="latest"
fi
print_info "Versión seleccionada: $VERSION"
echo ""
# Paso 2: Confirmar registry
print_info "Paso 2: Configuración del Registry"
echo ""
read -p "Registry URL [$REGISTRY_URL]: " INPUT_REGISTRY
REGISTRY_URL=${INPUT_REGISTRY:-$REGISTRY_URL}
print_info "Registry: $REGISTRY_URL"
echo ""
# Paso 3: Seleccionar modo de build
print_info "Paso 3: Modo de construcción"
echo ""
echo "Selecciona el modo de build:"
echo " 1) Con caché (más rápido, reutiliza capas anteriores)"
echo " 2) Sin caché (--no-cache, fuerza reconstrucción completa)"
echo ""
read -p "Opción [1]: " BUILD_OPTION
USE_CACHE="s"
if [ "$BUILD_OPTION" == "2" ]; then
USE_CACHE="n"
print_info "Modo seleccionado: Sin caché (build completo)"
else
print_info "Modo seleccionado: Con caché (build rápido)"
fi
echo ""
# Mostrar resumen antes de comenzar
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║ 📋 RESUMEN DE OPERACIÓN ║"
echo "╠════════════════════════════════════════════════════════╣"
echo "║ Imagen: $IMAGE_NAME:$VERSION"
echo "║ Registry: $REGISTRY_URL"
echo "║ Dockerfile: $DOCKERFILE_PATH"
if [ "$USE_CACHE" == "n" ]; then
echo "║ Modo: Sin caché (build completo)"
else
echo "║ Modo: Con caché (build rápido)"
fi
echo "╚════════════════════════════════════════════════════════╝"
echo ""
read -p "¿Deseas continuar? (s/n): " CONFIRM
if [[ $CONFIRM != "s" && $CONFIRM != "S" ]]; then
print_warning "Operación cancelada por el usuario"
exit 0
fi
echo ""
print_info "🚀 Iniciando proceso..."
echo ""
# Paso 4: Build de la imagen
print_info "Paso 4: Construyendo imagen Docker..."
if [ "$USE_CACHE" == "n" ]; then
echo " Comando: docker build --no-cache -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ."
echo ""
if docker build --no-cache -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then
print_success "Imagen construida exitosamente (sin caché): $IMAGE_NAME:$VERSION"
else
print_error "Error al construir la imagen"
exit 1
fi
else
echo " Comando: docker build -t $IMAGE_NAME:$VERSION -f $DOCKERFILE_PATH ."
echo ""
if docker build -t "$IMAGE_NAME:$VERSION" -f "$DOCKERFILE_PATH" .; then
print_success "Imagen construida exitosamente: $IMAGE_NAME:$VERSION"
else
print_error "Error al construir la imagen"
exit 1
fi
fi
echo ""
# Paso 5: Taggear para el registry
print_info "Paso 5: Taggeando imagen para registry..."
echo " Comando: docker tag $IMAGE_NAME:$VERSION $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo ""
if docker tag "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then
print_success "Imagen taggeada: $REGISTRY_URL/$IMAGE_NAME:$VERSION"
else
print_error "Error al taggear la imagen"
exit 1
fi
echo ""
# Paso 6: Subir al registry
read -p "¿Deseas subir la imagen al registry ahora? (s/n): " PUSH_CONFIRM
if [[ $PUSH_CONFIRM == "s" || $PUSH_CONFIRM == "S" ]]; then
print_info "Paso 6: Subiendo imagen al registry..."
echo " Comando: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo ""
if docker push "$REGISTRY_URL/$IMAGE_NAME:$VERSION"; then
print_success "Imagen subida exitosamente al registry"
else
print_error "Error al subir la imagen al registry"
print_warning "Verifica que el registry esté accesible en $REGISTRY_URL"
print_info "Puedes intentar subir manualmente con: docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
exit 1
fi
else
print_warning "Imagen NO subida al registry"
print_info "Puedes subirla manualmente después con:"
echo " docker push $REGISTRY_URL/$IMAGE_NAME:$VERSION"
fi
echo ""
# Paso 7: Limpiar imágenes locales (opcional)
read -p "¿Deseas eliminar las imágenes locales para liberar espacio? (s/n): " CLEANUP_CONFIRM
if [[ $CLEANUP_CONFIRM == "s" || $CLEANUP_CONFIRM == "S" ]]; then
print_info "Limpiando imágenes locales..."
docker rmi "$IMAGE_NAME:$VERSION" "$REGISTRY_URL/$IMAGE_NAME:$VERSION" 2>/dev/null || true
print_success "Imágenes locales eliminadas"
fi
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║ ✅ PROCESO COMPLETADO ║"
echo "╠════════════════════════════════════════════════════════╣"
echo "║ Imagen: $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo "╚════════════════════════════════════════════════════════╝"
echo ""
print_info "Para usar esta imagen en ZimaOS/CasaOS:"
echo ""
echo "1. Actualiza tu archivo ibiza.yaml:"
echo " image: $REGISTRY_URL/$IMAGE_NAME:$VERSION"
echo ""
echo "2. Reinicia el contenedor en ZimaOS/CasaOS"
echo ""
echo "3. Verifica los logs:"
echo " docker logs condominio_ibiza"
echo ""
print_success "¡Listo!"
echo ""