package is.idega.idegaweb.campus.block.allocation.presentation;
import is.idega.idegaweb.campus.block.allocation.data.Contract;
import is.idega.idegaweb.campus.block.allocation.data.ContractTariff;
import is.idega.idegaweb.campus.block.allocation.data.ContractTariffName;
import is.idega.idegaweb.campus.presentation.CampusWindow;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.block.building.business.BuildingCacher;
import com.idega.block.finance.business.FinanceService;
import com.idega.block.finance.data.AccountKey;
import com.idega.block.finance.data.Tariff;
import com.idega.block.finance.data.TariffHome;
import com.idega.block.finance.data.TariffIndex;
import com.idega.business.IBOLookup;
import com.idega.data.IDOLookup;
import com.idega.idegaweb.IWApplicationContext;
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.ui.CheckBox;
import com.idega.presentation.ui.DataTable;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.FloatInput;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
import com.idega.util.IWTimestamp;
public class ContractTariffWindow extends CampusWindow {
private static final String PARAM_COUNT = "te_count";
private static final String PARAM_EDIT_ID = "edit_id";
private static final String PARAM_DELETE = "del";
private static final String PARAM_INDEX = "index";
private static final String PARAM_ACCOUNT_KEY = "account_key";
private static final String PARAM_AMOUNT = "amount";
private static final String PARAM_NAME = "name";
private static final String PARAM_ID_INPUT = "idinput";
private static final String PARAMETER_SAVE = "save";
private static final String PARAMETER_SAVE_TO_NAME = "save_to_name";
private static final String PARAMETER_CONTRACT_TARIFF_NAME = "con_tar_name";
public final static String prmContractId = "cam_contract_id";
private Contract contract = null;
private Integer contractId = new Integer(-1);
public ContractTariffWindow() {
setWidth(800);
setHeight(500);
setResizable(true);
}
protected void control(IWContext iwc) {
init(iwc);
if (iwc.isParameterSet(PARAMETER_SAVE)) {
if (doSaveContractTariff(iwc, null)) {
add(getHeader(localize("tariff_saved", "Tariff saved")));
} else {
add(getHeader(localize("tariff_not_saved", "Tariff not saved")));
}
} else if (iwc.isParameterSet(PARAMETER_SAVE_TO_NAME)) {
if (iwc.isParameterSet(PARAMETER_CONTRACT_TARIFF_NAME)) {
String contractTariffName = iwc
.getParameter(PARAMETER_CONTRACT_TARIFF_NAME);
if (doSaveContractTariff(iwc, contractTariffName)) {
add(getHeader(localize("tariff_saved", "Tariff saved")));
} else {
add(getHeader(localize("tariff_not_saved",
"Tariff not saved")));
}
}
}
add(getEditTable(iwc));
}
private void init(IWContext iwc) {
contractId = Integer.valueOf(iwc.getParameter(prmContractId));
try {
contract = getContractService(iwc).getContractHome()
.findByPrimaryKey(contractId);
} catch (RemoteException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
public PresentationObject makeLinkTable(int menuNr) {
Table LinkTable = new Table(6, 1);
return LinkTable;
}
private DropdownMenu getAccountKeyDropdown(Collection accoutKeys,
String name, String selected) {
DropdownMenu drp = new DropdownMenu(name);
drp.addMenuElement(0, "--");
if (accoutKeys != null) {
for (Iterator iter = accoutKeys.iterator(); iter.hasNext();) {
AccountKey key = (AccountKey) iter.next();
drp.addMenuElement(key.getPrimaryKey().toString(),
key.getName() + " (" + key.getInfo() + ")");
}
drp.setSelectedElement(selected);
}
return drp;
}
private DropdownMenu getIndexDropdown(Collection indeces, String name,
String selected) {
DropdownMenu drp = new DropdownMenu(name);
drp.addMenuElementFirst("-1", "--"); // localize("index","Index"));
if (indeces != null) {
for (Iterator iter = indeces.iterator(); iter.hasNext();) {
TariffIndex ti = (TariffIndex) iter.next();
drp.addMenuElement(ti.getType(), ti.getName());
}
drp.setSelectedElement(selected);
}
return drp;
}
public FinanceService getFinanceService(IWApplicationContext iwac)
throws RemoteException {
return (FinanceService) IBOLookup.getServiceInstance(iwac,
FinanceService.class);
}
private PresentationObject getEditTable(IWContext iwc) {
int iEditID = -1;
String sEditID = iwc.getParameter(PARAM_EDIT_ID);
if (sEditID != null) {
iEditID = Integer.parseInt(sEditID);
}
DataTable T = new DataTable();
T.setWidth("100%");
T.setTitlesHorizontal(true);
SubmitButton save = new SubmitButton(PARAMETER_SAVE, localize("save",
"Save"));
SubmitButton saveToName = new SubmitButton(PARAMETER_SAVE_TO_NAME,
localize("save_to_name", "Save as named"));
int row = 1;
int col = 1;
T.add(getHeader("Nr"), col++, row);
T.add(getHeader(localize("name", "Name")), col++, row);
T.add(getHeader(localize("amount", "Amount")), col++, row);
T.add(getHeader(localize("account_key", "Account key")), col++, row);
T.add(getHeader(localize("index", "Index")), col++, row);
T.add(getHeader(localize("updated", "Updated")), col++, row);
T.add(getHeader(localize("delete", "Delete")), col++, row);
T.add(getHeader(localize("contractTariffName", "Contract tariff name")), col++, row);
row++;
ContractTariffName ctn = null;
Collection contractTariffEntries = getContractTariffEntries(iwc);
if (contractTariffEntries == null || contractTariffEntries.isEmpty()) {
contractTariffEntries = createContractTariffEntries(iwc);
}
int count = 0;
if (contractTariffEntries != null && !contractTariffEntries.isEmpty()) {
Map mapOfIndices = null;
Collection accountKeys = null;
try {
accountKeys = getFinanceService(iwc).getAccountKeyHome()
.findByCategory(new Integer(36));
mapOfIndices = getFinanceService(iwc)
.mapOfTariffIndicesByTypes();
} catch (Exception e) {
e.printStackTrace();
}
count = contractTariffEntries.size() + 5;
Iterator it = contractTariffEntries.iterator();
int i = 0;
while (it.hasNext()) {
col = 1;
ContractTariff t = (ContractTariff) it.next();
HiddenInput idInput = new HiddenInput(PARAM_ID_INPUT + i, t
.getPrimaryKey().toString());
if (((Integer) t.getPrimaryKey()).intValue() == iEditID) {
T.add(getText(Integer.toString(row - 1)), col++, row);
TextInput nameInput = new TextInput(PARAM_NAME + i);
nameInput.setValue(t.getName());
T.add(nameInput, col++, row);
FloatInput amountInput = new FloatInput(PARAM_AMOUNT + i);
amountInput.setValue(t.getPrice());
T.add(amountInput, col++, row);
DropdownMenu accDrop = getAccountKeyDropdown(accountKeys,
PARAM_ACCOUNT_KEY + i, t.getAccountKey()
.getPrimaryKey().toString());
T.add(accDrop, col++, row);
String selIndex = "-1";
if (t.getIndexType() != null) {
selIndex = t.getIndexType();
}
DropdownMenu indexDrop = getIndexDropdown(
mapOfIndices.values(), PARAM_INDEX + i, selIndex);
T.add(indexDrop, col++, row);
if (t.getIndexUpdated() != null) {
T.add(getText(t.getIndexUpdated().toString()), col++,
row);
} else {
T.add(getText(""), col++, row);
}
T.add(new CheckBox(PARAM_DELETE + i), col++, row);
if (t.getContractTariffName() != null) {
T.add(getText(t.getContractTariffName().getName()), col++, row++);
ctn = t.getContractTariffName();
} else {
T.add(getText(""), col++, row++);
}
} else {
T.add(getText(Integer.toString(row - 1)), col++, row);
Link lineChangeLink = new Link(getText(t.getName()));
lineChangeLink.addParameter(PARAM_EDIT_ID,
((Integer) t.getPrimaryKey()).intValue());
lineChangeLink.addParameter(prmContractId, contract
.getPrimaryKey().toString());
T.add(lineChangeLink, col++, row);
T.add(getText(Float.toString(t.getPrice())), col++, row);
T.add(getText(t.getAccountKey().getName() + " ("
+ t.getAccountKey().getInfo() + ")"), col++, row);
if (t.getIndexType() != null) {
if (mapOfIndices != null
&& mapOfIndices.containsKey(t.getIndexType())) {
TariffIndex ti = (TariffIndex) mapOfIndices.get(t
.getIndexType());
T.add(getText(ti.getName()), col++, row);
} else {
T.add(getText(t.getIndexType()), col++, row);
}
} else {
T.add(getText(""), col++, row);
}
if (t.getIndexUpdated() != null) {
T.add(getText(t.getIndexUpdated().toString()), col++,
row);
} else {
T.add(getText(""), col++, row);
}
T.add(new CheckBox(PARAM_DELETE + i), col++, row);
if (t.getContractTariffName() != null) {
T.add(getText(t.getContractTariffName().getName()), col++, row++);
ctn = t.getContractTariffName();
} else {
T.add(getText(""), col++, row++);
}
}
T.add(idInput);
i++;
}
// add 5 empty lines
for (; i < count; i++) {
T.add(getText(Integer.toString(row - 1)), 1, row);
T.add(new TextInput(PARAM_NAME + i), 2, row);
T.add(new FloatInput(PARAM_AMOUNT + i), 3, row);
T.add(getAccountKeyDropdown(accountKeys, PARAM_ACCOUNT_KEY + i,
"-1"), 4, row);
T.add(getIndexDropdown(mapOfIndices.values(), PARAM_INDEX + i,
"-1"), 5, row);
T.add(getText(""), 6, row);
T.add(getText(""), 7, row);
T.add(new HiddenInput(PARAM_ID_INPUT + i, "-1"));
T.add(getText(""), 8, row++);
}
if (ctn == null) {
row+=2;
T.add(getText(localize("contractTariffName", "Contract tariff name")), 2, row);
T.add(new TextInput(PARAMETER_CONTRACT_TARIFF_NAME), 3, row);
}
} else {
T.add(getText("Unable to create entries for contract"));
}
T.addButton(save);
if (ctn == null) {
T.addButton(saveToName);
}
Form F = new Form();
F.add(new HiddenInput(prmContractId, contract.getPrimaryKey()
.toString()));
F.add(new HiddenInput(PARAM_COUNT, String.valueOf(count)));
F.add(T);
return F;
}
private Collection getContractTariffEntries(IWContext iwc) {
try {
return getContractService(iwc).getContractTariffHome()
.findByContract(contract);
} catch (Exception e) {
}
return null;
}
private ContractTariff insertContractTariffEntry(IWContext iwc,
Tariff tariff) {
try {
ContractTariff ct = getContractService(iwc).getContractTariffHome()
.create();
ct.setAccountKey(tariff.getAccountKeyId());
ct.setContract(contract);
ct.setIndexType(tariff.getIndexType());
ct.setIndexUpdated(tariff.getIndexUpdated());
ct.setIsDeleted(false);
ct.setName(tariff.getName());
ct.setPrice(tariff.getPrice());
ct.setUseIndex(tariff.getUseIndex());
ct.store();
return ct;
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
return null;
}
private Collection createContractTariffEntries(IWContext iwc) {
Collection ret = new ArrayList();
try {
Collection tariffs = ((TariffHome) IDOLookup.getHome(Tariff.class))
.findByTariffGroup(new Integer(9));
Tariff tariff;
char cAttribute;
int attributeId = -1;
// For each tariff (Inner loop)
for (Iterator iter2 = tariffs.iterator(); iter2.hasNext();) {
tariff = (Tariff) iter2.next();
String sAttribute = tariff.getTariffAttribute();
// If we have an tariff attribute
if (sAttribute != null) {
attributeId = -1;
cAttribute = sAttribute.charAt(0);
// If All
if (cAttribute == BuildingCacher.CHARALL) {
insertContractTariffEntry(iwc, tariff);
}
// other than all
else {
// attribute check
if (sAttribute.length() >= 3) {
attributeId = Integer.parseInt(sAttribute
.substring(2));
switch (cAttribute) {
case BuildingCacher.CHARTYPE:
// Apartment type
if (attributeId == contract.getApartment()
.getApartmentTypeId()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
case BuildingCacher.CHARCATEGORY:
// Apartment category
if (attributeId == ((Integer) contract
.getApartment().getApartmentType()
.getApartmentSubcategory()
.getApartmentCategory().getPrimaryKey())
.intValue()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
case BuildingCacher.CHARBUILDING:
// Building
if (attributeId == contract.getApartment()
.getFloor().getBuildingId()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
case BuildingCacher.CHARFLOOR:
// Floor
if (attributeId == contract.getApartment()
.getFloorId()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
case BuildingCacher.CHARCOMPLEX:
// Complex
if (attributeId == contract.getApartment()
.getFloor().getBuilding()
.getComplexId()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
case BuildingCacher.CHARAPARTMENT:
// Apartment
if (attributeId == contract.getApartmentId()
.intValue()) {
ContractTariff t = insertContractTariffEntry(
iwc, tariff);
if (t != null) {
ret.add(t);
}
}
break;
} // switch
} // attribute check
}
}
}
} catch (Exception e) {
}
return ret;
}
private void deleteTariff(IWContext iwc, Integer id) {
try {
ContractTariff ct = getContractService(iwc).getContractTariffHome()
.findByPrimaryKey(id);
ct.setDeletedBy(iwc.getCurrentUser());
ct.setIsDeleted(true);
ct.store();
} catch (RemoteException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
} catch (EJBException e) {
e.printStackTrace();
}
}
private void updateOrCreateTariff(IWContext iwc, Integer id, String name,
String price, String accKey, String index) {
ContractTariff ct = null;
if (id.intValue() > 0) {
try {
ct = getContractService(iwc).getContractTariffHome()
.findByPrimaryKey(id);
} catch (RemoteException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
}
if (ct == null) {
try {
ct = getContractService(iwc).getContractTariffHome().create();
} catch (RemoteException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
}
if (ct != null) {
ct.setAccountKey(Integer.valueOf(accKey).intValue());
ct.setContract(contract);
if ("-1".equals(index)) {
ct.setIndexType(null);
ct.setUseIndex(false);
} else {
ct.setIndexType(index);
ct.setUseIndex(true);
}
ct.setIndexUpdated(IWTimestamp.getTimestampRightNow());
ct.setIsDeleted(false);
ct.setName(name);
ct.setPrice(Float.parseFloat(price));
//ct.setContractTariffName(ctn);
ct.store();
}
}
private boolean doSaveContractTariff(IWContext iwc,
String contractTariffName) {
int tariffCount = Integer.parseInt(iwc.getParameter(PARAM_COUNT));
String name, delete, price, accKey, index;
Integer id;
boolean bIndex;
ContractTariffName ctn = null;
if (contractTariffName != null && !"".equals(contractTariffName)) {
try {
getContractService(iwc).getContractTariffNameHome().findByContract(contractTariffName);
return false;
} catch (RemoteException e) {
} catch (FinderException e) {
}
try {
ctn = getContractService(iwc).getContractTariffNameHome().create();
ctn.setName(contractTariffName);
ctn.store();
} catch (Exception e) {
return false;
}
}
for (int i = 0; i < tariffCount; i++) {
id = Integer.valueOf(iwc.getParameter(PARAM_ID_INPUT + i));
name = iwc.getParameter(PARAM_NAME + i);
price = (iwc.getParameter(PARAM_AMOUNT + i));
delete = iwc.getParameter(PARAM_DELETE + i);
index = (iwc.getParameter(PARAM_INDEX + i));
if (delete != null && id != null && id.intValue() > 0) {
deleteTariff(iwc, id);
} else if (name != null && !"".equals(name)) {
accKey = (iwc.getParameter(PARAM_ACCOUNT_KEY + i));
updateOrCreateTariff(iwc, id, name, price, accKey, index);
}
}
if (ctn != null) {
Collection tariffs = getContractTariffEntries(iwc);
if (tariffs != null) {
Iterator it = tariffs.iterator();
while (it.hasNext()) {
ContractTariff t = (ContractTariff) it.next();
t.setContractTariffName(ctn);
t.store();
}
}
}
return true;
}
public void main(IWContext iwc) throws Exception {
control(iwc);
}
}