Statistics API
Content
Statistics:
- [GET] cost benefit ratio
- [GET] user worked minutes
- [GET] user costs
- [GET] cashflow costs
- [GET] cashflow revenues
- [GET] user estimated and reported time
- [GET] user busyness
Statistics
Cost benefit ratio
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | -- |
| Filters | from: date, to: date |
| Embedded | - |
GET /api/v0/statistics/cost-benefit-ratio HTTP/1.1
Content-Type: application/json
{
"from": "2023-05-01",
"to": "2023-05-31"
}
Response
200 OK
GET /api/v0/statistics/cost-benefit-ratio HTTP/1.1
Content-Type: application/json
{
"costs": 1018797.72,
"benefits": 0,
"profit": -1018797.72,
"costs_percentage": 100,
"benefits_percentage": 0,
"profit_percentage": -100
}
User worked minutes
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | - |
| Filters | from:date, to:date, is_active:bool |
| Embedded | - |
GET /api/v0/statistics/users/worked-minutes HTTP/1.1
Content-Type: application/json
Response
200 OK
GET /api/v0/statistics/users/worked-minutes HTTP/1.1
Content-Type: application/json
{
"items": {
"2": 0,
"3": 0,
"4": 19499,
"5": 0,
"6": 0,
"7": 0,
"8": 0,
"9": 0,
"10": 42202,
"11": 33772,
"12": 0,
"13": 35609,
"14": 0,
"15": 14710,
"16": 20575,
"17": 0,
"18": 50,
"19": 41425,
"20": 41669,
"21": 0,
"22": 0,
"23": 0,
"24": 11764,
"25": 0,
"26": 5970,
"27": 0,
"28": 0,
"29": 13390,
"30": 0,
"31": 45076,
"32": 0,
"33": 240,
"34": 0,
"35": 27141,
"36": 25364,
"37": 1165,
"38": 0,
"39": 8188,
"1": 2780
}
}
User costs
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | - |
| Filters | from:date, to:date, is_active:bool |
| Embedded | - |
GET /api/v0/statistics/users/costs HTTP/1.1
Content-Type: application/json
Response
200 OK
GET /api/v0/statistics/users/costs HTTP/1.1
Content-Type: application/json
{
"items": [
{
"id": 1,
"costs": 0,
"worked_minutes": 1355,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 2,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 3,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 4,
"costs": 0,
"worked_minutes": 2538,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 5,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 6,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 7,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 8,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 9,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 10,
"costs": 0,
"worked_minutes": 11132,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 11,
"costs": 15966.66666655,
"worked_minutes": 9580,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 12,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 13,
"costs": 0,
"worked_minutes": 8577,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 14,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 15,
"costs": 0,
"worked_minutes": 4035,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 16,
"costs": 0,
"worked_minutes": 5764,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 17,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 18,
"costs": 0,
"worked_minutes": 50,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 19,
"costs": 0,
"worked_minutes": 10387,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 20,
"costs": 0,
"worked_minutes": 9650,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 21,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 22,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 23,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 24,
"costs": 0,
"worked_minutes": 2631,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 25,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 26,
"costs": 0,
"worked_minutes": 495,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 27,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 28,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 29,
"costs": 0,
"worked_minutes": 1430,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 30,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 31,
"costs": 0,
"worked_minutes": 10810,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 32,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 33,
"costs": 0,
"worked_minutes": 240,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 34,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 35,
"costs": 0,
"worked_minutes": 2433,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 36,
"costs": 0,
"worked_minutes": 6289,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 37,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 38,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
},
{
"id": 39,
"costs": 0,
"worked_minutes": 0,
"vacation_days_left": 20,
"vacation_days_used": 1,
"remaining_not_reported_minutes": 150
}
]
}
Cashflow costs
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | -- |
| Filters | from: date, to: date |
| Embedded | - |
GET /api/v0/statistics/cashflow/costs HTTP/1.1
Content-Type: application/json
{
"from": "2023-05-01",
"to": "2023-05-31"
}
Response
200 OK
GET /api/v0/statistics/cashflow/costs HTTP/1.1
Content-Type: application/json
{
"user_costs": [
{
"id": 1,
"costs": 0,
"worked_minutes": 2780
},
{
"id": 2,
"costs": 0,
"worked_minutes": 0
},
{
"id": 3,
"costs": 0,
"worked_minutes": 0
},
{
"id": 4,
"costs": 0,
"worked_minutes": 19499
},
{
"id": 5,
"costs": 0,
"worked_minutes": 0
},
{
"id": 6,
"costs": 0,
"worked_minutes": 0
},
{
"id": 7,
"costs": 0,
"worked_minutes": 0
},
{
"id": 8,
"costs": 0,
"worked_minutes": 0
},
{
"id": 9,
"costs": 0,
"worked_minutes": 0
},
{
"id": 10,
"costs": 0,
"worked_minutes": 42202
},
{
"id": 11,
"costs": 112573.33333277,
"worked_minutes": 33772
},
{
"id": 12,
"costs": 0,
"worked_minutes": 0
},
{
"id": 13,
"costs": 0,
"worked_minutes": 35609
},
{
"id": 14,
"costs": 0,
"worked_minutes": 0
},
{
"id": 15,
"costs": 0,
"worked_minutes": 14710
},
{
"id": 16,
"costs": 0,
"worked_minutes": 20575
},
{
"id": 17,
"costs": 0,
"worked_minutes": 0
},
{
"id": 18,
"costs": 0,
"worked_minutes": 50
},
{
"id": 19,
"costs": 0,
"worked_minutes": 41425
},
{
"id": 20,
"costs": 0,
"worked_minutes": 41669
},
{
"id": 21,
"costs": 0,
"worked_minutes": 0
},
{
"id": 22,
"costs": 0,
"worked_minutes": 0
},
{
"id": 23,
"costs": 0,
"worked_minutes": 0
},
{
"id": 24,
"costs": 0,
"worked_minutes": 11764
},
{
"id": 25,
"costs": 0,
"worked_minutes": 0
},
{
"id": 26,
"costs": 0,
"worked_minutes": 5970
},
{
"id": 27,
"costs": 0,
"worked_minutes": 0
},
{
"id": 28,
"costs": 0,
"worked_minutes": 0
},
{
"id": 29,
"costs": 0,
"worked_minutes": 13390
},
{
"id": 30,
"costs": 0,
"worked_minutes": 0
},
{
"id": 31,
"costs": 0,
"worked_minutes": 45076
},
{
"id": 32,
"costs": 0,
"worked_minutes": 0
},
{
"id": 33,
"costs": 0,
"worked_minutes": 240
},
{
"id": 34,
"costs": 0,
"worked_minutes": 0
},
{
"id": 35,
"costs": 0,
"worked_minutes": 27141
},
{
"id": 36,
"costs": 0,
"worked_minutes": 25364
},
{
"id": 37,
"costs": 0,
"worked_minutes": 1165
},
{
"id": 38,
"costs": 0,
"worked_minutes": 0
},
{
"id": 39,
"costs": 0,
"worked_minutes": 8188
}
],
"fixed_costs": [
{
"name": "Graphic work",
"price": 39130
},
{
"name": "Delivery [km]",
"price": 0
},
{
"name": "Print (w/o VAT)",
"price": 272414.15
}
]
}
Cashflow revenues
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | -- |
| Filters | from: date, to: date |
| Embedded | - |
GET /api/v0/statistics/cashflow/revenues HTTP/1.1
Content-Type: application/json
{
"from": "2023-05-01",
"to": "2023-05-31"
}
Response
200 OK
GET /api/v0/statistics/cashflow/revenues HTTP/1.1
Content-Type: application/json
{
"items": [
{
"invoice_number": 202301001,
"date": "2023-05-04T10:19:08.000000Z",
"price_without_vat": 1995
}
]
}
User estimated and reported time
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | No |
| Sorting | -- |
| Filters | from: date, to: date, is_active: bool/null |
| Embedded | - |
GET /api/v0/statistics/users/estimated-reported-time HTTP/1.1
Content-Type: application/json
{
"from": "2023-05-01",
"to": "2023-05-31",
"is_active": null
}
Response
Reported and estimated time is in minutes.
200 OK
GET /api/v0/statistics/users/estimated-reported-time HTTP/1.1
Content-Type: application/json
{
"items": {
"20": {
"user_id": 20,
"user_group_id": 3,
"estimated_time": 9688,
"reported_time": 45239
},
"13": {
"user_id": 13,
"user_group_id": 3,
"estimated_time": 2122.93,
"reported_time": 31876
},
"10": {
"user_id": 10,
"user_group_id": 3,
"estimated_time": 20914.55,
"reported_time": 45453
},
"31": {
"user_id": 31,
"user_group_id": 4,
"estimated_time": 14728.96,
"reported_time": 49764
},
"16": {
"user_id": 16,
"user_group_id": 4,
"estimated_time": 660,
"reported_time": 24529
},
"19": {
"user_id": 19,
"user_group_id": 3,
"estimated_time": 14804.3,
"reported_time": 44643
},
"36": {
"user_id": 36,
"user_group_id": 4,
"estimated_time": 6511.04,
"reported_time": 24064
},
"4": {
"user_id": 4,
"user_group_id": 3,
"estimated_time": 1567.43,
"reported_time": 23554
},
"24": {
"user_id": 24,
"user_group_id": 3,
"estimated_time": 3352.57,
"reported_time": 13378
},
"26": {
"user_id": 26,
"user_group_id": 1,
"estimated_time": 0,
"reported_time": 8950
},
"15": {
"user_id": 15,
"user_group_id": 4,
"estimated_time": 0,
"reported_time": 14919
},
"35": {
"user_id": 35,
"user_group_id": 4,
"estimated_time": 300,
"reported_time": 30647
},
"11": {
"user_id": 11,
"user_group_id": 3,
"estimated_time": 5269.71,
"reported_time": 37400
},
"39": {
"user_id": 39,
"user_group_id": 3,
"estimated_time": 2370.5,
"reported_time": 17934
},
"29": {
"user_id": 29,
"user_group_id": 1,
"estimated_time": 0,
"reported_time": 24890
},
"1": {
"user_id": 1,
"user_group_id": 1,
"estimated_time": 0,
"reported_time": 1620
},
"37": {
"user_id": 37,
"user_group_id": 1,
"estimated_time": 0,
"reported_time": 1775
}
}
}
User busyness
Request
| Index behaviour | Definition |
|---|---|
| Paginated by default | Yes |
| Sorting | -- |
| Filters | -- |
| Embedded | -- |
GET /api/v0/statistics/busyness HTTP/1.1
Content-Type: application/json
Response
Returns array of users with amount of waiting tasks and expected work time. If user is not part of group BE or FE,
expected_work_timeis null.It also returns an array
tasks. In this array valuetotal_reported_timerepresents total time reported by users in user's group (BE/FE). Valueuser_reported_timerepresents total time reported by user and valueestimatesrepresents total value of estimates for given group (BE/FE) in minutes. These values are also null if user is not part of any group.In array
tasksis also valuetaskwhich represents model Task. Similarlystatusrepresents task status andprojectrepresents Project Task is part of.
200 OK
GET /api/v0/statistics/users/estimated-reported-time HTTP/1.1
Content-Type: application/json
{
"items": [
{
"user": {
"id": 1,
"first_name": "Aleš",
"last_name": "Bžatek",
"email": "bzatek@simplo.cz",
"is_active": true,
"phone": "",
"address": null,
"birth_date": null,
"note": null,
"minimal_monthly_report_minutes": 8400,
"vacation_days": 0,
"user_group_id": 3,
"github_email": null,
"google_refresh_token_set": false,
"google_calendar_id": null,
"created_at": "2023-02-09T16:18:44+0100"
},
"amount_of_waiting_tasks": 2,
"expected_work_time": 900,
"tasks": [
{
"total_reported_time": 180,
"user_reported_time": 120,
"estimates": 600,
"task": {
"id": 7204,
"name": "Eight task",
"project_id": 166,
"goodday_id": "QmgYeY",
"parent_id": null,
"status_id": 8,
"description": null,
"created_by_user_id": 39,
"assigned_to_user_id": 1,
"action_required_by_user_id": 1,
"start_date": null,
"end_date": null,
"deadline_date": null,
"billable": true,
"priority": 5,
"estimate": 0,
"progress": null,
"costs": 360,
"billings": {
"to_invoice": 0,
"invoiced": 0,
"billings": 0
},
"profit": {
"in_money": -360,
"in_percentage": -100
},
"work_time": {
"reported_time": 180,
"estimated_time": 0,
"progress": 0,
"user_groups": [
{
"users": [
{
"user_id": 1,
"time": 120
},
{
"user_id": 39,
"time": 60
}
],
"user_group_id": 3,
"percentage": 100,
"reported_time": 180
}
]
},
"closed_at": null,
"goodday_created_at": "2023-12-14T13:35:37+0100",
"is_done": false,
"last_activity": "2024-04-16T08:06:28.000000Z",
"created_at": "2024-04-16T10:06:28+0200",
"updated_at": "2024-04-16T10:06:28+0200"
},
"status": {
"id": 8,
"name": "TODO",
"background_color": "#FFFFFF",
"font_color": "#000000",
"is_default": false,
"status_order": null,
"created_at": "2023-02-09T16:20:53+0100",
"updated_at": "2023-02-09T16:20:53+0100"
},
"project": {
"id": 166,
"name": "Martin",
"goodday_id": "DDgFki",
"parent_id": null,
"client_id": 61,
"status_id": 32,
"status_comment": null,
"responsible_user_id": 39,
"active": true,
"description": "Use project to organize work items with a common goal.",
"start_date": null,
"end_date": null,
"priority": 5,
"progress": null,
"type": null,
"is_client": true,
"google_drive_url": null,
"billable": true,
"billing_type": null,
"billing_time_type": null,
"billings_frequency": "1",
"automatically_create_report": false,
"estimated_price": 0,
"goodday_created_at": "2023-12-13T09:40:34+0100",
"has_signed_sla": false,
"require_deadline": false,
"require_estimates": false,
"billable_statuses": [],
"created_at": "2024-04-16T10:06:28+0200",
"updated_at": "2024-05-22T12:24:36+0200"
}
},
]
}
]
}