package is.idega.idegaweb.travel.presentation; import is.idega.idegaweb.travel.data.BookingEntry; import is.idega.idegaweb.travel.data.GeneralBooking; import is.idega.idegaweb.travel.data.PickupPlace; import is.idega.idegaweb.travel.data.Service; import is.idega.idegaweb.travel.interfaces.Booking; import is.idega.idegaweb.travel.service.presentation.BookingForm; import java.rmi.RemoteException; import java.sql.SQLException; import java.text.DecimalFormat; import java.util.Collection; import java.util.List; import java.util.Vector; import javax.ejb.FinderException; import com.idega.block.creditcard.data.CreditCardAuthorizationEntry; import com.idega.block.trade.stockroom.data.PriceCategory; 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.Timeframe; import com.idega.block.trade.stockroom.data.TravelAddress; import com.idega.core.contact.data.Email; import com.idega.core.contact.data.Phone; import com.idega.core.location.data.Address; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.PresentationObject; import com.idega.presentation.Table; import com.idega.presentation.text.Text; import com.idega.user.data.User; import com.idega.user.data.UserHome; 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 abstract class Voucher extends TravelManager { public static int width = 580; public static final int voucherNumberChanger = 4098; private IWContext _iwc; private IWResourceBundle _iwrb; private IWBundle _bundle; protected GeneralBooking _booking; private List _bookings; private BookingEntry[] _entries; private Service _service; private Product _product; private Supplier _supplier; private Timeframe _timeframe; private TravelAddress _address; private User _user; private Reseller _reseller; private int _localeId = -1; private Table _table; private BookingForm _bf; private DecimalFormat df = new DecimalFormat("0.00"); private List sectOne; private List sectTwo; private List sectThree; private List sectFour; private List clientInfo; private List sectFive; public Voucher(){} public Voucher(int bookingId) throws Exception{ this(((is.idega.idegaweb.travel.data.GeneralBookingHome)com.idega.data.IDOLookup.getHome(GeneralBooking.class)).findByPrimaryKey(new Integer(bookingId))); } public Voucher(GeneralBooking booking) throws Exception { _booking = booking; } public Voucher(Booking booking) throws Exception{ _booking = ((is.idega.idegaweb.travel.data.GeneralBookingHome)com.idega.data.IDOLookup.getHome(GeneralBooking.class)).findByPrimaryKey(new Integer(booking.getID())); } public void add(PresentationObject po) { super.addToBlock(po); } public void main(IWContext iwc) throws Exception{ super.initializer(iwc); setupVoucher(iwc); _bundle = super.getBundle(); _iwrb = super.getResourceBundle(); _iwc = iwc; _localeId = iwc.getCurrentLocaleId(); try { GeneralBooking gBooking = ((is.idega.idegaweb.travel.data.GeneralBookingHome)com.idega.data.IDOLookup.getHome(GeneralBooking.class)).findByPrimaryKey(_booking.getPrimaryKey()); _bookings = getBooker(iwc).getMultibleBookings(gBooking); _service = _booking.getService(); _product = _service.getProduct(); _entries = _booking.getBookingEntries(); _supplier = ((com.idega.block.trade.stockroom.data.SupplierHome)com.idega.data.IDOLookup.getHomeLegacy(Supplier.class)).findByPrimaryKeyLegacy(_product.getSupplierId()); if (_booking.getUserId() != -1) { _user = ((UserHome)com.idega.data.IDOLookup.getHome(User.class)).findByPrimaryKey(new Integer(_booking.getUserId())); _reseller = getResellerManager(iwc).getReseller(_user); } _timeframe = getProductBusiness(iwc).getTimeframe(_product, new IWTimestamp(_booking.getBookingDate())); Collection coll = gBooking.getTravelAddresses(); TravelAddress[] addresses = (TravelAddress[]) coll.toArray(new TravelAddress[]{}); if (addresses != null && addresses.length > 0 ) { _address = addresses[addresses.length - 1]; } _bf = super.getServiceHandler(iwc).getBookingForm(iwc,_product, false); add(getVoucher()); }catch (SQLException sql) { sql.printStackTrace(System.err); } } private Text getBigText(String content) { Text text = (Text) super.theBigBoldText.clone(); text.setFontColor(BLACK); text.setText(content); return text; } private Text getBoldText(String content) { Text text = getText(content); text.setBold(); return text; } private Text getSmallText(String content) { Text text = (Text) super.theSmallBoldText.clone(); text.setFontColor(BLACK); text.setText(content); return text; } private int getVoucherNumber() throws RemoteException{ return _booking.getID() + voucherNumberChanger; } public static int getVoucherNumber(int bookingId) { return bookingId + voucherNumberChanger; } private Table getVoucher() throws RemoteException{ Table bigTable = new Table(); bigTable.setColor(BLACK); bigTable.setCellspacing(0); bigTable.setCellpadding(0); bigTable.setWidth(width); bigTable.setBorder(1); bigTable.setBorderColor(BLACK); _table = new Table(3,3); bigTable.add(_table); _table.setColor(WHITE); _table.setWidth("100%"); _table.setWidth(1,"33%"); _table.setWidth(2,"34%"); _table.setWidth(3,"33%"); _table.setBorder(0); _table.setCellspacing(10); _table.mergeCells(1,1,3,1); _table.mergeCells(1,3,3,3); boolean error = false; if (_booking == null) { _table.add(_iwrb.getLocalizedString("travel.no_booking_specified","No booking specified"),2,2); }else { try { _table.add(getText(_supplier.getSupplierManager().getName()), 1, 1); String desc = _supplier.getSupplierManager().getDescription(); if (desc != null && !desc.trim().equals("")) { _table.add(getText(" - "), 1, 1); _table.add(getText(desc), 1, 1); } _table.setAlignment(1, 1, Table.HORIZONTAL_ALIGN_CENTER); Table leftHeader = new Table(); leftHeader.add(getSmallText(_iwrb.getLocalizedString("travel.NR","NR")),1,1); leftHeader.add(getSmallText(" : "),1,1); leftHeader.add(getSmallText(Integer.toString(getVoucherNumber())),1,1); leftHeader.add(getSmallText(_iwrb.getLocalizedString("travel.reference_number_show","Reference nr. ")),1,2); leftHeader.add(getSmallText(_booking.getReferenceNumber()),1,2); _table.add(leftHeader,1,2); _table.setAlignment(1,2,"left"); Table centerHeader = new Table(); centerHeader.add(getBigText(_iwrb.getLocalizedString("travel.voucher","Voucher")),1,1); if (_reseller != null) { centerHeader.add(getText(_reseller.getName()),1,2); }else { centerHeader.add(getText(_supplier.getName()),1,2); } centerHeader.setAlignment(1,1,"center"); centerHeader.setAlignment(1,2,"center"); _table.add(centerHeader,2,2); _table.setAlignment(2,2,"center"); Table rightHeader = new Table(); rightHeader.add(getSmallText(_iwrb.getLocalizedString("travel.date_of_issue","Date of issue")),1,1); rightHeader.add(getSmallText(":"),1,1); rightHeader.add(getSmallText(new IWTimestamp(_booking.getDateOfBooking()).getLocaleDate(_iwc)),1,2); rightHeader.setAlignment(1,1,"right"); rightHeader.setAlignment(1,2,"right"); _table.add(rightHeader,3,2); _table.setAlignment(3,2,"right"); String strng; int size; // SECTION ONE BEGINS if (sectOne != null) { size = sectOne.size(); for (int i = 0 ; i < size ; i++) { strng = (String) sectOne.get(i); _table.add(strng, 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION ONE ENDS _table.add(Text.BREAK,1,3); Address address = null; List hPhone = null; List fPhone = null; List emails = null; String name = ""; name = _supplier.getName(); address = _supplier.getAddress(); hPhone = _supplier.getHomePhone(); fPhone = _supplier.getFaxPhone(); emails = _supplier.getEmails(); _table.add(getText(_iwrb.getLocalizedString("travel.client_name_lg","CLIENT NAME")),1,3); _table.add(getText(" : "),1,3); _table.add(getText(_booking.getName()),1,3); _table.add(Text.BREAK,1,3); // SECTION CLIENT_INFO BEGINS if (clientInfo != null) { size = clientInfo.size(); for (int i = 0 ; i < size ; i++) { strng = (String) clientInfo.get(i); _table.add(strng, 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION CLIENT_INFO ENDS _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.to_lg","TO")+" : "),1,3); _table.add(getText(name),1,3); _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.address_lg","ADDRESS")+" : "),1,3); _table.add(getText(address.getStreetName()),1,3); _table.add(Text.BREAK,1,3); Phone phone; _table.add(getText(_iwrb.getLocalizedString("travel.telephone_number_lg","PHONE")+" : "), 1, 3); if (hPhone != null) for (int i = 0; i < hPhone.size(); i++) { if (i != 0) _table.add(getText(", "), 1, 3); phone = (Phone) hPhone.get(i); _table.add(getText(phone.getNumber()), 1,3); } _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.fax_lg","FAX")+" : "), 1, 3); if (fPhone != null) for (int i = 0; i < fPhone.size(); i++) { if (i != 0) _table.add(getText(", "), 1, 3); phone = (Phone) fPhone.get(i); _table.add(getText(phone.getNumber()), 1,3); } _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.email_lg","E-MAIL")+" : "), 1, 3); Email email; if (emails != null) for (int i = 0; i < emails.size(); i++) { if (i != 0) _table.add(getText(", "), 1, 3); email = (Email) emails.get(i); _table.add(getText(email.getEmailAddress()), 1,3); } _table.add(Text.BREAK,1,3); // SECTION TWO BEGINS if (sectTwo != null) { size = sectTwo.size(); for (int i = 0 ; i < size ; i++) { strng = (String) sectTwo.get(i); _table.add(strng, 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION TWO ENDS _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.this_order_to_be_accepted","This order to be accepted at amount shown as part or full payment for the following services")),1,3); // SECTION THREE BEGINS if (sectThree != null) { size = sectThree.size(); for (int i = 0 ; i < size ; i++) { strng = (String) sectThree.get(i); _table.add(strng, 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION THREE ENDS _table.add(Text.BREAK,1,3); _table.add(Text.BREAK,1,3); _table.add(getText(getProductBusiness(_iwc).getProductNameWithNumber(_product, true, _localeId)),1,3); _table.add(Text.BREAK,1,3); addBookingDates(_table, _bookings, _iwc); _table.add(Text.BREAK,1,3); if (_address != null) { _table.add(getText(_iwrb.getLocalizedString("travel.departure_place","Departure place")), 1,3); _table.add(getText(" : "),1,3); _table.add(getText(_address.getName()),1,3); _table.add(Text.BREAK,1,3); } addPickupPlaces(_table, _bookings, _iwc); // SECTION FOUR BEGINS if (sectFour != null) { size = sectFour.size(); for (int i = 0 ; i < size ; i++) { strng = (String) sectFour.get(i); _table.add(getText(strng), 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION FOUR ENDS /* _table.add(Text.BREAK,1,2); _table.add(getText(_iwrb.getLocalizedString("travel.party_of_lg","PARTY OF")),1,2); _table.add(getText(" : "),1,2); _table.add(getText(Integer.toString(_booking.getTotalCount())),1,2); */ _table.add(Text.BREAK,1,3); PriceCategory pCat; com.idega.block.trade.data.Currency currency = getBooker(_iwc).getCurrency(_booking); int count = -1; for (int i = 0; i < _entries.length; i++) { //_table.add(getText(Text.NON_BREAKING_SPACE+ Text.NON_BREAKING_SPACE),1,2); pCat = _entries[i].getProductPrice().getPriceCategory(); count = _entries[i].getCount(); _table.add(getText(pCat.getName()),1,3); _table.add(getText(" : "),1,3); _table.add(getText(Integer.toString(count)),1,3); if (pCat.getCountAsPerson()) { if (count == 1) { _table.add(getText(" "+_bf.getUnitName(_iwrb).toLowerCase()), 1, 3); } else if (count > 1) { _table.add(getText(" "+_bf.getUnitNamePlural(_iwrb).toLowerCase()), 1, 3); } } _table.add(getText(" : "+df.format(getBooker(_iwc).getBookingEntryPrice(_entries[i], _booking))+ " "+currency.getCurrencyAbbreviation()), 1, 3); _table.add(Text.BREAK,1,3); } _table.add(Text.BREAK,1,3); _table.add(getText(_iwrb.getLocalizedString("travel.amount_lg","AMOUNT")),1,3); _table.add(getText(" : "),1,3); // _table.add(getText(df.format(Booker.getBookingPrice(iwc, _booking))),1,2); _table.add(getText(df.format(getBooker(_iwc).getBookingPrice(_bookings))),1,3); _table.add(getText(" "),1,3); if (currency != null) { _table.add(getText(currency.getCurrencyAbbreviation()),1,3); } _table.add(Text.BREAK,1,3); String ccAuthNumber = _booking.getCreditcardAuthorizationNumber(); String cardType = null; if (ccAuthNumber != null) { CreditCardAuthorizationEntry entry = this.getCreditCardBusiness(_iwc).getAuthorizationEntry(_supplier, ccAuthNumber, new IWTimestamp(_booking.getDateOfBooking())); cardType = entry.getBrandName(); _table.add(getText(_iwrb.getLocalizedString("travel.amount_paid_lg","AMOUNT PAID")),1,3); _table.add(getText(" : "),1,3); double fAmount = entry.getAmount() / CreditCardAuthorizationEntry.amountMultiplier; _table.add(getText(df.format(fAmount)+" "+entry.getCurrency()), 1, 3); _table.add(Text.BREAK,1,3); } _table.add(getText(_iwrb.getLocalizedString("travel.payment_type_lg","PAYMENT TYPE")),1,3); _table.add(getText(" : "),1,3); if (cardType == null) { _table.add(getText(getBooker(_iwc).getPaymentType(_iwrb, _booking.getPaymentTypeId())), 1, 3); }else { _table.add(getText(cardType), 1, 3); } _table.add(Text.BREAK, 1, 3); _table.add(Text.BREAK, 1, 3); _table.add(getText(_iwrb.getLocalizedString("travel.client_comment_lg","CLIENT COMMENT")),1,3); _table.add(getText(" : "+Text.BREAK),1,3); _table.add(getText(_booking.getComment()), 1, 3); _table.add(getText(Text.BREAK), 1, 3); String vComm = _product.getVoucherComment(); if (vComm != null && !vComm.trim().equals("")) { _table.add(Text.BREAK, 1, 3); _table.add(getText(_iwrb.getLocalizedString("travel.supplier_comment_lg","PROVIDER COMMENT")),1,3); _table.add(getText(" : "+Text.BREAK),1,3); _table.add(getText(vComm), 1, 3); _table.add(getText(Text.BREAK), 1, 3); } // SECTION FIVE BEGINS if (sectFive != null) { size = sectFive.size(); for (int i = 0 ; i < size ; i++) { strng = (String) sectFive.get(i); _table.add(strng, 1, 3); _table.add(Text.BREAK,1,3); } } // SECTION FIVE ENDS _table.add(Text.BREAK,1,3); }catch (FinderException fe) { error = true; fe.printStackTrace(System.err); }catch (SQLException sql) { error = true; sql.printStackTrace(System.err); }catch (Exception e) { error = true; e.printStackTrace(System.err); } if (error) { _table.add(getText(_iwrb.getLocalizedString("travel.voucher_error","Voucher could not be created, please write down your reference number")),1,3); _table.add(Text.BREAK,1,3); _table.add(getSmallText(_iwrb.getLocalizedString("travel.reference_number_show","Reference nr. ")),1,3); _table.add(getSmallText(_booking.getReferenceNumber()),1,3); } } return bigTable; } protected void addPickupPlaces(Table _table, List bookinga, IWContext iwc) throws RemoteException { PickupPlace place = _booking.getPickupPlace(); if (place != null) { _table.add(getText(_iwrb.getLocalizedString("travel.pickup","Pickup")), 1,3); _table.add(getText(" : "),1,3); _table.add(getText(place.getAddress().getStreetAddress()),1,3); _table.add(Text.BREAK,1,3); } } protected void addBookingDates(Table table, List bookings, IWContext iwc) throws RemoteException { if (bookings.size() > 0) { IWTimestamp fromStamp = new IWTimestamp(((Booking)bookings.get(0)).getBookingDate()); if (bookings.size() < 2) { table.add(getText(fromStamp.getLocaleDate(iwc)),1,3); }else { IWTimestamp toStamp = new IWTimestamp(((Booking)bookings.get(bookings.size()-1)).getBookingDate()); table.add(getText(fromStamp.getLocaleDate(iwc)+" - "+toStamp.getLocaleDate(iwc)),1,3); } } } protected void addToSectionOne(String lineToAdd) { if (sectOne == null) { sectOne = new Vector(); } sectOne.add(lineToAdd); } protected void addToSectionTwo(String lineToAdd) { if (sectTwo == null) { sectTwo = new Vector(); } sectTwo.add(lineToAdd); } protected void addToSectionThree(String lineToAdd) { if (sectThree == null) { sectThree = new Vector(); } sectThree.add(lineToAdd); } protected void addToSectionFour(String lineToAdd) { if (sectFour == null) { sectFour = new Vector(); } sectFour.add(lineToAdd); } protected void addToSectionFive(String lineToAdd) { if (sectFive == null) { sectFive = new Vector(); } sectFive.add(lineToAdd); } protected void addToClientInfo(String lineToAdd) { if (clientInfo == null) { clientInfo = new Vector(); } clientInfo.add(lineToAdd); } protected abstract void setupVoucher(IWContext iwc)throws RemoteException; }