package is.idega.idegaweb.travel.business;
import is.idega.idegaweb.travel.data.Contract;
import is.idega.idegaweb.travel.data.ContractHome;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.List;
import javax.ejb.FinderException;
import com.idega.block.trade.stockroom.business.ProductBusiness;
import com.idega.block.trade.stockroom.data.Product;
import com.idega.block.trade.stockroom.data.ProductBMPBean;
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.business.IBOLookup;
import com.idega.business.IBOServiceBean;
import com.idega.data.EntityFinder;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.SimpleQuerier;
import com.idega.presentation.IWContext;
import com.idega.presentation.ui.DropdownMenu;
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 ContractBusinessBean extends IBOServiceBean implements ContractBusiness{
public ContractBusinessBean() {
}
public Supplier[] getSuppliersWithContracts(int resellerId) {
return getSuppliersWithContracts(resellerId, null);
}
public Supplier[] getSuppliersWithContracts(int resellerId, String orderBy) {
Supplier[] suppliers = {};
try {
//Collection contracts = getContractHome().
Supplier supplier = (Supplier) com.idega.block.trade.stockroom.data.SupplierBMPBean.getStaticInstanceIDO(Supplier.class);
Contract contract = (Contract) is.idega.idegaweb.travel.data.ContractBMPBean.getStaticInstanceIDO(Contract.class);
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT distinct s.* FROM "+com.idega.block.trade.stockroom.data.SupplierBMPBean.getSupplierTableName()+" s, "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName() +" c, "+ProductBMPBean.getProductEntityName()+" p");
// StringBuffer buffer = new StringBuffer();
// buffer.append("SELECT s.* FROM "+com.idega.block.trade.stockroom.data.SupplierBMPBean.getSupplierTableName()+" s, "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName() +" c, "+ProductBMPBean.getProductEntityName()+" p");
buffer.append(" WHERE ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameResellerId()+" = "+resellerId);
buffer.append(" AND ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId()+" = p."+ProductBMPBean.getIdColumnName());
buffer.append(" AND ");
buffer.append("p."+com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameSupplierId()+" = s."+com.idega.block.trade.stockroom.data.SupplierBMPBean.getSupplierTableName()+"_ID");
if (orderBy != null && !orderBy.equals("")) {
buffer.append(" ORDER BY s."+orderBy);
}
suppliers = (Supplier[]) supplier.findAll(buffer.toString());
}catch (SQLException sql) {
sql.printStackTrace(System.err);
}
return suppliers;
}
public Product[] getProductsWithContracts(int resellerId, int supplierId, String orderBy) {
return getProductsWithContracts(-1, resellerId ,supplierId, orderBy);
}
private Product[] getProductsWithContracts(int ownerResellerId, int contractedResellerId, int supplierId, String orderBy) {
Product[] products = {};
try {
Contract contract = (Contract) is.idega.idegaweb.travel.data.ContractBMPBean.getStaticInstanceIDO(Contract.class);
Reseller reseller = (Reseller) com.idega.block.trade.stockroom.data.ResellerBMPBean.getStaticInstanceIDO(Reseller.class);
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT distinct p.* FROM "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName() +" c");
// buffer.append("SELECT p.* FROM "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName() +" c");
buffer.append(", "+ProductBMPBean.getProductEntityName()+" p");
if (ownerResellerId != -1) {
buffer.append(", "+reseller.getTreeRelationshipTableName(reseller)+" r");
}
buffer.append(" WHERE ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameResellerId()+" = "+contractedResellerId);
buffer.append(" AND ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId()+" = p."+ProductBMPBean.getIdColumnName());
if (supplierId != -1) {
buffer.append(" AND ");
buffer.append("p."+com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameSupplierId()+" = "+supplierId);
}else if (ownerResellerId != -1) {
buffer.append(" AND ");
buffer.append("r."+reseller.getTreeRelationshipChildColumnName(reseller)+"="+contractedResellerId);
buffer.append(" AND ");
buffer.append("r."+reseller.getIDColumnName()+"="+ownerResellerId);
}
if (orderBy != null && !orderBy.equals("")) {
// buffer.append(" ORDER BY p."+orderBy);
}
List prods = EntityFinder.getInstance().findAll(Product.class, buffer.toString());
products = (Product[]) prods.toArray(new Product[] {});
}catch (FinderException sql) {
sql.printStackTrace(System.err);
}
return products;
}
public boolean isActiveContract(int supplierId, int resellerId, int productId) {
boolean returner = false;
try {
Contract contract = (Contract) is.idega.idegaweb.travel.data.ContractBMPBean.getStaticInstanceIDO(Contract.class);
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT distinct c.* FROM "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName() +" c");
if (supplierId != -1) {
buffer.append(", "+ProductBMPBean.getProductEntityName()+" p");
}
buffer.append(" WHERE ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameResellerId()+" = "+resellerId);
buffer.append(" AND ");
buffer.append("c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId()+" = "+productId);
if (supplierId != -1) {
buffer.append(" AND ");
buffer.append("p."+ProductBMPBean.getIdColumnName()+" = c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId());
buffer.append(" AND ");
buffer.append("p."+com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameSupplierId()+" = "+supplierId);
}
String[] resuls = SimpleQuerier.executeStringQuery(buffer.toString());
if (resuls != null && resuls.length > 0) {
returner = true;
}
//products = (Product[]) product.findAll(buffer.toString());
}catch (Exception sql) {
sql.printStackTrace(System.err);
}
return returner;
}
public Product[] getProductsWithContracts(int resellerId, int supplierId) {
return getProductsWithContracts(resellerId, supplierId, null);
}
public boolean isActiveContract(int resellerId, int productId) {
return isActiveContract(-1, resellerId, productId);
}
public Product[] getProductsWithContracts(Reseller reseller, String orderBy) {
Reseller parent = (Reseller) reseller.getParent();
if (parent == null) {
return getProductsWithContracts(-1, reseller.getID(),-1, orderBy);
}else {
return getProductsWithContracts(parent, orderBy);
}
}
public Product[] getProductsWithContracts(Reseller reseller) {
return getProductsWithContracts(reseller, null);
}
public Reseller[] getResellers(int serviceId, IWTimestamp stamp) {
Reseller[] returner = {};
try {
Reseller reseller = (Reseller) com.idega.block.trade.stockroom.data.ResellerBMPBean.getStaticInstanceIDO(Reseller.class);
String[] many = {};
StringBuffer sql = new StringBuffer();
sql.append("Select r.* from "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName()+" c, "+com.idega.block.trade.stockroom.data.ResellerBMPBean.getResellerTableName()+" r");
sql.append(" where ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId()+"="+serviceId);
sql.append(" and ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameFrom()+" <= '"+stamp.toSQLDateString()+"'");
sql.append(" and ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameTo()+" >= '"+stamp.toSQLDateString()+"'");
sql.append(" and ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameResellerId()+" = r."+reseller.getIDColumnName());
returner = (Reseller[]) reseller.findAll(sql.toString());
}catch (Exception e) {
e.printStackTrace(System.err);
}
return returner;
}
public Product[] getProductsForReseller(IWContext iwc, int resellerId) throws SQLException {
Product[] products = {};
/**
* @todo Cache...
*/
try {
Reseller reseller = (Reseller) (com.idega.block.trade.stockroom.data.ResellerBMPBean.getStaticInstanceIDO(Reseller.class));
StringBuffer sql = new StringBuffer();
sql.append("SELECT p.* FROM "+com.idega.block.trade.stockroom.data.ResellerBMPBean.getResellerTableName()+" r, "+com.idega.block.trade.stockroom.data.ProductBMPBean.getProductEntityName()+" p, "+is.idega.idegaweb.travel.data.ContractBMPBean.getContractTableName()+" c");
sql.append(" WHERE ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameResellerId()+" = r."+reseller.getIDColumnName());
sql.append(" AND ");
sql.append(" c."+is.idega.idegaweb.travel.data.ContractBMPBean.getColumnNameServiceId()+" = p."+ProductBMPBean.getIdColumnName());
sql.append(" AND ");
sql.append(" r."+reseller.getIDColumnName() +" = "+resellerId);
sql.append(" AND ");
sql.append(" p."+com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameIsValid()+" = 'Y'");
// sql.append(" ORDER BY p."+com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameProductName());
List prods = EntityFinder.getInstance().findAll(Product.class, sql.toString());
products = (Product[]) prods.toArray(new Product[] {});
// products = (Product[]) product.findAll(sql.toString());
}catch (FinderException sql) {
sql.printStackTrace(System.err);
}
return products;
//(Product[]) com.idega.block.trade.stockroom.data.ProductBMPBean.getStaticInstance(Product.class).findAllByColumnOrdered(Service.getIsValidColumnName(),"Y",com.idega.block.trade.stockroom.data.SupplierBMPBean.getStaticInstance(Supplier.class).getIDColumnName() , Integer.toString(supplierId), com.idega.block.trade.stockroom.data.ProductBMPBean.getColumnNameProductName());
}
public DropdownMenu getDropdownMenuWithProducts(IWContext iwc, int resellerId) throws RemoteException{
try {
Product[] list = getProductsForReseller(iwc, resellerId);
DropdownMenu menu = new DropdownMenu(ProductBMPBean.getProductEntityName());
Product product;
if (list != null && list.length > 0) {
for (int i = 0; i < list.length; i++) {
menu.addMenuElement(list[i].getID(), getProductBusiness().getProductNameWithNumber(list[i]));
}
}
return menu;
}catch (SQLException sql) {
sql.printStackTrace(System.err);
return new DropdownMenu(com.idega.block.trade.stockroom.data.ProductBMPBean.getProductEntityName());
}
}
public Contract getContract(Reseller reseller, Product product) throws RemoteException{
if ((reseller != null) && (product != null)){
try {
return getContractHome().findByProductAndReseller((new Integer(product.getPrimaryKey().toString())).intValue(), (new Integer(reseller.getPrimaryKey().toString())).intValue());
} catch (FinderException e) {
//e.printStackTrace();
}
}
return null;
}
private ProductBusiness getProductBusiness() throws RemoteException {
return (ProductBusiness) IBOLookup.getServiceInstance(getIWApplicationContext(), ProductBusiness.class);
}
public ContractHome getContractHome() throws IDOLookupException {
return (ContractHome) IDOLookup.getHome(Contract.class);
}
public SupplierHome getSupplierHome() throws IDOLookupException {
return (SupplierHome) IDOLookup.getHome(Supplier.class);
}
}