';
+ $output .= '| '.WebGUI::Form::radio({name=>'selection', value => 'init', checked=>($session{form}{selection} eq 'init')}).' | ';
+ $output .= ''.$i18n->get('init date').' | ';
+ $output .= ''.WebGUI::Form::date({name=>'initStart', value=>$initStart}).' '.$i18n->get('and').' '.WebGUI::Form::date({name=>'initStop', value=>$initStop}).' | ';
+ $output .= '';
+ $output .= '| '.WebGUI::Form::radio({name=>'selection', value => 'completion', checked=>($session{form}{selection} eq 'completion')}).' | ';
+ $output .= ''.$i18n->get('completion date').' | ';
+ $output .= ''.WebGUI::Form::date({name=>'completionStart', value=>$completionStart}).' '.$i18n->get('and').' '.WebGUI::Form::date({name=>'completionStop', value=>$completionStop}).' | ';
+ $output .= '
';
+ $output .= ' | ';
+ $output .= ''.$i18n->get('transaction status').' | ';
+ $output .= ''.WebGUI::Form::selectList({name => 'tStatus', value => [$session{form}{tStatus}], options => $transactionOptions});
+ $output .= ' |
';
+
+ $output .= ' | ';
+ $output .= ''.$i18n->get('shipping status').' | ';
+ $output .= ''.WebGUI::Form::selectList({name => 'sStatus', value => [$session{form}{sStatus}], options => $shippingOptions});
+ $output .= ' |
';
+
+ $output .= ' | ';
+ $output .= ''.WebGUI::Form::submit({value=>$i18n->get('select')}).' | ';
+ $output .= '
';
+ $output .= '
';
+ $output .= WebGUI::Form::formFooter;
+
+ $criteria{initStart} = WebGUI::FormProcessor::date('initStart') if ($session{form}{initStart} && ($session{form}{selection} eq 'init'));
+ $criteria{initStop} = WebGUI::FormProcessor::date('initStop') if ($session{form}{initStop} && ($session{form}{selection} eq 'init'));
+ $criteria{completionStart} = WebGUI::FormProcessor::date('completionStart') if ($session{form}{completionStart} && ($session{form}{selection} eq 'completion'));
+ $criteria{completionStop} = WebGUI::FormProcessor::date('completionStop') if ($session{form}{completionStop} && ($session{form}{selection} eq 'completion'));
+ $criteria{shippingStatus} = $session{form}{sStatus} if ($session{form}{sStatus});
+ $criteria{paymentStatus} = $session{form}{tStatus} if ($session{form}{tStatus});
+
+ @transactions = WebGUI::Commerce::Transaction->getTransactions(\%criteria);
+
+ $output .= '';
+ $output .= ' | Init Date | Completion Date | Amount | Shipping Cost | Status | Shipping Status |
';
+ foreach $transaction (@transactions) {
+ $output .= '';
+ $output .= '| '.deleteIcon('op=deleteTransaction&tid='.$transaction->get('transactionId')).' | ';
+ $output .= ''.WebGUI::DateTime::epochToHuman($transaction->get('initDate')).' | ';
+ $output .= ''.WebGUI::DateTime::epochToHuman($transaction->get('completionDate')).' | ';
+ $output .= ''.$transaction->get('amount').' | ';
+ $output .= ''.$transaction->get('shippingCost').' | ';
+ $output .= ''.$transaction->get('status').' | ';
+ $output .= ''.$transaction->get('shippingStatus').' | ';
+ $output .= '
';
+
+ my @items = @{$transaction->getItems};
+ foreach (@items) {
+ $output .= '';
+ $output .= ' | ';
+ $output .= ''.
+ deleteIcon('op=deleteTransactionItem&tid='.$transaction->get('transactionId').'&iid='.$_->{itemId}.'&itype='.$_->{itemType}).
+ $_->{itemName}.' | ';
+ $output .= ''.$_->{quantity}.' | ';
+ $output .= ' x | ';
+ $output .= ''.$_->{amount}.' | ';
+ $output .= '
';
+ }
+ }
+ $output .= '
';
+
+ return _submenu($output, 'list transactions')
+}
+
#-------------------------------------------------------------------
sub www_selectPaymentGateway {
my ($plugins, $f, $i18n, @pluginLoop, %var);
+ _clearPaymentScratch;
+
$i18n = WebGUI::International->new('Commerce');
$plugins = WebGUI::Commerce::Payment->getEnabledPlugins;
if (scalar(@$plugins) > 1) {
@@ -409,26 +663,151 @@ sub www_selectPaymentGateway {
formElement => WebGUI::Form::radio({name=>'paymentGateway', value=>$_->namespace})
});
}
- } else {
+ } elsif (scalar(@$plugins) == 1) {
$session{form}{paymentGateway} = $plugins->[0]->namespace;
- return WebGUI::Operation::execute("checkoutConfirm");
+ return WebGUI::Operation::execute('selectPaymentGatewaySave');
}
$var{pluginLoop} = \@pluginLoop;
$var{message} = $i18n->get('select payment gateway');
$var{pluginsAvailable} = @$plugins;
$var{noPluginsMessage} = $i18n->get('no payment gateway');
- $var{formHeader} = WebGUI::Form::formHeader.WebGUI::Form::hidden({name=>'op', value=>'checkoutConfirm'});
+ $var{formHeader} = WebGUI::Form::formHeader.WebGUI::Form::hidden({name=>'op', value=>'selectPaymentGatewaySave'});
$var{formSubmit} = WebGUI::Form::submit({value=>$i18n->get('payment gateway select')});
$var{formFooter} = WebGUI::Form::formFooter;
return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new($session{setting}{commerceSelectPaymentGatewayTemplateId})->process(\%var));
}
+#-------------------------------------------------------------------
+sub www_selectPaymentGatewaySave {
+ if (WebGUI::Commerce::Payment->load($session{form}{paymentGateway})->enabled) {
+ WebGUI::Session::setScratch('paymentGateway', $session{form}{paymentGateway});
+ } else {
+ WebGUI::Session::setScratch('paymentGateway', '-delete-');
+ }
+
+ return WebGUI::Operation::execute('checkout');
+}
+
+#-------------------------------------------------------------------
+sub www_selectShippingMethod {
+ my ($plugins, $f, $i18n, @pluginLoop, %var);
+
+ _clearShippingScratch;
+
+ $i18n = WebGUI::International->new('Commerce');
+ $plugins = WebGUI::Commerce::Shipping->getEnabledPlugins;
+
+ if (scalar(@$plugins) > 1) {
+ foreach (@$plugins) {
+ push(@pluginLoop, {
+ name => $_->name,
+ namespace => $_->namespace,
+ formElement => WebGUI::Form::radio({name=>'shippingMethod', value=>$_->namespace})
+ });
+ }
+ } elsif (scalar(@$plugins) == 1) {
+ $session{form}{shippingMethod} = $plugins->[0]->namespace;
+ return WebGUI::Operation::execute("selectShippingMethodSave");
+ }
+
+ $var{pluginLoop} = \@pluginLoop;
+ $var{message} = $i18n->get('select shipping method');
+ $var{pluginsAvailable} = @$plugins;
+ $var{noPluginsMessage} = $i18n->get('no shipping methods available');
+ $var{formHeader} = WebGUI::Form::formHeader.WebGUI::Form::hidden({name=>'op', value=>'selectShippingMethodSave'});
+ $var{formSubmit} = WebGUI::Form::submit({value=>$i18n->get('shipping select button')});
+ $var{formFooter} = WebGUI::Form::formFooter;
+
+ return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new($session{setting}{commerceSelectShippingMethodTemplateId})->process(\%var));
+}
+
+#-------------------------------------------------------------------
+sub www_selectShippingMethodSave {
+ my $shipping = WebGUI::Commerce::Shipping->load($session{form}{shippingMethod});
+
+ $shipping->processOptionsForm;
+ return WebGUI::Operation::execute('selectShipping') unless ($shipping->optionsOk);
+
+ if ($shipping->enabled) {
+ WebGUI::Session::setScratch('shippingMethod', $shipping->namespace);
+ WebGUI::Session::setScratch('shippingOptions', Storable::freeze($shipping->getOptions));
+ } else {
+ WebGUI::Session::setScratch('shippingMethod', '-delete-');
+ }
+
+ return WebGUI::Operation::execute('checkout');
+}
+
#-------------------------------------------------------------------
sub www_transactionComplete {
return WebGUI::Operation::execute('viewPurchaseHistory');
}
+#-------------------------------------------------------------------
+sub www_updateCart {
+my $shoppingCart = WebGUI::Commerce::ShoppingCart->new;
+
+ foreach my $formElement (keys(%{$session{form}})) {
+ if ($formElement =~ m/^quantity~([^~]*)~([^~]*)$/) {
+ $shoppingCart->setQuantity($2, $1, $session{form}{$formElement});
+ }
+ }
+
+ return WebGUI::Operation::execute('viewCart');
+}
+
+#-------------------------------------------------------------------
+sub www_viewCart {
+ my ($shoppingCart, $normal, $recurring, %var, $total, $i18n);
+
+ $i18n = WebGUI::International->new('Commerce');
+
+ # Put contents of cart in template vars
+ $shoppingCart = WebGUI::Commerce::ShoppingCart->new;
+ ($normal, $recurring) = $shoppingCart->getItems;
+
+ foreach (@$normal) {
+ $_->{deleteIcon} = deleteIcon('op=deleteCartItem&itemId='.$_->{item}->id.'&itemType='.$_->{item}->type);
+ $_->{'quantity.form'} = WebGUI::Form::integer({
+ name => 'quantity~'.$_->{item}->type.'~'.$_->{item}->id,
+ value => $_->{quantity},
+ size => 3,
+ });
+ $total += $_->{totalPrice};
+ }
+ foreach (@$recurring) {
+ $_->{deleteIcon} = deleteIcon('op=deleteCartItem&itemId='.$_->{item}->id.'&itemType='.$_->{item}->type);
+ $_->{'quantity.form'} = WebGUI::Form::integer({
+ name => 'quantity~'.$_->{item}->type.'~'.$_->{item}->id,
+ value => $_->{quantity},
+ size => 3,
+ });
+ $total += $_->{totalPrice};
+ }
+
+ $var{'cartEmpty'} = !(scalar(@$normal) || scalar(@$recurring));
+ $var{'cartEmpty.message'} = $i18n->get('shopping cart empty');
+
+ $var{'updateForm.header'} = WebGUI::Form::formHeader().
+ WebGUI::Form::hidden({name => 'op', value => 'updateCart'});
+ $var{'updateForm.button'} = WebGUI::Form::submit({value => $i18n->get('update cart')});
+ $var{'updateForm.footer'} = WebGUI::Form::formFooter;
+ $var{'checkoutForm.header'} = WebGUI::Form::formHeader().
+ WebGUI::Form::hidden({name => 'op', value => 'checkout'});
+ $var{'checkoutForm.button'} = WebGUI::Form::submit({value => $i18n->get('checkout')});
+ $var{'checkoutForm.footer'} = WebGUI::Form::formFooter;
+
+ $var{normalItemsLoop} = $normal;
+ $var{normalItems} = scalar(@$normal);
+ $var{recurringItemsLoop} = $recurring;
+ $var{recurringItems} = scalar(@$recurring);
+
+ $var{total} = sprintf('%.2f', $total);
+
+ return WebGUI::Operation::Shared::userStyle(WebGUI::Asset::Template->new($session{setting}{commerceViewShoppingCartTemplateId})->process(\%var));
+}
+
1;
diff --git a/lib/WebGUI/Operation/TransactionLog.pm b/lib/WebGUI/Operation/TransactionLog.pm
index 63cd8b1fe..2978b4347 100644
--- a/lib/WebGUI/Operation/TransactionLog.pm
+++ b/lib/WebGUI/Operation/TransactionLog.pm
@@ -6,6 +6,9 @@ use WebGUI::Commerce::Transaction;
use WebGUI::Asset::Template;
use WebGUI::DateTime;
use WebGUI::Operation;
+use WebGUI::Form;
+use WebGUI::Privilege;
+use WebGUI::Grouping;
#-------------------------------------------------------------------
sub www_viewPurchaseHistory {
@@ -47,6 +50,28 @@ sub www_cancelRecurringTransaction {
return www_viewPurchaseHistory($message);
}
-
+
+#-------------------------------------------------------------------
+sub www_deleteTransaction {
+ my $transactionId;
+
+ return WebGUI::Privilege::insufficient unless (WebGUI::Grouping::isInGroup(3));
+
+ $transactionId = $session{form}{tid};
+
+ WebGUI::Commerce::Transaction->new($transactionId)->delete;
+
+ return WebGUI::Operation::execute('listTransactions');
+}
+
+#-------------------------------------------------------------------
+sub www_deleteTransactionItem {
+ return WebGUI::Privilege::insufficient unless (WebGUI::Grouping::isInGroup(3));
+
+ WebGUI::Commerce::Transaction->new($session{form}{tid})->deleteItem($session{form}{iid}, $session{form}{itype});
+
+ return WebGUI::Operation::execute('listTransactions');
+}
+
1;
diff --git a/lib/WebGUI/i18n/English/Commerce.pm b/lib/WebGUI/i18n/English/Commerce.pm
index fa1f93856..ce23b1929 100755
--- a/lib/WebGUI/i18n/English/Commerce.pm
+++ b/lib/WebGUI/i18n/English/Commerce.pm
@@ -112,12 +112,6 @@ Your password.