Index: arms/html/analysisTime/content-container.html
===================================================================
diff -u -r08074ed688af32c0722a08340acc792d78395eab -r2336fb82023d754e60264b4fd07b30c9d9efe5e5
--- arms/html/analysisTime/content-container.html (.../content-container.html) (revision 08074ed688af32c0722a08340acc792d78395eab)
+++ arms/html/analysisTime/content-container.html (.../content-container.html) (revision 2336fb82023d754e60264b4fd07b30c9d9efe5e5)
@@ -624,9 +624,19 @@
Index: arms/js/analysisTime.js
===================================================================
diff -u -r08074ed688af32c0722a08340acc792d78395eab -r2336fb82023d754e60264b4fd07b30c9d9efe5e5
--- arms/js/analysisTime.js (.../analysisTime.js) (revision 08074ed688af32c0722a08340acc792d78395eab)
+++ arms/js/analysisTime.js (.../analysisTime.js) (revision 2336fb82023d754e60264b4fd07b30c9d9efe5e5)
@@ -1276,25 +1276,31 @@
// 바차트
function combinationChart(pdServiceLink, pdServiceVersionLinks) {
function combinationChartNoData() {
- c3.generate({
- bindto: '#combination-chart',
- data: {
- x: 'x',
- columns: [],
- type: 'bar',
- types: {},
- },
+
+ $('#status-chart').html('데이터가 없습니다').css({
+ 'display': 'flex',
+ 'justify-content': 'center',
+ 'align-items': 'center'
});
+
+ // c3.generate({
+ // bindto: '#combination-chart',
+ // data: {
+ // x: 'x',
+ // columns: [],
+ // type: 'bar',
+ // types: {},
+ // },
+ // });
}
if(pdServiceLink === "" || pdServiceVersionLinks === "") {
combinationChartNoData();
return;
}
-
const url = new UrlBuilder()
- .setBaseUrl('/auth-user/api/arms/dashboard/requirements-jira-issue-statuses')
+ .setBaseUrl('/auth-user/api/arms/analysis/time/daily-requirements-jira-issue-statuses')
.addQueryParam('pdServiceLink', pdServiceLink)
.addQueryParam('pdServiceVersionLinks', pdServiceVersionLinks)
.addQueryParam('메인그룹필드', "pdServiceVersion")
@@ -1320,50 +1326,48 @@
}
const issueStatusTypesSet = new Set();
- for (const month in data) {
- for (const status in data[month].statuses) {
+ for (const day in data) {
+ for (const status in data[day].statuses) {
+ //console.log('status ', status);
issueStatusTypesSet.add(status);
}
}
const issueStatusTypes = [...issueStatusTypesSet];
let columnsData = [];
+ let dayTotal = {};
issueStatusTypes.forEach((status) => {
const columnData = [status];
- for (const month in data) {
- const count = data[month].statuses[status] || 0;
+ for (const day in data) {
+ const count = data[day].statuses[status] || 0;
columnData.push(count);
+ dayTotal[day] = (dayTotal[day] || 0) + count;
+
+ //console.log(`Day: ${day}, Status: ${status}, Count: ${count}, dayTotal: ${dayTotal[day]}`);
}
columnsData.push(columnData);
});
- const requirementCounts = ['요구사항'];
- for (const month in data) {
- requirementCounts.push(data[month].totalRequirements);
- }
- columnsData.push(requirementCounts);
+ // 차트 x축 날짜값 포맷팅
+ let keys = Object.keys(data).map(key => {
+ let [year, month, day] = key.split('-');
+ return `${month}/${day}`;
+ });
- let monthlyTotals = {};
-
- for (const month in data) {
- monthlyTotals[month] = data[month].totalIssues + data[month].totalRequirements;
- }
-
-
const chart = c3.generate({
- bindto: '#combination-chart',
+ bindto: '#status-chart',
data: {
x: 'x',
columns: [
- ['x', ...Object.keys(data)],
+ ['x', ...keys],
...columnsData,
+ ['전체이슈', ...Object.keys(dayTotal).map(day => dayTotal[day])],
],
type: 'bar',
types: {
- '요구사항': 'area',
+ '전체이슈': 'area',
},
- groups: [issueStatusTypes]
},
color: {
pattern: dashboardColor.accumulatedIssueStatusColor,
@@ -1381,36 +1385,57 @@
tooltip: {
format: {
title: function (index) {
- const month = Object.keys(data)[index];
- const total = monthlyTotals[month];
- return `${month} | Total : ${total}`;
+ const day = Object.keys(data)[index];
+ const total = dayTotal[day];
+ return `${day} | Total : ${total}`;
},
},
+ contents: function (d, defaultTitleFormat, defaultValueFormat, color) {
+ // 기본 툴팁 생성
+ let tooltipHtml = this.getTooltipContent.apply(this, arguments);
+ // 툴팁 HTML 파싱
+ let parsedHtml = $.parseHTML(`${tooltipHtml}
`);
+ // '전체이슈' 행 제거
+ $(parsedHtml).find('tr').each(function() {
+ if ($(this).find('td').first().text() === '전체이슈') {
+ $(this).remove();
+ }
+ });
+ // 다시 HTML 문자열로 변환
+ return $(parsedHtml).html();
+ }
}
});
- $(document).on('click', '#combination-chart .c3-legend-item', function () {
+ $(document).on('click', '#status-chart .c3-legend-item', function () {
const id = $(this).text();
const isHidden = $(this).hasClass('c3-legend-item-hidden');
- let docCount = 0;
- for (const month in data) {
- if (data[month].statuses.hasOwnProperty(id)) {
- docCount = data[month].statuses[id];
- } else if (id === '요구사항') {
- docCount = data[month].totalRequirements;
- }
- }
+ for (const day in data) {
+ const docCount = data[day].statuses[id] || 0;
- // 월별 통계 값 업데이트
- for (const month in data) {
if (isHidden) {
- monthlyTotals[month] -= docCount;
+ dayTotal[day] -= docCount;
} else {
- monthlyTotals[month] += docCount;
+ dayTotal[day] += docCount;
}
}
});
+
+ let isGrouped = false; // 차트 그룹화 여부
+
+ $('#status-chart-button').on('click', function() {
+ if (isGrouped) {
+ // 그룹화 해제
+ chart.groups([]);
+ $(this).text('그룹화 적용');
+ } else {
+ // 그룹화
+ chart.groups([issueStatusTypes]);
+ $(this).text('그룹화 해제');
+ }
+ isGrouped = !isGrouped;
+ });
}
}
});