Bổ sung api cho chức năng profile and criterias

This commit is contained in:
Truong Vo 2024-09-17 10:36:17 +07:00
parent 780d3f63fe
commit fb47cc509d
4 changed files with 109 additions and 19 deletions

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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');

View File

@ -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);
}
}