diff --git a/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg b/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg
index 7a3a59c81..f19fdad66 100644
Binary files a/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg and b/docs/upgrades/packages-7.5.3/shopping-cart-collateral-items-1.wgpkg differ
diff --git a/lib/WebGUI/Shop/Cart.pm b/lib/WebGUI/Shop/Cart.pm
index 8bd49398a..837fee2e5 100644
--- a/lib/WebGUI/Shop/Cart.pm
+++ b/lib/WebGUI/Shop/Cart.pm
@@ -345,7 +345,7 @@ Calls onCompletePurchase() on all the items in the cart. Then deletes all the it
sub onCompletePurchase {
my $self = shift;
foreach my $item (@{$self->getItems}) {
- $item->getSku->completePurchase($item);
+ $item->getSku->onCompletePurchase($item);
$item->delete;
}
$self->delete;
@@ -459,6 +459,12 @@ sub www_update {
}
}
}
+
+ my $cartProperties;
+ $cartProperties->{ shipperId } = $form->process( 'shipperId' ) if $form->process( 'shipperId' );
+ $cartProperties->{ couponId } = $form->process( 'couponId' ) if $form->process( 'couponId' );
+ $self->update( $cartProperties );
+
return $self->www_view;
}
@@ -520,7 +526,7 @@ sub www_view {
formFooter => WebGUI::Form::formFooter($session),
updateButton => WebGUI::Form::submit($session, {value=>$i18n->get("update cart button")}),
checkoutButton => WebGUI::Form::submit($session, {value=>$i18n->get("checkout button"),
- extras=>q|onclick="this.form.shop.value='pay';this.form.methodvalue='viewOptions';this.form.submit;"|}),
+ extras=>q|onclick="this.form.shop.value='pay';this.form.method.value='selectPaymentGateway';this.form.submit;"|}),
continueShoppingButton => WebGUI::Form::submit($session, {value=>$i18n->get("continue shopping button"),
extras=>q|onclick="this.form.method.value='continueShopping';this.form.submit;"|}),
chooseShippingButton => WebGUI::Form::submit($session, {value=>$i18n->get("choose shipping button"),
diff --git a/lib/WebGUI/Shop/CartItem.pm b/lib/WebGUI/Shop/CartItem.pm
index 31ce96f2b..bd17139e7 100644
--- a/lib/WebGUI/Shop/CartItem.pm
+++ b/lib/WebGUI/Shop/CartItem.pm
@@ -159,7 +159,9 @@ Returns the WebGUI::Shop::Address object that is attached to this item for shipp
sub getShippingAddress {
my $self = shift;
- return $self->cart->getAddressBook->getAddress($self->get("shippingAddressId"));
+
+ my $addressId = $self->get("shippingAddressId") || $self->cart->get("shippingAddressId");
+ return $self->cart->getAddressBook->getAddress($addressId);
}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/Shop/Pay.pm b/lib/WebGUI/Shop/Pay.pm
index 302933ee6..88ec7811b 100644
--- a/lib/WebGUI/Shop/Pay.pm
+++ b/lib/WebGUI/Shop/Pay.pm
@@ -66,6 +66,7 @@ sub addPaymentGateway {
WebGUI::Error::InvalidParam->throw(error => q{You must pass a hashref of options to create a new PayDriver object})
unless defined($options) and ref $options eq 'HASH' and scalar keys %{ $options };
my $driver = eval { WebGUI::Pluggable::instanciate($requestedClass, 'create', [ $self->session, $label, $options ]) };
+
return $driver;
}
@@ -103,13 +104,15 @@ A WebGUI::Shop::Cart object. A WebGUI::Error::InvalidParam exception will be th
sub getOptions {
my ($self, $cart) = @_;
WebGUI::Error::InvalidParam->throw(error => q{Need a cart.}) unless defined $cart and $cart->isa("WebGUI::Shop::Cart");
+
my $session = $cart->session;
my %options = ();
- foreach my $gateway (@{$self->getPaymentGateways()}) {
+
+ foreach my $gateway (@{ $self->getPaymentGateways() }) {
$options{$gateway->getId} = {
- label => $gateway->get("label"),
- button => $gateway->getButton($cart),
- };
+ label => $gateway->get("label"),
+ button => $gateway->getButton($cart),
+ };
}
return \%options;
}
@@ -192,6 +195,39 @@ Returns a reference to the current session.
=cut
+#-------------------------------------------------------------------
+sub www_addPaymentGateway {
+ my $self = shift;
+ my $session = $self->session;
+
+ my $className = $session->form->process('className')
+ || WebGUI::Error::InvalidParam->throw(error => 'No class name passed');
+
+ my $payDriver = $self->addPaymentGateway( $className, $className->getName( $session ), { enabled => 0 } );
+ return $payDriver->www_edit;
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_deletePaymentGateway ()
+
+Deletes a payment gateway from the shop.
+
+=cut
+
+sub www_deletePaymentGateway {
+ my $self = shift;
+ my $session = $self->session;
+
+ my $paymentGatewayId = $session->form->process('paymentGatewayId')
+ || WebGUI::Error::InvalidParam->throw(error => q{www_deletePaymentGateway requires a paymentGatewayId to be passed});
+
+ my $payDriver = $self->getPaymentGateway( $paymentGatewayId );
+ $payDriver->delete;
+
+ return $self->www_manage;
+}
+
#-------------------------------------------------------------------
=head2 www_do ( )
@@ -203,13 +239,18 @@ Let's payment gateway drivers do method calls. Requires a driver param in the po
sub www_do {
my ($self) = @_;
my $form = $self->session->form;
- WebGUI::Error::InvalidParam->throw(error => q{must have a form var called driver with a driver id }) if ($form->get("driver") eq "");
- WebGUI::Error::InvalidParam->throw(error => q{must have a form var called do with a www_ method to call }) if ($form->get("do") eq "");
- my $driver = $self->getPaymentGateway($form->get("driver"));
+ my $paymentGatewayId = $form->get("paymentGatewayId")
+ || WebGUI::Error::InvalidParam->throw(error => q{must have a form var called driver with a payment gateway id});
+
+ my $do = $form->get("do")
+ || WebGUI::Error::InvalidParam->throw(error => q{must have a form var called do with a www_ method to call});
+
+ my $payDriver = $self->getPaymentGateway( $paymentGatewayId );
+
my $output = undef;
- my $method = "www_". ( $form->get("do"));
- if ($driver->can($method)) {
- $output = $driver->$method();
+ my $method = "www_$do";
+ if ($payDriver->can($method)) {
+ $output = $payDriver->$method();
}
return $output;
}
@@ -223,22 +264,76 @@ The main management screen for payment gateways.
=cut
sub www_manage {
- my ($self) = @_;
+ my $self = shift;
my $session = $self->session;
+ my $admin = WebGUI::Shop::Admin->new($session);
+ my $i18n = WebGUI::International->new($session, "Pay");
+
return $session->privilege->adminOnly() unless ($session->user->isInGroup("3"));
- my $admin = WebGUI::Shop::Admin->new($session);
- my $i18n = WebGUI::International->new($session, "Shop");
+
+ # Button for adding a payment gateway
my $output = WebGUI::Form::formHeader($session)
- .WebGUI::Form::hidden($session, {name=>"shop", value=>"pay"})
- .WebGUI::Form::hidden($session, {name=>"method", value=>"addDriver"})
- .WebGUI::Form::selectBox($session, {name=>"className", options=>$self->getDrivers})
- .WebGUI::Form::submit($session, {value=>$i18n->get("add payment method")})
+ .WebGUI::Form::hidden($session, { name => "shop", value => "pay" })
+ .WebGUI::Form::hidden($session, { name => "method", value => "addPaymentGateway" })
+ .WebGUI::Form::selectBox($session, { name => "className", options => $self->getDrivers })
+ .WebGUI::Form::submit($session, { value => $i18n->echo("add payment method") })
.WebGUI::Form::formFooter($session);
- foreach my $payer (@{$self->getPaymentGateways}) {
-
+
+ # Add a row with edit/delete buttons for each payment gateway.
+ foreach my $paymentGateway (@{$self->getPaymentGateways}) {
+ $output .= '
'
+ # Delete button for the current payment gateway.
+ .WebGUI::Form::formHeader($session, {extras=>'style="float: left;"' })
+ .WebGUI::Form::hidden($session, { name => "shop", value => "pay" })
+ .WebGUI::Form::hidden($session, { name => "method", value => "deletePaymentGateway" })
+ .WebGUI::Form::hidden($session, { name => "paymentGatewayId", value => $paymentGateway->getId })
+ .WebGUI::Form::submit($session, { value => $i18n->echo("delete"), extras => 'class="backwardButton"' })
+ .WebGUI::Form::formFooter($session)
+
+ # Edit button for current payment gateway
+ .WebGUI::Form::formHeader($session, {extras=>'style="float: left;"' })
+ .WebGUI::Form::hidden($session, { name => "shop", value => "pay" })
+ .WebGUI::Form::hidden($session, { name => "method", value => "do" })
+ .WebGUI::Form::hidden($session, { name => "do", value => "edit" })
+ .WebGUI::Form::hidden($session, { name => "paymentGatewayId", value => $paymentGateway->getId })
+ .WebGUI::Form::submit($session, { value => $i18n->echo("edit"), extras => 'class="normalButton"' })
+ .WebGUI::Form::formFooter($session)
+
+ # Append payment gateway label
+ .' '. $paymentGateway->get("label")
+ .'
';
}
+
+ # Wrap in admin console
my $console = $admin->getAdminConsole;
- return $console->render($output, $i18n->get("payment methods"));
+ return $console->render($output, $i18n->echo("payment methods"));
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_selectPaymentGateway ( )
+
+The screen in which a customer chooses a payment gateway.
+
+TODO: Template this screen.
+=cut
+
+sub www_selectPaymentGateway {
+ my $self = shift;
+ my $session = $self->session;
+
+ my $cart = WebGUI::Shop::Cart->getCartBySession( $session );
+ my $i18n = WebGUI::International->new( $session, 'Shop' );
+
+ # All the output stuff is just a placeholder until it's templated.
+ my $output .= $i18n->echo('Choose one of the following payment gateways to check out:');
+ $output .= '';
+ foreach my $payOption ( values %{$self->getOptions( $cart )} ) {
+ $output .= '| ' . $payOption->{label} . ' | ' . $payOption->{button} . ' |
';
+ }
+ $output .= '
';
+
+ return $session->style->userStyle( $output );
}
1;
diff --git a/lib/WebGUI/Shop/PayDriver.pm b/lib/WebGUI/Shop/PayDriver.pm
index 76e2aba4d..b5e88fda4 100644
--- a/lib/WebGUI/Shop/PayDriver.pm
+++ b/lib/WebGUI/Shop/PayDriver.pm
@@ -118,8 +118,8 @@ sub create {
$class,
]);
- # Set the options via the set method because set() will automatically serialize the options hash
- $self->set($options);
+ # Set the options via the update method because update() will automatically serialize the options hash
+ $self->update($options);
return $self;
}
@@ -172,8 +172,8 @@ sub definition {
);
my %properties = (
- name => 'Payment Driver',
- fields => \%fields,
+ name => 'Payment Driver',
+ properties => \%fields,
);
push @{ $definition }, \%properties;
@@ -254,6 +254,41 @@ sub getCart {
return $cart;
}
+#-------------------------------------------------------------------
+
+=head2 getDoFormTags ( $method, $htmlForm )
+
+Returns a string containing the required form fields for doing a www_do method call. If an HTMLForm object is
+passed the fields are automatically added to it. In that case no form tags a returned by this method.
+
+=head3 $htmlForm
+
+The HTMLForm object you want to add the fields to. This is optional.
+
+=cut
+
+sub getDoFormTags {
+ my $self = shift;
+ my $doMethod = shift;
+ my $htmlForm = shift;
+ my $session = $self->session;
+
+ if ($htmlForm) {
+ $htmlForm->hidden(name => 'shop', value => 'pay');
+ $htmlForm->hidden(name => 'method', value => 'do');
+ $htmlForm->hidden(name => 'do', value => $doMethod);
+ $htmlForm->hidden(name => 'paymentGatewayId', value => $self->getId);
+
+ return undef;
+ }
+ else {
+ return WebGUI::Form::hidden($session, { name => 'shop', value => 'pay' })
+ . WebGUI::Form::hidden($session, { name => 'method', value => 'do' })
+ . WebGUI::Form::hidden($session, { name => 'do', value => $doMethod })
+ . WebGUI::Form::hidden($session, { name => 'paymentGatewayId', value => $self->getId })
+ }
+}
+
#-------------------------------------------------------------------
@@ -269,15 +304,30 @@ sub getEditForm {
my $definition = $self->definition($self->session);
my $form = WebGUI::HTMLForm->new($self->session);
$form->submit;
- $form->hidden(
- name => 'paymentGatewayId',
- value => $self->getId,
- );
+# $form->hidden(
+# -name => 'shop',
+# -value => 'pay',
+# );
+# $form->hidden(
+# -name => 'method',
+# -value => 'do',
+# );
+# $form->hidden(
+# -name => 'do',
+# -value => 'editSave',
+# );
+#
+# $form->hidden(
+# name => 'paymentGatewayId',
+# value => $self->getId,
+# );
+
+ $self->getDoFormTags('editSave', $form);
$form->hidden(
name => 'className',
value => $self->className,
);
- $form->dynamicForm($definition, 'fields', $self);
+ $form->dynamicForm($definition, 'properties', $self);
return $form;
}
@@ -362,6 +412,33 @@ the C method.
=cut
+#-------------------------------------------------------------------
+
+=head2 processPropertiesFromFormPost ( )
+
+Updates ship driver with data from Form.
+
+=cut
+
+sub processPropertiesFromFormPost {
+ my $self = shift;
+ my %properties;
+ my $fullDefinition = $self->definition($self->session);
+
+ foreach my $definition (@{$fullDefinition}) {
+ foreach my $property (keys %{$definition->{properties}}) {
+ $properties{$property} = $self->session->form->process(
+ $property,
+ $definition->{properties}{$property}{fieldType},
+ $definition->{properties}{$property}{defaultValue}
+ );
+ }
+ }
+ $properties{title} = $fullDefinition->[0]{name} if ($properties{title} eq "" || lc($properties{title}) eq "untitled");
+ $self->update(\%properties);
+}
+
+
#-------------------------------------------------------------------
=head2 session ( )
@@ -372,7 +449,7 @@ Accessor for the session object. Returns the session object.
#-------------------------------------------------------------------
-=head2 set ( $options )
+=head2 update ( $options )
Setter for user configurable options in the payment objects.
@@ -383,10 +460,10 @@ flattened into JSON and stored in the database as text. There is no content che
=cut
-sub set {
+sub update {
my $self = shift;
my $properties = shift;
- WebGUI::Error::InvalidParam->throw(error => 'set was not sent a hashref of options to store in the database')
+ WebGUI::Error::InvalidParam->throw(error => 'update was not sent a hashref of options to store in the database')
unless ref $properties eq 'HASH' and scalar keys %{ $properties };
my $jsonOptions = to_json($properties);
@@ -407,4 +484,46 @@ a GUID.
=cut
+#-------------------------------------------------------------------
+
+=head2 www_edit ( )
+
+Generates an edit form.
+
+=cut
+
+sub www_edit {
+ my $self = shift;
+ my $session = $self->session;
+ my $admin = WebGUI::Shop::Admin->new($session);
+ my $i18n = WebGUI::International->new($session, "Pay");
+
+ return $session->privilege->insufficient() unless $session->user->isInGroup(3);
+
+ my $form = $self->getEditForm;
+ $form->submit;
+
+ return $admin->getAdminConsole->render($form->print, $i18n->echo("payment methods"));
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_editSave ( )
+
+Saves the data from the post.
+
+=cut
+
+sub www_editSave {
+ my $self = shift;
+ my $session = $self->session;
+ return $session->privilege->insufficient() unless $session->user->isInGroup(3);
+
+ $self->processPropertiesFromFormPost;
+ $session->http->setRedirect("/?shop=pay;method=manage");
+
+ return undef;
+}
+
+
1;
diff --git a/lib/WebGUI/Shop/PayDriver/Cash.pm b/lib/WebGUI/Shop/PayDriver/Cash.pm
index 1fe9067a3..fd24194a4 100644
--- a/lib/WebGUI/Shop/PayDriver/Cash.pm
+++ b/lib/WebGUI/Shop/PayDriver/Cash.pm
@@ -20,30 +20,96 @@ sub definition {
%fields = (
sendReceipt => {
fieldType => 'yesNo',
- label => $i18n->echo('sendReceipt'),
- hoverHelp => $i18n->echo('sendReceipt help'),
+ label => $i18n->echo('send receipt'),
+ hoverHelp => $i18n->echo('send receipt help'),
defaultValue => 0,
},
+ receiptSubject => {
+ fieldType => 'text',
+ label => $i18n->echo('receipt subject'),
+ hoverHelp => $i18n->echo('receipt subject help'),
+ },
+ receiptTemplate => {
+ fieldType => 'template',
+ label => $i18n->echo('receipt template'),
+ hoverHelp => $i18n->echo('receipt template help'),
+ namespace => 'PayDriver/Cash/Receipt',
+ defaultValue => undef,
+ },
);
push @{ $definition }, {
- name => $i18n->echo('Cash'),
- fields => \%fields,
+ name => $i18n->echo('Cash'),
+ properties => \%fields,
};
return $class->SUPER::definition($session, $definition);
}
#-------------------------------------------------------------------
+sub getBillingAddress {
+ my $self = shift;
+ my $session = $self->session;
-sub getButton {
-
+ my $addressId = $session->scratch->get('ShopPayDriverCash_billingAddress');
+ if ($addressId) {
+ return $self->getCart->getAddressBook->getAddress( $addressId );
+ }
+
+ # No billing address selected yet so return undef.
+ return undef;
}
#-------------------------------------------------------------------
-sub www_collectPaymentInfo {
+sub getButton {
+ my $self = shift;
+ my $session = $self->session;
+ my $i18n = WebGUI::International->new($session, 'PayDriver_Cash');
+ my $payForm = WebGUI::Form::formHeader($session)
+ . $self->getDoFormTags('getCredentials')
+ . WebGUI::Form::submit($session, {value => $i18n->echo('Cash') })
+ . WebGUI::Form::formFooter($session);
+
+ return $payForm;
+}
+
+#-------------------------------------------------------------------
+sub getCartTemplateVariables {
+ my $self = shift;
+ my $cart = $self->getCart;
+ my @itemLoop;
+
+ # Process items in cart
+ foreach my $item (@{ $cart->getItems }) {
+ my $sku = $item->getSku;
+ $sku->applyOptions( $item->get('options') );
+
+ my $itemProperties = $item->get;
+ $itemProperties->{ itemName } = $sku->get('title');
+ $itemProperties->{ itemUrl } = $sku->getUrl;
+ $itemProperties->{ itemPrice } = $cart->formatCurrency( $sku->getPrice );
+ $itemProperties->{ totalItemPrice } = $cart->formatCurrency( $sku->getPrice * $item->get('quantity') );
+
+ my $address = eval { $item->getShippingAddress };
+ $itemProperties->{ itemShippingAddres } = $address->getHtmlFormatted unless (WebGUI::Error->caught);
+
+ push @itemLoop, $itemProperties;
+ }
+
+ my $cartProperties = $cart->get;
+ $cartProperties->{ totalPrice } = $cart->calculateSubtotal;
+ $cartProperties->{ tax } = $cart->getTaxes;
+
+ # Include shipping address
+ my $address = eval { $cart->getShippingAddress };
+ $cartProperties->{ shippingAddress } = $address->getHtmlFormatted unless (WebGUI::Error->caught);
+# $cartProperties->{ shippingPrice } =
+
+ $cartProperties->{ item_loop } = \@itemLoop;
+
+ return $cartProperties;
}
#-------------------------------------------------------------------
@@ -52,5 +118,106 @@ sub www_displayStatus {
}
+#-------------------------------------------------------------------
+sub www_getCredentials {
+ my $self = shift;
+ my $session = $self->session;
+
+ # Generate the json string that defines where the address book posts the selected address
+ my $callbackParams = {
+ url => $session->url->page,
+ params => [
+ { name => 'shop', value => 'pay' },
+ { name => 'method', value => 'do' },
+ { name => 'do', value => 'setBillingAddress' },
+ { name => 'paymentGatewayId', value => $self->getId },
+ ],
+ };
+ my $callbackJson = JSON::to_json( $callbackParams );
+
+ # Generate 'Choose billing address' button
+ my $addressButton = WebGUI::Form::formHeader( $session )
+ . WebGUI::Form::hidden( $session, { name => 'shop', value => 'address' } )
+ . WebGUI::Form::hidden( $session, { name => 'method', value => 'view' } )
+ . WebGUI::Form::hidden( $session, { name => 'callback', value => $callbackJson } )
+ . WebGUI::Form::submit( $session, { value => 'Choose billing address' } )
+ . WebGUI::Form::formFooter( $session);
+
+ # Get billing address
+ my $billingAddress = eval { $self->getBillingAddress };
+ if ( WebGUI::Error->caught('WebGUI::Error::ObjectNotFound') ) {
+ # The stored address id is invalid, so remove it
+ $session->scratch->delete('ShopPayDriverCash_billingAddress');
+ }
+
+ my $billingAddressHtml;
+ if ($billingAddress) {
+ $billingAddressHtml = $billingAddress->getHtmlFormatted;
+ }
+
+ # Generate 'Proceed' button
+ my $proceedButton = WebGUI::Form::formHeader( $session )
+ . $self->getDoFormTags('pay')
+ . WebGUI::Form::submit( $session, { value => 'Pay' } )
+ . WebGUI::Form::formFooter( $session);
+
+ return $session->style->userStyle($addressButton.'
'.$billingAddressHtml.'
'.$proceedButton);
+}
+
+#-------------------------------------------------------------------
+
+sub www_pay {
+ my $self = shift;
+ my $session = $self->session;
+ my $cart = $self->getCart;
+ my $i18n = WebGUI::International->new($session, 'PayDriver_Cash');
+ my $var;
+
+ my $billingAddress = $self->getBillingAddress( $session->scratch->get( 'ShopPayDriverCash_billingAddressId' ) );
+
+ # Create a transaction and complete the purchase
+ my $transaction = WebGUI::Shop::Transaction->create( $session, {
+ cart => $cart,
+ paymentAddress => $billingAddress,
+ paymentMethod => $self,
+ });
+ $transaction->completePurchase( $cart, 'CASH', 'OK', 'Cash payment' );
+
+ # Generate a receipt and send it if enabled.
+ if ( $self->get('sendReceipt') ) {
+ # Setup receipt tmpl_vars
+ my $var = $self->getCartTemplateVariables;
+
+ # Instanciate receipt template
+ my $template = WebGUI::Asset::Template->new( $session, $self->get('receiptTemplate') );
+ WebGUI::Error::ObjectNotFound->throw( id => $self->get('receiptTemplate') )
+ unless $template;
+
+ # Send receipt
+ my $receipt = WebGUI::Mail::Send->create( $session, {
+ to => $session->user->profileField('email'),
+ from => 'martin@oqapi.nl',
+ subject => $self->get('receiptSubject'),
+ });
+ $receipt->addText( $template->process( $var ) );
+# $receipt->addText( 'Thank you for ordering' );
+ $receipt->queue;
+
+ }
+
+ return $session->style->userStyle('Thank you for ordering');
+}
+
+#-------------------------------------------------------------------
+
+sub www_setBillingAddress {
+ my $self = shift;
+ my $session = $self->session;
+
+ $session->scratch->set( 'ShopPayDriverCash_billingAddress', $session->form->process('addressId') );
+
+ return $self->www_getCredentials;
+}
+
1;
diff --git a/lib/WebGUI/Shop/Transaction.pm b/lib/WebGUI/Shop/Transaction.pm
index eb7eefca9..62b3ee045 100644
--- a/lib/WebGUI/Shop/Transaction.pm
+++ b/lib/WebGUI/Shop/Transaction.pm
@@ -91,7 +91,8 @@ The extended status message that came back from the payment gateway when trying
sub completePurchase {
my ($self, $cart, $transactionCode, $statusCode, $statusMessage) = @_;
- $cart->completePurchase;
+ $cart->onCompletePurchase;
+ #$cart->completePurchase;
$self->update({
transactionCode => $transactionCode,
isSuccessful => 1,
@@ -372,7 +373,7 @@ sub update {
$newProperties->{couponId} = $cart->get('couponId');
$newProperties->{couponTitle} = '';
$newProperties->{couponDiscount} = '';
- $newProperties->{amount} = $cart->getSubtotal + $newProperties->{couponDiscount} + $newProperties->{shippingPrice} + $newProperties->{taxes};
+ $newProperties->{amount} = $cart->calculateSubtotal + $newProperties->{couponDiscount} + $newProperties->{shippingPrice} + $newProperties->{taxes};
foreach my $item (@{$cart->getItems}) {
$self->addItem({item=>$item});
}
diff --git a/t/Shop/Pay.t b/t/Shop/Pay.t
index fbc8a03ed..cff4ee13e 100644
--- a/t/Shop/Pay.t
+++ b/t/Shop/Pay.t
@@ -169,6 +169,8 @@ throws_deeply( sub { $drivers = $pay->getOptions(); },
'getOptions takes exception to not giving it a cart',
);
+#TODO: Check th crap getOptions returns
+
#######################################################################
#
# getPaymentGateway
diff --git a/t/Shop/PayDriver.t b/t/Shop/PayDriver.t
index 70ffab7ed..e2393e168 100644
--- a/t/Shop/PayDriver.t
+++ b/t/Shop/PayDriver.t
@@ -71,8 +71,8 @@ $definition = WebGUI::Shop::PayDriver->definition($session);
cmp_deeply (
$definition,
[ {
- name => 'Payment Driver',
- fields => {
+ name => 'Payment Driver',
+ properties => {
label => {
fieldType => 'text',
label => ignore(),
@@ -109,11 +109,11 @@ cmp_deeply (
$definition,
[
{
- name => 'Red',
+ name => 'Red',
},
{
- name => 'Payment Driver',
- fields => ignore(),
+ name => 'Payment Driver',
+ properties => ignore(),
}
],
,
@@ -299,7 +299,7 @@ my @forms = HTML::Form->parse($html, 'http://www.webgui.org');
is (scalar @forms, 1, 'getEditForm generates just 1 form');
my @inputs = $forms[0]->inputs;
-is (scalar @inputs, 7, 'getEditForm: the form has 7 controls');
+is (scalar @inputs, 10, 'getEditForm: the form has 10 controls');
my @interestingFeatures;
foreach my $input (@inputs) {
@@ -315,6 +315,18 @@ cmp_deeply(
name => undef,
type => 'submit',
},
+ {
+ name => 'shop',
+ type => 'hidden',
+ },
+ {
+ name => 'method',
+ type => 'hidden',
+ },
+ {
+ name => 'do',
+ type => 'hidden',
+ },
{
name => 'paymentGatewayId',
type => 'hidden',
@@ -400,19 +412,19 @@ TODO: {
#######################################################################
#
-# set
+# update
#
#######################################################################
-eval { $driver->set(); };
+eval { $driver->update(); };
$e = Exception::Class->caught();
-isa_ok ($e, 'WebGUI::Error::InvalidParam', 'set takes exception to not giving it a hashref of options');
+isa_ok ($e, 'WebGUI::Error::InvalidParam', 'update takes exception to not giving it a hashref of options');
cmp_deeply (
$e,
methods(
- error => 'set was not sent a hashref of options to store in the database',
+ error => 'update was not sent a hashref of options to store in the database',
),
- 'set takes exception to not giving it a hashref of options',
+ 'update takes exception to not giving it a hashref of options',
);
my $newOptions = {
@@ -422,7 +434,7 @@ my $newOptions = {
receiptMessage => 'Dropjes!',
};
-$driver->set($newOptions);
+$driver->update($newOptions);
my $storedOptions = $session->db->quickScalar('select options from paymentGateway where paymentGatewayId=?', [
$driver->getId,
]);
@@ -430,7 +442,7 @@ cmp_deeply(
$newOptions,
from_json($storedOptions),
,
- 'set() actually stores data',
+ 'update() actually stores data',
);