/*
* $Id: HandicapReportBean.java,v 1.8 2005/09/28 14:58:12 sigtryggur Exp $
* Created on 7.2.2005
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package is.idega.idegaweb.golf.handicap.business;
import is.idega.idegaweb.golf.entity.Field;
import is.idega.idegaweb.golf.entity.Member;
import is.idega.idegaweb.golf.entity.MemberHome;
import is.idega.idegaweb.golf.entity.MemberInfo;
import is.idega.idegaweb.golf.entity.Scorecard;
import is.idega.idegaweb.golf.entity.ScorecardHome;
import is.idega.idegaweb.golf.entity.Union;
import is.idega.idegaweb.golf.entity.UnionHome;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import javax.ejb.FinderException;
import com.idega.block.datareport.util.ReportableCollection;
import com.idega.block.datareport.util.ReportableData;
import com.idega.block.datareport.util.ReportableField;
import com.idega.business.IBOSessionBean;
import com.idega.data.IDOLookup;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.util.IWTimestamp;
import com.idega.util.text.TextSoap;
/**
* Last modified: $Date: 2005/09/28 14:58:12 $ by $Author: sigtryggur $
*
* @author <a href="mailto:laddi@idega.com">laddi</a>
* @version $Revision: 1.8 $
*/
public class HandicapReportBean extends IBOSessionBean implements HandicapReport{
private final static String IW_BUNDLE_IDENTIFIER = "is.idega.idegaweb.golf";
private final static String PREFIX = "handicap_report.";
private static final String FIELD_CLUB = "golf_club";
private static final String FIELD_NAME = "name";
private static final String FIELD_PERSONAL_ID = "personal_id";
private static final String FIELD_YEAR_OF_BIRTH = "year_of_birth";
private static final String FIELD_GENDER = "member_gender";
private static final String FIELD_SUB_CLUBS = "sub_clubs";
private static final String FIELD_HANDICAP = "handicap";
private static final String FIELD_DATE = "date";
private static final String FIELD_POINTS = "points";
private static final String FIELD_COURSE = "course";
private IWBundle _iwb;
private IWResourceBundle _iwrb;
private void initializeBundlesIfNeeded() {
if (_iwb == null) {
_iwb = getIWApplicationContext().getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER);
}
_iwrb = _iwb.getResourceBundle(getUserContext().getCurrentLocale());
}
private String getLocalizedString(String key, String defaultValue) {
return _iwrb.getLocalizedString(PREFIX + key, defaultValue);
}
public ReportableCollection getClubReport(Union union, String genderFilter, Integer yearFrom, Integer yearTo, Float handicapFrom, Float handicapTo) {
initializeBundlesIfNeeded();
Locale currentLocale = getUserContext().getCurrentLocale();
ReportableCollection reportCollection = new ReportableCollection();
ReportableField clubField = new ReportableField(FIELD_CLUB, String.class);
clubField.setLocalizedName(getLocalizedString(FIELD_CLUB, "Club"), currentLocale);
reportCollection.addField(clubField);
ReportableField name = new ReportableField(FIELD_NAME, String.class);
name.setLocalizedName(getLocalizedString(FIELD_NAME, "Name"), currentLocale);
reportCollection.addField(name);
ReportableField personalID = new ReportableField(FIELD_PERSONAL_ID, String.class);
personalID.setLocalizedName(getLocalizedString(FIELD_PERSONAL_ID, "Personal ID"), currentLocale);
reportCollection.addField(personalID);
ReportableField yearOfBirthField = new ReportableField(FIELD_YEAR_OF_BIRTH, String.class);
yearOfBirthField.setLocalizedName(getLocalizedString(FIELD_YEAR_OF_BIRTH, "Year of birth"), currentLocale);
reportCollection.addField(yearOfBirthField);
ReportableField genderField = new ReportableField(FIELD_GENDER, String.class);
genderField.setLocalizedName(getLocalizedString(FIELD_GENDER, "Gender"), currentLocale);
reportCollection.addField(genderField);
ReportableField subClubsField = new ReportableField(FIELD_SUB_CLUBS, String.class);
subClubsField.setLocalizedName(getLocalizedString(FIELD_SUB_CLUBS, "Sub clubs"), currentLocale);
reportCollection.addField(subClubsField);
ReportableField handicap = new ReportableField(FIELD_HANDICAP, String.class);
handicap.setLocalizedName(getLocalizedString(FIELD_HANDICAP, "Handicap"), currentLocale);
reportCollection.addField(handicap);
try {
MemberHome home = (MemberHome) IDOLookup.getHomeLegacy(Member.class);
Collection members = null;
if (union != null) {
members = home.findAllByUnion(union, genderFilter);
} else {
UnionHome unionHome = (UnionHome) IDOLookup.getHomeLegacy(Union.class);
Collection clubs = unionHome.findAllUnions();
Iterator iter = clubs.iterator();
while (iter.hasNext()) {
Union club = (Union) iter.next();
if (club.getUnionType().equalsIgnoreCase("golf_club")) {
if(members == null) {
members = home.findAllByUnion(club, genderFilter);
} else {
Collection clubMembers = home.findAllByUnion(club, genderFilter);
members.addAll(clubMembers);
}
}
}
}
Iterator iter = members.iterator();
while (iter.hasNext()) {
Member member = (Member) iter.next();
MemberInfo memberInfo = member.getMemberInfo();
if (memberInfo == null) {
continue;
}
Union memberUnion = null;
try {
memberUnion = member.getMainUnion();
}
catch (SQLException sql) {
continue;
}
String yearOfBirth = null;
if (member.getDateOfBirth() != null) {
IWTimestamp dateOfBirth = new IWTimestamp(member.getDateOfBirth());
yearOfBirth = dateOfBirth.getDateString("yyyy");
if (yearFrom != null && dateOfBirth.getYear() < yearFrom.intValue()) {
continue;
}
if (yearTo != null && dateOfBirth.getYear() > yearTo.intValue()) {
continue;
}
}
else if (yearFrom != null || yearTo != null) {
continue;
}
if (handicapFrom != null && memberInfo.getHandicap() < handicapFrom.floatValue()) {
continue;
}
if (handicapTo != null && memberInfo.getHandicap() > handicapTo.floatValue()) {
continue;
}
String subClubs = "";
Union[] unions = member.getUnions();
for (int i=0; i<unions.length; i++) {
if (!memberUnion.getName().equals(unions[i].getName())) {
subClubs = subClubs + unions[i].getName();
if (i+1<unions.length && !memberUnion.getName().equals(unions[i+1].getName())) {
subClubs = subClubs+", ";
}
}
}
ReportableData data = new ReportableData();
data.addData(clubField, memberUnion.getName());
data.addData(name, member.getName());
data.addData(personalID, member.getSocialSecurityNumber());
data.addData(yearOfBirthField, yearOfBirth);
data.addData(genderField, member.getGender());
data.addData(subClubsField, subClubs);
data.addData(handicap, memberInfo.getHandicap() < 100 ? TextSoap.decimalFormat(memberInfo.getHandicap(), 1) : "-");
reportCollection.add(data);
}
}
catch (FinderException fe) {
log(fe);
}
catch (SQLException sqle) {
log(sqle);
}
return reportCollection;
}
public ReportableCollection getGolferReport(String personalID, Date dateFrom, Date dateTo) {
initializeBundlesIfNeeded();
Locale currentLocale = getUserContext().getCurrentLocale();
ReportableCollection reportCollection = new ReportableCollection();
ReportableField date = new ReportableField(FIELD_DATE, String.class);
date.setLocalizedName(getLocalizedString(FIELD_DATE, "Date"), currentLocale);
reportCollection.addField(date);
ReportableField handicap = new ReportableField(FIELD_HANDICAP, String.class);
handicap.setLocalizedName(getLocalizedString(FIELD_HANDICAP, "Handicap"), currentLocale);
reportCollection.addField(handicap);
ReportableField points = new ReportableField(FIELD_POINTS, String.class);
points.setLocalizedName(getLocalizedString(FIELD_POINTS, "Points"), currentLocale);
reportCollection.addField(points);
ReportableField course = new ReportableField(FIELD_COURSE, String.class);
course.setLocalizedName(getLocalizedString(FIELD_COURSE, "Course"), currentLocale);
reportCollection.addField(course);
try {
MemberHome memberHome = (MemberHome) IDOLookup.getHomeLegacy(Member.class);
Member member = memberHome.findBySSN(personalID);
ScorecardHome home = (ScorecardHome) IDOLookup.getHomeLegacy(Scorecard.class);
Collection scorecards = home.findAllByGolfer(member.getID(), dateFrom, dateTo);
Iterator iter = scorecards.iterator();
while (iter.hasNext()) {
Scorecard scorecard = (Scorecard) iter.next();
Field field = scorecard.getField();
IWTimestamp stamp = new IWTimestamp(scorecard.getScorecardDate());
ReportableData data = new ReportableData();
data.addData(date, stamp.getLocaleDateAndTime(currentLocale, IWTimestamp.SHORT, IWTimestamp.SHORT));
data.addData(handicap, TextSoap.decimalFormat(scorecard.getHandicapAfter(), 1));
data.addData(points, scorecard.getTotalPoints() > 0 ? String.valueOf(scorecard.getTotalPoints()) : "-");
data.addData(course, scorecard.getHandicapCorrection() ? getLocalizedString(PREFIX + "correction", "Handicap correction") : field.getName());
reportCollection.add(data);
}
}
catch (FinderException fe) {
log(fe);
}
return reportCollection;
}
}