started on transaction management interface

finished merging new yui
This commit is contained in:
JT Smith 2008-03-15 19:39:19 +00:00
parent 728eccc3cb
commit fb17e6375e
6 changed files with 231 additions and 17 deletions

View file

@ -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;
}

View file

@ -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('<style type="text/css"> #paging a { color: #0000de; } </style>');
my $output = q|
<div class=" yui-skin-sam"><div id="demo">
<div id="paging"></div>
<div id="dt"></div>
</div></div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var DataSource = YAHOO.util.DataSource,
DataTable = YAHOO.widget.DataTable,
Paginator = YAHOO.widget.Paginator;
|;
$output .= "var mySource = new DataSource('".$url->page('shop=transaction;method=getTransactionsAsJson')."');";
$output .= <<STOP;
mySource.responseType = DataSource.TYPE_JSON;
mySource.responseSchema = {
resultsList : 'records',
totalRecords: 'totalRecords',
fields : [ 'transactionCode', 'paymentDriverLabel',
'transactionId', 'dateOfPurchase', 'username', 'amount', 'isSuccessful', 'statusCode', 'statusMessage']
};
var buildQueryString = function (state,dt) {
return ";startIndex=" + state.pagination.recordOffset +
";results=" + state.pagination.rowsPerPage;
};
var myPaginator = new Paginator({
containers : ['paging'],
pageLinks : 5,
rowsPerPage : 25,
rowsPerPageOptions : [25,50,100],
template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
});
var myTableConfig = {
initialRequest : ';startIndex=0;results=25',
generateRequest : buildQueryString,
paginationEventHandler : DataTable.handleDataSourcePagination,
paginator : myPaginator
};
YAHOO.widget.DataTable.formatViewTransaction = function(elCell, oRecord, oColumn, transactionId) {
STOP
$output .= q{elCell.innerHTML = '<a href="}.$url->page('shop=transaction;method=viewTransaction')
.q{;transactionId=' + transactionId + '">' + transactionId + '</a>'; };
$output .= '
};
var myColumnDefs = [
';
$output .= '{key:"transactionId", label:"'.$i18n->get('transaction id').'", formatter:YAHOO.widget.DataTable.formatViewTransaction},';
$output .= '{key:"dateOfPurchase", label:"'.$i18n->get('date').'",formatter:YAHOO.widget.DataTable.formatDate},';
$output .= '{key:"username", label:"'.$i18n->get('username').'"},';
$output .= '{key:"amount", label:"'.$i18n->get('price').'",formatter:YAHOO.widget.DataTable.formatCurrency},';
$output .= '{key:"statusCode", label:"'.$i18n->get('status code').'"},';
$output .= '{key:"statusMessage", label:"'.$i18n->get('status message').'"},';
$output .= '{key:"paymentDriverLabel", label:"'.$i18n->get('payment method').'"},';
$output .= <<STOP;
];
var myTable = new DataTable('dt', myColumnDefs, mySource, myTableConfig);
});
</script>
STOP
return $admin->getAdminConsole->render($output, $i18n->get('transactions'));
}
1;

View file

@ -29,6 +29,7 @@ These subroutines are available from this package:
readonly transaction => my %transaction;
private properties => my %properties;
#-------------------------------------------------------------------
=head2 create ( transaction, properties)