Skip to content

Activities — Developer Guide

Mirror of the Companies developer guide / Contacts developer guide. Prefer copying those patterns over inventing new ones.

Backend layout

PiecePath
Modelsapp/Models/Activity.php, ActivityNote, ActivityActivity
EnumsActivityTypeEnum, ActivityActivityTypeEnum
Serviceapp/Services/Tenant/ActivityService.php (+ ScopesToAssignee)
Controllerapp/Http/Controllers/Tenant/Api/V1/ActivityController.php
Requestsapp/Http/Requests/Tenant/Api/V1/Activity/*
Resourcesapp/Http/Resources/Tenant/Api/V1/Activity/*
Policyapp/Policies/ActivityPolicy.php
Eventsapp/Events/Activity*.php
Subscriberapp/Listeners/ActivityEventSubscriber.php (audit + assignment notification)
Notificationsapp/Notifications/Tenant/Activity/ActivityAssignedNotification.php
Link rulesLinkableContact, LinkableLead, LinkableCompanyForActivity, EligibleActivityAssignee
Teststests/Feature/Tenant/Activity/ActivityTest.php

App\Models\Activity is the CRM engagement record. It is distinct from Spatie activity_log and from per-module timeline models (ContactActivity, LeadActivity, etc.).

Domain notes

  • Assignee scoping via ScopesToAssignee with activities.assign.
  • activities.force.delete is not granted to any default role — owner/superadmin only.
  • At least one of contact_id / company_id / lead_id is required; each FK is validated for module entitlement + assignee scope on the related record.
  • On create/complete (and when related FKs change on update), mirrors crm_activity_logged / crm_activity_completed onto related Contact/Company/Lead timelines when those modules are entitled.
  • Soft delete; completion via POST .../complete (can:activities.complete). Completion is not writable through generic update.

Permissions

activities.view | create | update | delete | restore | force.delete | assign | complete

Staff defaults include activities.view + activities.complete (same pattern as Tasks).

Routes use module:activities then can:activities.* / policies.

API (tenant)

Base: /api/tenant/v1 — full reference tenant-v1-activities.md.

Frontend

PiecePath
Pagesrc/pages/activities/activities-page.tsx
Formactivity-form-dialog.tsx
Detailactivity-detail-sheet.tsx
ServiceactivityService in src/api/services.ts
Navpermission: activities.view, module: 'activities' (after Meetings)
DashboardRecentCrmActivitiesWidget (recent_activities) + create_activity quick action

Tests

bash
php artisan test --compact tests/Feature/Tenant/Activity/ActivityTest.php
npm run typecheck && npm run lint && npm run build
npm run test:e2e:activities

Logging

  • Spatie LogsActivity on Activity (log name activities)
  • Domain activity_activities timeline
  • PlatformAuditService via ActivityEventSubscriber

Official documentation for the EloSync SaaS Platform.