package foundation.org;
|
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.state.approve.StepType;
|
import foundation.util.Util;
|
|
public class LeaderHierarchys implements Iterable<PositionHierarchys> {
|
|
public static int MaxLevel = 6;
|
private static NamedSQL templateSQL;
|
private List<PositionHierarchys> items;
|
|
static {
|
try {
|
templateSQL = NamedSQL.getInstance("getLeaderPosition");
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public LeaderHierarchys() {
|
items = new ArrayList<PositionHierarchys>();
|
}
|
|
public static LeaderHierarchys getInstance(StepType type, String positionId) throws Exception {
|
NamedSQL namedSQL = templateSQL.createInstance();
|
LeaderHierarchys result = new LeaderHierarchys();
|
|
PositionHierarchys hierarchyList = getLeaderHierarchy(namedSQL, positionId);
|
int count = 1;
|
|
while (hierarchyList != null) {
|
if (isValid(hierarchyList, type)) {
|
result.items.add(hierarchyList);
|
}
|
|
String parentId = hierarchyList.getParentPositionId();
|
hierarchyList = getLeaderHierarchy(namedSQL, parentId);
|
|
count++;
|
if (count > MaxLevel) {
|
break;
|
}
|
}
|
|
return result;
|
}
|
|
private static PositionHierarchys getLeaderHierarchy(NamedSQL namedSQL, String positionId) throws Exception {
|
if (Util.isEmpty(positionId)) {
|
return null;
|
}
|
|
namedSQL.setParam("positionId", positionId);
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
|
if (entitySet.size() == 0) {
|
return null;
|
}
|
|
PositionHierarchys positionHierarchys = new PositionHierarchys();
|
List<LeaderHierarchy> hierarchyList = new ArrayList<LeaderHierarchy>();
|
|
for (Entity entity: entitySet) {
|
LeaderHierarchy hierarchy = new LeaderHierarchy();
|
hierarchy.load(entity);
|
hierarchyList.add(hierarchy);
|
}
|
|
positionHierarchys.setFirstAsDefalut(entitySet.getEntity(0));
|
positionHierarchys.setPositinEmoployees(hierarchyList);
|
|
return positionHierarchys;
|
}
|
|
private static boolean isValid(PositionHierarchys hierarchy, StepType type) {
|
if (hierarchy == null) {
|
return false;
|
}
|
|
if (StepType.SalesHierarchy == type) {
|
return true;
|
}
|
else if (StepType.SalesDirector == type) {
|
return hierarchy.isSalesDirector();
|
}
|
else if (StepType.SalesRegionDirector == type) {
|
return hierarchy.isSalesRegionDirector();
|
}
|
else if (StepType.SalesRep == type) {
|
return hierarchy.isSales();
|
}
|
|
return false;
|
}
|
|
public boolean isEmpty() {
|
return items.isEmpty();
|
}
|
|
@Override
|
public Iterator<PositionHierarchys> iterator() {
|
return items.iterator();
|
}
|
|
}
|