package is.idega.idegaweb.travel.presentation;
import is.idega.idegaweb.travel.business.InquirerBean;
import is.idega.idegaweb.travel.business.ServiceNotFoundException;
import is.idega.idegaweb.travel.business.TimeframeNotFoundException;
import is.idega.idegaweb.travel.business.TravelStockroomBusiness;
import is.idega.idegaweb.travel.data.Contract;
import is.idega.idegaweb.travel.data.GeneralBooking;
import is.idega.idegaweb.travel.data.Inquery;
import is.idega.idegaweb.travel.data.InqueryHome;
import is.idega.idegaweb.travel.data.Service;
import is.idega.idegaweb.travel.service.presentation.BookingForm;
import is.idega.idegaweb.travel.service.presentation.ServiceOverview;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import com.idega.block.creditcard.business.CreditCardAuthorizationException;
import com.idega.block.creditcard.business.CreditCardClient;
import com.idega.block.creditcard.data.CreditCardAuthorizationEntry;
import com.idega.block.creditcard.presentation.Receipt;
import com.idega.block.creditcard.presentation.ReceiptWindow;
import com.idega.block.trade.stockroom.data.Product;
import com.idega.block.trade.stockroom.data.Reseller;
import com.idega.block.trade.stockroom.data.Supplier;
import com.idega.block.trade.stockroom.data.SupplierHome;
import com.idega.block.trade.stockroom.data.Timeframe;
import com.idega.block.trade.stockroom.data.TravelAddress;
import com.idega.block.trade.stockroom.data.TravelAddressHome;
import com.idega.data.IDOLookup;
import com.idega.data.IDORelationshipException;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.presentation.CalendarParameters;
import com.idega.presentation.IWContext;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.DateInput;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.SubmitButton;
import com.idega.util.IWTimestamp;
/**
* Title: idegaWeb TravelBooking Description: Copyright: Copyright (c) 2001
* Company: idega
*
* @author <a href="mailto:gimmi@idega.is">Grimur Jonsson </a>
* @version 1.0
*/
public class Booking extends TravelManager {
private IWBundle bundle;
private IWResourceBundle iwrb;
private Supplier supplier;
private int supplierId;
private Reseller reseller;
private int resellerId;
private Contract contract;
private int contractId;
private GeneralBooking _booking;
private int bookingId;
private TravelAddress travelAddress;
Collection travelAddressIds = null;
private Product product;
private int productId;
private TravelStockroomBusiness tsb;
public static String BookingAction = "booking_action";
public static String BookingParameter = "booking";
public static String parameterBookingId = "bookingBookingId";
private Service service;
private Timeframe timeframe;
// private Tour tour;
public static String parameterProductId = com.idega.block.trade.stockroom.data.ProductBMPBean.getProductEntityName();
private static String parameterInqueryId = "bookInqueryId";
private static String parameterRespondInquery = "bookingRespondInquery";
private static String parameterRespondYes = "bookingYes";
private static String parameterRespondNo = "bookingNo";
private static String parameterRespondDel = "inquiryDel";
private static String parameterRespondCCYes = "bookingCCYes";
private static String parameterRespondCCNo = "bookingCCNo";
private static String parameterRespondCCDel = "bookingCCDel";
public static String parameterUpdateBooking = "bookinUpdateBooking";
public static final int availableIfNoLimit = -1234;
public static int available = availableIfNoLimit;
private IWTimestamp stamp;
private int iMax = 0;
private int iMin = 0;
private int iBookings = 0;
public Booking() {
}
public void main(IWContext iwc) throws Exception {
super.main(iwc);
initialize(iwc);
if (super.isLoggedOn(iwc)) {
if (reseller != null && contract == null) {
product = null;
}
String action = iwc.getParameter(BookingForm.sAction);
/** Backwards comp... */
String baction = iwc.getParameter(BookingForm.BookingAction);
if (baction != null && baction.equals(this.parameterUpdateBooking)) {
action = baction;
}
if (action == null) {
action = "";
}
if (action.equals("")) {
displayForm(iwc);
}
else if (action.equals(parameterRespondInquery)) {
inqueryResponse(iwc);
}
else if (action.equals(this.parameterUpdateBooking)) {
//System.out.println("[Booking] updateBooking :D");
this.updateBooking(iwc);
}
else {
handleInsert(iwc, true);
}
super.addBreak();
}
else {
super.addBreak();
add(super.getLogin(iwc));
}
}
private void initialize(IWContext iwc) throws RemoteException {
bundle = super.getBundle();
iwrb = super.getResourceBundle();
tsb = getTravelStockroomBusiness(iwc);
supplier = super.getSupplier();
reseller = super.getReseller();
if (supplier != null) supplierId = supplier.getID();
if (reseller != null) resellerId = reseller.getID();
String sProductId = iwc.getParameter(parameterProductId);
try {
if (sProductId == null) {
sProductId = (String) iwc.getSessionAttribute("TB_BOOKING_PRODUCT_ID");
}
else {
iwc.setSessionAttribute("TB_BOOKING_PRODUCT_ID", sProductId);
}
if (sProductId != null && !sProductId.equals("-1") && Integer.parseInt(sProductId) > 0) {
productId = Integer.parseInt(sProductId);
product = getProductBusiness(iwc).getProduct(productId);
service = tsb.getService(product);
timeframe = tsb.getTimeframe(product);
String travelAddressId = iwc.getParameter(BookingForm.parameterDepartureAddressId);
if (travelAddressId == null || travelAddressId.equals("-1")) {
List addresses = getProductBusiness(iwc).getDepartureAddresses(product, true);
if (addresses != null && addresses.size() > 0) {
travelAddress = (TravelAddress) addresses.get(0);
}
}
else {
travelAddress = ((TravelAddressHome) (IDOLookup.getHomeLegacy(TravelAddress.class))).findByPrimaryKey(Integer.parseInt(travelAddressId));
}
if (travelAddress != null) {
travelAddressIds = super.getTravelStockroomBusiness(iwc).getTravelAddressIdsFromRefill(product, travelAddress);
}
}
}
catch (ServiceNotFoundException snfe) {
snfe.printStackTrace(System.err);
}
catch (TimeframeNotFoundException tfnfe) {
tfnfe.printStackTrace(System.err);
}
catch (FinderException fe) {
fe.printStackTrace(System.err);
}
if ((reseller != null) && (product != null)) {
contract = getContractBusiness(iwc).getContract(reseller, product);
contractId = ((Integer) contract.getPrimaryKey()).intValue();
}
String sBookingId = iwc.getParameter(this.parameterBookingId);
if (sBookingId != null) {
try {
this.bookingId = Integer.parseInt(sBookingId);
_booking = ((is.idega.idegaweb.travel.data.GeneralBookingHome) com.idega.data.IDOLookup.getHome(GeneralBooking.class)).findByPrimaryKey(new Integer(bookingId));
}
catch (FinderException fe) {
/** not handled */
}
}
stamp = getIdegaTimestamp(iwc);
}
private void displayForm(IWContext iwc) throws Exception {
displayForm(iwc, null);
}
private void displayForm(IWContext iwc, PresentationObject contentTableForm) throws Exception {
Form topTable = getTopTable(iwc);
add(Text.BREAK);
if ((supplier != null) || (reseller != null) || ((supplier == null) && (reseller == null) && (product == null))) {
add(topTable);
add(Text.BREAK);
}
if (product != null) {
System.out.println("Beginning to create BookingForm ... : " + IWTimestamp.RightNow().toSQLTimeString());
Table contentTable = new Table(1, 1);
contentTable.setBorder(1);
contentTable.add(getContentHeader(iwc));
contentTable.add(Text.BREAK);
contentTable.add(getTotalTable(iwc));
if (contentTableForm == null) {
contentTable.add(getContentTable(iwc));
}
else {
contentTable.add(contentTableForm);
}
System.out.println("Finished creating BookingForm ..... : " + IWTimestamp.RightNow().toSQLTimeString());
contentTable.setWidth("90%");
contentTable.setCellspacing(0);
contentTable.setCellpadding(0);
contentTable.setBorderColor(super.textColor);
add(contentTable);
}
else {
add(iwrb.getLocalizedString("travel.select_a_product", "Select a product"));
}
int row = 0;
add(Text.getBreak());
}
private Form getTopTable(IWContext iwc) throws RemoteException {
Form form = new Form();
Table topTable = new Table(5, 1);
form.add(topTable);
topTable.setBorder(0);
topTable.setWidth("90%");
Text dateText = (Text) theText.clone();
dateText.setText(iwrb.getLocalizedString("travel.date", "Date"));
dateText.addToText(":");
DropdownMenu trip = null;
if (supplier != null) {
trip = getProductBusiness(iwc).getDropdownMenuWithProducts(iwc, supplierId);
}
else if (reseller != null) {
trip = getContractBusiness(iwc).getDropdownMenuWithProducts(iwc, resellerId);
}
else if (product == null) {
trip = new DropdownMenu(getProductBusiness(iwc).getProducts(iwc, -1));
}
if (trip != null) if (product != null) {
trip.setSelectedElement(Integer.toString(product.getID()));
}
Text nameText = (Text) theText.clone();
nameText.setText(iwrb.getLocalizedString("travel.product_name_lg", "Name of product"));
nameText.addToText(":");
DateInput dateInp = new DateInput("IWCalendar");
dateInp.setDate(stamp.getSQLDate());
dateInp.setYearRange(2001, IWTimestamp.RightNow().getYear() + 4);
topTable.setColumnAlignment(1, "right");
topTable.setColumnAlignment(2, "left");
topTable.add(nameText, 1, 1);
topTable.add(trip, 2, 1);
topTable.add(dateText, 3, 1);
topTable.add(dateInp, 4, 1);
topTable.setAlignment(5, 1, "right");
topTable.add(new SubmitButton(iwrb.getImage("buttons/get.gif"), "", ""), 5, 1);
return form;
}
private Table getContentHeader(IWContext iwc) throws Exception {
ServiceOverview so = super.getServiceHandler(iwc).getServiceOverview(iwc, this.product);
Table table = so.getServiceInfoTable(iwc, this.product);
return table;
}
private Table getContentTable(IWContext iwc) throws Exception {
Table table = new Table();
table.setWidth("100%");
table.setBorder(0);
table.setCellspacing(0);
table.setCellpadding(2);
table.setWidth(6, "200");
/**
* @todo minnka endurtekningar
*/
BookingForm bf = super.getServiceHandler(iwc).getBookingForm(iwc, product);
bf.setTimestamp(stamp);
int row = 1;
boolean isDayVisible = false;
boolean isExpired = false;
int iBookings = 0;
try {
if (reseller != null) {
isExpired = bf.getIfExpired(iwc);
if (!isExpired) {
isDayVisible = bf.getIsDayVisible(iwc);
}
}
else {
isDayVisible = bf.getIsDayVisible(iwc);
if (supplier == null) {
if (isDayVisible) {
iBookings = getBooker(iwc).getBookingsTotalCount(productId, stamp, -1);
}
}
}
}
catch (ServiceNotFoundException snfe) {
snfe.printStackTrace(System.err);
}
catch (TimeframeNotFoundException tfnfe) {
tfnfe.printStackTrace(System.err);
}
boolean yearly = true;
if (timeframe != null) {
yearly = timeframe.getIfYearly();
}
List depDays = null;
if (isDayVisible) {
table.setColor(6, row, super.backgroundColor);
table.add(Text.BREAK, 6, row);
table.add(getCalendar(iwc), 6, row);
table.setVerticalAlignment(6, row, "top");
table.mergeCells(1, row, 5, row);
if (supplier != null) {
Inquery[] inqueries = getInquirer(iwc).getInqueries(product.getID(), stamp, true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
else if (reseller != null) {
Collection coll = getInquirer(iwc).getInquiryHome().findInqueries(product.getID(), stamp, reseller.getID(), true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
Inquery[] inqueries = getInquirer(iwc).collectionToInqueryArray(coll);
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
table.mergeCells(1, row, 5, row);
table.setColor(1, row, super.backgroundColor);
table.mergeCells(6, 1, 6, row);
table.add(Text.BREAK, 1, row);
if (bf.isFullyBooked(iwc, product, stamp)) {
table.add(super.getHeaderText(iwrb.getLocalizedString("travel.attention_fully_booked", "Attention! Fully booked")), 1, row);
table.add(Text.BREAK, 1, row);
}
if (bf.isUnderBooked(iwc, product, stamp)) {
table.add(super.getHeaderText(iwrb.getLocalizedString("travel.attention_under_booked", "Attention! Booked seats are fewer than the service minimum.")), 1, row);
table.add(Text.BREAK, 1, row);
}
table.add(Text.BREAK, 1, row);
table.add(getBookingForm(iwc, bf), 1, row);
}
else {
if (isExpired) {
if (supplier != null) {
Inquery[] inqueries = getInquirer(iwc).getInqueries(product.getID(), stamp, true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
else if (reseller != null) {
Collection coll = getInquirer(iwc).getInquiryHome().findInqueries(product.getID(), stamp, reseller.getID(), true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
Inquery[] inqueries = getInquirer(iwc).collectionToInqueryArray(coll);
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
table.add(iwrb.getLocalizedString("travel.time_for_booking_has_passed", "Time for booking has passed"), 1, row + 2);
}
else {
if (supplier != null) {
Inquery[] inqueries = getInquirer(iwc).getInqueries(product.getID(), stamp, true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
else if (reseller != null) {
Collection coll = getInquirer(iwc).getInquiryHome().findInqueries(product.getID(), stamp, reseller.getID(), true, is.idega.idegaweb.travel.data.InqueryBMPBean.getInqueryPostDateColumnName());
Inquery[] inqueries = getInquirer(iwc).collectionToInqueryArray(coll);
if (inqueries.length > 0) {
table.add(getInqueries(iwc, inqueries, product), 1, row);
table.setColor(1, row, super.YELLOW);
++row;
}
else {
table.setColor(1, row, super.backgroundColor);
}
}
table.add(iwrb.getLocalizedString("travel.trip_is_not_scheduled_this_day", "Trip is not scheduled this day") + " : " + stamp.getLocaleDate(iwc));
}
table.mergeCells(1, row, 5, row);
table.setAlignment(1, row, "center");
table.setColor(6, row, super.backgroundColor);
table.add(Text.BREAK, 6, row);
table.add(getCalendar(iwc), 6, row);
table.setVerticalAlignment(6, row, "top");
++row;
table.mergeCells(1, row, 5, row);
table.setColor(1, row, super.backgroundColor);
table.mergeCells(6, 1, 6, row);
}
return table;
}
private Table getCalendar(IWContext iwc) {
try {
CalendarHandler ch = new CalendarHandler(iwc);
if (contract != null) ch.setContract(contract);
if (product != null) ch.setProduct(product, iwc);
if (reseller != null) ch.setReseller(reseller);
// if (tour != null) ch.setTour(tour);
ch.setTimestamp(stamp);
ch.setCellpadding(2);
// ch.showInquiries(true);
// ch.setTextStyle(getStyleName(BookingForm.STYLENAME_TEXT));
// ch.setHeaderStyle(getStyleName(BookingForm.STYLENAME_HEADER_TEXT));
// ch.setLinkStyle(getStyleName(BookingForm.STYLENAME_LINK));
// ch.setBackgroundStyle(getStyleName(BookingForm.STYLENAME_BACKGROUND_COLOR));
// ch.setAvailableDayFontStyle(getStyleName(BookingForm.STYLENAME_TEXT));
// ch.setAvailableDayStyle(getStyleName(BookingForm.STYLENAME_AVAILABLE_DAY));
// ch.setFullyBookedStyle(getStyleName(BookingForm.STYLENAME_FULLY_BOOKED));
// ch.setTodayStyle(getStyleName(BookingForm.STYLENAME_TODAY));
// ch.setInquiryStyle(getStyleName(BookingForm.STYLENAME_INQUIRY));
// ch.setInActiveCellStyle(getStyleName(BookingForm.STYLENAME_HEADER_BACKGROUND_COLOR));
//
// ch.addParameterToLink(this.parameterProductId, productId);
return ch.getCalendarTable(iwc);
}
catch (Exception e) {
return new Table();
}
}
private Table getInqueries(IWContext iwc, Inquery[] inqueries, Product product) throws RemoteException, FinderException, CreateException {
Table table = new Table();
table.setWidth("100%");
table.setBorder(0);
table.setCellspacing(1);
int row = 0;
table.setWidth(1, "100");
Text dateText;
Text addrText;
Text nameText;
Text countText;
Text contentText;
IWTimestamp theStamp;
Link answerYes;
Link answerNo;
Link answerDel;
List groupInq;
IWTimestamp tempStamp;
GeneralBooking booking;
Collection coll;
for (int i = 0; i < inqueries.length; i++) {
theStamp = new IWTimestamp(inqueries[i].getInqueryDate());
booking = inqueries[i].getBooking();
groupInq = getInquirer(iwc).getInquiryHome().create().getMultibleInquiries(inqueries[i]);
dateText = (Text) theSmallBoldText.clone();
dateText.setFontColor(BLACK);
if (groupInq == null || groupInq.size() <= 1) {
dateText.setText(theStamp.getLocaleDate(iwc));
}
else {
InqueryHome iHome = (InqueryHome) IDOLookup.getHome(Inquery.class);
theStamp = new IWTimestamp((iHome.findByPrimaryKey(groupInq.get(0))).getInqueryDate());
tempStamp = new IWTimestamp((iHome.findByPrimaryKey(groupInq.get(groupInq.size() - 1))).getInqueryDate());
dateText.setText(theStamp.getLocaleDate(iwc) + " - " + tempStamp.getLocaleDate(iwc));
}
nameText = (Text) theSmallBoldText.clone();
nameText.setFontColor(BLACK);
nameText.setText(inqueries[i].getName());
addrText = (Text) theSmallBoldText.clone();
addrText.setFontColor(BLACK);
countText = (Text) theSmallBoldText.clone();
countText.setFontColor(BLACK);
countText.setText(Integer.toString(inqueries[i].getNumberOfSeats()));
contentText = (Text) theSmallBoldText.clone();
contentText.setFontColor(BLACK);
contentText.setText(inqueries[i].getInquery());
++row;
table.setAlignment(1, row, "left");
table.setAlignment(2, row, "left");
table.setAlignment(3, row, "right");
table.add(dateText, 1, row);
table.add(nameText, 2, row);
table.add(countText, 3, row);
++row;
try {
coll = booking.getTravelAddresses();
Iterator iter = coll.iterator();
if (iter.hasNext()) {
TravelAddress item = (TravelAddress) iter.next();
IWTimestamp time = new IWTimestamp(item.getTime());
addrText.setText(item.getName());
table.add(addrText, 1, row);
table.setAlignment(1, row, "left");
}
}
catch (IDORelationshipException idoRelEx) {
idoRelEx.printStackTrace(System.err);
}
++row;
table.mergeCells(2, row, 3, row);
table.setAlignment(2, row, "left");
table.add(contentText, 2, row);
++row;
++row;
table.mergeCells(2, row, 3, row);
table.setAlignment(2, row, "right");
Collection resellers = null;
try {
resellers = inqueries[i].getResellers();
}
catch (IDORelationshipException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
if (supplier != null) {
if(inqueries[i].getInqueryType() != null && inqueries[i].getInqueryType().equals(InquirerBean.INQUERYTYPE_CREDITCARD)) {
Link answerCCYes = new Link(iwrb.getLocalizedImageButton("travel.confirm_booking", "Confirm booking"));
answerCCYes.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerCCYes.addParameter(this.parameterRespondInquery, this.parameterRespondCCYes);
answerCCYes.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerCCYes.addParameter("year", this.stamp.getYear());
answerCCYes.addParameter("month", this.stamp.getMonth());
answerCCYes.addParameter("day", this.stamp.getDay());
Link answerCCNo = new Link(iwrb.getLocalizedImageButton("travel.reject_booking", "Reject booking"));
answerCCNo.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerCCNo.addParameter(this.parameterRespondInquery, this.parameterRespondCCNo);
answerCCNo.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerCCNo.addParameter("year", this.stamp.getYear());
answerCCNo.addParameter("month", this.stamp.getMonth());
answerCCNo.addParameter("day", this.stamp.getDay());
table.add(answerCCYes, 2, row);
table.add(" ", 2, row);
table.add(answerCCNo, 2, row);
}
else {
answerYes = new Link(iwrb.getLocalizedImageButton("travel.confirm_booking", "Confirm booking"));
answerYes.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerYes.addParameter(this.parameterRespondInquery, this.parameterRespondYes);
answerYes.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerYes.addParameter("year", this.stamp.getYear());
answerYes.addParameter("month", this.stamp.getMonth());
answerYes.addParameter("day", this.stamp.getDay());
answerNo = new Link(iwrb.getLocalizedImageButton("travel.reject_booking", "Reject booking"));
answerNo.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerNo.addParameter(this.parameterRespondInquery, this.parameterRespondNo);
answerNo.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerNo.addParameter("year", this.stamp.getYear());
answerNo.addParameter("month", this.stamp.getMonth());
answerNo.addParameter("day", this.stamp.getDay());
table.add(answerYes, 2, row);
table.add(" ", 2, row);
table.add(answerNo, 2, row);
}
}
else if (reseller != null) {
answerNo = new Link(iwrb.getLocalizedImageButton("travel.cancel_inquiry", "Cancel sinquiry"));
answerNo.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerNo.addParameter(this.parameterRespondInquery, this.parameterRespondNo);
answerNo.addParameter(BookingForm.sAction, this.parameterRespondInquery);
table.add(answerNo, 2, row);
}
if(inqueries[i].getInqueryType() != null && inqueries[i].getInqueryType().equals(InquirerBean.INQUERYTYPE_CREDITCARD)) {
Link answerCCDel = new Link(iwrb.getLocalizedImageButton("travel.delete_inquiry", "Delete inquiry"));
answerCCDel.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerCCDel.addParameter(this.parameterRespondInquery, this.parameterRespondCCDel);
answerCCDel.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerCCDel.addParameter("year", this.stamp.getYear());
answerCCDel.addParameter("month", this.stamp.getMonth());
answerCCDel.addParameter("day", this.stamp.getDay());
}
else {
answerDel = new Link(iwrb.getLocalizedImageButton("travel.delete_inquiry", "Delete inquiry"));
answerDel.addParameter(this.parameterInqueryId, ((Integer) inqueries[i].getPrimaryKey()).intValue());
answerDel.addParameter(this.parameterRespondInquery, this.parameterRespondDel);
answerDel.addParameter(BookingForm.sAction, this.parameterRespondInquery);
answerDel.addParameter("year", this.stamp.getYear());
answerDel.addParameter("month", this.stamp.getMonth());
answerDel.addParameter("day", this.stamp.getDay());
table.add(" ", 2, row);
table.add(answerDel, 2, row);
}
}
return table;
}
private Form getTotalTable(IWContext iwc) throws Exception {
Form form = new Form();
Table table = new Table();
form.add(table);
table.setFrameHsides();
table.setWidth("100%");
table.setCellspacing(0);
table.setColor(super.WHITE);
table.setBorder(1);
table.setBorderColor(super.textColor);
int row = 1;
String cellWidth = "60";
table.setWidth(2, cellWidth);
table.setWidth(3, cellWidth);
table.setWidth(4, cellWidth);
table.setWidth(5, cellWidth);
table.setWidth(6, "200");
int iCount = 0;
int iBooked = 0;
int iInquery = 0;
int iAvailable = 0;
int iMin = 0;
int iBookingExtra = 0;
Text dateText = (Text) theBoldText.clone();
dateText.setText(stamp.getLocaleDate(iwc));
dateText.setFontColor(super.BLACK);
Text countText = (Text) theText.clone();
countText.setText(iwrb.getLocalizedString("travel.count_sm", "count"));
countText.setFontColor(super.BLACK);
Text assignedText = (Text) theText.clone();
assignedText.setText(iwrb.getLocalizedString("travel.assigned_small_sm", "assigned"));
assignedText.setFontColor(super.BLACK);
Text inqText = (Text) theText.clone();
inqText.setText(iwrb.getLocalizedString("travel.inqueries_small_sm", "inq."));
inqText.setFontColor(super.BLACK);
Text bookedText = (Text) theText.clone();
bookedText.setText(iwrb.getLocalizedString("travel.booked_sm", "booked"));
bookedText.setFontColor(super.BLACK);
Text availableText = (Text) theText.clone();
availableText.setText(iwrb.getLocalizedString("travel.available_small_sm", "avail."));
availableText.setFontColor(super.BLACK);
Text bookingStatusText = (Text) theBoldText.clone();
bookingStatusText.setText(iwrb.getLocalizedString("travel.booking_status", "Booking status"));
bookingStatusText.setFontColor(super.BLACK);
Text calendarForBooking = (Text) theText.clone();
calendarForBooking.setText(iwrb.getLocalizedString("travel.booking_status", "Booking status"));
calendarForBooking.setFontColor(super.BLACK);
Text dateTextBold = (Text) theSmallBoldText.clone();
dateTextBold.setText("");
Text nameTextBold = (Text) theSmallBoldText.clone();
nameTextBold.setText("");
Text countTextBold = (Text) theSmallBoldText.clone();
countTextBold.setText("");
Text assignedTextBold = (Text) theSmallBoldText.clone();
assignedTextBold.setText("");
Text inqTextBold = (Text) theSmallBoldText.clone();
inqTextBold.setText("");
Text bookedTextBold = (Text) theSmallBoldText.clone();
bookedTextBold.setText("");
Text availableTextBold = (Text) theSmallBoldText.clone();
availableTextBold.setText("");
dateTextBold.setFontColor(super.BLACK);
nameTextBold.setFontColor(super.BLACK);
countTextBold.setFontColor(super.BLACK);
assignedTextBold.setFontColor(super.BLACK);
inqTextBold.setFontColor(super.BLACK);
bookedTextBold.setFontColor(super.BLACK);
availableTextBold.setFontColor(super.BLACK);
// BookingForm bf = super.getServiceHandler(iwc).getBookingForm(iwc,
// product);
try {
if (reseller != null) {
try {
// if (bf.getIsDayVisible(iwc)) {
if (tsb.getIfDay(iwc, contract, product, this.stamp)) {
iCount = contract.getAlotment();
if (iCount > 0) {
countTextBold.setText(Integer.toString(iCount));
}
iBooked = getBooker(iwc).getBookingsTotalCountByReseller(resellerId, ((Integer) service.getPrimaryKey()).intValue(), this.stamp);
bookedTextBold.setText(Integer.toString(iBooked));
iInquery = getInquirer(iwc).getInquiryHome().getInqueredSeats(((Integer) service.getPrimaryKey()).intValue(), this.stamp, reseller.getID(), true);
inqTextBold.setText(Integer.toString(iInquery));
if (iCount > 0) {
iAvailable = iCount - iBooked - iInquery;
available = iAvailable;
availableTextBold.setText(Integer.toString(iAvailable));
}
iCount = iCount - iBooked;
}
}
catch (SQLException sql) {
sql.printStackTrace(System.err);
}
}
else {
try {
if (tsb.getIfDay(iwc, this.product, getProductBusiness(iwc).getTimeframes(this.product), this.stamp, false, true)) {
iCount = 0;
iBooked = getBooker(iwc).getGeneralBookingHome().getBookingsTotalCount(((Integer) product.getPrimaryKey()).intValue(), this.stamp, null, -1, new int[] {}, travelAddressIds);
iInquery = getInquirer(iwc).getInqueredSeats(((Integer) service.getPrimaryKey()).intValue(), this.stamp, true);
TravelStockroomBusiness tsb = super.getServiceHandler(iwc).getServiceBusiness(this.product);
iCount = tsb.getMaxBookings(product, stamp);
iMin = tsb.getMinBookings(product, stamp);
//iBookingExtra = getBooker(iwc).getBookingsTotalCountByOthersInPool(product, this.stamp);
if (supplier != null) {
if (iCount != BookingForm.UNLIMITED_AVAILABILITY) {
countTextBold.setText(Integer.toString(iCount));
}
bookedTextBold.setText(Integer.toString(iBooked));
if (iBookingExtra > 0) {
bookedTextBold.addToText(" ("+iBookingExtra+") *");
}
inqTextBold.setText(Integer.toString(iInquery));
}
if (iCount != BookingForm.UNLIMITED_AVAILABILITY) {
iAvailable = iCount - iBooked - iBookingExtra;
available = iAvailable;
availableTextBold.setText(Integer.toString(iAvailable));
}
}
}
catch (SQLException sql) {
sql.printStackTrace(System.err);
}
}
}
catch (ServiceNotFoundException snfe) {
snfe.printStackTrace(System.err);
}
catch (TimeframeNotFoundException tfnfe) {
tfnfe.printStackTrace(System.err);
}
this.iMax = iCount;
this.iBookings = iBooked;
this.iMin = iMin;
table.add(dateText, 1, row);
table.add(countText, 2, row);
table.add(bookedText, 3, row);
table.add(inqText, 4, row);
table.add(availableText, 5, row);
table.add(calendarForBooking, 6, row);
table.setRowColor(row, super.GRAY);
++row;
table.add(bookingStatusText, 1, row);
table.setColor(2, row, super.backgroundColor);
table.add(countTextBold, 2, row);
table.add(bookedTextBold, 3, row);
table.add(inqTextBold, 4, row);
table.add(availableTextBold, 5, row);
if (iBookingExtra > 0) {
Text extra = (Text) theSmallBoldText.clone();
extra.setFontColor(super.BLACK);
extra.setText(iwrb.getLocalizedString("travel.extra_bookings_explated","* Bookings made on pool"));
table.add(extra, 6, row);
}
table.setColumnAlignment(1, "left");
table.setColumnAlignment(2, "center");
table.setColumnAlignment(3, "center");
table.setColumnAlignment(4, "center");
table.setColumnAlignment(5, "center");
table.setColumnAlignment(6, "center");
table.setRowColor(row, super.GRAY);
return form;
}
private Form getBookingForm(IWContext iwc, BookingForm bf) throws Exception {
try {
bf.setTimestamp(stamp);
if (_booking != null) {
bf.setBooking(_booking);
bf.setTimestamp(new IWTimestamp(_booking.getBookingDate()));
}
return bf.getBookingForm(iwc);
}
catch (Exception e) {
e.printStackTrace(System.err);
return new Form();
}
}
// BUSINESS
private IWTimestamp getIdegaTimestamp(IWContext iwc) {
IWTimestamp stamp = null;
if (this._booking == null) {
String year = iwc.getParameter("year");
String month = iwc.getParameter("month");
String day = iwc.getParameter("day");
String IWCalendar_year = iwc.getParameter(CalendarParameters.PARAMETER_YEAR);
String IWCalendar_month = iwc.getParameter(CalendarParameters.PARAMETER_MONTH);
String IWCalendar_day = iwc.getParameter(CalendarParameters.PARAMETER_DAY);
if (IWCalendar_year != null) year = IWCalendar_year;
if (IWCalendar_month != null) month = IWCalendar_month;
if (IWCalendar_day != null) day = IWCalendar_day;
String dateStr = iwc.getParameter("booking_date");
if (dateStr == null) {
String chYear = iwc.getParameter("chosen_year");
if ((chYear != null) && (year != null)) year = chYear;
if (stamp == null)
try {
if ((day != null) && (month != null) && (year != null)) {
stamp = new IWTimestamp(Integer.parseInt(day), Integer.parseInt(month), Integer.parseInt(year));
}
else if ((day == null) && (month == null) && (year != null)) {
stamp = new IWTimestamp(1, IWTimestamp.RightNow().getMonth(), Integer.parseInt(year));
}
else if ((day == null) && (month != null) && (year != null)) {
stamp = new IWTimestamp(1, Integer.parseInt(month), Integer.parseInt(year));
}
else {
stamp = IWTimestamp.RightNow();
}
}
catch (Exception e) {
stamp = IWTimestamp.RightNow();
}
}
else {
stamp = new IWTimestamp(dateStr);
}
}
else {
stamp = new IWTimestamp(_booking.getBookingDate());
}
return stamp;
}
private int handleInsert(IWContext iwc, boolean displayForm) throws Exception {
BookingForm bf = super.getServiceHandler(iwc).getBookingForm(iwc, product);
// TourBookingForm tbf = new TourBookingForm(iwc, product);
try {
if (reseller != null) bf.setReseller(reseller);
bf.setTimestamp(stamp);
int returner = bf.handleInsert(iwc);
if (returner == bf.inquirySent) {
/** @todo Cleara form eftir a� inquiry hefur att ser stad */
displayForm(iwc);
}
else if (returner == 0) {
displayForm(iwc);
}
else if (returner > 1) {
add(Text.BREAK);
add(bookingInformation(iwc, returner));
}
else {
displayForm(iwc, bf.getErrorForm(iwc, returner));
}
return returner;
}
catch (Exception e) {
//e.printStackTrace(System.err);
add(Text.BREAK);
add(bookingError(e));
return -1;
}
}
private Table bookingError(Exception e) throws RemoteException {
Text bookingFailed = (Text) super.theBoldText.clone();
bookingFailed.setText(iwrb.getLocalizedString("travel.booking_failed", "Booking failed"));
//e.printStackTrace(System.err);
Text reason = (Text) super.theText.clone();
reason.setText(e.getMessage());
reason.setFontColor(BLACK);
Link link = super.getBackLink();
Table table = new Table();
table.setColor(super.WHITE);
table.setCellpaddingAndCellspacing(1);
table.add(bookingFailed, 1, 1);
table.setRowColor(1, super.backgroundColor);
table.add(reason, 1, 2);
table.setRowColor(2, super.GRAY);
table.add(link, 1, 3);
table.setRowColor(3, super.GRAY);
table.setAlignment(1, 3, Table.HORIZONTAL_ALIGN_LEFT);
return table;
}
private Table bookingInformation(IWContext iwc, int bookingId) throws RemoteException {
try {
GeneralBooking booking = ((is.idega.idegaweb.travel.data.GeneralBookingHome) com.idega.data.IDOLookup.getHome(GeneralBooking.class)).findByPrimaryKey(new Integer(bookingId));
int voucherNumber = Voucher.getVoucherNumber(bookingId);
String referenceNumber = booking.getReferenceNumber();
Text bookingSuccessful = (Text) super.theBoldText.clone();
bookingSuccessful.setText(iwrb.getLocalizedString("travel.booking_was_successful", "Booking was successful"));
Text refNumTxt = (Text) super.theText.clone();
refNumTxt.setText(iwrb.getLocalizedString("travel.reference_number", "Reference number"));
refNumTxt.setFontColor(super.BLACK);
Text voucherNumTxt = (Text) super.theText.clone();
voucherNumTxt.setText(iwrb.getLocalizedString("travel.voucher_number", "Voucher number"));
voucherNumTxt.setFontColor(super.BLACK);
Text voucher = (Text) super.theBoldText.clone();
voucher.setText(iwrb.getLocalizedString("travel.voucher", "Voucher"));
voucher.setFontColor(super.BLACK);
Text receiptText = (Text) super.theBoldText.clone();
receiptText.setText(iwrb.getLocalizedString("travel.receipt", "Receipt"));
receiptText.setFontColor(super.BLACK);
Link voucherLink = new Link(voucher);
voucherLink.setWindowToOpen(VoucherWindow.class);
voucherLink.addParameter(VoucherWindow.parameterBookingId, bookingId);
Link printCCReceipt = null;
try {
CreditCardAuthorizationEntry entry = this.getCreditCardBusiness(iwc).getAuthorizationEntry(supplier, booking.getCreditcardAuthorizationNumber(), new IWTimestamp(booking.getDateOfBooking()));
if (entry != null) {
printCCReceipt = new Link(receiptText);
printCCReceipt.setWindowToOpen(ReceiptWindow.class);
Receipt r = new Receipt(entry, supplier);
iwc.setSessionAttribute(ReceiptWindow.RECEIPT_SESSION_NAME, r);
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
Text refNum = (Text) super.theBoldText.clone();
refNum.setText(referenceNumber);
refNum.setFontColor(super.BLACK);
Text voucherNum = (Text) super.theBoldText.clone();
voucherNum.setText(Integer.toString(voucherNumber));
voucherNum.setFontColor(super.BLACK);
Link btnBook = new Link(super.getTravelSessionManager(iwc).getIWResourceBundle().getImage("buttons/change.gif"), is.idega.idegaweb.travel.presentation.Booking.class);
btnBook.addParameter(is.idega.idegaweb.travel.presentation.Booking.BookingAction, is.idega.idegaweb.travel.presentation.Booking.parameterUpdateBooking);
btnBook.addParameter(is.idega.idegaweb.travel.presentation.Booking.parameterBookingId, booking.getID());
btnBook.addParameter(BookingForm.parameterDepartureAddressId, iwc.getParameter(BookingForm.parameterDepartureAddressId));
Link backLink = new Link(iwrb.getImage("buttons/back.gif"));
backLink.addParameter(this.parameterProductId, this.productId);
backLink.addParameter(CalendarParameters.PARAMETER_DAY, stamp.getDay());
backLink.addParameter(CalendarParameters.PARAMETER_MONTH, stamp.getMonth());
backLink.addParameter(CalendarParameters.PARAMETER_YEAR, stamp.getYear());
Table table = new Table();
table.setColor(super.WHITE);
table.add(bookingSuccessful, 1, 1);
table.add(refNumTxt, 1, 2);
table.add(refNum, 2, 2);
table.add(voucherNumTxt, 1, 3);
table.add(voucherNum, 2, 3);
table.add(voucherLink, 1, 4);
if (printCCReceipt != null) {
table.add(printCCReceipt, 1, 5);
}
table.add(backLink, 1, 6);
table.add(btnBook, 2, 6);
table.mergeCells(1, 1, 2, 1);
table.mergeCells(1, 4, 2, 4);
table.mergeCells(1, 5, 2, 5);
table.setAlignment(1, 6, Table.HORIZONTAL_ALIGN_LEFT);
table.setAlignment(2, 6, Table.HORIZONTAL_ALIGN_RIGHT);
//table.mergeCells(1,6,2,6);
table.setRowColor(1, super.backgroundColor);
table.setRowColor(2, super.GRAY);
table.setRowColor(3, super.GRAY);
table.setRowColor(4, super.GRAY);
table.setRowColor(5, super.GRAY);
table.setRowColor(6, super.GRAY);
return table;
}
catch (FinderException fe) {
fe.printStackTrace(System.err);
return new Table();
}
}
private void inqueryResponse(IWContext iwc) throws Exception {
String yesNo = iwc.getParameter(this.parameterRespondInquery);
String sInqueryId = iwc.getParameter(this.parameterInqueryId);
Boolean book = null;
int inqueryId = -1;
Inquery inquery = null;
if(sInqueryId != null && !sInqueryId.equals("")) {
inqueryId = Integer.parseInt(sInqueryId);
inquery = ((is.idega.idegaweb.travel.data.InqueryHome)com.idega.data.IDOLookup.getHome(Inquery.class)).findByPrimaryKey(new Integer(inqueryId));
}
if (yesNo != null) {
if (yesNo.equals(this.parameterRespondYes)) book = new Boolean(true);
if (yesNo.equals(this.parameterRespondNo)) book = new Boolean(false);
}
if (book != null) {
int errorMessage = getInquirer(iwc).inquiryResponse(iwc, iwrb, inqueryId, book.booleanValue(), this.supplier);
switch (errorMessage) {
case 0:
displayForm(iwc);
break;
case 1:
displayForm(iwc, getInquirer(iwc).getInquiryResponseError(iwrb));
break;
}
}
else if (yesNo != null && yesNo.equals(this.parameterRespondDel)) {
int errorMessage = getInquirer(iwc).inquiryResponse(iwc, iwrb, inqueryId, false, false, this.supplier);
switch (errorMessage) {
case 0:
displayForm(iwc);
break;
case 1:
displayForm(iwc, getInquirer(iwc).getInquiryResponseError(iwrb));
break;
}
}
else if(yesNo.equals(this.parameterRespondCCYes)) {
if(inquery != null) {
try {
GeneralBooking booking = inquery.getBooking();
CreditCardClient t = getCreditCardClient(iwc, booking);
t.finishTransaction(inquery.getAuthorizationString());
int errorMessage = getInquirer(iwc).getCreditcardInqueryRespons(iwc,iwrb,inqueryId,true,true,this.supplier,this.reseller);
switch(errorMessage) {
case 1:
displayForm(iwc);
}
} catch (CreditCardAuthorizationException e) {
// e.printStackTrace();
System.out.println("Display Error = "+e.getDisplayError());
System.out.println("Error message = "+e.getErrorMessage());
System.out.println("Error number = "+e.getErrorNumber());
}catch (Exception e) {
e.printStackTrace();
}
displayForm(iwc);
}
}
else if(yesNo.equals(this.parameterRespondCCNo)) {
int errorMessage = getInquirer(iwc).getCreditcardInqueryRespons(iwc,iwrb,inqueryId,false,true,this.supplier,this.reseller);
switch(errorMessage) {
case 1:
displayForm(iwc);
}
}
else if(yesNo.equals(this.parameterRespondCCDel)) {
int errorMessage = getInquirer(iwc).getCreditcardInqueryRespons(iwc,iwrb,inqueryId,false,true,this.supplier,this.reseller);
switch(errorMessage) {
case 1:
displayForm(iwc);
}
}
}
private void updateBooking(IWContext iwc) throws Exception {
if (_booking != null) {
displayForm(iwc);
}
else {
displayForm(iwc, getErrorUpdateBookingTable());
}
}
private Table getErrorUpdateBookingTable() {
Table table = new Table();
Text text = (Text) theBoldText.clone();
text.setFontColor(super.WHITE);
text.setText(iwrb.getLocalizedString("travel.cannot_edit_booking", "Cannot edit booking"));
table.add(text);
return table;
}
public CreditCardClient getCreditCardClient(IWContext iwc, GeneralBooking gBooking) {
try {
int productSupplierId = gBooking.getService().getProduct().getSupplierId();
Supplier suppTemp = ((SupplierHome) IDOLookup.getHomeLegacy(Supplier.class)).findByPrimaryKeyLegacy(productSupplierId);
return getCreditCardBusiness(iwc).getCreditCardClient(suppTemp, new IWTimestamp(gBooking.getDateOfBooking()));
}catch (Exception e) {
System.out.println("CreditCardMerchant NOT found");
}
return null;
}
}