# MBInventario

MBInventario es una aplicación empresarial para administrar inventario, productos, movimientos, traslados, compras, ventas, catálogos y procesos operativos relacionados.

El sistema es un monolito legacy construido con Symfony 2.7, Doctrine ORM y Twig. El repositorio también incluye pruebas unitarias con PHPUnit y pruebas de extremo a extremo con Playwright.

> [!IMPORTANT]
> El proyecto no es compatible con PHP 8. Para desarrollo y pruebas se recomienda PHP 7.1; Composer resuelve las dependencias con una plataforma PHP 5.6.40 definida en `composer.json`.

## Tecnologías principales

| Componente | Tecnología |
| --- | --- |
| Backend | PHP, Symfony 2.7 y Doctrine ORM |
| Vistas | Twig 1.x |
| Base de datos | MySQL |
| Pruebas PHP | PHPUnit 5.7 |
| Pruebas E2E | Playwright y TypeScript |
| Dependencias | Composer y npm |
| Servidor web | Apache con `mod_rewrite` |

## Requisitos

- PHP 7.1 para el ambiente de desarrollo recomendado.
- Composer compatible con la versión de PHP utilizada.
- Apache con `mod_rewrite` habilitado.
- Acceso a una base de datos MySQL compatible.
- Node.js 18 o superior para ejecutar las pruebas E2E.
- Google Chrome para el proyecto Playwright configurado en el repositorio.
- Git.
- Git Bash o WSL para ejecutar los scripts `.sh` desde Windows.

La guía detallada para Windows está disponible en [Configuración del entorno en Windows](docs/setup/SETUP_WINDOWS.md).

## Instalación local

### 1. Clonar el repositorio

```bash
git clone https://github.com/macrobasegt/mbinv.git
cd mbinv
```

### 2. Crear la configuración local

En Linux o macOS:

```bash
cp app/config/parameters.yml.dist app/config/parameters.yml
```

En PowerShell:

```powershell
Copy-Item app/config/parameters.yml.dist app/config/parameters.yml
```

Edita `app/config/parameters.yml` con las credenciales y parámetros correspondientes a tu ambiente.

> No agregues `app/config/parameters.yml` al repositorio. El archivo contiene configuración local y puede incluir información sensible.

### 3. Instalar las dependencias PHP

Ejecuta Composer usando la versión legacy de PHP configurada para el proyecto:

```bash
composer install
```

### 4. Preparar Symfony

```bash
php app/console cache:clear --env=dev
php app/console assets:install --symlink web
```

El document root de Apache debe apuntar a la carpeta `web/`. La URL utilizada por defecto en las pruebas es:

```text
http://localhost/mbinv/web/
```

### 5. Instalar las dependencias E2E

Este paso es necesario únicamente para trabajar con Playwright:

```bash
npm ci
npx playwright install chrome
```

## Comandos frecuentes

### Symfony

```bash
# Limpiar caché de desarrollo
php app/console cache:clear --env=dev

# Limpiar caché de producción
php app/console cache:clear --env=prod

# Consultar los comandos disponibles
php app/console list
```

### Pruebas PHP

```bash
# Suite completa
php bin/phpunit

# Un archivo específico
php bin/phpunit ruta/al/Test.php

# Runner legacy con PHP 7.1 o Docker
bash scripts/testing/run-tests-legacy.sh
bash scripts/testing/run-tests-legacy.sh --docker
```

### Pruebas E2E

```bash
# Suite completa
npm test

# Smoke tests
npm run test:smoke

# Interfaz visual de Playwright
npm run test:ui

# Ejecución interactiva con variables locales
bash scripts/testing/test-e2e.sh
```

Playwright utiliza `http://localhost/mbinv/web/` de forma predeterminada. Para probar otra instalación:

```bash
BASE_URL="http://mi-servidor/mbinv/web/" npm test
```

Consulta [la guía de Playwright](docs/testing/PLAYWRIGHT_README.md) y [la guía general de pruebas](docs/testing/TESTING_GUIDE.md) para conocer variables de autenticación, depuración y reportes.

### Análisis estático

```bash
bash scripts/quality/mbphpstan
```

## Estructura del repositorio

```text
mbinv/
├── app/            Configuración, caché y vistas globales de Symfony
├── bin/            Ejecutables instalados por Composer
├── docs/           Guías, revisiones y documentación técnica
├── scripts/        Despliegue, mantenimiento, calidad y pruebas
├── src/            Bundles y código principal de la aplicación
├── tests/          Pruebas E2E, fixtures, helpers y tipos
├── tmp/            Archivos temporales conservados como referencia
├── tools/          Herramientas auxiliares del proyecto
├── var/            Logs y respaldos organizados
├── vendor/         Dependencias PHP generadas por Composer
└── web/            Document root, front controllers y recursos públicos
```

Los índices de [documentación](docs/README.md) y [scripts](scripts/README.md) explican la clasificación completa.

## Configuración y archivos generados

- `app/config/parameters.yml` contiene la configuración local y está ignorado por Git.
- `app/cache/` y `app/logs/` son directorios de ejecución de Symfony.
- `vendor/` y `node_modules/` se generan al instalar dependencias.
- `playwright-report/` y `test-results/` contienen resultados de pruebas E2E.
- `var/log/deployments/` contiene logs generados por scripts de despliegue.

## Solución rápida de problemas

### Symfony muestra errores después de actualizar

```bash
php app/console cache:clear --env=dev
php app/console cache:clear --env=prod
```

En Linux, verifica también que el usuario del servidor web pueda escribir en `app/cache/` y `app/logs/`.

### Composer falla por la versión de PHP

Confirma que Composer se esté ejecutando con PHP 7.1 o con el ambiente legacy definido para el proyecto. No ejecutes `composer update` con PHP 8.

### Playwright no encuentra la aplicación

Verifica que Apache esté iniciado y que la URL configurada en `BASE_URL` responda antes de ejecutar las pruebas.

## Documentación

- [Índice de documentación](docs/README.md)
- [Configuración en Windows](docs/setup/SETUP_WINDOWS.md)
- [Pruebas con Playwright](docs/testing/PLAYWRIGHT_README.md)
- [Guía general de pruebas](docs/testing/TESTING_GUIDE.md)
- [Scripts del proyecto](scripts/README.md)
- [Historial de cambios](changelog.md)

## Licencia

Software propietario. Su uso y distribución están sujetos a las políticas de MacroBase.
