package crmdna.program;
import crmdna.common.DateUtils;
import crmdna.common.Utils;
import crmdna.common.Utils.Currency;
import crmdna.group.Group.GroupProp;
import crmdna.programtype.ProgramTypeProp;
import crmdna.registration.RegistrationSummaryProp;
import crmdna.teacher.Teacher.TeacherProp;
import crmdna.venue.Venue.VenueProp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class ProgramProp implements Comparable<ProgramProp> {
public long programId;
public ProgramTypeProp programTypeProp;
public GroupProp groupProp;
public VenueProp venueProp;
public TeacherProp teacherProp;
public int startYYYYMMDD;
public int endYYYYMMDD;
public int numBatches;
public int maxParticipants;
public boolean isRegistrationLimitReached;
public boolean disabled;
public String description;
public RegistrationSummaryProp regSummary;
public double fee;
public Currency ccy;
public List<String> batch1SessionTimings;
public List<String> batch2SessionTimings;
public List<String> batch3SessionTimings;
public List<String> batch4SessionTimings;
public List<String> batch5SessionTimings;
public String specialInstruction;
// dependent
public String name;
public String shortName;
public void populateName() {
name =
programTypeProp.displayName + " "
+ DateUtils.getDurationAsString(startYYYYMMDD, endYYYYMMDD) + " @ "
+ venueProp.displayName;
}
@Override
public int compareTo(ProgramProp arg0) {
// sort order is: -startYYYYMMDD, +programtypename, +group, +venue
if (startYYYYMMDD != arg0.startYYYYMMDD) {
Long start = new Long(startYYYYMMDD);
Long arg0Start = new Long(arg0.startYYYYMMDD);
return arg0Start.compareTo(start);
}
if (!programTypeProp.name.equals(arg0.programTypeProp.name))
return programTypeProp.name.compareTo(arg0.programTypeProp.name);
if (!groupProp.name.equals(arg0.groupProp.name))
return groupProp.name.compareTo(arg0.groupProp.name);
return venueProp.name.compareTo(arg0.venueProp.name);
}
public List<SessionProp> getSessions(int dateYYYYMMDD) {
List<SessionProp> sessionProps = new ArrayList<>();
for (int batchIndex = 0; batchIndex < numBatches; batchIndex++) {
SessionProp sessionProp = new SessionProp();
sessionProp.dateYYYYMMDD = dateYYYYMMDD;
sessionProp.programId = programId;
sessionProp.batchNo = batchIndex + 1;
sessionProp.programType = programTypeProp.displayName;
sessionProp.center = groupProp.displayName;
sessionProp.venue = venueProp.displayName;
sessionProp.populateTitle(numBatches);
sessionProps.add(sessionProp);
}
return sessionProps;
}
public int getNumSessions() {
// TODO: this is buggy, fix it
return endYYYYMMDD - startYYYYMMDD + 1;
}
public void ensureValidSessionDate(int sessionDateYYYYMMDD) {
DateUtils.ensureFormatYYYYMMDD(sessionDateYYYYMMDD);
if ((sessionDateYYYYMMDD < startYYYYMMDD) || (sessionDateYYYYMMDD > endYYYYMMDD))
Utils.throwIncorrectSpecException("Session date [" + sessionDateYYYYMMDD
+ "] should be between start [" + startYYYYMMDD + "] and end date [" + endYYYYMMDD
+ "] for Program [" + name + "]");
}
public Map<String, Object> asMap() {
Map<String, Object> treeMap = new TreeMap<>();
treeMap.put("programId", new Long(programId));
treeMap.put("programType", programTypeProp.displayName);
treeMap.put("startDateYYYYMMDD", startYYYYMMDD + "");
treeMap.put("endDateYYYYMMDD", endYYYYMMDD + "");
treeMap.put("venue", venueProp.displayName);
treeMap.put("venueFullAddress", venueProp.address);
treeMap.put("groupName", groupProp.displayName);
return treeMap;
}
public String getDetailsAsHtml() {
StringBuilder builder = new StringBuilder();
builder.append("<b>Program Details</b><br>");
builder.append("<i>Program Type:</i> " + programTypeProp.displayName + "<br>");
builder.append("<i>Center:</i> " + groupProp.displayName + "<br>");
builder.append("<i>Date</i>: " + DateUtils.getDurationAsString(startYYYYMMDD, endYYYYMMDD)
+ "<br>");
builder.append("<i>Venue: </i>" + venueProp.displayName + "<br>");
builder.append("<i>Venue Full Address: </i>" + venueProp.displayName + "<br>");
builder.append("<i>Teacher: </i>" + teacherProp.email + "<br><br>");
return builder.toString();
}
public String getNameWOVenue() {
name =
programTypeProp.displayName + " "
+ DateUtils.getDurationAsString(startYYYYMMDD, endYYYYMMDD) + " @ "
+ groupProp.displayName;
return name;
}
public String getName() {
return programTypeProp.displayName + ": "
+ DateUtils.getDurationAsString(startYYYYMMDD, endYYYYMMDD);
}
}