/**
|
* Created by wisestone on 2017-12-15.
|
*/
|
'use strict';
|
|
define([
|
'app',
|
'angular'
|
],
|
function (app, angular) {
|
app.controller('taskAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', '$injector',
|
'$controller', '$tableProvider', 'Task', 'User', 'AttachedFile', 'SweetAlert', '$timeout', 'parameter', '$stateParams',
|
function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, $injector, $controller, $tableProvider, Task, User, AttachedFile, SweetAlert, $timeout, parameter, $stateParams) {
|
|
$scope.fn = {
|
cancel : cancel,
|
formSubmit : formSubmit,
|
formCheck : formCheck,
|
getUserListCallBack : getUserListCallBack,
|
makeUserTableConfigs : makeUserTableConfigs,
|
getOptionColor : getOptionColor,
|
makeFileTableConfigs : makeFileTableConfigs,
|
onFileSelect : onFileSelect,
|
broadCastTasks : broadCastTasks,
|
infiniteAddForm : infiniteAddForm,
|
imageUpload : imageUpload
|
};
|
|
$scope.vm = {
|
form : {
|
title : "",
|
description : "",
|
priorityId : "1",
|
projects : [],
|
users : [],
|
files : [],
|
attachedFileIds : [], // 섬머노트로 파일 업로드를 할 경우 서버에서 pk를 따고 task id와 연동 작업이 필요하다.
|
startCompleteDateRange : ""
|
},
|
infiniteAdd : false,
|
projectName : "",
|
userName : "",
|
autoCompletePage : {
|
user : {
|
page : 0,
|
totalPage : 0
|
},
|
project : {
|
page : 0,
|
totalPage : 0
|
}
|
},
|
summerNote : {
|
editable : null,
|
editor : null
|
},
|
userTableConfigs : [],
|
fileTableConfigs : []
|
};
|
|
$scope.userTableEvent = {
|
remove : remove
|
};
|
|
$scope.fileTableEvent = {
|
fileRemove : fileRemove
|
};
|
|
angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
|
|
$scope.$watch("vm.form.projects", function (newValue, oldValue) {
|
if (angular.isDefined(newValue)) {
|
if (newValue.length == 0) {
|
$scope.vm.form.users = [];
|
}
|
}
|
});
|
|
function imageUpload(files) {
|
var listFiles = [];
|
angular.forEach(files, function (file) {
|
if (!angular.isDefined(file.name)) {
|
var fileType = file.type.split("/");
|
var imageType = "";
|
|
if (fileType[0] == "image") {
|
imageType = "." + fileType[1];
|
}
|
|
file.name = new Date().getTime() + imageType;
|
}
|
else {
|
if (file.name.indexOf(';') != -1) {
|
SweetAlert.swal("파일 업로드 오류", "파일명에 특수문자(;)가 들어가면 업로드 할 수 없습니다.", "error");
|
return;
|
}
|
}
|
|
listFiles.push(file);
|
});
|
|
AttachedFile.add({
|
method : "POST",
|
file : listFiles,
|
// data 속성으로 별도의 데이터 전송
|
fields : {
|
content : {
|
workspaceId : 1 // TODO - 워크스페이스 아이디는 추후에 변경이 필요하다.
|
}
|
},
|
fileFormDataName : "file"
|
})
|
.then(function (result) {
|
if (result.message.status == "success") {
|
angular.forEach(result.attachedFiles, function (fileInfo) {
|
$scope.vm.summerNote.editor.summernote("editor.insertImage", fileInfo.path);
|
$scope.vm.form.attachedFileIds.push(fileInfo.id);
|
});
|
}
|
else {
|
SweetAlert.swal("파일 업로드 오류", result.data.message.message, "error");
|
}
|
});
|
}
|
|
function infiniteAddForm() {
|
$scope.vm.form.description = "";
|
$scope.vm.form.files = [];
|
|
$(".modal-body").animate({
|
scrollTop: 0
|
}, 500);
|
|
$timeout(function () {
|
$(".note-editable").trigger("focus")
|
}, 700);
|
}
|
|
function onFileSelect($files) {
|
angular.forEach($files, function ($file, index) {
|
$file.index = index;
|
$scope.vm.form.files.push($file);
|
});
|
}
|
|
function getOptionColor(key) {
|
var color = "#353535"; // 기본색은 검은색.
|
|
for (var count in $rootScope.priorities) {
|
if ($rootScope.priorities[count].fieldKey == key) {
|
color = $rootScope.priorities[count].color;
|
break;
|
}
|
}
|
|
return color;
|
}
|
|
function remove(id) {
|
var users = [];
|
|
angular.forEach($scope.vm.form.users, function (user) {
|
if (user.id != id) {
|
users.push(user);
|
}
|
});
|
|
$scope.vm.form.users = angular.copy(users);
|
}
|
|
function fileRemove(index) {
|
$scope.vm.form.files.splice(index, 1);
|
|
angular.forEach($scope.vm.form.files, function (file, index) {
|
file.index = index;
|
});
|
}
|
|
function getUserListCallBack(result) {
|
$scope.vm.autoCompletePage.user.totalPage = result.data.page.totalPage;
|
}
|
|
function makeUserTableConfigs() {
|
$scope.vm.userTableConfigs = [];
|
|
$scope.vm.userTableConfigs.push($tableProvider.config()
|
.setHName("이름")
|
.setDType("renderer")
|
.setDAlign("text-center")
|
.setDRenderer("PROJECT_USER_NAME"));
|
$scope.vm.userTableConfigs.push($tableProvider.config()
|
.setHName("이메일")
|
.setHWidth("width-180-p")
|
.setDVisible("hidden-xs")
|
.setDAlign("text-center")
|
.setDName("email"));
|
$scope.vm.userTableConfigs.push($tableProvider.config()
|
.setHName("연락처")
|
.setDVisible("hidden-xs")
|
.setHWidth("width-180-p")
|
.setDName("phone")
|
.setDAlign("text-center"));
|
$scope.vm.userTableConfigs.push($tableProvider.config()
|
.setHName("설정")
|
.setDType("renderer")
|
.setHWidth("width-60-p")
|
.setDAlign("text-center")
|
.setDRenderer("TARGET_REMOVE"));
|
}
|
|
function makeFileTableConfigs() {
|
$scope.vm.fileTableConfigs = [];
|
|
$scope.vm.fileTableConfigs.push($tableProvider.config()
|
.setHName("파일")
|
.setDAlign("text-center")
|
.setDName("name"));
|
$scope.vm.fileTableConfigs.push($tableProvider.config()
|
.setHName("크기")
|
.setDType("renderer")
|
.setDVisible("hidden-xs")
|
.setHWidth("width-100-p")
|
.setDRenderer("FILE_SIZE")
|
.setDAlign("text-center"));
|
$scope.vm.fileTableConfigs.push($tableProvider.config()
|
.setHName("설정")
|
.setDType("renderer")
|
.setHWidth("width-60-p")
|
.setDAlign("text-center")
|
.setDRenderer("FILE_REMOVE"));
|
}
|
|
function formCheck(formInvalid) {
|
if (formInvalid) {
|
return true;
|
}
|
|
if ($scope.vm.form.title == "" || $scope.vm.form.title == null || $scope.vm.form.title == undefined) {
|
return true;
|
}
|
|
return false;
|
}
|
|
function formSubmit() {
|
var content = {
|
title : $scope.vm.form.title,
|
description : $scope.vm.form.description,
|
priorityId : $scope.vm.form.priorityId,
|
userIds : (function () {
|
var userIds = [];
|
|
angular.forEach($scope.vm.form.users, function (user) {
|
userIds.push(user.id);
|
});
|
|
return userIds;
|
})(),
|
startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
|
workflowStatusId : parameter.workflowStatusId,
|
attachedFileIds : $scope.vm.form.attachedFileIds
|
};
|
|
|
Task.add({
|
method : "POST",
|
file : $scope.vm.form.files,
|
// data 속성으로 별도의 데이터 전송
|
fields : {
|
content : content
|
},
|
fileFormDataName : "file"
|
})
|
.then(function (result) {
|
|
if (result.data.message.status == "success") {
|
if ($scope.vm.infiniteAdd) {
|
$scope.fn.infiniteAddForm();
|
}
|
else {
|
$scope.fn.cancel();
|
}
|
|
// 업무 카드 업데이트
|
$scope.fn.broadCastTasks(result.data.data);
|
|
$rootScope.$broadcast("taskAdd", {
|
content : {
|
projectId : $stateParams.projectId,
|
workflowStatusId : parameter.workflowStatusId,
|
taskVo : result.data.data
|
}
|
});
|
}
|
});
|
}
|
|
function cancel() {
|
$uibModalInstance.dismiss('cancel');
|
}
|
|
function broadCastTasks(taskVo) {
|
var content = {
|
projectId : $stateParams.projectId,
|
workflowStatusId : parameter.workflowStatusId,
|
taskVo : taskVo,
|
actionType : "/notification/task-add"
|
};
|
|
User.taskUpdate($resourceProvider.getContent(content,
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status == "success") {
|
|
}
|
else {
|
// TODO - 웹 소켓으로 경고창 표시
|
}
|
});
|
}
|
|
$scope.fn.makeUserTableConfigs();
|
$scope.fn.makeFileTableConfigs();
|
}]);
|
});
|