119 lines
4.3 KiB
PHP
119 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Admin\app\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use App\Services\JiraService;
|
|
use App\Traits\AnalyzeData;
|
|
use App\Traits\HasFilterRequest;
|
|
use App\Traits\HasOrderByRequest;
|
|
use App\Traits\HasSearchRequest;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Modules\Admin\app\Models\Sprint;
|
|
use Modules\Admin\app\Models\UserCriteria;
|
|
|
|
class ProfileController extends Controller
|
|
{
|
|
use HasOrderByRequest;
|
|
use HasFilterRequest;
|
|
use HasSearchRequest;
|
|
use AnalyzeData;
|
|
|
|
protected $jiraService;
|
|
|
|
public function __construct(JiraService $jiraService)
|
|
{
|
|
$this->jiraService = $jiraService;
|
|
}
|
|
|
|
public function getProfilesData(Request $request)
|
|
{
|
|
$user = auth('admins')->user();
|
|
|
|
$userEmail = $user->email;
|
|
$projects = $this->jiraService->getAllProjects();
|
|
|
|
$startDate = $request->input('fromDate');
|
|
$endDate = $request->input('toDate');
|
|
|
|
$userCriterias = UserCriteria::with([
|
|
'sprint' => function ($query) use ($startDate, $endDate) {
|
|
if ($startDate && $endDate) {
|
|
$query->whereBetween('complete_date', [$startDate, $endDate]);
|
|
} elseif ($startDate) {
|
|
$query->where('complete_date', '>=', $startDate);
|
|
} elseif ($endDate) {
|
|
$query->where('complete_date', '<=', $endDate);
|
|
}
|
|
},
|
|
'criteria',
|
|
])->where('user_email', $userEmail)
|
|
->whereHas('sprint', function ($query) use ($startDate, $endDate) {
|
|
if ($startDate && $endDate) {
|
|
$query->whereBetween('complete_date', [$startDate, $endDate]);
|
|
} elseif ($startDate) {
|
|
$query->where('complete_date', '>=', $startDate);
|
|
} elseif ($endDate) {
|
|
$query->where('complete_date', '<=', $endDate);
|
|
}
|
|
})
|
|
->get();
|
|
// dd($userCriterias);
|
|
// Xử lý dữ liệu thành cấu trúc mong muốn
|
|
$projectsData = $userCriterias->groupBy('sprint.project_id')->map(function ($userCriteriasByProject, $projectId) use ($projects) {
|
|
$result = self::getProjectById($projects, $projectId);
|
|
return [
|
|
'name' => $result['name'],
|
|
'sprints' => $userCriteriasByProject->groupBy('sprint.id')->map(function ($userCriteriasBySprint) {
|
|
$sprint = $userCriteriasBySprint->first()->sprint;
|
|
return [
|
|
'name' => $sprint->name,
|
|
'complete_date' => $sprint->complete_date ?? '',
|
|
'criterias' => $userCriteriasBySprint->map(function ($userCriteria) {
|
|
$criteria = $userCriteria->criteria;
|
|
return [
|
|
'criteria' => $criteria->name,
|
|
'note' => $userCriteria->note ?? '',
|
|
'createdBy' => $userCriteria->created_by ?? '', // Lấy tên user từ auth
|
|
'point' => $userCriteria->point ?? '',
|
|
];
|
|
})
|
|
];
|
|
})->values()
|
|
];
|
|
})->values();
|
|
|
|
// Trả về kết quả
|
|
return AbstractController::ResultSuccess($projectsData);
|
|
}
|
|
|
|
public function getProjectById($projects, $inputId)
|
|
{
|
|
$filteredProjects = array_filter($projects, function ($project) use ($inputId) {
|
|
return $project['id'] == $inputId;
|
|
});
|
|
return array_values($filteredProjects) ? array_values($filteredProjects)[0] : array_values($filteredProjects);
|
|
}
|
|
|
|
public function updateProfilesData(Request $request)
|
|
{
|
|
$userInfo = auth('admins')->user();
|
|
$request->validate([
|
|
'file' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048', // Chỉ chấp nhận file ảnh dưới 2MB
|
|
]);
|
|
|
|
$user = User::findOrFail($userInfo->id);
|
|
|
|
if ($user->avatar) {
|
|
Storage::disk('public')->delete($user->avatar);
|
|
}
|
|
|
|
$path = $request->file('file')->store('avatars', 'public');
|
|
$user->avatar = $path;
|
|
$user->save();
|
|
return AbstractController::ResultSuccess($path);
|
|
}
|
|
}
|