/*
* Created on Mar 18, 2004
*/
package is.idega.idegaweb.member.isi.block.accounting.presentation;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import javax.transaction.TransactionManager;
import com.idega.block.cal.business.CalBusiness;
import com.idega.block.cal.business.DefaultLedgerVariationsHandler;
import com.idega.block.cal.business.LedgerVariationsHandler;
import com.idega.block.entity.business.EntityToPresentationObjectConverter;
import com.idega.block.entity.data.EntityPath;
import com.idega.block.entity.presentation.EntityBrowser;
import com.idega.idegaweb.IWApplicationContext;
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.transaction.IdegaTransactionManager;
import com.idega.user.business.GroupBusiness;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.Group;
import com.idega.user.data.User;
import com.idega.user.presentation.GroupPropertyWindow;
import com.idega.user.presentation.UserPropertyWindow;
/**
* Description: <br>
* Copyright: Idega Software 2004 <br>
* Company: Idega Software <br>
*
* @author <a href="mailto:birna@idega.is">Birna Iris Jonsdottir</a>
*/
public class CashierLedgerWindow extends CashierSubWindowTemplate {
public static String ADD_USER = "add_user";
public static String NEW_USER_IN_LEDGER = "user_new_in_ledger_";
public static final String BUNDLE_KEY_LEDGER_VARIATIONS_HANDLER_CLASS = "ledger_variations_class";
public static final String PARAMETER_USER_ID = "userID";
public static final String PARAMETER_LEDGER_GROUP = "ledgerGroup";
private String bold = "bold";
public CashierLedgerWindow() {
super();
}
public void main(IWContext iwc) throws Exception {
IWResourceBundle useriwrb = iwc.getIWMainApplication().getBundle("com.idega.user").getResourceBundle(iwc);
if (iwc.isParameterSet(ADD_USER)) {
String userID = iwc.getParameter(PARAMETER_USER_ID);
User user = null;
Group ledgerGroup = null;
try {
user = getUserBusiness(iwc).getUser(Integer.parseInt(userID));
ledgerGroup = getGroupBusiness(iwc).getGroupByGroupID(
Integer.parseInt(iwc.getParameter(PARAMETER_LEDGER_GROUP)));
}
catch (NumberFormatException e1) {
e1.printStackTrace();
}
catch (RemoteException e1) {
e1.printStackTrace();
}
catch (FinderException e1) {
e1.printStackTrace();
}
if (ledgerGroup != null && user != null) {
TransactionManager transaction = IdegaTransactionManager.getInstance();
try {
// START A TRANSACTION!
transaction.begin();
UserBusiness userBiz = getUserBusiness(iwc);
String errorMessage = userBiz.isUserSuitedForGroup(user, ledgerGroup);
if (errorMessage == null) {
ledgerGroup.addGroup(user);
if (user.getPrimaryGroupID() < 0) {
user.setPrimaryGroupID((Integer) ledgerGroup.getPrimaryKey());
}
user.store();
userBiz.callAllUserGroupPluginAfterUserCreateOrUpdateMethod(user, ledgerGroup);
}
else {
Text error = new Text(errorMessage);
error.setStyleClass("errorMessage");
add(error);
addBreak();
}
transaction.commit();
}// try ends
catch (Exception e) {
e.printStackTrace();
try {
transaction.rollback();
}
catch (Exception e1) {
e1.printStackTrace();
}
String msg = e.getMessage();
String errorMSG = useriwrb.getLocalizedString(
"new_user.transaction_rollback",
"User could not be created/added because of the error: ")
+ msg
+ useriwrb.getLocalizedString("new_user.try_again"," Please try again or contact the system administrator if you think it is a server error.");
Text error = new Text(errorMSG);
error.setStyleClass("errorMessage");
add(error);
addBreak();
}
}
}
EntityToPresentationObjectConverter converterLink = new EntityToPresentationObjectConverter() {
public PresentationObject getHeaderPresentationObject(EntityPath entityPath, EntityBrowser browser,
IWContext iwc) {
return browser.getDefaultConverter().getHeaderPresentationObject(entityPath, browser, iwc);
}
public PresentationObject getPresentationObject(Object entity, EntityPath path, EntityBrowser browser,
IWContext iwc) {
User user = (User) entity;
// CalendarLedger ledger = null;
Collection groups = null;
boolean isInGroup = false;
String metaData = user.getMetaData(NEW_USER_IN_LEDGER);
System.out.println("metadata for user: " + user.getName() + ": " + metaData);
if (metaData != null && !metaData.equals("") && !metaData.equals("-1")) {
int ledGroupID = -1;
if (metaData != null && !metaData.equals("")) {
try {
ledGroupID = Integer.parseInt(metaData);
}
catch (NumberFormatException nfe) {
ledGroupID = -1;
}
}
UserBusiness userBiz = getUserBusiness(iwc);
PresentationObject text = browser.getDefaultConverter().getPresentationObject(entity, path,
browser, iwc);
// Integer userID = (Integer) user.getPrimaryKey();
try {
groups = userBiz.getUserGroupsDirectlyRelated(user);
}
catch (Exception e) {
e.printStackTrace();
}
Iterator groupIter = groups.iterator();
// go through the groupIDs to see if the user is in the
// ledgerGroup
while (groupIter.hasNext()) {
Group g = (Group) groupIter.next();
if (g != null) {
Integer groupID = (Integer) g.getPrimaryKey();
if (ledGroupID == groupID.intValue()) {
isInGroup = true;
user.setMetaData(NEW_USER_IN_LEDGER, "-1");
user.store();
}
}
}
Collection parentGroups = null;
String divisionNameField = null;
String clubNameField = null;
LedgerVariationsHandler ledgerVariationsHandler = getLedgerVariationsHandler(iwc);
Group ledgerGroup = null;
// Image buttonAddToGroup =
// getResourceBundle(iwc).getLocalizedImageButton("cashierLedgerWindow.add_to_group",
// "Add user to ledger group");
Link button = new Link("Add user to ledger group");
button.addParameter(PARAMETER_LEDGER_GROUP, ledGroupID);
button.addParameter(PARAMETER_USER_ID, user.getPrimaryKey().toString());
button.addParameter(GroupPropertyWindow.PARAMETERSTRING_GROUP_ID,
iwc.getParameter(GroupPropertyWindow.PARAMETERSTRING_GROUP_ID));
button.addParameter(CashierWindow.ACTION, CashierWindow.ACTION_CASHIER_LEDGER);
button.addParameter(ADD_USER, ADD_USER);
button.setAsImageButton(true);
try {
ledgerGroup = userBiz.getGroupBusiness().getGroupByGroupID(ledGroupID);
parentGroups = userBiz.getGroupBusiness().getParentGroupsRecursive(
userBiz.getGroupBusiness().getGroupByGroupID(ledGroupID));
}
catch (Exception e) {
ledgerGroup = null;
}
if (parentGroups != null) {
divisionNameField = ledgerVariationsHandler.getParentGroupName(parentGroups);
clubNameField = ledgerVariationsHandler.getParentOfParentGroupName(parentGroups);
}
Link aLink = null;
IWResourceBundle iwrb = getResourceBundle(iwc);
String displayString = "";
if (ledgerGroup != null) {
Text t = new Text(iwrb.getLocalizedString("cashierLedgerWindow.in_group_text", "in group")
+ ":");
displayString += " - " + t + " " + ledgerGroup.getName();
}
if (clubNameField != null) {
Text t = new Text(iwrb.getLocalizedString("cashierLedgerWindow.club_name_text", "club name")
+ ":");
displayString += " - " + t + " " + clubNameField;
}
if (divisionNameField != null) {
Text t = new Text(iwrb.getLocalizedString("cashierLedgerWindow.division_name_text",
"division name")
+ ":");
displayString += " - " + t + " " + divisionNameField;
}
aLink = new Link(text);
if (!isInGroup) {
aLink.setStyleClass("errorMessage");
}
else {
aLink.setStyleClass("styledLink");
}
aLink.setWindowToOpen(UserPropertyWindow.class);
aLink.addParameter(UserPropertyWindow.PARAMETERSTRING_USER_ID, user.getPrimaryKey().toString());
Text displayText = new Text(displayString);
displayText.setStyleClass(CashierLedgerWindow.this.bold);
Table te = new Table();
te.add(aLink, 1, 1);
te.add(displayText, 2, 1);
te.add(Text.NON_BREAKING_SPACE, 2, 1);
te.add(button, 3, 1);
return te;
}
else {
return null;
}
}
};
Collection users = null;
try {
users = getUserBusiness(getIWApplicationContext()).getUserHome().findUsersByMetaData(NEW_USER_IN_LEDGER,
null);
}
catch (Exception e) {
e.printStackTrace();
}
Collection u = new ArrayList();
Iterator usersIter = users.iterator();
while (usersIter.hasNext()) {
User us = (User) usersIter.next();
if (us.getMetaData(NEW_USER_IN_LEDGER) != null && !us.getMetaData(NEW_USER_IN_LEDGER).equals("-1")) {
String sLedGrID = us.getMetaData(NEW_USER_IN_LEDGER);
if (sLedGrID != null && !sLedGrID.equals("") && !sLedGrID.equals("user_new_in_ledger_")) {
Group ledgerGroup = getGroupBusiness(iwc).getGroupByGroupID(Integer.parseInt(sLedGrID));
if (iwc.getAccessController().hasViewPermissionFor(ledgerGroup, iwc)
|| iwc.getAccessController().hasEditPermissionFor(ledgerGroup, iwc)) {
u.add(us);
}
}
}
}
// IWResourceBundle resourceBundle = getResourceBundle(iwc);
EntityBrowser entityBrowser = EntityBrowser.getInstanceUsingEventSystem();
entityBrowser.setEntities("havanna", u);
entityBrowser.setDefaultNumberOfRows(Math.min(users.size(), 30));
entityBrowser.setWidth(Table.HUNDRED_PERCENT);
String nameKey = User.class.getName() + ".FIRST_NAME:" + User.class.getName() + ".MIDDLE_NAME:"
+ User.class.getName() + ".LAST_NAME";
String ssnKey = User.class.getName() + ".PERSONAL_ID";
// entityBrowser.setMandatoryColumn(1, "Delete");
entityBrowser.setDefaultColumn(1, nameKey);
entityBrowser.setOptionColumn(0, ssnKey);
entityBrowser.setEntityToPresentationConverter(nameKey, converterLink);
add(entityBrowser);
}
public static LedgerVariationsHandler getLedgerVariationsHandler(IWContext iwc) {
// the class used to handle ledgerVariations is an
// applicationProperty...
String bClass = null;
try {
bClass = iwc.getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER).getProperty(
BUNDLE_KEY_LEDGER_VARIATIONS_HANDLER_CLASS);
}
catch (Exception e) {
// just user default LedgerVariationHandler class
}
LedgerVariationsHandler ledgerVariationsHandler;
if (bClass != null && bClass.trim().length() > 0) {
Class classDef;
try {
classDef = Class.forName(bClass);
ledgerVariationsHandler = (LedgerVariationsHandler) classDef.newInstance();
}
catch (Exception e) {
System.out.println("Couldn't instantiate class for ledgerVariationsHandler, using default: " + bClass);
e.printStackTrace();
ledgerVariationsHandler = new DefaultLedgerVariationsHandler();
}
}
else {
ledgerVariationsHandler = new DefaultLedgerVariationsHandler();
}
return ledgerVariationsHandler;
}
public UserBusiness getUserBusiness(IWApplicationContext iwc) {
UserBusiness userBiz = null;
if (userBiz == null) {
try {
userBiz = (UserBusiness) com.idega.business.IBOLookup.getServiceInstance(iwc, UserBusiness.class);
}
catch (java.rmi.RemoteException rme) {
throw new RuntimeException(rme.getMessage());
}
}
return userBiz;
}
public GroupBusiness getGroupBusiness(IWApplicationContext iwc) {
GroupBusiness groupBiz = null;
try {
groupBiz = (GroupBusiness) com.idega.business.IBOLookup.getServiceInstance(iwc, GroupBusiness.class);
}
catch (java.rmi.RemoteException rme) {
throw new RuntimeException(rme.getMessage());
}
return groupBiz;
}
public CalBusiness getCalendarBusiness(IWApplicationContext iwc) {
CalBusiness calBiz = null;
if (calBiz == null) {
try {
calBiz = (CalBusiness) com.idega.business.IBOLookup.getServiceInstance(iwc, CalBusiness.class);
}
catch (java.rmi.RemoteException rme) {
throw new RuntimeException(rme.getMessage());
}
}
return calBiz;
}
}