Helpdesk Module
Ticket management with Field Service integration for after-service (A/S) workflows.
Module Overview
| Module |
Technical Name |
Version |
Description |
| Helpdesk |
helpdesk |
1.4 |
Base ticket management, SLA, ratings |
| Website Helpdesk Form |
website_helpdesk_form |
15.0.1.0.0 |
Public website form for ticket submission |
| Helpdesk FSM |
jdx_helpdesk_fsm |
15.0.1.0.0 |
Create A/S orders from tickets |
Helpdesk Base Module
| Field |
Value |
| Technical Name |
helpdesk |
| Version |
1.4 |
| Category |
Services/Helpdesk |
| Dependencies |
base_setup, mail, utm, rating, web_tour, web_cohort, resource, portal, digest |
Features
- Ticket Management - Process tickets through stages
- Priority & Types - Categorize and prioritize tickets
- Team Assignment - Create teams with automatic assignment
- Mail Alias - Auto-create tickets from email
- SLA Tracking - Service level agreement deadlines
- Customer Ratings - Feedback collection
- Portal Access - Customer self-service
- Dashboard & Reports - Kanban, pivot analysis
Ticket Stages
Default stages:
| Stage |
Type |
Description |
| New |
Open |
Newly created ticket |
| In Progress |
Open |
Being worked on |
| On Hold |
Open |
Waiting for customer |
| Solved |
Closed |
Resolution provided |
| Cancelled |
Closed |
Ticket cancelled |
| Field |
Value |
| Technical Name |
website_helpdesk_form |
| Version |
15.0.1.0.0 |
| Category |
Website |
| Dependencies |
helpdesk, website |
Features
- Public Website Form - Submit tickets without login
- Full Address Capture - Street, city, state, ZIP fields
- Partner Integration - Auto-creates/updates
res.partner with address
- File Attachments - Upload images, PDFs, videos
- reCAPTCHA v3 - Invisible spam protection
- Rate Limiting - Prevent abuse (IP-based)
- Ticket Type Selection - Dropdown from
helpdesk.ticket.type
| Field |
Required |
Odoo Field |
| Name |
Yes |
partner_name / res.partner.name |
| Email |
Yes |
partner_email / res.partner.email |
| Phone |
Yes |
partner_phone / res.partner.phone |
| Subject |
Yes |
name (ticket subject) |
| Issue Type |
No |
ticket_type_id |
| Description |
Yes |
description |
| Street Address |
Yes |
res.partner.street |
| Apt/Suite/Unit |
No |
res.partner.street2 |
| City |
Yes |
res.partner.city |
| State |
Yes |
res.partner.state_id |
| ZIP Code |
Yes |
res.partner.zip |
| Attachments |
No |
ir.attachment linked to ticket |
Processing Flow
flowchart TD
A[Customer submits form] --> B[Validate reCAPTCHA]
B --> C[Validate required fields]
C --> D{Partner exists?}
D -->|Yes| E[Update partner address if missing]
D -->|No| F[Create new partner with address]
E --> G[Create helpdesk.ticket]
F --> G
G --> H[Link partner_id to ticket]
H --> I[Upload attachments to ir.attachment]
I --> J[Return ticket ID to customer]
Landing Page Integration
The landing page (/helpdesk) uses this module's patterns but submits via REST API:
- Form at
http://localhost:8001/helpdesk
- API at
POST /api/helpdesk
- Creates partner and ticket via Odoo REST API
- See Landing Page Forms API for details
Configuration
- Set
HELPDESK_TEAM_ID in landing page environment
- Configure ticket types in Helpdesk > Configuration > Ticket Types
- Set reCAPTCHA keys in environment variables
FSM Integration Module
| Field |
Value |
| Technical Name |
jdx_helpdesk_fsm |
| Version |
15.0.1.0.0 |
| Category |
Services/Helpdesk |
| Dependencies |
helpdesk, fieldservice, jdx_service_signature, sale |
Features
- Create A/S Order - Button on ticket to create FSM order
- Wizard - Search customer sale orders, set scheduling
- Attachment Copy - Ticket attachments copied to FSM order
- Smart Button - View linked FSM orders from ticket
- Auto-Resolution - Daily cron resolves tickets when FSM signed
- Completion Email - Auto-send completion report
A/S Workflow
flowchart TD
A[Customer Support Ticket] --> B[Create A/S Order Button]
B --> C[Wizard: Select Schedule/Worker]
C --> D[FSM Order Created]
D --> E[Ticket moves to 'In Progress']
E --> F[Technician completes FSM]
F --> G[Signature captured]
G --> H[Daily Cron]
H --> I[Ticket auto-resolved]
I --> J[Completion email sent]
Data Models
Helpdesk Ticket Extension (helpdesk.ticket)
Fields added by jdx_helpdesk_fsm:
| Field |
Type |
Description |
fsm_order_ids |
One2many |
Linked FSM orders |
fsm_order_count |
Integer |
Number of A/S orders |
has_signed_fsm_order |
Boolean |
Any linked FSM is signed |
is_stage_closed |
Boolean |
Related to stage.is_close |
partner_address |
Text (computed) |
Customer full address |
Create A/S Order Wizard
| Field |
Type |
Description |
ticket_id |
Many2one |
Source ticket |
partner_id |
Many2one |
Customer (from ticket) |
description |
Html |
A/S order description |
scheduled_date |
Datetime |
Optional scheduling |
fsm_team_id |
Many2one |
FSM team |
fsm_person_id |
Many2one |
Assigned worker |
sale_order_html |
Html |
Customer's sale orders |
Actions
Ticket Actions
| Action |
Description |
action_create_as_order |
Open wizard to create A/S order |
action_view_fsm_orders |
View linked FSM orders |
Wizard Actions
| Action |
Description |
action_create_as_order |
Create FSM order and link to ticket |
Automated Processing
Daily Cron: FSM Signature Sync
Runs daily to process completed A/S orders:
- Find tickets with signed FSM orders
- Move ticket to "Solved" stage
- Post chatter notification
- Send completion report email
# Cron: _cron_sync_fsm_signature_completion
# Finds: tickets with stage_id.is_close = False
# AND fsm_order_ids.x_signature_state = 'signed'
# Actions: Set stage to 'Solved', post message, send email
Configuration
Team Setup
Navigate to Helpdesk > Configuration > Teams:
- Create team with members
- Set email alias (optional)
- Configure assignment method
- Enable SLA policies
Stage Setup
Navigate to Helpdesk > Configuration > Stages:
| Stage |
Is Closed |
Description |
| New |
No |
Initial stage |
| In Progress |
No |
Work started |
| On Hold |
No |
Waiting |
| Solved |
Yes |
Resolution provided |
| Cancelled |
Yes |
Not resolved |
FSM Order Type
Ensure A/S order type exists:
# In Odoo shell
env['fsm.order.type'].search([('name', '=', 'A/S')])
# Or create if missing:
env['fsm.order.type'].create({'name': 'A/S'})
Usage
Creating A/S Order from Ticket
- Open helpdesk ticket
- Click Create A/S Order button (only on open stages)
- In wizard:
- Review customer info
- View related sale orders
- Edit description if needed
- Optionally set scheduled date and worker
- Click Create A/S Order
- Ticket moves to "In Progress"
- FSM order opens in new view
Viewing Linked A/S Orders
- Open ticket
- Click A/S Orders smart button
- View linked FSM orders
- If single order, opens form directly
Module Structure
helpdesk
helpdesk/
├── __manifest__.py
├── models/
│ └── helpdesk.py
├── views/
│ ├── helpdesk_views.xml
│ ├── helpdesk_team_views.xml
│ ├── helpdesk_portal_templates.xml
│ └── rating_views.xml
├── security/
│ ├── helpdesk_security.xml
│ └── ir.model.access.csv
├── data/
│ ├── helpdesk_data.xml
│ ├── mail_template_data.xml
│ └── ir_cron_data.xml
├── report/
│ ├── helpdesk_ticket_analysis_views.xml
│ └── helpdesk_sla_report_analysis_views.xml
├── wizard/
│ └── assign_ticket_wizard_views.xml
└── static/
└── src/
├── js/
├── scss/
└── xml/
jdx_helpdesk_fsm
jdx_helpdesk_fsm/
├── __manifest__.py
├── __init__.py
├── models/
│ ├── __init__.py
│ ├── helpdesk_ticket.py # Ticket extension
│ └── fsm_order.py # FSM order extension
├── wizard/
│ ├── __init__.py
│ └── create_as_order.py # Create A/S wizard
├── views/
│ ├── helpdesk_ticket_views.xml
│ └── fsm_order_views.xml
├── security/
│ └── ir.model.access.csv
└── data/
└── cron.xml # Daily sync cron
Installation
# Install helpdesk base
docker compose exec odoo odoo -i helpdesk --stop-after-init -d DATABASE_NAME
# Install FSM integration
docker compose exec odoo odoo -i jdx_helpdesk_fsm --stop-after-init -d DATABASE_NAME
# Or install all together
docker compose exec odoo odoo -i helpdesk,jdx_helpdesk_fsm --stop-after-init -d DATABASE_NAME
Troubleshooting
- Verify ticket is on open stage (not closed)
- Check
jdx_helpdesk_fsm module is installed
- Upgrade module:
-u jdx_helpdesk_fsm
Ticket Not Auto-Resolving
- Verify FSM order signature state is 'signed'
- Check ticket stage is not already closed
- Verify 'Solved' stage exists with
is_close=True
- Check cron job is enabled and running
No Sale Orders in Wizard
- Verify customer is linked to ticket
- Check sale orders exist for customer
- Verify search by email/phone is matching
Attachments Not Copying
- Check source ticket has attachments
- Verify
ir.attachment model access
- Check Odoo logs for errors