Merge branch 'master' of https://git.bukova.info/repos/git/isspst
Conflicts: src/main/java/info/bukova/isspst/services/requirement/RequirementServiceImpl.javamultitenant
commit
dd4b7a2166
@ -1,5 +1,15 @@
|
||||
package info.bukova.isspst.services.requirement;
|
||||
|
||||
public interface RequirementBaseService {
|
||||
import info.bukova.isspst.data.RequirementBase;
|
||||
import info.bukova.isspst.data.User;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface RequirementBaseService<T extends RequirementBase> {
|
||||
|
||||
public void loadAuthItems(T data);
|
||||
public void approve(T entity);
|
||||
public boolean canApprove(T entity);
|
||||
public List<User> getNextApprover(T entity);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,130 @@
|
||||
package info.bukova.isspst.services.requirement;
|
||||
|
||||
import info.bukova.isspst.data.AuthItem;
|
||||
import info.bukova.isspst.data.JobMapping;
|
||||
import info.bukova.isspst.data.RequirementBase;
|
||||
import info.bukova.isspst.data.RequirementState;
|
||||
import info.bukova.isspst.data.Role;
|
||||
import info.bukova.isspst.data.User;
|
||||
import info.bukova.isspst.data.Workflow;
|
||||
import info.bukova.isspst.data.Workgroup;
|
||||
import info.bukova.isspst.services.AbstractOwnedService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public abstract class RequirementBaseServiceImpl<T extends RequirementBase> extends
|
||||
AbstractOwnedService<T> implements RequirementBaseService<T> {
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public List<User> getNextApprover(T entity) {
|
||||
T e = (T) dao.getById(entity.getId());
|
||||
|
||||
|
||||
List<User> users = new ArrayList<User>();
|
||||
Workgroup wg;
|
||||
Workflow wf = getNextWorkflow(e);
|
||||
Role nextRole;
|
||||
|
||||
if (wf == null) {
|
||||
return null;
|
||||
} else {
|
||||
nextRole = wf.getRole();
|
||||
}
|
||||
|
||||
if (wf.getCentre() || e.getWorkgroup() == null) {
|
||||
wg = e.getCentre();
|
||||
} else {
|
||||
wg = e.getWorkgroup();
|
||||
}
|
||||
|
||||
for (JobMapping jm : wg.getMembers()) {
|
||||
if (jm.getRole().equals(nextRole) && jm.getMember().isPerson()) {
|
||||
users.add((User) jm.getMember());
|
||||
}
|
||||
}
|
||||
|
||||
return users;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void loadAuthItems(T entity) {
|
||||
T e = dao.getById(entity.getId());
|
||||
e.getAuthorization().size();
|
||||
entity.setAuthorization(e.getAuthorization());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@PreAuthorize("this.canApprove(#entity)")
|
||||
public void approve(T entity) {
|
||||
T e = (T) dao.getById(entity.getId());
|
||||
|
||||
Workflow wf = getNextWorkflow(e);
|
||||
if (wf == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Role role = wf.getRole();
|
||||
AuthItem auth = new AuthItem();
|
||||
auth.setApprover(getLoggedInUser());
|
||||
auth.setRole(role);
|
||||
auth.setAuthDate(new Date());
|
||||
|
||||
e.getAuthorization().add(auth);
|
||||
|
||||
if (getNextWorkflow(e) == null) {
|
||||
e.setState(RequirementState.APPROVED);
|
||||
} else {
|
||||
e.setState(RequirementState.PARTIALLY);
|
||||
}
|
||||
entity.setState(e.getState());
|
||||
entity.getAuthorization().add(auth);
|
||||
|
||||
this.update(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public boolean canApprove(T entity) {
|
||||
List<User> nextApprovers = getNextApprover(entity);
|
||||
if (nextApprovers != null && nextApprovers.contains(getLoggedInUser())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Workflow getNextWorkflow(T e) {
|
||||
AuthItem authItem = null;
|
||||
if (e.getAuthorization().size() > 0) {
|
||||
authItem = e.getAuthorization().get(e.getAuthorization().size() - 1);
|
||||
}
|
||||
|
||||
Workflow wf = null;
|
||||
for (int i = 0; i < e.getType().getWorkflow().size(); i++) {
|
||||
wf = e.getType().getWorkflow().get(i);
|
||||
if (authItem != null && wf.getRole().equals(authItem.getRole())) {
|
||||
if (i + 1 < e.getType().getWorkflow().size()) {
|
||||
wf = e.getType().getWorkflow().get(i + 1);
|
||||
break;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (authItem == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return wf;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package info.bukova.isspst.ui.requirement;
|
||||
|
||||
import info.bukova.isspst.data.RequirementBase;
|
||||
import info.bukova.isspst.services.requirement.RequirementBaseService;
|
||||
import info.bukova.isspst.ui.ListViewModel;
|
||||
|
||||
import org.zkoss.bind.annotation.Command;
|
||||
import org.zkoss.bind.annotation.NotifyChange;
|
||||
|
||||
public class RequirementSubpage<T extends RequirementBase> extends ListViewModel<T> {
|
||||
|
||||
protected RequirementBaseService<T> reqService;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void init() {
|
||||
reqService = (RequirementBaseService<T>) service;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadLazyData(T data) {
|
||||
reqService.loadAuthItems(data);
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange("dataBean")
|
||||
public void approve() {
|
||||
reqService.approve(getDataBean());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotifyChange({ "dataBean", "ableToDelete", "canApprove" })
|
||||
public void setDataBean(T data) {
|
||||
super.setDataBean(data);
|
||||
}
|
||||
|
||||
public boolean isCanApprove() {
|
||||
if (getDataBean() != null) {
|
||||
return reqService.canApprove(getDataBean());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
<?page title="approve status" contentType="text/html;charset=UTF-8"?>
|
||||
<zk>
|
||||
|
||||
<label value="Stav schválení: "/>
|
||||
<button label="Schválit" onClick="@command('approve')" disabled="@load(not vmSub.canApprove)"/>
|
||||
<vbox children="@load(vmSub.dataBean.type.workflow)">
|
||||
<template name="children">
|
||||
<grid model="@load(vmSub.dataBean.authorization)">
|
||||
<columns>
|
||||
<column label="@load(each.role.description)"/>
|
||||
<column label="Datum"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<template name="model" var="auth">
|
||||
<row visible="@load(auth.role eq each.role)">
|
||||
<label value="@load(auth.approver.fullName)"/>
|
||||
<label value="@load(auth.authDate)"/>
|
||||
</row>
|
||||
</template>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
</vbox>
|
||||
|
||||
</zk>
|
Loading…
Reference in New Issue