Jobs/Cron (qué existe y cómo correrlo local)
Objetivo
Entender cómo se ejecutan tareas automáticas en este proyecto, cómo se conectan a la BD y cómo probarlas en entorno local.
1) ¿Dónde viven los cron jobs?
En la carpeta:
- cron/
Actualmente existe:
- cron_auto_desembolso.php
2) Cómo funciona cron_auto_desembolso.php (resumen)
Este cron:
- Carga dependencias ( vendor/autoload.php )
- Carga helpers y .env
- Conecta a DB manualmente
- Ejecuta lógica de desembolso automático sobre proyectos “retenidos”/en estado específico
Referencia:
- cron_auto_desembolso.php
Puntos clave del flujo:
- Inicializa DB con DB_* del .env :
- cron_auto_desembolso.php
- Consulta proyectos candidatos a proceso:
- Llama ProjectsController->approved_desembolso(1)
- cron_auto_desembolso.php
- Para cada proyecto:
- Actualiza timeline/status (12 → 15)
- Ejecuta actualización de approval
- Registra activity
3) Regla de negocio del cron (cómo decide qué proyectos procesa)
La selección real está en:
- ProjectsController::approved_desembolso
Resumen de condiciones:
- Busca proyectos con:
- projects.status_id = 12
- status.hold = 1
- timeline sin end (o end = '0000-00-00 00:00:00' )
- Calcula días hábiles desde status_timeline.start
- Solo procesa si days_pro > vali_days
- vali_days viene de settings ( days_approval_detenido )
4) Cómo correrlo en local (Windows)
Desde la carpeta del proyecto:
cd c:\xampp\htdocs\moneytechcrm
php cron\cron_auto_desembolso.php
Requisitos para que funcione:
- PHP accesible en PATH o ejecutar el de XAMPP:
- c:\xampp\php\php.exe cron\cron_auto_desembolso.php
- .env configurado correctamente (DB_* y timezone)
- BD importada y con datos consistentes
5) Verificación y debugging
- El cron registra actividades en BD (tabla activities ) vía helper_register_activity(...) .
- Para logs, el proyecto tiene helper_log() escribiendo en log/app.log :
- helper_log
Checklist si “no hace nada”:
- days_approval_detenido (settings) está configurado para la compañía
- Hay proyectos en status_id=12 con hold=1
- El timeline tiene start válido y end vacío