package is.idega.idegaweb.golf.tournament.business;
import is.idega.idegaweb.golf.access.AccessControl;
import is.idega.idegaweb.golf.entity.DisplayScores;
import is.idega.idegaweb.golf.entity.Field;
import is.idega.idegaweb.golf.entity.Member;
import is.idega.idegaweb.golf.entity.MemberInfo;
import is.idega.idegaweb.golf.entity.MemberInfoHome;
import is.idega.idegaweb.golf.entity.Scorecard;
import is.idega.idegaweb.golf.entity.Startingtime;
import is.idega.idegaweb.golf.entity.StartingtimeView;
import is.idega.idegaweb.golf.entity.Tee;
import is.idega.idegaweb.golf.entity.TeeHome;
import is.idega.idegaweb.golf.entity.Tournament;
import is.idega.idegaweb.golf.entity.TournamentGroup;
import is.idega.idegaweb.golf.entity.TournamentGroupHome;
import is.idega.idegaweb.golf.entity.TournamentParticipants;
import is.idega.idegaweb.golf.entity.TournamentRound;
import is.idega.idegaweb.golf.entity.TournamentRoundHome;
import is.idega.idegaweb.golf.entity.TournamentRoundParticipants;
import is.idega.idegaweb.golf.entity.TournamentTournamentGroup;
import is.idega.idegaweb.golf.entity.TournamentType;
import is.idega.idegaweb.golf.entity.Union;
import is.idega.idegaweb.golf.handicap.business.Handicap;
import is.idega.idegaweb.golf.tournament.presentation.TournamentBox;
import is.idega.idegaweb.golf.tournament.presentation.TournamentList;
import is.idega.idegaweb.golf.tournament.presentation.TournamentStartingtimeList;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.business.IBOServiceBean;
import com.idega.data.EntityFinder;
import com.idega.data.IDOLookup;
import com.idega.data.SimpleQuerier;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWMainApplication;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.ui.BackButton;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.SubmitButton;
import com.idega.util.IWTimestamp;
/**
* @author gimmi
*/
public class TournamentBusinessBean extends IBOServiceBean implements TournamentBusiness {
private static final String IW_BUNDLE_IDENTIFIER = "is.idega.idegaweb.golf";
public TournamentBusinessBean() {
super();
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
public Tournament[] getNextTwoTournaments() throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp stamp = IWTimestamp.RightNow();
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where start_time>'" + stamp.toSQLDateString() + "' order by start_time", 2);
return tourns;
}
public Tournament[] getLastTwoTournaments() throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp stamp = IWTimestamp.RightNow();
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where start_time<'" + stamp.toSQLDateString() + "' order by start_time desc", 2);
return tourns;
}
public Tournament[] getNextTournaments(int number) throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp stamp = IWTimestamp.RightNow();
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where start_time>'" + stamp.toSQLDateString() + "' order by start_time", number);
return tourns;
}
public Tournament[] getLastTournaments(int number) throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp stamp = IWTimestamp.RightNow();
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where start_time<'" + stamp.toSQLDateString() + "' order by start_time desc", number);
return tourns;
}
public Tournament[] getTournaments(IWTimestamp stamp) throws Exception {
IWTimestamp next = new IWTimestamp(IWTimestamp.RightNow());
next.addDays(1);
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where start_time>= '" + stamp.toSQLDateString() + "' AND start_time<'" + next.toSQLDateString() + "' order by start_time");
return tourns;
}
/**
* @param days How many days in search period. If days<1 then it returns tournaments for the
* rest of the season or the next season if the month is 12
*/
public Tournament[] getTournamentsWithRegistration(IWTimestamp now, int days) throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp then = (IWTimestamp)now.clone();
if(days<1){
if(then.getMonth()>11){
then.addYears(2);
} else {
then.addYears(1);
}
then.setMonth(1);
then.setDay(1);
} else {
then.addDays(days+1);
}
then.setHour(0);
then.setMinute(0);
then.setSecond(0);
String query = "select * from tournament where REGISTRATION_ONLINE = 'Y' and LAST_REGISTRATION_DATE <= '" + then.toSQLString() +
"' AND LAST_REGISTRATION_DATE > '" + now.toSQLString() + "' and FIRST_REGISTRATION_DATE < '" + now.toSQLString() + "' order by start_time, name";
//System.out.println(query);
Tournament[] tourns = (Tournament[]) tournament.findAll(query);
return tourns;
}
public Tournament[] getTournamentToday() throws Exception {
return getTournaments(IWTimestamp.RightNow());
}
public int getTotalStrokes(Tournament tournament, TournamentRound round, is.idega.idegaweb.golf.entity.Member member) throws Exception {
int totalStrokes = -1;
try {
StringBuffer sql = new StringBuffer();
sql.append("select sum(stroke_count) from stroke st, scorecard s, tournament_round tr, tournament t");
sql.append(" where st.scorecard_id = s.scorecard_id");
sql.append(" and s.tournament_round_id = tr.tournament_round_id");
sql.append(" and tr.tournament_id = t.tournament_id");
sql.append(" and t.tournament_id = " + Integer.toString(tournament.getID()));
sql.append(" and tr.round_number <= " + Integer.toString(round.getRoundNumber()));
sql.append(" and s.member_id = " + Integer.toString(member.getID()));
String[] overAllScore = com.idega.data.SimpleQuerier.executeStringQuery(sql.toString());
if (overAllScore != null) {
totalStrokes = Integer.parseInt(overAllScore[0]);
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
return totalStrokes;
}
public Tournament[] getLastClosedTournaments(int number) throws Exception {
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
IWTimestamp stamp = IWTimestamp.RightNow();
Tournament[] tourns = (Tournament[]) tournament.findAll("select * from tournament where closed = 'Y' and closed_date<'" + stamp.toSQLString() + "' order by closed_date desc", number);
return tourns;
}
public boolean isTournamentRegistrable(Tournament tournament) {
boolean finished = tournament.isTournamentFinished();
boolean ongoing = tournament.isTournamentOngoing();
return (!(finished || ongoing));
}
public void removeTournamentTableApplicationAttribute(IWContext iwc) {
//Gimmi added again since TournamentSelector still uses this...
Enumeration enumer = iwc.getServletContext().getAttributeNames();
String myString = "";
List v = new Vector();
while (enumer.hasMoreElements()) {
v.add(enumer.nextElement());
}
Iterator iter = v.iterator();
while (iter.hasNext()) {
myString = (String) iter.next();
if (myString.indexOf("tournament_table_union_id_") != -1) {
iwc.removeApplicationAttribute(myString);
}
else if (myString.indexOf("tournament_dropdownmenu_ordered_by_union_clubadmin") != -1) {
iwc.removeApplicationAttribute(myString);
}
}
removeTournamentBoxApplication(iwc);
//Gimmi and eiki: changed to block caching!
iwc.getIWMainApplication().getIWCacheManager().invalidateCache(TournamentList.CACHE_KEY);
}
public void removeTournamentBoxApplication(IWContext modinfo) {
modinfo.removeApplicationAttribute("tournament_box");
}
public TournamentBox getTournamentBox(IWContext modinfo) {
TournamentBox tBox = (TournamentBox) modinfo.getApplicationAttribute("tournament_box");
if (tBox == null) {
System.err.println("TournamentBox IS NULL");
tBox = new TournamentBox();
modinfo.setApplicationAttribute("tournament_box", tBox);
}
else {
System.err.println("TournamentBox is NOT null");
}
return tBox;
}
public DropdownMenu getDropdownOrderedByUnion(DropdownMenu menu, IWContext modinfo) {
return getDropdownOrderedByUnion(menu, modinfo, 2003);
}
public DropdownMenu getDropdownOrderedByUnion(DropdownMenu menu, IWContext modinfo, int year) {
try {
boolean clubAdmin = AccessControl.isClubAdmin(modinfo);
Member member = (Member) AccessControl.getMember(modinfo);
Union union = null;
try {
union = member.getMainUnion();
}
catch (Exception e) {
}
int union_id = -1;
if (union != null) {
union_id = union.getID();
}
String menuName = "";
if (menu != null) {
menuName = menu.getName();
}
DropdownMenu applicationMenu = (DropdownMenu) modinfo.getApplicationAttribute("tournament_dropdownmenu_ordered_by_union_clubadmin_" + clubAdmin + "_union_id_" + union_id + "_menuName_" + menuName + "_year_" + year);
if (applicationMenu == null) {
if (clubAdmin) {
String union_abb = union.getAbbrevation();
if (union_id != 1) {
Tournament[] tours = {};
if (year == -1) {
tours = (Tournament[]) ((Tournament) IDOLookup.instanciateEntity(Tournament.class)).findAllByColumnEqualsOrdered("union_id", union_id + "", "START_TIME");
}
else {
tours = (Tournament[]) ((Tournament) IDOLookup.instanciateEntity(Tournament.class)).findAll("select * from tournament where union_id = " + union_id + " and START_TIME < '" + year + "-12-31' and START_TIME > '" + year + "-01-01' order by START_TIME");
}
for (int j = 0; j < tours.length; j++) {
menu.addMenuElement(tours[j].getID(), union_abb + " " + tours[j].getName());
}
}
}
else { // normal admin
Union[] unions = (Union[]) ((Union) IDOLookup.instanciateEntity(Union.class)).findAllOrdered("ABBREVATION");
Tournament[] tours = null;
int unions_id = 1;
String union_abb = "";
for (int i = 0; i < unions.length; i++) {
unions_id = unions[i].getID();
union_abb = unions[i].getAbbrevation();
if (year == -1) {
tours = (Tournament[]) ((Tournament) IDOLookup.instanciateEntity(Tournament.class)).findAllByColumnEqualsOrdered("union_id", unions_id + "", "START_TIME");
}
else {
tours = (Tournament[]) ((Tournament) IDOLookup.instanciateEntity(Tournament.class)).findAll("select * from tournament where union_id = " + unions_id + " and START_TIME < '" + year + "-12-31' and START_TIME > '" + year + "-01-01' order by START_TIME");
}
for (int j = 0; j < tours.length; j++) {
menu.addMenuElement(tours[j].getID(), union_abb + " " + tours[j].getName());
}
}
}
modinfo.setApplicationAttribute("tournament_dropdownmenu_ordered_by_union_clubadmin_" + clubAdmin + "_union_id_" + union_id + "_menuName_" + menuName + "_year_" + year, menu);
}
else {
menu = applicationMenu;
}
}
catch (Exception s) {
s.printStackTrace(System.err);
}
return menu;
}
public List getMembersInTournamentGroup(Tournament tournament, TournamentGroup tourGroup) throws SQLException {
return getMembersInTournamentGroup(tournament, tourGroup, getMembersInTournament(tournament));
}
public List getMembersInTournamentGroup(Tournament tournament, TournamentGroup tourGroup, Vector members_to_check) throws SQLException {
is.idega.idegaweb.golf.entity.Member[] tempMembers = new is.idega.idegaweb.golf.entity.Member[members_to_check.size()];
for (int i = 0; i < tempMembers.length; i++) {
tempMembers[i] = (is.idega.idegaweb.golf.entity.Member) members_to_check.elementAt(i);
}
return getMembersInTournamentGroup(tournament, tourGroup, tempMembers);
}
public List getMembersInTournamentGroup(Tournament tournament, TournamentGroup tourGroup, is.idega.idegaweb.golf.entity.Member[] members_to_check) throws SQLException {
is.idega.idegaweb.golf.entity.Member[] membersToCheck = members_to_check;
List tournamentGroupMembers = new Vector();
for (int i = 0; i < membersToCheck.length; i++) {
try {
tournamentGroupMembers = EntityFinder.findAll((Member) IDOLookup.instanciateEntity(Member.class), "SELECT member.* from member, tournament_member where member.member_id = tournament_member.member_id and tournament_member.tournament_id = " + tournament.getID() + " AND tournament_member.tournament_group_id = " + tourGroup.getID());
// if (isMemberInTournamentGroup(membersToCheck[i], tourGroup)) {
// tournamentGroupMembers.addElement(membersToCheck[i]);
// }
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
return tournamentGroupMembers;
}
public List getMembersInTournamentList(Tournament tournament) throws SQLException {
if (tournament == null) {
return null;
}
List members = null;
try {
members = EntityFinder.findReverseRelated(tournament, (Member) IDOLookup.instanciateEntity(Member.class));
}
catch (Exception e) {
e.printStackTrace(System.out);
}
return members;
}
public is.idega.idegaweb.golf.entity.Member[] getMembersInTournament(Tournament tournament) throws SQLException {
is.idega.idegaweb.golf.entity.Member[] members = null;
is.idega.idegaweb.golf.entity.Member member = (Member) IDOLookup.instanciateEntity(Member.class);
try {
members = (is.idega.idegaweb.golf.entity.Member[]) tournament.findReverseRelated(member);
}
catch (Exception e) {
e.printStackTrace(System.out);
}
return members;
}
public List getTournamentGroups(is.idega.idegaweb.golf.entity.Member member, Tournament tournament) throws SQLException {
TournamentGroup[] tGroup = tournament.getTournamentGroups();
Vector returner = new Vector();
for (int i = 0; i < tGroup.length; i++) {
if (member != null) {
if (isMemberInTournamentGroup(member, tGroup[i])) {
returner.addElement(tGroup[i]);
}
else {
}
} else {
returner.addElement(tGroup[i]);
}
}
return returner;
}
public List getTournamentRoundMembersList(int tournament_round_id) throws SQLException {
List members = null;
try {
members = EntityFinder.findAll((TournamentParticipants) IDOLookup.instanciateEntity(TournamentParticipants.class), "SELECT * from tournament_round_participants where tournament_round_id = " + tournament_round_id + " ORDER by grup_num");
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
return members;
}
public is.idega.idegaweb.golf.entity.TournamentRoundParticipants[] getTournamentRoundMembers(int tournament_round_id) throws SQLException {
is.idega.idegaweb.golf.entity.TournamentRoundParticipants[] members = (is.idega.idegaweb.golf.entity.TournamentRoundParticipants[]) ((TournamentRoundParticipants) IDOLookup.instanciateEntity(TournamentRoundParticipants.class)).findAll("SELECT * from tournament_round_participants where tournament_round_id = " + tournament_round_id + " ORDER by grup_num");
return members;
}
public List getTournamentGroups(is.idega.idegaweb.golf.entity.Member member) throws SQLException {
List groups = com.idega.data.EntityFinder.findAll((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class));
Vector returner = new Vector();
for (int i = 0; i < groups.size(); i++) {
if (isMemberInTournamentGroup(member, (TournamentGroup) groups.get(i))) {
returner.addElement(groups.get(i));
}
else {
groups.remove(i);
}
}
return returner;
}
public boolean isMemberInTournamentGroup(is.idega.idegaweb.golf.entity.Member member, TournamentGroup tourGroup) throws SQLException {
boolean young = false;
boolean old = false;
boolean sex = false;
boolean maxHand = false;
boolean minHand = false;
if ((tourGroup.getGender() == member.getGender().charAt(0)) || (tourGroup.getGender() == 'B')) sex = true;
if (sex) {
double memberHandicap = member.getHandicap();
if (memberHandicap == 100) memberHandicap = 36;
if (tourGroup.getMinHandicap() <= memberHandicap) minHand = true;
if (minHand) {
if (tourGroup.getMaxHandicap() >= memberHandicap) maxHand = true;
if (maxHand) {
int memberAge = member.getAge(); //getAge(member);
if (tourGroup.getMinAge() <= memberAge) young = true;
if (young) {
if (tourGroup.getMaxAge() >= memberAge) old = true;
}
}
}
}
return (young && old && sex && maxHand && minHand);
}
/**
* Returns int error message. int[0]: Many members with the same social
* security number int[1]: UnionMemberInfo entry not correct. int[2]: Member
* does not fit critera for TournamentGroup. int[3]: Tournament not set up
* correctly, no TournamentGroups specified.
*/
public int[] isMemberAllowedToRegister(is.idega.idegaweb.golf.entity.Member member, Tournament tournament) throws SQLException {
int[] errors = new int[4];
try {
String[] socials = SimpleQuerier.executeStringQuery("SELECT MEMBER_ID FROM MEMBER WHERE SOCIAL_SECURITY_NUMBER = '" + member.getSocialSecurityNumber() + "' ");
if (socials.length > 1) {
errors[0] = 1;
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
try {
String[] umi = SimpleQuerier.executeStringQuery("Select union_member_info_id from union_member_info where member_id = " + member.getID() + " and MEMBER_STATUS = 'A' and MEMBERSHIP_TYPE = 'main'");
if (umi.length != 1) {
errors[1] = 1;
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
if (tournament.getIfGroupTournament()) {
TournamentGroup[] groups = tournament.getTournamentGroups();
errors[2] = 1;
for (int i = 0; i < groups.length; i++) {
if (isMemberInTournamentGroup(member, groups[i])) {
errors[2] = 0;
break;
}
}
}
else {
errors[3] = 1;
}
return errors;
}
public boolean setupStartingtime(IWContext modinfo, is.idega.idegaweb.golf.entity.Member member, Tournament tournament, int tournament_round_id, int startingGroup) throws SQLException {
return setupStartingtime(modinfo, member, tournament, tournament_round_id, startingGroup, 1);
}
public boolean setupStartingtime(IWContext modinfo, is.idega.idegaweb.golf.entity.Member member, Tournament tournament, int tournament_round_id, int startingGroup, int tee_number) throws SQLException {
int howManyEachGroup = tournament.getNumberInGroup();
TournamentRound tourRound = null;
try {
tourRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournament_round_id);
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
boolean returner = false;
Startingtime startingtime = (Startingtime) IDOLookup.createLegacy(Startingtime.class);
startingtime.setFieldID(tournament.getFieldId());
startingtime.setMemberID(member.getID());
startingtime.setStartingtimeDate(new IWTimestamp(tourRound.getRoundDate()).getSQLDate());
startingtime.setPlayerName(member.getName());
startingtime.setHandicap(member.getHandicap());
try {
startingtime.setClubName(member.getMainUnion().getAbbrevation());
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
startingtime.setCardName("");
startingtime.setCardNum("");
startingtime.setGroupNum(startingGroup);
startingtime.setTeeNumber(tee_number);
startingtime.insert();
startingtime.addTo(tourRound);
returner = true;
invalidateStartingTimeCache(modinfo, tournament.getID(), String.valueOf(tournament_round_id));
return returner;
}
public boolean blockStartingtime(IWContext modinfo, String name, int tournament_round_id, int startingGroup, int finishingGroup, int teeNumber) throws SQLException {
//System.out.println("Starting blocking");
TournamentRound tourRound = null;
try {
tourRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournament_round_id);
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
Tournament tournament = tourRound.getTournament();
int howManyEachGroup = tournament.getNumberInGroup();
//System.out.println(" ... startingGroup ="+startingGroup+", finishingGroup
// ="+finishingGroup+", howManyEachGroup = "+howManyEachGroup);
for (int a = startingGroup; a <= finishingGroup; a++) {
for (int b = 1; b <= howManyEachGroup; b++) {
//System.out.println(" ... blocking groupNumber ="+a+",
// currentTimeWithingGroup +"+b);
Startingtime startingtime = (Startingtime) IDOLookup.createLegacy(Startingtime.class);
startingtime.setFieldID(tournament.getFieldId());
//System.out.println(" ... fieldId = "+tournament.getFieldId());
startingtime.setStartingtimeDate(new IWTimestamp(tourRound.getRoundDate()).getSQLDate());
//System.out.println(" ... date = "+(new
// idegaTimestamp(tourRound.getRoundDate()).getSQLDate()).toString());
startingtime.setPlayerName(name);
//System.out.println(" ... name = "+name);
startingtime.setTeeNumber(teeNumber);
startingtime.setHandicap(100);
startingtime.setClubName("");
startingtime.setGroupNum(a);
startingtime.insert();
startingtime.addTo(tourRound);
}
}
invalidateStartingTimeCache(modinfo, tournament.getID(), String.valueOf(tournament_round_id));
return true;
}
public boolean unblockStartingtime(IWContext modinfo, int tournament_round_id, int startingGroup, int finishingGroup, int teeNumber) throws SQLException {
TournamentRound tourRound = null;
try {
tourRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournament_round_id);
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
Tournament tournament = tourRound.getTournament();
IWTimestamp stamp = new IWTimestamp(tourRound.getRoundDate());
String SQLString = "SELECT * FROM TOURNAMENT_ROUND_STARTINGTIME, STARTINGTIME WHERE TOURNAMENT_ROUND_STARTINGTIME.TOURNAMENT_ROUND_ID = " + tournament_round_id + " AND STARTINGTIME.STARTINGTIME_ID = TOURNAMENT_ROUND_STARTINGTIME.STARTINGTIME_ID AND FIELD_ID =" + tournament.getFieldId() + " AND STARTINGTIME_DATE = '" + stamp.toSQLDateString() + "' and member_id = 1 and grup_num >= " + startingGroup + " and grup_num <=" + finishingGroup;
if (teeNumber == 10) {
SQLString = "SELECT * FROM TOURNAMENT_ROUND_STARTINGTIME, STARTINGTIME WHERE TOURNAMENT_ROUND_STARTINGTIME.TOURNAMENT_ROUND_ID = " + tournament_round_id + " AND STARTINGTIME.STARTINGTIME_ID = TOURNAMENT_ROUND_STARTINGTIME.STARTINGTIME_ID AND FIELD_ID =" + tournament.getFieldId() + " AND STARTINGTIME_DATE = '" + stamp.toSQLDateString() + "' and member_id = 1 and grup_num >= " + startingGroup + " and grup_num <=" + finishingGroup + " and tee_number = "+teeNumber;
}
//System.out.println("Tournament Controller: "+SQLString);
List startingTimes = EntityFinder.findAll((Startingtime) IDOLookup.instanciateEntity(Startingtime.class), SQLString);
Startingtime sTime;
if (startingTimes != null) {
try {
for (int i = 0; i < startingTimes.size(); i++) {
sTime = (Startingtime) startingTimes.get(i);
sTime.removeFrom(tourRound);
//sTime.removeFrom((Tournament) IDOLookup.instanciateEntity(Tournament.class)); //Removed 4.7.2006 because this is no longer necessary and caused SQLException
sTime.delete();
}
}
catch (Exception ex) {
System.err.println("Tournament Controller : unBlockStartingTime - (VILLA)");
ex.printStackTrace(System.err);
}
}
invalidateStartingTimeCache(modinfo, tournament.getID(), String.valueOf(tournament_round_id));
return true;
}
public boolean isMemberRegisteredInTournament(Tournament tournament, is.idega.idegaweb.golf.entity.Member member) throws SQLException {
boolean returner = false;
List listi = EntityFinder.findAll((Member) IDOLookup.instanciateEntity(Member.class), "Select member.* from member,tournament_member where member.member_id = tournament_member.member_id AND member.member_id = " + member.getID() + " AND tournament_member.tournament_id = " + tournament.getID() + "");
if (listi != null) {
returner = true;
}
return returner;
}
public boolean isMemberRegisteredInTournament(Tournament tournament, TournamentRound tourRound, int howManyEachGroup, is.idega.idegaweb.golf.entity.Member member) throws SQLException {
boolean returner = false;
com.idega.util.IWTimestamp startStamp = new com.idega.util.IWTimestamp(tourRound.getRoundDate());
Startingtime[] startingtimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("SELECT startingtime.* FROM STARTINGTIME, tournament_round_STARTINGTIME WHERE tournament_round_startingtime.tournament_round_id = " + tourRound.getID() + " AND tournament_round_startingtime.startingtime_id = startingtime.startingtime_id AND STARTINGTIME_DATE = '" + startStamp.toSQLDateString() + "' AND field_id=" + tournament.getFieldId() + " AND member_id = " + member.getID());
if (startingtimes.length > 0) {
returner = true;
}
/*
* if (!returner) { returner =
* TournamentController.isMemberRegisteredInTournament(tournament,member); }
*/
return returner;
}
public List getMembersInStartingGroup(Tournament tournament, TournamentRound tournamentRound, int startingGroupNumber) {
List members = new Vector();
try {
members = com.idega.data.EntityFinder.findAll((Member) IDOLookup.instanciateEntity(Member.class), "SELECT member.* FROM member,STARTINGTIME, TOURNAMENT_ROUND_STARTINGTIME WHERE TOURNAMENT_ROUND_STARTINGTIME.tournament_round_id = " + tournamentRound.getID() + " AND TOURNAMENT_ROUND_STARTINGTIME.startingtime_id = startingtime.startingtime_id AND member.member_id = startingtime.member_id AND grup_num =" + startingGroupNumber + " AND field_id=" + tournament.getFieldId());
}
catch (SQLException sq) {
sq.printStackTrace(System.err);
}
return members;
}
public BackButton getBackLink(IWContext modinfo, int backUpHowManyPages) {
BackButton backLink = new BackButton();
backLink.setHistoryMove(backUpHowManyPages);
return backLink;
}
public BackButton getBackLink(IWContext modinfo) {
return getBackLink(modinfo, 1);
}
public List getUnionTournamentGroups(IWContext modinfo) throws SQLException {
try {
Union union = ((is.idega.idegaweb.golf.entity.Member) AccessControl.getMember(modinfo)).getMainUnion();
return getUnionTournamentGroups(union);
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
}
public List getUnionTournamentGroups(Union union) throws SQLException {
List tGroup = null;
if (union != null) {
if (union.getID() == 3) {
tGroup = EntityFinder.findAllOrdered((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class), "name");
}
else {
tGroup = EntityFinder.findAll((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class), "SELECT * FROM TOURNAMENT_GROUP WHERE union_id =" + union.getID() + " OR union_id = 3 ORDER BY name");
}
}
else {
tGroup = EntityFinder.findAllOrdered((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class), "name");
}
return tGroup;
}
public SubmitButton getAheadButton(IWContext modinfo, String name, String value) {
IWMainApplication iwma = modinfo.getIWMainApplication();
IWBundle iwb = iwma.getBundle(getBundleIdentifier());
IWResourceBundle iwrb = iwb.getResourceBundle(modinfo.getCurrentLocale());
SubmitButton aheadButton = new SubmitButton(iwrb.getLocalizedString("trounament.continue","continue"), name, value);
return aheadButton;
}
public TournamentStartingtimeList getStartingtimeTable(Tournament tournament, String tournament_round_id, boolean viewOnly, boolean forPrinting) throws SQLException {
return getStartingtimeTable(tournament, tournament_round_id, viewOnly, false, true, forPrinting);
}
public TournamentStartingtimeList getStartingtimeTable(Tournament tournament, String tournament_round_id, boolean viewOnly) throws SQLException {
return getStartingtimeTable(tournament, tournament_round_id, viewOnly, false, true);
}
public TournamentStartingtimeList getStartingtimeTable(Tournament tournament, String tournament_round_id, boolean viewOnly, boolean onlineRegistration, IWResourceBundle iwrb) throws SQLException {
return getStartingtimeTable(tournament, tournament_round_id, viewOnly, onlineRegistration, true);
}
public TournamentStartingtimeList getStartingtimeTable(Tournament tournament, String tournament_round_id, boolean viewOnly, boolean onlineRegistration, boolean useBorder) throws SQLException {
return getStartingtimeTable(tournament, tournament_round_id, viewOnly, onlineRegistration, useBorder, false);
}
public TournamentStartingtimeList getStartingtimeTable(Tournament tournament, String tournament_round_id, boolean viewOnly, boolean onlineRegistration, boolean useBorder, boolean forPrinting) throws SQLException {
return new TournamentStartingtimeList(tournament, tournament_round_id, viewOnly, onlineRegistration, useBorder, forPrinting);
}
public boolean hasMemberStartingtime(Tournament tournament, TournamentRound tourRound, is.idega.idegaweb.golf.entity.Member member) {
boolean returner = false;
try {
com.idega.util.IWTimestamp startStamp = new com.idega.util.IWTimestamp(tourRound.getRoundDate());
Startingtime[] startingtimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("SELECT * FROM STARTINGTIME WHERE STARTINGTIME_DATE = '" + startStamp.toSQLDateString() + "' AND member_id =" + member.getID() + " AND field_id=" + tournament.getFieldId());
if (startingtimes.length > 0) {
returner = false;
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
return returner;
}
public int getNextAvailableStartingGroup(Tournament tournament, TournamentRound tourRound, boolean useEmptyStartingGroup, int minimumGroupNumber) {
int counter = -1;
try {
counter = minimumGroupNumber;
boolean done = false;
Startingtime[] startingtimes;
com.idega.util.IWTimestamp startStamp = new com.idega.util.IWTimestamp(tourRound.getRoundDate());
while (!done) {
startingtimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("SELECT * FROM STARTINGTIME s, TOURNAMENT_ROUND_STARTINGTIME trs WHERE trs.startingtime_id = s.startingtime_id AND trs.tournament_round_id = " + tourRound.getID() + " AND s.field_id=" + tournament.getFieldId() + " AND s.grup_num=" + counter);
if (useEmptyStartingGroup) {
if (startingtimes.length == 0) {
done = true;
}
}
else {
if (startingtimes.length < tournament.getNumberInGroup()) {
done = true;
}
}
if (!done) {
++counter;
}
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
return counter;
}
public int getNextAvailableStartingGroup(Tournament tournament, TournamentRound tourRound) {
return getNextAvailableStartingGroup(tournament, tourRound, false);
}
public int getNextAvailableStartingGroup(Tournament tournament, TournamentRound tourRound, boolean useEmptyStartingGroup) {
return getNextAvailableStartingGroup(tournament, tourRound, useEmptyStartingGroup, 1);
}
public List getStartingtimeOrder(Tournament tournament, TournamentRound tournamentRound) {
List members = null;
try {
com.idega.util.IWTimestamp startStamp = new com.idega.util.IWTimestamp(tournamentRound.getRoundDate());
com.idega.util.IWTimestamp endStamp = new com.idega.util.IWTimestamp(tournamentRound.getRoundEndDate());
members = EntityFinder.findAll((Member) IDOLookup.instanciateEntity(Member.class), "SELECT member.*,grup_num from startingtime, member, tournament_round_startingtime, tournament, tournament_member where tournament.tournament_id = " + tournament.getID() + " and tournament.tournament_id = tournament_member.tournament_id AND tournament_round_startingtime.tournament_round_id = " + tournamentRound.getID() + " AND tournament_round_startingtime.startingtime_id = startingtime.startingtime_id AND startingtime.field_id = " + tournament.getFieldId() + " AND STARTINGTIME.STARTINGTIME_DATE >= '" + startStamp.toSQLDateString() + "' AND STARTINGTIME.STARTINGTIME_DATE <= '" + endStamp.toSQLDateString() + "' AND member.member_id = startingtime.member_id and member.member_id = tournament_member.member_id ORDER by grup_num");
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
return members;
}
public DropdownMenu getAvailableGrupNums(String dropdownName, Tournament tournament, TournamentRound tRound) throws SQLException {
DropdownMenu menu = new DropdownMenu(dropdownName);
int interval = tournament.getInterval();
int grupNum = 0;
IWTimestamp start = new IWTimestamp(tRound.getRoundDate());
start.addMinutes(-interval);
IWTimestamp end = new IWTimestamp(tRound.getRoundEndDate());
java.text.DecimalFormat extraZero = new java.text.DecimalFormat("00");
menu.addMenuElement(0, "");
boolean displayTee = false;
if (tRound.getStartingtees() > 1) {
displayTee = true;
}
while (end.isLaterThan(start)) {
++grupNum;
start.addMinutes(interval);
if (displayTee) {
menu.addMenuElement(grupNum, extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()) + " (1)");
menu.addMenuElement(grupNum + "_", extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()) + " (10)");
}
else {
menu.addMenuElement(grupNum, extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()));
}
}
return menu;
}
/**
* @return Returns boolean array where "boolean"[0] is the answer for teetime group number 1 and "boolean"[maximumGroupNumber-1] is the answer for the last teetime group
*/
public boolean[] getIfTeetimeGroupsAreFull(Tournament tournament, TournamentRound tourRound, int maximumGroupNumber, int teeNumber) {
boolean[] groupIsFull = new boolean[maximumGroupNumber];
try {
boolean done = false;
Startingtime[] startingtimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("SELECT * FROM STARTINGTIME s, TOURNAMENT_ROUND_STARTINGTIME trs WHERE trs.startingtime_id = s.startingtime_id AND trs.tournament_round_id = " + tourRound.getID() + " AND s.field_id=" + tournament.getFieldId()+"and s.tee_number="+teeNumber+" order by s.grup_num");
com.idega.util.IWTimestamp startStamp = new com.idega.util.IWTimestamp(tourRound.getRoundDate());
int maximumInGroup = tournament.getNumberInGroup();
int currentGroup = 1; // first groupnumber
int counter = 0; //count of people
boolean currentHasBeenAdded=false;
if(startingtimes!=null && startingtimes.length>0){ // if any startingtimes reserved
for (int i = 0; i < startingtimes.length; i++) {
currentHasBeenAdded=false;
Startingtime startingtime = startingtimes[i];
int newGroup = startingtime.getGroupNum();
if(newGroup==currentGroup){
counter++;
}else{
if(counter>=maximumInGroup){ // if the group is not full
groupIsFull[currentGroup]=true;
}
currentGroup=newGroup; //Set the new group as current group
counter=1; // must be one registered to the new current group
}
}
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
return groupIsFull;
}
public int registerMember(is.idega.idegaweb.golf.entity.Member member, Tournament theTournament, String tournament_group_id) throws SQLException {
int returner = 0;
try {
member.addTo(theTournament, "TOURNAMENT_GROUP_ID", tournament_group_id, "UNION_ID", "" + member.getMainUnionID(), "DISMISSAL_ID", "0");
theTournament.setPosition(member, -1);
createScorecardForMember(member, theTournament, tournament_group_id);
returner = 0;
}
catch (SQLException s) {
try {
s.printStackTrace(System.err);
Tournament[] tour = (Tournament[]) member.findRelated(theTournament);
if (tour.length > 0) {
//add("<br>Me�limur : \""+member.getName()+"\" er �egar skr��/ur �
// m�ti�");
returner = 1;
}
}
catch (SQLException sq) {
sq.printStackTrace(System.err);
//add("<br>Me�limur : \""+member.getName()+"\" skr��ist ekki � m�ti�");
returner = 2;
}
}
return returner;
}
public void createScorecardForMember(is.idega.idegaweb.golf.entity.Member member, Tournament tournament) throws SQLException {
try {
int tournament_group_id = tournament.getTournamentGroupId(member.getID());
TournamentGroup tGroup = ((TournamentGroupHome) IDOLookup.getHomeLegacy(TournamentGroup.class)).findByPrimaryKey(tournament_group_id);
TournamentTournamentGroup[] tTGroup = (TournamentTournamentGroup[]) ((TournamentTournamentGroup) IDOLookup.instanciateEntity(TournamentTournamentGroup.class)).findAllByColumnEquals("tournament_id", tournament.getID() + "", "tournament_group_id", tournament_group_id + "");
if (tTGroup.length > 0) {
createScorecardForMember(member, tournament, tTGroup[0]);
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
public void createScorecardForMember(is.idega.idegaweb.golf.entity.Member member, Tournament tournament, String tournament_group_id) throws SQLException {
TournamentGroup tGroup = null;
try {
((TournamentGroupHome) IDOLookup.getHomeLegacy(TournamentGroup.class)).findByPrimaryKey(Integer.parseInt(tournament_group_id));
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
TournamentTournamentGroup[] tTGroup = (TournamentTournamentGroup[]) ((TournamentTournamentGroup) IDOLookup.instanciateEntity(TournamentTournamentGroup.class)).findAllByColumnEquals("tournament_id", tournament.getID() + "", "tournament_group_id", tournament_group_id);
if (tTGroup.length > 0) {
createScorecardForMember(member, tournament, tTGroup[0]);
}
else {
}
}
public void createScorecardForMember(is.idega.idegaweb.golf.entity.Member member, Tournament tournament, TournamentTournamentGroup tTGroup, TournamentRound tRound) throws SQLException {
TournamentType tType = tournament.getTournamentType();
Scorecard scorecard;
Field field = tournament.getField();
Handicap handicapper;
float handicap;
float playingHandicap = -100;
float CR = 0;
int slope = 0;
float maxHandicap = 36;
float modifier = 1;
try {
Tee tee = ((TeeHome) IDOLookup.getHomeLegacy(Tee.class)).findByFieldAndTeeColorAndHoleNumber(field.getID(), tTGroup.getTeeColorId(), 1);
if (tee != null) {
CR = tee.getCourseRating();
slope = tee.getSlope();
}
}
catch (Exception e) {
}
handicap = member.getHandicap();
if (handicap > 36) {
try {
MemberInfo memberInfo = ((MemberInfoHome) IDOLookup.getHomeLegacy(MemberInfo.class)).findByPrimaryKey(member.getID());
memberInfo.setHandicap(36);
memberInfo.update();
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
}
maxHandicap = 36;
if (member.getGender().equalsIgnoreCase("m")) {
maxHandicap = tournament.getMaxHandicap();
}
else {
maxHandicap = tournament.getFemaleMaxHandicap();
}
try {
handicapper = new Handicap((double) handicap);
playingHandicap = (float) handicapper.getLeikHandicap((double) slope, (double) CR, (double) tournament.getField().getFieldPar());
if (playingHandicap > maxHandicap) {
handicap = Handicap.getInstance().getHandicapForScorecard(tournament.getID(), tTGroup.getTeeColorId(), maxHandicap);
playingHandicap = maxHandicap;
}
}
catch (IOException io) {
io.printStackTrace(System.err);
if (handicap > maxHandicap) {
handicap = maxHandicap;
}
}
try {
modifier = tType.getModifier();
if (modifier != -1) {
if (playingHandicap != -100) {
float modified = (float) playingHandicap * tType.getModifier();
playingHandicap = Math.round(modified);
handicap = Handicap.getInstance().getHandicapForScorecard(tournament.getID(), tTGroup.getTeeColorId(), playingHandicap);
}
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
scorecard = (Scorecard) IDOLookup.createLegacy(Scorecard.class);
scorecard.setMemberId(member.getID());
scorecard.setTournamentRoundId(tRound.getID());
//scorecard.setScorecardDate(new
// idegaTimestamp(tDays[i].getDate()).getTimestamp());
scorecard.setTotalPoints(0);
scorecard.setHandicapBefore(handicap);
scorecard.setHandicapAfter(handicap);
scorecard.setSlope(slope);
scorecard.setCourseRating(CR);
scorecard.setFieldID(field.getID());
scorecard.setTeeColorID(tTGroup.getTeeColorId());
scorecard.setHandicapCorrection(false);
scorecard.setUpdateHandicap(false);
scorecard.insert();
}
public void createScorecardForMember(is.idega.idegaweb.golf.entity.Member member, Tournament tournament, TournamentTournamentGroup tTGroup) throws SQLException {
TournamentRound[] tRound = tournament.getTournamentRounds();
int numberOfRounds = tRound.length;
for (int i = 0; i < numberOfRounds; i++) {
createScorecardForMember(member, tournament, tTGroup, tRound[i]);
}
}
public boolean isOnlineRegistration(Tournament tournament) {
return isOnlineRegistration(tournament, IWTimestamp.RightNow());
}
public DisplayScores[] getDisplayScores(String SQLConditions, String order) throws SQLException {
DisplayScores[] tournParticipants = getDisplayScores(SQLConditions, order, "");
return tournParticipants;
}
public DisplayScores[] getDisplayScores(String SQLConditions, String order, String having) throws SQLException {
if (order.equalsIgnoreCase("tournament_handicap")) {
order = "9";
}
else if (order.equalsIgnoreCase("holes_played")) {
order = "10";
}
else if (order.equalsIgnoreCase("strokes_without_handicap")) {
order = "11";
}
else if (order.equalsIgnoreCase("strokes_with_handicap")) {
order = "12";
}
else if (order.equalsIgnoreCase("total_points")) {
order = "13 desc";
}
else if (order.equalsIgnoreCase("difference")) {
order = "14";
}
String queryString = "select m.member_id, m.social_security_number, m.first_name, m.middle_name, m.last_name, u.abbrevation, t.tournament_id, tm.tournament_group_id, sum(cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par )) as numeric (4,0))) / count(tr.tournament_round_id) as tournament_handicap, count(stroke_count) as holes_played, sum(stroke_count) as strokes_without_handicap, sum(stroke_count) - (sum(cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par )) as numeric (4,0))) / count(stroke_count) * count(distinct tr.tournament_round_id)) as strokes_with_handicap, sum(point_count) as total_points, sum(stroke_count) - sum(hole_par) as difference from scorecard s ,stroke str, tournament_round tr, tournament t, field f, member m, union_ u, tournament_member tm" + " where s.tournament_round_id = tr.tournament_round_id and str.scorecard_id = s.scorecard_id and tr.tournament_id = t.tournament_id and t.field_id = f.field_id and s.member_id = m.member_id and m.member_id = tm.member_id and t.tournament_id = tm.tournament_id and tm.union_id = u.union_id" + " and " + SQLConditions + " group by m.member_id, m.social_security_number, m.first_name, m.middle_name, m.last_name, u.abbrevation, t.tournament_id, tm.tournament_group_id, s.handicap_before, s.slope, s.course_rating, f.field_par " + having + " order by " + order;
DisplayScores[] tournParticipants = (DisplayScores[]) ((DisplayScores) IDOLookup.instanciateEntity(DisplayScores.class)).findAll(queryString);
return tournParticipants;
}
public TournamentParticipants[] getTournamentParticipants(String column_name, String column_value, String order) throws SQLException {
if (order.equalsIgnoreCase("holes_played")) {
order = "13";
}
else if (order.equalsIgnoreCase("round_handicap")) {
order = "14";
}
else if (order.equalsIgnoreCase("strokes_without_handicap")) {
order = "15";
}
else if (order.equalsIgnoreCase("strokes_with_handicap")) {
order = "16";
}
else if (order.equalsIgnoreCase("total_par")) {
order = "18";
}
else if (order.equalsIgnoreCase("difference")) {
order = "19";
}
String queryString = "select m.member_id, m.social_security_number, m.first_name, m.middle_name," + " m.last_name, u.abbrevation,tm.tournament_id, tm.tournament_group_id,s.scorecard_id," + " s.scorecard_date, tr.tournament_round_id, tr.round_number, count(str.stroke_count) holes_played," + " cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par )) as numeric (4,0))round_handicap," + " sum(str.stroke_count) strokes_without_handicap, sum(str.stroke_count) - cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par ))as numeric (4,0)) strokes_with_handicap," + " s.total_points, sum(str.hole_par) total_par, sum(str.stroke_count) - sum(str.hole_par) difference, tg.name as group_name, tm.paid" + " from tournament_round tr," + " member m, field f, union_ u, tournament_member tm, tournament t, tournament_group tg," + " scorecard s left join stroke str on str.scorecard_id = s.scorecard_id" + " where s.tournament_round_id = tr.tournament_round_id and tr.tournament_id = t.tournament_id" + " and tm.union_id = u.union_id and t.tournament_id = tm.tournament_id and tm.tournament_group_id = tg.tournament_group_id and tm.member_id = m.member_id" + " and s.member_id = m.member_id and t.field_id = f.field_id" + " and " + column_name + " = " + column_value + " group by m.member_id, m.social_security_number, m.first_name, m.middle_name, m.last_name, u.abbrevation, tm.tournament_id, tm.tournament_group_id,s.scorecard_id, s.scorecard_date, f.field_par,tr.tournament_round_id, tr.round_number, s.total_points, s.handicap_before, s.slope, s.course_rating, tg.name,tm.paid" + " order by " + order;
//String queryString = "select * from tournament_participants where
// "+column_name+"="+column_value+" order by "+order;
TournamentParticipants[] tournParticipants = (TournamentParticipants[]) ((TournamentParticipants) IDOLookup.instanciateEntity(TournamentParticipants.class)).findAll(queryString);
return tournParticipants;
}
public TournamentRoundParticipants[] getTournamentRoundParticipants(String column_name, String column_value, String order) throws SQLException {
if (order.equalsIgnoreCase("holes_played")) {
order = "13";
}
else if (order.equalsIgnoreCase("round_handicap")) {
order = "14";
}
else if (order.equalsIgnoreCase("strokes_without_handicap")) {
order = "15";
}
else if (order.equalsIgnoreCase("strokes_with_handicap")) {
order = "16";
}
else if (order.equalsIgnoreCase("total_par")) {
order = "18";
}
else if (order.equalsIgnoreCase("difference")) {
order = "19";
}
String queryString = "SELECT m.member_id, m.social_security_number, m.first_name, m.middle_name," + " m.last_name, u.abbrevation,tm.tournament_id, tm.tournament_group_id,s.scorecard_id," + " s.scorecard_date, tr.tournament_round_id, tr.round_number, count(str.stroke_count) as holes_played," + " cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par )) as numeric (4,0)) as round_handicap," + " sum(str.stroke_count) as strokes_without_handicap, sum(str.stroke_count) - cast((( s.handicap_before * s.slope / 113 ) + ( s.course_rating - f.field_par ))as numeric (4,0)) as strokes_with_handicap," + " s.total_points, sum(str.hole_par) as total_par, sum(str.stroke_count) - sum(str.hole_par) as difference, start.grup_num, tg.name as group_name, tm.paid" + " FROM tournament_round tr,member m, field f, union_ u, tournament_member tm, tournament t," + " tournament_group tg, startingtime start, tournament_ROUND_startingtime ts, scorecard s" + " LEFT JOIN stroke str on str.scorecard_id = s.scorecard_id" + " WHERE s.tournament_round_id = tr.tournament_round_id" + " AND tr.tournament_id = t.tournament_id" + " AND tm.union_id = u.union_id" + " AND t.tournament_id = tm.tournament_id" + " AND tm.member_id = m.member_id" + " AND s.member_id = m.member_id" + " AND t.field_id = f.field_id" + " AND tR.tournament_ROUND_id = ts.tournament_ROUND_id" + " AND ts.startingtime_id = start.startingtime_id" + " AND start.field_id = t.field_id"
//+ " AND start.startingtime_date >= cast (tr.round_date as datetime)"
//+ " AND start.startingtime_date <= cast (tr.round_end_date as
// datetime)"
+ " AND m.member_id = start.member_id" + " AND tm.tournament_group_id = tg.tournament_group_id" + " AND " + column_name + " = " + column_value + " GROUP BY m.member_id, m.social_security_number, m.first_name, m.middle_name, m.last_name, u.abbrevation, tm.tournament_id, tm.tournament_group_id,s.scorecard_id, s.scorecard_date, f.field_par,tr.tournament_round_id, tr.round_number, s.total_points, s.handicap_before, s.slope, s.course_rating, start.grup_num, tg.name,tm.paid" + " ORDER BY " + order;
//String queryString = "select * from tournament_round_participants where
// "+column_name+"="+column_value+" order by "+order;
TournamentRoundParticipants[] tournParticipants = (TournamentRoundParticipants[]) ((TournamentRoundParticipants) IDOLookup.instanciateEntity(TournamentRoundParticipants.class)).findAll(queryString);
return tournParticipants;
}
public StartingtimeView[] getStartingtimeView(int tournament_round_id, String column_name, String column_value, String column_name_1, String column_value_1, String order) throws SQLException {
return getStartingtimeView(tournament_round_id, column_name, column_value, column_name_1, column_value_1, 1, order);
}
public StartingtimeView[] getStartingtimeView(int tournament_round_id, String column_name, String column_value, String column_name_1, String column_value_1, int tee_number, String order) throws SQLException {
return getStartingtimeView(tournament_round_id, column_name, column_value, column_name_1, column_value_1, tee_number, order, -1, -1);
}
public StartingtimeView[] getStartingtimeView(int tournament_round_id, String column_name, String column_value, String column_name_1, String column_value_1, int tee_number, String order, int first_group_number, int last_group_number) throws SQLException {
is.idega.idegaweb.golf.entity.StartingtimeView[] startView = new is.idega.idegaweb.golf.entity.StartingtimeView[0];
// String queryString = getStartingtimeViewSql(tournament_round_id, column_name, column_value, column_name_1, column_value_1, tee_number, order, first_group_number, last_group_number, false);
String queryString = getStartingtimeViewSql(tournament_round_id, column_name, column_value, column_name_1, column_value_1, tee_number, order, first_group_number, last_group_number);
//System.out.println("GettingStartingtimeView\n" + queryString);
try {
startView = (StartingtimeView[]) ((StartingtimeView) IDOLookup.instanciateEntity(StartingtimeView.class)).findAll(queryString);
//System.out.println("GettingStartingtimeView\n"+queryString);
if (startView == null || startView.length < 1) {
queryString = getStartingtimeViewSql(tournament_round_id, column_name, column_value, column_name_1, column_value_1, tee_number, order, first_group_number, last_group_number);
// queryString = getStartingtimeViewSql(tournament_round_id, column_name, column_value, column_name_1, column_value_1, tee_number, order, first_group_number, last_group_number, true);
//System.out.println("GettingStartingtimeView 2\n"+queryString);
startView = (StartingtimeView[]) ((StartingtimeView) IDOLookup.instanciateEntity(StartingtimeView.class)).findAll(queryString);
}
}
catch (SQLException sql) {
System.err.println("queryString " + queryString);
sql.printStackTrace(System.err);
}
return startView;
}
private String getStartingtimeViewSql(int tournament_round_id, String column_name, String column_value, String column_name_1, String column_value_1, int tee_number, String order, int first_group_number, int last_group_number) {
boolean onlyReserved = true;
String queryString = "select distinct (st.startingtime_id), st.field_id, st.member_id, st.startingtime_date,st.grup_num, "
+ "m.first_name,m.middle_name, m.last_name,m.social_security_number,mi.handicap ,u.abbrevation, u.union_id";
if (!onlyReserved) {
queryString = queryString + ", tm.paid";
}
queryString = queryString + " from startingtime st, member m, union_member_info umi, union_ u, member_info mi, tournament_round_startingtime trs, tournament_round tr ";
if (!onlyReserved) {
queryString = queryString + ", tournament_member tm";
}
queryString = queryString + " where "
+ "trs.tournament_round_id = tr.tournament_round_id ";
if (!onlyReserved) {
queryString = queryString + "AND tr.tournament_id = tm.tournament_id ";
}
queryString = queryString + "AND trs.startingtime_id = st.startingtime_id AND trs.tournament_round_id = "
+ tournament_round_id
+ " AND "
+ "m.member_id = st.member_id AND "
+ "m.member_id = mi.member_id AND "
+ "m.member_id = umi.member_id AND ";
if (!onlyReserved) {
queryString = queryString + "(m.member_id = tm.member_id OR m.member_id = 1) AND ";
}
queryString = queryString + "u.union_id = umi.union_id AND "
+ "st.tee_number = "
+ tee_number
+ " AND "
+ "umi.membership_type = 'main' AND "
+ "umi.member_status = 'A' ";
if (!column_name.equalsIgnoreCase(""))
{
queryString += " AND " + column_name + " = " + column_value;
}
if (!column_name_1.equalsIgnoreCase(""))
{
queryString += " AND " + column_name_1 + " = " + column_value_1;
}
if (first_group_number > 0)
{
queryString += "AND st.grup_num >= " + first_group_number;
}
if (last_group_number > 0)
{
queryString += "AND st.grup_num <= " + last_group_number;
}
if (!order.equalsIgnoreCase(""))
{
queryString += " order by " + order;
}
return queryString;
}
/* private String getStartingtimeViewSql(int tournament_round_id, String column_name, String column_value, String column_name_1, String column_value_1, int tee_number, String order, int first_group_number, int last_group_number, boolean onlyReserved) {
String queryString = "select distinct (st.startingtime_id), st.field_id, st.member_id, st.startingtime_date,st.grup_num, " + "m.first_name,m.middle_name, m.last_name,m.social_security_number,mi.handicap ,u.abbrevation, u.union_id";
if (!onlyReserved) {
queryString = queryString + ", tm.paid";
}
queryString = queryString + " from startingtime st, member m, union_member_info umi, union_ u, member_info mi, tournament_round_startingtime trs, tournament_round tr , tournament_member tm where " + "trs.tournament_round_id = tr.tournament_round_id ";
if (!onlyReserved) {
queryString = queryString + "AND tr.tournament_id = tm.tournament_id ";
}
queryString = queryString + "AND trs.startingtime_id = st.startingtime_id AND trs.tournament_round_id = " + tournament_round_id + " AND " + "m.member_id = st.member_id AND " + "m.member_id = mi.member_id AND " + "m.member_id = umi.member_id AND ";
if (!onlyReserved) {
queryString = queryString + "(m.member_id = tm.member_id OR m.member_id = 1) AND ";
}
queryString = queryString + "u.union_id = umi.union_id AND " + "st.tee_number = " + tee_number + " AND " + "umi.membership_type = 'main' AND " + "umi.member_status = 'A' ";
if (!column_name.equalsIgnoreCase("")) {
queryString += " AND " + column_name + " = " + column_value;
}
if (!column_name_1.equalsIgnoreCase("")) {
queryString += " AND " + column_name_1 + " = " + column_value_1;
}
if (first_group_number > 0) {
queryString += "AND st.grup_num >= " + first_group_number;
}
if (last_group_number > 0) {
queryString += "AND st.grup_num <= " + last_group_number;
}
if (!order.equalsIgnoreCase("")) {
queryString += " order by " + order;
}
return queryString;
}
*/
public int getInt() {
return 4;
}
public boolean isOnlineRegistration(Tournament tournament, IWTimestamp dateToCheck) {
boolean returner = false;
if (tournament.getIfRegistrationOnline()) {
if (dateToCheck.isLaterThan(new IWTimestamp(tournament.getFirstRegistrationDate()))) {
if (new IWTimestamp(tournament.getLastRegistrationDate()).isLaterThan(dateToCheck)) {
returner = true;
}
}
}
return returner;
}
public void removeMemberFromTournament(IWContext modinfo, Tournament tournament, is.idega.idegaweb.golf.entity.Member member) {
removeMemberFromTournament(modinfo, tournament, member, -10);
}
public void removeMemberFromTournament(IWContext modinfo, Tournament tournament, is.idega.idegaweb.golf.entity.Member member, int startingGroupNumber) {
try {
String member_id = "" + member.getID();
IWTimestamp stamp;
IWTimestamp endStamp;
String SQLString;
List startingTimes;
Startingtime sTime;
Scorecard[] scorecards;
Scorecard scorecard;
TournamentRound[] tRounds = tournament.getTournamentRounds();
for (int j = 0; j < tRounds.length; j++) {
stamp = new IWTimestamp(tRounds[j].getRoundDate());
endStamp = new IWTimestamp(tRounds[j].getRoundEndDate());
endStamp.addDays(1);
invalidateStartingTimeCache(modinfo, tournament.getID(), String.valueOf(tRounds[j].getID()));
if (startingGroupNumber != -10) {
SQLString = "SELECT * FROM STARTINGTIME WHERE FIELD_ID = " + tournament.getFieldId() + " AND MEMBER_ID = " + member_id + " AND GRUP_NUM = " + startingGroupNumber + " AND STARTINGTIME_DATE >= '" + stamp.toSQLDateString() + "' AND STARTINGTIME_DATE < '" + endStamp.toSQLDateString() + "'";
}
else {
SQLString = "SELECT * FROM TOURNAMENT_ROUND_STARTINGTIME, STARTINGTIME WHERE TOURNAMENT_ROUND_STARTINGTIME.TOURNAMENT_ROUND_ID = " + tRounds[j].getID() + " AND STARTINGTIME.STARTINGTIME_ID = TOURNAMENT_ROUND_STARTINGTIME.STARTINGTIME_ID AND FIELD_ID =" + tournament.getFieldId() + " AND MEMBER_ID = " + member_id;
}
startingTimes = EntityFinder.findAll((Startingtime) IDOLookup.instanciateEntity(Startingtime.class), SQLString);
if (startingTimes != null) {
try {
for (int i = 0; i < startingTimes.size(); i++) {
sTime = (Startingtime) startingTimes.get(i);
sTime.removeFrom(tRounds[j]);
// try {
// sTime.removeFrom((Tournament) IDOLookup.instanciateEntity(Tournament.class));
// } catch (Exception ignore) {}
sTime.delete();
}
}
catch (Exception ex) {
System.err.println("Tournament Controller : removeMemberFromTournament, startingTime - (VILLA)");
ex.printStackTrace(System.err);
}
}
scorecards = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAllByColumnEquals("MEMBER_ID", member_id, "TOURNAMENT_ROUND_ID", tRounds[j].getID() + "");
if (scorecards != null) {
for (int i = 0; i < scorecards.length; i++) {
try {
scorecard = scorecards[i];
scorecard.delete();
}
catch (Exception ex) {
System.err.println("Tournament Controller : removeMemberFromTournament, scorecards - (VILLA)");
ex.printStackTrace(System.err);
}
}
}
}
member.removeFrom(tournament);
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
public boolean getHasMemberPaid(Tournament tournament, Member member) throws Exception {
String[] repps = SimpleQuerier.executeStringQuery("select paid from tournament_member where member_id = " + member.getID() + " AND tournament_id = " + tournament.getID());
if (repps != null && repps.length > 0 && repps[0] != null) { return "Y".equalsIgnoreCase(repps[0]); }
return false;
}
public int getTournamentGroup(Member member, Tournament tournament) throws Exception {
String[] repps = SimpleQuerier.executeStringQuery("select tournament_group_id from tournament_member where member_id = "+member.getID()+" AND tournament_id = "+tournament.getID());
if (repps != null && repps.length > 0 && repps[0] != null) {
return Integer.parseInt(repps[0]);
}
return -1;
}
public int getTeeColorIdForTournamentGroup(Tournament tournament, TournamentGroup tGroup) throws Exception {
String[] ids = SimpleQuerier.executeStringQuery("select tee_color_id from tournament_tournament_group where tournament_group_id = "+tGroup.getID()+" and tournament_id = "+tournament.getID());
if (ids != null && ids.length > 0 && ids[0] != null) {
return Integer.parseInt(ids[0]);
}
return -1;
}
public void setAllMemberToNotPaid(Tournament tournament) throws Exception {
SimpleQuerier.execute("update tournament_member set paid = 'N' where tournament_id = " + tournament.getID());
}
public boolean setHasMemberPaid(Tournament tournament, Member member, boolean hasPaid) throws Exception {
String sPaid = "Y";
if (!hasPaid) {
sPaid = "N";
}
return SimpleQuerier.execute("update tournament_member set paid = '" + sPaid + "' where member_id = " + member.getID() + " AND tournament_id = " + tournament.getID());
}
public void invalidateStartingTimeCache(IWContext modinfo, Tournament tournament) throws SQLException {
TournamentRound[] tRounds = tournament.getTournamentRounds();
for (int i = 0; i < tRounds.length; i++) {
invalidateStartingTimeCache(modinfo, tournament.getID(), Integer.toString(tRounds[i].getID()));
}
}
public void invalidateStartingTimeCache(IWContext modinfo, int tournamentID, String tournamentRoundID) {
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + false + "_" + false + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + true + "_" + false + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + true + "_" + true + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + true + "_" + false + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + true + "_" + true + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + false + "_" + true + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + false + "_" + true + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_" + tournamentRoundID + "_" + false + "_" + false + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + false + "_" + false + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + true + "_" + false + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + true + "_" + true + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + true + "_" + false + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + true + "_" + true + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + false + "_" + true + "_" + false);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + false + "_" + true + "_" + true);
modinfo.removeApplicationAttribute("tournament_startingtime_" + tournamentID + "_null_" + false + "_" + false + "_" + true);
}
}