package com.idega.block.school.data; import java.rmi.RemoteException; import java.sql.Date; import java.sql.Timestamp; import java.util.Calendar; import java.util.Collection; import java.util.Iterator; import java.util.Vector; import javax.ejb.FinderException; import javax.ejb.RemoveException; import com.idega.core.location.data.Address; import com.idega.core.location.data.AddressBMPBean; import com.idega.core.location.data.Commune; import com.idega.core.location.data.PostalCode; import com.idega.data.GenericEntity; import com.idega.data.IDOAddRelationshipException; import com.idega.data.IDOCompositePrimaryKeyException; import com.idega.data.IDOEntityDefinition; import com.idega.data.IDOEntityField; import com.idega.data.IDOException; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.data.IDOQuery; import com.idega.data.IDORelationshipException; import com.idega.data.IDORemoveRelationshipException; import com.idega.data.query.Column; import com.idega.data.query.CountColumn; import com.idega.data.query.Criteria; import com.idega.data.query.InCriteria; import com.idega.data.query.JoinCriteria; import com.idega.data.query.MatchCriteria; import com.idega.data.query.OR; import com.idega.data.query.SelectQuery; import com.idega.data.query.Table; import com.idega.data.query.WildCardColumn; import com.idega.user.data.Group; import com.idega.user.data.GroupRelation; import com.idega.user.data.User; import com.idega.user.data.UserBMPBean; import com.idega.util.IWTimestamp; /** * <p> * Title: * </p> * <p> * Description: * </p> * <p> * Copyright: Copyright (c) 2002 * </p> * <p> * Company: * </p> * * @author <br> * <a href="mailto:aron@idega.is">Aron Birkir </a> <br> * Last modified: $Date: 2006/04/12 15:04:07 $ by $Author: igors $ * @version $Revision: 1.154.2.9 $ */ public class SchoolClassMemberBMPBean extends GenericEntity implements SchoolClassMember { public final static String SCHOOLCLASSMEMBERID = "sch_class_member_id"; public final static String SCHOOLCLASSMEMBER = "sch_class_member"; public final static String MEMBER = "ic_user_id"; public final static String NOTES = "notes"; public final static String SCHOOLCLASS = "sch_school_class_id"; public final static String SCHOOL_YEAR = "sch_school_year_id"; public final static String SCHOOL_TYPE = "sch_school_type_id"; public final static String REGISTER_DATE = "register_date"; public final static String REGISTRATION_CREATED_DATE = "registration_created_date"; public final static String REMOVED_DATE = "removed_date"; public final static String REGISTRATOR = "registrator"; public final static String NEEDS_SPECIAL_ATTENTION = "NEEDS_SPECIAL_ATTENTION"; public final static String SPECIALLY_PLACED = "SPECIALLY_PLACED"; public final static String LANGUAGE = "LANGUAGE"; public final static String INVOICE_INTERVAL = "invoice_int"; public final static String LATEST_INVOICE_DATE = "latest_invoice_date"; public final static String PLACEMENT_PARAGRAPH = "placement_paragraph"; public final static String COMPENSATION_BY_AGREEMENT = "comp_by_agreement"; public static final String STUDY_PATH = "study_path"; public final static String HANDICRAFT_ID = "handicraft_id"; // relation to sch_study_path.study_path_id private final static String PK = "school_class_member.invoice_interval."; private final static String KEY_INVOICE_INTERVAL_VALUE_TERM = PK + "term"; private final static String KEY_INVOICE_INTERVAL_VALUE_MONTH = PK + "month"; private final static String KEY_INVOICE_INTERVAL_VALUE_QUARTER = PK + "quarter"; private final static String KEY_INVOICE_INTERVAL_VALUE_YEAR = PK + "year"; public void initializeAttributes() { addAttribute(getIDColumnName()); addManyToOneRelationship(MEMBER, "classmember", User.class); addManyToOneRelationship(SCHOOLCLASS, "class", SchoolClass.class); addManyToOneRelationship(SCHOOL_TYPE, "school type", SchoolType.class); addManyToOneRelationship(SCHOOL_YEAR, "school year", SchoolYear.class); addManyToOneRelationship(REGISTRATOR, "registrator", User.class); addManyToOneRelationship(STUDY_PATH, "study_path", SchoolStudyPath.class); addAttribute(NOTES, "notes", true, true, String.class, 255); addAttribute(REGISTER_DATE, "registerdate", true, true, Timestamp.class); addAttribute(REGISTRATION_CREATED_DATE, "inregisterdate", true, true, Timestamp.class); addAttribute(REMOVED_DATE, "removeddate", true, true, Timestamp.class); addAttribute(NEEDS_SPECIAL_ATTENTION, "Needs special attention", true, true, Boolean.class); addAttribute(SPECIALLY_PLACED, "Specially placed", true, true, Boolean.class); addAttribute(LANGUAGE, "Language", true, true, String.class); addAttribute(INVOICE_INTERVAL, "Invoice interval", true, true, String.class); addAttribute(LATEST_INVOICE_DATE, "Latest invoice date", true, true, Timestamp.class); addAttribute(PLACEMENT_PARAGRAPH, "placement paragraph", true, true, String.class, 100); addAttribute(COMPENSATION_BY_AGREEMENT, "Compensation by agreement", true, true, Boolean.class); addManyToManyRelationShip(SchoolClass.class, "sch_sub_group_placements"); addManyToManyRelationShip(SchoolStudyPath.class, "sch_member_study_path"); this.addManyToOneRelationship(HANDICRAFT_ID, SchoolStudyPath.class); addIndex("IDX_SCH_CLASS_MEMBER_1", new String[]{ MEMBER, SCHOOL_TYPE}); } public String getEntityName() { return SCHOOLCLASSMEMBER; } public void setClassMemberId(int id) { this.setColumn(MEMBER, id); } public int getClassMemberId() { return this.getIntColumnValue(MEMBER); } public User getStudent() { return (User) getColumnValue(MEMBER); } public void setStudent(User student) { setColumn(MEMBER, student); } public void setSchoolClassId(int id) { this.setColumn(SCHOOLCLASS, id); } public void setSchoolClass(SchoolClass group) { this.setColumn(SCHOOLCLASS, group); } public int getSchoolClassId() { return this.getIntColumnValue(SCHOOLCLASS); } public SchoolClass getSchoolClass() { return (SchoolClass) this.getColumnValue(SCHOOLCLASS); } public void setSchoolTypeId(int id) { setColumn(SCHOOL_TYPE, id); } public void setSchoolType(SchoolType type) { setColumn(SCHOOL_TYPE, type); } public int getSchoolTypeId() { return getIntColumnValue(SCHOOL_TYPE); } public SchoolType getSchoolType() { return (SchoolType) getColumnValue(SCHOOL_TYPE); } public void setSchoolYear(int id) { setColumn(SCHOOL_YEAR, id); } public void setSchoolYear(SchoolYear year) { setColumn(SCHOOL_YEAR, year); } public void setSchoolYear(Object yearPK) { setColumn(SCHOOL_YEAR, yearPK); } public int getSchoolYearId() { return getIntColumnValue(SCHOOL_YEAR); } public SchoolYear getSchoolYear() { return (SchoolYear) getColumnValue(SCHOOL_YEAR); } public void setRegisterDate(Timestamp stamp) { this.setColumn(REGISTER_DATE, stamp); } public Timestamp getRegisterDate() { return (Timestamp) this.getColumnValue(REGISTER_DATE); } public void setRegistrationCreatedDate(Timestamp stamp) { this.setColumn(REGISTRATION_CREATED_DATE, stamp); } public Timestamp getRegistrationCreatedDate() { return (Timestamp) this.getColumnValue(REGISTRATION_CREATED_DATE); } public void setRemovedDate(Timestamp stamp) { this.setColumn(REMOVED_DATE, stamp); } public Timestamp getRemovedDate() { return (Timestamp) this.getColumnValue(REMOVED_DATE); } public void setRegistratorId(int id) { this.setColumn(REGISTRATOR, id); } public int getRegistratorId() { return this.getIntColumnValue(REGISTRATOR); } public void setRegistrator(User user) { setColumn(REGISTRATOR, user); } public void setNotes(String notes) { this.setColumn(NOTES, notes); } public String getNotes() { return this.getStringColumnValue(NOTES); } public void setNeedsSpecialAttention(boolean needsAttention) { this.setColumn(NEEDS_SPECIAL_ATTENTION, needsAttention); } public boolean getNeedsSpecialAttention() { return getBooleanColumnValue(NEEDS_SPECIAL_ATTENTION, false); } public void setSpeciallyPlaced(boolean speciallyPlaced) { this.setColumn(SPECIALLY_PLACED, speciallyPlaced); } public boolean getSpeciallyPlaced() { return getBooleanColumnValue(SPECIALLY_PLACED, false); } public void setLanguage(String language) { this.setColumn(LANGUAGE, language); } public String getLanguage() { return this.getStringColumnValue(LANGUAGE); } public String getInvoiceInterval() { return getStringColumnValue(INVOICE_INTERVAL); } public void setInvoiceInterval(String interval) { setColumn(INVOICE_INTERVAL, interval); } public Timestamp getLatestInvoiceDate() { return (Timestamp) getColumnValue(LATEST_INVOICE_DATE); } public void setLatestInvoiceDate(Timestamp date) { setColumn(LATEST_INVOICE_DATE, date); } public String getPlacementParagraph() { return this.getStringColumnValue(PLACEMENT_PARAGRAPH); } public void setPlacementParagraph(String placementParagraph) { this.setColumn(PLACEMENT_PARAGRAPH, placementParagraph); } public boolean getHasCompensationByAgreement() { return getBooleanColumnValue(COMPENSATION_BY_AGREEMENT, false); } public void setHasCompensationByAgreement(boolean hasCompensation) { setColumn(COMPENSATION_BY_AGREEMENT, hasCompensation); } public void setStudyPathId(int id) { this.setColumn(STUDY_PATH, id); } public void setStudyPath(SchoolStudyPath studyPath) { this.setColumn(STUDY_PATH, studyPath); } public void setStudyPathToNull() { removeFromColumn(STUDY_PATH); } public int getStudyPathId() { return this.getIntColumnValue(STUDY_PATH); } public SchoolStudyPath getHandicraft() { return (SchoolStudyPath) getColumnValue(HANDICRAFT_ID); } public int getHandicraftId() { return getIntColumnValue(HANDICRAFT_ID); } public void setHandicraft(SchoolStudyPath path) { setColumn(HANDICRAFT_ID, path); } public void setHandicraftId(int schoolStudyPathId) { setColumn(HANDICRAFT_ID, schoolStudyPathId); } public Collection ejbFindAllOrderedByRegisterDate(User user) throws FinderException { int userID = ((Integer) user.getPrimaryKey()).intValue(); return ejbFindAllOrderedByRegisterDate(userID); } public Collection ejbFindAllOrderedByRegisterDate(int userID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this).appendWhere() .append(MEMBER).appendEqualSign().append(userID).appendAnd() .appendLeftParenthesis().append(REMOVED_DATE).appendGreaterThanOrEqualsSign().append(REGISTER_DATE).appendOr().append(REMOVED_DATE).appendIsNull().appendRightParenthesis() .append(" ORDER BY " + REGISTER_DATE + " DESC"); String sqlStr = sql.toString(); return idoFindPKsBySQL(sqlStr); } public Collection ejbFindBySchoolClass(SchoolClass schoolClass) throws FinderException { return ejbFindBySchoolClass(((Integer) schoolClass.getPrimaryKey()).intValue()); } public Collection ejbFindBySchoolClass(int schoolClassID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendWhereEquals(SCHOOLCLASS, schoolClassID); sql.appendAndIsNull(REMOVED_DATE); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllBySchoolClass(SchoolClass schoolClass) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendWhereEquals(SCHOOLCLASS, schoolClass); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchoolClasses(Collection schoolClasses) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelect().append(" m.* ").appendFrom().append(getEntityName()).append(" m, ic_user u"); sql.appendWhere().append("m.").append(MEMBER).appendEqualSign().append("u.ic_user_id"); sql.appendAnd().append("m.").append(SCHOOLCLASS).appendInCollection(schoolClasses); sql.appendOrderBy("u.last_name, u.first_name, u.middle_name"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchoolClassAndYear(int schoolClassID, int schoolYearID) throws FinderException { IWTimestamp stamp = new IWTimestamp(); Table student = new Table(this); Table group = new Table(SchoolClass.class); Table season = new Table(SchoolSeason.class); Column terminationDate = new Column(student, REMOVED_DATE); Column seasonEndDate = new Column(season, SchoolSeasonBMPBean.END); SelectQuery query = new SelectQuery(student); query.addColumn(new WildCardColumn(student)); try { query.addJoin(student, group); query.addJoin(group, season); } catch (IDORelationshipException ire) { throw new FinderException("Table joining failed."); } query.addCriteria(new MatchCriteria(student, SCHOOLCLASS, MatchCriteria.EQUALS, schoolClassID)); if (schoolYearID != -1) { query.addCriteria(new MatchCriteria(student, SCHOOL_YEAR, MatchCriteria.EQUALS, schoolYearID)); } MatchCriteria nullTermination = new MatchCriteria(terminationDate, false); MatchCriteria termintationAfter = new MatchCriteria(terminationDate, MatchCriteria.GREATEREQUAL, stamp.getDate()); JoinCriteria terminationEqualsSeason = new JoinCriteria(terminationDate, seasonEndDate); query.addCriteria(new OR(nullTermination, new OR(termintationAfter, terminationEqualsSeason))); /*IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendWhereEquals(SCHOOLCLASS, schoolClassID); if (schoolYearID != -1) sql.appendAndEquals(SCHOOL_YEAR, schoolYearID);*/ return super.idoFindPKsBySQL(query.toString()); } public Collection ejbFindBySchoolClassAndYearAndStudyPath(SchoolClass group, SchoolYear schoolYear, SchoolStudyPath studyPath) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendWhereEquals(SCHOOLCLASS, group); if (schoolYear != null) { sql.appendAndEquals(SCHOOL_YEAR, schoolYear); } if (studyPath != null) { sql.appendAndEquals(STUDY_PATH, studyPath); } return super.idoFindPKsBySQL(sql.toString()); } //Uses the new many-to-many relationship between SchoolClassMember and SchoolStudyPath... public Collection ejbFindBySchoolAndSeasonAndYearAndStudyPath(School school, SchoolSeason season, SchoolYear year, SchoolStudyPath studyPath) throws FinderException { Table table = new Table(this); Table group = new Table(SchoolClass.class); Table path = new Table(SchoolStudyPath.class); Table user = new Table(User.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn(table)); try { query.addJoin(table, group); query.addJoin(table, user); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(group, "school_id", MatchCriteria.EQUALS, school)); query.addCriteria(new MatchCriteria(group, "sch_school_season_id", MatchCriteria.EQUALS, season)); if (year != null) { query.addCriteria(new MatchCriteria(table, SCHOOL_YEAR, MatchCriteria.EQUALS, year)); } if (studyPath != null) { try { query.addManyToManyJoin(table, path); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } try { query.addCriteria(new MatchCriteria(path, path.getPrimaryKeyColumnName(), MatchCriteria.EQUALS, studyPath)); } catch (IDOCompositePrimaryKeyException icpe) { throw new FinderException(icpe.getMessage()); } } query.addOrder(user, "first_name", true); query.addOrder(user, "middle_name", true); query.addOrder(user, "last_name", true); return idoFindPKsByQuery(query); } public Collection ejbFindByStudent(User student) throws FinderException { return ejbFindByStudent(((Integer) student.getPrimaryKey()).intValue()); } public Collection ejbFindByStudent(int studentID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getEntityName()).appendWhere().append(MEMBER).appendEqualSign().append(studentID); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindByStudentAndTypes(int studentID, Collection schoolTypes) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this); sql.appendWhereEquals(MEMBER, studentID); sql.appendAnd().append(SCHOOL_TYPE).appendIn().appendLeftParenthesis(); sql.appendCommaDelimited(schoolTypes); sql.appendRightParenthesis(); return super.idoFindPKsBySQL(sql.toString()); } public java.util.Collection ejbFindAllBySchoolAndUsersWithSchoolYearAndNotRemoved(int schoolId, java.util.Collection users) throws javax.ejb.FinderException { IDOQuery sql = idoQuery(); final String M_ = "m."; // sql alias for school class member final String C_ = "c."; // sql alias for school class sql.appendSelect().append("m.*"); sql.appendFrom().append(getEntityName() + " m"); if (0 < schoolId) { sql.append(", " + SchoolClassBMPBean.SCHOOLCLASS + " c"); } sql.appendWhereIsNull(M_ + REMOVED_DATE); sql.appendAndIsNotNull(M_ + SCHOOL_YEAR); if (0 < schoolId) { sql.appendAndEquals(C_ + SchoolClassBMPBean.SCHOOLCLASS + "_id", M_ + SCHOOLCLASS); sql.appendAndEquals(C_ + SchoolClassBMPBean.SCHOOL, schoolId); } if (null != users && 0 < users.size()) { sql.appendAnd().append(M_ + MEMBER); sql.appendIn(idoQuery().appendCommaDelimited(users)); } sql.appendAnd().append(M_ + REGISTER_DATE); sql.appendLessThanSign(); sql.append(new Date(System.currentTimeMillis())); return idoFindPKsBySQL(sql.toString()); } public Collection ejbFindByStudentAndSchoolAndTypes(int studentID, int schoolID, Collection schoolTypes) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelect().append(" m.* ").appendFrom().append(getEntityName()).append(" m, sch_school_class c"); sql.appendWhere().append("m." + MEMBER).appendEqualSign().append(studentID); sql.appendAndEquals("m." + SCHOOLCLASS, "c.sch_school_class_id"); sql.appendAndEquals("c.school_id", schoolID); sql.appendAnd().append("m.").append(SCHOOL_TYPE).appendIn().appendLeftParenthesis(); sql.appendCommaDelimited(schoolTypes); sql.appendRightParenthesis(); sql.appendOrderBy(REGISTER_DATE + " desc"); System.out.println("<ejbFindByStudentAndSchoolAndTypes> = " + sql.toString()); return super.idoFindPKsBySQL(sql.toString()); } public Integer ejbFindByUserAndSchoolClass(User user, SchoolClass schoolClass) throws FinderException { return ejbFindByUserAndSchoolClass(((Integer) user.getPrimaryKey()).intValue(), ((Integer) schoolClass.getPrimaryKey()).intValue()); } public Integer ejbFindByUserAndSchoolClass(int userID, int schoolClassID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this).appendWhere().append(MEMBER).appendEqualSign().append(userID).appendAnd().append(SCHOOLCLASS).appendEqualSign().append(schoolClassID); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindByUserAndSeason(User user, SchoolSeason season) throws FinderException { return ejbFindByUserAndSeason(((Integer) user.getPrimaryKey()).intValue(), ((Integer) season.getPrimaryKey()).intValue()); } public Integer ejbFindByUserAndSeason(int userID, int seasonID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID).appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindByUserAndSchool(int userID, int schoolID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID).appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public int ejbHomeGetNumberOfPlacingsAtSchool(User user, School school) throws IDOException { return ejbHomeGetNumberOfPlacingsAtSchool(new Integer(user.getPrimaryKey().toString()).intValue(), new Integer(school.getPrimaryKey().toString()).intValue()); } public int ejbHomeGetNumberOfPlacingsAtSchool(int userID, int schoolID) throws IDOException { IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID).appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return this.idoGetNumberOfRecords(sql); } public int ejbHomeGetNumberOfPlacings(int userID) throws IDOException { IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this).appendWhereEquals(MEMBER, userID); System.out.println("<schoolClammMemberbmpBean> sql = "+sql.toString()); return this.idoGetNumberOfRecords(sql); } public int ejbHomeGetNumberOfPlacings(int userID, int schoolClassID) throws IDOException { IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this).appendWhereEquals(MEMBER, userID).appendAndEquals(SCHOOLCLASS, schoolClassID); return this.idoGetNumberOfRecords(sql); } public int ejbHomeGetNumberOfPlacingsBySchoolCategory(User child, SchoolCategory schoolCategory) throws IDOException { Table table = new Table(this); Table schoolType = new Table(SchoolType.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn(table)); try { query.addJoin(table, schoolType); } catch (IDORelationshipException ire) { throw new IDOException("Couldn't join tables sch_class_member and sch_school_type..."); } query.addCriteria(new MatchCriteria(table, MEMBER, MatchCriteria.EQUALS, child)); query.addCriteria(new MatchCriteria(schoolType, "school_category", MatchCriteria.EQUALS, schoolCategory)); return this.idoGetNumberOfRecords(query); } public int ejbHomeGetNumberOfPlacingsBySeasonAndSchoolCategory(User child, SchoolSeason season, SchoolCategory schoolCategory) throws IDOException { Table table = new Table(this); Table schoolType = new Table(SchoolType.class); Table schoolClass = new Table(SchoolClass.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn(table)); try { query.addJoin(table, schoolType); } catch (IDORelationshipException ire) { throw new IDOException("Couldn't join tables sch_class_member and sch_school_type..."); } try { query.addJoin(table, schoolClass); } catch (IDORelationshipException ire) { throw new IDOException("Couldn't join tables sch_class_member and sch_school_class..."); } query.addCriteria(new MatchCriteria(table, MEMBER, MatchCriteria.EQUALS, child)); query.addCriteria(new MatchCriteria(schoolType, "school_category", MatchCriteria.EQUALS, schoolCategory)); query.addCriteria(new MatchCriteria(schoolClass, "sch_school_season_id", MatchCriteria.EQUALS, season)); return this.idoGetNumberOfRecords(query); } public int ejbHomeGetNumberOfSubGroupPlacings(int userID, int schoolClassID) throws IDOException { IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this).append("c, sch_sub_group_placements p"); sql.appendWhereEquals("c."+MEMBER, userID); sql.appendAndEquals("p."+SCHOOLCLASS, schoolClassID); sql.appendAndEquals("c.sch_class_member_id", "p.sch_class_member_id"); return this.idoGetNumberOfRecords(sql); } public int ejbHomeGetNumberOfPlacingsByClass(SchoolClass schoolClass) throws IDOException { IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this); sql.appendWhereEquals(SCHOOLCLASS, schoolClass); return this.idoGetNumberOfRecords(sql); } public Collection ejbFindAllSubGroupPlacements(int userID, int schoolID, int seasonID) throws FinderException { IDOQuery query = idoQuery(); query.appendSelectAllFrom(this).append(" mb, ").append(SchoolClassBMPBean.SCHOOLCLASS).append(" cl"); query.appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID); query.appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID); query.appendAnd().appendLeftParenthesis().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendRightParenthesis(); query.appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); query.appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID); query.appendAnd().append("cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).appendEqualSign().append(true); return this.idoFindPKsByQuery(query); } public Integer ejbFindLatestByUserAndSchool(int userID, int schoolID) throws FinderException { return ejbFindLatestByUserAndSchool(userID, schoolID, null); } public Integer ejbFindLatestByUserAndSchool(int userID, int schoolID, Collection schoolTypes) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhereEquals(" mb." + MEMBER, userID); sql.appendAndEquals("cl." + SchoolClassBMPBean.SCHOOL, schoolID); sql.appendAnd().appendLeftParenthesis().append("cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().append(true).appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).appendIsNull().appendRightParenthesis(); sql.appendAndEquals(" mb." + SCHOOLCLASS, "cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (schoolTypes != null) { sql.appendAnd().append("mb." + this.SCHOOL_TYPE).appendInCollection(schoolTypes); } sql.appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindLatestByUserAndSchoolAndPlacementDate(int userID, int schoolID, Collection schoolTypes,Date placementDate) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhereEquals(" mb." + MEMBER, userID); sql.append(" and mb."+REGISTER_DATE+"<="); sql.append(placementDate); sql.appendAnd().appendLeftParenthesis().append("cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().append(true).appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).appendIsNull().appendRightParenthesis(); sql.appendAndEquals(" mb." + SCHOOLCLASS, "cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (schoolTypes != null) { sql.appendAnd().append("mb." + this.SCHOOL_TYPE).appendInCollection(schoolTypes); } sql.appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindLatestByUser(User user) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") /* * .appendAnd() .appendLeftParenthesis() .append("mb." + REMOVED_DATE + " is * null") .appendOr() .append("mb." + REMOVED_DATE) * .appendGreaterThanOrEqualsSign() .append("mb." + REGISTER_DATE) * .appendRightParenthesis(); */ .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindLatestByUserAndSchoolType(User user, SchoolType type) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName()) .appendWhere().append(MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append(SCHOOL_TYPE).appendEqualSign().append(type.getPrimaryKey()) /* * .appendAnd() .appendLeftParenthesis() .append("mb." + REMOVED_DATE + " is * null") .appendOr() .append("mb." + REMOVED_DATE) * .appendGreaterThanOrEqualsSign() .append("mb." + REGISTER_DATE) * .appendRightParenthesis(); */ .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindLatestByUserAndSchCategory(User user, SchoolCategory cat) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + cat.getPrimaryKey() + "'") /* * .appendAnd() .appendLeftParenthesis() .append("mb." + REMOVED_DATE + " is * null") .appendOr() .append("mb." + REMOVED_DATE) * .appendGreaterThanOrEqualsSign() .append("mb." + REGISTER_DATE) * .appendRightParenthesis() */ .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindLatestByUserAndSchCategoryAndSeason(User user, SchoolCategory cat, SchoolSeason season) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(season.getPrimaryKey()) .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + cat.getPrimaryKey() + "'") /* * .appendAnd() .appendLeftParenthesis() .append("mb." + REMOVED_DATE + " is * null") .appendOr() .append("mb." + REMOVED_DATE) * .appendGreaterThanOrEqualsSign() .append("mb." + REGISTER_DATE) * .appendRightParenthesis() */ .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Collection ejbFindActiveByCategorySeasonAndSchools(SchoolCategory cat, SchoolSeason season, String[] schoolIds, boolean notInSchools) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp") .appendWhere().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(season.getPrimaryKey()) .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + cat.getPrimaryKey() + "'") .appendAnd().appendLeftParenthesis().append("mb." + REMOVED_DATE + " is null").appendOr() .append("mb." + REMOVED_DATE).appendGreaterThanOrEqualsSign().append(new Date(System.currentTimeMillis())).appendRightParenthesis(); if (schoolIds != null) { if (notInSchools) { sql.appendAnd().append("cl.school_id").appendNotInArray(schoolIds); } else { sql.appendAnd().append("cl.school_id").appendInArray(schoolIds); } } return this.idoFindPKsByQuery(sql); } public Collection ejbFindAllByCategory(SchoolCategory category) throws FinderException { Table table = new Table(this); Table type = new Table(SchoolType.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn()); try { query.addJoin(table, type); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(type, SchoolTypeBMPBean.SCHOOLCATEGORY, MatchCriteria.EQUALS, category)); query.addOrder(table, MEMBER, false); query.addOrder(table, REGISTER_DATE, true); return idoFindPKsByQuery(query); } public Collection ejbFindAllByCategoryForPlacementChangesExport(SchoolCategory category, Date startDate, Date endDate) throws FinderException { /* Table table = new Table(this); Table type = new Table(SchoolType.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn()); try { query.addJoin(table, type); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(type, SchoolTypeBMPBean.SCHOOLCATEGORY, MatchCriteria.EQUALS, category)); query.addCriteria(new MatchCriteria(table, REGISTER_DATE, MatchCriteria.GREATER, endDate)); new MatchCriteria() query.addOrder(table, MEMBER, false); query.addOrder(table, REGISTER_DATE, true); return idoFindPKsByQuery(query); */ StringBuffer query = new StringBuffer(); query.append("SELECT * FROM sch_school_type, sch_class_member "); query.append("WHERE "); query.append("sch_class_member.sch_school_type_id = sch_school_type.sch_school_type_id "); query.append("AND sch_school_type.school_category = '" + category.getCategory() + "' "); query.append("and not (sch_class_member.register_date > '"+ endDate +"') "); query.append("and not (sch_class_member.removed_date is not null and sch_class_member.removed_date < '"+ startDate +"') "); // query.append("and not ((sch_class_member.register_date < '"+ startDate +"') and (sch_class_member.removed_date is null or sch_class_member.removed_date > '"+ endDate +"')) "); query.append("ORDER BY "); query.append("sch_class_member.ic_user_id DESC , "); query.append("sch_class_member.register_date "); return idoFindPKsBySQL(query.toString()); } public Integer ejbFindActiveByStudentSchoolAndCategory(int studentId, int schoolId, SchoolCategory category) throws FinderException { Table table = new Table(this); Table typeTable = new Table(SchoolType.class); Table schoolClassTable = new Table(SchoolClass.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn()); try { query.addJoin(table, typeTable); query.addJoin(table, schoolClassTable); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(table, MEMBER, MatchCriteria.EQUALS, studentId)); query.addCriteria(new MatchCriteria(schoolClassTable, SchoolClassBMPBean.SCHOOL, MatchCriteria.EQUALS, schoolId)); query.addCriteria(new MatchCriteria(typeTable, SchoolTypeBMPBean.SCHOOLCATEGORY, MatchCriteria.EQUALS, category)); Date today = new Date(System.currentTimeMillis()); query.addCriteria(new MatchCriteria(table, REGISTER_DATE, MatchCriteria.LESSEQUAL, today)); Criteria a = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.GREATER, today); Criteria b = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.IS, MatchCriteria.NULL); query.addCriteria(new OR(a, b)); return (Integer) this.idoFindOnePKByQuery(query); } public Integer ejbFindNotTerminatedByStudentSchoolAndCategory(int studentId, int schoolId, SchoolCategory category) throws FinderException { Table table = new Table(this); Table typeTable = new Table(SchoolType.class); Table schoolClassTable = new Table(SchoolClass.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn()); try { query.addJoin(table, typeTable); query.addJoin(table, schoolClassTable); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(table, MEMBER, MatchCriteria.EQUALS, studentId)); query.addCriteria(new MatchCriteria(schoolClassTable, SchoolClassBMPBean.SCHOOL, MatchCriteria.EQUALS, schoolId)); query.addCriteria(new MatchCriteria(typeTable, SchoolTypeBMPBean.SCHOOLCATEGORY, MatchCriteria.EQUALS, category)); Date today = new Date(System.currentTimeMillis()); Criteria a = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.GREATER, today); Criteria b = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.IS, MatchCriteria.NULL); query.addCriteria(new OR(a, b)); query.addOrder(table, REGISTER_DATE, false); return (Integer) this.idoFindOnePKByQuery(query); } public Collection ejbFindAllNotTerminatedByStudent(int studentId) throws FinderException { Table table = new Table(this); //Table typeTable = new Table(SchoolType.class); Table schoolClassTable = new Table(SchoolClass.class); SelectQuery query = new SelectQuery(table); query.addColumn(new WildCardColumn()); try { // query.addJoin(table, typeTable); query.addJoin(table, schoolClassTable); } catch (IDORelationshipException ire) { throw new FinderException(ire.getMessage()); } query.addCriteria(new MatchCriteria(table, MEMBER, MatchCriteria.EQUALS, studentId)); //query.addCriteria(new MatchCriteria(schoolClassTable, SchoolClassBMPBean.SCHOOL, MatchCriteria.EQUALS, schoolId)); //query.addCriteria(new MatchCriteria(typeTable, SchoolTypeBMPBean.SCHOOLCATEGORY, MatchCriteria.EQUALS, category)); Date today = new Date(System.currentTimeMillis()); Criteria a = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.GREATER, today); Criteria b = new MatchCriteria(table, REMOVED_DATE, MatchCriteria.IS, MatchCriteria.NULL); query.addCriteria(new OR(a, b)); query.addOrder(table, REGISTER_DATE, false); return this.idoFindPKsByQuery(query); } public Collection ejbFindAllByUserAndSchoolCategory(User user, SchoolCategory cat) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + cat.getPrimaryKey() + "'") .appendOrderBy(REGISTER_DATE + " desc"); return idoFindPKsBySQL(sql.toString()); } /** * Gets latest placement for user in school_categories elementary and high * school. Checks that removed_date is after register_date, otherwise the * placement is invalid. * * @param user * @return @throws * FinderException */ public Integer ejbFindLatestFromElemAndHighSchoolByUser(User user) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") /* * .appendAnd() .appendLeftParenthesis() .append("mb." + REMOVED_DATE + " is * null") .appendOr() .append("mb." + REMOVED_DATE) * .appendGreaterThanOrEqualsSign() .append("mb." + REGISTER_DATE) * .appendRightParenthesis() */ .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("(tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + SchoolCategoryBMPBean.CATEGORY_ELEMENTARY_SCHOOL + "'").appendOr().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + SchoolCategoryBMPBean.CATEGORY_HIGH_SCHOOL + "')") .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } /** * Gets latest placement for user and season in school_categories elementary * and high school. Checks that removed_date is after register_date, otherwise * the placement is invalid. * * @param user * @return @throws * FinderException */ public Integer ejbFindLatestFromElemAndHighSchoolByUserAndSeason(User user, SchoolSeason season) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + ", " + SchoolClassBMPBean.SCHOOLCLASS + " cl, " + SchoolTypeBMPBean.SCHOOLTYPE + " tp, " + SchoolSeasonBMPBean.SCHOOLSEASON + " ss ") .appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user.getPrimaryKey()) .appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y") .appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)") .appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id") .appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append("ss." + SchoolSeasonBMPBean.SCHOOLSEASON + "_id") .appendAnd().append("ss." + SchoolSeasonBMPBean.SCHOOLSEASON + "_id").appendEqualSign().append(season) .appendAnd().append("mb." + SCHOOL_TYPE).appendEqualSign().append("tp." + SchoolTypeBMPBean.SCHOOLTYPE + "_id") .appendAnd().append("(tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + SchoolCategoryBMPBean.CATEGORY_ELEMENTARY_SCHOOL + "'").appendOr().append("tp." + SchoolTypeBMPBean.SCHOOLCATEGORY).appendEqualSign().append("'" + SchoolCategoryBMPBean.CATEGORY_HIGH_SCHOOL + "')") .appendOrderBy(REGISTER_DATE + " desc"); return (Integer) this.idoFindOnePKBySQL(sql.toString()); } public Collection ejbFindByStudentAndSchool(int userID, int schoolID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID).appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); sql.appendOrderBy(REGISTER_DATE + " desc"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllByUserAndSeason(User user, SchoolSeason season) throws FinderException { return ejbFindAllByUserAndSeason(((Integer) user.getPrimaryKey()).intValue(), ((Integer) season.getPrimaryKey()).intValue()); } public Collection ejbFindAllBySchoolStudyPath(final SchoolStudyPath studyPath) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(getTableName()); sql.appendWhere(); sql.append(STUDY_PATH); sql.appendEqualSign(); sql.append(studyPath.getPrimaryKey().toString()); return idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllByUserAndSeason(int userID, int seasonID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID).appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllCurrentInvoiceCompensationBySchoolTypeAndSchools(final String operationalField, final Collection schools) throws FinderException { final IDOQuery sql = idoQuery(); final String M_ = "m."; // sql alias for school Class member final String T_ = "t."; // sql alias for school type final String U_ = "u."; // sql alias for user final String C_ = "c."; // sql alias for school class // SELECT m.sch_class_member_id FROM sch_class_member m, sch_school_type t, // IC_USER u, SCH_SCHOOL_CLASS c sql.appendSelect().append(M_ + SCHOOLCLASSMEMBERID); sql.appendFrom(new String[]{getTableName(), SchoolTypeBMPBean.SCHOOLTYPE, UserBMPBean.TABLE_NAME, SchoolClassBMPBean.SCHOOLCLASS}, new String[]{"m", "t", "u", "c"}); // WHERE m.ic_user_id=u.IC_USER_ID // AND m.sch_school_type_id=t.sch_school_type_id // AND t.school_category='...' // AND m.sch_school_class_id=c.SCH_SCHOOL_CLASS_id sql.appendWhereEquals(M_ + MEMBER, U_ + User.FIELD_USER_ID); sql.appendAndEquals(M_ + SCHOOL_TYPE, T_ + SchoolTypeBMPBean.SCHOOLTYPE + "_id"); sql.appendAndEqualsQuoted(T_ + SchoolTypeBMPBean.SCHOOLCATEGORY, operationalField); sql.appendAndEquals(M_ + SCHOOLCLASS, C_ + SchoolClassBMPBean.SCHOOLCLASS + "_id"); // AND ((c.sch_school_season_id IS NULL AND m.removed_date IS NULL ) // OR c.sch_school_season_id in // (SELECT sch_school_season_id FROM sch_school_season // WHERE season_start in // (SELECT max (season_start) FROM // (SELECT * FROM sch_school_season WHERE season_start< '<today>' )))) sql.appendAnd().appendLeftParenthesis().appendLeftParenthesis(); sql.append(C_ + SchoolClassBMPBean.SEASON).appendIsNull(); sql.appendAndIsNull(M_ + REMOVED_DATE); sql.appendRightParenthesis().appendOr(); sql.append(C_ + SchoolClassBMPBean.SEASON).append(" in "); /*sql.appendLeftParenthesis(); sql.appendSelect().append(SchoolSeasonBMPBean.SCHOOLSEASON + "_id"); sql.appendFrom().append(SchoolSeasonBMPBean.SCHOOLSEASON); sql.appendWhere(SchoolSeasonBMPBean.START + " in "); sql.appendLeftParenthesis(); sql.appendSelect().append(" max ").appendLeftParenthesis(); sql.append(SchoolSeasonBMPBean.START).appendRightParenthesis(); sql.appendFrom().appendLeftParenthesis(); sql.appendSelectAllFrom(SchoolSeasonBMPBean.SCHOOLSEASON); sql.appendWhere(SchoolSeasonBMPBean.START).appendLessThanSign(); sql.append(new Date(System.currentTimeMillis())); sql.appendRightParenthesis().appendRightParenthesis(); sql.appendRightParenthesis().appendRightParenthesis();*/ // Christoffer - the above code changes to: /*(SELECT sch_school_season_id FROM sch_school_season WHERE sch_school_season_id in (SELECT sch_school_season_id FROM sch_school_season WHERE season_start <= sysDate AND school_category = 'ELEMENTARY_SCHOOL' AND season_end >= sysDate));*/ //Anna - ..and therefore the code is changed too: sql.appendLeftParenthesis(); sql.appendSelect().append(SchoolSeasonBMPBean.SCHOOLSEASON + "_id"); sql.appendFrom().append(SchoolSeasonBMPBean.SCHOOLSEASON); sql.appendWhere(SchoolSeasonBMPBean.SCHOOLSEASON + "_id" + " in "); sql.appendLeftParenthesis(); sql.appendSelect().append(SchoolSeasonBMPBean.SCHOOLSEASON + "_id"); sql.appendFrom().append(SchoolSeasonBMPBean.SCHOOLSEASON); sql.appendWhere(SchoolSeasonBMPBean.START).appendLessThanOrEqualsSign(); sql.append(new Date(System.currentTimeMillis())); sql.appendAndEqualsQuoted(SchoolSeasonBMPBean.SCHOOL_CATEGORY, "ELEMENTARY_SCHOOL"); sql.appendAnd().append(SchoolSeasonBMPBean.END).appendGreaterThanOrEqualsSign(); sql.append(new Date(System.currentTimeMillis())); sql.appendRightParenthesis().appendRightParenthesis(); sql.appendRightParenthesis();//.appendRightParenthesis(); // AND (m.invoice_int in (...) // OR m.comp_by_agreement = true // OR c.school_id in (...)) sql.appendAnd().appendLeftParenthesis(); sql.append(M_ + INVOICE_INTERVAL).append(" in ").appendLeftParenthesis(); sql.appendCommaDelimitedWithinSingleQuotes(ejbHomeGetInvoiceIntervalTypes()); sql.appendRightParenthesis(); sql.appendOrEquals(M_ + COMPENSATION_BY_AGREEMENT, true); sql.appendOr().append(C_ + SchoolClassBMPBean.SCHOOL).append(" in "); sql.appendLeftParenthesis().appendCommaDelimited(schools); sql.appendRightParenthesis().appendRightParenthesis(); // ORDER BY u.PERSONAL_ID sql.appendOrderBy(U_ + User.FIELD_PERSONAL_ID); return idoFindPKsBySQL(sql.toString()); } public Integer ejbFindByUserAndSchoolAndSeason(int userID, int schoolID, int seasonID) throws FinderException { return ejbFindByUserAndSchoolAndSeason(userID, schoolID, seasonID, null); } public Integer ejbFindByUserAndSchoolAndSeason(int userID, int schoolID, int seasonID, Collection schoolTypes) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)"); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).appendEqualSign().appendWithinSingleQuotes("N").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).append(" is null)"); sql.appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (schoolTypes != null) { sql.appendAnd().append("mb." + SchoolClassMemberBMPBean.SCHOOL_TYPE).appendInCollection(schoolTypes); } return (Integer) idoFindOnePKBySQL(sql.toString()); } public Integer ejbFindByUserAndSchoolAndSeasonAndStudyPath(int userID, int schoolID, int seasonID, int studyPathID) throws FinderException{ IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)"); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).appendEqualSign().appendWithinSingleQuotes("N").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).append(" is null)"); sql.appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); sql.appendAnd().append(" mb." + STUDY_PATH).appendEqualSign().append(studyPathID); return (Integer) idoFindOnePKBySQL(sql.toString()); } public int ejbHomeCountByUserAndSchoolAndSeasonAndStudyPath(int userID, int schoolID, int seasonID, int studyPathID) throws IDOException{ IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhere().append(" mb." + MEMBER).appendEqualSign().append(userID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID); sql.appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)"); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).appendEqualSign().appendWithinSingleQuotes("N").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).append(" is null)"); sql.appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (studyPathID != -1) { sql.appendAnd().append(" mb." + STUDY_PATH).appendEqualSign().append(studyPathID); } return idoGetNumberOfRecords(sql.toString()); } public int ejbHomeCountByUserAndSchoolAndSeasonAndStudyPath(User user, School school, SchoolSeason season, SchoolStudyPath studyPath) throws IDOException{ IDOQuery sql = idoQuery(); sql.appendSelectCountFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl"); sql.appendWhere().append(" mb." + MEMBER).appendEqualSign().append(user); sql.appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(season); if (school != null) { sql.appendAnd().append("cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(school); } sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)"); sql.appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).appendEqualSign().appendWithinSingleQuotes("N").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_SUB_GROUP).append(" is null)"); sql.appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (studyPath != null) { sql.appendAnd().append(" mb." + STUDY_PATH).appendEqualSign().append(studyPath); } return idoGetNumberOfRecords(sql.toString()); } public Collection ejbFindBySchoolAndSeasonAndYear(int schoolID, int seasonID, int yearID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID).appendAnd().append("mb." + SCHOOL_YEAR).appendEqualSign().append(yearID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchoolAndSeason(int schoolID, int seasonID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl").appendWhere().append(" cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAnd().append("cl." + SchoolClassBMPBean.SEASON).appendEqualSign().append(seasonID).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchool(int schoolID, int schoolClassID) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl, ic_user u").appendWhere().append(" cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAndEquals("u.ic_user_id", "mb." + MEMBER).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); if (schoolClassID != -1) { sql.appendAndEquals("mb." + SCHOOLCLASS, schoolClassID); } sql.appendOrderBy("u.last_name, u.first_name, u.middle_name"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchool(int schoolID, int schoolClassID, Date date) throws FinderException { return ejbFindBySchool(schoolID, schoolClassID, null, date); } public Collection ejbFindBySchool(int schoolID, int schoolClassID, String schoolCategory, Date date) throws FinderException { Table tMember = new Table(this,"A"); Table tClass = new Table(SchoolClass.class,"B"); Table tType = new Table(SchoolType.class,"C"); Table tUser = new Table(User.class,"D"); SelectQuery query = new SelectQuery(tMember); try { query.addJoin(tMember,tType); query.addJoin(tMember,tUser); query.addJoin(tMember,tClass); query.addColumn(new WildCardColumn(tMember)); query.addCriteria(new MatchCriteria(tClass,SchoolClassBMPBean.SCHOOL,MatchCriteria.EQUALS,schoolID)); query.addCriteria(new OR(new MatchCriteria(tClass,SchoolClassBMPBean.COLUMN_VALID,MatchCriteria.EQUALS,true),new MatchCriteria(tClass,SchoolClassBMPBean.COLUMN_VALID,MatchCriteria.IS,MatchCriteria.NULL))); if(schoolCategory!=null) { query.addCriteria(new MatchCriteria(tType,SchoolTypeBMPBean.SCHOOLCATEGORY,MatchCriteria.EQUALS,schoolCategory)); } if(schoolClassID!=-1) { query.addCriteria(new MatchCriteria(tMember,SCHOOLCLASS,MatchCriteria.EQUALS,schoolClassID)); } query.addCriteria(new OR(new MatchCriteria(tMember,REMOVED_DATE,MatchCriteria.GREATEREQUAL,date),new MatchCriteria(tMember,REMOVED_DATE,MatchCriteria.IS,MatchCriteria.NULL))); query.addOrder(tUser,"last_name",true); query.addOrder(tUser,"first_name",true); query.addOrder(tUser,"middle_name",true); return idoFindPKsByQuery(query); } catch (IDORelationshipException e) { throw new FinderException(e.getMessage()); } } public Collection ejbFindBySchool(int schoolID, int schoolClassID, Date date, boolean showNotYetActive) throws FinderException { return ejbFindBySchool(schoolID, schoolClassID, null, date, showNotYetActive); } public Collection ejbFindBySchool(int schoolID, int schoolClassID, String schoolCategory, Date date, boolean showNotYetActive) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl, sch_school_type t, ic_user u").appendWhere().append(" cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAndEquals("u.ic_user_id", "mb." + MEMBER).appendAnd().append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID).append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); sql.appendAndEquals("mb." + SCHOOL_TYPE, "t.sch_school_type_id"); if (schoolCategory != null) { sql.appendAndEqualsQuoted("t.school_category", schoolCategory); } if (schoolClassID != -1) { sql.appendAndEquals("mb." + SCHOOLCLASS, schoolClassID); } if (showNotYetActive) { sql.appendAnd().append(REGISTER_DATE).appendGreaterThanSign().append(date); } else { sql.appendAnd().append(REGISTER_DATE).appendLessThanOrEqualsSign().append(date); } sql.appendAnd().appendLeftParenthesis().append(REMOVED_DATE).appendGreaterThanOrEqualsSign().append(date).appendOr().append(REMOVED_DATE).append(" is null").appendRightParenthesis(); sql.appendOrderBy("u.last_name, u.first_name, u.middle_name"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindBySchoolAndLog(int schoolID, int schoolClassID, String schoolCategory, Date date) throws FinderException { return _ejbFindBySchoolAndLog(schoolID, schoolClassID, schoolCategory, date, null); } public Collection ejbFindBySchoolAndLog(int schoolID, int schoolClassID, String schoolCategory, Date date, boolean showNotYetActive) throws FinderException { return _ejbFindBySchoolAndLog(schoolID, schoolClassID, schoolCategory, date, new Boolean(showNotYetActive)); } private Collection _ejbFindBySchoolAndLog(int schoolID, int schoolClassID, String schoolCategory, Date date, Boolean showNotYetActive) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelect(); sql.append("distinct m.*,u.*"); sql.appendFrom(); sql.append("sch_class_member m left join sch_class_member_log l "); sql.append("on").appendEquals("m.sch_class_member_id", "l.sch_class_member_id"); if (schoolClassID != -1) { sql.appendAnd(); sql.appendEquals("l.sch_school_class_id", "m.sch_school_class_id"); } if (showNotYetActive != null) { if (showNotYetActive.booleanValue()) { sql.appendAnd().append("l.start_date").appendGreaterThanOrEqualsSign().append(date); } else { sql.appendAnd().append("l.start_date").appendLessThanOrEqualsSign().append(date); sql.appendAnd().appendLeftParenthesis().append("l.end_date").appendGreaterThanOrEqualsSign().append(date); sql.appendOr().append("l.end_date is null").appendRightParenthesis(); } } sql.append(",sch_school_class c,"); sql.append("sch_school_type t,"); sql.append("ic_user u"); sql.appendWhereEquals("m.sch_school_type_id", "t.sch_school_type_id"); sql.appendAndEquals("m.sch_school_class_id", "c.sch_school_class_id"); sql.appendAndEquals("m.ic_user_id", "u.ic_user_id"); if (schoolID != -1) { sql.appendAndEquals("c.school_id", schoolID); } sql.appendAnd().appendLeftParenthesis().appendEqualsQuoted("c.valid", "Y"); sql.appendOr().append("c.valid is null").appendRightParenthesis(); if (schoolCategory != null) { sql.appendAndEqualsQuoted("t.school_category", schoolCategory); } if (schoolClassID != -1) { sql.appendAnd(); sql.appendEquals("m.sch_school_class_id", schoolClassID); } if (showNotYetActive != null) { if (showNotYetActive.booleanValue()) { sql.appendAnd().append("m.register_date").appendGreaterThanSign().append(date); } else { sql.appendAnd().append("m.register_date").appendLessThanOrEqualsSign().append(date); } } sql.appendAnd().appendLeftParenthesis(); sql.append("m.removed_date").appendGreaterThanSign().append(date); sql.appendOr().append("m.removed_date is null").appendRightParenthesis(); sql.appendOrderBy("u.last_name, u.first_name, u.middle_name"); return super.idoFindPKsByQuery(sql); } public Collection ejbFindBySchoolChildcare(int schoolID, int schoolClassID, Date date, boolean showNotYetActive) throws FinderException { return ejbFindBySchool(schoolID, schoolClassID, null, date, showNotYetActive); } public Collection ejbFindBySchoolChildcare(int schoolID, int schoolClassID, String schoolCategory, Date date, boolean showNotYetActive) throws FinderException { IDOQuery sql = idoQuery(); sql.appendSelectAllFrom(this.getTableName() + " mb" + "," + SchoolClassBMPBean.SCHOOLCLASS + " cl, sch_school_type t, ic_user u, comm_childcare_archive cca ").appendWhere(); sql.append(" cl." + SchoolClassBMPBean.SCHOOL).appendEqualSign().append(schoolID).appendAndEquals("u.ic_user_id", "mb." + MEMBER).appendAnd(); sql.append("(cl." + SchoolClassBMPBean.COLUMN_VALID).appendEqualSign().appendWithinSingleQuotes("Y").appendOr().append("cl." + SchoolClassBMPBean.COLUMN_VALID); sql.append(" is null)").appendAnd().append(" mb." + SCHOOLCLASS).appendEqualSign().append("cl." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); sql.appendAndEquals("mb." + SCHOOL_TYPE, "t.sch_school_type_id"); sql.appendAndEquals("mb." + SCHOOLCLASSMEMBERID, "cca." + SCHOOLCLASSMEMBERID); if (schoolCategory != null) { sql.appendAndEqualsQuoted("t.school_category", schoolCategory); } if (schoolClassID != -1) { sql.appendAndEquals("mb." + SCHOOLCLASS, schoolClassID); } if (showNotYetActive) { //sql.appendAnd().append(REGISTER_DATE).appendGreaterThanSign().append(date); sql.appendAnd().append("cca.VALID_FROM_DATE").appendGreaterThanSign().append(date); } else { sql.appendAnd().append(REGISTER_DATE).appendLessThanOrEqualsSign().append(date); sql.appendAnd().append("cca.VALID_FROM_DATE").appendLessThanOrEqualsSign().append(date); } sql.appendAnd().appendLeftParenthesis().append(REMOVED_DATE).appendGreaterThanOrEqualsSign().append(date).appendOr().append(REMOVED_DATE).append(" is null").appendRightParenthesis(); sql.appendOrderBy("u.last_name, u.first_name, u.middle_name"); return super.idoFindPKsBySQL(sql.toString()); } public Collection ejbFindAllLastYearStudentsBySeasonAndMaximumAge(SchoolSeason season, int maxAge) throws FinderException { return ejbFindAllLastYearStudentsBySeasonAndYearAndMaximumAge(season, null, maxAge); } /** * Finds all Students who are on the last year in their school. Does not take * into account years with age higher than 14 by default. * * @param season * @param year * @return @throws * FinderException * @throws RemoteException */ public Collection ejbFindAllLastYearStudentsBySeasonAndYear(SchoolSeason season, SchoolYear year) throws FinderException { int maxAge = 14; return ejbFindAllLastYearStudentsBySeasonAndYearAndMaximumAge(season, year, maxAge); } /** * Finds all Students who are on the last year in their school * * @param season * @param year * @param maxAge * The age to be maximum taken into account for a last year. * @return @throws * FinderException * @throws RemoteException */ public Collection ejbFindAllLastYearStudentsBySeasonAndYearAndMaximumAge(SchoolSeason season, SchoolYear year, int maxAge) throws FinderException { if (season == null) { throw new FinderException("ejbFindAllLastYearStudentsBySeasonAndYearAndMaximumAge: SchoolSeason not set"); } final StringBuffer sql = new StringBuffer(); int seasonId = ((Integer) season.getPrimaryKey()).intValue(); int yearId = -1; if (year != null) { yearId = ((Integer) year.getPrimaryKey()).intValue(); } //int maxAge = 14; sql.append("select student.*"); sql.append(" from sch_school_sch_school_year school,sch_school_year schoolyear, sch_school_class class, " + getTableName() + " student"); sql.append(" where school.sch_school_year_id = schoolyear.sch_school_year_id"); sql.append(" and student." + SCHOOL_YEAR + " = school.sch_school_year_id"); sql.append(" and class.school_id = school.sch_school_id"); sql.append(" and class.sch_school_season_id = " + seasonId); sql.append(" and class.sch_school_class_id = student." + SCHOOLCLASS); if (year != null) { sql.append(" and schoolyear.sch_school_year_id = " + yearId); } sql.append(" and exists"); sql.append(" ("); sql.append(" select s.sch_school_id, max (y.year_age)"); sql.append(" from sch_school_sch_school_year s, sch_school_year y"); sql.append(" where s.sch_school_year_id = y.sch_school_year_id"); sql.append(" group by s.sch_school_id"); sql.append(" having max (y.year_age) <=").append(maxAge); sql.append(" and schoolyear.year_age = max (y.year_age)"); //sql.append (" and school.sch_school_year_id =s.sch_school_year_id"); sql.append(" and school.sch_school_id = s.sch_school_id"); sql.append(" )"); return idoFindIDsBySQL(sql.toString()); } public Collection ejbFindAllBySeasonAndSchoolYear(SchoolSeason season, SchoolYear schoolYear) throws FinderException { final String[] tableNames = new String[]{SCHOOLCLASSMEMBER, SchoolClassBMPBean.SCHOOLCLASS}; final String[] tableIds = new String[]{"m", "c"}; IDOQuery sql = idoQuery(); sql.appendSelect(); sql.append("m." + SCHOOLCLASSMEMBERID); sql.appendFrom(tableNames, tableIds); sql.appendWhereEquals("m." + SCHOOL_YEAR, schoolYear); sql.appendAndEquals("m." + SCHOOLCLASS, "c." + SchoolClassBMPBean.SCHOOLCLASS + "_id"); sql.appendAndEquals("c." + SchoolClassBMPBean.SEASON, season); return idoFindIDsBySQL(sql.toString()); } public int ejbHomeGetNumberOfUsersNotAssignedToClassOnGivenDate(Group citizenGroup, Date date, Collection classes, Date firstDateOfBirth, Date lastDateOfBirth) throws IDOException, IDOLookupException { try { IDOEntityDefinition usrDef = IDOLookup.getEntityDefinitionForClass(User.class); String usrIdColumn = usrDef.getPrimaryKeyDefinition().getField().getSQLFieldName(); IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class); IDOEntityField dateOfBirth = usrDef.findFieldByUniqueName(User.FIELD_DATE_OF_BIRTH); //relationStatus could be as parameter to this method String[] relationStatus = new String[1]; relationStatus[0] = GroupRelation.STATUS_ACTIVE; String[] tables = new String[2]; String[] variables = new String[2]; //table name tables[0] = usrDef.getSQLTableName(); // as variable variables[0] = "u"; //table name tables[1] = grRelDef.getSQLTableName(); // as variable variables[1] = "gr_rel"; IDOQuery query = this.idoQuery(); query.appendSelectCount(); //from query.appendFrom(tables, variables); //where query.appendWhere(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_GROUP).getSQLFieldName()); query.appendEqualSign(); query.append(citizenGroup.getPrimaryKey()); //and query.appendAnd(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_RELATED_GROUP).getSQLFieldName()); query.appendEqualSign(); query.append(variables[0]); query.append("."); query.append(usrIdColumn); //and if relationstatus if (relationStatus != null) { //and query.appendAnd(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_STATUS).getSQLFieldName()); query.appendInArrayWithSingleQuotes(relationStatus); } query.appendAnd(); query.append(variables[0]); query.append("."); query.append(dateOfBirth); query.appendGreaterThanOrEqualsSign(); query.append(firstDateOfBirth); query.appendAnd(); query.append(variables[0]); query.append("."); query.append(dateOfBirth); query.appendLessThanOrEqualsSign(); query.append(lastDateOfBirth); query.appendAnd(); query.append(variables[0]); query.append("."); query.append(usrIdColumn); IDOQuery subQuery = this.idoQuery(); subQuery.appendSelect(); subQuery.append(" usr."); subQuery.append(usrIdColumn); subQuery.appendFrom(); subQuery.append(this.getEntityName()); subQuery.append(" cm, "); subQuery.append(usrDef.getSQLTableName()); subQuery.append(" usr "); subQuery.appendWhere(); subQuery.append("usr."); subQuery.append(usrIdColumn); subQuery.appendEqualSign(); subQuery.append("cm."); subQuery.append(MEMBER); subQuery.appendAnd(); subQuery.append("cm."); subQuery.append(REGISTER_DATE); subQuery.appendLessThanOrEqualsSign(); subQuery.append(date); subQuery.appendAnd(); subQuery.append("cm."); subQuery.append(SCHOOLCLASS); subQuery.appendInCollection(classes); query.appendNotIn(subQuery); System.out.println("SQL -> " + this.getClass() + ":" + query); return idoGetNumberOfRecords(query); } catch (IDOCompositePrimaryKeyException e) { e.printStackTrace(); } return -1; } /** * The above function will fail because there are too many items generated in * subQuery.appendInCollection(classes) . This function does the same thing, * but creates another subquery instead of the list of classes as above. */ public int ejbHomeGetNumberOfUsersNotAssignedToClassOnGivenDateNew(Group citizenGroup, Date date, SchoolSeason schoolSeason, Date firstDateOfBirth, Date lastDateOfBirth) throws IDOException, IDOLookupException { try { IDOEntityDefinition usrDef = IDOLookup.getEntityDefinitionForClass(User.class); String usrIdColumn = usrDef.getPrimaryKeyDefinition().getField().getSQLFieldName(); IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class); IDOEntityDefinition schoolClassDef = IDOLookup.getEntityDefinitionForClass(SchoolClass.class); String schoolClassIdColumn = schoolClassDef.getPrimaryKeyDefinition().getField().getSQLFieldName(); IDOEntityField dateOfBirth = usrDef.findFieldByUniqueName(User.FIELD_DATE_OF_BIRTH); IDOEntityDefinition addressDef = IDOLookup.getEntityDefinitionForClass(Address.class); IDOEntityDefinition communeDef = IDOLookup.getEntityDefinitionForClass(Commune.class); //relationStatus could be as parameter to this method String[] relationStatus = new String[1]; relationStatus[0] = GroupRelation.STATUS_ACTIVE; String[] tables = new String[5]; String[] variables = new String[5]; //table name tables[0] = usrDef.getSQLTableName(); // as variable variables[0] = "u"; //table name tables[1] = grRelDef.getSQLTableName(); // as variable variables[1] = "gr_rel"; tables[2] = addressDef.getSQLTableName(); // as variable variables[2] = "a"; tables[3] = communeDef.getSQLTableName(); // as variable variables[3] = "c"; tables[4] = "IC_USER_ADDRESS"; // as variable variables[4] = "ua"; IDOQuery query = this.idoQuery(); query.appendSelectCount(); //from query.appendFrom(tables, variables); //where query.appendWhere(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_GROUP).getSQLFieldName()); query.appendEqualSign(); query.append(citizenGroup.getPrimaryKey()); //and query.appendAnd(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_RELATED_GROUP).getSQLFieldName()); query.appendEqualSign(); query.append(variables[0]); query.append("."); query.append(usrIdColumn); //and if relationstatus if (relationStatus != null) { //and query.appendAnd(); query.append(variables[1]); query.append("."); query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_STATUS).getSQLFieldName()); if(relationStatus.length==1){ query.appendEqualSign().appendWithinSingleQuotes(relationStatus[0]); } else { query.appendInArrayWithSingleQuotes(relationStatus); } } query.appendAnd(); query.append(variables[0]); query.append("."); query.append(dateOfBirth); query.appendGreaterThanOrEqualsSign(); query.append(firstDateOfBirth); query.appendAnd(); query.append(variables[0]); query.append("."); query.append(dateOfBirth); query.appendLessThanOrEqualsSign(); query.append(lastDateOfBirth); query.appendAnd(); query.append(variables[0]); query.append(".IC_USER_ID"); query.appendEqualSign(); query.append(variables[4]); query.append(".IC_USER_ID"); query.appendAnd(); query.append(variables[4]); query.append(".ic_address_id"); query.appendEqualSign(); query.append(variables[2]); query.append(".ic_address_id"); query.appendAnd(); query.append(variables[2]); query.append(".ic_commune_id"); query.appendEqualSign(); query.append(variables[3]); query.append(".ic_commune_id"); query.appendAnd(); query.appendEqualsQuoted(variables[3] + ".default_commune", "Y"); // u.IC_USER_ID=ua.ic_user_id // AND ua.ic_address_id=a.ic_address_id // AND a.ic_commune_id=c.ic_commune_id // AND c.default_commune='Y' query.appendAnd(); query.append(variables[0]); query.append("."); query.append(usrIdColumn); IDOQuery subQuery = this.idoQuery(); subQuery.appendSelect(); subQuery.append(" usr."); subQuery.append(usrIdColumn); subQuery.appendFrom(); subQuery.append(this.getEntityName()); subQuery.append(" cm, "); subQuery.append(usrDef.getSQLTableName()); subQuery.append(" usr "); subQuery.appendWhere(); subQuery.append("usr."); subQuery.append(usrIdColumn); subQuery.appendEqualSign(); subQuery.append("cm."); subQuery.append(MEMBER); subQuery.appendAnd(); subQuery.append("cm."); subQuery.append(REGISTER_DATE); subQuery.appendLessThanOrEqualsSign(); subQuery.append(date); subQuery.appendAnd(); subQuery.append("cm."); subQuery.append(SCHOOLCLASS); IDOQuery subSubQuery = this.idoQuery(); subSubQuery.appendSelect(); subSubQuery.append(schoolClassIdColumn); //" SCH_SCHOOL_CLASS_ID " subSubQuery.appendFrom(); subSubQuery.append(schoolClassDef.getSQLTableName()); subSubQuery.appendWhereEquals("SCH_SCHOOL_SEASON_ID", schoolSeason.getPrimaryKey().toString()); subQuery.appendIn(subSubQuery); query.appendNotIn(subQuery); System.out.println("SQL -> " + this.getClass() + ":" + query); return idoGetNumberOfRecords(query); } catch (IDOCompositePrimaryKeyException e) { e.printStackTrace(); } return -1; } public Collection ejbFindAllByUserAndPeriodAndSchoolCategory(User child, Date period, SchoolCategory category) throws FinderException { final IDOQuery sql = idoQuery(); final String M_ = "m."; // sql alias for school Class member final String T_ = "t."; // sql alias for school type final Object userId = child.getPrimaryKey(); sql.appendSelectAllFrom(getTableName() + " m").append(',' + SchoolTypeBMPBean.SCHOOLTYPE + " t").appendWhere().appendEquals(M_ + MEMBER, userId + ""); if (null != category) { sql.appendAndEquals(M_ + SCHOOL_TYPE, T_ + SchoolTypeBMPBean.SCHOOLTYPE + "_id"); sql.appendAndEqualsQuoted(T_ + SchoolTypeBMPBean.SCHOOLCATEGORY, category.getCategory()); } if (null != period) { final Calendar calendar = Calendar.getInstance(); calendar.setTime(period); calendar.set(Calendar.DAY_OF_MONTH, 1); final Date fromDate = new Date(calendar.getTimeInMillis()); final long millisInDay = 1000 * 60 * 60 * 24; final long maxMillisInMonth = millisInDay * 31; calendar.setTimeInMillis(calendar.getTimeInMillis() + maxMillisInMonth); calendar.set(Calendar.DAY_OF_MONTH, 1); final Date toDate = new Date(calendar.getTimeInMillis() - millisInDay); sql.appendAnd().append(toDate).appendGreaterThanOrEqualsSign().append(M_ + REGISTER_DATE); sql.appendAnd().appendLeftParenthesis().append(M_ + REMOVED_DATE).appendIsNull().appendOr().append(fromDate).appendLessThanOrEqualsSign().append(M_ + REMOVED_DATE).appendRightParenthesis(); } return idoFindPKsBySQL(sql.toString()); } public Collection ejbFindByCategorydManagementCommune(String category, String managementType, int communeId, int seasonId) throws FinderException { return ejbFindByCategorydManagementCommune(category, managementType, communeId, seasonId, false); } public Collection ejbFindByCategorydManagementCommune(String category, String managementType, int communeId, int seasonId, boolean newestFirst) throws FinderException { String today = (new Date(System.currentTimeMillis())).toString(); IDOQuery query = idoQuery(); query.appendSelect(); query.append("cm.*"); query.appendFrom(); query.append("sch_class_member cm,"); query.append("sch_school_class sc,"); query.append("sch_school s,"); query.append("sch_school_type st,"); query.append("ic_user u"); query.appendWhere(); query.appendEquals("cm.ic_user_id", "u.ic_user_id"); query.appendAnd().appendLeftParenthesis(); query.append("cm.removed_date is null"); query.appendOr().append("cm.removed_date").appendGreaterThanSign().append("'" + today + "'"); query.appendRightParenthesis(); query.appendAnd().append("cm.register_date").appendLessThanOrEqualsSign().append("'" + today + "'"); query.appendAndEquals("sc.sch_school_season_id", seasonId); query.appendAndEquals("cm.sch_school_type_id", "st.sch_school_type_id"); query.appendAndEqualsQuoted("st.school_category", category); query.appendAndEquals("s.commune", communeId); query.appendAndEquals("sc.school_id", "s.sch_school_id"); query.appendAndEquals("sc.sch_school_class_id", "cm.sch_school_class_id"); query.appendAndEqualsQuoted("s.management_type", managementType); if (newestFirst) { query.appendOrderByDescending("cm.register_date"); } return idoFindPKsByQuery(query); } public int ejbHomeGetNumberOfPlacingsAtSchool(School school, SchoolSeason season, SchoolYear department, SchoolStudyPath instrument, String types, Commune commune) throws IDOException { Table student = new Table(this, "m"); Table schoolClass = new Table(SchoolClass.class, "s"); Table instruments = new Table(SchoolStudyPath.class, "sp"); Table user = new Table(User.class, "u"); Table address = new Table(Address.class, "a"); Table postal = new Table(PostalCode.class, "p"); SelectQuery query = new SelectQuery(student); query.addColumn(new CountColumn(student, this.getIDColumnName())); try { query.addJoin(student, schoolClass); } catch (IDORelationshipException ile) { throw new IDOException(ile.getMessage()); } if (instrument != null) { try { query.addManyToManyJoin(student, instruments, "csp"); } catch (IDORelationshipException ile) { throw new IDOException(ile.getMessage()); } } if (school != null) { query.addCriteria(new MatchCriteria(schoolClass, "school_id", MatchCriteria.EQUALS, school)); } if (season != null) { query.addCriteria(new MatchCriteria(schoolClass, "sch_school_season_id", MatchCriteria.EQUALS, season)); } if (department != null) { query.addCriteria(new MatchCriteria(student, SCHOOL_YEAR, MatchCriteria.EQUALS, department)); } if (instrument != null) { try { query.addCriteria(new MatchCriteria(instruments, instruments.getPrimaryKeyColumnName(), MatchCriteria.EQUALS, instrument)); } catch (IDOCompositePrimaryKeyException icpke) { throw new IDOException(icpke.getMessage()); } } if (types != null) { query.addCriteria(new InCriteria(student, SCHOOL_TYPE, types)); } if (commune != null) { try { query.addJoin(student, user, MEMBER); } catch (IDORelationshipException ile) { throw new IDOException("Tables " + student.getName() + " and " + user.getName() + " don't have a relation."); } try { query.addManyToManyJoin(user, address, "ua"); } catch (IDORelationshipException ile) { throw new IDOException("Tables " + user.getName() + " and " + address.getName() + " don't have a relation."); } try { query.addJoin(address, postal); } catch (IDORelationshipException ile) { throw new IDOException("Tables " + address.getName() + " and " + postal.getName() + " don't have a relation."); } query.addCriteria(new MatchCriteria(address, AddressBMPBean.getColumnNameAddressTypeId(), MatchCriteria.EQUALS, 1)); query.addCriteria(new MatchCriteria(postal, "ic_commune_id", MatchCriteria.EQUALS, commune)); } return idoGetNumberOfRecords(query); } /** * This method returns a Collection with the domain of allowed values (types) * for the invoice_int column * * @return @author Borgman */ public Collection ejbHomeGetInvoiceIntervalTypes() { String[] typeArr = {KEY_INVOICE_INTERVAL_VALUE_MONTH, KEY_INVOICE_INTERVAL_VALUE_QUARTER, KEY_INVOICE_INTERVAL_VALUE_TERM, KEY_INVOICE_INTERVAL_VALUE_YEAR}; Vector typeVec = new Vector(); for (int i = 0; i < typeArr.length; i++) { typeVec.add(i, typeArr[i]); } return typeVec; } public Collection ejbFindSubGroupPlacements() throws FinderException { IDOQuery query = idoQuery(); query.appendSelectAllFrom(this).append(" m, sch_school_class c"); query.appendWhereEquals("m."+SchoolClassMemberBMPBean.SCHOOLCLASS, "c.sch_school_class_id"); query.appendAndEquals("c.sub_group", true); return idoFindPKsByQuery(query); } public Collection ejbFindPlacementsBySchoolTypeAndRegisterDateAndGradeInPeriod(SchoolType type, IWTimestamp periodFrom, IWTimestamp periodTo) throws FinderException { //select * from sch_class_member m where m.sch_school_type_id = 67 and m.register_date < '2005-11-16' and //(m.removed_date is null or m.removed_date >= '2005-10-16' //or m.sch_class_member_id in ( //select g.sch_class_member_id from sch_class_member_grade g where g.created < '2005-11-16' and g.created >= '2005-10-15' //and g.sch_class_member_grade_id in ( //select min(g2.sch_class_member_grade_id) from sch_class_member_grade g2 where g2.sch_class_member_id = m.sch_class_member_id))) IDOQuery subquery2 = idoQuery(); subquery2.appendSelect(); subquery2.append("min(g2.sch_class_member_grade_id)"); subquery2.appendFrom("sch_class_member_grade g2"); subquery2.appendWhereEquals("g2.sch_class_member_id", "m.sch_class_member_id"); IDOQuery subquery = idoQuery(); subquery.appendSelect(); subquery.append("g.sch_class_member_id"); subquery.appendFrom("sch_class_member_grade g"); subquery.appendWhere(); subquery.append("g.created"); subquery.appendLessThanSign(); subquery.append(periodTo); subquery.appendAnd(); subquery.append("g.created"); subquery.appendGreaterThanOrEqualsSign(); subquery.append(periodFrom); subquery.appendAnd(); subquery.append("g.sch_class_member_grade_id"); subquery.appendIn(subquery2); IDOQuery query = idoQuery(); query.appendSelectAllFrom(this).append(" m"); query.appendWhereEquals("m." + SCHOOL_TYPE, type); query.appendAnd(); query.append("m." + REGISTER_DATE); query.appendLessThanSign(); query.append(periodTo); query.appendAnd(); query.appendLeftParenthesis(); query.append("m." + REMOVED_DATE + " is null"); query.appendOr(); query.append("m." + REMOVED_DATE); query.appendGreaterThanOrEqualsSign(); query.append(periodFrom); query.appendOr(); query.append("m." + getIDColumnName()); query.appendIn(subquery); query.appendRightParenthesis(); System.out.println("sql = " + query.toString()); return idoFindPKsByQuery(query); } public Collection getSubGroups() throws IDORelationshipException { return this.idoGetRelatedEntities(SchoolClass.class); } public void addToGroup(SchoolClass group) throws IDOAddRelationshipException { this.idoAddTo(group); } public void addSchoolYear(SchoolYear year) throws IDOAddRelationshipException { super.idoAddTo(year); } public void addStudyPath(SchoolStudyPath path) throws IDOAddRelationshipException { super.idoAddTo(path); } public void removeFromGroup(SchoolClass group) throws IDORemoveRelationshipException { this.idoRemoveFrom(group); } public void removeStudyPath(SchoolStudyPath path) throws IDORemoveRelationshipException { this.idoRemoveFrom(path); } public void removeAllStudyPaths() throws IDORemoveRelationshipException { this.idoRemoveFrom(SchoolStudyPath.class); } public void removeAllSubGroups() throws IDORemoveRelationshipException { this.idoRemoveFrom(SchoolClass.class); } public Collection getStudyPaths() throws IDORelationshipException { return this.idoGetRelatedEntities(SchoolStudyPath.class); } public void remove() throws RemoveException { try { Collection logs = ((SchoolClassMemberLogHome) IDOLookup.getHome(SchoolClassMemberLog.class)).findAllByPlacement(this); if (!logs.isEmpty()) { Iterator iter = logs.iterator(); while (iter.hasNext()) { SchoolClassMemberLog element = (SchoolClassMemberLog) iter.next(); element.remove(); } } } catch (IDOLookupException ile) { ile.printStackTrace(); } catch (FinderException fe) { fe.printStackTrace(); } try { removeAllSubGroups(); removeAllStudyPaths(); } catch (IDORemoveRelationshipException irre) { irre.printStackTrace(); throw new RemoveException(irre.getMessage()); } super.remove(); } }