/* * Created on 5.3.2004 To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package is.idega.idegaweb.golf.tournament.presentation; 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.Scorecard; import is.idega.idegaweb.golf.entity.Stroke; 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.TournamentRound; import is.idega.idegaweb.golf.entity.TournamentRoundHome; import is.idega.idegaweb.golf.handicap.business.Handicap; import is.idega.idegaweb.golf.presentation.GolfBlock; import java.io.IOException; import java.sql.SQLException; import java.util.Hashtable; import java.util.Vector; import javax.ejb.FinderException; import javax.transaction.SystemException; import javax.transaction.TransactionManager; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Text; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.GenericButton; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.transaction.IdegaTransactionManager; import com.idega.util.IWTimestamp; /** * @author gimmi To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class GroupScorecard extends GolfBlock { IWResourceBundle iwrb; public void main(IWContext modinfo) throws Exception { iwrb = getResourceBundle(); String[] members = modinfo.getParameterValues("members"); String tournament_round_id = modinfo.getParameter("tournament_round_id"); String mode = modinfo.getParameter("mode"); if (mode == null) mode = "insert"; if (members != null) { if (members.length > 0) { main(modinfo, members, tournament_round_id, mode); } } else { close(modinfo); } } public void main(IWContext modinfo, String[] members, String tournament_round_id, String mode) throws IOException, SQLException, FinderException { if (mode.equalsIgnoreCase("insert")) { Form myForm = new Form(); maintainParentReloadURL(modinfo,myForm); myForm.add(new HiddenInput("tournament_round_id", tournament_round_id)); myForm.add(new HiddenInput("mode", "save")); Table myTable = new Table(); myTable.setAlignment("center"); Text holeText = new Text(""); holeText.setFontSize(1); holeText.setBold(); Tournament tournament = null; try { tournament = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id)).getTournament(); } catch (FinderException fe) { throw new SQLException(fe.getMessage()); } int holeNumber = tournament.getNumberOfHoles(); for (int a = 0; a < holeNumber; a++) { Text holeTextTemp = (Text) holeText.clone(); holeTextTemp.setText((a + 1) + ""); myTable.add(holeTextTemp, a + 2, 1); } Text time = new Text(iwrb.getLocalizedString("tournament.", "Time")); time.setFontSize(1); myTable.add(time, holeNumber + 2, 1); TournamentRound round = null; try { round = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id)); } catch (FinderException fe) { throw new SQLException(fe.getMessage()); } StringBuffer inString = new StringBuffer(); for (int i = 0; i < members.length; i++) { inString.append(members[i]); if (i != members.length - 1) inString.append(","); } Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where tournament_round_id = " + tournament_round_id + " and member_id in (" + inString.toString() + ")"); Hashtable membersHash = new Hashtable(scorecard.length); Hashtable scorecardHash = new Hashtable(scorecard.length); inString = new StringBuffer(); for (int i = 0; i < scorecard.length; i++) { inString.append(scorecard[i].getID()); if (i != scorecard.length - 1) inString.append(","); membersHash.put(Integer.toString(scorecard[i].getMemberId()), scorecard[i]); } Stroke[] stroke = (Stroke[]) ((Stroke) IDOLookup.instanciateEntity(Stroke.class)).findAll("select * from stroke s,tee t where t.tee_id = s.tee_id and scorecard_id in (" + inString.toString() + ") order by scorecard_id, hole_number"); for (int i = 0; i < stroke.length; i++) { Tee tee = ((TeeHome) IDOLookup.getHomeLegacy(Tee.class)).findByPrimaryKey(stroke[i].getTeeID()); Vector v = (Vector) scorecardHash.get(Integer.toString(stroke[i].getScorecardID())); if (v == null) { v = new Vector(holeNumber); } if (v.size() < tee.getHoleNumber()) v.setSize(tee.getHoleNumber()); v.add(tee.getHoleNumber() - 1, stroke[i]); scorecardHash.put(Integer.toString(stroke[i].getScorecardID()), v); } for (int a = 0; a < members.length; a++) { myForm.add(new HiddenInput("members", members[a])); Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(members[a])); Text memberText = new Text(member.getName() + ": "); memberText.setFontSize(1); myTable.add(memberText, 1, a + 2); Scorecard sc = (Scorecard) membersHash.get(members[a]); Vector strokes = (Vector) scorecardHash.get(Integer.toString(sc.getID())); int vecSize = 0; if (strokes != null) vecSize = strokes.size(); for (int b = 0; b < holeNumber; b++) { TextInput score = new TextInput(members[a] + "_" + (b + 1)); if (vecSize > b) { if (strokes.elementAt(b) != null) { if (((Stroke) (strokes.elementAt(b))).getStrokeCount() > 0) { score.setValue(((Stroke) (strokes.elementAt(b))).getStrokeCount()); } else { score.setValue("X"); } } } score.setMaxlength(2); score.setLength(2); score.setStyleAttribute("font-family: Verdana; font-size: 8pt; border: 1 solid #000000"); myTable.add(score, b + 2, a + 2); } IWTimestamp stampur = new IWTimestamp(round.getRoundDate()); if (sc.getScorecardDate() != null) { stampur = new IWTimestamp(sc.getScorecardDate()); } TextInput hour = new TextInput(members[a] + "_hour"); hour.setMaxlength(2); hour.setLength(2); hour.setStyleAttribute("font-family: Verdana; font-size: 8pt; border: 1 solid #000000"); hour.setValue(stampur.getHour()); TextInput minute = new TextInput(members[a] + "_minute"); minute.setMaxlength(2); minute.setLength(2); minute.setStyleAttribute("font-family: Verdana; font-size: 8pt; border: 1 solid #000000"); minute.setValue(stampur.getMinute()); Text dot = new Text(": "); dot.setFontSize(1); myTable.add(hour, holeNumber + 2, a + 2); myTable.add(dot, holeNumber + 2, a + 2); myTable.add(minute, holeNumber + 2, a + 2); } int column = myTable.getColumns(); myTable.setRowAlignment(1, "center"); myTable.setColumnAlignment(1, "right"); myTable.setColumnAlignment(holeNumber + 2, "center"); int rows = myTable.getRows(); GenericButton button = getButton(new SubmitButton(localize("tournament.calculate","Calculate"))); button.setOnClick("this.form.submit();this.disabled = true;"); myTable.add(button, holeNumber + 2, rows + 1); myForm.addBreak(); myForm.add(myTable); add(myForm); } else if (mode.equalsIgnoreCase("save")) { TournamentRound round = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id)); Tournament tournament = round.getTournament(); Field field = tournament.getField(); int holeNumber = tournament.getNumberOfHoles(); Form myForm = new Form(); maintainParentReloadURL(modinfo,myForm); Table myTable = new Table(); myTable.setAlignment("center"); StringBuffer inString = new StringBuffer(); for (int i = 0; i < members.length; i++) { inString.append(members[i]); if (i != members.length - 1) inString.append(","); } Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where tournament_round_id = " + tournament_round_id + " and member_id in (" + inString.toString() + ")"); Hashtable membersHash = new Hashtable(scorecard.length); Hashtable scorecardHash = new Hashtable(scorecard.length); Hashtable scorecardTeeHash = new Hashtable(scorecard.length); inString = new StringBuffer(); for (int i = 0; i < scorecard.length; i++) { inString.append(scorecard[i].getID()); if (i != scorecard.length - 1) inString.append(","); membersHash.put(Integer.toString(scorecard[i].getMemberId()), scorecard[i]); } Tee[] tee = (Tee[]) ((Tee) IDOLookup.instanciateEntity(Tee.class)).findAll("select * from tee where field_id = " + String.valueOf(field.getID()) + " order by tee_color_id, hole_number"); Hashtable teesHash = new Hashtable(); Hashtable allTeesHash = new Hashtable(); for (int i = 0; i < tee.length; i++) { Vector v = (Vector) teesHash.get(Integer.toString(tee[i].getTeeColorID())); if (v == null) { v = new Vector(); } v.add(tee[i]); teesHash.put(Integer.toString(tee[i].getTeeColorID()), v); allTeesHash.put(Integer.toString(tee[i].getID()), tee[i]); } Stroke[] stroke = (Stroke[]) ((Stroke) IDOLookup.instanciateEntity(Stroke.class)).findAll("select * from stroke where scorecard_id in (" + inString.toString() + ") order by scorecard_id, tee_id"); for (int i = 0; i < stroke.length; i++) { Vector v = (Vector) scorecardHash.get(Integer.toString(stroke[i].getScorecardID())); if (v == null) { v = new Vector(); // v.setSize(holeNumber); } Tee tmp = (Tee) allTeesHash.get(Integer.toString(stroke[i].getTeeID())); if (tmp != null) { if (tmp.getHoleNumber() > v.size()) v.setSize(tmp.getHoleNumber()); v.setElementAt(stroke[i], tmp.getHoleNumber() - 1); } scorecardHash.put(Integer.toString(stroke[i].getScorecardID()), v); } for (int a = 0; a < members.length; a++) { Scorecard sc = (Scorecard) membersHash.get(members[a]); Vector strokes = (Vector) scorecardHash.get(Integer.toString(sc.getID())); Vector tees = (Vector) teesHash.get(Integer.toString(sc.getTeeColorID())); Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(members[a])); Handicap handicap = new Handicap((double) sc.getHandicapBefore()); int playHandicap = handicap.getLeikHandicap((double) sc.getSlope(), (double) sc.getCourseRating(), (double) field.getFieldPar()); TransactionManager trans = IdegaTransactionManager.getInstance(); try { trans.begin(); if (strokes == null) { strokes = new Vector(); scorecardHash.put(Integer.toString(sc.getID()), strokes); } String hour = modinfo.getParameter(members[a] + "_hour"); String minute = modinfo.getParameter(members[a] + "_minute"); IWTimestamp stampur = new IWTimestamp(round.getRoundDate()); for (int b = 0; b < tees.size(); b++) { Tee currentTee = (Tee) tees.elementAt(b); if (b == 0) { if (hour != null && minute != null) { stampur.setHour(Integer.parseInt(hour)); stampur.setMinute(Integer.parseInt(minute)); sc.setScorecardDate(stampur.getTimestamp()); } sc.setSlope(currentTee.getSlope()); sc.setCourseRating(currentTee.getCourseRating()); sc.setFieldID(field.getID()); sc.update(); } Stroke currentStroke = null; if (strokes.size() > b) currentStroke = (Stroke) strokes.elementAt(currentTee.getHoleNumber() - 1); String stroke_count = modinfo.getParameter(members[a] + "_" + (b + 1)); if (stroke_count == null || stroke_count.equals("")) { stroke_count = ""; } if (stroke_count.equalsIgnoreCase("x")) { stroke_count = "0"; } if (stroke_count != "") { int stroke_new = Integer.parseInt(stroke_count); if (stroke_new == 0) { stroke_new = currentTee.getPar() + 5; } if (currentStroke != null) { currentStroke.setHoleHandicap((int) currentTee.getHandicap()); currentStroke.setHolePar(currentTee.getPar()); currentStroke.setTeeID(currentTee.getID()); currentStroke.setStrokeCount(stroke_new); currentStroke.setPointCount(0); currentStroke.update(); } else { Stroke newStrokes = (Stroke) IDOLookup.createLegacy(Stroke.class); newStrokes.setScorecardID(sc.getID()); newStrokes.setHoleHandicap((int) tee[b].getHandicap()); newStrokes.setHolePar(tee[b].getPar()); newStrokes.setTeeID(tee[b].getID()); newStrokes.setStrokeCount(stroke_new); newStrokes.setPointCount(0); newStrokes.insert(); if (currentTee.getHoleNumber() > strokes.size()) strokes.setSize(currentTee.getHoleNumber()); strokes.setElementAt(newStrokes, currentTee.getHoleNumber() - 1); } } else { if (currentStroke != null) { currentStroke.delete(); } } } int heildarpunktar = Handicap.getInstance().calculatePoints(sc, strokes, playHandicap); trans.commit(); } catch (Exception e) { try { trans.rollback(); } catch (SystemException se) { System.err.println(se); } } //System.out.println(strokes.size()); Table scoreTable = new Table(); scoreTable.setAlignment("center"); scoreTable.setWidth(1, "200"); scoreTable.setAlignment(1, 2, "right"); scoreTable.setAlignment(1, 3, "right"); int inScore = 0; int outScore = 0; int inPoints = 0; int outPoints = 0; int totalScore = 0; int totalPoints = 0; int b = 1; Text memberName = new Text(member.getName() + ", " + iwrb.getLocalizedString("tournament.handicap_short", "Hcp.") + " " + playHandicap + " :"); memberName.setFontSize(1); memberName.setBold(); memberName.setFontFace("Verdana,Arial,sans serif"); Text strokeText = new Text(iwrb.getLocalizedString("tournament.strokes", "Strokes") + ":"); strokeText.setFontSize(1); strokeText.setBold(); Text pointText = new Text(iwrb.getLocalizedString("tournament.points", "Points") + ":"); pointText.setFontSize(1); pointText.setBold(); Text outText = new Text("<u>" + iwrb.getLocalizedString("tournament.out", "Out") + "</u>"); outText.setFontSize(1); outText.setBold(); outText.setFontFace("Verdana,Arial,sans serif"); Text inText = new Text("<u>" + iwrb.getLocalizedString("tournament.in", "In") + "</u>"); inText.setFontSize(1); inText.setBold(); inText.setFontFace("Verdana,Arial,sans serif"); Text totalText = new Text("<u>" + iwrb.getLocalizedString("tournament.total", "Total") + "</u>"); totalText.setFontSize(1); totalText.setBold(); totalText.setFontFace("Verdana,Arial,sans serif"); Text totalNettoText = new Text("<u>" + iwrb.getLocalizedString("tournament.net", "Net") + "</u>"); totalNettoText.setFontSize(1); totalNettoText.setBold(); totalNettoText.setFontFace("Verdana,Arial,sans serif"); scoreTable.add(memberName, 1, 1); scoreTable.add(strokeText, 1, 2); scoreTable.add(pointText, 1, 3); int holeCount = 0; for (int c = 0; c < holeNumber; c++) { Stroke stroke2 = null; if (strokes.size() > c) { stroke2 = (Stroke) strokes.elementAt(c); } b++; int strokeCount = 0; int pointCount = 0; if (stroke2 != null) { strokeCount = stroke2.getStrokeCount(); pointCount = stroke2.getPointCount(); holeCount++; } Text holeNumber2 = new Text("<u>" + (c + 1) + "</u>"); holeNumber2.setFontSize(1); holeNumber2.setBold(); Text holeScore = new Text(strokeCount + ""); holeScore.setFontSize(1); Text holePoint = new Text(pointCount + ""); holePoint.setFontSize(1); scoreTable.add(holeNumber2, b, 1); if (strokeCount > 0) scoreTable.add(holeScore, b, 2); if (pointCount > 0) scoreTable.add(holePoint, b, 3); scoreTable.setColumnAlignment(b, "center"); scoreTable.setWidth(b, "20"); if (c < 9) { outScore += strokeCount; outPoints += pointCount; } else { inScore += strokeCount; inPoints += pointCount; } if (c + 1 == 9) { b++; Text outScoreText = new Text(outScore + ""); outScoreText.setFontSize(1); outScoreText.setBold(); outScoreText.setFontFace("Verdana,Arial,sans serif"); Text outPointsText = new Text(outPoints + ""); outPointsText.setFontSize(1); outPointsText.setBold(); outPointsText.setFontFace("Verdana,Arial,sans serif"); scoreTable.add(outText, b, 1); scoreTable.add(outScoreText, b, 2); scoreTable.add(outPointsText, b, 3); scoreTable.setColumnAlignment(b, "center"); scoreTable.setWidth(b, "30"); } if (c + 1 == 18) { b++; Text inScoreText = new Text(inScore + ""); inScoreText.setFontSize(1); inScoreText.setBold(); inScoreText.setFontFace("Verdana,Arial,sans serif"); Text inPointsText = new Text(inPoints + ""); inPointsText.setFontSize(1); inPointsText.setBold(); inPointsText.setFontFace("Verdana,Arial,sans serif"); scoreTable.add(inText, b, 1); scoreTable.add(inScoreText, b, 2); scoreTable.add(inPointsText, b, 3); scoreTable.setColumnAlignment(b, "center"); scoreTable.setWidth(b, "30"); } totalScore += strokeCount; totalPoints += pointCount; } b++; Text totalScoreText = new Text(totalScore + ""); totalScoreText.setFontSize(1); totalScoreText.setBold(); totalScoreText.setFontFace("Verdana,Arial,sans serif"); Text totalPointsText = new Text(totalPoints + ""); totalPointsText.setFontSize(1); totalPointsText.setBold(); totalPointsText.setFontFace("Verdana,Arial,sans serif"); Text totalNettoScore = new Text((totalScore - playHandicap) + ""); totalNettoScore.setFontSize(1); totalNettoScore.setBold(); totalNettoScore.setFontFace("Verdana,Arial,sans serif"); Text totalOverAllScore = new Text(); totalOverAllScore.setFontSize(1); totalOverAllScore.setBold(); totalOverAllScore.setFontFace("Verdana,Arial,sans serif"); if (tournament.getNumberOfRounds() > 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) { totalOverAllScore.setText(overAllScore[0]); } } catch (Exception e) { e.printStackTrace(System.err); } } scoreTable.add(totalText, b, 1); scoreTable.add(totalScoreText, b, 2); if (holeCount >= 18) { scoreTable.add(totalNettoText, b + 1, 1); scoreTable.add(totalNettoScore, b + 1, 2); if (tournament.getNumberOfRounds() > 1) { scoreTable.add(totalText, b + 2, 1); scoreTable.add(totalOverAllScore, b + 2, 2); scoreTable.setWidth(b + 2, "45"); scoreTable.setColumnAlignment(b + 2, "center"); } } scoreTable.add(totalPointsText, b, 3); scoreTable.setColumnAlignment(b, "center"); scoreTable.setColumnAlignment(b + 1, "center"); scoreTable.setWidth(b, "40"); myTable.add(scoreTable, 1, a + 1); } int rows = myTable.getRows(); myTable.setAlignment(1, rows, "right"); myTable.add(getButton(getTournamentBusiness(modinfo).getBackLink(modinfo)), 1, rows); myTable.addText(" ", 1, rows); myTable.add(getButton(new SubmitButton(localize("tournament.save","Save"))), 1, rows); myForm.add(myTable); add("<br>"); add(myForm); } } public void close(IWContext iwc) { if(hasParentToReloadURL()) { getParentPage().setParentToReloadWithURL(getParentReloadURL(iwc)); } else { getParentPage().setParentToReload(); } getParentPage().close(); } }