This article documents the Tasks module of the WPResidence real estate CRM plugin: custom table, CRUD API, AJAX endpoints, overdue detection, and the daily notification cron.
Storage — wp_wpresidence_crm_tasks
19 columns, created in libs/db-setup.php. Like Deals, the schema keeps legacy and new column names side by side during the rename transition.
Dual Column Names
| Legacy | New |
|---|---|
| task_title | title |
| task_status | status |
| task_type | type |
| task_priority | priority |
Default task_status values: Pending / to_do. Default task_priority: Medium / medium.
Additional Columns
task_id, description, due_date, completed_at, contact_id, deal_id, entity_type, entity_id, assigned_to, user_id, created_at, updated_at.
Indexes: user_id, task_status, contact_id, deal_id, status, due_date.
CRUD API — libs/task-crud.php
| Function | Purpose |
|---|---|
| wpestate_crm_insert_task($data) | Insert; fires wpestate_crm_after_insert_task |
| wpestate_crm_get_task($id) | Fetch one |
| wpestate_crm_get_tasks($args) | Filters: user_id, assigned_to, contact_id, deal_id, task_status, task_type, task_priority, due range, search |
| wpestate_crm_update_task($id, $data) | Update; triggers wpestate_crm_after_complete_task when status becomes Done |
| wpestate_crm_delete_task($id) | Delete |
| wpestate_crm_bulk_delete_tasks($ids) | Bulk delete |
AJAX Endpoints
| Action | Nonce |
|---|---|
| wpestate_crm_save_task | wpestate_crm_save_task |
| wpestate_crm_delete_task | wpestate_crm_delete_task |
| wpestate_crm_bulk_delete_tasks | wpestate_crm_bulk_delete_tasks |
| wpestate_crm_bulk_update_tasks | wpestate_crm_bulk_update_tasks |
Templates
- page-templates/wpestate-crm-dashboard_tasks.php — list with 7 filters.
- templates/crm_add_task.php — add/edit form.
- templates/dashboard_task_unit.php — row partial.
Default Picklists
- crm_task_statuses — To Do, In Progress, Done
- crm_task_types — Call, Email, Meeting, Showing, Follow Up, Paperwork, Other
- crm_task_priorities — Low, Medium, High, Urgent
Overdue Detection
A task is overdue when due_date < CURDATE() AND task_status NOT IN (‘Done’, ‘Completed’, ‘Cancelled’). The helper wpestate_crm_stats_tasks_overdue() in libs/stats-functions.php returns the count.
Daily Notification Cron
Cron event wpestate_crm_daily_notifications (scheduled at plugin activation) runs wpestate_crm_daily_task_notifications() in libs/notifications.php. The function:
- Queries overdue tasks grouped by user_id.
- Queries tasks due today, same grouping.
- Sends one task_overdue email per agent, templated with placeholders.
- Sends one task_due_today email per agent.
- Both templates are editable in Theme Options → Email Management → CRM Emails (legacy keys) or CRM Settings.
Hooks
- wpestate_crm_after_insert_task — fires after insert.
- wpestate_crm_after_complete_task — fires when status transitions to Done; webhooks consume it as task.completed.
Permissions and Scope
wpestate_crm_user_can(‘tasks’, $action) enforces role-level access. Non-admin queries filter by user_id or assigned_to. The list page also respects wpestate_crm_get_ownership_where().