Skip to main content

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