diff --git a/scripts_sql/README_INVENTORY_FIX.md b/scripts_sql/README_INVENTORY_FIX.md new file mode 100644 index 0000000..53af381 --- /dev/null +++ b/scripts_sql/README_INVENTORY_FIX.md @@ -0,0 +1,96 @@ +# ๐Ÿ†˜ Instructivo: Fix de Inventario + Rollback de Emergencia + +## Archivos relacionados + +| Archivo | Proposito | +|---------|-----------| +| `fix_inventory_flow_complete.sql` | Aplica el fix completo de flujo de inventario | +| `rollback_inventory_flow_complete.sql` | Revierte el fix completo (restaura funciones originales) | +| `emergency_rollback_inventory.sh` | Script bash interactivo para ejecutar el rollback facilmente | + +--- + +## โš ๏ธ Antes de aplicar el fix + +1. **Hacer backup de la base de datos:** + ```bash + pg_dump -U postgres -d hotel_hacienda > backup_antes_fix_inventario.sql + ``` + +2. **Asegurarse de que nadie este usando el sistema** (idealmente en horario de bajo trafico). + +--- + +## ๐Ÿš€ Aplicar el fix + +### Opcion 1: Con psql +```bash +cd /ruta/al/proyecto +psql -U postgres -d hotel_hacienda -f scripts_sql/fix_inventory_flow_complete.sql +``` + +### Opcion 2: Desde dentro de psql +```bash +psql -U postgres -d hotel_hacienda +``` +```sql +\i scripts_sql/fix_inventory_flow_complete.sql +``` + +--- + +## โœ… Validar despues del fix + +1. Crear un expense con productos +2. Aprobarlo +3. Ir a **Purchase Entries** y registrar la recepcion fisica +4. Verificar que el stock subio correctamente +5. Ir a **Payments** y pagar el expense +6. Verificar que el stock **NO** cambio +7. Rechazar el pago (cancelar el expense) +8. Verificar que el stock bajo correctamente + +--- + +## ๐Ÿ†˜ Revertir el cambio (Rollback) + +### Opcion 1: Script interactivo de emergencia (recomendado) +```bash +cd /ruta/al/proyecto +./scripts_sql/emergency_rollback_inventory.sh +``` +El script pedira confirmacion escribiendo `SI`. + +### Opcion 2: Con psql manualmente +```bash +cd /ruta/al/proyecto +psql -U postgres -d hotel_hacienda -f scripts_sql/rollback_inventory_flow_complete.sql +``` + +### Opcion 3: Desde dentro de psql +```bash +psql -U postgres -d hotel_hacienda +``` +```sql +\i scripts_sql/rollback_inventory_flow_complete.sql +``` + +--- + +## ๐Ÿ“‹ Que hace el rollback exactamente + +Restaura estas funciones a su estado anterior al fix: + +| Funcion | Comportamiento despues del rollback | +|---------|-------------------------------------| +| `setpaymentstatusv2(status = 1)` | Vuelve a sumar stock al pagar | +| `setpaymentstatusv2(status = 3)` | No revierte stock al rechazar | +| `newexpensev2` | Vuelve a crear movimientos de stock al crear expense | +| `updateexpensev4` | Vuelve a crear/actualizar movimientos al editar expense | +| `purchaseentry` | Version original sin actualizar `purchase_detail.id_stock_mov` | + +--- + +## โš ๏ธ Nota importante + +El rollback **NO elimina** el tipo de movimiento `Cancellation` que se creo en `movement_type`, ni borra los movimientos de stock generados con ese tipo. Si ya se usaron esos movimientos, quedaran en la base de datos. Esto no afecta el funcionamiento del sistema anterior. diff --git a/scripts_sql/emergency_rollback_inventory.sh b/scripts_sql/emergency_rollback_inventory.sh new file mode 100755 index 0000000..a864e2f --- /dev/null +++ b/scripts_sql/emergency_rollback_inventory.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# ============================================================ +# EMERGENCY ROLLBACK: Flujo de inventario +# ============================================================ +# Uso: ./emergency_rollback_inventory.sh +# +# Este script revierte los cambios aplicados por: +# fix_inventory_flow_complete.sql +# +# Restaura las funciones originales: +# - setpaymentstatusv2 +# - newexpensev2 +# - updateexpensev4 +# - purchaseentry +# ============================================================ + +set -e + +# Colores +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Configuracion (modificar segun tu entorno) +DB_NAME="hotel_hacienda" +DB_USER="postgres" +ROLLBACK_FILE="$(dirname "$0")/rollback_inventory_flow_complete.sql" + +echo -e "${YELLOW}============================================================${NC}" +echo -e "${YELLOW} EMERGENCY ROLLBACK - Flujo de Inventario${NC}" +echo -e "${YELLOW}============================================================${NC}" +echo "" +echo "Base de datos: $DB_NAME" +echo "Usuario: $DB_USER" +echo "Archivo: $ROLLBACK_FILE" +echo "" + +if [ ! -f "$ROLLBACK_FILE" ]; then + echo -e "${RED}ERROR: No se encontro el archivo de rollback:${NC}" + echo "$ROLLBACK_FILE" + exit 1 +fi + +echo -e "${RED}ADVERTENCIA:${NC} Este rollback restaura el comportamiento anterior." +echo "Esto significa que al pagar un expense, el stock volvera a sumarse." +echo "" +read -p "ยฟEstas seguro de que quieres continuar? (escribe SI para confirmar): " CONFIRM + +if [ "$CONFIRM" != "SI" ]; then + echo "Rollback cancelado." + exit 0 +fi + +echo "" +echo "Ejecutando rollback..." + +if psql -U "$DB_USER" -d "$DB_NAME" -f "$ROLLBACK_FILE"; then + echo "" + echo -e "${GREEN}============================================================${NC}" + echo -e "${GREEN} Rollback ejecutado correctamente.${NC}" + echo -e "${GREEN}============================================================${NC}" +else + echo "" + echo -e "${RED}============================================================${NC}" + echo -e "${RED} ERROR al ejecutar el rollback.${NC}" + echo -e "${RED}============================================================${NC}" + exit 1 +fi