";
$(".timeline.timeline-inverse").append(add_t_arms_reqadd);
} else {
console.log("정의되지 않은 타입의 객체 데이터 확인 :: " + obj);
}
} //for end
var endPointHtmlStr =
"\n" +
'
\n' +
' \n' +
"
";
$(".timeline.timeline-inverse").append(endPointHtmlStr);
})
.fail(function (e) {})
.always(function () {});
});
}
///////////////////////////////////////////////////////////////////////////////
// 탭 클릭 이벤트
///////////////////////////////////////////////////////////////////////////////
function change_tab_action() {
$('a[data-toggle="tab"]').on("shown.bs.tab", function (e) {
var target = $(e.target).attr("href"); // activated tab
$(".edit_btn_group, #footer_edit_tab_req_update").addClass("hidden");
$(".jira_btn_group").addClass("hidden");
$(".newReqDiv").hide();
if (target == "#edit") {
$(".edit_btn_group, #footer_edit_tab_req_update").removeClass("hidden");
} else if (target == "#jira") {
$(".jira_btn_group").removeClass("hidden");
console.log("jira tab click event");
//1-1. 제품(서비스) 아이디를 기준으로, -- $('#selected_pdService').val()
console.log("selected_pdService::::" + $("#selected_pdService").val()); // service id
console.log("selectedId::::" + selectedId); // jsTree ID
//1-2. 요구사항 jsTree ID 가져와서 -- selectedId
//2. 요구사항 테이블 ( REQADD ) 을 검색하여
//3. JIRA_VER 정보에 체크해 주기.
//제품 서비스 셀렉트 박스 데이터 바인딩
//요구사항 클릭하면 자세히보기 탭으로 가니까 이 로직은 유효하다.
var tableName = "T_ARMS_REQADD_" + $("#selected_pdService").val();
console.log("jira selectedId" + selectedId);
console.log("jira tableName" + tableName);
console.log("jira datatables_jira_project 완료 ");
} else if (target == "#report") {
$(".newReqDiv").show();
}
});
}
function handle_change_date(start, end) {
// 시작일, 종료일, 오늘 날짜를 Date 객체로 변환
const startDate = new Date(start);
const endDate = new Date(end);
const today = new Date();
// 시작일과 오늘 사이의 일수 차이 계산
const dayDiff = Math.max(0, diff_day(start, end));
const todayDiff = Math.max(0, diff_day(start, today));
// 시작일이 오늘보다 미래인 경우
if (startDate > today) {
return {
dayDiff: dayDiff,
todayDiff: 0,
plan_progress: 0
};
}
// 시작일이 종료일보다 같거나 큰 경우
if (startDate >= endDate) {
return {
dayDiff: 0,
todayDiff: 0,
plan_progress: 0
};
}
if (endDate <= today) {
return {
dayDiff: dayDiff,
todayDiff: dayDiff,
plan_progress: 100
};
}
// 진행률 계산
const progress = dayDiff > 0 ? (todayDiff / dayDiff) * 100 : 0;
return {
dayDiff: dayDiff,
todayDiff: todayDiff,
plan_progress: Math.min(progress.toFixed(0), 100)
};
}
///////////////////////////////////////////////////////////////////////////////
// Gantt Chart
///////////////////////////////////////////////////////////////////////////////
function setGanttTasks(data) {
ganttTasks = data
.sort((a, b) => a.c_parentid - b.c_parentid)
.reduce((acc, cur) => {
if (cur.c_parentid < 2) return acc;
let dependencies = "";
if (cur.c_parentid !== 2) {
function setDependencies(parentId, parents) {
const node = data.find((task) => task.c_id === parentId);
if (node.c_parentid <= 2) {
return parents;
}
return setDependencies(node.c_parentid, parents.concat(`${node.c_parentid}`));
}
dependencies = setDependencies(cur.c_parentid, [`${cur.c_parentid}`]);
}
const common_object = {
id: `${cur.c_id}`,
wbs: Array.isArray(dependencies) ? `${dependencies.reverse().join("-")}-${cur.c_id}` : `${cur.c_id}`,
assignee: cur.c_req_owner,
reporter: cur.c_req_writer,
name: cur.c_title,
progress: 0,
dependencies: dependencies,
priority: cur.state,
custom_class: cur.status, // optional
type: cur.c_type,
manager: cur.c_req_manager,
result: cur.c_req_output,
level: cur.c_level,
parentId: cur.c_parentid,
position: cur.c_position,
groupPosition: []
};
if (cur.c_req_start_date) {
common_object.start = getDate(cur.c_req_start_date);
}
if (cur.c_req_end_date) {
common_object.end = getDate(cur.c_req_end_date);
}
if (cur && cur.c_type === "folder") {
common_object.etc = ` 폴더`;
} else {
// 비고란 아이콘 및 상태명
if (
cur.reqStateEntity &&
cur.reqStateEntity.c_title &&
cur.reqStateEntity.reqStateCategoryEntity &&
cur.reqStateEntity.reqStateCategoryEntity.c_category_icon
) {
// 카테고리 연결 상태
common_object.etc =
cur.reqStateEntity.reqStateCategoryEntity.c_category_icon + " " + cur.reqStateEntity.c_title;
} else if (cur.reqStateEntity && cur.reqStateEntity.c_title) {
// 카테고리 미 연결 상태
common_object.etc = cur.reqStateEntity.c_title;
}
common_object.total_resource = cur.c_req_total_resource == null ? 0 : cur.c_req_total_resource;
common_object.plan_resource = cur.c_req_plan_resource == null ? 0 : cur.c_req_plan_resource;
// common_object.total_resource = cur.c_req_total_time == null ? 0 : cur.c_req_total_time;
// common_object.plan_resouce = cur.c_req_plan_time == null ? 0 : cur.c_req_plan_time;
// common_object.plan = cur.c_req_plan_progress == null ? 0 : cur.c_req_plan_progress;
common_object.plan = 0;
common_object.performance = cur.c_req_performance_progress == null ? 0 : cur.c_req_performance_progress;
}
acc.push(common_object);
return acc;
}, []);
return ganttTasks;
}
async function draggableNode(data) {
const endPoint = "T_ARMS_REQADD_" + $("#selected_pdService").val();
await $.ajax({
type: "POST",
url: "/auth-user/api/arms/reqAdd/sync/" + endPoint + "/moveNode.do",
data: {
c_id: data.c_id,
ref: data.ref,
c_position: Number(data.c_position) + 1,
copy: 0,
multiCounter: 0
},
progress: true
});
}
function getMonitorData(selectId, selecteVersionId) {
let endPointUrl = "/T_ARMS_REQADD_" + selectId + "/reqProgress.do";
if (selecteVersionId) {
let versionInfo = "?c_req_pdservice_versionset_link=" + selecteVersionId;
endPointUrl += versionInfo;
}
$.ajax({
url: "/auth-user/api/arms/reqAddStatePure" + endPointUrl,
type: "GET",
dataType: "json",
progress: true,
statusCode: {
200: function (data) {
if (!isEmpty(data)) {
initGantt(data);
}
}
}
});
}
function updateNode(data, task) {
const endPoint = "T_ARMS_REQADD_" + $("#selected_pdService").val();
$.ajax({
type: "POST",
url: "/auth-user/api/arms/reqAdd/sync/" + endPoint + "/updateDate.do",
data: data,
progress: true,
statusCode: {}
}).done(function (res) {
var tasks = $.map(ganttTasks, function (ganttTask) {
if (ganttTask.id === data.c_id) {
return $.extend({}, ganttTask, task);
}
return ganttTask;
});
ganttTasks = tasks;
pendingRequestIds[res.requestId] = () => {
gantt.refresh(tasks);
};
});
}
function closeTooltip(e) {
if (e.target.tagName === "BUTTON") {
e.target.blur();
} else {
e.target.parentElement.blur();
}
}
function initGantt(data) {
$("#gantt-target").empty();
var tasks = setGanttTasks(data);
if (isEmpty(tasks)) return;
gantt = new Gantt(
"#gantt-target",
tasks,
{
on_date_change: (task, start, end) => {
console.log("Update Start Date :: ", start);
console.log("Update End Date :: ", end);
var dateDiff = handle_change_date(start, end);
console.log("[ reqGantt :: initGantt ]");
console.table(task);
updateNode(
{
c_id: task.id,
c_req_start_date: start,
c_req_end_date: end
},
{
start: getDate(start),
end: getDate(end),
total_resource: dateDiff.dayDiff,
plan_resource: dateDiff.todayDiff,
plan: dateDiff.plan_progress
}
);
},
on_progress_change: (task, progress) => {
console.log("Update Progress :: ", progress);
var tasks = $.map(ganttTasks, function (ganttTask) {
if (ganttTask.id === task.id) {
return $.extend({}, ganttTask, { plan: `${progress || 0}%` });
}
return ganttTask;
});
ganttTasks = tasks;
gantt.refresh(tasks);
// updateNode(
// { c_id: task.id, c_req_plan_progress: progress },
// {
// progress: progress,
// plan: `${progress || 0}%`
// }
// );
},
on_drag_row: (node) => {
console.log("Move Node :: ", node);
draggableNode(node);
},
language: navigator.language?.split("-")[0] || navigator.userLanguage
},
[
{
data: "id",
title: "",
render: (data, row) => {
const btnWrapper = $("");
const updateBtn = $("")
.addClass("btn btn-success btn-sm mr-xs")
.append($("").addClass("fa fa-pencil"))
.css({
"margin-top": 0,
"padding-top": 0,
"padding-bottom": 0,
border: "none",
outline: "none",
background: "none"
})
.attr({ "data-placement": "right", "data-original-title": "상세정보 조회 및 수정" })
.tooltip({
container: "body"
})
.on("click", (e) => {
closeTooltip(e);
updateNodeModalOpen(row);
});
const addBtn = $("")
.addClass("btn btn-primary btn-sm mr-xs")
.append($("").addClass("fa fa-plus-circle"))
.css({
"margin-top": 0,
"padding-top": 0,
"padding-bottom": 0,
border: "none",
outline: "none",
background: "none"
})
.attr({ "data-placement": "right", "data-original-title": "동일 레벨에 요구사항 추가" })
.tooltip({
container: "body"
})
.on("click", (e) => {
closeTooltip(e);
addNodeModalOpen(row.parentId);
});
btnWrapper.append(updateBtn);
btnWrapper.append(addBtn);
if (row.type !== "default") {
const addLevelDownBtn = $("")
.addClass("btn btn-primary btn-sm mr-xs")
.append($("").addClass("fa fa-level-down"))
.css({
"margin-top": 0,
"padding-top": 0,
"padding-bottom": 0,
border: "none",
outline: "none",
background: "none"
})
.attr({ "data-placement": "left", "data-original-title": "폴더 하위에 요구사항 추가" })
.tooltip({
container: "body"
})
.on("click", (e) => {
closeTooltip(e);
addNodeModalOpen(row.id);
});
btnWrapper.append(addLevelDownBtn);
}
return btnWrapper[0];
}
},
{ data: "drag", title: "" },
{ data: "wbs", title: "WBS" },
{ data: "name", title: "작업" },
{
data: "etc",
title: "비고",
render: (data, row) => {
let parentElement = $("").append(data);
return parentElement[0];
}
},
{ data: "start", title: "시작일" },
{ data: "end", title: "완료일" },
{ data: "total_resource", title: "총 작업량" },
{ data: "plan_resource", title: "계획 작업량" },
{ data: "manager", title: "담당자" },
{ data: "result", title: "산출물" },
{
data: "plan",
title: "계획%",
render: (data, row) => {
if (data != null) {
return row.plan + "%";
} else {
return "";
}
}
},
{
data: "performance",
title: "실적%",
render: (data, row) => {
if (data != null) {
return row.performance + "%";
} else {
return "";
}
}
}
]
);
}
function getDate(stamp) {
const time = !stamp || stamp < 0 ? new Date() : new Date(stamp);
return `${time.getFullYear()}-${addZero(time.getMonth() + 1)}-${addZero(time.getDate())}`;
}
function addZero(n) {
return n < 10 ? `0${n}` : n;
}
///////////////////////////////////////////////////////////////////////////////
// 모달
///////////////////////////////////////////////////////////////////////////////
function updateNodeModalOpen(item) {
req_state_setting("editview_req_state", false);
selectedId = item.id;
selectedType = item.type;
// $(".widget-tabs").children("header").children("ul").children("li:nth-child(1)").hide(); //상세보기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(1)").hide(); //편집하기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(2)").hide(); //리스트보기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(3)").hide(); //문서로보기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(4)").hide(); //JIRA연결설정
if (selectedType === "folder" || selectedType === "drive") {
$("#my_modal2_title").text(" 요구사항 내용");
$("#my_modal2_desc").text(" 요구사항 세부 내용 조회");
$("#folder_tab").get(0).click();
$(".newReqDiv").show();
$(".widget-tabs").children("header").children("ul").children("li:nth-child(2)").show(); //리스트보기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(3)").show(); //문서로보기
// 리스트로 보기(DataTable) 설정 ( 폴더나 루트니까 )
// 상세보기 탭 셋팅이 데이터테이블 렌더링 이후 시퀀스 호출 함.
dataTableLoad();
} else {
$("#my_modal2_title").text(" 요구사항 수정 팝업");
$("#my_modal2_desc").text(" ARMS에 요구사항을 수정합니다.");
$("#edit_tab").get(0).click();
$(".newReqDiv").hide();
$(".widget-tabs").children("header").children("ul").children("li:nth-child(1)").show(); //편집하기
$(".widget-tabs").children("header").children("ul").children("li:nth-child(4)").show(); //JIRA연결설정
//상세정보 조회 및 수정 모달 셋팅
setEditViewTab();
}
$("#my_modal").modal("show");
}
function addNodeModalOpen(parentId) {
req_state_setting("addview_req_state", false);
//제품(서비스) 데이터 바인딩
parentIdOfSelected = parentId;
var selectedPdServiceText = $("#selected_pdService").select2("data")[0].text;
var datepickerOption = {
theme: "dark",
lang: "kr",
format: "Y/m/d",
formatDate: "Y/m/d",
value: null,
scrollInput: false
};
if (isEmpty(selectedPdServiceText)) {
$("#addview_req_pdservice_name").val("");
} else {
$("#addview_req_pdservice_name").val(selectedPdServiceText);
}
$("#add_multi_version").multipleSelect("uncheckAll");
$("#addview_req_title").val("");
$("#addview_req_reviewers").val(null).trigger("change");
$("#addview_req_start_date").val(null);
$("#addview_req_end_date").val(null);
$("#addview_req_start_date").datetimepicker(datepickerOption);
$("#addview_req_end_date").datetimepicker(datepickerOption);
$("#addview_req_urgency").children(".btn.active").removeClass("active");
$("#addview_req_importance").children(".btn.active").removeClass("active");
$("#addview_req_difficulty").children(".btn.active").removeClass("active");
$("#addview_req_state input[name='addview_req_state_options']:checked").prop("checked", false);
CKEDITOR.instances.add_tabmodal_editor.setData($("").text("요구사항 내용을 기록합니다."));
// ------------------------- drawio start --------------------------------//
var selectedProductServiceId = $("#selected_pdService").val();
if (
localStorage.getItem("req-create-drawio-" + selectedProductServiceId) &&
localStorage.getItem("req-create-drawio-time-" + selectedProductServiceId)
) {
changeBtnText("#btn_modal_req_add_drawio", "drawio 등록 완료");
changeBtnText(
"#modal_req_add_drawio_time",
localStorage.getItem("req-create-drawio-time-" + selectedProductServiceId)
);
}
if (localStorage.getItem("req-create-drawio-image-raw-" + selectedProductServiceId)) {
setDrawioImage(
"req-create-drawio-image-raw-" + selectedProductServiceId,
localStorage.getItem("req-create-drawio-image-raw-" + selectedProductServiceId),
"create"
);
}
// ------------------------- drawio end --------------------------------//
// ------------------------- drawdb start --------------------------------//
selectByIndexedDB("create-reqadd-" + selectedProductServiceId)
.then((result) => {
if (result) {
var armsThumbnail = result.armsThumbnail;
var lastModified = result.lastModified;
var seoulTime = convertToSeoulTimeWithMeridiem(lastModified);
setDrawdbImage("create-reqadd-" + selectedProductServiceId, armsThumbnail, "create");
changeBtnText("#btn_modal_req_add_drawdb", "drawdb 등록 완료");
changeBtnText("#modal_req_add_drawdb_time", seoulTime);
}
})
.catch((e) => {
console.log("REQADD :: create :: selectByIndexedDB :: 조회 실패", e);
});
// ------------------------- drawdb end --------------------------------//
$("#my_modal1").modal("show");
}
function popup_size_setting() {
var height = $(document).height() - 600;
$("#my_modal").on("hidden.bs.modal", function (e) {
$(this).find("form")[0]?.reset();
});
$(".modal-body")
.find(".cke_contents:eq(0)")
.css("height", height + "px");
}
///////////////////////////////////////////////////////////////////////////////
// 프로젝트 진행율
///////////////////////////////////////////////////////////////////////////////
function scheduleUpdate() {
console.log("::: scheduleUpdate :: ganttTaks ->");
console.log(ganttTasks);
if (ganttTasks == null) {
jError("데이터가 존재하지 않습니다.");
return false;
}
bindProjectProgress(ganttTasks);
}
function bindProjectProgress(data) {
let pdservice_progress = data.reduce(
(acc, cur) => {
// default의 경우에만 계산
if (cur.type === "default") {
// 계산식 추가 예정
acc.total_work += cur.total_resource;
acc.plan_work += cur.plan_resource;
acc.plan_progress += cur.plan;
const today = new Date();
const todayFormatted = getDate(new Date(today.getFullYear(), today.getMonth(), today.getDate()));
if (cur.start && cur.end && cur.start < todayFormatted) {
acc.total_performance_progress += cur.performance;
acc.req_count += 1;
}
}
return acc;
},
{
total_work: 0,
plan_work: 0,
plan_progress: 0,
total_performance_progress: 0,
req_count: 0
}
);
let project_progress = 0;
let plan_progress_rate = 0;
let performance_progress_rate = 0;
let performance_capability = 0;
if (pdservice_progress.req_count > 0) {
performance_progress_rate = pdservice_progress.total_performance_progress / pdservice_progress.req_count;
}
if (pdservice_progress.total_work > 0) {
plan_progress_rate = (pdservice_progress.plan_work / pdservice_progress.total_work) * 100.0;
}
project_progress = performance_progress_rate - plan_progress_rate;
performance_capability = (pdservice_progress.total_work * performance_progress_rate) / 100.0;
$("#total_work").val(pdservice_progress.total_work);
$("#planed_work").val(pdservice_progress.plan_work);
$("#performance_capability").val(performance_capability.toFixed(0));
$("#plan_progress_rate").val(plan_progress_rate.toFixed(2));
$("#performance_progress_rate").val(performance_progress_rate.toFixed(2));
$("#project_progress").val(project_progress.toFixed(2));
if (project_progress < 0) {
$("#project_progress").css("color", "#DB2A34");
} else {
$("#project_progress").css("color", "#a4c6ff");
}
}
function resetProjectProgress() {
$("#total_work").val(null);
$("#planed_work").val(null);
$("#performance_capability").val(null);
$("#actual_input").val(null);
$("#plan_progress_rate").val(null);
$("#performance_progress_rate").val(null);
$("#project_progress").val(null);
}
function diff_day(startDate, endDate) {
const start = new Date(startDate);
const end = new Date(endDate);
if (start > end) {
return 0;
}
let result = Math.ceil((end - start) / (1000 * 60 * 60 * 24));
return result;
}
///////////////////////////////////////////////////////////////////////////////
// 우선순위 자동 계산 함수
///////////////////////////////////////////////////////////////////////////////
// HTML의 값(3,4,5,6,7)을 피보나치 수열(8,5,3,2,1)로 매핑
function convertToFibonacci(value) {
var fibonacciMap = {
3: 8, // 매우 긴급/중요/어려움 -> 8
4: 5, // 긴급/중요/어려움 -> 5
5: 3, // 보통 -> 3
6: 2, // 낮음/쉬움 -> 2
7: 1 // 매우 낮음/쉬움 -> 1
};
return fibonacciMap[value] || 0;
}
function calculatePriorityValue(urgency, importance, difficulty) {
// HTML 값을 피보나치 값으로 변환
var urgencyFib = convertToFibonacci(urgency);
var importanceFib = convertToFibonacci(importance);
var difficultyFib = convertToFibonacci(difficulty);
// 우선순위 = (긴급도 * 0.5) + (중요도 * 0.45) - (난이도 * 0.05)
var priorityValue = urgencyFib * 0.5 + importanceFib * 0.45 - difficultyFib * 0.05;
// 소수점 2자리까지 반올림
return Math.round(priorityValue * 100) / 100;
}
function updatePriorityValue() {
var isRegisterPopupMode = $("#my_modal1").is(":visible");
var urgency, importance, difficulty;
if (isRegisterPopupMode) {
urgency = parseFloat($("input[name='addview_req_urgency_options']:checked").val()) || 0;
importance = parseFloat($("input[name='addview_req_importance_options']:checked").val()) || 0;
difficulty = parseFloat($("input[name='addview_req_difficulty_options']:checked").val()) || 0;
} else {
urgency = parseFloat($("input[name='editview_req_urgency_options']:checked").val()) || 0;
importance = parseFloat($("input[name='editview_req_importance_options']:checked").val()) || 0;
difficulty = parseFloat($("input[name='editview_req_difficulty_options']:checked").val()) || 0;
}
var calculatedValue = calculatePriorityValue(urgency, importance, difficulty);
if (isRegisterPopupMode) {
$("#addview_req_priority_value").val(calculatedValue);
} else {
$("#editview_req_priority_value").val(calculatedValue);
}
// 변환된 피보나치 값도 로그에 출력
console.log("우선순위 자동 계산");
console.log("- HTML 값 => 긴급도: " + urgency + ", 중요도: " + importance + ", 난이도: " + difficulty);
console.log(
"- 피보나치 변환 => 긴급도: " +
convertToFibonacci(urgency) +
", 중요도: " +
convertToFibonacci(importance) +
", 난이도: " +
convertToFibonacci(difficulty)
);
console.log("- 최종 계산값: " + calculatedValue);
}
///////////////////////////////////////////////////////////////////////////////
// 우선순위 자동 계산 이벤트 리스너 등록
///////////////////////////////////////////////////////////////////////////////
function initPriorityCalculation() {
// 상세보기 탭의 긴급도, 중요도, 난이도 버튼 클릭 이벤트
$("#editview_req_urgency input[type='radio'], #addview_req_urgency input[type='radio']").on(
"change",
updatePriorityValue
);
$("#editview_req_importance input[type='radio'], #addview_req_importance input[type='radio']").on(
"change",
updatePriorityValue
);
$("#editview_req_difficulty input[type='radio'], #addview_req_difficulty input[type='radio']").on(
"change",
updatePriorityValue
);
}
///////////////////////////////////////////////////////////////////////////////
// drawio, drawdb 관련
///////////////////////////////////////////////////////////////////////////////
function drawio() {
// 로컬 스토리지 초기화
localStorage.clear();
$("#btn_req_add_edit_drawio, #btn_modal_req_add_drawio").on("click", function () {
var selectedJsTreeId = selectedId;
if (this.id === "btn_modal_req_add_drawio") {
if ($("#selected_pdService").val() === "" || $("#selected_pdService").val() === undefined) {
jError("제품(서비스)을 선택해 주세요.");
return false;
}
window.open(
"/reference/drawio?id=" + $("#selected_pdService").val() + "&type=create&splash=0&armsType=reqadd",
"_blank"
);
} else if (this.id === "btn_req_add_edit_drawio") {
if (selectedJsTreeId === "" || selectedJsTreeId === undefined) {
jError("요구사항을 선택해 주세요.");
return false;
}
window.open(
"/reference/drawio?id=" +
selectedJsTreeId +
"&type=update&splash=0&armsType=reqadd&pdServiceId=" +
$("#selected_pdService").val(),
"_blank"
);
} else {
jError("drawio was clicked but id is not matched");
return false;
}
});
}
function drawdb() {
$("#btn_req_add_edit_drawdb, #btn_modal_req_add_drawdb").on("click", function () {
var selectedJsTreeId = selectedId;
if (this.id === "btn_modal_req_add_drawdb") {
if ($("#selected_pdService").val() == "" || $("#selected_pdService").val() == undefined) {
jError("제품(서비스)을 선택해 주세요.");
return false;
}
window.open(
"/reference/drawdb?armsId=" +
$("#selected_pdService").val() +
"&armsMode=create&armsType=reqadd&pdServiceId=" +
$("#selected_pdService").val(),
"_blank"
);
} else if (this.id === "btn_req_add_edit_drawdb") {
if (selectedJsTreeId == "" || selectedJsTreeId == undefined) {
jError("요구사항을 선택해 주세요.");
return false;
}
window.open(
"/reference/drawdb?armsId=" +
selectedJsTreeId +
"&armsMode=update&armsType=reqadd&pdServiceId=" +
$("#selected_pdService").val(),
"_blank"
);
} else {
jError("drawdb was clicked but id is not matched");
return false;
}
});
}
function deleteByIndexedDB(searchKey) {
var request = indexedDB.open(dbName);
request.onerror = function (event) {
console.error("IndexedDB 열기 실패:", event.target.error);
};
request.onsuccess = function (event) {
var db = event.target.result;
if (!db.objectStoreNames.contains(storeName)) {
reject("armsDiagrams 오브젝트 스토어가 존재하지 않습니다.");
return;
}
var transaction = db.transaction([storeName], "readwrite");
var objectStore = transaction.objectStore(storeName);
var deleteRequest = objectStore.delete(searchKey);
deleteRequest.onerror = function (event) {
console.error("데이터 삭제 실패:", event.target.error);
};
deleteRequest.onsuccess = function (event) {
console.log("데이터가 성공적으로 삭제되었습니다.");
};
};
}
function selectByIndexedDB(searchKey) {
return new Promise((resolve, reject) => {
var request = indexedDB.open(dbName);
request.onerror = function (event) {
console.error("IndexedDB 열기 실패:", event.target.error);
reject(event.target.error);
};
request.onsuccess = function (event) {
var db = event.target.result;
if (!db.objectStoreNames.contains(storeName)) {
reject("armsDiagrams 오브젝트 스토어가 존재하지 않습니다.");
return;
}
var transaction = db.transaction([storeName], "readonly");
var objectStore = transaction.objectStore(storeName);
var getRequest = objectStore.get(searchKey);
getRequest.onerror = function (event) {
console.log("데이터 조회 실패:", event.target.error);
reject(event.target.error);
};
getRequest.onsuccess = function (event) {
var result = event.target.result;
if (result) {
console.log("조회된 데이터:", result);
resolve(result);
} else {
console.log("해당 키에 대한 데이터가 없습니다.");
resolve(null);
}
};
};
});
}
function setDrawioImage(localStorageKey, localStorageValue, mode) {
var imageSrcArray = Array(1).fill(localStorageValue);
if (mode === "create") {
addImageToSwiper(imageSrcArray, "modal_req_add_drawio_swiper_container");
$("#modal_req_add_drawio_swiper").show();
} else if (mode === "update") {
$("#req_add_edit_drawio_swiper").show();
addImageToSwiper(imageSrcArray, "req_add_edit_drawio_swiper_container");
}
}
function setDrawdbImage(localStorageKey, localStorageValue, mode) {
var imageSrcArray = Array(1).fill(localStorageValue);
if (mode === "create") {
addImageToSwiper(imageSrcArray, "modal_req_add_drawdb_swiper_container");
$("#modal_req_add_drawdb_swiper").show();
} else if (mode === "update") {
$("#req_add_edit_drawdb_swiper").show();
addImageToSwiper(imageSrcArray, "req_add_edit_drawdb_swiper_container");
}
}
function drawioImageClear() {
console.log("drawioImageClear");
$("#modal_req_add_drawio_swiper").hide();
$("#req_add_edit_drawio_swiper").hide();
}
function drawDBImageClear() {
console.log("drawdbImageClear");
$("#modal_req_add_drawdb_swiper").hide();
$("#req_add_edit_drawdb_swiper").hide();
}
function setDefaultBtnText() {
changeBtnText("#btn_modal_req_add_drawio", "drawio 등록하러 가기");
changeBtnText("#btn_req_add_edit_drawio", "drawio 편집하러 가기");
changeBtnText("#req_add_edit_drawio_time", "");
changeBtnText("#modal_req_add_drawio_time", "");
changeBtnText("#btn_modal_req_add_drawdb", "drawdb 등록하러 가기");
changeBtnText("#btn_req_add_edit_drawdb", "drawdb 편집하러 가기");
changeBtnText("#req_add_edit_drawdb_time", "");
changeBtnText("#modal_req_add_drawdb_time", "");
}