@@ -3,11 +3,13 @@ package info.bukova.isspst;
|
||||
import java.util.List;
|
||||
|
||||
import info.bukova.isspst.data.Permission;
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.data.User;
|
||||
import info.bukova.isspst.reporting.Report;
|
||||
import info.bukova.isspst.reporting.ReportMapping;
|
||||
import info.bukova.isspst.reporting.ReportType;
|
||||
import info.bukova.isspst.services.requirements.RequirementTypeService;
|
||||
import info.bukova.isspst.services.users.PermissionService;
|
||||
import info.bukova.isspst.services.users.RoleService;
|
||||
import info.bukova.isspst.services.users.UserService;
|
||||
@@ -26,6 +28,7 @@ public class AppInitListener implements ServletContextListener {
|
||||
private RoleService roleService;
|
||||
private UserService userService;
|
||||
private PermissionService permService;
|
||||
private RequirementTypeService reqTypeService;
|
||||
|
||||
@Override
|
||||
public void contextDestroyed(ServletContextEvent arg0) {
|
||||
@@ -41,12 +44,14 @@ public class AppInitListener implements ServletContextListener {
|
||||
roleService = ctx.getBean(RoleService.class);
|
||||
userService = ctx.getBean(UserService.class);
|
||||
permService = ctx.getBean(PermissionService.class);
|
||||
reqTypeService = ctx.getBean(RequirementTypeService.class);
|
||||
|
||||
userService.grantAdmin();
|
||||
checkRoles();
|
||||
checkUsers();
|
||||
checkPermissions();
|
||||
checkAllAdminRights();
|
||||
checkReqTypes();
|
||||
userService.removeAccess();
|
||||
|
||||
loadModuleReports();
|
||||
@@ -140,5 +145,14 @@ public class AppInitListener implements ServletContextListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkReqTypes() {
|
||||
List<RequirementType> types = reqTypeService.getAll();
|
||||
for (RequirementType type : Constants.REQTYPES) {
|
||||
if (!types.contains(type)) {
|
||||
reqTypeService.add(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package info.bukova.isspst;
|
||||
|
||||
import info.bukova.isspst.data.Permission;
|
||||
import info.bukova.isspst.data.PermissionType;
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.reporting.Report;
|
||||
import info.bukova.isspst.reporting.ReportMapping;
|
||||
@@ -9,6 +10,7 @@ import info.bukova.isspst.services.addressbook.AdbService;
|
||||
import info.bukova.isspst.services.buildings.BuildingService;
|
||||
import info.bukova.isspst.services.munits.MUnitService;
|
||||
import info.bukova.isspst.services.material.MaterialService;
|
||||
import info.bukova.isspst.services.requirements.RequirementTypeService;
|
||||
import info.bukova.isspst.services.users.RoleService;
|
||||
import info.bukova.isspst.services.users.UserService;
|
||||
import info.bukova.isspst.services.workgroups.WorkgroupService;
|
||||
@@ -57,6 +59,7 @@ public class Constants {
|
||||
public final static String MOD_MATERIAL = "MATERIAL";
|
||||
public final static String MOD_WORKGROUPS = "WORKGROUPS";
|
||||
public final static String MOD_REQUIREMENTS = "REQUIREMENTS";
|
||||
public final static String MOD_WORKFLOW = "WORKFLOW";
|
||||
public final static Module MODULES[] = {
|
||||
new Module(MOD_USERS, "Uživatelé", UserService.class),
|
||||
new Module(MOD_PERMISSIONS, "Práva", RoleService.class),
|
||||
@@ -65,13 +68,11 @@ public class Constants {
|
||||
new Module(MOD_MUNITS, "Měrné jednotky", MUnitService.class),
|
||||
new Module(MOD_MATERIAL, "Materiál", MaterialService.class),
|
||||
new Module(MOD_WORKGROUPS, "Pracovní skupiny", WorkgroupService.class),
|
||||
new Module(MOD_REQUIREMENTS, "Požadavky", null)
|
||||
new Module(MOD_REQUIREMENTS, "Požadavky", null),
|
||||
new Module(MOD_WORKFLOW, "Procesy schválení", RequirementTypeService.class)
|
||||
};
|
||||
|
||||
public final static String PERM_APPROVE_WORKGROUP = "PERM_APPROVE_WORKGROUP";
|
||||
public final static String PERM_APPROVE_CENTRE = "PERM_APPROVE_CENTRE";
|
||||
public final static String PERM_APPROVE_LIMIT = "PERM_APPROVE_LIMIT";
|
||||
public final static String PERM_APPROVE_FINAL = "PERM_APPROVE_FINAL";
|
||||
public final static String PERM_APPROVE = "PERM_APPROVE";
|
||||
public final static String PERM_SHOW_WORKGROUP_REQ = "PERM_SHOW_WORKGROUP_REQ";
|
||||
public final static String PERM_SHOW_CENTRE_REQ = "PERM_SHOW_CENTRE_REQ";
|
||||
public final static String PERM_SHOW_ALL_REQ = "PERM_SHOW_ALL_REQ";
|
||||
@@ -80,10 +81,7 @@ public class Constants {
|
||||
new Permission(PERM_SHOW_WORKGROUP_REQ, "Zobrazení požadavků komise", MOD_REQUIREMENTS, PermissionType.WORKGROUP),
|
||||
new Permission(PERM_SHOW_CENTRE_REQ, "Zobrazení požadavků střediska", MOD_REQUIREMENTS, PermissionType.CENTRE),
|
||||
new Permission(PERM_SHOW_ALL_REQ, "Zobrazení všech požadavků", MOD_REQUIREMENTS, PermissionType.GLOBAL),
|
||||
new Permission(PERM_APPROVE_WORKGROUP, "Schválení v komisi", MOD_REQUIREMENTS, PermissionType.WORKGROUP),
|
||||
new Permission(PERM_APPROVE_CENTRE, "Schválení ve středisku", MOD_REQUIREMENTS, PermissionType.CENTRE),
|
||||
new Permission(PERM_APPROVE_LIMIT, "Schválení nadlimitních", MOD_REQUIREMENTS, PermissionType.GLOBAL),
|
||||
new Permission(PERM_APPROVE_FINAL, "Konečné schválení", MOD_REQUIREMENTS, PermissionType.CENTRE),
|
||||
new Permission(PERM_APPROVE, "Schválení", MOD_REQUIREMENTS, PermissionType.WORKGROUP),
|
||||
};
|
||||
|
||||
public final static String DYNAMIC_REPORT_NAME = "Tabulková sestava";
|
||||
@@ -91,4 +89,11 @@ public class Constants {
|
||||
new ReportMapping(MOD_ADDRESSBOOK, new Report("Adresní karty", "address")),
|
||||
new ReportMapping(MOD_ADDRESSBOOK, new Report("Adresna", "address", false, true))
|
||||
};
|
||||
|
||||
public final static String REQTYPE_ORDER = "ORDER";
|
||||
public final static String REQTYPE_BUSINESSTRIP = "BUSINESSTRIP";
|
||||
public final static RequirementType REQTYPES[] = {
|
||||
new RequirementType(REQTYPE_ORDER, "Objednávky materiálu a služeb"),
|
||||
new RequirementType(REQTYPE_BUSINESSTRIP, "Služební cesty")
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package info.bukova.isspst.dao;
|
||||
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
|
||||
public interface RequirementTypeDao extends BaseDao<RequirementType> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package info.bukova.isspst.dao.jpa;
|
||||
|
||||
import info.bukova.isspst.dao.RequirementTypeDao;
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
|
||||
public class RequirementTypeDaoJPA extends BaseDaoJPA<RequirementType> implements RequirementTypeDao {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.OrderBy;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
||||
@Entity
|
||||
@Table(name = "REQUIREMENTTYPE")
|
||||
public class RequirementType extends BaseData {
|
||||
|
||||
@Column(name = "TYPE")
|
||||
private String type;
|
||||
@Column(name = "DESCRIPTION")
|
||||
private String description;
|
||||
@OneToMany(cascade = CascadeType.ALL)
|
||||
@LazyCollection(LazyCollectionOption.FALSE)
|
||||
@OrderBy("WORDER")
|
||||
private List<Workflow> workflow;
|
||||
|
||||
public RequirementType() {
|
||||
workflow = new ArrayList<Workflow>();
|
||||
}
|
||||
|
||||
public RequirementType(String type, String description) {
|
||||
this();
|
||||
this.type = type;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public List<Workflow> getWorkflow() {
|
||||
return workflow;
|
||||
}
|
||||
|
||||
public void setWorkflow(List<Workflow> workflow) {
|
||||
this.workflow = workflow;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (o instanceof RequirementType && ((RequirementType)o).getType().equals(this.type)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
||||
@Entity
|
||||
@Table(name = "WORKFLOW")
|
||||
public class Workflow extends BaseData {
|
||||
|
||||
@Column(name = "CENTRE")
|
||||
private Boolean centre;
|
||||
@ManyToOne
|
||||
@LazyCollection(LazyCollectionOption.FALSE)
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
private Role role;
|
||||
@Column(name = "WORDER")
|
||||
private Integer wOrder;
|
||||
|
||||
public Boolean getCentre() {
|
||||
return centre;
|
||||
}
|
||||
|
||||
public void setCentre(Boolean centre) {
|
||||
this.centre = centre;
|
||||
}
|
||||
|
||||
public Role getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
public void setRole(Role role) {
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (o instanceof Workflow
|
||||
&& ((Workflow)o).getCentre().equals(centre)
|
||||
&& ((Workflow)o).getRole().equals(role)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public Integer getOrder() {
|
||||
return wOrder;
|
||||
}
|
||||
|
||||
public void setOrder(Integer order) {
|
||||
this.wOrder = order;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package info.bukova.isspst.services.requirements;
|
||||
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
import info.bukova.isspst.services.Service;
|
||||
|
||||
public interface RequirementTypeService extends Service<RequirementType> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package info.bukova.isspst.services.requirements;
|
||||
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
import info.bukova.isspst.services.AbstractOwnedService;
|
||||
|
||||
public class RequirementTypeServiceImpl extends AbstractOwnedService<RequirementType> implements RequirementTypeService {
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package info.bukova.isspst.services.users;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import info.bukova.isspst.data.Permission;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.services.Service;
|
||||
|
||||
@@ -10,5 +11,7 @@ public interface RoleService extends Service<Role> {
|
||||
public Role getRoleByAuthority(String authority);
|
||||
public List<Role> getWorkgroupRoles();
|
||||
public List<Role> getCentreRoles();
|
||||
public List<Role> getRolesWithPermission(Permission perm, boolean centre);
|
||||
public List<Role> getRolesWithPermission(String authority, boolean centre);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package info.bukova.isspst.services.users;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import info.bukova.isspst.data.Permission;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.services.AbstractService;
|
||||
|
||||
public class RoleServiceImpl extends AbstractService<Role> implements RoleService {
|
||||
|
||||
@Autowired
|
||||
private PermissionService permService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@@ -27,4 +35,28 @@ public class RoleServiceImpl extends AbstractService<Role> implements RoleServic
|
||||
return this.execQuery("from Role where centre = true");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
@Transactional
|
||||
public List<Role> getRolesWithPermission(Permission perm, boolean centre) {
|
||||
String wgClausule;
|
||||
if (centre) {
|
||||
wgClausule = "centre";
|
||||
} else {
|
||||
wgClausule = "workgroup";
|
||||
}
|
||||
Set<Permission> perms = new HashSet<Permission>();
|
||||
perms.add(perm);
|
||||
Query q = dao.getQuery("select r from Role r join r.permissions p where r." + wgClausule + " = true and p in (:perms)");
|
||||
q.setParameterList("perms", perms);
|
||||
return q.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public List<Role> getRolesWithPermission(String authority, boolean centre) {
|
||||
Permission p = permService.selectSingle("from Permission where authority = '" + authority + "'");
|
||||
return getRolesWithPermission(p, centre);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
package info.bukova.isspst.ui.requirements;
|
||||
|
||||
import info.bukova.isspst.Constants;
|
||||
import info.bukova.isspst.data.RequirementType;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.data.Workflow;
|
||||
import info.bukova.isspst.services.requirements.RequirementTypeService;
|
||||
import info.bukova.isspst.services.users.RoleService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.zkoss.bind.annotation.BindingParam;
|
||||
import org.zkoss.bind.annotation.Command;
|
||||
import org.zkoss.bind.annotation.Init;
|
||||
import org.zkoss.bind.annotation.NotifyChange;
|
||||
import org.zkoss.zk.ui.event.DropEvent;
|
||||
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||
import org.zkoss.zul.Listitem;
|
||||
|
||||
public class RequirementTypesVM {
|
||||
|
||||
@WireVariable
|
||||
private RequirementTypeService reqTypeService;
|
||||
@WireVariable
|
||||
private RoleService roleService;
|
||||
private List<RequirementType> reqTypes;
|
||||
private List<Role> centreRoles;
|
||||
private List<Role> workgroupRoles;
|
||||
private RequirementType selected;
|
||||
|
||||
@Init
|
||||
public void init() {
|
||||
reqTypes = reqTypeService.getAll();
|
||||
initRoles();
|
||||
}
|
||||
|
||||
private void initRoles() {
|
||||
centreRoles = new ArrayList<Role>(roleService.getRolesWithPermission(Constants.PERM_APPROVE, true));
|
||||
workgroupRoles = new ArrayList<Role>(roleService.getRolesWithPermission(Constants.PERM_APPROVE, false));
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void addRoleWg(@BindingParam("event") DropEvent event) {
|
||||
Role r;
|
||||
try {
|
||||
r = ((Listitem)event.getDragged()).getValue();
|
||||
} catch (ClassCastException e) {
|
||||
return;
|
||||
}
|
||||
addRole(r, false);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void addRoleCentre(@BindingParam("event") DropEvent event) {
|
||||
Role r;
|
||||
try {
|
||||
r = ((Listitem)event.getDragged()).getValue();
|
||||
} catch (ClassCastException e) {
|
||||
return;
|
||||
}
|
||||
addRole(r, true);
|
||||
}
|
||||
|
||||
private void addRole(Role r, boolean centre) {
|
||||
Workflow w = new Workflow();
|
||||
w.setRole(r);
|
||||
w.setCentre(centre);
|
||||
w.setOrder(selected.getWorkflow().size());
|
||||
|
||||
if (!selected.getWorkflow().contains(w)) {
|
||||
selected.getWorkflow().add(w);
|
||||
}
|
||||
|
||||
if (centre) {
|
||||
centreRoles.remove(r);
|
||||
} else {
|
||||
workgroupRoles.remove(r);
|
||||
}
|
||||
|
||||
reqTypeService.update(selected);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void removeRoleWg(@BindingParam("event") DropEvent event) {
|
||||
removeWorkflow((Workflow) ((Listitem)event.getDragged()).getValue());
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void removeRoleCentre(@BindingParam("event") DropEvent event) {
|
||||
removeWorkflow((Workflow) ((Listitem)event.getDragged()).getValue());
|
||||
}
|
||||
|
||||
private void removeWorkflow(Workflow w) {
|
||||
selected.getWorkflow().remove(w);
|
||||
|
||||
if (w.getCentre()) {
|
||||
centreRoles.add(w.getRole());
|
||||
} else {
|
||||
workgroupRoles.add(w.getRole());
|
||||
}
|
||||
|
||||
resetOrder();
|
||||
|
||||
reqTypeService.update(selected);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void reorderWg(@BindingParam("event") DropEvent event) {
|
||||
reorder(event, false);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange({"selected", "centreRoles", "workgroupRoles"})
|
||||
public void reorderCentre(@BindingParam("event") DropEvent event) {
|
||||
reorder(event, true);
|
||||
}
|
||||
|
||||
private void reorder(DropEvent event, boolean centre) {
|
||||
Workflow w;
|
||||
|
||||
try {
|
||||
w = ((Listitem)event.getDragged()).getValue();
|
||||
} catch (ClassCastException e) {
|
||||
if (centre) {
|
||||
addRoleCentre(event);
|
||||
} else {
|
||||
addRoleWg(event);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Workflow target = ((Listitem)event.getTarget()).getValue();
|
||||
List<Workflow> wf = selected.getWorkflow();
|
||||
int dragIndex = wf.indexOf(w);
|
||||
int dropIndex = wf.indexOf(target);
|
||||
|
||||
if (dragIndex > dropIndex) {
|
||||
wf.remove(w);
|
||||
wf.add(dropIndex, w);
|
||||
} else {
|
||||
for (int i = dragIndex; i < dropIndex; i++) {
|
||||
wf.add(i, wf.get(i + 1));
|
||||
}
|
||||
|
||||
wf.remove(w);
|
||||
wf.remove(dropIndex);
|
||||
wf.add(dropIndex, w);
|
||||
}
|
||||
|
||||
w.setOrder(wf.indexOf(w));
|
||||
resetOrder();
|
||||
|
||||
reqTypeService.update(selected);
|
||||
}
|
||||
|
||||
private void resetOrder() {
|
||||
for (int i = 0; i < selected.getWorkflow().size(); i++) {
|
||||
selected.getWorkflow().get(i).setOrder(i);
|
||||
}
|
||||
}
|
||||
|
||||
public List<RequirementType> getReqTypes() {
|
||||
return reqTypes;
|
||||
}
|
||||
|
||||
public List<Role> getCentreRoles() {
|
||||
return centreRoles;
|
||||
}
|
||||
|
||||
public List<Role> getWorkgroupRoles() {
|
||||
return workgroupRoles;
|
||||
}
|
||||
|
||||
public RequirementType getSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
@NotifyChange({"selected", "workgroupRoles", "centreRoles"})
|
||||
public void setSelected(RequirementType selected) {
|
||||
if (selected == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
initRoles();
|
||||
|
||||
for (Workflow w : selected.getWorkflow()) {
|
||||
if (w.getCentre()) {
|
||||
centreRoles.remove(w.getRole());
|
||||
} else {
|
||||
workgroupRoles.remove(w.getRole());
|
||||
}
|
||||
}
|
||||
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user