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.data.entity.Filter;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.state.approve.StepType;
|
|
public class LeaderHierarchys implements Iterable<PositionHierarchys> {
|
|
public static int MaxLevel = 6;
|
private static NamedSQL templateSQL;
|
private static NamedSQL oaTemplateSQL;
|
private List<PositionHierarchys> items;
|
|
static {
|
try {
|
templateSQL = NamedSQL.getInstance("getLeaderPosition");
|
oaTemplateSQL = NamedSQL.getInstance("getOALeader");
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public LeaderHierarchys() {
|
items = new ArrayList<PositionHierarchys>();
|
}
|
|
public static LeaderHierarchys getInstance(StepType type, Filter filter) throws Exception {
|
LeaderHierarchys result = new LeaderHierarchys();
|
NamedSQL namedSQL = templateSQL.createInstance();
|
|
PositionHierarchys hierarchyList = getLeaderHierarchy(namedSQL, filter);
|
int count = 1;
|
|
while (hierarchyList != null) {
|
if (isValid(hierarchyList, type)) {
|
result.items.add(hierarchyList);
|
}
|
|
String parentId = hierarchyList.getParentPositionId();
|
filter = new Filter("md_position.id", parentId);
|
hierarchyList = getLeaderHierarchy(namedSQL, filter);
|
|
count++;
|
if (count > MaxLevel) {
|
break;
|
}
|
}
|
|
return result;
|
}
|
|
private static PositionHierarchys getLeaderHierarchy(NamedSQL namedSQL, Filter filter) throws Exception {
|
if (filter.isEmpty()) {
|
return null;
|
}
|
|
namedSQL.setFilter(filter);
|
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();
|
}
|
else if (type == StepType.DepartmentLeader || type == StepType.OADepartmentLeader) {
|
return hierarchy.isLeader();
|
}
|
else {
|
return hierarchy.isDuty(type);
|
}
|
}
|
|
public boolean isEmpty() {
|
return items.isEmpty();
|
}
|
|
@Override
|
public Iterator<PositionHierarchys> iterator() {
|
return items.iterator();
|
}
|
|
}
|