package is.idega.idegaweb.travel.presentation; import is.idega.idegaweb.travel.business.BookingComparator; import is.idega.idegaweb.travel.data.GeneralBooking; import is.idega.idegaweb.travel.interfaces.Booking; import java.rmi.RemoteException; import java.sql.SQLException; import java.util.List; import javax.ejb.FinderException; import com.idega.block.trade.stockroom.data.Product; import com.idega.core.user.data.User; 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.Link; import com.idega.presentation.text.Text; import com.idega.util.IWTimestamp; import com.idega.util.text.TextSoap; /** * 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 UserBookingReporter extends TravelManager implements Report{ private static final String PARAMETER_ORDER_BY = "ubr_par_order_by"; private static final String PARAMETER_USER_ID = "ubr_par_user_id"; private static final String PARAMETER_OWNER_ID = "ubr_par_owner_id"; private IWBundle bundle; private IWResourceBundle iwrb; private int orderBy = BookingComparator.USER; private int userId = -1; private int ownerId = -1; private IWTimestamp _fromStamp; private IWTimestamp _toStamp; public UserBookingReporter(IWContext iwc) throws Exception { initialize(iwc); } public String getReportName() { return iwrb.getLocalizedString("travel.report_name.user_bookings","User bookings"); } public String getReportDescription() { return iwrb.getLocalizedString("travel.report_description.user_bookings","Displays owner and user of bookins."); } public boolean useTwoDates() { return true; } private void initialize(IWContext iwc) throws Exception{ super.main(iwc); bundle = super.getBundle(); iwrb = super.getResourceBundle(); String sOrderBy = iwc.getParameter(PARAMETER_ORDER_BY); if (sOrderBy != null) { orderBy = Integer.parseInt(sOrderBy); } String sUserId = iwc.getParameter(PARAMETER_USER_ID); if (sUserId != null) { userId = Integer.parseInt(sUserId); } String sOwnerId = iwc.getParameter(PARAMETER_OWNER_ID); if (sOwnerId != null) { ownerId = Integer.parseInt(sOwnerId); } } public PresentationObject getReport(IWContext iwc, List products, IWTimestamp stamp) throws RemoteException, FinderException{ return getReport(iwc, products, stamp, new IWTimestamp(stamp)); } public PresentationObject getReport(IWContext iwc, List products, IWTimestamp fromStamp, IWTimestamp toStamp) throws RemoteException, FinderException{ //initialize(iwc); if (userId != -1) { return getUserReport(iwc, products, fromStamp, toStamp); }else if (ownerId != -1) { return getOwnerReport(iwc, products, fromStamp, toStamp); }else { return getDefaultReport(iwc, products, fromStamp, toStamp); } } private Table getUserReport(IWContext iwc, List products, IWTimestamp fromStamp, IWTimestamp toStamp) throws RemoteException, FinderException{ Table table = getTable(); table.setWidth("100%"); int row = 1; try { Product prod; User user = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(userId); User owner; Link ownerLink; this._fromStamp = fromStamp; this._toStamp = toStamp; float price; float totalPrice = 0; int count; int totalCount = 0; Booking[] bookings = getBooker(iwc).getBookings(products, fromStamp, toStamp, is.idega.idegaweb.travel.data.GeneralBookingBMPBean.getUserIdColumnName(), Integer.toString(userId)); BookingComparator bComp = new BookingComparator(iwc, orderBy); bookings = bComp.sortedArray(bookings); table.add(getHeader(user.getName()), 1, row); table.add(getHeader(Text.NON_BREAKING_SPACE+"("+iwrb.getLocalizedString("travel.user","User")+")"), 1, row); table.mergeCells(1, row, 5, row); table.setRowColor(row, super.backgroundColor); Link dateLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.date","Date"))); dateLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.DATE); Link countLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.count","Count"))); countLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.TOTALCOUNT); Link userHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.user","User"))); userHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.USER); Link ownerHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.owner","Owner"))); ownerHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.OWNER); Link amountLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.amount","Amount"))); amountLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.AMOUNT); addParameters(dateLink); addParameters(countLink); addParameters(userHLink); addParameters(ownerHLink); addParameters(amountLink); ++row; table.add(dateLink, 1, row); table.add(getHeader(iwrb.getLocalizedString("travel.product","Product")), 2, row); table.add(countLink, 3, row); table.add(ownerHLink, 4, row); table.add(amountLink, 5, row); table.setRowColor(row, super.backgroundColor); for (int i = 0; i < bookings.length; i++) { ++row; owner = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(bookings[i].getOwnerId()); prod = getProductBusiness(iwc).getProduct(bookings[i].getServiceID()); price = getBooker(iwc).getBookingPrice(bookings[i]); count = bookings[i].getTotalCount(); totalPrice += price; totalCount += count; ownerLink = Reports.getReportLink(getText(owner.getName())); ownerLink.addParameter(PARAMETER_OWNER_ID, owner.getID()); table.add(getText(new IWTimestamp(bookings[i].getBookingDate()).getLocaleDate(getLocale())), 1, row); table.add(getText(prod.getProductName(getLocaleId())), 2, row); table.add(getText(Integer.toString(count)), 3, row); table.add(ownerLink, 4, row); table.add(getText(TextSoap.decimalFormat(price, 0)), 5, row); table.setRowColor(row, super.GRAY); } ++row; Text totalPriceText = getText(TextSoap.decimalFormat(totalPrice, 0)); totalPriceText.setBold(true); table.add(totalPriceText, 5, row); Text totalCountText = getText(Integer.toString(totalCount)); totalCountText.setBold(true); table.add(totalCountText, 3, row); table.setRowColor(row, super.GRAY); }catch (SQLException sql) { sql.printStackTrace(System.err); } table.setColumnAlignment(3, Table.HORIZONTAL_ALIGN_CENTER); table.setColumnAlignment(5, Table.HORIZONTAL_ALIGN_RIGHT); return table; } private Table getOwnerReport(IWContext iwc, List products, IWTimestamp fromStamp, IWTimestamp toStamp) throws RemoteException, FinderException{ Table table = getTable(); table.setWidth("100%"); int row = 1; try { Product prod; User user; User owner = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(ownerId); Link userLink; float price; float totalPrice = 0; int count; int totalCount = 0; Booking[] bookings = getBooker(iwc).getBookings(products, fromStamp, toStamp, is.idega.idegaweb.travel.data.GeneralBookingBMPBean.getOwnerIdColumnName(), Integer.toString(ownerId)); BookingComparator bComp = new BookingComparator(iwc, orderBy); bookings = bComp.sortedArray(bookings); table.add(getHeader(owner.getName()), 1, row); table.add(getHeader(Text.NON_BREAKING_SPACE+"("+iwrb.getLocalizedString("travel.owner","Owner")+")"), 1, row); table.mergeCells(1, row, 5, row); table.setRowColor(row, super.backgroundColor); Link dateLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.date","Date"))); dateLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.DATE); Link countLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.count","Count"))); countLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.TOTALCOUNT); Link userHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.user","User"))); userHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.USER); Link ownerHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.owner","Owner"))); ownerHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.OWNER); Link amountLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.amount","Amount"))); amountLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.AMOUNT); addParameters(dateLink); addParameters(countLink); addParameters(userHLink); addParameters(ownerHLink); addParameters(amountLink); ++row; table.add(dateLink, 1, row); table.add(getHeader(iwrb.getLocalizedString("travel.product","Product")), 2, row); table.add(countLink, 3, row); table.add(userHLink, 4, row); table.add(amountLink, 5, row); table.setRowColor(row, super.backgroundColor); for (int i = 0; i < bookings.length; i++) { ++row; user = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(bookings[i].getUserId()); prod = getProductBusiness(iwc).getProduct(bookings[i].getServiceID()); price = getBooker(iwc).getBookingPrice(bookings[i]); count = bookings[i].getTotalCount(); totalPrice += price; totalCount += count; userLink = Reports.getReportLink(getText(user.getName())); userLink.addParameter(PARAMETER_USER_ID, user.getID()); table.add(getText(new IWTimestamp(bookings[i].getBookingDate()).getLocaleDate(getLocale())), 1, row); table.add(getText(prod.getProductName(getLocaleId())), 2, row); table.add(getText(Integer.toString(count)), 3, row); table.add(userLink, 4, row); table.add(getText(TextSoap.decimalFormat(price, 0)), 5, row); table.setRowColor(row, super.GRAY); } ++row; Text totalPriceText = getText(TextSoap.decimalFormat(totalPrice, 0)); totalPriceText.setBold(true); table.add(totalPriceText, 5, row); Text totalCountText = getText(Integer.toString(totalCount)); totalCountText.setBold(true); table.add(totalCountText, 3, row); table.setRowColor(row, super.GRAY); }catch (SQLException sql) { sql.printStackTrace(System.err); } table.setColumnAlignment(3, Table.HORIZONTAL_ALIGN_CENTER); table.setColumnAlignment(5, Table.HORIZONTAL_ALIGN_RIGHT); return table; } private Table getDefaultReport(IWContext iwc, List products, IWTimestamp fromStamp, IWTimestamp toStamp) throws RemoteException, FinderException{ Booking[] bookings = getBooker(iwc).getBookings(products, fromStamp, toStamp); BookingComparator bComp = new BookingComparator(iwc, orderBy); bookings = bComp.sortedArray(bookings); Table table = getTable(); table.setWidth("100%"); int row = 1; Product prod; User user; User owner; Link userLink; Link ownerLink; Link dateLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.date","Date"))); dateLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.DATE); // Link nameLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.product","Product"))); // nameLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.NAME); Link countLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.count","Count"))); countLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.TOTALCOUNT); Link userHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.user","User"))); userHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.USER); Link ownerHLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.owner","Owner"))); ownerHLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.OWNER); Link amountLink = Reports.getReportLink(getHeader(iwrb.getLocalizedString("travel.amount","Amount"))); amountLink.addParameter(PARAMETER_ORDER_BY, BookingComparator.AMOUNT); table.add(dateLink, 1, row); table.add(getHeader(iwrb.getLocalizedString("travel.product","Product")), 2, row); table.add(countLink, 3, row); table.add(userHLink, 4, row); table.add(ownerHLink, 5, row); table.add(amountLink, 6, row); table.setRowColor(row, super.backgroundColor); for (int i = 0; i < bookings.length; i++) { user = null; owner = null; try { ++row; if (bookings[i].getUserId() != -1) { user = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(bookings[i].getUserId()); userLink = Reports.getReportLink(getText(user.getName())); userLink.addParameter(PARAMETER_USER_ID, user.getID()); table.add(userLink, 4, row); }else { if (( (GeneralBooking) bookings[i]).getCreditcardAuthorizationNumber() != null) { table.add(getText(iwrb.getLocalizedString("travel.-online-","-online-")), 4, row); } } if (bookings[i].getOwnerId() != -1) { owner = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).findByPrimaryKeyLegacy(bookings[i].getOwnerId()); ownerLink = Reports.getReportLink(getText(owner.getName())); ownerLink.addParameter(PARAMETER_OWNER_ID, owner.getID()); table.add(ownerLink, 5, row); }else { if (( (GeneralBooking) bookings[i]).getCreditcardAuthorizationNumber() != null) { table.add(getText(iwrb.getLocalizedString("travel.-online-","-online-")), 5, row); } } prod = getProductBusiness(iwc).getProduct(bookings[i].getServiceID()); table.add(getText(new IWTimestamp(bookings[i].getBookingDate()).getLocaleDate(getLocale())), 1, row); table.add(getText(prod.getProductName(getLocaleId())), 2, row); table.add(getText(Integer.toString(bookings[i].getTotalCount())), 3, row); table.add(getText(TextSoap.decimalFormat(getBooker(iwc).getBookingPrice(bookings[i]), 0)), 6, row); table.setRowColor(row, super.GRAY); }catch (SQLException sql) { sql.printStackTrace(); } } table.setColumnAlignment(3, Table.HORIZONTAL_ALIGN_CENTER); table.setColumnAlignment(6, Table.HORIZONTAL_ALIGN_RIGHT); return table; } private void addParameters(Link link) { if (userId != -1) { link.addParameter(PARAMETER_USER_ID, userId); } if (ownerId != -1) { link.addParameter(PARAMETER_OWNER_ID, ownerId); } /* if (_fromStamp != null) { link.addParameter(Reports.PARAMATER_DATE_FROM, _fromStamp.toSQLDateString()); } if (_toStamp != null) { link.addParameter(Reports.PARAMATER_DATE_TO, _toStamp.toSQLDateString()); } for (int i = 0; i < names.size(); i++) { link.addParameter((String) names.get(i), (String) values.get(i)); }*/ } protected Text getHeader(String content) { Text text = (Text) super.theBoldText.clone(); text.setText(content); return text; } public static Table getTable() { Table table = TravelManager.getTable(); table.setCellpadding(2); table.setWidth("90%"); return table; } }