package com.idega.block.finance.presentation; import java.rmi.RemoteException; import java.text.DateFormat; import java.util.Collection; import java.util.Date; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import javax.ejb.CreateException; import javax.ejb.FinderException; import com.idega.block.finance.business.FinanceService; import com.idega.block.finance.data.Account; import com.idega.core.user.data.User; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.PresentationObject; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.ui.DataTable; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Parameter; import com.idega.presentation.ui.ResetButton; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; /** * Title: * Description: * Copyright: Copyright (c) 2000-2001 idega.is All Rights Reserved * Company: idega *@author <a href="mailto:aron@idega.is">Aron Birkir</a> * @version 1.1 */ public class Accounts extends Finance { protected final int ACT1 = 1, ACT2 = 2, ACT3 = 3, ACT4 = 4, ACT5 = 5; public String strAction = "tt_action"; private DateFormat df; private static String prmNewAccount = "taccs_newaccount"; private Collection accountUsers = null; private Collection accounts = null; private int viewerPageId = -1; private int tarifferPageId = -1; private String type = null; public Accounts() { } public String getLocalizedNameKey() { return "accounts"; } public String getLocalizedNameValue() { return "Accounts"; } public void setAccountViewerPage(int pageId) { this.viewerPageId = pageId; } public void setAccountTarifferPage(int pageId) { this.tarifferPageId = pageId; } protected void control(IWContext iwc) throws java.rmi.RemoteException { if (this.isAdmin) { this.df = getDateTimeFormat(iwc.getCurrentLocale()); if (iwc.isParameterSet(prmNewAccount)) { int iUserId = Integer.parseInt(iwc.getParameter(prmNewAccount)); setMainPanel(getNewAccountForm(iwc,iUserId, this.iCategoryId)); } if(iwc.isParameterSet("fin_create_account")){ createAccount(iwc); setSearchPanel(getSearchForm(iwc, this.iCategoryId)); } else if (iwc.isParameterSet("sf_search")) { performSearch(iwc, this.iCategoryId); setSearchPanel(getSearchForm(iwc, this.iCategoryId)); //T.add(new HorizontalRule(),1,2); Map MapOfUsers = getMapOfUsers(this.accountUsers); setMainPanel(getAccountListTable(MapOfUsers, this.iCategoryId)); if (MapOfUsers != null && !MapOfUsers.isEmpty()) { setMainPanel(getUsersWithoutAccounts(MapOfUsers, this.iCategoryId)); } } else { setSearchPanel(getSearchForm(iwc, this.iCategoryId)); //T.add(new HorizontalRule(),1,2); } } else { add(localize("access_denied", "Access denied")); } } /** * @param iwc */ private void createAccount(IWContext iwc){ String accountName = iwc.getParameter("account_name"); int userID = Integer.parseInt(iwc.getParameter("fin_usr_id")); this.type = iwc.getParameter("fin_type"); try { getFinanceService().getAccountBusiness().createNewAccount(userID,accountName,"",1,this.type,getFinanceCategoryId().intValue()); } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } } private PresentationObject getSearchForm(IWContext iwc, int iCategoryId) { DataTable T = getDataTable(); T.setUseBottom(false); T.setWidth(Table.HUNDRED_PERCENT); T.addTitle(localize("account_search", "Account Search")); // T.addBottom(false); T.add(getHeader(localize("account_id", "Account id")), 1, 1); T.add(getHeader(localize("name", "Name")), 1, 2); T.add(getHeader(localize("personal_id", "Personal ID")), 1, 3); //T.add(getHeader(localize("first_name", "First name")), 1, 2); //T.add(getHeader(localize("middle_name", "Middle name")), 1, 3); //T.add(getHeader(localize("last_name", "Last name")), 1, 4); String id = iwc.getParameter("sf_id"); String name = iwc.getParameter("sf_name"); String pid = iwc.getParameter("sf_pid"); //String first = iwc.getParameter("sf_firstname"); //String middle = iwc.getParameter("sf_middlename"); //String last = iwc.getParameter("sf_lastname"); TextInput accountid = getTextInput("sf_id"); TextInput nameinput = getTextInput("sf_name"); TextInput pidinput = getTextInput("sf_pid"); //TextInput firstname = getTextInput("sf_firstname"); //TextInput middlename = getTextInput("sf_middlename"); //TextInput lastname = getTextInput("sf_lastname"); String drpsel = iwc.isParameterSet("sf_type") ? iwc.getParameter("sf_type") : ""; DropdownMenu drpTypes = getAccountTypes("sf_type", drpsel, null); if (id != null) { accountid.setContent(id); } if(name!=null){ nameinput.setContent(name); } if(pid!=null){ pidinput.setContent(pid); } /*if (first != null) firstname.setContent(first); if (middle != null) middlename.setContent(middle); if (last != null) lastname.setContent(last); */ //int len = 20; accountid.setLength(6); nameinput.setLength(40); pidinput.setLength(14); accountid.keepStatusOnAction(true); nameinput.keepStatusOnAction(true); pidinput.keepStatusOnAction(true); //firstname.setLength(len); //middlename.setLength(len); //lastname.setLength(len); T.add(accountid, 2, 1); T.add(drpTypes, 2, 1); T.add(nameinput,2,2); T.add(pidinput,2,3); //T.add(firstname, 2, 2); //T.add(middlename, 2, 3); //T.add(lastname, 2, 4); T.add(Finance.getCategoryParameter(iCategoryId)); SubmitButton search = new SubmitButton(localize("search", "Search"), "sf_search", "true"); search = (SubmitButton) setStyle(search,STYLENAME_INTERFACE_BUTTON); T.addButton(search); ResetButton reset = new ResetButton(localize("clear","Clear")); reset = (ResetButton) setStyle(reset,STYLENAME_INTERFACE_BUTTON); T.addButton(reset); return T; } private PresentationObject getNewAccountForm(IWContext iwc, int iUserId, int iCategoryId) { DataTable T = getDataTable(); T.setUseBottom(false); T.addTitle(localize("create_new_account","Create new account")); TextInput accountName = new TextInput("account_name"); this.type = iwc.getParameter("fin_type"); SubmitButton create = new SubmitButton(localize("create", "Create"), "fin_create_account", "true"); create = (SubmitButton) setStyle(create,STYLENAME_INTERFACE_BUTTON); T.addButton(create); T.add(getHeader(localize("user_name","User name")),1,1); T.add(getText(localize("persona_id","Personal ID")),1,2); T.add(getHeader(localize("account_id","Account ID")),1,3); try { User user = getFinanceService().getAccountUserHome().findByPrimaryKey(new Integer(iUserId)); T.add(getText(user.getName()),2,1); T.add(getText(user.getPersonalID()),2,2); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } T.add(accountName,2,3); T.add(new Parameter("fin_usr_id",String.valueOf(iUserId))); T.add(new Parameter("fin_type",this.type)); T.add(Finance.getCategoryParameter(iCategoryId)); return T; } private void performSearch(IWContext iwc, int iCategoryId) { String id = null;//, first = null, middle = null, last = null; String pid = null, name = null; // See if we have an account id if (iwc.isParameterSet("sf_type")) { this.type = iwc.getParameter("sf_type"); } boolean hasSomething = false; if (iwc.isParameterSet("sf_id")) { id = iwc.getParameter("sf_id"); } if (id != null && !"".equals(id) && id.length() > 0) { try { //accounts = FinanceFinder.getInstance().searchAccounts(id, first, middle, last, type, iCategoryId); this.accounts = getFinanceService().getAccountHome().findBySearch(id,null,null,this.type,getFinanceCategoryId().intValue()); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } } // Else we try to lookup by name else { if (iwc.isParameterSet("sf_name")) { name = iwc.getParameter("sf_name"); hasSomething = true; } if (iwc.isParameterSet("sf_pid")) { pid = iwc.getParameter("sf_pid"); hasSomething = true; }/* if (iwc.isParameterSet("sf_firstname")) { first = iwc.getParameter("sf_firstname"); hasSomething = true; } if (iwc.isParameterSet("sf_middlename")) { middle = iwc.getParameter("sf_middlename"); hasSomething = true; } if (iwc.isParameterSet("sf_lastname")) { last = iwc.getParameter("sf_lastname"); hasSomething = true; }*/ if (hasSomething) { try { //Name nm = new Name(name); //accounts = getFinanceService().getAccountHome().findBySearch(id,first,middle,last,type,getFinanceCategoryId().intValue()); //accountUsers = getFinanceService().getAccountUserHome().findBySearch(first,middle,last); this.accounts = getFinanceService().getAccountHome().findBySearch(id,name,pid,this.type,getFinanceCategoryId().intValue()); this.accountUsers = getFinanceService().getAccountUserHome().findBySearch(name,pid); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } // accounts = FinanceFinder.getInstance().searchAccounts(id, first, middle, last, type, iCategoryId); //accountUsers = FinanceFinder.getInstance().searchAccountUsers(first, middle, last); } } } private Map getMapOfUsers(Collection listOfUsers) { if (listOfUsers != null) { Hashtable H = new Hashtable(listOfUsers.size()); Iterator I = listOfUsers.iterator(); while (I.hasNext()) { User u = (User)I.next(); H.put(new Integer(u.getID()), u); } return H; } return null; } private PresentationObject getAccountListTable(Map mapOfUsers, int iCategoryId) throws java.rmi.RemoteException { DataTable T = new DataTable(); T.setWidth(Table.HUNDRED_PERCENT); T.setUseBottom(false); T.setTitlesHorizontal(true); int row = 1; int col = 1; Map M = mapOfUsers; User U = null; if (this.accounts != null) { T.addTitle(localize("users_with_accounts", "Users with accounts")); col = 1; T.add(getHeader(localize("account_assessment", "Assessment")), 1, row); T.add(getHeader(localize("account_id", "Account id")), 2, row); T.add(getHeader(localize("user_name", "User name")), 3, row); T.add(getHeader(localize("personal_id", "Personal ID")), 4, row); T.add(getHeader(localize("published_balance", "Published")), 5, row); T.add(getHeader(localize("total_balance", "Total")), 6, row); T.add(getHeader(localize("last_updated", "Last updated")), 7, row); row++; Iterator I = this.accounts.iterator(); Account A; Integer accountID; FinanceService financeService = getFinanceService(); Integer uid; Link accountLink, tariffLink; while (I.hasNext()) { col = 1; A = (Account)I.next(); accountID = A.getAccountId(); uid = new Integer(A.getUserId()); if (M != null && M.containsKey(uid)) { U = (User)M.get(uid); M.remove(uid); } else{ try { U = getFinanceService().getAccountUserHome().findByPrimaryKey(uid); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } } if (this.tarifferPageId > 0) { tariffLink = getLink((A.getAccountId().toString())); tariffLink.addParameter(prmAccountId, A.getAccountId().toString()); tariffLink.addParameter(getCategoryParameter(iCategoryId)); tariffLink.setPage(this.tarifferPageId); T.add(tariffLink, col, row); } col++; if (this.viewerPageId > 0) { accountLink = new Link(getText(A.getName())); accountLink.addParameter(AccountViewer.prmAccountId, A.getAccountId().toString()); accountLink.setPage(this.viewerPageId); T.add(accountLink, col, row); } col++; T.add(getText(U.getName()), col++, row); T.add(getText(U.getPersonalID()), col++, row); T.add(getAmountText((financeService.getAccountBalancePublished(accountID))), col++, row); T.add(getAmountText((financeService.getAccountBalance(accountID))), col++, row); Date date = financeService.getAccountLastUpdate(accountID); if(date!=null) { T.add(getText(this.df.format(date)), col++, row); } row++; } T.getContentTable().setColumnAlignment(5,Table.HORIZONTAL_ALIGN_RIGHT); T.getContentTable().setColumnAlignment(6,Table.HORIZONTAL_ALIGN_RIGHT); } return T; } public PresentationObject getUsersWithoutAccounts(Map mapOfUsers, int iCategoryId) { DataTable T = new DataTable(); T.setWidth(Table.HUNDRED_PERCENT); T.setTitlesHorizontal(true); T.setUseBottom(false); int row = 1; T.addTitle(localize("users_without_accounts", "Users without accounts")); T.add(getHeader(localize("user_name", "User name")), 1, row); T.add(getHeader(localize("personal_id", "Personal ID")), 2, row); T.add(getHeader(localize("create_account", "Create account")), 3, row); row++; Iterator I2 = mapOfUsers.values().iterator(); Image newImage = this.core.getImage("/shared/create.gif"); User U; while (I2.hasNext()) { U = (User)I2.next(); T.add(getText(U.getName()), 1, row); T.add(getText(U.getPersonalID()), 2, row); T.add(getNewAccountLink(newImage, U.getID(), iCategoryId,this.type), 3, row); row++; } return T; } private DropdownMenu getAccountTypes(String name, String selected, String display) { DropdownMenu drp = new DropdownMenu(name); if (display != null) { drp.addMenuElementFirst("", display); } drp.addMenuElement(com.idega.block.finance.data.AccountBMPBean.typeFinancial); drp.addMenuElement(com.idega.block.finance.data.AccountBMPBean.typePhone); drp.setSelectedElement(selected); return drp; } private Link getNewAccountLink(PresentationObject obj, int iUserId, int iCategoryId,String type) { Link L = new Link(obj); L.addParameter(Finance.getCategoryParameter(iCategoryId)); L.addParameter(prmNewAccount, iUserId); L.addParameter("fin_type",type); return L; } public void main(IWContext iwc) throws java.rmi.RemoteException { control(iwc); } }