OWL ITS + 탐지시스템(인터넷 진흥원)
프로젝트 담당부서 백엔드 수정
* 프로젝트에 속해있는 부서만 이슈 담당부서로 설정 가능
15개 파일 변경됨
218 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/Department.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/ProjectRole.java 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/ProjectRoleService.java 4 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java 29 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java 106 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/ProjectVo.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/ProjectForm.java 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/project/projectAdd.controller.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -223,4 +223,5 @@
    public static final String ISP_NOT_EXIST = "ISP_NOT_EXIST";   // ISP가 존재하지 않습니다.
    public static final String ISP_REMOVE_NOT_SELECT = "ISP_REMOVE_NOT_SELECT";   // 삭제할 ISP가 선택되지 않았습니다.
    public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // 선택한 부서 중 프로젝트에 참여하고 있지 않은 부서가 있습니다.
}
src/main/java/kr/wisestone/owl/domain/Department.java
@@ -48,7 +48,7 @@
    public void addProjectRole(ProjectRole projectRole) {
        if (this.projectRoleDepartments == null) {
            this.projectRoleDepartments = new HashSet<ProjectRoleDepartment>();
            this.projectRoleDepartments = new HashSet<>();
        }
        ProjectRoleDepartment projectRoleDepartment = new ProjectRoleDepartment(projectRole, this);
src/main/java/kr/wisestone/owl/domain/ProjectRole.java
@@ -30,6 +30,9 @@
    private Set<ProjectRoleUser> projectRoleUsers = new HashSet<>();
    @OneToMany(mappedBy="projectRole", cascade={CascadeType.ALL}, orphanRemoval=true)
    private Set<ProjectRoleDepartment> projectRoleDepartments = new HashSet<>();
    @OneToMany(mappedBy="projectRole", cascade={CascadeType.ALL}, orphanRemoval=true)
    private Set<ProjectRolePermission> projectRolePermissions = new HashSet<>();
    public ProjectRole(){}
@@ -80,6 +83,14 @@
        this.projectRoleUsers = projectRoleUsers;
    }
    public Set<ProjectRoleDepartment> getProjectRoleDepartments() {
        return projectRoleDepartments;
    }
    public void setProjectRoleDepartments(Set<ProjectRoleDepartment> projectRoleDepartments) {
        this.projectRoleDepartments = projectRoleDepartments;
    }
    public Set<ProjectRolePermission> getProjectRolePermissions() {
        return projectRolePermissions;
    }
@@ -97,6 +108,15 @@
        this.projectRoleUsers.add(projectRoleUser);
    }
    public void addDepartment(Department department) {
        if (this.projectRoleDepartments == null) {
            this.projectRoleDepartments = new HashSet<>();
        }
        ProjectRoleDepartment projectRoleDepartment = new ProjectRoleDepartment(this, department);
        this.projectRoleDepartments.add(projectRoleDepartment);
    }
    public void removeProjectRole(User user) {
        Iterator<ProjectRoleUser> iterator = this.projectRoleUsers.iterator();
src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
@@ -11,7 +11,4 @@
    List<ProjectRoleDepartment> findByProjectRoleId(@Param("projectRoleId") Long projectRoleId);
    ProjectRoleDepartment findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId);
    //ProjectRoleUser findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId);
}
src/main/java/kr/wisestone/owl/service/ProjectRoleService.java
@@ -1,5 +1,6 @@
package kr.wisestone.owl.service;
import kr.wisestone.owl.domain.Department;
import kr.wisestone.owl.domain.Project;
import kr.wisestone.owl.domain.ProjectRole;
import kr.wisestone.owl.domain.User;
@@ -9,7 +10,8 @@
public interface ProjectRoleService extends AbstractService<ProjectRole, Long, JpaRepository<ProjectRole, Long>>{
    void addDefaultProjectRole(Project project, List<User> managers, List<User> users);
    //void addDefaultProjectRole(Project project, List<User> managers, List<User> users);
    void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments);
    ProjectRole findByProjectIdAndRoleType(Long projectId, String roleType);
}
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1142,7 +1142,7 @@
                //  데이터 보정 작업 - 프로젝트에서 제외된 사용자는 담당자에서 제외 될 수 있도록 처리
                if (!includeProject) {
                    throw new OwlRuntimeException(
                            this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER));
                            this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_DEPARTMENT));
                }
            }
            //  참여 확인된 부서로 담당부서 변경
src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
@@ -57,7 +57,7 @@
        return this.projectRoleDepartmentRepository.findByProjectRoleIdAndDepartmentId(projectRoleId, departmentId);
    }
    //  프로젝트에 참여하는 사용자, 프로젝트 관리자를 파라미터에 따라 조회한다.
    //  프로젝트에 참여하는 부서를 파라미터에 따라 조회한다.
    @Override
    @Transactional(readOnly = true)
    public List<Map<String, Object>> findProjectRoleDepartment(Map<String, Object> projectRoleDepartmentMap) {
src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java
@@ -26,6 +26,9 @@
    private ProjectRoleUserService projectRoleUserService;
    @Autowired
    private ProjectRoleDepartmentService projectRoleDepartmentService;
    @Autowired
    private ProjectRolePermissionService projectRolePermissionService;
    @Override
@@ -34,7 +37,7 @@
    }
    //  기본, 관리자 프로젝트 역할을 생성한다.
    @Override
    /*@Override
    @Transactional
    public void addDefaultProjectRole(Project project, List<User> managers, List<User> users) {
        ProjectRole projectRole = this.addProjectRole(project, "기본 프로젝트 역할", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN);
@@ -42,7 +45,23 @@
        //  프로젝트 관리자 저장
        this.projectRoleAssociatedUser(managers, managerProjectRole);
        //  프로젝트 일반 사용자 저장
        this.projectRoleAssociatedUser(users, projectRole);
        //this.projectRoleAssociatedUser(users, projectRole);
        this.projectRoleRepository.flush();
    }*/
    //  프로젝트 역할 생성(관리자, 담당부서)
    @Override
    @Transactional
    public void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments) {
        ProjectRole projectRole = this.addProjectRole(project, "기본 프로젝트 역할", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN);
        ProjectRole managerProjectRole = this.addProjectRole(project, "프로젝트 관리자 역할", ProjectRole.TYPE_MANAGER, Permission.ROLE_TYPE_PROJECT_MANAGER);
        //  프로젝트 관리자 저장
        this.projectRoleAssociatedUser(managers, managerProjectRole);
        //  프로젝트 일반 사용자 저장
        //this.projectRoleAssociatedUser(users, projectRole);
        //  프로젝트 담당 부서 저장
        this.projectRoleAssociatedDepartment(departments, projectRole);
        this.projectRoleRepository.flush();
    }
@@ -64,7 +83,7 @@
        }
    }
    /*// 프로젝트 역할과 부서 연결
    // 프로젝트 역할과 부서 연결
    private void projectRoleAssociatedDepartment(List<Department> departments, ProjectRole projectRole) {
        for (Department department : departments) {
            this.addDefaultProjectRoleAssociatedDepartment(projectRole, department);
@@ -73,13 +92,13 @@
    //  해당 역할과 부서를 연결시킨다.
    private void addDefaultProjectRoleAssociatedDepartment(ProjectRole projectRole, Department department) {
        ProjectRoleUser projectRoleDepartment = this.projectRoleUserService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), department.getId());
        ProjectRoleDepartment projectRoleDepartment = this.projectRoleDepartmentService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), department.getId());
        if (projectRoleDepartment == null) {
            //  프로젝트 관리자 - 기본 프로젝트 역할에 추가.
            department.addProjectRole(projectRole);
        }
    }*/
    }
    //  프로젝트 역할을 생성한다.
    private ProjectRole addProjectRole(Project project, String projectRoleName, String projectRoleType, String permissionType) {
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -46,6 +46,9 @@
    private UserService userService;
    @Autowired
    private DepartmentService departmentService;
    @Autowired
    private ProjectRoleService projectRoleService;
    @Autowired
@@ -64,6 +67,9 @@
    private ProjectRoleUserService projectRoleUserService;
    @Autowired
    private ProjectRoleDepartmentService projectRoleDepartmentService;
    @Autowired
    private AttachedFileService attachedFileService;
    @Autowired
@@ -71,6 +77,9 @@
    @Autowired
    private IssueUserService issueUserService;
    @Autowired
    private IssueDepartmentService issueDepartmentService;
    @Autowired
    private IssueNumberGeneratorService issueNumberGeneratorService;
@@ -148,7 +157,8 @@
        //  각 프로젝트의 이슈 번호를 자동으로 생성한다.
        this.issueNumberGeneratorService.generateIssueNumber(project);
        //  일반 사용자 및 관리자를 등록하고 사용자들에게 해당 역할을 배정한다.
        this.registerManagerAndUser(projectForm, project);
        //this.registerManagerAndUser(projectForm, project);
        this.registerManagerAndDepartment(projectForm, project);
        //  프로젝트 유형에 따른 워크플로우 생성
        this.workflowStatusService.addDefaultWorkflowStatus(project, ProjectType.valueOf(projectForm.getProjectType()));
@@ -174,8 +184,16 @@
            sendEmails.add(user.getAccount());
        }
        List<Department> departments = Lists.newArrayList();
        //  부서 등록
        for (Long departmentId : projectForm.getDepartmentIds()) {
            Department department = this.departmentService.getDepartment(departmentId);
            departments.add(department);
        }
        //  기본, 관리자 프로젝트 역할을 생성하고 사용자를 해당 역할에 배정한다.
        this.projectRoleService.addDefaultProjectRole(project, managers, users);
        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
        //  프로젝트 참여자들에게 이메일 발송을 예약한다.
        Map<String, Object> projectMap = new HashMap<>();
@@ -192,6 +210,40 @@
        projectMap.put("projectManagerName", stringBuilder.toString());
        //  프로젝트 일반 참여 메일 발송 예약
        this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
    }
    private void registerManagerAndDepartment(ProjectForm projectForm, Project project) {
        List<User> managers = Lists.newArrayList();
        //  관리자 등록
        for (Long managerId : projectForm.getManagerIds()) {
            User user = this.userService.getUser(managerId);
            managers.add(user);
        }
        List<Department> departments = Lists.newArrayList();
        //  부서 등록
        for (Long departmentId : projectForm.getDepartmentIds()) {
            Department department = this.departmentService.getDepartment(departmentId);
            departments.add(department);
        }
        //  기본, 관리자 프로젝트 역할을 생성하고 사용자를 해당 역할에 배정한다.
        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
        //  프로젝트 참여자들에게 이메일 발송을 예약한다.
        Map<String, Object> projectMap = new HashMap<>();
        projectMap.put("workspaceName", project.getWorkspace().getName());
        projectMap.put("projectName", project.getName());
        projectMap.put("registerDate", DateUtil.convertDateToStr(new Date()));
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(managers.get(0).getName());
        stringBuilder.append("(");
        stringBuilder.append(CommonUtil.decryptAES128(managers.get(0).getAccount()));
        stringBuilder.append(")");
        projectMap.put("projectManagerName", stringBuilder.toString());
    }
@@ -353,6 +405,10 @@
            //  프로젝트에 참여하는 사용자를 셋팅한다. - 관리자 / 일반 사용자
            this.setProjectUser(projectVo, true);
            this.setProjectUser(projectVo, false);
            //  프로젝트에 참여하는 부서 세팅
            //this.setProjectDepartment(projectVo);
            //  업무공간 담당자는 모든 프로젝트를 수정/삭제할 수 있어야 한다.
            if (this.userWorkspaceService.checkWorkspaceManager()) {
                projectVo.setModifyPermissionCheck(true);
@@ -401,6 +457,26 @@
        }
    }
    //  담당부서를 조건에 따라 찾아준다.
    private void setProjectDepartment(ProjectVo projectVo) {
        Map<String, Object> projectRoleDepartmentMap = new HashMap<>();
        projectRoleDepartmentMap.put("id", projectVo.getId());
        //  부서 정보 셋팅
        List<Map<String, Object>> projectRoleDepartments = this.projectRoleDepartmentService.findProjectRoleDepartment(projectRoleDepartmentMap);
        if (projectRoleDepartments != null && !projectRoleDepartments.isEmpty()) {
            List<DepartmentVo> departmentVos = Lists.newArrayList();
            for (Map<String, Object> projectRoleDepartment : projectRoleDepartments) {
                DepartmentVo departmentVo = ConvertUtil.convertMapToClass(projectRoleDepartment, DepartmentVo.class);
                departmentVo.setByName(departmentVo.getDepartmentName());
                departmentVos.add(departmentVo);
            }
            projectVo.setProjectDepartmentVos(departmentVos);
        }
    }
    //  프로젝트 상세 정보를 조회한다.
    @Override
@@ -424,6 +500,7 @@
                case "01": //  프로젝트에 참여하는 사용자, 관리자 정보를 셋팅한다.
                    this.setProjectUser(projectVo, true);
                    this.setProjectUser(projectVo, false);
                    //this.setProjectDepartment(projectVo); //부서 정보 세팅
                    break;
            }
        }
@@ -449,6 +526,8 @@
        Project project = this.getProject(projectForm.getId());
        //  프로젝트 참여 사용자
        List<Long> existUserIds = this.getIncludeProjectUser(project);
        //  프로젝트 참여 부서
        List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project);
        //  워크스페이스에서 기본으로 제공되는 프로젝트에 대한 체크
        this.checkDefaultProject(project, projectForm);
@@ -469,9 +548,11 @@
        //  해당 프로젝트에 참여하는 모든 사용자 조회
        //  빠진 사람이 관리하는 이슈 전체 조회 후 데이터 삭제
        List<Long> changeUserIds = this.getIncludeProjectUser(project);
        List<Long> changeDepartmentIds = this.getIncludeProjectDepartment(project);
        //  참여에서 제외된 사용자를 찾고 담당하고 있던 이슈에서 제외한다.
        this.checkExcludeUserAndRemoveIssueAssignee(project, existUserIds, changeUserIds);
        this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds);
        //  관리자/일반 사용자 변경 내역을 통지한다.
        this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
@@ -512,6 +593,20 @@
        return Lists.newArrayList(includeUserIds);
    }
    //  프로젝트 참여 부서
    private List<Long> getIncludeProjectDepartment(Project project) {
        Set<Long> includeDepartmentIds = new HashSet<>();
        for (ProjectRole projectRole : project.getProjectRoles()) {
            List<ProjectRoleDepartment> projectRoleDepartments =  this.projectRoleDepartmentService.findByProjectRoleId(projectRole.getId());
            for (ProjectRoleDepartment projectRoleDepartment : projectRoleDepartments) {
                includeDepartmentIds.add(projectRoleDepartment.getDepartment().getId());
            }
        }
        return Lists.newArrayList(includeDepartmentIds);
    }
    //  참여에서 제외된 사용자를 찾고 담당하고 있던 이슈에서 제외한다.
    private void checkExcludeUserAndRemoveIssueAssignee(Project project, List<Long> existUserIds, List<Long> changeUserIds) {
        List<Long> excludeUserIds = CommonUtil.searchChangeList(changeUserIds, existUserIds);
@@ -521,7 +616,14 @@
        }
    }
    //  참여에서 제외된 부서를 찾고 담당하고 있던 이슈에서 제외한다.
    private void checkExcludeDepartmentAndRemoveIssueDepartment(Project project, List<Long> existDepartmentIds, List<Long> changeDepartmentIds) {
        List<Long> excludeDepartmentIds = CommonUtil.searchChangeList(changeDepartmentIds, existDepartmentIds);
        if (excludeDepartmentIds.size() > 0) {
            this.issueDepartmentService.removeIssueDepartment(project.getId(), excludeDepartmentIds);
        }
    }
    //  기본 제공되는 프로젝트의 관리자는 워크스페이스 관리자가 포함되어 있어야 한다.
    private void checkDefaultProject(Project project, ProjectForm projectForm) {
src/main/java/kr/wisestone/owl/vo/ProjectVo.java
@@ -1,6 +1,7 @@
package kr.wisestone.owl.vo;
import com.google.common.collect.Lists;
import kr.wisestone.owl.domain.Department;
import kr.wisestone.owl.domain.Project;
import java.util.ArrayList;
@@ -25,6 +26,7 @@
    private List<UserVo> projectUserVos = Lists.newArrayList();
    private List<UserVo> projectManagerVos = Lists.newArrayList();
    private List<ProjectVo> childProjects = Lists.newArrayList();
    private List<DepartmentVo> projectDepartmentVos = Lists.newArrayList();
    public ProjectVo(){}
@@ -147,4 +149,12 @@
    public void setDefaultYn(Boolean defaultYn) {
        this.defaultYn = defaultYn;
    }
    public List<DepartmentVo> getProjectDepartmentVos() {
        return projectDepartmentVos;
    }
    public void setProjectDepartmentVos(List<DepartmentVo> projectDepartmentVos) {
        this.projectDepartmentVos = projectDepartmentVos;
    }
}
src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
@@ -25,6 +25,7 @@
    private List<String> roleTypes = Lists.newArrayList();  //  프로젝트 관리자, 일반 참여자를 구분해서 가져온다.
    private List<Long> excludeIds = Lists.newArrayList();
    private List<Long> userIds = Lists.newArrayList();
    private List<Long> departmentIds = Lists.newArrayList();
    public ProjectCondition(){}
@@ -49,6 +50,10 @@
        if (MapUtil.getLongs(conditions, "userIds") != null) {
            condition.setUserIds(MapUtil.getLongs(conditions, "userIds"));
        }
        if (MapUtil.getLongs(conditions, "departmentIds") != null) {
            condition.setDepartmentIds(MapUtil.getLongs(conditions, "departmentIds"));
        }
        return condition;
@@ -165,4 +170,12 @@
    public void setWorkspaceManager(Boolean workspaceManager) {
        this.workspaceManager = workspaceManager;
    }
    public List<Long> getDepartmentIds() {
        return departmentIds;
    }
    public void setDepartmentIds(List<Long> departmentIds) {
        this.departmentIds = departmentIds;
    }
}
src/main/java/kr/wisestone/owl/web/form/ProjectForm.java
@@ -21,6 +21,7 @@
    private List<Long> managerIds = Lists.newArrayList();
    private List<Long> removeIds = Lists.newArrayList();
    private List<Long> userIds = Lists.newArrayList();
    private List<Long> departmentIds = Lists.newArrayList();
    public ProjectForm() {
    }
@@ -34,6 +35,10 @@
        if (MapUtil.getLongs(params, "userIds") != null) {
            form.setUserIds(MapUtil.getLongs(params, "userIds"));
        }
        if (MapUtil.getLongs(params, "departmentIds") != null) {
            form.setDepartmentIds(MapUtil.getLongs(params, "departmentIds"));
        }
        if (MapUtil.getLongs(params, "removeIds") != null) {
@@ -154,4 +159,12 @@
    public void addRemoveIds(Long removeId) {
        this.removeIds.add(removeId);
    }
    public List<Long> getDepartmentIds() {
        return departmentIds;
    }
    public void setDepartmentIds(List<Long> departmentIds) {
        this.departmentIds = departmentIds;
    }
}
src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
@@ -27,16 +27,7 @@
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_department prd on prd.project_role_id = pr.id
        INNER JOIN department d on d.id = prd.department_id
        WHERE 1=1
        <choose>
            <when test="statuses.size != 0">
                AND pr.role_type IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        AND p.id = #{id}
        WHERE p.id = #{id}
    </select>
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -23,6 +23,7 @@
DEFAULT_PROJECT_NOT_REMOVE = \uAE30\uBCF8\uC73C\uB85C \uC81C\uACF5\uB418\uB294 \uD504\uB85C\uC81D\uD2B8\uB294 \uC0AD\uC81C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
PROJECT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_INCLUDE_USER = \uC120\uD0DD\uD55C \uB2F4\uB2F9\uC790 \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_INCLUDE_DEPARTMENT = \uC120\uD0DD\uD55C \uBD80\uC11C \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uBD80\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
PROJECT_USED_PROJECT_KEY = \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
PAYMENT_TYPE_NOT_EXIST = \uACB0\uC81C \uBC29\uC2DD\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
src/main/webapp/scripts/app/project/projectAdd.controller.js
@@ -33,6 +33,7 @@
                            id : $rootScope.user.id
                        }],  //  관리자
                        users : [], //  일반 사용자
                        departments : []
                    },
                    userName : "",  //  일반 사용자 이름 검색
                    projectName : "",   //  상위 프로젝트 이름 검색