Hi Rob,
Thanks for the question, to allow for this replace the current cartsummary.aspx with the following:
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="False" MasterPageFile="theme.Master"
Inherits="FourRoads.CsShop.Core.Controls.CSShopThemePage" %>
<%@ Register TagPrefix="FRS" TagName="CartSummary" Src="CartSummary-Full.ascx" %>
<%@ Import Namespace="CommunityServer.Components" %>
<%@ Import Namespace="FourRoads.CsShop.Core.Components" %>
<%@ Import Namespace="FourRoads.CsShop.Core.Gateways" %>
<%@ Register TagPrefix="FRS" TagName="CartAddressSelector" Src="CartAddressSelector.ascx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="bcr" runat="Server">
<script language="C#" runat="server">
void Page_Load ( )
{
StartPaymentLink link = ShopControlUtility.Instance ( ).FindControl ( PaymentControls, "DefaultPaymentGateway" ) as StartPaymentLink;
link.ToolTip = FourRoads.CsShop.Core.Components.ResourceManager.GetString ( "Shop_PayUsingProviderHelp" );
SetTitle ( FourRoads.CsShop.Core.Components.ResourceManager.GetString ( "Shop_CartSummaryTitle" ), false );
Control addresSel = ShopControlUtility.Instance ( ).FindControl ( CartSummary, "CartAddressSelector" );
CartAddressForm form = ShopControlUtility.Instance ( ).FindControl ( addresSel, "CartAddressForm" ) as CartAddressForm;
if ( !form.IsValid ( ) )
{
WebControl ctrl = ( ( WebControl )ShopControlUtility.Instance ( ).FindControl ( CartSummary, "ProcessZeroOrderBtn" ) );
ctrl.Style.Add ( "color", "grey" );
ctrl.Enabled = false;
}
}
bool IsZeroValueOrder
{
get
{
Cart cart = ShopControlUtility.Instance ( ).GetCurrentCart ( this );
return System.Convert.ToInt32 ( cart.OrderTotal ) == 0;
}
}
void ProcesssZeroValueOrder ( object sender, EventArgs args )
{
Cart cart = ShopControlUtility.Instance ( ).GetCurrentCart ( this );
GatewayConfiguration gw = new GatewayConfiguration ( );
Order freeOrder = new Order ( cart, gw.GetCurrentlyEnabledGateway ( ), true );
freeOrder.ProcessSuccessfulPayment ( );
Response.Redirect ( ShopUrls.Instance ( ).ShopHomePage ( CSContext.Current.ApplicationKey ) );
}
</script>
<div class="ShopPostArea None">
<FRS:ResourceControl Tag="h2" ResourceName="Shop_CartSummaryTitle" runat="server">
</FRS:ResourceControl>
<FRS:CartSummary runat="server" ID="CartSummary"></FRS:CartSummary>
<table width="100%">
<CSControl:PlaceHolder runat="server" Id="PaymentControls">
<DisplayConditions Operator="Or">
<CSControl:Conditions Operator="And" runat="server">
<CSControl:UserPropertyValueComparison runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<FRS:ShopDataPropertyValueComparison runat="server" ComparisonProperty="EnableAnonymousOrders" Operator="IsSetOrTrue" />
</CSControl:Conditions>
<CSControl:Conditions Operator="Not" runat="server">
<CSControl:UserPropertyValueComparison runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
</CSControl:Conditions>
</DisplayConditions>
<ContentTemplate>
<CSControl:PlaceHolder runat="server" >
<DisplayConditions>
<CSControl:CustomCondition runat="server" CustomResult="<%# IsZeroValueOrder %>"></CSControl:CustomCondition>
</DisplayConditions>
<ContentTemplate>
<CSControl:PlaceHolder runat="server" >
<DisplayConditions Operator="Not" >
<CSControl:Conditions Operator="And" runat="server">
<CSControl:UserPropertyValueComparison ID="UserPropertyValueComparison2" runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<FRS:CartDataPropertyValueComparison runat="server" ComparisonProperty="HasSubscription" Operator="IsSetOrTrue" />
</CSControl:Conditions>
</DisplayConditions>
<ContentTemplate>
<tr>
<td colspan="2">
<FRS:CartAddressSelector runat="server" id="CartAddressSelector"/><br />
<FRS:ResourceLinkButton runat="server" CssClass="CommonTextButton" ResourceName="Shop_CompleteOrder_Title" ID="ProcessZeroOrderBtn" OnClick="ProcesssZeroValueOrder"></FRS:ResourceLinkButton>
</td>
</tr>
</ContentTemplate>
</CSControl:PlaceHolder>
</ContentTemplate>
</CSControl:PlaceHolder>
<CSControl:PlaceHolder runat="server" >
<DisplayConditions>
<CSControl:CustomCondition runat="server" CustomResult="<%# !IsZeroValueOrder %>"></CSControl:CustomCondition>
</DisplayConditions>
<ContentTemplate>
<tr>
<td style="width:100%">
<FRS:AlternativePaymentLink GatewaySystemName="PAYPALECPAYMENTGATEWAYV1" runat="server">
</FRS:AlternativePaymentLink>
</td>
<td>
<FRS:StartPaymentLink CausesValidation="false" ID="DefaultPaymentGateway" runat="server"
CssClass="CommonTextButton" ResourceName="Shop_PayUsingProvider"></FRS:StartPaymentLink>
</td>
</tr>
</ContentTemplate>
</CSControl:PlaceHolder>
</ContentTemplate>
</CSControl:PlaceHolder>
<CSControl:PlaceHolder runat="server" >
<ContentTemplate>
<tr>
<td>
<CSControl:PlaceHolder runat="server" ID="SubscriptionMessages">
<DisplayConditions>
<FRS:CartDataPropertyValueComparison runat="server" ComparisonProperty="HasSubscription" Operator="IsSetOrTrue" />
</DisplayConditions>
<ContentTemplate>
<FRS:ResourceControl runat="server" ResourceName="Shop_Checkout_MustBeUser" ID="MustBeUser">
<DisplayConditions Operator="And">
<CSControl:UserPropertyValueComparison ID="UserPropertyValueComparison2" runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<CSControl:Conditions Operator="Not" runat="server">
<CSControl:SiteSettingsPropertyValueComparison ComparisonProperty="AccountActivation" ComparisonValue="InvitationOnly" Operator="EqualTo" runat="server" />
</CSControl:Conditions>
</DisplayConditions>
</FRS:ResourceControl>
<FRS:ResourceControl runat="server" ResourceName="Shop_Checkout_SubscriptionsInviteOnly" ID="SubscriptionsInviteOnly">
<DisplayConditions Operator="And">
<CSControl:UserPropertyValueComparison ID="UserPropertyValueComparison3" runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<CSControl:SiteSettingsPropertyValueComparison ComparisonProperty="AccountActivation" ComparisonValue="InvitationOnly" Operator="EqualTo" runat="server" />
</DisplayConditions>
</FRS:ResourceControl>
</ContentTemplate>
</CSControl:PlaceHolder>
<CSControl:PlaceHolder runat="server">
<DisplayConditions Operator="Or">
<CSControl:Conditions runat="server" Operator="Not">
<FRS:CartDataPropertyValueComparison runat="server" ComparisonProperty="HasSubscription" Operator="IsSetOrTrue" />
</CSControl:Conditions>
<CSControl:ControlVisibilityCondition ControlId="SubscriptionMessages" ControlVisiblilityEquals="true" runat="server"></CSControl:ControlVisibilityCondition>
</DisplayConditions>
<ContentTemplate>
<FRS:ResourceControl runat="server" ResourceName="Shop_Checkout_NotMemberInvite">
<DisplayConditions Operator="And">
<CSControl:UserPropertyValueComparison ID="UserPropertyValueComparison1" runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<CSControl:Conditions Operator="Not" runat="server">
<CSControl:SiteSettingsPropertyValueComparison ComparisonProperty="AccountActivation" ComparisonValue="InvitationOnly" Operator="EqualTo" runat="server" />
</CSControl:Conditions>
<CSControl:ControlVisibilityCondition ControlId="MustBeUser" ControlVisiblilityEquals="false" runat="server"></CSControl:ControlVisibilityCondition>
<CSControl:ControlVisibilityCondition ControlId="SubscriptionsInviteOnly" ControlVisiblilityEquals="false" runat="server"></CSControl:ControlVisibilityCondition>
</DisplayConditions>
</FRS:ResourceControl>
</ContentTemplate>
</CSControl:PlaceHolder>
</td>
<td>
<CSControl:SiteUrl LinkCssClass="CommonTextButton" runat="server" UrlName="user_Register_clean" id="JoinUrl" ResourceName="register" >
<DisplayConditions Operator="And">
<CSControl:UserPropertyValueComparison ID="UserPropertyValueComparison1" runat="server" UseAccessingUser="true" ComparisonProperty="IsAnonymous" Operator="IsSetOrTrue" />
<CSControl:Conditions Operator="Not" runat="server">
<CSControl:SiteSettingsPropertyValueComparison ID="SiteSettingsPropertyValueComparison1" ComparisonProperty="AccountActivation" ComparisonValue="InvitationOnly" Operator="EqualTo" runat="server" />
</CSControl:Conditions>
</DisplayConditions>
</CSControl:SiteUrl>
</td>
</tr>
</ContentTemplate>
</CSControl:PlaceHolder>
</table>
</div>
</asp:Content>