Added API calls for subtask time tracking
This commit is contained in:
@@ -5,7 +5,7 @@ New features:
|
|||||||
|
|
||||||
* Added application and project roles validation for API procedure calls
|
* Added application and project roles validation for API procedure calls
|
||||||
* Added new API call: "getProjectByIdentifier"
|
* Added new API call: "getProjectByIdentifier"
|
||||||
* Added new API calls for external task links, project attachments
|
* Added new API calls for external task links, project attachments and subtask time tracking
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
||||||
|
|||||||
@@ -19,15 +19,15 @@ class SubtaskTimeTrackingProcedure extends BaseProcedure
|
|||||||
return $this->subtaskTimeTrackingModel->hasTimer($subtask_id, $user_id);
|
return $this->subtaskTimeTrackingModel->hasTimer($subtask_id, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logSubtaskStartTime($subtask_id, $user_id)
|
public function setSubtaskStartTime($subtask_id, $user_id)
|
||||||
{
|
{
|
||||||
SubtaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'logSubtaskStartTime', $subtask_id);
|
SubtaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'setSubtaskStartTime', $subtask_id);
|
||||||
return $this->subtaskTimeTrackingModel->logStartTime($subtask_id, $user_id);
|
return $this->subtaskTimeTrackingModel->logStartTime($subtask_id, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logSubtaskEndTime($subtask_id, $user_id)
|
public function setSubtaskEndTime($subtask_id, $user_id)
|
||||||
{
|
{
|
||||||
SubtaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'logSubtaskEndTime', $subtask_id);
|
SubtaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'setSubtaskEndTime', $subtask_id);
|
||||||
return $this->subtaskTimeTrackingModel->logEndTime($subtask_id, $user_id);
|
return $this->subtaskTimeTrackingModel->logEndTime($subtask_id, $user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ Usage
|
|||||||
- [Automatic Actions](api-action-procedures.markdown)
|
- [Automatic Actions](api-action-procedures.markdown)
|
||||||
- [Tasks](api-task-procedures.markdown)
|
- [Tasks](api-task-procedures.markdown)
|
||||||
- [Subtasks](api-subtask-procedures.markdown)
|
- [Subtasks](api-subtask-procedures.markdown)
|
||||||
|
- [Subtask Time Tracking](api-subtask-time-tracking-procedures.markdown)
|
||||||
- [Task Files](api-task-file-procedures.markdown)
|
- [Task Files](api-task-file-procedures.markdown)
|
||||||
- [Project Files](api-project-file-procedures.markdown)
|
- [Project Files](api-project-file-procedures.markdown)
|
||||||
- [Links](api-link-procedures.markdown)
|
- [Links](api-link-procedures.markdown)
|
||||||
|
|||||||
102
doc/api-subtask-time-tracking-procedures.markdown
Normal file
102
doc/api-subtask-time-tracking-procedures.markdown
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
Subtask Time Tracking API procedures
|
||||||
|
====================================
|
||||||
|
|
||||||
|
## hasSubtaskTimer
|
||||||
|
|
||||||
|
- Purpose: **Check if a timer is started for the given subtask and user**
|
||||||
|
- Parameters:
|
||||||
|
- **subtask_id** (integer, required)
|
||||||
|
- **user_id** (integer, optional)
|
||||||
|
- Result on success: **true**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"jsonrpc":"2.0","method":"hasSubtaskTimer","id":1786995697,"params":[2,4]}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"result": true,
|
||||||
|
"id": 1786995697
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## setSubtaskStartTime
|
||||||
|
|
||||||
|
- Purpose: **Start subtask timer for a user**
|
||||||
|
- Parameters:
|
||||||
|
- **subtask_id** (integer, required)
|
||||||
|
- **user_id** (integer, optional)
|
||||||
|
- Result on success: **true**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"jsonrpc":"2.0","method":"setSubtaskStartTime","id":1168991769,"params":[2,4]}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"result": true,
|
||||||
|
"id": 1168991769
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## setSubtaskEndTime
|
||||||
|
|
||||||
|
- Purpose: **Stop subtask timer for a user**
|
||||||
|
- Parameters:
|
||||||
|
- **subtask_id** (integer, required)
|
||||||
|
- **user_id** (integer, optional)
|
||||||
|
- Result on success: **true**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"jsonrpc":"2.0","method":"setSubtaskEndTime","id":1026607603,"params":[2,4]}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"result": true,
|
||||||
|
"id": 1026607603
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## getSubtaskTimeSpent
|
||||||
|
|
||||||
|
- Purpose: **Get time spent on a subtask for a user**
|
||||||
|
- Parameters:
|
||||||
|
- **subtask_id** (integer, required)
|
||||||
|
- **user_id** (integer, optional)
|
||||||
|
- Result on success: **number of hours**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"jsonrpc":"2.0","method":"getSubtaskTimeSpent","id":738527378,"params":[2,4]}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"result": 1.5,
|
||||||
|
"id": 738527378
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -17,6 +17,7 @@ abstract class BaseProcedureTest extends PHPUnit_Framework_TestCase
|
|||||||
protected $projectId = 0;
|
protected $projectId = 0;
|
||||||
protected $taskTitle = 'My task';
|
protected $taskTitle = 'My task';
|
||||||
protected $taskId = 0;
|
protected $taskId = 0;
|
||||||
|
protected $subtaskId = 0;
|
||||||
|
|
||||||
protected $groupName1 = 'My Group A';
|
protected $groupName1 = 'My Group A';
|
||||||
protected $groupName2 = 'My Group B';
|
protected $groupName2 = 'My Group B';
|
||||||
@@ -119,4 +120,14 @@ abstract class BaseProcedureTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->taskId = $this->app->createTask(array('title' => $this->taskTitle, 'project_id' => $this->projectId));
|
$this->taskId = $this->app->createTask(array('title' => $this->taskTitle, 'project_id' => $this->projectId));
|
||||||
$this->assertNotFalse($this->taskId);
|
$this->assertNotFalse($this->taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function assertCreateSubtask()
|
||||||
|
{
|
||||||
|
$this->subtaskId = $this->app->createSubtask(array(
|
||||||
|
'task_id' => $this->taskId,
|
||||||
|
'title' => 'subtask #1',
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->assertNotFalse($this->subtaskId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ require_once __DIR__.'/BaseProcedureTest.php';
|
|||||||
class SubtaskProcedureTest extends BaseProcedureTest
|
class SubtaskProcedureTest extends BaseProcedureTest
|
||||||
{
|
{
|
||||||
protected $projectName = 'My project to test subtasks';
|
protected $projectName = 'My project to test subtasks';
|
||||||
private $subtaskId = 0;
|
|
||||||
|
|
||||||
public function testAll()
|
public function testAll()
|
||||||
{
|
{
|
||||||
@@ -18,16 +17,6 @@ class SubtaskProcedureTest extends BaseProcedureTest
|
|||||||
$this->assertRemoveSubtask();
|
$this->assertRemoveSubtask();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assertCreateSubtask()
|
|
||||||
{
|
|
||||||
$this->subtaskId = $this->app->createSubtask(array(
|
|
||||||
'task_id' => $this->taskId,
|
|
||||||
'title' => 'subtask #1',
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertNotFalse($this->subtaskId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function assertGetSubtask()
|
public function assertGetSubtask()
|
||||||
{
|
{
|
||||||
$subtask = $this->app->getSubtask($this->subtaskId);
|
$subtask = $this->app->getSubtask($this->subtaskId);
|
||||||
|
|||||||
46
tests/integration/SubtaskTimeTrackingProcedureTest.php
Normal file
46
tests/integration/SubtaskTimeTrackingProcedureTest.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__.'/BaseProcedureTest.php';
|
||||||
|
|
||||||
|
class SubtaskTimeTrackingProcedureTest extends BaseProcedureTest
|
||||||
|
{
|
||||||
|
protected $projectName = 'My project to test subtask time tracking';
|
||||||
|
|
||||||
|
public function testAll()
|
||||||
|
{
|
||||||
|
$this->assertCreateTeamProject();
|
||||||
|
$this->assertCreateTask();
|
||||||
|
$this->assertCreateSubtask();
|
||||||
|
$this->assertHasNoTimer();
|
||||||
|
$this->assertStartTimer();
|
||||||
|
$this->assertHasTimer();
|
||||||
|
$this->assertStopTimer();
|
||||||
|
$this->assertHasNoTimer();
|
||||||
|
$this->assertGetSubtaskTimeSpent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertHasNoTimer()
|
||||||
|
{
|
||||||
|
$this->assertFalse($this->app->hasSubtaskTimer($this->subtaskId, $this->userUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertHasTimer()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->app->hasSubtaskTimer($this->subtaskId, $this->userUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertStartTimer()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->app->setSubtaskStartTime($this->subtaskId, $this->userUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertStopTimer()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->app->setSubtaskEndTime($this->subtaskId, $this->userUserId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertGetSubtaskTimeSpent()
|
||||||
|
{
|
||||||
|
$this->assertEquals(0, $this->app->getSubtaskTimeSpent($this->subtaskId, $this->userUserId));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user