/** * 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; // 이슈 목록 컨트롤러 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 }, 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 = "