/*
* $Id: CitizenAccountAdmin.java,v 1.27 2005/04/21 12:29:55 malin Exp $
*
* Copyright (C) 2002 Idega hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*
*/
package se.idega.idegaweb.commune.account.citizen.presentation;
import java.rmi.RemoteException;
import java.util.Iterator;
import java.util.List;
import javax.ejb.FinderException;
import se.idega.idegaweb.commune.account.citizen.business.CitizenAccountBusiness;
import se.idega.idegaweb.commune.account.citizen.data.AdminListOfApplications;
import se.idega.idegaweb.commune.account.citizen.data.CitizenAccount;
import se.idega.idegaweb.commune.account.citizen.data.CitizenApplicantMovingTo;
import se.idega.idegaweb.commune.account.citizen.data.CitizenApplicantPutChildren;
import se.idega.idegaweb.commune.presentation.CommuneBlock;
import com.idega.business.IBOLookup;
import com.idega.core.accesscontrol.business.UserHasLoginException;
import com.idega.core.location.data.Commune;
import com.idega.presentation.ExceptionWrapper;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Break;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextArea;
import com.idega.util.PersonalIDFormatter;
/**
* CitizenAccountAdmin is an IdegaWeb block that displays the admintstation user
* interface for accpting and rejecting citizen account applications. It is
* based on session ejb classes in
* {@link se.idega.idegaweb.commune.account.citizen.business} and entity ejb
* classes in {@link se.idega.idegaweb.commune.account.citizen.business.data}.
* <p>
* Last modified: $Date: 2005/04/21 12:29:55 $ by $Author: malin $
*
* @author <a href="mail:palli@idega.is">Pall Helgason</a>
* @author <a href="http://www.staffannoteberg.com">Staffan N�teberg</a>
* @version $Revision: 1.27 $
*/
public class CitizenAccountAdmin extends CommuneBlock {
private final static int ACTION_VIEW_LIST = 0;
private final static int ACTION_VIEW_DETAILS = 1;
private final static int ACTION_APPROVE = 2;
private final static int ACTION_REJECT = 3;
private final static int ACTION_REMOVE = 4;
private final static String ADDRESS_DEFAULT = "Address";
private final static String ADDRESS_KEY = "caa_adm_address";
private final static String MESSAGE_DEFAULT = "Meddelande";
private final static String MESSAGE_KEY = "caa_adm_message";
private final static String NAME_DEFAULT = "Namn";
private final static String NAME_KEY = "caa_adm_name";
private final static String PARAM_FORM_APPROVE = "caa_adm_approve";
private final static String PARAM_FORM_REJECT = "caa_adm_reject";
private final static String PARAM_FORM_DETAILS = "caa_adm_details";
private final static String PARAM_FORM_REMOVE = "caa_adm_remove";
private final static String PARAM_FORM_CANCEL = "caa_adm_cancel";
private final static String PARAM_FORM_LIST = "caa_adm_list";
private final static String USER_ALLREADY_HAS_A_LOGIN_KEY = "caa_adm_user_has_login";
private final static String USER_ALLREADY_HAS_A_LOGIN_DEFAULT = "Anv�ndaren har redan ett konto";
public void main(IWContext iwc) {
setResourceBundle(getResourceBundle(iwc));
try {
int action = parseAction(iwc);
switch (action) {
case ACTION_VIEW_LIST :
viewList(iwc);
break;
case ACTION_VIEW_DETAILS :
viewDetails(iwc);
break;
case ACTION_APPROVE :
approve(iwc);
break;
case ACTION_REJECT :
reject(iwc);
break;
case ACTION_REMOVE :
remove(iwc);
break;
}
}
catch (Exception e) {
super.add(new ExceptionWrapper(e, this));
}
}
private int parseAction(IWContext iwc) {
if (iwc.isParameterSet(PARAM_FORM_APPROVE)) {
String value = iwc.getParameter(PARAM_FORM_APPROVE);
if (value != null && !value.equals(""))
return ACTION_APPROVE;
}
if (iwc.isParameterSet(PARAM_FORM_REJECT)) {
String value = iwc.getParameter(PARAM_FORM_REJECT);
if (value != null && !value.equals(""))
return ACTION_REJECT;
}
if (iwc.isParameterSet(PARAM_FORM_REMOVE)) {
String value = iwc.getParameter(PARAM_FORM_REMOVE);
if (value != null && !value.equals(""))
return ACTION_REMOVE;
}
if (iwc.isParameterSet(PARAM_FORM_DETAILS)) {
String value = iwc.getParameter(PARAM_FORM_DETAILS);
if (value != null && !value.equals(""))
return ACTION_VIEW_DETAILS;
}
return ACTION_VIEW_LIST;
}
private void viewList(IWContext iwc) {
Form form = new Form();
Table table = new Table();
table.setColumns(4);
table.setCellpadding(getCellpadding());
table.setCellspacing(getCellspacing());
table.setWidth(getWidth());
table.setWidth(4, "12");
int row = 1;
int col = 1;
table.setRowColor(row, getHeaderColor());
table.add(getSmallHeader(localize(NAME_KEY, NAME_DEFAULT)), col++, row);
table.add(getSmallHeader(localize(CitizenAccountApplication.SSN_KEY, CitizenAccountApplication.SSN_DEFAULT)), col++, row);
table.add(getSmallHeader(localize(ADDRESS_KEY, ADDRESS_DEFAULT)), col, row++);
List applications = null;
try {
CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class);
applications = business.getListOfUnapprovedApplications();
}
catch (RemoteException e) {
e.printStackTrace ();
}
if (applications != null && !applications.isEmpty()) {
Iterator it = applications.iterator();
while (it.hasNext()) {
col = 1;
AdminListOfApplications list = (AdminListOfApplications) it.next();
if (list.getName() != null){
table.add(getSmallText(list.getName()), col++, row);
}
else {
col++;
}
String personalID = PersonalIDFormatter.format(list.getPID(), iwc.getIWMainApplication().getSettings().getApplicationLocale());
if (personalID != null) {
table.add(getSmallText(personalID), col++, row);
}
else{
col++;
}
if (list.getAddress().indexOf("null", 0) == -1){
table.add(getSmallText(list.getAddress()), col++, row);
}
else {
col++;
}
if (row % 2 == 0)
table.setRowColor(row, getZebraColor1());
else
table.setRowColor(row, getZebraColor2());
SubmitButton details = new SubmitButton(getVariousIcon(""), PARAM_FORM_DETAILS, list.getId());
details.setDescription(localize(PARAM_FORM_DETAILS, "Administrate"));
table.add(details, col, row++);
}
}
form.add(table);
add(form);
}
private void viewDetails(IWContext iwc) {
Form form = new Form();
Table table = new Table();
table.setWidth(getWidth());
table.setCellpadding(getCellpadding());
table.setCellspacing(0);
table.setColumns(3);
table.setWidth(1, "30%");
int row = 1;
try {
final CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class);
final String idAsString = iwc.getParameter(PARAM_FORM_DETAILS);
final int id = new Integer(idAsString).intValue();
final CitizenAccount applicant = business.getAccount(id);
table.add(getSmallHeader(localize(NAME_KEY, NAME_DEFAULT)), 1, row);
if (applicant.getApplicantName() != null){
table.add(getSmallText(applicant.getApplicantName()), 3, row++);
}
else{
row++;
}
table.add(getSmallHeader(localize(CitizenAccountApplication.SSN_KEY, CitizenAccountApplication.SSN_DEFAULT)), 1, row);
final String pid = PersonalIDFormatter.format(applicant.getSsn(), iwc.getIWMainApplication().getSettings().getApplicationLocale());
if (pid != null){
table.add(getSmallText(pid), 3, row++);
}
else{
row++;
}
table.add(getSmallHeader(localize(CitizenAccountApplication.EMAIL_KEY, CitizenAccountApplication.EMAIL_DEFAULT)), 1, row);
final Link email = getSmallLink(applicant.getEmail());
if (applicant.getEmail() != null){
email.setURL("mailto:" + applicant.getEmail());
table.add(email, 3, row++);
}
else {
row++;
}
table.add(getSmallHeader(localize(CitizenAccountApplication.PHONE_HOME_KEY, CitizenAccountApplication.PHONE_HOME_DEFAULT)), 1, row);
if (applicant.getPhoneHome() != null){
table.add(getSmallText(applicant.getPhoneHome()), 3, row++);
}
else {
row++;
}
table.add(getSmallHeader(localize(CitizenAccountApplication.PHONE_WORK_KEY, CitizenAccountApplication.PHONE_WORK_DEFAULT)), 1, row);
if (applicant.getPhoneWork() != null){
table.add(getSmallText(applicant.getPhoneWork()), 3, row++);
}
else {
row++;
}
final String careOf = applicant.getCareOf ();
final String address = (careOf != null ? "c/o " + careOf + ' ' : "") + applicant.getStreet() + "; " + applicant.getZipCode() + " " + applicant.getCity();
if (applicant.getStreet() != null && applicant.getZipCode() != null && applicant.getCity() != null) {
table.add(getSmallHeader(localize(ADDRESS_KEY, ADDRESS_DEFAULT)), 1, row);
table.add(getSmallText(address), 3, row++);
}
if (applicant.getCivilStatus() != null) {
table.add(getSmallHeader(localize(CitizenAccountApplication.CIVIL_STATUS_KEY, CitizenAccountApplication.CIVIL_STATUS_DEFAULT)), 1, row);
table.add(getSmallText(applicant.getCivilStatus()), 3, row++);
}
table.add(getSmallHeader(localize(CitizenAccountApplication.COHABITANT_KEY, CitizenAccountApplication.COHABITANT_DEFAULT)), 1, row);
final String hasCohabitant = applicant.hasCohabitant() ? localize(CitizenAccountApplication.YES_KEY, CitizenAccountApplication.YES_DEFAULT) : localize(CitizenAccountApplication.NO_KEY, CitizenAccountApplication.NO_DEFAULT);
table.add(getSmallText(hasCohabitant), 3, row++);
table.add(getSmallHeader(localize(CitizenAccountApplication.CHILDREN_COUNT_KEY, CitizenAccountApplication.CHILDREN_COUNT_DEFAULT)), 1, row);
table.add(getSmallText(String.valueOf(applicant.getChildrenCount())), 3, row++);
if (applicant.getApplicationReason() != null) {
table.add(getSmallHeader(localize(CitizenAccountApplication.APPLICATION_REASON_KEY, CitizenAccountApplication.APPLICATION_REASON_DEFAULT)), 1, row);
final String applicationReason = localize(applicant.getApplicationReason(), "?");
table.add(getSmallText(applicationReason), 3, row++);
if (applicant.getApplicationReason().equals
(CitizenAccount.PUT_CHILDREN_IN_NACKA_SCHOOL_KEY)
|| applicant.getApplicationReason().equals
(CitizenAccount.PUT_CHILDREN_IN_NACKA_CHILDCARE_KEY)
|| applicant.getApplicationReason().equals
(CitizenAccount.MOVING_TO_NACKA_KEY)
|| applicant.getApplicationReason().equals
(CitizenAccount.MAKE_KOMVUX_APPLICATION_KEY)) {
try {
final CitizenApplicantPutChildren capc = business.findCitizenApplicantPutChildren (id);
Commune commune = business.findCommuneByCommunePK(new Integer(capc.getCurrentCommuneId()));
table.add(getSmallHeader(localize(CitizenAccountApplication.CURRENT_KOMMUN_KEY, CitizenAccountApplication.CURRENT_KOMMUN_DEFAULT)), 1, row);
if (commune != null) {
table.add(getSmallText(commune.getCommuneName()), 3, row++);
}
} catch (FinderException e) {
System.err.println (e.getMessage ());
}
}
if (applicant.getApplicationReason().equals
(CitizenAccount.MOVING_TO_NACKA_KEY)) {
try {
final CitizenApplicantMovingTo camt
= business.findCitizenApplicantMovingTo (id);
table.add(getSmallHeader(localize(CitizenAccountApplication.MOVING_IN_ADDRESS_KEY, CitizenAccountApplication.MOVING_IN_ADDRESS_DEFAULT)), 1, row);
table.add(getSmallText(camt.getAddress ()), 3, row++);
table.add(getSmallHeader(localize(CitizenAccountApplication.MOVING_IN_DATE_KEY, CitizenAccountApplication.MOVING_IN_DATE_DEFAULT)), 1, row);
table.add(getSmallText(camt.getMovingInDate ()), 3, row++);
if (camt.getHousingType ().equals (CitizenAccountApplication.TENANCY_AGREEMENT_KEY)) {
table.add(getSmallHeader(localize(CitizenAccountApplication.LANDLORD_KEY, CitizenAccountApplication.LANDLORD_DEFAULT)), 1, row);
table.add(getSmallText(camt.getLandlord ()), 3, row++);
} else if (camt.getHousingType ().equals (CitizenAccountApplication.DETACHED_HOUSE_KEY)) {
table.add(getSmallHeader(localize(CitizenAccountApplication.PROPERTY_TYPE_KEY, CitizenAccountApplication.PROPERTY_TYPE_DEFAULT)), 1, row);
table.add(getSmallText(camt.getPropertyType ()), 3, row++);
}
} catch (FinderException e) {
System.err.println (e.getMessage ());
}
}
}
table.setHeight(row++, 6);
table.mergeCells(1, row, 3, row);
table.setWidth(row, Table.HUNDRED_PERCENT);
table.add(getSmallHeader(localize(MESSAGE_KEY, MESSAGE_DEFAULT)), 1, row);
table.add(new Break(), 1, row);
TextArea area = new TextArea(MESSAGE_KEY);
area.setRows(7);
area.setColumns(40);
table.add(area, 1, row++);
SubmitButton approve = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_APPROVE, "Godk�nn"), PARAM_FORM_APPROVE, idAsString));
SubmitButton reject = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_REJECT, "Avsl�"), PARAM_FORM_REJECT, idAsString));
SubmitButton remove = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_REMOVE, "Ta bort"), PARAM_FORM_REMOVE, idAsString));
SubmitButton cancel = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_CANCEL, "Avbryt"), PARAM_FORM_CANCEL, idAsString));
table.setHeight(row++, 12);
table.mergeCells(1, row, table.getColumns(), row);
table.add(approve, 1, row);
table.add(Text.getNonBrakingSpace(), 1, row);
table.add(reject, 1, row);
table.add(Text.getNonBrakingSpace(), 1, row);
table.add(remove, 1, row);
table.add(Text.getNonBrakingSpace(), 1, row);
table.add(cancel, 1, row);
}
catch (final Exception e) {
e.printStackTrace();
}
form.add(table);
add(form);
}
private void approve(IWContext iwc) {
final Form form = new Form();
final String id = iwc.getParameter(PARAM_FORM_APPROVE);
try {
final CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class);
business.acceptApplication(new Integer(id).intValue(), iwc.getCurrentUser());
form.add(getText(localize("caa_acc_application", "Godk�nd ans�kan: ") + id));
} catch (UserHasLoginException uhle) {
form.add (getText (localize(USER_ALLREADY_HAS_A_LOGIN_KEY,
USER_ALLREADY_HAS_A_LOGIN_DEFAULT)));
} catch (Exception e) {
e.printStackTrace();
form.add(getText(localize("caa_acc_application_failed", "Ett fel intr�ffade vid godk�nnade av ans�kan: ") + id));
}
final SubmitButton list = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_LIST, "Lista"), PARAM_FORM_LIST, ""));
form.add(Text.BREAK);
form.add(Text.BREAK);
form.add(list);
add(form);
}
private void reject(IWContext iwc) {
Form form = new Form();
String id = iwc.getParameter(PARAM_FORM_REJECT);
try {
CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class);
if (iwc.isParameterSet(MESSAGE_KEY)) {
business.rejectApplication(new Integer(id).intValue(), iwc.getCurrentUser(), iwc.getParameter(MESSAGE_KEY));
form.add(getText(localize("caa_rej_application", "Rejected application number : ") + id));
} else {
form.add (getText(localize("caa_rej_no_message", "Du m�ste fylla i f�ltet 'Meddelande/Orsak'")));
}
} catch (Exception e) {
e.printStackTrace();
form.add(getText(localize("caa_rej_application_failed", "There was an error rejecting application number : ") + id));
}
SubmitButton list = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_LIST, "Lista"), PARAM_FORM_LIST, ""));
form.add(Text.BREAK);
form.add(Text.BREAK);
form.add(list);
add(form);
}
private void remove(IWContext iwc) {
Form form = new Form();
String id = iwc.getParameter(PARAM_FORM_REMOVE);
try {
CitizenAccountBusiness business = (CitizenAccountBusiness) IBOLookup.getServiceInstance(iwc, CitizenAccountBusiness.class);
business.removeApplication(new Integer(id).intValue(), iwc.getCurrentUser());
form.add(getText(localize("caa_rem_application", "Tog bort ans�kan nummer: ") + id));
} catch (Exception e) {
e.printStackTrace();
form.add(getText(localize("caa_rem_application_failed", "Ett fel intr�ffade vid borttagning av ans�kan nummer: ") + id));
}
SubmitButton list = (SubmitButton) getButton(new SubmitButton(localize(PARAM_FORM_LIST, "Lista"), PARAM_FORM_LIST, ""));
form.add(Text.BREAK);
form.add(Text.BREAK);
form.add(list);
add(form);
}
}