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,