Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions ProcessMaker/Http/Controllers/Api/ProcessRequestController.php
Original file line number Diff line number Diff line change
Expand Up @@ -839,4 +839,44 @@ public function endEventDestination(ProcessRequest $request)

return response()->json(['message' => __('End event found'), 'data' => $data]);
}

/**
* This endpoint returns requests by case number
*
* @param Request $request
*
* @return ApiCollection
*/
public function getRequestsByCase(Request $request)
{
$user = Auth::user();

$case_number = $request->input('case_number', 0);
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
$query = ProcessRequest::forUser($user);
$includes = $request->input('include', '');
foreach (array_filter(explode(',', $includes)) as $include) {
if (in_array($include, ProcessRequest::$allowedIncludes)) {
$query->with($include);
}
}

if ($advancedFilter = $request->input('advanced_filter', '')) {
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
Filter::filter($query, $advancedFilter);
}

$response = $query->where('case_number', $case_number)
->orderBy(
str_ireplace('.', '->', $request->input('order_by', 'name')),
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
$request->input('order_direction', 'ASC')
)
->select('process_requests.*')
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
->withAggregate('processVersion', 'alternative')
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
->paginate($request->input('per_page', 10));

$response = $response->map(function ($processRequest) use ($request) {
return new ProcessRequestResource($processRequest);
});

return new ApiCollection($response);
}
}
1 change: 1 addition & 0 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@

// Cases
//Route::get('cases', [ProcessRequestController::class, 'index'])->name('cases.index');
Route::get('requests-by-case', [ProcessRequestController::class, 'getRequestsByCase'])->name('requests.getRequestsByCase');
// Requests
Route::get('requests', [ProcessRequestController::class, 'index'])->name('requests.index'); // Already filtered in controller
Route::get('requests/{process}/count', [ProcessRequestController::class, 'getCount'])->name('requests.count');
Expand Down
28 changes: 28 additions & 0 deletions tests/Feature/Api/ProcessRequestsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -986,4 +986,32 @@ public function testScreenRequested()
$data = $response->json()['data'];
$this->assertEmpty($data);
}

/**
* Get a list of Requests by Cases.
*/
public function testRequestByCase()
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved
{
ProcessRequest::query()->delete();
$request = ProcessRequest::factory()->create();
ProcessRequest::factory()->count(9)->create([
'parent_request_id' => $request->id,
]);

$url = '/requests-by-case?case_number=' . $request->case_number;
Comment thread
luNunezProcessmaker marked this conversation as resolved.
Resolved

$response = $this->apiCall('GET', $url);

//Validate the header status code
$response->assertStatus(200);

// Verify structure
$response->assertJsonStructure([
'data' => ['*' => self::STRUCTURE],
'meta',
]);

// Verify count
$this->assertEquals(10, $response->json()['meta']['total']);
}
}