Hi, I know this code is long but for some reason my AjaxTabbedPanel,link,onSubmit() is not getting called.
package se.edgesoft.hairless.web.page.site.checkout;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.extensions.ajax.markup.html.tabs.AjaxTabbedPanel;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.protocol.http.WebRequest;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.EmailAddressValidator;
import org.apache.wicket.validation.validator.StringValidator;
import se.edgesoft.hairless.entities.cart.Cart;
import se.edgesoft.hairless.entities.cart.CartItem;
import se.edgesoft.hairless.entities.country.FreightCost;
import se.edgesoft.hairless.entities.item.Item;
import se.edgesoft.hairless.entities.item.SubItem;
import se.edgesoft.hairless.entities.item.attribute.Attribute;
import se.edgesoft.hairless.entities.order.Order;
import se.edgesoft.hairless.entities.order.OrderItem;
import se.edgesoft.hairless.entities.order.kreditor.KreditorOrder;
import se.edgesoft.hairless.entities.order.posten.PostenOrder;
import se.edgesoft.hairless.entities.presentation.Presentation;
import se.edgesoft.hairless.entities.presentation.PresentationType;
import se.edgesoft.hairless.entities.translation.Translation;
import se.edgesoft.hairless.entities.translation.TranslationType;
import se.edgesoft.hairless.entities.user.User;
import se.edgesoft.hairless.model.order.payment.DirectPayment;
import se.edgesoft.hairless.model.order.payment.IPayment;
import se.edgesoft.hairless.model.order.payment.KreditorException;
import se.edgesoft.hairless.model.order.payment.KreditorFactory;
import se.edgesoft.hairless.model.order.payment.KreditorPayment;
import se.edgesoft.hairless.model.order.payment.MonthlyKreditorPayment;
import se.edgesoft.hairless.model.order.payment.PaymentFactory;
import se.edgesoft.hairless.model.order.payment.PaymentMethod;
import se.edgesoft.hairless.model.order.posten.PostenPaymentMethod;
import se.edgesoft.hairless.model.presentation.PresentationManager;
import se.edgesoft.hairless.model.translation.Translator;
import se.edgesoft.hairless.model.translation.TranslatorManager;
import se.edgesoft.hairless.session.HairlessSession;
import se.edgesoft.hairless.utils.DateValidator;
import se.edgesoft.hairless.web.components.form.ForgotPassWordForm;
import se.edgesoft.hairless.web.components.form.NewUserForm;
import se.edgesoft.hairless.web.page.site.Base;
import se.edgesoft.hairless.web.page.site.OverviewablePage;
import se.edgesoft.hairless.web.page.site.customerservice.Terms;
import se.edgesoft.hairless.web.panels.cart.PurchaseItemPanel;
public class PurchasePage extends OverviewablePage{
AjaxTabbedPanel panel;
private IPayment payment;
PurchaseItemPanel immediateDeliveryPanel;
@SpringBean( name = "PaymentFactory" )
private PaymentFactory paymentFactory;
@SpringBean( name = "KreditorFactory" )
private KreditorFactory kreditorFactory;
private User user;
public KreditorFactory getKreditorFactory() {
return kreditorFactory;
}
public PaymentFactory getPaymentFactory() {
return paymentFactory;
}
public IPayment getPayment() {
return payment;
}
public void setPayment(IPayment payment) {
this.payment = payment;
}
public PurchasePage(){
Presentation presentation = new PresentationManager( getStore()
).getPresentation( PresentationType.CART );
Translation translation = new TranslatorManager( getStore()
).getTranslation( TranslationType.CART );
setBackground( presentation );
addOverview( translation, presentation );
addPromotion( true );
user = getUser();
if( getCart().getCartItems().isEmpty() ){
add( new NoItemFragment( "itemPanel" , "noItems" ));
add( new Label( "purchaseFragment", "" ));
}else{
add( new ItemFragment( "itemPanel" , "itemFragment"));
if( ! isLoggedIn() ){
add( new PurchaseLoginFragment(
"purchaseFragment" ,
"purchaseLoginFragment" ));
}else{
add( new PaymentFragment( "purchaseFragment",
"paymentFragment" ));
}
}
}
/** If there are no items in cart the set the continue link to base */
final class NoItemFragment extends Fragment{
private static final long serialVersionUID = 1L;
public NoItemFragment( String panel, String id ){
super( panel, id, PurchasePage.this );
add( new BookmarkablePageLink( "continueLink" ,
Base.class ));
}
}
class CostFragment extends Fragment{
public CostFragment( String id, String markup ){
super( id, markup, PurchasePage.this );
final WebMarkupContainer costContainer = new
WebMarkupContainer(
"costContainer" );
costContainer.add( new Label( "totalAmount" , new
String( "" +
getCart().getTotalAmount())));
costContainer.add( new Label( "cartCost" , format(
getCartSum(),
true).suffixed()));
if( isLoggedIn() ){
costContainer.add( new Label( "freightCost" ,
format(
getTotalFreightCharge(), true).suffixed()));
}else{
costContainer.add( new Label( "freightCost" ,
"tillkommer"));
}
if( getPayment() != null ){
costContainer.add( new Label( "paymentCost" ,
format(
getPayment().getCost(), true).suffixed()));
}else{
costContainer.add( new Label( "paymentCost" ,
"tillkommer"));
}
costContainer.add( new Label( "totalCost" , format(
getTotalSum(),
true).suffixed()));
setOutputMarkupId( true );
add( costContainer );
}
}
final class ItemFragment extends Fragment{
private static final long serialVersionUID = 1L;
WebMarkupContainer partDeliveryContainer;
public ItemFragment( String panel, String id ){
super( panel, id, PurchasePage.this );
/** Get the items that can be delivered now */
IModel normalCartItems = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
public Object load(){
return getCart().getCartItems();
}
};
add( new Label( "currencySuffix" ,
getStore().getCurrency().getSuffix()
));
immediateDeliveryPanel = new PurchaseItemPanel(
"immediateDelivery",
normalCartItems ){
@Override
public void onItemsUpdate(AjaxRequestTarget
target) {
Cart cart = getCart();
if( ! cart.canSplitOrder() ){
cart.setNoMerge(false);
getCartDao().updateCart( cart );
}
if( getCart().getCartItems().isEmpty()
){
setResponsePage( new
PurchasePage());
}
Fragment costFragment = new
CostFragment( "costFragment" ,
"costFragment" );
ItemFragment.this.addOrReplace(
costFragment );
target.addComponent( costFragment );
updateCart( target );
if( PurchasePage.this.panel != null ){
if( getPayment() != null &&
getPayment().getMinimum() > getCartSum()
){
setPayment( null );
}
target.addComponent(
PurchasePage.this.panel );
}
target.addComponent(
partDeliveryContainer );
}
};
add( immediateDeliveryPanel );
partDeliveryContainer = new WebMarkupContainer(
"partDeliveryContainer"
){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible(){
if( getCart().canSplitOrder() ){
return true;
}
return false;
}
};
Form partDeliveryForm = new Form( "partDeliveryForm" );
partDeliveryContainer.add( partDeliveryForm );
final AjaxCheckBox partDeliveryCheck = new
AjaxCheckBox("noMerge", new
PropertyModel( getCart() , "noMerge" )) {
private static final long serialVersionUID = 1L;
protected void
onUpdate(AjaxRequestTarget target) {
Cart cart = getCart();
cart.setNoMerge( (Boolean)
getModelObject());
getCartDao().updateCart( cart );
Fragment costFragment = new
CostFragment( "costFragment" ,
"costFragment" );
ItemFragment.this.addOrReplace(
costFragment );
target.addComponent(
costFragment );
}
};
partDeliveryForm.add( partDeliveryCheck );
partDeliveryContainer.setOutputMarkupId( true );
add( partDeliveryContainer );
add( new CostFragment( "costFragment" ,
"costFragment"));
setOutputMarkupId( true );
}
}
/**
* Fragment for requesting login and login
* @author Mathias Nilsson
*
*/
class PurchaseLoginFragment extends Fragment{
private static final long serialVersionUID = 1L;
public PurchaseLoginFragment(String id, String markupId) {
super(id, markupId,PurchasePage.this);
se.edgesoft.hairless.web.components.form.LoginForm loginForm =
new
se.edgesoft.hairless.web.components.form.LoginForm( "loginForm" ){
private static final long serialVersionUID = 1L;
@Override
public void onLoggedIn() {
setResponsePage( new PurchasePage());
}
@Override
public void onLoginFail() {
}
};
add( new ForgotPassWordForm( "forgotPassWordForm" ));
loginForm.add( new AjaxLink( "becomeMemberLink"){
@Override
public void onClick(AjaxRequestTarget target) {
Fragment repl = new NewMemberFragment(
"purchaseFragment" ,
"newMemberFragment");
repl.setOutputMarkupId(true);
getPage().replace(repl);
target.addComponent( repl );
}
});
add( loginForm );
setOutputMarkupId( true );
}
public User authenticate( String email, String passWord ){
return getUserDao().authenticate(email, passWord);
}
}
/**
* Fragment for a new user
* @author Mathias Nilsson
*
*/
class NewMemberFragment extends Fragment{
private static final long serialVersionUID = 1L;
public NewMemberFragment(String id, String markupId) {
super(id, markupId,PurchasePage.this);
NewUserForm newUserForm = new NewUserForm(
"memberForm" ){
private static final long serialVersionUID = 1L;
@Override
public void onUserCreated() {
setResponsePage( new PurchasePage());
}
};
newUserForm.add( new AjaxLink( "loginLink"){
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
Fragment repl = new
PurchaseLoginFragment( "purchaseFragment" ,
"purchaseLoginFragment");
repl.setOutputMarkupId(true);
getPage().replace(repl);
target.addComponent( repl );
}
});
setOutputMarkupId( true );
add( newUserForm );
}
}
class PaymentFragment extends Fragment{
public void onPaymentEvent( IPayment payment, AjaxRequestTarget
target ){
setPayment(payment);
onItemPanelChange( target );
}
public void onItemPanelChange( AjaxRequestTarget target ){
Fragment repl = new ItemFragment( "itemPanel" ,
"itemFragment");
repl.setOutputMarkupId(true);
getPage().replace(repl);
target.addComponent( repl );
}
public PaymentFragment( String id, String markup ){
super( id, markup, PurchasePage.this );
IModel countryModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
@Override
protected Object load() {
return getCountryDao().getCountries();
}
};
final FeedbackPanel feedBack = new
FeedbackPanel("feedBack");
//feedBack.setFilter(new
ContainerFeedbackMessageFilter(this));
feedBack.setOutputMarkupId( true );
add( feedBack );
final Form purchaseForm = new Form( "purchaseForm" );
final WebMarkupContainer userContainer = new
WebMarkupContainer(
"userContainer",new CompoundPropertyModel(user)){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible(){
if( ! isLoggedIn() ) return false;
return true;
}
};
userContainer.setOutputMarkupId( true );
final WebMarkupContainer retrieveAddress = new
WebMarkupContainer(
"retrieveAddress" );
retrieveAddress.setOutputMarkupId( true );
final DropDownChoice country = new DropDownChoice(
"country" ,
countryModel, new ChoiceRenderer( "name" , "name") );
country.add( new AjaxFormComponentUpdatingBehavior(
"onchange" ){
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget
target) {
// TODO: Check language and set correct
value
setPayment( null );
target.addComponent( panel );
onItemPanelChange( target );
}
});
country.setRequired( true );
country.setOutputMarkupId( true );
final TextField email = new TextField( "email" );
email.add( EmailAddressValidator.getInstance() );
email.setRequired( true );
email.add( StringValidator.lengthBetween( 1 ,255 ));
email.setOutputMarkupId( true );
final TextField firstName = new TextField( "firstName"
);
firstName.setRequired( true );
firstName.setOutputMarkupId( true );
firstName.add( StringValidator.lengthBetween( 1 ,255 ));
final TextField lastName = new TextField( "lastName" );
lastName.setRequired( true );
lastName.setOutputMarkupId( true );
lastName.add( StringValidator.lengthBetween( 1 ,255 ));
lastName.add(
StringValidator.MaximumLengthValidator.maximumLength(255));
TextField company = new TextField( "company" );
company.add(
StringValidator.MaximumLengthValidator.maximumLength(255));
company.setOutputMarkupId( true );
final TextField street = new TextField( "street" );
street.setRequired( true );
street.add( StringValidator.lengthBetween( 1 ,255 ));
street.setOutputMarkupId( true );
final TextField zipCode = new TextField( "zipCode" );
zipCode.setRequired( true );
zipCode.add( StringValidator.lengthBetween( 1 ,50 ));
zipCode.setOutputMarkupId( true );
final TextField city = new TextField( "city" );
city.setRequired( true );
city.add( StringValidator.lengthBetween( 1 ,255 ));
city.setOutputMarkupId( true );
TextField telePhone = new TextField( "telePhone" );
telePhone.add(
StringValidator.MaximumLengthValidator.maximumLength(50));
telePhone.setOutputMarkupId( true );
TextField cellPhone = new TextField( "cellPhone" );
cellPhone.add(
StringValidator.MaximumLengthValidator.maximumLength(50));
cellPhone.setOutputMarkupId( true );
cellPhone.setOutputMarkupId( true );
TextField socialSecurityNumber = new TextField(
"socialSecurityNumber" );
socialSecurityNumber.add(
StringValidator.exactLength(10));
socialSecurityNumber.setRequired( true );
socialSecurityNumber.setOutputMarkupId( true );
TextField guardian = new TextField( "guardian" );
guardian.add( StringValidator.lengthBetween( 1 ,255 ));
guardian.setOutputMarkupId( true );
final TextField kreditorSocialSecurityNumber = new
TextField(
"kreditorSocialSecurityNumber", new Model( "" ) );
kreditorSocialSecurityNumber.setOutputMarkupId( true );
retrieveAddress.add( kreditorSocialSecurityNumber );
userContainer.add( firstName );
userContainer.add( lastName );
userContainer.add( company );
userContainer.add( street );
userContainer.add( zipCode );
userContainer.add( city );
userContainer.add( email );
userContainer.add( telePhone );
userContainer.add( cellPhone );
userContainer.add( socialSecurityNumber );
userContainer.add( guardian );
userContainer.add( country );
purchaseForm.add( retrieveAddress );
purchaseForm.add( userContainer );
purchaseForm.setOutputMarkupId( true );
final List<PaymentTab> tabs = new
LinkedList<PaymentTab>();
tabs.add( new KreditorTab( new Model( "Faktura" )){
private static final long serialVersionUID = 1L;
public Panel getPanel(String panelId){return
new PaymentMethodPanel(
panelId ){
private static final long
serialVersionUID = 1L;
@Override
public void onPaymentChanged( IPayment
payment, AjaxRequestTarget
target ) {
onPaymentEvent(payment, target);
}
@Override
public List<IPayment> getPayments() {
List<IPayment> payments = new
LinkedList<IPayment>();
for( IPayment payment :
getPaymentFactory().getPayments() ){
if(
payment.getPaymentMethod().equals( PaymentMethod.KREDITOR)){
if(
((KreditorPayment) payment).getCampaign() == -1 ){
if(
payment.getMinimum() < getCartSum()){
payments.add( payment );
}
}
}
}
return payments;
}
@Override
public boolean isVisible(){
if(getPayments().isEmpty())
return false;
if( user.getCountry() == null )
return false;
if(
user.getCountry().getCode().equals( "SE" ) ){
return true;
}
return false;
}
};
}
@Override
public boolean isSwedishOnly() {
return true;
}
});
tabs.add( new PaymentTab( new Model( "Kortbetalning")){
private static final long serialVersionUID = 1L;
public Panel getPanel(String panelId){return
new PaymentMethodPanel(
panelId ){
private static final long
serialVersionUID = 1L;
@Override
public void onPaymentChanged( IPayment
payment, AjaxRequestTarget
target ) {
onPaymentEvent(payment, target);
}
@Override
public List<IPayment> getPayments() {
List<IPayment> payments = new
LinkedList<IPayment>();
for( IPayment payment :
getPaymentFactory().getPayments() ){
if(
payment.getPaymentMethod().equals( PaymentMethod.CREDIT_CARD)){
if(
payment.getMinimum() < getCartSum()){
payments.add( payment );
}
}
}
return payments;
}
};
}
@Override
public boolean isSwedishOnly() {
return false;
}
});
tabs.add( new PaymentTab( new Model(
"Direktbetalning")){
private static final long serialVersionUID = 1L;
public Panel getPanel(String panelId){
return new PaymentMethodPanel( panelId
){
private static final long
serialVersionUID = 1L;
@Override
public void onPaymentChanged(
IPayment payment, AjaxRequestTarget
target ) {
onPaymentEvent(payment,
target);
}
@Override
public List<IPayment>
getPayments() {
List<IPayment> payments
= new LinkedList<IPayment>();
for( IPayment payment :
getPaymentFactory().getPayments() ){
if( payment
instanceof DirectPayment ){
if(
payment.getMinimum() < getCartSum()){
payments.add( payment );
}
}
}
return payments;
}
@Override
public boolean isVisible(){
if(getPayments().isEmpty()) return false;
if( user.getCountry()
== null ) return false;
if(
user.getCountry().getCode().equals( "SE" ) ){
return true;
}
return false;
}
};
}
@Override
public boolean isSwedishOnly() {
return true;
}
});
tabs.add( new KreditorTab( new Model( "Delbetalning")){
private static final long serialVersionUID = 1L;
public Panel getPanel(String panelId){return
new PaymentMethodPanel(
panelId ){
private static final long
serialVersionUID = 1L;
@Override
public void onPaymentChanged( IPayment
payment, AjaxRequestTarget
target ) {
onPaymentEvent(payment, target);
}
@Override
public List<IPayment> getPayments() {
List<IPayment> payments = new
LinkedList<IPayment>();
for( IPayment payment :
getPaymentFactory().getPayments() ){
if( payment instanceof
MonthlyKreditorPayment ){
if(
payment.getMinimum() < getCartSum()){
((MonthlyKreditorPayment)payment).setInformation(
(getKreditorFactory().getPeriodicCost((MonthlyKreditorPayment)payment,
getTotalSum()) + " kr/mån"));
payments.add( payment );
}
}
}
return payments;
}
@Override
public boolean isVisible(){
if(getPayments().isEmpty())
return false;
if( user.getCountry() == null )
return false;
if(
user.getCountry().getCode().equals( "SE" ) ){
return true;
}
return false;
}
};
}
@Override
public boolean isSwedishOnly() {
return true;
}
});
tabs.add( new PaymentTab( new Model( "Postförskott")){
private static final long serialVersionUID = 1L;
public Panel getPanel(String panelId){return
new PaymentMethodPanel(
panelId ){
private static final long
serialVersionUID = 1L;
@Override
public void onPaymentChanged( IPayment
payment, AjaxRequestTarget
target ) {
onPaymentEvent(payment, target);
}
@Override
public List<IPayment> getPayments() {
List<IPayment> payments = new
LinkedList<IPayment>();
for( IPayment payment :
getPaymentFactory().getPayments() ){
if(
payment.getPaymentMethod().equals( PaymentMethod.POST_PARCEL)){
if(
payment.getMinimum() < getCartSum()){
payments.add( payment );
}
}
}
return payments;
}
@Override
public boolean isVisible(){
if(getPayments().isEmpty())
return false;
if( user.getCountry() == null )
return false;
if(
user.getCountry().getCode().equals( "SE" ) ){
return true;
}
return false;
}
};
}
@Override
public boolean isSwedishOnly() {
return true;
}
});
panel = new AjaxTabbedPanel( "paymentMethods" , tabs ){
private static final long serialVersionUID = 1L;
@Override
protected WebMarkupContainer
newLink(java.lang.String linkId, final int
index){
return new AjaxSubmitLink( linkId ){
private static final long
serialVersionUID = 1L;
@Override
public boolean isVisible(){
if( isLoggedIn() ){
/** get the tab
according to index */
PaymentTab tab
= (PaymentTab)getTabs().get( index );
/** Hide the
link if the panel is not visible */
if( !
tab.getPanel(TAB_PANEL_ID).isVisible()) return false;
/** Checj if
the current user can see the tab */
if(
tab.isSwedishOnly() ){
if(
user.getCountry() == null ) return false;
if(
user.getCountry().getCode().equals( "SE" ) ){
return true;
}
return
false;
}
return true;
}
return false;
}
@Override
protected void
onSubmit(AjaxRequestTarget target, Form form) {
setSelectedTab(index);
if( target != null ){
if(
getTabs().get( index ) instanceof KreditorTab ){
retrieveAddress.setVisible( true );
}else{
retrieveAddress.setVisible( false );
}
target.addComponent( panel );
target.addComponent( purchaseForm );
}
}
};
}
};
panel.setOutputMarkupId( true );
purchaseForm.add( panel );
AjaxSubmitLink addressLink = new AjaxSubmitLink(
"addressLink" ){
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget
target, Form arg1) {
if( retrieveAddress.isVisible() ){
try {
KreditorFactory.Address
adress = getKreditorFactory().getAddress(
getStore(), kreditorSocialSecurityNumber.getModelObjectAsString() );
street.setModelObject(
adress.getAddress() );
city.setModelObject(
adress.getCity() );
lastName.setModelObject( adress.getLastName() );
zipCode.setModelObject(
adress.getZipCode() );
} catch (KreditorException e) {
e.printStackTrace();
}
target.addComponent(
userContainer );
}
}
};
retrieveAddress.add( addressLink );
final CheckBox acceptConditions = new CheckBox(
"acceptConditions" , new
Model( false ) );
acceptConditions.setRequired( true );
acceptConditions.setOutputMarkupId( true );
purchaseForm.add( acceptConditions );
AjaxSubmitLink submit = new AjaxSubmitLink( "submit" ,
purchaseForm ){
private static final long serialVersionUID = 1L;
@Override
protected void onError(AjaxRequestTarget
target, Form form) {
target.addComponent( feedBack );
}
@Override
protected void onSubmit(AjaxRequestTarget
target, Form form) {
target.addComponent( feedBack );
if( getPayment() == null ){
info(
getLocalizer().getString( "userContainer.paymenttype.required",
this) );
return;
}
SimpleDateFormat dateFormat = new
SimpleDateFormat( "yyyy-MM-dd" );
if( !
DateValidator.getInstance().isValid(
user.getSocialSecurityNumber(), "yyyy-MM-dd", true ) ){
info( getLocalizer().getString(
"userContainer.socialSecurityNumber.Required", this) );
return;
}
if( user.getCellPhone() == null &&
user.getTelePhone() == null ){
info( getLocalizer().getString(
"userContainer.phone.one.required",
this) );
return;
}
try{
Date date =
dateFormat.parse(user.getSocialSecurityNumber() );
Calendar cal =
Calendar.getInstance();
cal.add(Calendar.YEAR, -18);
if( user.getGuardian() == null
|| user.getGuardian().trim().length()
== 0 ){
if( new Date(
cal.getTimeInMillis() ).before( date ) ){
info(
getLocalizer().getString( "guardian.alert", this) );
return;
}
}
}catch( ParseException pex ){
info( getLocalizer().getString(
"userContainer.socialSecurityNumber.Required", this) );
return;
}
Order order = new Order();
order.setPaymentMethod(
PaymentMethod.POST_PARCEL);
switch(
getPayment().getPaymentMethod()){
case CREDIT_CARD:
order = new
PostenOrder();
((PostenOrder)order).setPostenPaymentMethod(
PostenPaymentMethod.KORTINSE);
order.setPaymentMethod(
PaymentMethod.CREDIT_CARD);
break;
case FSPA:
order = new
PostenOrder();
((PostenOrder)order).setPostenPaymentMethod(
PostenPaymentMethod.FSPA);
order.setPaymentMethod(
PaymentMethod.FSPA );
break;
case NORDEASE:
order = new
PostenOrder();
((PostenOrder)order).setPostenPaymentMethod(
PostenPaymentMethod.NORDEASE);
order.setPaymentMethod(
PaymentMethod.NORDEASE );
break;
case KREDITOR:
order = new
KreditorOrder();
((KreditorOrder)order).setClientIP(((WebRequest)getRequest()).getHttpServletRequest().getRemoteAddr());
((KreditorOrder)order).setCampaign(
((KreditorPayment)getPayment()).getCampaign() );
order.setPaymentMethod(
PaymentMethod.KREDITOR );
break;
}
order.setOrderDate( new Date() );
order.transferUserData(user);
order.setCurrencyRate(
getStore().getCurrency().getRate() );
order.setCurrency(
getStore().getCurrency() );
order.setStore(getStore());
order.setSocialSecurityNumber(
kreditorSocialSecurityNumber.getModelObjectAsString() );
/**
* Iterate cart
*/
Cart cart = getCart();
boolean splitOrder =
cart.isSplitOrder();
Date latestDeliveryDate =
cart.getLatestDelivery();
//TODO: Fix latest delivery date
/**
* If the order is split in two then
* we should get 2 freight costs.
*/
float freightCost =
getTotalFreightCharge();
Translator translator = new Translator(
getStore() );
for( CartItem cartItem :
cart.getCartItems() ){
SubItem subItem =
cartItem.getSubItem();
OrderItem orderItem = new
OrderItem();
orderItem.setQuantity(
cartItem.getAmount() );
Item item = subItem.getItem();
orderItem.setDiscount(
item.getActualDiscount() );
orderItem.setPrice( format(
item.getMemberPrice() ).get() );
orderItem.setDiscountedPrice(
format(
item.getActualMemberPrice()).get() );
translator.translate( item );
StringBuffer buf = new
StringBuffer();
buf.append(
subItem.getItem().getBrand().getName() + " " +
item.getName() + " " );
for( Attribute attribute :
subItem.getAttributes() ){
buf.append(
attribute.getData() + " " +
getStore().getSite().getStyle().getAttributeSeparatorChar() + " " );
}
buf.delete( buf.length() - 2,
buf.length());
orderItem.setName(
buf.toString() );
orderItem.setItemReference(
item.getId() );
orderItem.setSubItemReference(
subItem.getId() );
orderItem.setEarliestDeliveryDate( new Date() );
order.addOrderItem( orderItem );
}
/**
* Add freight order item
*/
OrderItem item = new OrderItem();
item.setEarliestDeliveryDate( new
Date() );
item.setDiscountedPrice( freightCost );
item.setPrice( freightCost );
item.setName( "Frakt kostnad" );
item.setSubItemReference( 1L );
item.setQuantity( 1L );
order.addOrderItem( item );
/**
* Add payment cost order item
*/
if( getPayment().getCost() > 0 ){
item = new OrderItem();
item.setEarliestDeliveryDate(
new Date() );
item.setDiscountedPrice(
getPayment().getCost() );
item.setPrice(
getPayment().getCost() );
item.setName(
getPayment().getName() );
item.setSubItemReference( 2L );
item.setQuantity( 1L );
order.addOrderItem( item );
}
if( order instanceof KreditorOrder ){
try {
String reservation =
getKreditorFactory().reserveAmount(
(KreditorOrder)order);
((KreditorOrder)order).setReservation(reservation);
} catch (KreditorException e) {
e.printStackTrace();
return;
}
}
getOrderDao().save( order );
cart = null;
cart = new Cart();
cart.setAddedDate( new Date() );
cart = getCartDao().newCart(cart);
((HairlessSession)
getSession()).setCartId( cart.getId() );
setResponsePage( new OrderInterceptor(
order ));
}
@Override
public boolean isEnabled(){
if( ! isLoggedIn() ) return false;
return true;
}
};
/**
purchaseForm.add( new Link( "termsLink" ){
private static final long serialVersionUID = 1L;
@Override
public void onClick(){
setResponsePage( new Terms());
}
});*/
purchaseForm.add( submit );
add( purchaseForm );
}
}
private abstract class PaymentTab extends AbstractTab{
private static final long serialVersionUID = 1L;
public PaymentTab(IModel title) {
super(title);
}
public abstract boolean isSwedishOnly();
}
private abstract class KreditorTab extends PaymentTab{
private static final long serialVersionUID = 1L;
public KreditorTab(IModel title) {
super(title);
}
}
private float getTotalSum(){
float sum = 0;
if( isLoggedIn() ){
sum += getTotalFreightCharge();
}
if( getPayment() != null ){
sum += format(getPayment().getCost()).get();
}
sum += getCartSum();
return sum;
}
private float getCartSum(){
float total = 0;
for( CartItem cartItem : getCart().getCartItems() ){
Item item = cartItem.getSubItem().getItem();
total += format(item.getActualMemberPrice()).get() *
cartItem.getAmount();
}
return total;
}
private float getTotalFreightCharge(){
Cart cart = getCart();
float freightCost = 0;
if( cart.isSplitOrder() ){
List<CartItem> deliverableCartItems =
getCartDao().getDeliverableCartItems( cart.getId() );
List<CartItem> preOrderCartItems =
getCartDao().getPreOrderCartItems(
cart.getId() );
freightCost += getFreightCharge( deliverableCartItems );
freightCost += getFreightCharge( preOrderCartItems );
}else{
freightCost += getFreightCharge( cart.getCartItems() );
}
return freightCost;
}
private float getFreightCharge( List<CartItem> cartItems ){
float serviceCharge = user.getCountry().getServiceCharge();
/**
* The freight cost is calculated by the
* items that is not on sale.
*/
float freightCostBasis = 0;
for( CartItem cartItem : cartItems ){
Item item = cartItem.getSubItem().getItem();
if( ! item.isOnSale() ){
freightCostBasis += item.getActualMemberPrice()
* cartItem.getAmount();
}
}
FreightCost freightCost = getCountryDao().getFreightCost(
freightCostBasis, user.getCountry());
float actualFreightCost = 0;
if( freightCost != null ){
actualFreightCost = freightCost.getCost();
}
return format(actualFreightCost).get() +
format(serviceCharge).get() ;
}
}
--
View this message in context:
http://www.nabble.com/AjaxTabbedPanel-stopped-working.-tp22639328p22639328.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
