Bổ sung api cho chức năng profile and criterias
This commit is contained in:
parent
780d3f63fe
commit
fb47cc509d
|
|
@ -193,14 +193,15 @@ class JiraController extends Controller
|
|||
], 200);
|
||||
}
|
||||
|
||||
private function customSort($a, $b, $order) {
|
||||
private function customSort($a, $b, $order)
|
||||
{
|
||||
$pos_a = array_search(strtolower($a), $order);
|
||||
$pos_b = array_search(strtolower($b), $order);
|
||||
|
||||
|
||||
if ($pos_a === false || $pos_b === false) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
return $pos_a - $pos_b;
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +225,7 @@ class JiraController extends Controller
|
|||
$totalTimeSpent = 0;
|
||||
foreach ($issue['fields']['worklog']['worklogs'] as $worklog) {
|
||||
$started = Carbon::parse($worklog['started']);
|
||||
$totalTimeSpent = $totalTimeSpent + ($worklog['timeSpentSeconds']/60/60);
|
||||
$totalTimeSpent = $totalTimeSpent + ($worklog['timeSpentSeconds'] / 60 / 60);
|
||||
if ($started->isSameDay($today) && $worklog['updateAuthor']['displayName'] == $user) {
|
||||
$filteredWorklogs[] = $worklog;
|
||||
}
|
||||
|
|
@ -238,7 +239,7 @@ class JiraController extends Controller
|
|||
'totalTimeSpent' => $totalTimeSpent,
|
||||
];
|
||||
$tasksByUser[$user]['assignment'] = $log['tasksAssign'];
|
||||
uksort($tasksByUser[$user]["allStatus"], function($a, $b) use ($predefinedOrder) {
|
||||
uksort($tasksByUser[$user]["allStatus"], function ($a, $b) use ($predefinedOrder) {
|
||||
return $this->customSort($a, $b, $predefinedOrder);
|
||||
});
|
||||
}
|
||||
|
|
@ -260,4 +261,46 @@ class JiraController extends Controller
|
|||
return response()->json(['error' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function getDetailsProjectsById(Request $request)
|
||||
{
|
||||
$id = $request->input('id');
|
||||
$projects = $this->jiraService->getDetailsProjectsById($id);
|
||||
return response()->json([
|
||||
'data' => $projects,
|
||||
'status' => true
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function getAllBoardByIdProjects(Request $request)
|
||||
{
|
||||
$id = $request->input('id');
|
||||
$projects = $this->jiraService->getAllBoardByIdProjects($id);
|
||||
|
||||
return response()->json([
|
||||
'data' => $projects,
|
||||
'status' => true
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function getAllSprintByIdBoard(Request $request)
|
||||
{
|
||||
$id = $request->input('id');
|
||||
$projects = $this->jiraService->getAllSprintByIdBoard($id);
|
||||
|
||||
return response()->json([
|
||||
'data' => $projects,
|
||||
'status' => true
|
||||
], 200);
|
||||
}
|
||||
public function getAllIssueByIdSprint(Request $request)
|
||||
{
|
||||
$id = $request->input('id');
|
||||
$projects = $this->jiraService->getAllIssueByIdSprint($id);
|
||||
|
||||
return response()->json([
|
||||
'data' => $projects,
|
||||
'status' => true
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace Modules\Admin\app\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Traits\AnalyzeData;
|
||||
use App\Traits\HasFilterRequest;
|
||||
use App\Traits\HasOrderByRequest;
|
||||
use App\Traits\HasSearchRequest;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
use HasOrderByRequest;
|
||||
use HasFilterRequest;
|
||||
use HasSearchRequest;
|
||||
use AnalyzeData;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -103,6 +103,11 @@ Route::middleware('api')
|
|||
], function () {
|
||||
Route::get('/fetch-issues', [JiraController::class, 'fetchAllIssues']);
|
||||
Route::get('/all-project', [JiraController::class, 'getAllProject']);
|
||||
Route::get('/get-detail-project-by-id', [JiraController::class, 'getDetailsProjectsById']);
|
||||
Route::get('/get-all-board-by-id-project', [JiraController::class, 'getAllBoardByIdProjects']);
|
||||
Route::get('/get-all-sprint-by-id-board', [JiraController::class, 'getAllSprintByIdBoard']);
|
||||
Route::get('/get-all-issue-by-id-sprint', [JiraController::class, 'getAllIssueByIdSprint']);
|
||||
|
||||
Route::get('/all-issue-by-project', [JiraController::class, 'fetchIssuesByProject']);
|
||||
Route::get('/worklogs', [JiraController::class, 'getAllUserWorkLogs'])->middleware('check.permission:admin.staff');
|
||||
Route::get('/allocation', [JiraController::class, 'getAllUserDoing'])->middleware('check.permission:admin.staff');
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ class JiraService
|
|||
|
||||
return $issues;
|
||||
}
|
||||
|
||||
|
||||
public function getAllUsers()
|
||||
{
|
||||
$response = $this->client->get('/rest/api/3/users/search', [
|
||||
|
|
@ -233,9 +233,9 @@ class JiraService
|
|||
$user_warning = [];
|
||||
foreach ($users as $user) {
|
||||
$user = $user[0];
|
||||
$users_data[$user['displayName']]['user'] = $user;
|
||||
$users_data[$user['displayName']]['total_spent'] = 0;
|
||||
$users_data[$user['displayName']]['total_est'] = 0;
|
||||
$users_data[$user['displayName']]['user'] = $user;
|
||||
$users_data[$user['displayName']]['total_spent'] = 0;
|
||||
$users_data[$user['displayName']]['total_est'] = 0;
|
||||
$body = [
|
||||
'expand' => ['names', 'schema'],
|
||||
'fields' => ['summary', 'status', 'timeoriginalestimate', 'timespent', 'assignee', 'project'],
|
||||
|
|
@ -246,21 +246,21 @@ class JiraService
|
|||
'maxResults' => 50,
|
||||
'startAt' => 0
|
||||
];
|
||||
|
||||
|
||||
$response = $this->client->post('/rest/api/3/search', [
|
||||
'body' => json_encode($body)
|
||||
]);
|
||||
|
||||
|
||||
$issues = json_decode($response->getBody()->getContents(), true);
|
||||
|
||||
if(count($issues['issues']) == 0){
|
||||
if (count($issues['issues']) == 0) {
|
||||
$user_warning[] = $user;
|
||||
}
|
||||
|
||||
foreach ($issues['issues'] as $issue) {
|
||||
$projectName = $issue['fields']['project']['name'];
|
||||
$username = $issue['fields']['assignee']['displayName'];
|
||||
|
||||
|
||||
if (!isset($groupedIssues[$projectName])) {
|
||||
$groupedIssues[$projectName] = [];
|
||||
$groupedIssues[$projectName]['project'] = $issue['fields']['project'];
|
||||
|
|
@ -272,21 +272,42 @@ class JiraService
|
|||
$groupedIssues[$projectName]['users'][$username]['p_total_spent'] = 0;
|
||||
$groupedIssues[$projectName]['users'][$username]['p_total_est'] = 0;
|
||||
}
|
||||
|
||||
|
||||
$groupedIssues[$projectName]['users'][$username]['issues'][] = $issue;
|
||||
$groupedIssues[$projectName]['users'][$username]['p_total_spent'] = $groupedIssues[$projectName]['users'][$username]['p_total_spent'] + $issue['fields']['timespent'];
|
||||
$groupedIssues[$projectName]['users'][$username]['p_total_est'] = $groupedIssues[$projectName]['users'][$username]['p_total_est'] + ($issue['fields']['timeoriginalestimate'] ?? 0);
|
||||
|
||||
|
||||
$users_data[$user['displayName']]['total_spent'] = $users_data[$user['displayName']]['total_spent'] + $issue['fields']['timespent'];
|
||||
$users_data[$user['displayName']]['total_est'] = $users_data[$user['displayName']]['total_est'] + ($issue['fields']['timeoriginalestimate'] ?? 0);
|
||||
$users_data[$user['displayName']]['total_est'] = $users_data[$user['displayName']]['total_est'] + ($issue['fields']['timeoriginalestimate'] ?? 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return ['projects' => $groupedIssues, 'users' => $users_data, 'warningList' => $user_warning];
|
||||
// return $projects;
|
||||
}
|
||||
|
||||
public function getDetailsProjectsById($id)
|
||||
{
|
||||
$response = $this->client->get('/rest/api/3/project/' . $id);
|
||||
return json_decode($response->getBody()->getContents(), true);
|
||||
}
|
||||
public function getAllBoardByIdProjects($id)
|
||||
{
|
||||
$response = $this->client->get('/rest/agile/1.0/board?projectKeyOrI=/' . $id);
|
||||
return json_decode($response->getBody()->getContents(), true);
|
||||
}
|
||||
public function getAllSprintByIdBoard($id)
|
||||
{
|
||||
$response = $this->client->get('/rest/agile/1.0/board/' . $id . '/sprint');
|
||||
return json_decode($response->getBody()->getContents(), true);
|
||||
}
|
||||
public function getAllIssueByIdSprint($id)
|
||||
{
|
||||
$response = $this->client->get('/rest/agile/1.0/sprint/' . $id . '/issue');
|
||||
return json_decode($response->getBody()->getContents(), true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue