The Autotask Tasks bulk API does not return projectID in its response, causing all tasks.project_id to be NULL. This fixes it by: - Adding project_phases as a synced entity (Autotask endpoint: /Phases) - Migration 059: project_phases table with project_id, phase_number, estimated_hours, start/due dates, parent_phase_id, is_scheduled - EntityType.PROJECT_PHASES added to all sync maps and dependency graph (depends on PROJECTS, runs before TASKS in sync order) - buildProjectPhasesFilter: Phases endpoint requires a filter (id > 0) - mapProjectPhase: maps Autotask field names to DB columns - Post-sync backfill in syncEntity: after each project_phases sync, UPDATE tasks SET project_id = pp.project_id FROM project_phases pp JOIN projects p WHERE tasks.phase_id = pp.id Only backfills where the project exists in our DB (FK constraint on tasks.project_id; archived projects are skipped gracefully) Result: 2,455 of 4,966 tasks now have project_id populated. Tasks belonging to archived/completed projects have phase_id resolvable via project_phases even when project_id remains NULL. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .windsurf/workflows | ||
| app | ||
| components | ||
| dev | ||
| docs | ||
| hooks | ||
| lib | ||
| migrations | ||
| public | ||
| scripts | ||
| tasks | ||
| .dockerignore | ||
| .gitignore | ||
| _clientMiddlewareManifest.json | ||
| ADDIGY_API_GUIDE.md | ||
| AUTOTASK_API_GUIDE.md | ||
| components.json | ||
| docker-compose.yml | ||
| DOCKER_README.md | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| favicon.0b3bf435.ico | ||
| FIX_TICKET_SYNC.md | ||
| get-config-text.js | ||
| LCI_FEATURE_DESIGN.md | ||
| mcp.json | ||
| middleware.ts | ||
| next-development.log | ||
| next-devtools-config.json | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| POSTGRES_SYNC_SETUP.md | ||
| PULSE_DATABASE_SKILL.md | ||
| README.md | ||
| routes.d.ts | ||
| test-config.js | ||
| test-time-entry.js | ||
| tsconfig.json | ||
Autotask API Integration Dashboard
A modern Next.js application for interacting with the Autotask PSA REST API, built with React, TypeScript, shadcn/ui, and Tailwind CSS.
Features
- Dashboard Overview - View tickets, tasks, and company information
- Ticket Management - List, filter, and manage support tickets
- Task Tracking - Monitor and update project tasks
- Company Selector - Filter data by company
- Resource Management - Filter by assigned resources
- Modern UI - Beautiful interface built with shadcn/ui components
- Dark Mode Support - Automatic dark/light theme
- Real-time Updates - Fetch latest data from Autotask API
- Secure Authentication - API credentials stored in environment variables
Tech Stack
- Framework: Next.js 15 with App Router
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: shadcn/ui
- Icons: Lucide React
- Date Handling: date-fns
- API Integration: Native fetch with custom client
Prerequisites
Before you begin, ensure you have:
- Node.js 18+ installed
- Autotask API credentials:
- API Username (format:
apiuser@YOURDOMAIN.COM) - API Secret/Password
- API Integration Code
- API Base URL (e.g.,
https://webservices1.autotask.net/atservicesrest/v1.0)
- API Username (format:
Installation
- Clone the repository and navigate to the app directory:
cd /Users/lorentz/projects/PSA-Utils/autotask-app
- Install dependencies:
npm install
- Create a
.env.localfile in the root directory:
# Autotask API Configuration
AUTOTASK_API_URL=https://webservices1.autotask.net/atservicesrest/v1.0
AUTOTASK_USERNAME=your-api-username@yourdomain.com
AUTOTASK_SECRET=your-api-password
AUTOTASK_API_INTEGRATION_CODE=your-tracking-code
- Run the development server:
npm run dev
- Open http://localhost:3000 in your browser
Project Structure
autotask-app/
├── app/
│ ├── api/ # API route handlers
│ │ ├── tickets/ # Ticket endpoints
│ │ ├── tasks/ # Task endpoints
│ │ ├── companies/ # Company endpoints
│ │ ├── resources/ # Resource endpoints
│ │ └── picklists/ # Picklist endpoints
│ └── page.tsx # Main dashboard page
├── components/
│ ├── tickets/ # Ticket-related components
│ ├── tasks/ # Task-related components
│ ├── companies/ # Company-related components
│ └── ui/ # shadcn/ui components
├── lib/
│ ├── services/ # API client and services
│ │ ├── autotask-client.ts
│ │ └── autotask-factory.ts
│ ├── types/ # TypeScript type definitions
│ │ └── autotask.ts
│ └── hooks/ # Custom React hooks
│ └── use-api.ts
└── public/ # Static assets
API Endpoints
The application provides the following API routes:
GET /api/tickets- Fetch tickets (with optional filters)POST /api/tickets- Create a new ticketGET /api/tasks- Fetch tasks (with optional filters)POST /api/tasks- Create a new taskGET /api/companies- Fetch all active companiesGET /api/resources- Fetch resources/usersGET /api/picklists- Fetch picklist values for dropdowns
Key Features Implementation
Rate Limiting
The API client includes built-in rate limiting (10 requests/second) to comply with Autotask API limits.
Error Handling
Comprehensive error handling with user-friendly error messages and retry capabilities.
Type Safety
Full TypeScript support with detailed type definitions for all Autotask entities.
Responsive Design
Mobile-friendly interface that works on all device sizes.
Development
Adding New Features
- New API Endpoints: Add route handlers in
app/api/ - New Components: Create components in
components/ - New Entity Types: Update types in
lib/types/autotask.ts - New API Methods: Extend
lib/services/autotask-client.ts
Testing
Run the development server and test with your Autotask sandbox environment:
npm run dev
Building for Production
npm run build
npm start
Security Considerations
- Never commit
.env.localor any file containing API credentials - Use environment variables for all sensitive configuration
- Implement proper authentication for production deployment
- Consider adding user authentication layer
- Use HTTPS in production
Common Issues & Solutions
API Connection Issues
- Verify your API credentials are correct
- Check the API URL matches your Autotask zone
- Ensure your API user has appropriate permissions
Rate Limiting
- The client automatically handles rate limiting
- If you encounter 429 errors, the client will retry
CORS Issues
- API routes act as a proxy to avoid CORS issues
- All Autotask API calls go through Next.js API routes
Future Enhancements
- Add Redis caching for improved performance
- Implement real-time updates with WebSockets
- Add attachment upload functionality
- Create ticket/task editing forms
- Add user authentication and session management
- Implement advanced search and filtering
- Add data export functionality
- Create dashboard widgets and analytics
Contributing
Feel free to submit issues and enhancement requests!
License
This project is for internal use. Please refer to your organization's policies.
Support
For issues related to:
- Autotask API: Consult the Autotask REST API Documentation
- Application Issues: Create an issue in this repository
Built with ❤️ using Next.js, React, and shadcn/ui