Complete bedrijfsvoering, volledig geïntegreerd
ERPNext is het ERP-systeem dat alle business processen verbindt: projectmanagement, CRM, facturatie, HR en meer. Als centrale bron van bedrijfsdata voedt het de dashboards en rapportages.
Development uren synchroniseren naar projecten:
Reageer op ERPNext tasks vanuit Mattermost:
/reply TASK-2025-00006 Milestone bereikt, klaar voor review
Real-time business metrics in dashboards:
# Token-based authentication
curl -H "Authorization: token api_key:api_secret" \
https://erpnext.example.com/api/resource/Project
# List Projects
GET /api/resource/Project?filters=[["status","=","Open"]]
# Get specific project
GET /api/resource/Project/PROJ-0001
# Create Task
POST /api/resource/Task
{
"project": "PROJ-0001",
"subject": "Implement feature X",
"status": "Open",
"priority": "Medium",
"exp_start_date": "2024-12-15",
"exp_end_date": "2024-12-20"
}
# Update Task
PUT /api/resource/Task/TASK-2025-00001
{
"status": "Completed",
"completed_on": "2024-12-14"
}
# Create Timesheet
POST /api/resource/Timesheet
{
"employee": "HR-EMP-00001",
"time_logs": [{
"project": "PROJ-0001",
"task": "TASK-2025-00001",
"hours": 4,
"from_time": "2024-12-14 09:00:00",
"to_time": "2024-12-14 13:00:00"
}]
}
# Sales Pipeline
GET /api/resource/Opportunity?filters=[["status","=","Open"]]&fields=["name","opportunity_amount","sales_stage"]
| DocType | Beschrijving |
|---|---|
| Project | Projecten met milestones |
| Task | Taken binnen projecten |
| Timesheet | Urenregistratie |
| Customer | Klantgegevens |
| Opportunity | Sales kansen |
| Quotation | Offertes |
| Sales Order | Verkooporders |
| Sales Invoice | Facturen |
| Employee | Medewerkers |
| Veld | Type | Gebruik |
|---|---|---|
| redmine_project_id | Int | Link naar Redmine |
| client_contact | Link | Primaire klantcontact |
| billing_type | Select | Fixed/T&M/Retainer |
| health_status | Select | Green/Yellow/Red |
| Status | Trigger | Volgende | Notities |
|---|---|---|---|
| Open | Task created | Working | Nieuw in backlog |
| Working | Assigned | Pending Review | Actieve ontwikkeling |
| Pending Review | Work complete | Completed of Working | Review fase |
| Completed | Approved | - | Afgerond |
| Cancelled | Scope change | - | Geannuleerd |
-- Revenue by month
SELECT
DATE_FORMAT(posting_date, '%Y-%m') as month,
SUM(grand_total) as revenue,
COUNT(*) as invoice_count
FROM `tabSales Invoice`
WHERE docstatus = 1
AND posting_date >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
GROUP BY DATE_FORMAT(posting_date, '%Y-%m')
ORDER BY month;
-- Pipeline by stage
SELECT
sales_stage,
COUNT(*) as opportunities,
SUM(opportunity_amount) as value,
AVG(probability) as avg_probability
FROM tabOpportunity
WHERE status = 'Open'
GROUP BY sales_stage
ORDER BY FIELD(sales_stage,
'Prospecting', 'Qualification', 'Needs Analysis',
'Value Proposition', 'Proposal/Price Quote',
'Negotiation/Review', 'Closed Won');
-- Project utilization
SELECT
p.name as project,
p.expected_start_date,
p.expected_end_date,
SUM(tl.hours) as actual_hours,
p.estimated_costing as budget_hours,
ROUND(100 * SUM(tl.hours) / NULLIF(p.estimated_costing, 0), 1) as utilization_pct
FROM tabProject p
LEFT JOIN tabTimesheet ts ON ts.docstatus = 1
LEFT JOIN `tabTimesheet Detail` tl ON tl.parent = ts.name AND tl.project = p.name
WHERE p.status = 'Open'
GROUP BY p.name
ORDER BY utilization_pct DESC;
-- Employee productivity
SELECT
e.employee_name,
SUM(tl.hours) as total_hours,
SUM(tl.billing_hours) as billable_hours,
ROUND(100 * SUM(tl.billing_hours) / NULLIF(SUM(tl.hours), 0), 1) as billable_pct
FROM tabEmployee e
JOIN tabTimesheet ts ON ts.employee = e.name AND ts.docstatus = 1
JOIN `tabTimesheet Detail` tl ON tl.parent = ts.name
WHERE ts.start_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY e.name
ORDER BY billable_pct DESC;
Regel: Dagelijks uren invoeren voor 18:00
Voordelen:
- Accurate project tracking
- Realtime resource planning
- Correcte facturatie
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| API 403 | Permissions | Check user roles |
| Slow reports | Large dataset | Use report builder filters |
| Missing data | Docstatus | Check if submitted (docstatus=1) |
# Frappe logs
docker logs asd-erpnext-backend
# Worker logs
docker logs asd-erpnext-worker
# Scheduler
docker exec asd-erpnext-backend cat /home/frappe/frappe-bench/logs/scheduler.log
# Enable developer mode for debugging
bench set-config developer_mode 1
# Check error logs
bench show-pending-jobs