# Installation — Scadenzario ## 1. Database Run the schema script: ```bash mysql -u -p < public/userarea/scadenzario/sql/1_create_tables.sql ``` This creates 5 tables: | Table | Purpose | |---|---| | `scad_deadlines` | Main deadline records | | `scad_deadline_employee` | M2M assignment of individual employees | | `scad_deadline_attachments` | File attachments | | `scad_deadline_histories` | Audit log (created/updated/completed/...) | | `scad_deadline_notifications` | Sent-notification log (deduplication) | Departments are stored as a comma-separated string in `scad_deadlines.departments` (matching `employees.department` values). No separate `departments` table. ## 2. Filesystem permissions The `attachments/` folder must be writable by the web server: ```bash chmod 755 public/userarea/scadenzario/attachments chown www-data:www-data public/userarea/scadenzario/attachments ``` The included `.htaccess` denies direct web access. Files are served only through the auth-protected `ajax/download_attachment.php` endpoint. ## 3. SMTP configuration Email notifications use the project-wide SMTP settings in `.env`: ```env MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=465 MAIL_USERNAME=your_user MAIL_PASSWORD=your_password MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=scadenzario@your-domain.com MAIL_FROM_NAME="Scadenzario" APP_URL=https://your-domain.com ``` ## 4. Cron schedule Add to the system crontab (run as the web user): ```cron 0 7 * * * php /var/www/html/public/userarea/scadenzario/cron/send_notifications.php >> /var/log/scadenzario.log 2>&1 ``` This sends notifications daily at 07:00 for: - **Approaching** — `due_date <= today + notification_days` (per-deadline lead time) - **Overdue** — `due_date < today` Completed deadlines are skipped. Recipients without an `auth_user_id` are silently skipped. ## 5. Linking employees to auth users For an employee to receive email notifications: 1. The corresponding `auth_users` row must exist with a valid `email`. 2. Set `employees.auth_user_id` to that user ID: ```sql UPDATE employees SET auth_user_id = WHERE id = ; ``` Employees without `auth_user_id` are silently skipped by the cron.