/******************************************************************************* * Copyright (c) 2012 Dmitry Tikhomirov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Dmitry Tikhomirov - initial API and implementation ******************************************************************************/ package org.opensheet.server; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.hibernate.Hibernate; import org.opensheet.client.dto.BranchDTO; import org.opensheet.client.dto.DepartmentDTO; import org.opensheet.client.services.DepartmentService; import org.opensheet.server.dao.AssignmentDAO; import org.opensheet.server.dao.DepartmentDAO; import org.opensheet.server.dao.UserDAO; import org.opensheet.shared.model.Assignment; import org.opensheet.shared.model.Branch; import org.opensheet.shared.model.Department; import org.opensheet.shared.model.User; import org.opensheet.shared.model.BaseModel.DepartmentBaseModel; import com.extjs.gxt.ui.client.data.BaseModel; import com.google.gwt.user.server.rpc.RemoteServiceServlet; @Service("DepartmentService") public class DepartmentServiceImpl extends RemoteServiceServlet implements DepartmentService { /** * */ private static final long serialVersionUID = 1L; @Autowired DepartmentDAO departmentDAO; @Autowired UserDAO userDAO; @Autowired private AssignmentDAO assignmentDAO; /*params: * String s -> active/inactive/all * * (non-Javadoc) * @see org.opensheet.client.services.DepartmentService#getDepartments(java.lang.String) */ @Override @Transactional public List<DepartmentDTO> getDepartments(String s) { List<Department> dapartments = departmentDAO.listDepartment(s); List<DepartmentDTO> dapartmentDTOs = new ArrayList<DepartmentDTO>(dapartments != null ? dapartments.size():0); for(Department d: dapartments){ DepartmentDTO departmentDTO = new DepartmentDTO(d); departmentDTO.setOwner(d.getOwner().getUserDTO()); departmentDTO.getOwner().setFullName(); dapartmentDTOs.add(departmentDTO); } return dapartmentDTOs; } @Override public List<DepartmentBaseModel> getDepartmentsBaseModel(String s) { List<Department> departmens = departmentDAO.listDepartment(s); List<DepartmentBaseModel> departmensBaseModel = new ArrayList<DepartmentBaseModel>(departmens != null ? departmens.size() : 0); for(Department d: departmens){ departmensBaseModel.add(new DepartmentBaseModel(d.getId(),d.getName())); } return departmensBaseModel; } @Override public void updateDepartment(DepartmentDTO departmentDTO) { Department department = new Department(departmentDTO); department.setOwner(departmentDTO.getOwner().getUser()); department.setBranch(new Branch(departmentDTO.getBranch().getId())); departmentDAO.updateDepartment(department); } @Override public void addDepartment( DepartmentDTO departmentDTO) { Department department = new Department(departmentDTO); department.setOwner(departmentDTO.getOwner().getUser()); department.setBranch(new Branch(departmentDTO.getBranch().getId())); departmentDAO.addDepartment(department); } /** Integer assignmentId is an assignment id * Boolean criteria : if true get only checked assignment list * if false, get checked and unchecked assignments. */ @Override @Transactional public List<BaseModel> getDepartmentsBaseModelByAssignemnt(Integer assignmentId,Boolean criteria) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); List<Department> assignedDeps = assignment.getDepartments(); List<BaseModel> bmList = new ArrayList<BaseModel>(); List<Department> depList; if(criteria == true){ if(assignment.getLevel() == 0){ depList = departmentDAO.listDepartment("1"); }else{ depList = assignment.getParent().getDepartments(); } for(Department dep: depList){ BaseModel bm = new BaseModel(); bm.set("name", dep.getName()); bm.set("id", dep.getId()); if(assignedDeps.contains(dep)){ bm.set("selected", true); }else{ bm.set("selected", false); } bmList.add(bm); } }else{ for(Department dep: assignedDeps){ BaseModel bm = new BaseModel(); bm.set("name", dep.getName()); bm.set("id", dep.getId()); bmList.add(bm); } } return bmList; } @Override @Transactional public void setAssignemntToDepartment(Integer assignmentId, List<BaseModel> departments) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); if(assignment.getStatus() == true) { List<Department> list = new ArrayList<Department>(departments.size()); for(BaseModel bm: departments){ list.add(departmentDAO.getDepartmentById((Integer) bm.get("id"))); } departmentDAO.setAssignemntToDepartment(assignment, list); } } /** * * @param status active/inactive/all "1","0","any" * @param branch id of the branch (9999999 is for all) * * @see org.opensheet.client.services.DepartmentService#getDepartments(java.lang.String) */ @Override @Transactional public List<DepartmentDTO> getDepartmentsByBranch(String status,Integer branch) { List<Department> dapartments = departmentDAO.listDepartmentByBranch(status,branch); List<DepartmentDTO> dapartmentDTOs = new ArrayList<DepartmentDTO>(dapartments != null ? dapartments.size():0); for(Department d: dapartments){ DepartmentDTO departmentDTO = new DepartmentDTO(d); departmentDTO.setOwner(d.getOwner().getUserDTO()); departmentDTO.getOwner().setFullName(); departmentDTO.setBranch(new BranchDTO(d.getBranch())); dapartmentDTOs.add(departmentDTO); } return dapartmentDTOs; } @Override @Transactional public List<DepartmentDTO> getDepartments() { User user = userDAO.whoIam(); if(user.getPermission().getDm()==true){ List<Department> dapartments = departmentDAO.getDepartment(user); List<DepartmentDTO> dapartmentDTOs = new ArrayList<DepartmentDTO>(dapartments != null ? dapartments.size():0); for(Department d: dapartments){ // DepartmentDTO departmentDTO = new DepartmentDTO(d); dapartmentDTOs.add(new DepartmentDTO(d)); } return dapartmentDTOs; } return null; } @Override @Transactional public List<BaseModel> getUsersByDepartmentAndByAssignment( Integer departmentId, Integer assignmentId) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); Department department = departmentDAO.getDepartmentById(departmentId); Hibernate.initialize(department.getUsers()); List<User> checkList = new ArrayList<User>(); List<User> users = (List<User>) departmentDAO.getUserByAssignmentAndByDepartment(assignment,department); List<BaseModel> list = new ArrayList<BaseModel>(users.size()); if(assignment.getLevel() == 0){ for(User u: department.getUsers()){ checkList.add(u); } }else{ checkList = (List<User>) departmentDAO.getUserByAssignmentAndByDepartment(assignment.getParent(),department); } for(User u: checkList){ if(u.getStatus() == true){ BaseModel bm = new BaseModel(); bm.set("name", u.getFullName()); bm.set("id", u.getId()); if(users.contains(u)){ bm.set("selected", true); }else{ bm.set("selected", false); } list.add(bm); } } return list; } @Override @Transactional public void setUsersByDepartmentAndByAssignment(List<BaseModel> usersBaseModel, Integer departmentId, Integer assignmentId) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); Department department = departmentDAO.getDepartmentById(departmentId); List<User> usersDepartmentSelected = new ArrayList<User>(usersBaseModel.size()); for(BaseModel bm: usersBaseModel){ usersDepartmentSelected.add(userDAO.getUser(Integer.parseInt(bm.get("id").toString()))); } userDAO.setUsersByDepartmentAndByAssignment(usersDepartmentSelected, department, assignment); } @Override @Transactional public List<BaseModel> getDepartmentsBaseModelByAssignemntAndByBranch(Integer assignmentId,Integer branchId) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); List<Department> departmentAll; List<Department> assignedDeps = assignment.getDepartments(); List<BaseModel> bmList = new ArrayList<BaseModel>(); //Fucking walkarount !!! somethings wrong with dep.equals List<Integer> list = new ArrayList<Integer>(assignedDeps.size()); for(Department dt: assignedDeps){ list.add(dt.getId()); } if(branchId == 9999999){ if(assignment.getLevel() == 0){ departmentAll = departmentDAO.listDepartment("1"); }else{ departmentAll = assignment.getParent().getDepartments(); } }else{ if(assignment.getLevel() == 0){ departmentAll = departmentDAO.listDepartmentByBranch("1",branchId); }else{ departmentAll= new ArrayList<Department>(); List<Department> temp = assignment.getParent().getDepartments(); for(Department d: temp){ if(d.getBranch().getId() == branchId){ departmentAll.add(d); } } } } for(Department dep: departmentAll){ BaseModel bm = new BaseModel(); bm.set("name", dep.getName()); bm.set("id", dep.getId()); if(list.contains(dep.getId())){ bm.set("selected", true); }else{ bm.set("selected", false); } bmList.add(bm); } return bmList; } // Убирать у детей департамент убранный у верхнего проекта @Override @Transactional public void setDepartmentToAssignmentByBranch(List<BaseModel> departmentList,Integer assignmentId, Integer branchId) { Assignment assignment = assignmentDAO.getAssignmentById(assignmentId); List<Department> departmentAll; List<Department> departmentOld = assignment.getDepartments() ; Map<Assignment,List<Department>> diff = new HashMap<Assignment,List<Department>>(); List<Department> departments = new ArrayList<Department>(); for(BaseModel bm: departmentList){ departments.add(departmentDAO.getDepartmentById(Integer.parseInt(bm.get("id").toString()))); } List<Department> result = new ArrayList<Department>(); if(assignment.getLevel() == 0){ if(branchId == 9999999){ assignment.setDepartments(departments); departmentOld.removeAll(departments); }else{ departmentAll = departmentDAO.listDepartment("1"); for(Department d: departmentAll){ if(d.getBranch().getId() != branchId){ result.add(d); } } result.addAll(departments); assignment.setDepartments(result); } for(Assignment a: assignment.getChildren()){ for(Department d: a.getDepartments()){ if(departmentOld.contains(d)){ if(diff.containsKey(a)){ diff.get(a).add(d); }else{ List<Department> depp = new ArrayList<Department>(); depp.add(d); diff.put(a, depp); } } } } for(Map.Entry<Assignment,List<Department>> value: diff.entrySet()){ Assignment a = value.getKey(); for(Department dt: value.getValue()){ a.getDepartments().remove(dt); } } }else{ if(branchId == 9999999){ assignment.setDepartments(departments); }else{ departmentAll= new ArrayList<Department>(); List<Department> temp = assignment.getDepartments(); for(Department d: temp){ if(d.getBranch().getId() != branchId){ departmentAll.add(d); } } departmentAll.addAll(departments); assignment.setDepartments(departmentAll); } } } }