/*
* $Id: AfterSchoolChoiceBMPBean.java,v 1.3.2.4 2006/04/05 15:28:39 dainis Exp $
*
* Copyright (C) 2002 Idega hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*
*/
package se.idega.idegaweb.commune.care.data;
import java.sql.Date;
import java.util.Collection;
import javax.ejb.FinderException;
import se.idega.idegaweb.commune.care.business.CareConstants;
import com.idega.block.process.data.Case;
import com.idega.block.process.data.CaseStatus;
import com.idega.block.school.data.School;
import com.idega.block.school.data.SchoolSeason;
import com.idega.data.IDOException;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.query.AND;
import com.idega.data.query.CountColumn;
import com.idega.data.query.InCriteria;
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.user.data.User;
/**
* This does something very clever.....
*
* @author palli
* @version 1.0
*/
public class AfterSchoolChoiceBMPBean extends ChildCareApplicationBMPBean implements ChildCareApplication, AfterSchoolChoice {
private final static String CASE_CODE_KEY_DESC = "Application for after school centre";
private final static String SCHOOL_SEASON = "school_season_id";
private final static String COLUMN_PAYER_NAME = "payer_name";
private final static String COLUMN_PAYER_PERSONAL_ID = "payer_personal_id";
private final static String COLUMN_CARD_TYPE = "card_type";
private final static String COLUMN_CARD_NUMBER = "card_number";
private final static String COLUMN_CARD_VALID_MONTH = "card_valid_month";
private final static String COLUMN_CARD_VALID_YEAR = "card_valid_year";
private final static String COLUMN_F_CLASS = "f_class";
private final static String COLUMN_WANTS_REFRESHMENT = "wants_refreshment";
/**
* @see com.idega.block.process.data.AbstractCaseBMPBean#getCaseCodeKey()
*/
public String getCaseCodeKey() {
return CareConstants.AFTER_SCHOOL_CASE_CODE_KEY;
}
/**
* @see com.idega.block.process.data.AbstractCaseBMPBean#getCaseCodeDescription()
*/
public String getCaseCodeDescription() {
return CASE_CODE_KEY_DESC;
}
/* (non-Javadoc)
* @see com.idega.data.GenericEntity#initializeAttributes()
*/
public void initializeAttributes() {
super.initializeAttributes();
this.addManyToOneRelationship(SCHOOL_SEASON, SchoolSeason.class);
addAttribute(COLUMN_PAYER_NAME, "Payer name", String.class);
addAttribute(COLUMN_PAYER_PERSONAL_ID, "Payer personal ID", String.class);
addAttribute(COLUMN_CARD_TYPE, "Card type", String.class);
addAttribute(COLUMN_CARD_NUMBER, "Card number", String.class);
addAttribute(COLUMN_CARD_VALID_MONTH, "Valid month", Integer.class);
addAttribute(COLUMN_CARD_VALID_YEAR, "Valid year", Integer.class);
addAttribute(COLUMN_F_CLASS, "F-class", Boolean.class);
addAttribute(COLUMN_WANTS_REFRESHMENT, "Wants refreshments", Boolean.class);
}
public int getSchoolSeasonId() {
return getIntColumnValue(SCHOOL_SEASON);
}
public SchoolSeason getSchoolSeason() {
return (SchoolSeason) getColumnValue(SCHOOL_SEASON);
}
public String getPayerName() {
return getStringColumnValue(COLUMN_PAYER_NAME);
}
public String getPayerPersonalID() {
return getStringColumnValue(COLUMN_PAYER_PERSONAL_ID);
}
public String getCardType() {
return getStringColumnValue(COLUMN_CARD_TYPE);
}
public String getCardNumber() {
return getStringColumnValue(COLUMN_CARD_NUMBER);
}
public int getCardValidMonth() {
return getIntColumnValue(COLUMN_CARD_VALID_MONTH);
}
public int getCardValidYear() {
return getIntColumnValue(COLUMN_CARD_VALID_YEAR);
}
public boolean getFClass() {
return getBooleanColumnValue(COLUMN_F_CLASS, false);
}
public boolean getWantsRefreshments() {
return getBooleanColumnValue(COLUMN_WANTS_REFRESHMENT, false);
}
public void setSchoolSeasonId(int schoolSeasonID) {
setColumn(SCHOOL_SEASON, schoolSeasonID);
}
public void setPayerName(String name) {
setColumn(COLUMN_PAYER_NAME, name);
}
public void setPayerPersonalID(String personalID) {
setColumn(COLUMN_PAYER_PERSONAL_ID, personalID);
}
public void setCardType(String type) {
setColumn(COLUMN_CARD_TYPE, type);
}
public void setCardNumber(String number) {
setColumn(COLUMN_CARD_NUMBER, number);
}
public void setCardValidMonth(int month) {
setColumn(COLUMN_CARD_VALID_MONTH, month);
}
public void setCardValidYear(int year) {
setColumn(COLUMN_CARD_VALID_YEAR, year);
}
public void setFClass(boolean fClass) {
setColumn(COLUMN_F_CLASS, fClass);
}
public void setWantsRefreshments(boolean wantsRefreshments) {
setColumn(COLUMN_WANTS_REFRESHMENT, wantsRefreshments);
}
public Collection ejbFindByChildAndSeason(Integer childID, Integer seasonID) throws javax.ejb.FinderException {
IDOQuery query = super.idoQueryGetSelect().appendWhereEquals(CHILD_ID, childID.intValue());
query.appendAndEquals(SCHOOL_SEASON, seasonID.intValue());
query.appendOrderBy(CHOICE_NUMBER);
return super.idoFindPKsByQuery(query);
}
public Object ejbFindByChildAndChoiceNumberAndSeason(Integer childID,Integer choiceNumber, Integer seasonID) throws javax.ejb.FinderException {
IDOQuery query = super.idoQueryGetSelect().appendWhereEquals(CHILD_ID, childID.intValue());
query.appendAndEquals(SCHOOL_SEASON, seasonID.intValue());
query.appendAndEquals(CHOICE_NUMBER,choiceNumber.intValue());
query.appendOrderBy(CHOICE_NUMBER);
return super.idoFindOnePKByQuery(query);
}
public Object ejbFindByChildAndChoiceNumberAndSeason(Integer childID,Integer choiceNumber, Integer seasonID, String[] caseStatus) throws FinderException {
IDOQuery sql = idoQuery();
sql.appendSelectAllFrom(this).append(" c, proc_case p");
sql.appendWhereEquals("c."+getIDColumnName(), "p.proc_case_id");
sql.appendAndEquals("c."+SCHOOL_SEASON, seasonID.intValue());
sql.appendAndEquals("c."+CHOICE_NUMBER,choiceNumber.intValue());
sql.appendAndEquals("c."+CHILD_ID,childID.intValue());
sql.appendAnd().append("p.case_status").appendInArrayWithSingleQuotes(caseStatus);
sql.appendAnd().appendEqualsQuoted("p.case_code",CareConstants.AFTER_SCHOOL_CASE_CODE_KEY);
sql.appendOrderBy("c."+QUEUE_DATE+",c."+QUEUE_ORDER);
return super.idoFindOnePKByQuery(sql);
}
public Object ejbFindByChildAndProviderAndSeason(int childID, int providerID, int seasonID, String[] caseStatus) throws FinderException {
IDOQuery sql = idoQuery();
sql.appendSelectAllFrom(this).append(" c, proc_case p");
sql.appendWhereEquals("c."+getIDColumnName(), "p.proc_case_id");
sql.appendAndEquals("c."+SCHOOL_SEASON, seasonID);
sql.appendAndEquals("c."+PROVIDER_ID,providerID);
sql.appendAndEquals("c."+CHILD_ID,childID);
sql.appendAnd().append("p.case_status").appendInArrayWithSingleQuotes(caseStatus);
sql.appendAnd().appendEqualsQuoted("p.case_code", CareConstants.AFTER_SCHOOL_CASE_CODE_KEY);
sql.appendOrderBy("c."+QUEUE_DATE+",c."+QUEUE_ORDER);
return super.idoFindOnePKByQuery(sql);
}
public Collection ejbFindAllCasesByProviderAndStatus(int providerId, CaseStatus caseStatus) throws FinderException {
return ejbFindAllCasesByProviderStatus(providerId, caseStatus.getStatus());
}
public Collection ejbFindAllCasesByProviderAndStatus(School provider, String caseStatus) throws FinderException {
return ejbFindAllCasesByProviderStatus(((Integer)provider.getPrimaryKey()).intValue(), caseStatus);
}
public Collection ejbFindAllCasesByProviderAndStatus(School provider, CaseStatus caseStatus) throws FinderException {
return ejbFindAllCasesByProviderStatus(((Integer)provider.getPrimaryKey()).intValue(), caseStatus.getStatus());
}
public Collection ejbFindAllCasesByProviderAndStatus(int providerId, String caseStatus) throws FinderException {
IDOQuery sql = idoQuery();
sql.appendSelectAllFrom(this).append(" c, proc_case p");
sql.appendWhereEquals("c."+getIDColumnName(), "p.proc_case_id");
sql.appendAndEquals("c."+PROVIDER_ID,providerId);
sql.appendAnd().appendEqualsQuoted("p.case_status",caseStatus);
sql.appendAnd().appendEqualsQuoted("p.case_code",CareConstants.AFTER_SCHOOL_CASE_CODE_KEY);
sql.appendOrderBy("c."+QUEUE_DATE+",c."+QUEUE_ORDER);
return idoFindPKsBySQL(sql.toString());
}
public Collection ejbFindAllCasesByProviderAndNotInStatus(int providerId, String[] caseStatus) throws FinderException {
IDOQuery sql = idoQuery();
sql.appendSelectAllFrom(this).append(" c, proc_case p");
sql.appendWhereEquals("c."+getIDColumnName(), "p.proc_case_id");
sql.appendAndEquals("c."+PROVIDER_ID,providerId);
sql.appendAnd().append("p.case_status").appendNotInArrayWithSingleQuotes(caseStatus);
sql.appendAnd().appendEqualsQuoted("p.case_code",CareConstants.AFTER_SCHOOL_CASE_CODE_KEY);
sql.appendOrderBy("c."+QUEUE_DATE+",c."+QUEUE_ORDER);
return idoFindPKsBySQL(sql.toString());
}
//same as above but with a parameter for sorting and also selects from ic_user
public Collection ejbFindAllCasesByProviderAndNotInStatus(int providerId, String[] caseStatus, String sorting) throws FinderException {
IDOQuery sql = idoQuery();
//sql.appendSelect().append("*.c").append(", *.p, iu.first_name, iu.last_name");
sql.appendSelectAllFrom(this).append(" c, proc_case p, ic_user iu");
//sql.append(", ic_user iu");
//sql.appendFrom().append(this).append(" c, proc_case p");
sql.appendWhereEquals("c."+getIDColumnName(), "p.proc_case_id");
sql.appendAndEquals("c."+PROVIDER_ID,providerId);
sql.appendAnd().appendEquals("c.child_id","iu.ic_user_id");
sql.appendAnd().append("p.case_status").appendNotInArrayWithSingleQuotes(caseStatus);
sql.appendAnd().appendEqualsQuoted("p.case_code", CareConstants.AFTER_SCHOOL_CASE_CODE_KEY);
sql.appendOrderBy(sorting+",c."+QUEUE_ORDER);
return idoFindPKsBySQL(sql.toString());
}
public Collection ejbFindByProviderAndSeasonAndStatuses(School provider, SchoolSeason season, String[] applicationStatus, Date terminationDate) throws FinderException {
Table table = new Table(this);
Table user = new Table(User.class);
SelectQuery query = new SelectQuery(table);
query.addColumn(table, getIDColumnName());
try {
query.addJoin(table, user);
}
catch (IDORelationshipException e) {
e.printStackTrace();
throw new FinderException(e.getMessage());
}
query.addCriteria(new MatchCriteria(table, PROVIDER_ID, MatchCriteria.EQUALS, provider));
query.addCriteria(new MatchCriteria(table, SCHOOL_SEASON, MatchCriteria.EQUALS, season));
query.addCriteria(new InCriteria(table, APPLICATION_STATUS, applicationStatus));
query.addCriteria(new MatchCriteria(table, REJECTION_DATE, MatchCriteria.LESSEQUAL, terminationDate));
query.addOrder(user, "first_name", true);
query.addOrder(user, "middle_name", true);
query.addOrder(user, "last_name", true);
return idoFindPKsByQuery(query);
}
public Collection ejbFindAllByDatesAndStatus(Date fromDate, Date toDate, String[] statuses) throws FinderException {
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(table, getIDColumnName());
query.addCriteria(new InCriteria(table, "application_status", statuses));
AND and1 = new AND(new MatchCriteria(table, FROM_DATE, MatchCriteria.GREATEREQUAL, fromDate), new MatchCriteria(table, FROM_DATE, MatchCriteria.LESSEQUAL, toDate));
AND and2 = new AND(new MatchCriteria(table, REJECTION_DATE, MatchCriteria.GREATEREQUAL, fromDate), new MatchCriteria(table, REJECTION_DATE, MatchCriteria.LESSEQUAL, toDate));
OR or = new OR(and1, and2);
query.addCriteria(or);
return idoFindPKsByQuery(query);
}
public int ejbHomeGetChoiceStatistics(SchoolSeason season, String[] statuses) throws IDOException {
Table choice = new Table(this, "c");
Table process = new Table(Case.class, "p");
SelectQuery query = new SelectQuery(choice);
query.addColumn(new CountColumn(choice, this.getIDColumnName()));
try {
query.addJoin(choice, process);
}
catch (IDORelationshipException ile) {
throw new IDOException(ile.getMessage());
}
query.addCriteria(new InCriteria(process, "CASE_STATUS", statuses));
query.addCriteria(new MatchCriteria(choice, SCHOOL_SEASON, MatchCriteria.EQUALS, season));
return idoGetNumberOfRecords(query.toString());
}
}