diff --git a/lib/WebGUI/Content/Shop.pm b/lib/WebGUI/Content/Shop.pm
index a254f0bc8..8896b6198 100644
--- a/lib/WebGUI/Content/Shop.pm
+++ b/lib/WebGUI/Content/Shop.pm
@@ -21,6 +21,7 @@ use WebGUI::Shop::Cart;
use WebGUI::Shop::Pay;
use WebGUI::Shop::Ship;
use WebGUI::Shop::Tax;
+use WebGUI::Shop::Transaction;
=head1 NAME
@@ -173,6 +174,26 @@ sub www_tax {
return $output;
}
+#-------------------------------------------------------------------
+
+=head2 www_transaction ()
+
+Hand off to the transaction system.
+
+=cut
+
+sub www_transaction {
+ my $session = shift;
+ my $output = undef;
+ my $method = "www_".$session->form->get("method");
+ my $transaction = WebGUI::Shop::Transaction->create($session);
+ if ($method ne "www_" && $transaction->can($method)) {
+ $output = $transaction->$method();
+ }
+ return $output;
+}
+
+
1;
diff --git a/lib/WebGUI/Form/Textarea.pm b/lib/WebGUI/Form/Textarea.pm
index b80b0c0f2..7729a5e77 100644
--- a/lib/WebGUI/Form/Textarea.pm
+++ b/lib/WebGUI/Form/Textarea.pm
@@ -115,23 +115,36 @@ sub toHtml {
my ($style, $url) = $self->session->quick(qw(style url));
my $styleAttribute = "width: ".$width."px; height: ".$height."px; ".$self->get("style");
$style->setRawHeadTags(qq||);
- my $out = '';
+ my $out = '';
if ($self->get("resizable")) {
- $out = '
'.$out.'
';
- $style->setScript($url->extras("yui/build/yahoo/yahoo-min.js"), {type=>"text/javascript"});
- $style->setScript($url->extras("yui/build/event/event-min.js"), {type=>"text/javascript"});
- $style->setScript($url->extras("yui/build/dom/dom-min.js"), {type=>"text/javascript"});
- $style->setScript($url->extras("yui/build/dragdrop/dragdrop-min.js"), {type=>"text/javascript"});
- $style->setLink($url->extras("extjs/resources/css/ext-all.css"), {type=>"text/css", rel=>"stylesheet"});
- $style->setScript($url->extras("extjs/adapter/yui/ext-yui-adapter.js"), {type=>"text/javascript"});
- $style->setScript($url->extras("extjs/ext-all.js"), {type=>"text/javascript"});
- $out .= qq|
-
- |;
+ $style->setLink($url->extras("resize.css"), {type=>"text/css", rel=>"stylesheet"});
+ $style->setLink($url->extras("resize-skin.css"), {type=>"text/css", rel=>"stylesheet"});
+ $style->setScript($url->extras("yui/build/yahoo-dom-event/yahoo-dom-event.js"), {type=>"text/javascript"});
+ $style->setScript($url->extras("yui/build/dragdrop/dragdrop.js"), {type=>"text/javascript"});
+ $style->setScript($url->extras("yui/build/element/element-beta.js"), {type=>"text/javascript"});
+ $style->setScript($url->extras("yui/build/resize/resize-beta.js"), {type=>"text/javascript"});
+ $out = qq|
+
+ $out
+
+
+
+ |;
}
return $out;
}
diff --git a/lib/WebGUI/Shop/Admin.pm b/lib/WebGUI/Shop/Admin.pm
index 8bde135b5..47bd9046b 100644
--- a/lib/WebGUI/Shop/Admin.pm
+++ b/lib/WebGUI/Shop/Admin.pm
@@ -32,6 +32,25 @@ readonly session => my %session;
#-------------------------------------------------------------------
+=head2 canManage ( [ $user ] )
+
+Determine whether or not a user can manage commerce functions
+
+=head3 $user
+
+An optional WebGUI::User object to check for permission to do commerce functions. If
+this is not used, it uses the current session user object.
+
+=cut
+
+sub canManage {
+ my $self = shift;
+ my $user = shift || $self->session->user;
+ return $user->isInGroup( $self->session->setting->get('groupIdAdminCommerce'));
+}
+
+#-------------------------------------------------------------------
+
=head2 getAdminConsole ()
Returns a reference to the admin console with all submenu items already added.
@@ -47,7 +66,7 @@ sub getAdminConsole {
$ac->addSubmenuItem($url->page("shop=tax"), $i18n->get("taxes"));
$ac->addSubmenuItem($url->page("shop=pay;method=manage"), $i18n->get("payment methods"));
$ac->addSubmenuItem($url->page("shop=ship;method=manage"), $i18n->get("shipping methods"));
- $ac->addSubmenuItem($url->page("shop=transactions"), $i18n->get("transactions"));
+ $ac->addSubmenuItem($url->page("shop=transaction;method=manage"), $i18n->get("transactions"));
return $ac;
}
diff --git a/lib/WebGUI/Shop/Transaction.pm b/lib/WebGUI/Shop/Transaction.pm
index 98ab60aa3..6ba0f15e1 100644
--- a/lib/WebGUI/Shop/Transaction.pm
+++ b/lib/WebGUI/Shop/Transaction.pm
@@ -3,10 +3,12 @@ package WebGUI::Shop::Transaction;
use strict;
use Class::InsideOut qw{ :std };
+use JSON;
use WebGUI::Asset::Template;
use WebGUI::Exception::Shop;
use WebGUI::Form;
use WebGUI::International;
+use WebGUI::Paginator;
use WebGUI::Shop::AddressBook;
use WebGUI::Shop::TransactionItem;
@@ -328,7 +330,129 @@ sub update {
$self->session->db->setRow("transaction","transactionId",$properties{$id});
}
+#-------------------------------------------------------------------
+=head2 www_getTransactionsAsJson ()
+
+Retrieves a list of transactions for the www_manage() method.
+
+=cut
+
+sub www_getTransactionsAsJson {
+ my ($self) = @_;
+ my ($db, $form) = $self->session->quick(qw(db form));
+ my $startIndex = $form->get('startIndex') || 0;
+ my $numberOfResults = $form->get('results') || 25;
+ my $transactions = $db->read('select transactionId, transactionCode, paymentDriverLabel,
+ dateOfPurchase, username, amount, isSuccessful, statusCode, statusMessage
+ from transaction order by dateOfPurchase desc limit ?,?', [$startIndex, $numberOfResults]);
+ my $totalRecords = $db->quickScalar('select found_rows()');
+ my $tally = 0;
+ my @records = ();
+ while (my $row = $transactions->hashRef) {
+ push(@records, $row);
+ $tally++;
+ }
+ my %results = (
+ recordsReturned => $tally,
+ totalRecords => $totalRecords,
+ startIndex => $startIndex,
+ sort => undef,
+ dir => "desc",
+ records => \@records,
+ );
+ $self->session->http->setMimeType('text/json');
+ return JSON::to_json(\%results);
+}
+#-------------------------------------------------------------------
+
+=head2 www_manage ()
+
+Displays a list of all transactions in the system along with management tools for them.
+
+=cut
+
+sub www_manage {
+ my ($self) = @_;
+ my $admin = WebGUI::Shop::Admin->new($self->session);
+ return $self->session->privilege->insufficient() unless $admin->canManage;
+ my $i18n = WebGUI::International->new($self->session, 'Shop');
+ my ($style, $url) = $self->session->quick(qw(style url));
+ $style->setLink($url->extras('/yui/build/fonts/fonts-min.css'), {rel=>'stylesheet', type=>'text/css'});
+ $style->setLink($url->extras('/yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'});
+ $style->setScript($url->extras('/yui/build/utilities/utilities.js'), {type=>'text/javascript'});
+ $style->setScript($url->extras('/yui/build/json/json.js'), {type=>'text/javascript'});
+ $style->setScript($url->extras('/yui/build/datasource/datasource-beta.js'), {type=>'text/javascript'});
+ $style->setScript($url->extras('/yui/build/datatable/datatable-beta.js'), {type=>'text/javascript'});
+ $style->setRawHeadTags('');
+ my $output = q|
+
+
+
+
+STOP
+
+ return $admin->getAdminConsole->render($output, $i18n->get('transactions'));
+}
1;
diff --git a/lib/WebGUI/Shop/TransactionItem.pm b/lib/WebGUI/Shop/TransactionItem.pm
index ec0448996..e8dc9df28 100644
--- a/lib/WebGUI/Shop/TransactionItem.pm
+++ b/lib/WebGUI/Shop/TransactionItem.pm
@@ -29,6 +29,7 @@ These subroutines are available from this package:
readonly transaction => my %transaction;
private properties => my %properties;
+
#-------------------------------------------------------------------
=head2 create ( transaction, properties)
diff --git a/lib/WebGUI/i18n/English/Shop.pm b/lib/WebGUI/i18n/English/Shop.pm
index 7ecf1aa4e..5bb2288fd 100644
--- a/lib/WebGUI/i18n/English/Shop.pm
+++ b/lib/WebGUI/i18n/English/Shop.pm
@@ -3,6 +3,42 @@ package WebGUI::i18n::English::Shop;
use strict;
our $I18N = {
+ 'username' => {
+ message => q|User|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
+ 'date' => {
+ message => q|Date|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
+ 'transaction id' => {
+ message => q|Transaction Id|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
+ 'status code' => {
+ message => q|Status Code|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
+ 'status message' => {
+ message => q|Status Message|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
+ 'payment method' => {
+ message => q|Payment Method|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
'add shipper' => {
message => q|Add Shipping Method|,
lastUpdated => 0,