/*
* Created on 5.3.2004
*/
package is.idega.idegaweb.golf.tournament.presentation;
import is.idega.idegaweb.golf.entity.Field;
import is.idega.idegaweb.golf.entity.FieldHome;
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.Statistic;
import is.idega.idegaweb.golf.entity.Stroke;
import is.idega.idegaweb.golf.entity.Tee;
import is.idega.idegaweb.golf.entity.TeeColor;
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.TournamentHome;
import is.idega.idegaweb.golf.handicap.business.Handicap;
import is.idega.idegaweb.golf.presentation.GolfBlock;
import is.idega.idegaweb.golf.templates.page.GolfWindow;
import java.io.IOException;
import java.math.BigDecimal;
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.CloseButton;
/**
* @author gimmi
*/
public class HandicapScore extends GolfWindow {
public HandicapScore() {
setWidth(650);
setHeight(650);
add(new Score());
}
public class Score extends GolfBlock {
public void main(IWContext modinfo) throws Exception {
IWResourceBundle iwrb = getResourceBundle();
getParentPage().setTitle(iwrb.getLocalizedString("handicap.tournament_scorecards", "Tournament scorecards"));
addHeading(iwrb.getLocalizedString("handicap.tournament_scorecards", "Tournament scorecards"));
String tournament_id = modinfo.getParameter("tournament_id");
String member_id = modinfo.getParameter("member_id");
String tournament_group_id = modinfo.getParameter("tournament_group_id");
Tournament tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id));
int field_id = tournament.getFieldId();
int numberOfRounds = tournament.getNumberOfRounds();
Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard s, tournament_round tr where s.tournament_round_id = tr.tournament_round_id and member_id = " + member_id + " and tournament_id = " + tournament_id + " and scorecard_date is not null order by round_number");
int rounds = scorecard.length + 4;
Field field = ((FieldHome) IDOLookup.getHomeLegacy(Field.class)).findByPrimaryKey(field_id);
TournamentGroup group_id = ((TournamentGroupHome) IDOLookup.getHomeLegacy(TournamentGroup.class)).findByPrimaryKey(Integer.parseInt(tournament_group_id));
TeeColor tee_color = group_id.getTeeColor();
int tee_color_id = tee_color.getID();
String litur = "";
Tee[] tee = (Tee[]) ((Tee) IDOLookup.instanciateEntity(Tee.class)).findAllByColumnEqualsOrdered("field_id", field_id, "tee_color_id", tee_color_id, "hole_number");
switch (tee_color_id) {
case 1:
litur = "FFFFFF";
break;
case 2:
litur = "FFFF67";
break;
case 3:
litur = "5757FF";
break;
case 4:
litur = "FF5757";
break;
case 5:
litur = "5757FF";
break;
case 6:
litur = "FF5757";
break;
}
Table myTable = new Table();
myTable.setRows((numberOfRounds * 3) + 4);
myTable.setColumns(20);
myTable.setBorder(0);
myTable.setAlignment("center");
myTable.setCellpadding(getCellpadding());
myTable.setCellspacing(0);
myTable.mergeCells(1, 1, 20, 1);
for (int z = 1; z <= myTable.getRows(); z++) {
myTable.setRowAlignment(z, "center");
}
myTable.setRowAlignment(1, "left");
myTable.setColumnAlignment(1, Table.HORIZONTAL_ALIGN_LEFT);
myTable.setHorizontalZebraColored(getZebraColor1(), getZebraColor2());
myTable.setRowColor(1, "FFFFFF");
myTable.setRowColor(2, getHeaderColor());
myTable.setRowColor(3, litur);
myTable.setWidth("600");
Text hola = getSmallHeader(iwrb.getLocalizedString("handicap.hole", "Hole"));
Text lengd = getSmallBoldText(iwrb.getLocalizedString("handicap.length", "Length"));
Text par_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.par", "Par"));
Text strokeText = getSmallBoldText(iwrb.getLocalizedString("handicap.strokes", "Strokes"));
Text pointText = getSmallBoldText(iwrb.getLocalizedString("handicap.points", "Points"));
Text differenceTexti = getSmallBoldText(iwrb.getLocalizedString("handicap.differnce", "Difference"));
Text samtals = getSmallHeader(iwrb.getLocalizedString("handicap.total", "Total"));
Table statTable = new Table(rounds - 2, 11);
statTable.setWidth("50%");
statTable.setBorder(0);
statTable.setColor("FFFFFF");
statTable.setCellpadding(getCellpadding());
statTable.setCellspacing(0);
statTable.setHorizontalZebraColored(getZebraColor2(), getZebraColor1());
statTable.setRowColor(1, getHeaderColor());
statTable.setAlignment("center");
statTable.setRows(11);
int statRow = 1;
statTable.add(getSmallHeader(iwrb.getLocalizedString("handicap.total", "Total")), rounds - 2, statRow);
for (int a = 1; a <= rounds - 4; a++) {
statTable.add(getSmallHeader(String.valueOf(a)), a + 1, statRow);
}
statRow++;
for (int a = 1; a <= statTable.getRows(); a++) {
statTable.setRowAlignment(a, "center");
}
statTable.setColumnAlignment(1, "left");
Text hogg_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.strokes", "Strokes"));
Text ernir_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.eagles", "Eagles"));
Text fuglar_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.birdies", "Birdies"));
Text por_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.pars", "Pars"));
Text skollar_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.bogeys", "Bogeys"));
Text skrambar_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.double_bogeys", "Double bogeys"));
Text abraut_texti = getSmallBoldText("% " + iwrb.getLocalizedString("handicap.fairways", "Fairways"));
Text aflot_texti = getSmallBoldText("% " + iwrb.getLocalizedString("handicap.gir", "GIR"));
Text putt_texti = getSmallBoldText(iwrb.getLocalizedString("handicap.putts", "putts"));
statTable.add(hogg_texti, 1, statRow++);
statTable.add(par_texti, 1, statRow);
statTable.setRowStyle(statRow++, "border-bottom", "1px " + this.getLineSeperatorColor() + " solid;");
statTable.add(ernir_texti, 1, statRow++);
statTable.add(fuglar_texti, 1, statRow++);
statTable.add(por_texti, 1, statRow++);
statTable.add(skollar_texti, 1, statRow++);
statTable.add(skrambar_texti, 1, statRow);
statTable.setRowStyle(statRow++, "border-bottom", "1px " + this.getLineSeperatorColor() + " solid;");
statTable.add(abraut_texti, 1, statRow++);
statTable.add(aflot_texti, 1, statRow++);
statTable.add(putt_texti, 1, statRow++);
myTable.add(hola, 1, 2);
myTable.add(lengd, 1, 3);
myTable.add(par_texti, 1, 4);
myTable.add(samtals, 20, 2);
int total_length = 0;
int total_par = 0;
int all_strokes = 0;
int all_difference = 0;
int all_eagle = 0;
int all_birdie = 0;
int all_par = 0;
int all_bogey = 0;
int all_dbogey = 0;
double all_fairway = 0;
double all_greens = 0;
double all_putts = 0;
int rounds_played = 0;
for (int a = 0; a < tee.length; a++) {
Text hole = getSmallHeader(Integer.toString(tee[a].getHoleNumber()));
// Text hole = getSmallHeader(String.valueOf(a + 1));
int holelength = tee[a].getIntColumnValue("tee_length");
total_length += holelength;
Text hole_length = getSmallText(String.valueOf(holelength));
myTable.add(hole, a + 2, 2);
myTable.add(hole_length, a + 2, 3);
}
int total_strokes = 0;
int eagle_total = 0;
int birdie_total = 0;
int par_total = 0;
int bogey_total = 0;
int dbogey_total = 0;
double fairway = 0;
double greens = 0;
double putts = 0;
int hole = 0;
int hole2 = 0;
int gameHandicap = 0;
int gameDifference = 0;
int row = 2;
double slope = 0;
double CR = 0;
double handicapBefore = 0;
int roundPar = 0;
for (int b = 0; b < scorecard.length; b++) {
row += 3;
if ((b + 1) < scorecard.length) {
myTable.setRowStyle(row + 2, "border-bottom", "1px " + this.getLineSeperatorColor() + " solid;");
}
myTable.add(strokeText, 1, row);
myTable.add(pointText, 1, row + 1);
myTable.add(differenceTexti, 1, row + 2);
if (b == 0) {
handicapBefore = (double) scorecard[b].getHandicapBefore();
}
if (b == 0) {
slope = (double) scorecard[b].getSlope();
CR = (double) scorecard[b].getCourseRating();
}
int scorecard_id = scorecard[b].getID();
total_strokes = 0;
total_par = 0;
eagle_total = 0;
birdie_total = 0;
par_total = 0;
bogey_total = 0;
dbogey_total = 0;
fairway = 0;
greens = 0;
putts = 0;
hole = 0;
hole2 = 0;
roundPar = 0;
Statistic[] stats = (Statistic[]) ((Statistic) IDOLookup.instanciateEntity(Statistic.class)).findAll("select s.* from statistic s,tee t where t.tee_id = s.tee_id and s.scorecard_id = " + scorecard_id + " order by t.hole_number");
Stroke[] stroke = (Stroke[]) ((Stroke) IDOLookup.instanciateEntity(Stroke.class)).findAll("select s.* from stroke s,tee t where t.tee_id = s.tee_id and s.scorecard_id = " + scorecard_id + " order by t.hole_number");
for (int c = 0; c < stroke.length; c++) {
int tee_id2 = stroke[c].getTeeID();
int strokes = stroke[c].getStrokeCount();
int par3 = stroke[c].getHolePar();
int points = stroke[c].getPointCount();
int column = c + 2;
try {
Tee tmpTee = ((TeeHome) IDOLookup.getHome(Tee.class)).findByPrimaryKey(tee_id2);
column = tmpTee.getHoleNumber() + 1;
} catch (Exception e) {
e.printStackTrace();
}
roundPar += par3;
if (par3 != 3) {
hole++;
}
hole2++;
int fair = 0;
int green = 0;
int putt = 0;
if (stats != null && stats.length != 0) {
try {
fair = stats[c].getFairway();
green = stats[c].getGreens();
putt = stats[c].getPutts();
}
catch (Exception ex) {
fair = 0;
green = 0;
putt = 0;
}
}
if (fair != -1) {
fairway += (double) fair;
}
if (green != -1) {
greens += (double) green;
}
if (putt != -1) {
putts += (double) putt;
}
int birdie = strokes - par3;
total_strokes += strokes;
gameDifference += (strokes - par3);
Text hole_par = getSmallText(String.valueOf(par3));
if (b == 0) {
myTable.add(hole_par, column, 4);
total_par += par3;
}
Text strokes_text = getSmallText(String.valueOf(strokes));
Text pointsText = getSmallText(String.valueOf(points));
Text differenceText = getSmallText("");
if (gameDifference > 0) {
differenceText.setText("+" + gameDifference);
}
else {
differenceText.setText(gameDifference + "");
}
myTable.add(strokes_text, column, row);
myTable.add(pointsText, column, row + 1);
myTable.add(differenceText, column, row + 2);
if (birdie >= 2) {
myTable.setColor(column, row, "#51787E");
dbogey_total++;
}
else if (birdie == 1) {
myTable.setColor(column, row, "#AACFCF");
bogey_total++;
}
else if (birdie == 0) {
par_total++;
}
else if (birdie == -1) {
myTable.setColor(column, row, "#F5D6CD");
birdie_total++;
}
else if (birdie == -2) {
myTable.setColor(column, row, "#F6A690");
eagle_total++;
}
}
int difference = 0;
if (fairway != 0) {
fairway = scale_decimals((fairway / hole * 100), 2);
all_fairway += fairway;
}
if (greens != 0) {
greens = scale_decimals((greens / hole2 * 100), 2);
all_greens += greens;
}
if (putts != 0) {
putts = scale_decimals((putts / hole2), 2);
all_putts += putts;
}
if (total_strokes != 0) {
difference = total_strokes - roundPar;
all_strokes += total_strokes;
all_difference += difference;
all_eagle += eagle_total;
all_birdie += birdie_total;
all_par += par_total;
all_bogey += bogey_total;
all_dbogey += dbogey_total;
rounds_played++;
}
Text total_strokes_text = getSmallBoldText(String.valueOf(total_strokes));
Text totalPointsText = getSmallText(scorecard[b].getTotalPoints() + "");
Text difference_text = getSmallText(String.valueOf(difference));
Text eagle_text = getSmallText(String.valueOf(eagle_total));
Text birdie_text = getSmallText(String.valueOf(birdie_total));
Text par_text = getSmallText(String.valueOf(par_total));
Text bogey_text = getSmallText(String.valueOf(bogey_total));
Text dbogey_text = getSmallText(String.valueOf(dbogey_total));
Text fairway_text = getSmallText(String.valueOf(fairway));
Text greens_text = getSmallText(String.valueOf(greens));
Text putts_text = getSmallText(String.valueOf(putts));
if (total_strokes != 0) {
myTable.add(total_strokes_text, 20, row);
myTable.add(totalPointsText, 20, row + 1);
statTable.add(total_strokes_text, b + 2, 2);
statTable.add(difference_text, b + 2, 3);
if (eagle_total != 0) {
statTable.add(eagle_text, b + 2, 4);
}
if (birdie_total != 0) {
statTable.add(birdie_text, b + 2, 5);
}
if (par_total != 0) {
statTable.add(par_text, b + 2, 6);
}
if (bogey_total != 0) {
statTable.add(bogey_text, b + 2, 7);
}
if (dbogey_total != 0) {
statTable.add(dbogey_text, b + 2, 8);
}
if (fairway != 0) {
statTable.add(fairway_text, b + 2, 9);
}
if (greens != 0) {
statTable.add(greens_text, b + 2, 10);
}
if (putts != 0) {
statTable.add(putts_text, b + 2, 11);
}
}
}
if (all_fairway != 0) {
all_fairway = scale_decimals((all_fairway / rounds_played), 2);
}
if (all_greens != 0) {
all_greens = scale_decimals((all_greens / rounds_played), 2);
}
if (all_putts != 0) {
all_putts = scale_decimals((all_putts / rounds_played), 2);
}
Text all_strokes_text = getSmallText(String.valueOf(all_strokes));
Text all_difference_text = getSmallText(String.valueOf(all_difference));
Text all_eagle_text = getSmallText(String.valueOf(all_eagle));
Text all_birdie_text = getSmallText(String.valueOf(all_birdie));
Text all_par_text = getSmallText(String.valueOf(all_par));
Text all_bogey_text = getSmallText(String.valueOf(all_bogey));
Text all_dbogey_text = getSmallText(String.valueOf(all_dbogey));
Text all_fairway_text = getSmallText(String.valueOf(all_fairway));
Text all_greens_text = getSmallText(String.valueOf(all_greens));
Text all_putts_text = getSmallText(String.valueOf(all_putts));
if (all_strokes != 0) {
statTable.add(all_strokes_text, rounds - 2, 2);
}
statTable.add(all_difference_text, rounds - 2, 3);
if (all_eagle != 0) {
statTable.add(all_eagle_text, rounds - 2, 4);
}
if (all_birdie != 0) {
statTable.add(all_birdie_text, rounds - 2, 5);
}
if (all_par != 0) {
statTable.add(all_par_text, rounds - 2, 6);
}
if (all_bogey != 0) {
statTable.add(all_bogey_text, rounds - 2, 7);
}
if (all_dbogey != 0) {
statTable.add(all_dbogey_text, rounds - 2, 8);
}
if (all_fairway != 0) {
statTable.add(all_fairway_text, rounds - 2, 9);
}
if (all_greens != 0) {
statTable.add(all_greens_text, rounds - 2, 10);
}
if (all_putts != 0) {
statTable.add(all_putts_text, rounds - 2, 11);
}
String out_differ = "";
if (all_difference == 0) {
out_differ = "E";
}
else if (all_difference > 0) {
out_differ = "+" + String.valueOf(all_difference);
}
else if (all_difference < 0) {
out_differ = String.valueOf(all_difference);
}
Text total_length_text = getSmallText(String.valueOf(total_length));
Text total_par_text = getSmallText(String.valueOf(total_par));
myTable.add(total_length_text, 20, 3);
myTable.add(total_par_text, 20, 4);
Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(member_id));
Text score_head = getHeader(member.getName());
myTable.add(score_head, 1, 1);
Handicap handicap = new Handicap(handicapBefore);
gameHandicap = handicap.getLeikHandicap(slope, CR, (double) field.getFieldPar());
Text handicapText = getHeader(" - ");
handicapText.addToText(iwrb.getLocalizedString("handicap.handicap_abbrevation", "Hcp"));
handicapText.addToText(Integer.toString(gameHandicap));
myTable.add(handicapText, 1, 1);
add("<br>");
add(myTable);
add("<br>");
add(statTable);
add("<br>");
add("<center>");
add(new CloseButton(iwrb.getLocalizedString("close", "Close")));
add("</center>");
}
public double scale_decimals(double tala, int scale) throws IOException {
String nyForgjof = String.valueOf(tala);
BigDecimal test2 = new BigDecimal(nyForgjof);
double nyForgjof2 = test2.setScale(scale, 5).doubleValue();
return nyForgjof2;
}
}
}