package is.idega.idegaweb.golf.handicap.presentation; import java.sql.SQLException; import javax.ejb.FinderException; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import is.idega.idegaweb.golf.business.GolfCacher; 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.MemberInfo; import is.idega.idegaweb.golf.entity.MemberInfoHome; import is.idega.idegaweb.golf.entity.Scorecard; import is.idega.idegaweb.golf.handicap.business.Handicap; import is.idega.idegaweb.golf.presentation.GolfBlock; import is.idega.idegaweb.golf.util.GolfConstants; import com.idega.user.data.User; import com.idega.user.data.UserHome; import com.idega.util.IWTimestamp; import com.idega.util.text.TextSoap; /** * @author gimmi */ public class HandicapCard extends GolfBlock { private int memberId = -1; private IWResourceBundle iwrb; private IWBundle iwb; private String headerTextColor = "#000000"; private String textColor = "#000000"; private int numberOfDisplayedCards = 5; private String width; private boolean addPrintLink = true; private boolean addName = false; private boolean addClub = false; public HandicapCard() { this(-1); } public HandicapCard(int memberId) { this.memberId = memberId; } public void main(IWContext iwc) throws Exception { iwb = getBundle(); iwrb = getResourceBundle(); String iMemberID = null; if (iwc.isParameterSet(GolfConstants.MEMBER_UUID)) { MemberHome home = (MemberHome) IDOLookup.getHomeLegacy(Member.class); try { Member member = home.findByUniqueID(iwc.getParameter(GolfConstants.MEMBER_UUID)); iMemberID = member.getPrimaryKey().toString(); } catch (FinderException fe) { UserHome userHome = (UserHome) IDOLookup.getHome(User.class); try { User user = userHome.findUserByUniqueId(iwc.getParameter(GolfConstants.MEMBER_UUID)); Member member = home.findMemberByIWMemberSystemUser(user); iMemberID = member.getPrimaryKey().toString(); try { MemberInfo memberInfo = ((MemberInfoHome) IDOLookup.getHomeLegacy(MemberInfo.class)).findByPrimaryKey(Integer.parseInt(iMemberID)); } catch (FinderException fex) { MemberInfo memberInfo = ((MemberInfoHome) IDOLookup.getHomeLegacy(MemberInfo.class)).createLegacy(); memberInfo.setID(member.getID()); memberInfo.setFirstHandicap(100f); memberInfo.setHandicap(100f); memberInfo.store(); } } catch (FinderException e) { //Nothing found... } } if (iMemberID != null) { iwc.setSessionAttribute("member_id", iMemberID); } } if (iMemberID == null) { iMemberID = iwc.getRequest().getParameter("member_id"); } if (iMemberID == null) { iMemberID = (String) iwc.getSession().getAttribute("member_id"); } if (iMemberID == null) { Member member = (Member) iwc.getSession().getAttribute("member_login"); if (member != null) { iMemberID = String.valueOf(member.getID()); if (iMemberID == null) { iMemberID = "1"; } } else { iMemberID = "1"; } } if (memberId == -1) { memberId = Integer.parseInt(iMemberID); } drawCard(iwc); } private void drawCard(IWContext modinfo) throws SQLException, FinderException { Table table = new Table(); table.setCellpadding(0); table.setCellspacing(0); if (width != null) { table.setWidth(width); } if (memberId > 0) { int row = 1; row = nameAndClub(table, row); row = lastRounds(table, row); row = footer(table, row); } add(table); } private int lastRounds(Table table, int row) throws SQLException, FinderException { Scorecard[] scoreCards = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where member_id=" + memberId + " and scorecard_date is not null order by scorecard_date desc", (numberOfDisplayedCards+1)); // +1 to get one previous table.add(getSmallHeader(iwrb.getLocalizedString("handicap.date", "Date")), 1, row); table.add(getSmallHeader(iwrb.getLocalizedString("handicap.stableford", "Stableford")), 2, row); table.add(Text.getBreak(), 2, row); table.add(getSmallHeader(iwrb.getLocalizedString("handicap.points_lowercase", "points")), 2, row); table.add(getSmallHeader(iwrb.getLocalizedString("handicap.new", "New")), 3, row); table.add(Text.getBreak(), 3, row); table.add(getSmallHeader(iwrb.getLocalizedString("handicap.handicap_lowercase", "handicap")), 3, row); table.setAlignment(2, row, "center"); table.setAlignment(3, row, "center"); table.setRowVerticalAlignment(row, Table.VERTICAL_ALIGN_BOTTOM); table.setRowStyleClass(row++, getHeaderRowClass()); Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(memberId); IWTimestamp date; Scorecard prev = null; int subtracter = 1; if (scoreCards.length > numberOfDisplayedCards) { prev = scoreCards[numberOfDisplayedCards]; subtracter = 2; } int sRow = 1; for (int i = (scoreCards.length - subtracter); i >= 0; i--) { date = new IWTimestamp(scoreCards[i].getScorecardDate()); table.add(getSmallText(getDateString(date)), 1, row); table.add(getSmallText(Integer.toString(getRealPoints(scoreCards[i], prev, member))), 2, row); if (i == 0) { table.add(getHeader(TextSoap.singleDecimalFormat((double) scoreCards[i].getHandicapAfter())), 3, row); } else { table.add(getSmallText(TextSoap.singleDecimalFormat((double) scoreCards[i].getHandicapAfter())), 3, row); } table.setAlignment(2, row, "center"); table.setAlignment(3, row, "center"); prev = scoreCards[i]; if (sRow % 2 == 0) { table.setRowStyleClass(row++, getDarkRowClass()); } else { table.setRowStyleClass(row++, getLightRowClass()); } sRow++; } return ++row; } private int footer(Table table, int row) { table.setHeight(row++, 4); table.mergeCells(1, row, 3, row); table.setCellpadding(1, row, 4); table.add(getText(iwrb.getLocalizedString("handicap.handicap_card_certification", "This handicap card certifies that the holder has a current playing handicap as shown according to the EGA handicap system")), 1, row++); table.setHeight(row++, 4); IWTimestamp date = IWTimestamp.RightNow(); table.mergeCells(1, row, 3, row); table.setCellpadding(1, row, 4); table.add(getHeader(iwrb.getLocalizedString("handicap.date_of_issue", "Date of issue") + " : "), 1, row); table.add(getHeader(getDateString(date)), 1, row++); table.setHeight(row++, 4); table.mergeCells(1, row, 3, row); table.setCellpadding(1, row, 4); Table bottomTable = new Table(2, 1); bottomTable.setWidth(Table.HUNDRED_PERCENT); bottomTable.setCellpadding(0); bottomTable.setCellspacing(0); bottomTable.setAlignment(2, 1, Table.HORIZONTAL_ALIGN_RIGHT); table.add(bottomTable, 1, row); bottomTable.add(getText(iwrb.getLocalizedString("handicap.handicap_committee_text", "Handicap Committee")), 1, 1); bottomTable.add(Text.getBreak(), 1, 1); bottomTable.add(getText(iwrb.getLocalizedString("handicap.golf_union_of_iceland", "Golf Union of Iceland")), 1, 1); if (this.addPrintLink) { bottomTable.add(getPrintLink(), 2, 1); } bottomTable.setRowVerticalAlignment(1, Table.VERTICAL_ALIGN_BOTTOM); return row; } private String getDateString(IWTimestamp date) { return date.getMonth() + "/" + date.getDay() + "/" + String.valueOf(date.getYear()); } private Table getPrintLink() { Table table = new Table(2, 1); table.setCellpadding(0); table.setCellspacing(0); table.setCellpaddingRight(1, 1, 5); Link print = new Link(iwb.getImage("/shared/print.gif")); print.setToolTip(iwrb.getLocalizedString("handicap.printable_version", "Show printable version")); print.setWindowToOpen(HandicapCardWindow.class); print.addParameter(HandicapCardWindow.PARAMETER_MEMBER_ID, memberId); table.add(print, 1, 1); Link printText = getSmallLink(iwrb.getLocalizedString("print", "Print")); printText.setToolTip(iwrb.getLocalizedString("handicap.printable_version", "Show printable version")); printText.setWindowToOpen(HandicapCardWindow.class); printText.addParameter(HandicapCardWindow.PARAMETER_MEMBER_ID, memberId); table.add(printText, 2, 1); return table; } private int nameAndClub(Table table, int row) throws SQLException, FinderException { if (this.addName) { Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(memberId); table.mergeCells(1, row, 3, row); table.setAlignment(1, row, Table.HORIZONTAL_ALIGN_CENTER); table.add(getHeaderText(member.getName()), 1, row); if (this.addClub) { table.add(getHeaderText(" - " + GolfCacher.getCachedUnion(member.getMainUnionID()).getAbbrevation()), 1, row); } table.add(getHeaderText(" - " + iwrb.getLocalizedString("handicap.hcp", "Hpc") + ": " + member.getHandicap()), 1, row++); table.setHeight(row++, 8); } return row; } private Text getHeaderText(String content) { return getHeader(content); } // private Text getText(String content) { // Text text = new Text(content); // text.setFontSize(1); // text.setFontColor(textColor); // return text; // } public void setWidth(String width) { this.width = width; } public void setNumberOfDisplayedCards(int no) { this.numberOfDisplayedCards = no; } public void addPrintLink(boolean addPrintLink) { this.addPrintLink = addPrintLink; } public void addName(boolean addName) { this.addName = addName; } public void addClub(boolean addClub) { this.addClub = addClub; } private int getRealPoints(Scorecard scoreCard, Scorecard previousScorecard, Member member) throws SQLException, FinderException { float realHandicap = 0; double grunn = (double) scoreCard.getHandicapBefore(); int heildarpunktar = scoreCard.getTotalPoints(); float ny_grunn = scoreCard.getHandicapAfter(); int leik_forgjof = 0; Field field = ((FieldHome) IDOLookup.getHomeLegacy(Field.class)).findByPrimaryKey(scoreCard.getFieldID()); double slope = (double) scoreCard.getSlope(); double course_rating = (double) scoreCard.getCourseRating(); // String cr = TextSoap.singleDecimalFormat(String.valueOf(course_rating)); double field_par = (double) field.getFieldPar(); Handicap leik = new Handicap(grunn); leik_forgjof = leik.getLeikHandicap(slope, course_rating, field_par); if (previousScorecard != null) { realHandicap = previousScorecard.getHandicapAfter(); } else { MemberInfo memberInfo = ((MemberInfoHome) IDOLookup.getHomeLegacy(MemberInfo.class)).findByPrimaryKey(member.getID()); realHandicap = memberInfo.getFirstHandicap(); } Handicap realLeik = new Handicap((double) realHandicap); int realPlayHandicap = realLeik.getLeikHandicap(slope, course_rating, field_par); int realPoints = realLeik.getTotalPoints(scoreCard.getID(), realPlayHandicap); return realPoints; } }