From 0a12c206917d109d31ff21919cc4df9a59684573 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 18 Mar 2009 13:06:00 +0000 Subject: [PATCH] Adding minimum checkout amount. --- docs/changelog/7.x.x.txt | 1 + .../default-shopping-cart-template.wgpkg | Bin 0 -> 2352 bytes docs/upgrades/upgrade_7.6.14-7.7.0.pl | 13 ++++++++++- lib/WebGUI/Shop/Admin.pm | 15 +++++++++++++ lib/WebGUI/Shop/Cart.pm | 21 +++++++++++++----- lib/WebGUI/i18n/English/Shop.pm | 17 ++++++++++++++ 6 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 docs/upgrades/packages-7.7.0/default-shopping-cart-template.wgpkg diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 5716e6758..5ddb6fcc4 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -19,6 +19,7 @@ - added Survey now has a loading mask on Survey edit ajax calls. - fixed: Sliders fixed. Improved algorithm for determining pixel step size. - rfe #9355: Password Recovery email subject (SDH Consulting Group) + - added: Users can now set a minimum cart amount required for checkout. (Martin Kamerbeek / Oqapi ) 7.6.14 - fixed: IE6 shows Admin Bar over Asset Manager diff --git a/docs/upgrades/packages-7.7.0/default-shopping-cart-template.wgpkg b/docs/upgrades/packages-7.7.0/default-shopping-cart-template.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..ff866b14683bf3f2dc4df77a73006c64e801cdff GIT binary patch literal 2352 zcmV-03D5Q)iwFP!000001MOP-PaC-w=I8w@MnSqNQUeJgL>ah|SSYvX_CZ_NYWHRr zIWtb;GGk9|50I|vlIbTCH}k z+uGRZ^vowHKCO**yS?9P?|0k1&PLE~wY$BI0A6|ePc9_l;982fB=r9FV3P1rlQjR{ zU(?_EruMd7{_gDQ@B733+JB*idPnbi6lSw2dLnBus6m*U&cgvRVvD{YknVn$ge$hDxo&$fbay!Nembf|{85a^tpcVICFA9V?=1DNrAiM)q`Hoqnet7KQ< zpn^vz^qN{(1HYIMs$x4o|I)=!u!O{cAju81hIS=aR#_E!3I=9#R_C%h*c^A%kC)a% z=^6(#4d7m;d+0Bo)Kcr)&h|D=GdZgUe%?MbXDTwpF|9T)i-B&`A!XFB{55RbnptK& zbn^~!p1k<&lqC2PzPO&>jG*bOo|3>S#Zl6P&XbBAS2^2XvdPxLRsjDGR22u5H95{; zCH!ju!TUN%AKy!zt-hQ3!F~NKo66&Q>U9|Bt9kSwRK4nd5_c=uT7Mq`uYffos!sh-TzqSPxh-X(oHYTA@fhWaY*s58syI_6UCI;j zn#3`t`lYu2{G2n%6ho|&P{la1v-nj^WSwgk`V|>Ilwj zKLWmKWNr|5LOUQeINY(X8a@gfrqGoFX#!?m)n*@7^c8|DH7d(v##6D zAj4Rl9p^$3BZyXPklV3ST{-1N(nVgFJ%B|{Bc_})>J5OpH~_v{4}e#GJEO2zQ6veY zD0!iltd|P6t%ItHx?sjhgx8Y%nj;8@oUJ7cI}=P}90yDF+wxctL${xTjG6Nmc#xV} z;F#qCXNu4$JurEf*veqSVA0mgxy^QnuPsWw>nSSj>gxT;$<@^WHV2@>_&V?-Q@*E3 zekGkbPT5V7&g(|dOF2fzWRi0nUl5rcfCC-Q=%n5(L_UHw93@4Muwr#6ibZL`92YcP&B_!S#S-BREhqz6^ZudPOLX_- z69*g15=(FY{G55DV0#=whiggbEiI@c5O_gb-ZBmqNeNu&^?{#0((7k;Fe9(p%M7T| z5GMn47F4-%u9cvlcZD@?W!H&z09$_v-6pXIeNeET57p_Y#`Zo_3_vU~d7oSaGN@0L zfZP|B|GdL2D@p>u0xb#P=olz;Jw8Qgy2~JKXdzJbu)L^sYIK80;x*~ei#?%=8XapF zj-1?JtFUgGpG$zbkf^jSLhtK3!Eqib{2!$%)Cq&yQau9dPud4vTP+~b)?71mqqXE; zBNHu!NC_oro~lj7Q3}VsQs*|X?4q^aXZt)oulaNj19%)eJ2oId31=$wxL)Uqu=HW}d>rE@!jSW5##|X$>u{-s4lY_%ieZ@C1 zf-P;)S4MLoC<5Ot${4tE#)P>*@+#XtqbLP#t2re!2)h+1>mQ`vFm|11u-QyYYyNV# z&V&oiYUxU{DPyp^H8=u3-boFeVooF+-=1=op6iq3 z`jJfnJ=ET3Hp;v0mcHk9H{7L0&DY*R%(a@&c=VskvoJhTr%+*dF?WQduQHFPh)$N> zgT7@k856kSRL4T?-A=F5>+g5G%Tm}>C&rq-ZG3TJPOr8~pX{O2PXwDw(Ox-3ggS~+ z>zvVFj)-fLy<-w=NBUHt4oiw@uJ@OEV3}z(zuerM!oG*YzSg^{)n{{`;I>n%*za_^ zrFl5jhZ|Wvumr>~e0}lu%{-(83M#sGa8@pkiLl_*C*y}fkM;Y#e!tt>_3n>3z99k@ z=M#7NTm)mcbeo8CxL0)P;++WsYq>q6s>lr*-jM1L>Nw26ps2-;g0obLX~bulJa=k6 zrzD!#!_AN4tl2-pA9D2mRdV?u{W+cDw;xI+unV3EIQytiT~EuQYUnHYMaiLW z?yFd|`u*K@yYJbzaNe52=DgXduorIPE literal 0 HcmV?d00001 diff --git a/docs/upgrades/upgrade_7.6.14-7.7.0.pl b/docs/upgrades/upgrade_7.6.14-7.7.0.pl index 8140cae2a..2ec1eaa05 100644 --- a/docs/upgrades/upgrade_7.6.14-7.7.0.pl +++ b/docs/upgrades/upgrade_7.6.14-7.7.0.pl @@ -39,6 +39,7 @@ surveyDoAfterTimeLimit($session); surveyRemoveResponseTemplate($session); surveyEndWorkflow($session); installAssetHistory($session); +addMinimumCartCheckoutSetting( $session ); # Passive Analytics pa_installLoggingTables($session); @@ -303,13 +304,23 @@ sub addTransactionItemFlags { #---------------------------------------------------------------------------- sub createShopAcccountPluginSettings { my $session = shift; - print "Creating default settings for the account plugin..." unless $quiet; + print "\tCreating default settings for the account plugin..." unless $quiet; $session->setting->add('shopMySalesTemplateId', '-zxyB-O50W8YnL39Ouoc4Q'); print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- +sub addMinimumCartCheckoutSetting { + my $session = shift; + print "\tAdding setting for minimum cart checkout..." unless $quiet; + + $session->setting->add( 'shopCartCheckoutMinimum', '0.00' ); + + print "Done.\n" unless $quiet; +} + #---------------------------------------------------------------------------- # Describe what our function does #sub exampleFunction { diff --git a/lib/WebGUI/Shop/Admin.pm b/lib/WebGUI/Shop/Admin.pm index bcc7ef7d5..e8d92017b 100644 --- a/lib/WebGUI/Shop/Admin.pm +++ b/lib/WebGUI/Shop/Admin.pm @@ -152,6 +152,13 @@ sub www_editSettings { label => $i18n->get('who is a cashier'), hoverHelp => $i18n->get('who is a cashier help'), ); + $form->float( + name => 'shopCartCheckoutMinimum', + value => $setting->get('shopCartCheckoutMinimum'), + defaultValue=> '0.00', + label => $i18n->get('cart checkout minimum'), + hoverHelp => $i18n->get('cart checkout minimum help'), + ); $form->template( name => "shopCartTemplateId", value => $setting->get("shopCartTemplateId"), @@ -203,13 +210,21 @@ sub www_editSettingsSave { my $self = shift; return $self->session->privilege->adminOnly() unless ($self->session->user->isAdmin); my ($setting, $form) = $self->session->quick(qw(setting form)); + + # Save shop templates foreach my $template (qw(shopMyPurchasesDetailTemplateId shopMyPurchasesTemplateId shopCartTemplateId shopAddressBookTemplateId shopAddressTemplateId)) { $setting->set($template, $form->get($template, "template")); } + + # Save group settings foreach my $group (qw(groupIdCashier groupIdAdminCommerce)) { $setting->set($group, $form->get($group, "group")); } + + # Save mininmum cart checkout + $setting->set( 'shopCartCheckoutMinimum', $form->get( 'shopCartCheckoutMinimum', 'float' ) ); + return $self->www_editSettings(); } diff --git a/lib/WebGUI/Shop/Cart.pm b/lib/WebGUI/Shop/Cart.pm index 82c4e6135..8d18a7802 100644 --- a/lib/WebGUI/Shop/Cart.pm +++ b/lib/WebGUI/Shop/Cart.pm @@ -498,7 +498,7 @@ Returns whether all the required properties of the the cart are set. sub readyForCheckout { my $self = shift; - + # Check if the shipping address is set and correct my $address = eval{$self->getShippingAddress}; return 0 if WebGUI::Error->caught; @@ -513,6 +513,12 @@ sub readyForCheckout { # fail if there are multiple recurring items or if return 0 if ($self->hasMixedItems); + # Check minimum cart checkout requirement + my $requiredAmount = $self->session->setting->get( 'shopCartCheckoutMinimum' ); + if ( $requiredAmount > 0 ) { + return 0 if $self->calculateTotal < $requiredAmount; + } + # All checks passed so return true return 1; } @@ -801,6 +807,10 @@ sub www_view { shipToButton => WebGUI::Form::submit($session, {value=>$i18n->get("ship to button"), extras=>q|onclick="setCallbackForAddressChooser(this.form);"|}), subtotalPrice => $self->formatCurrency($self->calculateSubtotal()), + minimumCartAmount => $session->setting->get( 'shopCartCheckoutMinimum' ) > 0 + ? sprintf( '%.2f', $session->setting->get( 'shopCartCheckoutMinimum' ) ) + : 0 + , ); # get the shipping address @@ -846,10 +856,11 @@ sub www_view { # calculate price adjusted for in-store credit $var{totalPrice} = $var{subtotalPrice} + $var{shippingPrice} + $var{tax}; my $credit = WebGUI::Shop::Credit->new($session, $posUser->userId); - $var{inShopCreditAvailable} = $credit->getSum; - $var{inShopCreditDeduction} = $credit->calculateDeduction($var{totalPrice}); - $var{totalPrice} = $self->formatCurrency($var{totalPrice} + $var{inShopCreditDeduction}); - + $var{ inShopCreditAvailable } = $credit->getSum; + $var{ inShopCreditDeduction } = $credit->calculateDeduction($var{totalPrice}); + $var{ totalPrice } = $self->formatCurrency($var{totalPrice} + $var{inShopCreditDeduction}); + $var{ readyForCheckout } = $self->readyForCheckout; + # render the cart my $template = WebGUI::Asset::Template->new($session, $session->setting->get("shopCartTemplateId")); return $session->style->userStyle($template->process(\%var)); diff --git a/lib/WebGUI/i18n/English/Shop.pm b/lib/WebGUI/i18n/English/Shop.pm index 8311e03b4..86e202b3d 100644 --- a/lib/WebGUI/i18n/English/Shop.pm +++ b/lib/WebGUI/i18n/English/Shop.pm @@ -1528,6 +1528,23 @@ our $I18N = { context => q|template variable for Cart template|, }, + 'cart checkout minimum' => { + message => q|Minimum checkout amount|, + lastUpdated => 0, + context => q|shop setting label|, + }, + + 'cart checkout minimum help' => { + message => q|Use this setting to require a minimum cart value to allow users to check out.|, + lastUpdated => 0, + context => q|shop setting hover help|, + }, + + 'required minimum order amount' => { + message => q|Minimum order:|, + lastUpdated => 0, + context => q|message that is displayed in the cart view screen|, + }, }; 1;