/** * 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(); }]); });