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: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org