package org.nightlabs.jfire.trade.ui.articlecontainer.detail;
import javax.jdo.FetchPlan;
import javax.jdo.JDOHelper;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.JFireEjb3Factory;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.person.Person;
import org.nightlabs.jfire.prop.PropertySet;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.TradeManagerRemote;
import org.nightlabs.jfire.trade.id.CustomerGroupID;
import org.nightlabs.jfire.trade.id.OrderID;
import org.nightlabs.jfire.trade.ui.legalentity.search.ExtendedPersonSearchWizardPage;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.jfire.trade.ui.transfer.wizard.CombiTransferArticleContainerWizard;
import org.nightlabs.jfire.transfer.id.AnchorID;
public class CustomerPaymentDeliveryWizard extends CombiTransferArticleContainerWizard {
private ExtendedPersonSearchWizardPage personSearchWizardPage;
private String personSearchText;
private OrderID orderID;
public CustomerPaymentDeliveryWizard(String personSearchText, OrderID orderID, byte transferMode, Side side) {
super(orderID, transferMode);
this.personSearchText = personSearchText;
this.orderID = orderID;
setWindowTitle(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.CustomerPaymentDeliveryWizard.window.title")); //$NON-NLS-1$
}
@Override
public void addPages() {
addPersonSearchPage();
super.addPages();
}
protected ExtendedPersonSearchWizardPage createPersonSearchWizardPage()
{
ExtendedPersonSearchWizardPage personPage = new ExtendedPersonSearchWizardPage(personSearchText, true, true) {
@Override
public void onAdditionalDataLoaded() {
clearCustomerGroupIDs();
addCustomerGroupID((CustomerGroupID) JDOHelper.getObjectId(getDefaultCustomerGroup()));
reloadPaymentDeliveryModes();
}
};
return personPage;
}
protected void addPersonSearchPage()
{
personSearchWizardPage = createPersonSearchWizardPage();
addPage(personSearchWizardPage);
}
@Override
public boolean performFinish() {
LegalEntity selectedLegalEntity = personSearchWizardPage.getSelectedLegalEntity();
if (selectedLegalEntity == null) {
Person selectedPerson = personSearchWizardPage.getSelectedPerson();
selectedLegalEntity = createLegalEntityForPerson(selectedPerson);
}
// Assign the customer ID
setCustomerID((AnchorID) JDOHelper.getObjectId(selectedLegalEntity));
try {
TradeManagerRemote tradeManager = JFireEjb3Factory.getRemoteBean(TradeManagerRemote.class, Login.getLogin().getInitialContextProperties());
tradeManager.assignCustomer(orderID, getCustomerID(), false, null, -1);
} catch (Exception e) {
throw new RuntimeException(e);
}
return super.performFinish();
}
protected LegalEntity createLegalEntityForPerson(Person person) {
try {
TradeManagerRemote tradeManager = JFireEjb3Factory.getRemoteBean(TradeManagerRemote.class, Login.getLogin().getInitialContextProperties());
String[] fetchGroups = new String[] { FetchPlan.DEFAULT, LegalEntity.FETCH_GROUP_DEFAULT_CUSTOMER_GROUP, PropertySet.FETCH_GROUP_FULL_DATA };
return tradeManager.storePersonAsLegalEntity(person, true, fetchGroups, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected ExtendedPersonSearchWizardPage getPersonSearchWizardPage() {
return personSearchWizardPage;
}
protected OrderID getOrderID() {
return orderID;
}
protected String getPersonSearchText() {
return personSearchText;
}
}