gt: 		GregorianCalendar exp = new GregorianCalendar();
context: /*
  
      This file is part of OpenMyEWB.
  
      OpenMyEWB is free software: you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation, either version 3 of the License, or
      (at your option) any later version.
  
      OpenMyEWB is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
  
      You should have received a copy of the GNU General Public License
      along with OpenMyEWB.  If not, see <http://www.gnu.org/licenses/>.
  
      OpenMyEWB is Copyright 2005-2009 Nicolas Kruchten (nicolas@kruchten.com), Francis Kung, Engineers Without Borders Canada, Michael Trauttmansdorff, Jon Fishbein, David Kadish
  
  */
  
  package ca.myewb.model;
  
  import java.util.Calendar;
  import java.util.Date;
  import java.util.GregorianCalendar;
  import java.util.Hashtable;
  
  import ca.myewb.frame.HibernateUtil;
  
  public class ConferenceRegistrationModel 
  {
  	private int id;
  	private UserModel user;
  	private GroupChapterModel chapter;
  	private int amountPaid;
  	private int roomSize;
  	private boolean subsidized;
  	private String type;
  	private Date date;
  	private boolean headset;
  	private String foodPrefs;
  	private boolean cancelled;
  	private String specialNeeds;
  	private String emergName;
  	private String emergPhone;
  	private String code;
  	private int prevConfs;
  	private int prevRetreats;
  	private String receiptNum;
  	private boolean africafund;
  	
  	private static Hashtable<String, Integer> costs = new Hashtable<String, Integer>();
  	static
  	{
  		costs.put("09-stureg0-gtasub", 300);
  		costs.put("09-stureg4-gtasub", 350);
  		costs.put("09-stureg2-gtasub", 525);
  		costs.put("09-stureg1-gtasub", 850);
  		
  		costs.put("09-stureg0-onqcsub", 250);
  		costs.put("09-stureg4-onqcsub", 300);
  		costs.put("09-stureg2-onqcsub", 475);
  		costs.put("09-stureg1-onqcsub", 700);
  
  		costs.put("09-stureg0-sub", 200);
  		costs.put("09-stureg4-sub", 250);
  		costs.put("09-stureg2-sub", 425);
  		costs.put("09-stureg1-sub", 650);
  
  		costs.put("09-stureg0", 400);
  		costs.put("09-stureg4", 450);
  		costs.put("09-stureg2", 625);
  		costs.put("09-stureg1", 850);
  
  		costs.put("09-proreg0", 450);
  		costs.put("09-proreg4", 525);
  		costs.put("09-proreg2", 675);
  		costs.put("09-proreg1", 900);
  	}
  	
  	private static Hashtable<String, String> names = new Hashtable<String, String>();
  	static
  	{
  		names.put("09-stureg0-gtasub", "Student No-Hotel Registration (GTA discount)");
  		names.put("09-stureg4-gtasub", "Student Quad-Room Registration (GTA discount)");
  		names.put("09-stureg2-gtasub", "Student Double-Room Registration (GTA discount)");
  		names.put("09-stureg1-gtasub", "Student Single-Room Registration (GTA discount)");
  
  		names.put("09-stureg0-onqcsub", "Student No-Hotel Registration (ON/QC discount)");
  		names.put("09-stureg4-onqcsub", "Student Quad-Room Registration (ON/QC discount)");
  		names.put("09-stureg2-onqcsub", "Student Double-Room Registration (ON/QC discount)");
  		names.put("09-stureg1-onqcsub", "Student Single-Room Registration (ON/QC discount)");
  
  		names.put("09-stureg0-sub", "Student No-Hotel Registration (with discount)");
  		names.put("09-stureg4-sub", "Student Quad-Room Registration (with discount)");
  		names.put("09-stureg2-sub", "Student Double-Room Registration (with discount)");
  		names.put("09-stureg1-sub", "Student Single-Room Registration (with discount)");
  
  		names.put("09-stureg0", "Student No-Hotel Registration");
  		names.put("09-stureg4", "Student Quad-Room Registration");
  		names.put("09-stureg2", "Student Double-Room Registration");
  		names.put("09-stureg1", "Student Single-Room Registration");
  
  		names.put("09-proreg0", "Non-Student No-Hotel Registration");
  		names.put("09-proreg4", "Non-Student Quad-Room Registration");
  		names.put("09-proreg2", "Non-Student Double-Room Registration");
  		names.put("09-proreg1", "Non-Student Single-Room Registration");
  	}
  	
  	public boolean isAfricafund() {
  		return africafund;
  	}
  
  	public void setAfricafund(boolean africafund) {
  		this.africafund = africafund;
  	}
  
  	public String getReceiptNum() {
  		return receiptNum;
  	}
  
  	public void setReceiptNum(String receiptNum) {
  		this.receiptNum = receiptNum;
  	}
  
  	public ConferenceRegistrationModel()
  	{
  		
  	}
  
  	public static ConferenceRegistrationModel newRegistration(UserModel user, String type,
  			int prevConfs, int prevRetreats, boolean headset, String foodPrefs, String emergName, String emergPhone, 
  			String specialNeeds, String code, String receiptNum, boolean africafund)
  	{
  		ConferenceRegistrationModel reg = new ConferenceRegistrationModel();
  		reg.setUser(user);
  		reg.setType(type);
  		reg.setDate(new Date());
  		reg.setReceiptNum(receiptNum);
  		reg.setAmountPaid(costs.get(type));
  		reg.setChapter(user.getChapter());
  		reg.setSubsidized(type.contains("sub"));
  
  		reg.setCancelled(false);
  		
  		if(type.contains("reg0"))
  			reg.setRoomSize(0);
  		if(type.contains("reg1"))
  			reg.setRoomSize(1);
  		if(type.contains("reg2"))
  			reg.setRoomSize(2);
  		if(type.contains("reg4"))
  			reg.setRoomSize(4);
  		
  		reg.setEmergName(emergName);
  		reg.setEmergPhone(emergPhone);
  		reg.setSpecialNeeds(specialNeeds);
  		reg.setHeadset(headset);
  		reg.setFoodPrefs(foodPrefs);
  		reg.setPrevConfs(prevConfs);
  		reg.setPrevRetreats(prevRetreats);
  		reg.setCode(code);
  		
  		reg.setAfricafund(africafund);
  		
  		HibernateUtil.currentSession().save(reg);
  		return reg;
  	}
  	
  
  	public void cancel() 
  	{
  		setCancelled(true);
  		setChapter(null); // so that they no longer show up on the chapter reg page
  	}
  	
  	public String getName()
  	{
  		return names.get(type);
  	}
  	
  	public int getRefundableAmount()
  	{
  		if(type.contains("pro"))
  			return amountPaid - 50;
  		else
  			return amountPaid - 20;
  	}
  
  	
  	public static boolean needsToRenew(UserModel u)
  	{
  		if(u.isMember("Associate"))
  		{
  			return true;
  		}
  		
  		GregorianCalendar cal = new GregorianCalendar();
  		cal.set(Calendar.MONTH, Calendar.JANUARY);
  		cal.set(Calendar.DAY_OF_MONTH, 20);
  		cal.set(Calendar.YEAR, 2009);
  		cal.set(Calendar.HOUR_OF_DAY, 1);
  		cal.set(Calendar.MINUTE, 0);
  		
  