/**
|
* Created by wisestone on 2018-01-03.
|
*/
|
'use strict';
|
|
define([
|
'app',
|
'angular'
|
],
|
function (app, angular) {
|
app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$relProvider', '$downProvider', '$state', '$uibModal', '$q',
|
'$controller', '$injector', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'Priority', 'Severity','IssueStatus', 'IssueTableConfig', '$filter',
|
function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $relProvider, $downProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, Priority, Severity, IssueStatus, IssueTableConfig, $filter) {
|
|
// IssueListController vm, fn 변수 상속.
|
|
$scope.fn.getIssueDetail = getIssueDetail; // 이슈 상세 정보 가져오기
|
$scope.fn.setRelTableColumn = setRelTableColumn;
|
$scope.fn.setDownTableColumn = setDownTableColumn;
|
$scope.fn.addComment = addComment; // 댓글 등록
|
$scope.fn.removeComment = removeComment; // 댓글 삭제
|
$scope.fn.getCommentList = getCommentList; // 댓글 목록 가져오기
|
$scope.fn.getAttachedFiles = getAttachedFiles; // 첨부 파일 목록
|
$scope.fn.makePreviewImages = makePreviewImages; // 이슈 이미지 미리보기 만들기
|
$scope.fn.makeActiveHistory = makeActiveHistory; // 활동 이력 만들기
|
$scope.fn.setFormByIssueTypeCustomFields = setFormByIssueTypeCustomFields; // 이슈 유형에 연결된 사용자 정의 필드 정보를 입력 폼에서 사용할 수 있게 가공한다.
|
$scope.fn.setUseValueByIssueTypeCustomFields = setUseValueByIssueTypeCustomFields; // 이슈에서 사용자가 선택한 사용자 정의 필드 값을 입력 폼에 셋팅한다.
|
$scope.fn.updateActiveHistory = updateActiveHistory; // 활동 내역에서 전체 보기 탭을 눌렀을 때 댓글, 기록 정보를 업데이트 한다.
|
$scope.fn.getChangeIssueStatusList = getChangeIssueStatusList; // 이슈의 현재 상태에서 변경 가능한 이슈 샅태 목록 가져오기
|
$scope.fn.modifyIssueStatus = modifyIssueStatus; // 이슈 상태 변경
|
$scope.fn.modifyDownIssueStatus = modifyDownIssueStatus; //하위 이슈 상태 변경
|
$scope.fn.modifyIssueUser = modifyIssueUser; // 이슈 담당자 변경
|
$scope.fn.modifyIssueDepartment = modifyIssueDepartment; // 이슈 담당부서 변경
|
$scope.fn.initReload = initReload; // 초기화 해야할 할목을 지정하여 다른 이슈를 클릭할 때 초기화해준다.
|
$scope.fn.sendMail = sendMail;
|
$scope.fn.sendMailAll = sendMailAll;
|
$scope.fn.sendMailVo = sendMailVo;
|
$scope.fn.getParameters = getParameters;
|
$scope.fn.getParametersAll = getParametersAll;
|
// 특정 사용자에게 이슈 정보를 메일로 발송
|
$scope.fn.versionView = versionView; // 버전 정보를 표시한다.
|
$scope.fn.reservation = reservation; // 예약 정보를 확인 및 변경 한다.
|
$scope.fn.getIssueListCallBack = getIssueListCallBack;
|
$scope.fn.getDownIssueListCallBack = getDownIssueListCallBack;
|
$scope.fn.addRelationIssue = addRelationIssue; // 연관 이슈 추가
|
$scope.fn.addDownIssue = addDownIssue; // 하위 이슈 추가
|
$scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig; // 연관 이슈 목록 테이블 설정
|
$scope.fn.addDownIssueTableConfig = addDownIssueTableConfig; // 하위 이슈 목록 테이블 설정
|
$scope.fn.setRelTableConfigs = setRelTableConfigs;
|
$scope.fn.setDownTableConfigs = setDownTableConfigs;
|
$scope.fn.containsPartner = containsPartner;
|
$scope.fn.onActivate = onActivate;
|
$scope.fn.issueBack = issueBack;
|
$scope.fn.goParentIssue = goParentIssue;
|
$scope.fn.removeRelationIssue = removeRelationIssue;
|
$scope.fn.removeDownIssue = removeDownIssue;
|
$scope.fn.changeDetailPageRowCount = changeDetailPageRowCount; // 페이지 변경
|
$scope.fn.sendCommonMail = sendCommonMail;
|
$scope.fn.getSubPageContent = getSubPageContent;
|
|
$scope.vm.hideCompleteIssue = true;
|
|
// 이슈 목록 컨트롤러 vm, fn 상속 중
|
$scope.vm.viewer = {}; // 현재 이슈
|
$scope.vm.images = []; // 첨부된 파일 중 이미지 파일
|
$scope.vm.activeTab = "RECODE"; // 활동 내역 탭
|
// 이슈 상태 변경 표시 여부
|
$scope.vm.editor = {
|
issueStatus : false
|
};
|
// 변경 가능한 이슈 상태 목록
|
$scope.vm.issueForm = {
|
issueStatusList : [],
|
issueStatusId : ""
|
};
|
|
// 연관 일감 관련
|
$scope.vm.relationIssueTypes =
|
[
|
{ id: 0, name: $filter("translate")("issue.relationIssueType1") },
|
{ id: 1, name: $filter("translate")("issue.relationIssueType2") },
|
{ id: 2, name: $filter("translate")("issue.relationIssueType3") },
|
{ id: 3, name: $filter("translate")("issue.relationIssueType4") },
|
{ id: 4, name: $filter("translate")("issue.relationIssueType5") },
|
{ id: 5, name: $filter("translate")("issue.relationIssueType6") }
|
];
|
$scope.vm.relationIssueType = $scope.vm.relationIssueTypes[0];
|
|
$scope.vm.form = {
|
issues : [], //연관 일감
|
issuesDown : [], // 하위 일감
|
issuesDownStatus : [], //하위 이슈 상태
|
issueCompanyVos : [],
|
issueIspVos : [],
|
issueHostingVos : []
|
};
|
|
$scope.vm.responseData = {
|
data : []
|
};
|
|
$scope.vm.subPage = {
|
selectedRelPage : 0,
|
selectedRelPageRowCount : String(10),
|
selectedDownPage : 0,
|
selectedDownPageRowCount : String(10)
|
};
|
|
$scope.vm.issueNameDown = ""; // 선택된 하위 일감 이름
|
$scope.vm.autoCompletePageDown = {
|
issue : {
|
page : 0,
|
totalPage : 0
|
},
|
};
|
|
$scope.vm.issueName = ""; // 선택된 연관 일감 이름
|
$scope.vm.issueId = ""; //
|
$scope.vm.parentIssueId = "";
|
$scope.vm.issueTypeId = "";
|
$scope.vm.autoCompletePage = {
|
issue : {
|
page : 0,
|
totalPage : 0
|
},
|
};
|
|
$scope.vm.inheritPartners = "";
|
$scope.vm.downTotalCount = "";
|
|
$scope.vm.relResponseData = [];
|
$scope.vm.relTableConfigs = [];
|
// 테이블 이벤트
|
$scope.relTableEvent = {
|
//removeRelationIssue : removeRelationIssue, // 연관 일감 삭제
|
changeDetailView : changeDetailView
|
};
|
|
$scope.vm.downResponseData = [];
|
$scope.vm.downTableConfigs = [];
|
// 테이블 이벤트
|
$scope.downTableEvent = {
|
//removeDownIssue : removeDownIssue, // 연관 일감 삭제
|
changeDetailView : changeDetailView
|
};
|
|
function changeDetailView(issue) {
|
// 이슈 번호를 저장한 후 이슈 목록으로 이동한다.
|
//$rootScope.$broadcast("makeIssueSearch",issue);
|
$scope.$parent.tableEvent.changeDetailView(issue.id);
|
|
$scope.fn.onActivate();
|
}
|
|
// 뒤로가기 버튼
|
function issueBack() {
|
var index = $scope.$parent.vm.issueIds.length -2;
|
if (index > -1) {
|
var preIssueId = $scope.$parent.vm.issueIds[index];
|
$scope.$parent.vm.issueIds.splice(index + 1, 1);
|
$scope.$parent.tableEvent.changeDetailView(preIssueId, true);
|
}
|
}
|
|
// 상위 이슈 클릭시 상위 이슈로 이동
|
function goParentIssue() {
|
var parentIssueId = $scope.vm.parentIssueId;
|
$scope.$parent.tableEvent.changeDetailView(parentIssueId, true);
|
//하위이슈-> 상위이슈 -> 연관이슈에서 뒤로가기 버튼 클릭 시 하위이슈로 이동되는 문제로 마지막 배열값 제거
|
$scope.$parent.vm.issueIds.pop();
|
}
|
|
// 페이지 변경
|
function changeDetailPageRowCount() {
|
$scope.fn.getIssueDetail(0,0);
|
}
|
|
function onActivate() {
|
window.scroll(0,240);
|
}
|
|
angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
|
|
// 이슈 목록 데이터 갱신
|
/*$scope.$on("getIssueList", function () {
|
$scope.fn.getIssueDetail(0,0);
|
});*/
|
|
// 하위 이슈 삭제
|
function removeDownIssue() {
|
var removeIds = [];
|
var removePermission = true;
|
|
angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
|
if (data.checked && data.modifyPermissionCheck) {
|
removeIds.push(data.id);
|
}
|
|
if (data.checked && !data.modifyPermissionCheck) {
|
removePermission = false;
|
}
|
});
|
|
if (!removePermission) {
|
SweetAlert.swal({
|
html : true,
|
title : $filter("translate")("common.deleteFailed"), // 삭제 실패
|
text : $filter("translate")("project.notHaveDeletePermissionExistsProject"), // "삭제 권한이 없는 프로젝트가 존재합니다."
|
type : "error"
|
});
|
return;
|
}
|
|
if (removeIds.length < 1) {
|
SweetAlert.swal({
|
title : $filter("translate")("common.checkPurgingTargets"), // 삭제 대상 확인
|
text : $filter("translate")("common.selectDestinationDeletion"), // 삭제 대상을 선택하세요.
|
type : "warning"
|
});
|
return;
|
}
|
// 삭제 알림
|
SweetAlert.swal({
|
title : $filter("translate")("issue.downIssueRemove"), // 하위 이슈 삭제
|
text : $filter("translate")("issue.wantToDeleteSelectDownIssueInList"),
|
type : "warning",
|
showCancelButton : true,
|
confirmButtonColor : "#DD6B55",
|
confirmButtonText : $filter("translate")("common.delete"), // 삭제
|
cancelButtonText : $filter("translate")("common.cancel"), // 취소
|
closeOnConfirm : false,
|
closeOnCancel : true
|
},
|
function (isConfirm) {
|
SweetAlert.close();
|
|
if (isConfirm) {
|
$rootScope.spinner = true;
|
|
var contents = {
|
ids : removeIds
|
};
|
|
Issue.modifyParentIssue($resourceProvider.getContent(
|
contents,
|
$resourceProvider.getPageContent(0, 10))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.fn.getIssueDetail(0,0);
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToIssueDeleteIssueDown"), result.data.message.message); // "연관일감 삭제 실패"
|
}
|
$rootScope.spinner = false;
|
});
|
}
|
});
|
|
|
}
|
|
// 연관 이슈 삭제
|
function removeRelationIssue() {
|
var removeIds = [];
|
var removePermission = true;
|
|
angular.forEach($scope.vm.viewer.issueRelationVos, function (data) {
|
if (data.checked && data.modifyPermissionCheck) {
|
removeIds.push(data.id);
|
}
|
|
if (data.checked && !data.modifyPermissionCheck) {
|
removePermission = false;
|
}
|
});
|
|
if (!removePermission) {
|
SweetAlert.swal({
|
html : true,
|
title : $filter("translate")("common.deleteFailed"), // 삭제 실패
|
text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // 삭제 권한이 없는 이슈가 존재합니다.
|
type : "error"
|
});
|
return;
|
}
|
|
if (removeIds.length < 1) {
|
SweetAlert.swal({
|
title : $filter("translate")("common.checkPurgingTargets"), // 삭제 대상 확인
|
text : $filter("translate")("common.selectDestinationDeletion"), // 삭제 대상을 선택하세요.
|
type : "warning"
|
});
|
return;
|
}
|
// 삭제 알림
|
SweetAlert.swal({
|
title : $filter("translate")("issue.relationIssueRemove"), // 연관 이슈 삭제
|
text : $filter("translate")("issue.wantToDeleteSelectRelIssueInList"),
|
type : "warning",
|
showCancelButton : true,
|
confirmButtonColor : "#DD6B55",
|
confirmButtonText : $filter("translate")("common.delete"), // 삭제
|
cancelButtonText : $filter("translate")("common.cancel"), // 취소
|
closeOnConfirm : false,
|
closeOnCancel : true
|
},
|
function (isConfirm) {
|
SweetAlert.close();
|
|
if (isConfirm) {
|
$rootScope.spinner = true;
|
|
var contents = {
|
removeIds : removeIds
|
};
|
|
IssueRelation.delete($resourceProvider.getContent(
|
contents,
|
$resourceProvider.getPageContent(0, 10))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.fn.getIssueDetail(0,0);
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToIssueDeleteIssueRelation"), result.data.message.message); // "연관일감 삭제 실패"
|
}
|
$rootScope.spinner = false;
|
});
|
}
|
});
|
|
|
}
|
|
// 프로젝트 autocomplete page 업데이트
|
function getIssueListCallBack(result) {
|
$scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage;
|
}
|
|
function getDownIssueListCallBack(result) {
|
$scope.vm.autoCompletePageDown.issue.totalPage = result.data.page.totalPage;
|
}
|
|
// 테이블의 연관 이슈 컬럼을 만들어준다.
|
function setRelTableColumn(issueTableConfig) {
|
|
// 연관 이슈 컬럼
|
switch(issueTableConfig.key) {
|
case "RELATION_ISSUE_TYPE" : // 연관 이슈 구분
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueType")
|
.setDName("relationIssueType")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDRenderer("ISSUE_RELATION_TYPE"))
|
/*.setHWidth("width-30 bold")*/
|
/*.setHSort(false)*/
|
break;
|
case "RELATION_ISSUE_TITLE" : // 연관 이슈 제목
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueTitle")
|
.setDName("title")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDRenderer("ISSUE_RELATION_MOVE"))
|
/*.setHWidth("width-60 bold")*/
|
/*.setHSort(true)*/
|
break;
|
case "RELATION_PRIORITY" : // 연관 이슈 우선순위
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.priority")
|
.setDName("priorityVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_COMMON_PRIORITY"));
|
break;
|
case "RELATION_SEVERITY" : // 연관 이슈 중요도
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.importance")
|
.setDName("severityVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_COMMON_SEVERITY"));
|
break;
|
case "RELATION_ASSIGNEE_TEAM" : // 연관 이슈 담당부서
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.assigneeTeam")
|
.setDName("departmentVos.departmentName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_ISSUE_DEPARTMENT"));
|
break;
|
|
case "RELATION_REGISTER" : // 연관 이슈 등록자
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.register")
|
.setDName("registerVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_REGISTER"));
|
break;
|
case "RELATION_PERIOD" : // 연관 이슈 기간
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.period")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_ISSUE_DUE_DATE"));
|
break;
|
case "RELATION_MODIFY_DATE" : // 연관 이슈 최근 변경일
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("common.lastChangeDate")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDName("modifyDate"));
|
break;
|
case "REL_COMPANY" : // 업체
|
$scope.vm.relTableConfigs.push($tableProvider.config()
|
.setHName("common.company")
|
.setDName("companyName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_USE_COMPANY"));
|
break;
|
case "REL_ISP" : // ISP
|
$scope.vm.relTableConfigs.push($tableProvider.config()
|
.setHName("common.isp")
|
.setDName("ispName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_USE_ISP"));
|
break;
|
case "REL_HOSTING" : // HOSTING
|
$scope.vm.relTableConfigs.push($tableProvider.config()
|
.setHName("common.hosting")
|
.setDName("hostingName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("REL_USE_HOSTING"));
|
break;
|
}
|
|
// 사용자 정의 필드 컬럼
|
if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
|
// 만약 이슈 테이블 컬럼명이 표시되지 않으면 이쪽이 문제
|
for (var count in $scope.vm.customFields) {
|
var customField = $scope.vm.customFields[count];
|
|
if (customField.id === Number(issueTableConfig.key.substring(13))) {
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName(customField.name)
|
.setDName("relCustomFieldName" + [count])
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setColumnHint(customField)
|
.setDRenderer("REL_ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
|
break;
|
}
|
}
|
}
|
}
|
|
|
// 테이블의 하위 이슈 컬럼을 만들어준다.
|
function setDownTableColumn(issueTableConfig) {
|
// if (issueTableConfig == null) return;
|
|
// 하위 이슈 컬럼
|
switch(issueTableConfig.key) {
|
case "DOWN_ISSUE_TITLE" : // 하위 이슈 제목
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.downIssueTitle")
|
.setDName("title")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("ISSUE_DOWN_MOVE"));
|
break;
|
|
case "ISSUE_DOWN_STATUS_TYPE" : // 하위 이슈 상태
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.issueStatus")
|
.setDName("issueStatusVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("ISSUE_DOWN_STATUS_TYPE"));
|
break;
|
|
case "DOWN_PRIORITY" : // 하위 이슈 우선순위
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.priority")
|
.setDName("priorityVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_COMMON_PRIORITY"));
|
break;
|
case "DOWN_SEVERITY" : // 하위 이슈 중요도
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.importance")
|
.setDName("severityVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_COMMON_SEVERITY"));
|
break;
|
case "DOWN_ASSIGNEE_TEAM" : // 하위 이슈 담당부서
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.assigneeTeam")
|
.setDName("departmentVos.departmentName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_ISSUE_DEPARTMENT"));
|
break;
|
case "DOWN_REGISTER" : // 하위 이슈 등록자
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.register")
|
.setDName("registerVo.id")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_REGISTER"));
|
break;
|
case "DOWN_PERIOD" : // 하위 이슈 기간
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.period")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_ISSUE_DUE_DATE"));
|
break;
|
case "DOWN_MODIFY_DATE" : // 하위 이슈 최근 변경일
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("common.lastChangeDate")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDName("modifyDate"));
|
break;
|
case "DOWN_COMPANY" : // 업체
|
$scope.vm.downTableConfigs.push($tableProvider.config()
|
.setHName("common.company")
|
.setDName("companyName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_USE_COMPANY"));
|
break;
|
case "DOWN_ISP" : // ISP
|
$scope.vm.downTableConfigs.push($tableProvider.config()
|
.setHName("common.isp")
|
.setDName("ispName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_USE_ISP"));
|
break;
|
case "DOWN_HOSTING" : // HOSTING
|
$scope.vm.downTableConfigs.push($tableProvider.config()
|
.setHName("common.hosting")
|
.setDName("hostingName")
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setDRenderer("DOWN_USE_HOSTING"));
|
break;
|
}
|
|
// 사용자 정의 필드 컬럼
|
if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
|
// 만약 이슈 테이블 컬럼명이 표시되지 않으면 이쪽이 문제
|
for (var count in $scope.vm.customFields) {
|
var customField = $scope.vm.customFields[count];
|
|
if (customField.id === Number(issueTableConfig.key.substring(13))) {
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName(customField.name)
|
.setDName("downCustomFieldName" + [count])
|
.setDType("renderer")
|
.setHWidth("bold " + issueTableConfig.width)
|
.setDAlign("text-center")
|
.setColumnHint(customField)
|
.setDRenderer("DOWN_ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
|
break;
|
}
|
}
|
}
|
}
|
|
|
// 연관 이슈 테이블 설정
|
function makeRelTableConfigs() {
|
$scope.vm.relTableConfigs = [];
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setDType("checkbox")
|
.setHWidth("width-20-p")
|
.setDAlign("text-center"))
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueType")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-60-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_RELATION_TYPE"))
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueTitle")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-60-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_RELATION_MOVE"))
|
/*if($scope.vm.viewer.modifyPermissionCheck) {
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueDelete")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-40-p bold")
|
.setDRenderer("ISSUE_RELATION_DELETE")
|
.setHSort(false)
|
.setDAlign("text-center"))
|
}*/
|
angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) {
|
// 표시 대상인 컬럼만 화면에 그려준다.
|
if (issueTableConfig.display) {
|
// 테이블의 컬럼을 만들어준다.
|
$scope.fn.setRelTableColumn(issueTableConfig);
|
}
|
});
|
}
|
|
// 하위 이슈 테이블 설정
|
function makeDownTableConfigs() {
|
$scope.vm.downTableConfigs = [];
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setDType("checkbox")
|
.setHWidth("width-20-p")
|
.setDAlign("text-center"))
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.downIssueTitle")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-60-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_DOWN_MOVE"))
|
/*if($scope.vm.viewer.modifyPermissionCheck){
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.relationIssueDelete")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-40-p bold")
|
.setDRenderer("ISSUE_DOWN_DELETE")
|
.setHSort(false)
|
.setDAlign("text-center"))
|
}*/
|
|
angular.forEach($scope.vm.downTableConfigs, function (issueTableConfig) {
|
// 표시 대상인 컬럼만 화면에 그려준다.
|
if (issueTableConfig.display) {
|
// 테이블의 컬럼을 만들어준다.
|
$scope.fn.setDownTableColumn(issueTableConfig);
|
}
|
});
|
}
|
|
// 연관 이슈 테이블 설정
|
function setRelTableConfigs(issueTableConfigVo) {
|
if (issueTableConfigVo == null) {
|
makeRelTableConfigs();
|
return;
|
}
|
var issueTableConfigs = issueTableConfigVo.issueTableConfigs;
|
|
// 연관 이슈 목록 테이블 설정 값을 가져와서 적용한다.
|
if ($rootScope.isDefined(issueTableConfigs)) {
|
// 이슈 테이블 설정 정보를 저장 한다.
|
|
$scope.vm.issueRelTableConfigs = [];
|
$scope.vm.issueRelTableConfigs = JSON.parse(issueTableConfigs);
|
$scope.vm.issueRelTableConfigs.sort(function (a, b) {
|
return parseInt(a.position) < parseInt(b.position) ? -1 : parseInt(a.position) > parseInt(b.position) ? 1 : 0;
|
});
|
|
$scope.vm.relTableConfigs = [];
|
/* $scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueType")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-30-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_RELATION_TYPE"))
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueTitle")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-60-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_RELATION_MOVE"))*/
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setDType("checkbox")
|
.setHWidth("width-20-p")
|
.setDAlign("text-center"))
|
angular.forEach($scope.vm.issueRelTableConfigs, function (issueTableConfig) {
|
// 표시 대상인 컬럼만 화면에 그려준다.
|
if (issueTableConfig.display) {
|
// 테이블의 컬럼을 만들어준다.
|
$scope.fn.setRelTableColumn(issueTableConfig);
|
|
}
|
});
|
/*if($scope.vm.viewer.modifyPermissionCheck) {
|
$scope.vm.relTableConfigs.push($relProvider.config()
|
.setHName("issue.relationIssueDelete")
|
.setDType("renderer")
|
.setHWidth("width-40-p bold")
|
.setDRenderer("ISSUE_RELATION_DELETE")
|
.setHSort(false)
|
.setDAlign("text-center"))
|
}*/
|
} else {
|
makeRelTableConfigs();
|
}
|
|
}
|
|
// 하위 이슈 상세 조회 결과 설정
|
function setDownTableConfigs(issueTableConfigVo) {
|
if (issueTableConfigVo == null) return;
|
var issueTableConfigs = issueTableConfigVo.issueTableConfigs;
|
|
// 연관 이슈 목록 테이블 설정 값을 가져와서 적용한다.
|
if ($rootScope.isDefined(issueTableConfigs)) {
|
// 이슈 테이블 설정 정보를 저장 한다.
|
$scope.vm.issueDownTableConfigs = [];
|
$scope.vm.issueDownTableConfigs = JSON.parse(issueTableConfigs);
|
$scope.vm.issueDownTableConfigs.sort(function (a, b) {
|
return parseInt(a.position) < parseInt(b.position) ? -1 : parseInt(a.position) > parseInt(b.position) ? 1 : 0;
|
});
|
$scope.vm.downTableConfigs = [];
|
/* $scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.downIssueTitle")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setHWidth("width-60-p bold")
|
.setHSort(false)
|
.setDRenderer("ISSUE_DOWN_MOVE"))*/
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setDType("checkbox")
|
.setHWidth("width-20-p")
|
.setDAlign("text-center"))
|
angular.forEach($scope.vm.issueDownTableConfigs, function (issueTableConfig) {
|
// 표시 대상인 컬럼만 화면에 그려준다.
|
if (issueTableConfig.display) {
|
// 테이블의 컬럼을 만들어준다.
|
$scope.fn.setDownTableColumn(issueTableConfig);
|
}
|
});
|
/*if($scope.vm.viewer.modifyPermissionCheck) {
|
$scope.vm.downTableConfigs.push($downProvider.config()
|
.setHName("issue.relationIssueDelete")
|
.setDType("renderer")
|
.setHWidth("width-40-p bold")
|
.setDRenderer("ISSUE_DOWN_DELETE")
|
.setHSort(false)
|
.setDAlign("text-center"))
|
}*/
|
} else {
|
makeDownTableConfigs();
|
}
|
}
|
|
// 연관 이슈 추가
|
function addRelationIssue() {
|
if ($scope.vm.issueName.length == 0 || $scope.vm.form.issues.length == 0
|
|| $scope.vm.issueName != $scope.vm.form.issues[0].title) {
|
SweetAlert.error($filter("translate")("issue.errorSelectRelationIssue"), "");
|
return;
|
}
|
|
var contents = {
|
relationIssueType : $scope.vm.relationIssueType.id,
|
issueId : $rootScope.currentDetailIssueId,
|
relationIssueId : $scope.vm.form.issues[0].id,
|
priorityName : $scope.vm.priorityName
|
};
|
|
IssueRelation.add($resourceProvider.getContent(
|
contents,
|
$resourceProvider.getPageContent(0, 10))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.fn.getIssueDetail(0,0);
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "연관일감 생성 실패"
|
}
|
});
|
}
|
|
// 하위 이슈 추가
|
function addDownIssue() {
|
if ($scope.vm.issueNameDown.length == 0 || $scope.vm.form.issuesDown.length == 0
|
|| $scope.vm.issueNameDown != $scope.vm.form.issuesDown[0].title) {
|
SweetAlert.error($filter("translate")("issue.errorSelectDownIssue"), "");
|
return;
|
}
|
|
let inheritYn = false;
|
if ($scope.vm.inheritPartners) {
|
SweetAlert.swal({
|
title : $filter("translate")("issue.addDownIssue"), // 하위 이슈 추가
|
text : $filter("translate")("issue.wantToInheritPartnersOfParentIssue"), // 상위이슈의 파트너 정보(업체/ISP/호스팅)를 적용시키겠습니까?
|
type : "warning",
|
showCancelButton : true,
|
confirmButtonColor : "#DD6B55",
|
confirmButtonText : $filter("translate")("common.ok"), // 네
|
cancelButtonText : $filter("translate")("common.no"), // 아니오
|
closeOnConfirm : false,
|
closeOnCancel : false
|
},
|
function (isConfirm) {
|
if (isConfirm) {
|
inheritYn = true;
|
}
|
|
var ids = [];
|
if ($scope.vm.form.issuesDown[0].id != null) {
|
ids.push($scope.vm.form.issuesDown[0].id);
|
}
|
|
var contents = {
|
issueId : $rootScope.currentDetailIssueId,
|
ids : ids,
|
parentIssueId : $rootScope.currentDetailIssueId,
|
inheritYn : inheritYn
|
};
|
|
Issue.modifyParentIssue($resourceProvider.getContent(
|
contents,
|
$resourceProvider.getPageContent(0, 10))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
SweetAlert.close();
|
$scope.fn.getIssueDetail(0,0);
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "하위이슈 생성 실패"
|
}
|
});
|
});
|
}
|
}
|
|
// 이슈명을 클릭하면 이슈 상세 정보를 조회한다.
|
// $rootScope.$on("getIssueDetail", function (event, args) {
|
// $scope.vm.viewer.id = args["id"];
|
// $scope.fn.getIssueDetail();
|
// });
|
|
// 이슈명을 클릭하면 이슈 상세 정보를 조회한다.
|
// $scope.$on("getIssueDetail", function (event, args) {
|
// $scope.vm.viewer.id = args["id"];
|
// $scope.fn.getIssueDetail();
|
// });
|
|
// 이메일 보낸후 상세화면 갱신
|
// $rootScope.$on("getIssueDetail", function (event, args) {
|
// $scope.fn.getIssueDetail();
|
// });
|
|
$scope.$on("getIssueDetail", function (event, args) {
|
$scope.fn.getIssueDetail(0,0);
|
});
|
|
$scope.$watch(function() {
|
return $rootScope.currentDetailIssueId;
|
}, function() {
|
if ($rootScope.currentDetailIssueId != null) {
|
$scope.vm.viewer.id = $rootScope.currentDetailIssueId;
|
$scope.fn.getIssueDetail(0,0);
|
}
|
}, true);
|
|
// 초기화 해야할 항목을 지정하여 다른 이슈를 클릭할 때 초기화해준다.
|
function initReload() {
|
$scope.vm.editor.issueStatus = false;
|
$scope.vm.issueForm.issueStatusList = [];
|
$scope.vm.issueForm.issueStatusId = "";
|
$scope.vm.issueTypeId = $rootScope.getCurrentIssueTypeId();
|
// if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') {
|
// $scope.$apply();
|
// }
|
}
|
|
// 이슈 상태 변경
|
function modifyIssueStatus() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueModifyStatus.html',
|
size : "md",
|
controller : 'issueModifyStatusController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueIds : [$scope.vm.viewer.id],
|
projectId : $scope.vm.viewer.projectVo.id,
|
downIssuesStatus : $scope.vm.form.issuesDownStatus
|
};
|
}
|
}
|
});
|
}
|
|
function modifyDownIssueStatus() {
|
var issueIds = [];
|
|
angular.forEach($scope.vm.viewer.issueDownVos, function (data) {
|
if (data.checked) {
|
issueIds.push(data.id);
|
//$scope.vm.projectId = data.projectId;
|
}
|
});
|
|
if (issueIds.length < 1) {
|
SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // 선택 대상 확인, 상태 변경할 이슈를 선택하세요.
|
return;
|
}
|
|
$uibModal.open({
|
templateUrl : 'views/issue/downIssueModifyStatus.html',
|
size : "md",
|
controller : 'downIssueModifyStatusController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueTypeId : $scope.vm.viewer.issueTypeVo.id,
|
issueIds : [$scope.vm.viewer.id],
|
//downIssues : $scope.vm.viewer.issueDownVos,
|
downIssues : issueIds,
|
projectId : $scope.vm.viewer.projectVo.id
|
};
|
}
|
}
|
});
|
}
|
|
// 담당자 변경
|
function modifyIssueUser() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueModifyUser.html',
|
size : "md",
|
controller : 'issueModifyUserController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
userVos : [$scope.vm.form.issues[0].userVos],
|
id : [$scope.vm.form.issues[0].id],
|
projectId : [$scope.vm.form.issues[0].projectVo.id],
|
project : [$scope.vm.form.issues[0].projectVo]
|
};
|
}
|
}
|
});
|
}
|
|
// 담당부서 변경
|
function modifyIssueDepartment() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueModifyDepartment.html',
|
size : "md",
|
controller : 'issueModifyDepartmentController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
departmentVos : $scope.vm.form.issues[0].departmentVos,
|
id : $scope.vm.form.issues[0].id,
|
projectId : $scope.vm.form.issues[0].projectVo.id,
|
project : $scope.vm.form.issues[0].projectVo,
|
issueTypeId : $scope.vm.form.issues[0].issueTypeVo.id
|
};
|
}
|
}
|
});
|
}
|
|
// 연관 이슈 목록 테이블 설정
|
function addRelationIssueTableConfig() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueAddRelationTableConfig.html',
|
size : "lg",
|
controller : 'issueAddRelationTableConfigController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueTypeId : $scope.vm.viewer.issueTypeVo.id
|
};
|
}
|
}
|
});
|
}
|
|
|
// 하위 이슈 목록 테이블 설정
|
function addDownIssueTableConfig() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueAddDownTableConfig.html',
|
size : "lg",
|
controller : 'issueAddDownTableConfigController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueTypeId : $scope.vm.viewer.issueTypeVo.id
|
};
|
|
}
|
}
|
});
|
}
|
|
// 변경 가능한 이슈 상태 목록을 조회하고 수정 모드로 화면을 변경한다.
|
function getChangeIssueStatusList(checkPermission) {
|
// 수정 권한이 없으면 이슈 상태 변경 불가
|
if (!checkPermission) {
|
return;
|
}
|
|
// 수정 모드로 변경
|
$scope.vm.editor.issueStatus = true;
|
|
var content = {
|
id : $scope.vm.viewer.issueStatusVo.id,
|
issueTypeId : $scope.vm.viewer.issueTypeVo.id
|
};
|
|
IssueStatus.findNextIssueStatus($resourceProvider.getContent(
|
content,
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.vm.issueForm.issueStatusList = result.data.data;
|
}
|
else {
|
SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "이동 가능한 이슈 상태 목록 조회 오류"
|
}
|
});
|
}
|
|
// 업체/ISP/호스팅 이름이 포함 여부 확인
|
function containsPartner(name) {
|
var result = false;
|
|
if ($scope.vm.viewer.usePartnerVos != null) {
|
$scope.vm.viewer.usePartnerVos.forEach(function (partnerVo) {
|
if (name === partnerVo.name) {
|
result = true;
|
}
|
});
|
}
|
return result;
|
|
}
|
function getSubPageContent(relPage, relPageSize, downPage, downPageSize) {
|
return {
|
relPage: relPage,
|
relPageSize: relPageSize,
|
downPage: downPage,
|
downPageSize: downPageSize
|
};
|
}
|
|
// 이슈 상세 정보 조회
|
function getIssueDetail(selectedRelPage, selectedDownPage) {
|
$rootScope.spinner = true;
|
if (selectedRelPage < 0) {
|
selectedRelPage = 0;
|
}
|
if (selectedDownPage < 0) {
|
selectedDownPage = 0;
|
}
|
// 현재 페이지 정보
|
var currentRelPage = 0;
|
var currentDownPage = 0;
|
|
// 쿠키에 선택한 페이지 정보가 없으면 기본 페이지 정보 0 을 저장
|
if (angular.isUndefined(selectedRelPage) || selectedRelPage === "") {
|
currentRelPage = $scope.vm.page.selectedRelPage;
|
}
|
else {
|
currentRelPage = selectedRelPage;
|
}
|
|
if (angular.isUndefined(selectedDownPage) || selectedDownPage === "") {
|
currentDownPage = $scope.vm.page.selectedDownPage;
|
}
|
else {
|
currentDownPage = selectedDownPage;
|
}
|
|
// 초기화 해야할 항목을 지정하여 다른 이슈를 클릭할 때 초기화해준다.
|
$scope.fn.initReload();
|
// $scope.fn.getRelTableConfigs();
|
// $scope.fn.getDownTableConfigs();
|
|
var pageContent = $scope.fn.getSubPageContent(currentRelPage, $scope.vm.subPage.selectedRelPageRowCount
|
, currentDownPage, $scope.vm.subPage.selectedDownPageRowCount);
|
|
var content = $resourceProvider.getContent(
|
{
|
id : $scope.vm.viewer.id
|
, issueTypeId : (function () {
|
var id = "";
|
if ($rootScope.allIssueList) {
|
id = -1;
|
} else {
|
id = $rootScope.getCurrentIssueTypeId();
|
}
|
return id;
|
})()
|
, deep : "02", pageContent
|
, hideCompleteIssue : $scope.vm.hideCompleteIssue
|
}, null);
|
|
Issue.detail(content).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
if (angular.isDefined(result.data.data)) {
|
|
$scope.vm.subPage.selectedRelPage = currentRelPage + 1;
|
$scope.vm.subPage.selectedDownPage = currentDownPage + 1;
|
$scope.vm.responseData = result.data.data;
|
|
$scope.vm.viewer = angular.copy(result.data.data);
|
// 이슈 이미지 미리 보기 만들기
|
$scope.fn.makePreviewImages(result.data.data.attachedFileVos);
|
// 활동 이력 만들기
|
$scope.fn.makeActiveHistory();
|
|
if ($rootScope.isDefined($scope.vm.viewer.parentIssueVo)) {
|
$scope.vm.parentIssueId = $scope.vm.viewer.parentIssueVo.id;
|
}
|
|
$scope.vm.viewer.startDate = result.data.data.startDate == null ? "common.unspecified" : result.data.data.startDate; // 미지정
|
$scope.vm.viewer.completeDate = result.data.data.completeDate == null ? "common.unspecified" : result.data.data.completeDate; // 미지정
|
|
$scope.vm.rangeDate = result.data.data.startDate + "~" + result.data.data.completeDate
|
|
// 이슈 유형에 연결된 사용자 정의 필드 정보를 입력 폼에서 사용할 수 있게 가공한다.
|
$scope.fn.setFormByIssueTypeCustomFields(result.data.data.issueTypeCustomFieldVos);
|
// 이슈에서 사용자가 선택한 사용자 정의 필드 값을 입력 폼에 셋팅한다.
|
$scope.fn.setUseValueByIssueTypeCustomFields(result.data.data.issueCustomFieldValueVos);
|
|
// 연관 일감
|
$scope.vm.issueName = "";
|
$scope.vm.form.issues = [];
|
$scope.vm.form.issues.push(result.data.data);
|
$scope.vm.form.issuesDown = [];
|
$scope.vm.form.issuesDownStatus = [];// 하위이슈 상태
|
$scope.vm.form.issuesDown.push(result.data.data);
|
|
var issueTableConfigVos = result.data.data.issueTableConfigVos;
|
$scope.fn.setRelTableConfigs(issueTableConfigVos[0]);
|
$scope.fn.setDownTableConfigs(issueTableConfigVos[1]);
|
|
// 연관 이슈 반복문
|
if (result.data.data.issueRelationVos !== null) {
|
angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){
|
issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name;
|
$scope.vm.form.issues.push(issueRelationVo.issueRelation);
|
});
|
result.data.data.issueRelationVos.sort(function (a, b) { //최근변경일 내림차순
|
return a.modifyDate > b.modifyDate ? -1 : a.modifyDate < b.modifyDate ? 1 : 0;
|
});
|
}
|
|
// 하위 이슈 반목문
|
if (result.data.data.issueDownVos !== null){
|
angular.forEach(result.data.data.issueDownVos, function (issueDownVo){
|
//$scope.vm.form.issuesDown.push(issueDownVo.issueDown);
|
$scope.vm.form.issuesDown.push(issueDownVo);
|
$scope.vm.form.issuesDownStatus.push(issueDownVo.issueStatusVo.issueStatusType);
|
});
|
result.data.data.issueDownVos.sort(function (a, b) { //최근변경일 내림차순
|
return a.modifyDate > b.modifyDate ? -1 : a.modifyDate < b.modifyDate ? 1 : 0;
|
});
|
}
|
$scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos;
|
$scope.vm.viewer.issueDownVos = result.data.data.issueDownVos;
|
|
if ($rootScope.workProject.id > -1 && result.data.data.projectVo !== null) {
|
$rootScope.changeLastProject(result.data.data.projectVo.id, false, false);
|
}
|
|
$scope.vm.inheritPartners = result.data.data.issueTypeVo.inheritPartners;
|
$scope.vm.downTotalCount = result.data.data.downTotalCount;
|
}
|
}
|
else {
|
SweetAlert.swal($filter("translate")("issue.errorIssueDetails"), result.data.message.message, "error"); // 이슈 상세 정보 조회 오류
|
}
|
$rootScope.spinner = false;
|
});
|
}
|
|
// 이슈 이미지 미리 보기 만들기
|
function makePreviewImages(attachedFileVos) {
|
// 미리보기 이미지 초기화
|
$scope.vm.images = [];
|
|
angular.forEach(attachedFileVos, function (attachedFileVo, $index) {
|
if (attachedFileVo.contentType.indexOf("image") !== -1) {
|
$scope.vm.images.push({
|
id : $index,
|
title : attachedFileVo.name,
|
alt : attachedFileVo.name,
|
thumbUrl : attachedFileVo.path.replace(/\\/gi, "/"),
|
url : attachedFileVo.path.replace(/\\/gi, "/")
|
});
|
}
|
});
|
}
|
|
// 이슈 유형에 연결된 사용자 정의 필드 정보를 입력 폼에서 사용할 수 있게 가공한다.
|
function setFormByIssueTypeCustomFields(issueTypeCustomFields) {
|
$scope.vm.viewer.issueCustomFields = [];
|
|
angular.forEach(issueTypeCustomFields, function (issueTypeCustomField) {
|
switch (issueTypeCustomField.customFieldVo.customFieldType) {
|
case "INPUT" :
|
case "SINGLE_SELECT" :
|
case "NUMBER" :
|
case "DATETIME" :
|
case "IP_ADDRESS" :
|
case "EMAIL" :
|
case "SITE" :
|
case "TEL" :
|
issueTypeCustomField.useValues = "";
|
break;
|
|
case "MULTI_SELECT" :
|
issueTypeCustomField.useValues = [];
|
break;
|
}
|
|
$scope.vm.viewer.issueCustomFields.push(issueTypeCustomField);
|
});
|
}
|
|
// 이슈에서 사용자가 선택한 사용자 정의 필드 값을 입력 폼에 셋팅한다.
|
function setUseValueByIssueTypeCustomFields(issueCustomFieldValues) {
|
angular.forEach(issueCustomFieldValues, function (issueCustomFieldValue) {
|
for (var count in $scope.vm.viewer.issueCustomFields) {
|
var issueCustomField = $scope.vm.viewer.issueCustomFields[count];
|
|
if (issueCustomField.customFieldVo.id === issueCustomFieldValue.customFieldVo.id) {
|
// 멀티셀렉트 일때
|
if (angular.isArray(issueCustomField.useValues)) {
|
issueCustomField.useValues.push({
|
value : issueCustomFieldValue.useValue
|
});
|
}
|
else {
|
issueCustomField.useValues = issueCustomFieldValue.useValue;
|
}
|
|
break;
|
}
|
}
|
});
|
}
|
``
|
function updateActiveHistory() {
|
$scope.vm.activeTab = 'ALL';
|
$scope.fn.makeActiveHistory();
|
}
|
|
// 활동 이력 만들기
|
function makeActiveHistory() {
|
$scope.vm.viewer.activeParentHistory = [];
|
$scope.vm.viewer.activeHistory = [];
|
$scope.vm.viewer.activeParentMailHistory = [];
|
$scope.vm.viewer.activeAllMailAndReplyHistory = []; //상위+하위 메일,댓글 히스토리
|
var oriMailHistory = [];
|
var oriCommentHistory = [];
|
|
if ($scope.vm.viewer.issueHistoryVos != null && $scope.vm.viewer.issueHistoryVos.length > 0) {
|
// 상위이슈 메일 히스토리
|
for (var i=0; i<$scope.vm.viewer.issueHistoryVos.length; i++) {
|
if ($scope.vm.viewer.issueHistoryVos[i].issueHistoryType === "SEND") {
|
oriMailHistory.push($scope.vm.viewer.issueHistoryVos[i]);
|
}
|
}
|
//$scope.vm.viewer.activeParentMailHistory = angular.copy(oriMailHistory);
|
}
|
|
// 상위이슈 댓글 히스토리
|
if ($scope.vm.viewer.issueCommentVos != null && $scope.vm.viewer.issueCommentVos.length > 0) {
|
for (var i=0; i<$scope.vm.viewer.issueCommentVos.length; i++) {
|
oriCommentHistory.push($scope.vm.viewer.issueCommentVos[i]);
|
}
|
}
|
|
$scope.vm.viewer.activeAllMailAndReplyHistory = oriMailHistory.concat(oriCommentHistory);
|
|
// 하위이슈 히스토리
|
if ($scope.vm.viewer.issueDownVos != null && $scope.vm.viewer.issueDownVos.length > 0) {
|
$scope.vm.viewer.activeDownHistory = []; //하위이슈 히스토리만
|
$scope.vm.viewer.downComment = []; //하위이슈 댓글만
|
$scope.vm.viewer.activeDownAllHistory = []; //하위이슈 히스토리+댓글
|
$scope.vm.viewer.activeDownMailAndReplyHistory = []; //하위 메일+댓글 히스토리
|
var downTitle = "";
|
var oriDownHistory = [];
|
var oriDownCommentHistory = [];
|
var oriDownMailHistory = [];
|
|
// 하위이슈 히스토리
|
for (var i=0; i<$scope.vm.viewer.issueDownVos.length; i++){
|
oriDownHistory.push($scope.vm.viewer.issueDownVos[i].issueHistoryVos);
|
|
// 하위이슈 메일 기록
|
for (var j=0; j<$scope.vm.viewer.issueDownVos[i].issueHistoryVos.length; j++) {
|
if($scope.vm.viewer.issueDownVos[i].issueHistoryVos[j].issueHistoryType === "SEND") {
|
oriDownMailHistory.push($scope.vm.viewer.issueDownVos[i].issueHistoryVos[j]);
|
}
|
}
|
// 하위이슈 댓글 기록
|
for (var k=0; k<$scope.vm.viewer.issueDownVos[i].issueCommentVos.length; k++) {
|
oriDownCommentHistory.push($scope.vm.viewer.issueDownVos[i].issueCommentVos[k]);
|
}
|
}
|
// 하위이슈 메일+댓글 저장
|
$scope.vm.viewer.activeDownMailAndReplyHistory = oriDownCommentHistory.concat(oriDownMailHistory);
|
for (var i=0; i<$scope.vm.viewer.activeDownMailAndReplyHistory.length; i++){
|
downTitle = "<div class='dot' style='margin-bottom: -8px'>*하위이슈 : "+$scope.vm.viewer.activeDownMailAndReplyHistory[i].title+"</div>";
|
$scope.vm.viewer.activeDownMailAndReplyHistory[i].desc = downTitle + $scope.vm.viewer.activeDownMailAndReplyHistory[i].description;
|
}
|
|
$scope.vm.viewer.activeDownMailAndReplyHistory.sort(function (a, b) { //"MAIL_AND_REPLY_DOWN" 내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
for (var i=0; i<oriDownHistory.length; i++){
|
if ($scope.vm.viewer.activeDownHistory === "") {
|
$scope.vm.viewer.activeDownHistory = oriDownHistory[i];
|
} else {
|
$scope.vm.viewer.activeDownHistory = $scope.vm.viewer.activeDownHistory.concat(oriDownHistory[i]);
|
}
|
}
|
|
for (var i=0; i<$scope.vm.viewer.activeDownHistory.length; i++){
|
downTitle = "<div class='dot' style='margin-bottom: -8px'>*하위이슈 : "+$scope.vm.viewer.activeDownHistory[i].title+"</div>";
|
$scope.vm.viewer.activeDownHistory[i].desc = downTitle + $scope.vm.viewer.activeDownHistory[i].description;
|
}
|
$scope.vm.viewer.activeDownHistory.sort(function (a, b) { //내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
// 하위이슈 댓글 히스토리
|
for (var i=0; i<oriDownCommentHistory.length; i++) {
|
if ($scope.vm.viewer.downComment === "") {
|
$scope.vm.viewer.downComment = oriDownCommentHistory[i];
|
} else {
|
$scope.vm.viewer.downComment = $scope.vm.viewer.downComment.concat(oriDownCommentHistory[i]);
|
}
|
}
|
$scope.vm.viewer.issueDownVos.sort(function (a, b) { //내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
$scope.vm.viewer.activeDownAllHistory = $scope.vm.viewer.downComment.concat($scope.vm.viewer.activeDownHistory);
|
|
$scope.vm.viewer.activeDownAllHistory.sort(function (a, b) { //"RECODE_DOWN" 내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
$scope.vm.viewer.activeParentHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
|
$scope.vm.viewer.activeHistory = $scope.vm.viewer.activeParentHistory.concat($scope.vm.viewer.activeDownAllHistory);
|
$scope.vm.viewer.activeAllMailAndReplyHistory = $scope.vm.viewer.activeAllMailAndReplyHistory.concat($scope.vm.viewer.activeDownMailAndReplyHistory);
|
|
}else {
|
$scope.vm.viewer.activeParentHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
|
$scope.vm.viewer.activeHistory = $scope.vm.viewer.issueCommentVos.concat($scope.vm.viewer.issueHistoryVos);
|
}
|
|
$scope.vm.viewer.activeHistory.sort(function (a, b) { //"ALL" 내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
$scope.vm.viewer.activeParentHistory.sort(function (a, b) { //"RECODE" 내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
|
$scope.vm.viewer.activeAllMailAndReplyHistory.sort(function (a, b) { //"MAIL_AND_REPLY" 내림차순
|
return a.registerDate > b.registerDate ? -1 : a.registerDate < b.registerDate ? 1 : 0;
|
});
|
}
|
|
// 댓글 등록하기
|
function addComment() {
|
var content = {
|
issueId : $scope.vm.viewer.id,
|
description : $rootScope.preventXss($scope.vm.viewer.comment)
|
};
|
|
IssueComment.add($resourceProvider.getContent(
|
content,
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.vm.viewer.comment = "";
|
$scope.fn.getCommentList();
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToRegisterComments"), result.data.message.message); // 댓글 등록 실패
|
}
|
});
|
}
|
|
// 댓글 삭제
|
function removeComment(comment) {
|
// 삭제 알림
|
SweetAlert.swal({
|
title : $filter("translate")("issue.deleteComments"), // "댓글 삭제"
|
text : $filter("translate")("issue.wantToDeleteTheSelectedComments"), // "선택한 댓글을 삭제하겠습니까? 삭제된 댓글은 복구할 수 없습니다."
|
type : "warning",
|
showCancelButton : true,
|
confirmButtonColor : "#DD6B55",
|
confirmButtonText : $filter("translate")("common.delete"), // "삭제"
|
cancelButtonText : $filter("translate")("common.cancel"), // "취소"
|
closeOnConfirm : false,
|
closeOnCancel : true
|
},
|
function (isConfirm) {
|
SweetAlert.close();
|
|
if (isConfirm) {
|
$rootScope.spinner = true;
|
|
IssueComment.remove($resourceProvider.getContent(
|
{removeIds : [comment.id]},
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$timeout(function () {
|
SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공
|
}, 100);
|
$scope.fn.getCommentList();
|
}
|
else {
|
$timeout(function () {
|
SweetAlert.error($filter("translate")("issue.failedToDeleteComments"), result.data.message.message); // "댓글 삭제 실패"
|
}, 100);
|
}
|
|
$rootScope.spinner = false;
|
});
|
}
|
});
|
}
|
|
// 댓글 목록 가져오기
|
function getCommentList() {
|
IssueComment.find($resourceProvider.getContent(
|
{issueId : $scope.vm.viewer.id},
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.vm.viewer.issueCommentVos = result.data.data;
|
$scope.fn.updateActiveHistory();
|
}
|
else {
|
SweetAlert.swal({
|
title : $filter("translate")("issue.failedToGetCommentListData"), // "댓글 목록 데이터 가져오기 실패"
|
text : result.message.message,
|
type : "error"
|
});
|
}
|
});
|
}
|
|
// 첨부 파일 목록
|
function getAttachedFiles() {
|
var content = {
|
issueId : $scope.vm.viewer.id
|
};
|
|
AttachedFile.find($resourceProvider.getContent(
|
content,
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$scope.vm.viewer.attachedFileVos = result.data.data;
|
}
|
else {
|
SweetAlert.error($filter("translate")("issue.failedToAttachmentList"), result.message.message); // "첨부 파일 목록 조회 실패"
|
}
|
});
|
}
|
|
function sendMailVo(partnerVos) {
|
$scope.fn.sendMail($scope.fn.getParametersAll(), $scope.fn.getParameters(null, partnerVos));
|
}
|
|
function sendMailAll() {
|
var param = $scope.fn.getParametersAll();
|
$scope.fn.sendMail(param, param);
|
}
|
|
// 특정 사용자에게 이슈를 메일로 발송
|
function sendMail(partnersAll, partners) {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueSendMailPartners.html',
|
size : "md",
|
controller : 'issueSendMailPartnersController',
|
backdrop : 'static',
|
resolve : {
|
parameter : {
|
partnersAll : partnersAll,
|
partners : partners,
|
issueId : $scope.vm.viewer.id,
|
projectId : $scope.vm.viewer.projectVo.id,
|
}
|
}
|
});
|
}
|
|
// 일반 메일 발송 (사용자 직접 작성)
|
function sendCommonMail() {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueCommonSendMail.html',
|
size : "md",
|
controller : 'issueCommonSendMailController',
|
backdrop : 'static',
|
resolve : {
|
parameter : {
|
issueId : $scope.vm.viewer.id,
|
}
|
}
|
});
|
}
|
|
function getParametersAll() {
|
var params = [];
|
if ($scope.vm.viewer.issueCompanyVos != null && $scope.vm.viewer.issueCompanyVos.length > 0) {
|
var issueCompany = $scope.fn.getParameters(params, $scope.vm.viewer.issueCompanyVos);
|
if (issueCompany != null && issueCompany.length > 0) {
|
angular.forEach(issueCompany, function (data) {
|
params.push(data);
|
});
|
}
|
}
|
if ($scope.vm.viewer.issueIspVos != null && $scope.vm.viewer.issueIspVos.length > 0) {
|
var issueIsp = $scope.fn.getParameters(params, $scope.vm.viewer.issueIspVos)
|
if (issueIsp != null && issueIsp.length > 0) {
|
angular.forEach(issueIsp, function (data) {
|
params.push(data);
|
});
|
}
|
}
|
if ($scope.vm.viewer.issueHostingVos != null && $scope.vm.viewer.issueHostingVos.length > 0) {
|
var issueHosting = $scope.fn.getParameters(params, $scope.vm.viewer.issueHostingVos);
|
if (issueHosting != null && issueHosting.length > 0) {
|
angular.forEach(issueHosting, function (data) {
|
params.push(data);
|
});
|
}
|
}
|
|
if (params != null && params.length > 0) {
|
var filterData = params.filter(function(item, idx){
|
return params.findIndex(function(item2, idx2){
|
return item.email === item2.email
|
}) == idx;
|
});
|
for (let i = 0; i < filterData.length; i++) {
|
filterData[i].id = i;
|
}
|
}
|
return filterData;
|
}
|
|
function getParameters(sourceArr, partnerVos) {
|
var excludeVos = sourceArr != null ? sourceArr.slice() : [];
|
|
angular.forEach(partnerVos, function (vo) {
|
var account = {
|
account : vo.email
|
}
|
Object.assign(vo, account)
|
|
excludeVos.push(vo);
|
});
|
|
return excludeVos;
|
}
|
|
// 변경 정보를 확인한다.
|
function versionView(issueId) {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueVersionView.html',
|
size : "lg",
|
controller : 'issueVersionViewController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueId : issueId
|
};
|
}
|
}
|
});
|
}
|
|
// 예약 정보를 확인 및 변경 한다.
|
function reservation(issueId) {
|
$uibModal.open({
|
templateUrl : 'views/issue/issueReservation.html',
|
size : "sm",
|
controller : 'issueReservationController',
|
backdrop : 'static',
|
resolve : {
|
parameter : function () {
|
return {
|
issueId : issueId
|
};
|
}
|
}
|
});
|
}
|
}
|
]);
|
}
|
);
|