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

Reply via email to