package is.idega.idegaweb.travel.presentation;
import is.idega.idegaweb.travel.business.ServiceNotFoundException;
import is.idega.idegaweb.travel.business.TimeframeNotFoundException;
import is.idega.idegaweb.travel.data.Service;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.block.trade.stockroom.data.Product;
import com.idega.block.trade.stockroom.data.ProductCategory;
import com.idega.block.trade.stockroom.data.ProductCategoryHome;
import com.idega.block.trade.stockroom.data.Reseller;
import com.idega.block.trade.stockroom.data.Supplier;
import com.idega.data.IDOException;
import com.idega.data.IDOFinderException;
import com.idega.data.IDOLookup;
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.HorizontalRule;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.Form;
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 ServiceOverview extends TravelManager {
private IWBundle bundle;
private IWResourceBundle iwrb;
private String actionParameter = "service_overview_action";
private String deleteParameter = "service_to_delete_id";
private String parameterStartNumber = "parameterStartNumber";
private Supplier supplier;
private Reseller reseller;
private int totalPages = 1;
private int currentPage = 1;
private int startNumber = 0;
private int manyPerPage = 5;
private int stopNumber = manyPerPage;
private int productsSize = 0;
private Collection products = new Vector();
public ServiceOverview() {
}
public void add(PresentationObject mo) {
super.add(mo);
}
public void main(IWContext iwc) throws Exception{
super.main(iwc);
init(iwc);
if (super.isLoggedOn(iwc) ) {
String action = iwc.getParameter(actionParameter);
if (action == null) {action = "";}
if (action.equals("")) {
displayForm(iwc);
}else if (action.equals("delete")) {
deleteServices(iwc);
displayForm(iwc);
}
super.addBreak();
}else {
add(super.getLoggedOffTable(iwc));
}
}
private void init(IWContext iwc) throws RemoteException, IDOException, FinderException {
bundle = super.getBundle();
iwrb = super.getResourceBundle();
supplier = super.getSupplier();
reseller = super.getReseller();
if ( supplier != null) {
productsSize = getProductBusiness(iwc).getProductHome().getProductCount(supplier.getID());
String sStartNumber = iwc.getParameter(parameterStartNumber);
if (sStartNumber != null) {
startNumber = Integer.parseInt(sStartNumber);
}
if (productsSize > startNumber + manyPerPage) {
stopNumber = startNumber + manyPerPage;
}else {
stopNumber = productsSize;
}
totalPages = (int) productsSize / manyPerPage;
if ( (productsSize % manyPerPage) > 0) ++totalPages;
if (totalPages == 0) totalPages = 1;
if ((productsSize - startNumber) < manyPerPage) {
currentPage = totalPages;
}else {
for (int i = manyPerPage, j=1; i <= productsSize; i += manyPerPage,j++) {
if (startNumber < i) {
currentPage = j;
break;
}
}
}
products = getProductBusiness(iwc).getProduct(supplier.getID(), startNumber, stopNumber);
// products = getProductBusiness(iwc).getProducts(supplier.getID());
} else if ( super.getReseller() != null ) {
try {
Product[] list = super.getContractBusiness(iwc).getProductsForReseller(iwc, ((Integer) reseller.getPrimaryKey()).intValue());
productsSize = list.length;
String sStartNumber = iwc.getParameter(parameterStartNumber);
if (sStartNumber != null) {
startNumber = Integer.parseInt(sStartNumber);
}
if (productsSize > startNumber + manyPerPage) {
stopNumber = startNumber + manyPerPage;
}else {
stopNumber = productsSize;
}
totalPages = (int) productsSize / manyPerPage;
if ( (productsSize % manyPerPage) > 0) ++totalPages;
if (totalPages == 0) totalPages = 1;
if ((productsSize - startNumber) < manyPerPage) {
currentPage = totalPages;
}else {
for (int i = manyPerPage, j=1; i <= productsSize; i += manyPerPage,j++) {
if (startNumber < i) {
currentPage = j;
break;
}
}
}
if (list != null) {
for (int i = startNumber; i < stopNumber; i++) {
// for (int i = 0; i < list.length; i++) {
products.add((Product) list[i]);
}
}
} catch (SQLException e) {
logWarning("ServiceOverview : no products found for reseller");
}
}
}
public void deleteServices(IWContext iwc) throws RemoteException, FinderException, SQLException{
String[] serviceIds = (String[]) iwc.getParameterValues(deleteParameter);
Service serviceToDelete;
for (int i = 0; i < serviceIds.length; i++) {
serviceToDelete = ((is.idega.idegaweb.travel.data.ServiceHome)com.idega.data.IDOLookup.getHome(Service.class)).findByPrimaryKey(new Integer(serviceIds[i]));
serviceToDelete.delete();
}
}
public void displayForm(IWContext iwc) throws RemoteException, IDOFinderException, SQLException{
add(Text.getBreak());
Form form = new Form();
// Table topTable = this.getTopTable(iwc);
form.add(Text.BREAK);
Table table = new Table();
table.setBorder(0);
form.add(table);
table.setWidth("90%");
String sYear = iwc.getParameter("year");
if (sYear == null) {
sYear = Text.emptyString().toString();
}
// int iStartNumber = 0;
// int manyPerPage = 5;
// int iStopNumber = manyPerPage;
// int pages = 1;
// int currentPage = 1;
int row = 0;
IWTimestamp stamp = IWTimestamp.RightNow();
Link delete;
Link getLink;
Link bookClone = new Link(iwrb.getImage("/buttons/book.gif"),Booking.class);
bookClone.addParameter(super.sAction, super.parameterBooking);
Link editClone = new Link(iwrb.getImage("/buttons/change.gif"),ServiceDesigner.class);
editClone.addParameter(super.sAction, super.parameterServiceDesigner);
Link book;
Link edit;
Table contentTable;
Table pagesTable = getPagesTable(totalPages, currentPage, startNumber, manyPerPage);
Product product;
if (productsSize > 0) {
++row;
table.mergeCells(1,row,5,row);
table.add(pagesTable,1,row);
table.setAlignment(1, row, "center");
}
Collection coll;
ProductCategory pCat;
ProductCategoryHome pCatHome = (ProductCategoryHome) IDOLookup.getHomeLegacy(ProductCategory.class);
Iterator pCatIds;
try {
if(supplier != null) {
coll = this.supplier.getProductCategories();
pCatIds = coll.iterator();
while (pCatIds.hasNext()) {
pCat = (ProductCategory) pCatIds.next();
}
}
}catch (Exception e) {
e.printStackTrace(System.err);
}
is.idega.idegaweb.travel.service.presentation.ServiceOverview so;
Iterator iter = products.iterator();
while (iter.hasNext()) {
// for (int i = startNumber; i < stopNumber; i++) {
try {
// product = (Product) products.get(i);
product = (Product) iter.next();
so = super.getServiceHandler(iwc).getServiceOverview(iwc, product);
contentTable = so.getServiceInfoTable(iwc, product);
// contentTable = getServiceInfoTable(iwc,iwrb,product);
++row;
table.mergeCells(1,row,5,row);
table.add(contentTable,1,row);
++row;
table.mergeCells(1,row,5,row);
table.setAlignment(1,row,"right");
getLink = new Link(iwrb.getImage("buttons/link.gif"));
getLink.setWindowToOpen(LinkGenerator.class);
getLink.addParameter(LinkGenerator.parameterProductId ,product.getID());
delete = new Link(iwrb.getImage("buttons/delete.gif"));
delete.addParameter(actionParameter,"delete");
delete.addParameter(deleteParameter,product.getID());
book = LinkGenerator.getLink(iwc, product.getID(), Booking.class);
book.setImage(iwrb.getImage("buttons/book.gif"));
edit = (Link) editClone.clone();
edit.addParameter(ServiceDesigner.parameterUpdateServiceId, product.getID());
if (super.isInPermissionGroup && supplier != null) {
table.add(edit,1,row);
table.add(" ",1,row);
}
table.add(book,1,row);
table.add(" ",1,row);
if (this.supplier != null) {
table.add(getLink,1,row);
table.add(" ",1,row);
}
if (super.isInPermissionGroup && supplier != null) {
table.add(delete,1,row);
}
table.setColor(1,row,super.backgroundColor);
++row;
table.mergeCells(1,row,5,row);
table.setColor(1,row,super.backgroundColor);
HorizontalRule hr = new HorizontalRule("100%",1);
hr.setAlignment(hr.ALIGN_CENTER);
hr.setNoShade(true);
hr.setColor(super.textColor);
++row;
table.mergeCells(1,row,5,row);
}catch (ServiceNotFoundException snf) {
snf.printStackTrace(System.err);
}catch (TimeframeNotFoundException tnf) {
tnf.printStackTrace(System.err);
}catch (FinderException fe) {
fe.printStackTrace(System.err);
}
}
if (productsSize < 1) ++row;
table.add(pagesTable,1, row);
table.setAlignment(1,row,"center");
add(form);
}
private Table getPagesTable(int pages, int currentPage, int iStartNumber, int manyPerPage) {
Table pagesTable = new Table(pages+2, 1);
pagesTable.setCellpadding(2);
pagesTable.setCellspacing(2);
Text pageText;
if (currentPage > 1) {
pageText = getWhiteText(iwrb.getLocalizedString("travel.previous","Previous"));
Link prevLink = new Link(pageText);
prevLink.addParameter(this.parameterStartNumber, iStartNumber - manyPerPage);
pagesTable.add(prevLink, 1, 1);
}
Link pageLink;
for (int i = 1; i <= pages; i++) {
if (i == currentPage) {
pageText = getWhiteTextBold(Integer.toString(i));
}else {
pageText = getWhiteText(Integer.toString(i));
}
pageLink = new Link(pageText);
pageLink.addParameter(this.parameterStartNumber, (i-1) * manyPerPage);
pagesTable.add(pageLink, i+1, 1);
}
if (currentPage < pages) {
pageText = getWhiteText(iwrb.getLocalizedString("travel.next","Next"));
Link nextLink = new Link(pageText);
nextLink.addParameter(this.parameterStartNumber, iStartNumber + manyPerPage);
pagesTable.add(nextLink, pages + 2, 1);
}
return pagesTable;
}
public Text getWhiteTextBold(String content) {
Text text = (Text) super.theBoldText.clone();
text.setText(content);
return text;
}
public Text getWhiteText(String content) {
Text text = (Text) super.theText.clone();
text.setText(content);
return text;
}
}