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

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

View file

@ -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|<style type="text/css">\ntextarea#|.$self->get('id').qq|{ $styleAttribute }\n</style>|);
my $out = '<textarea id="'.$self->get('id').'" name="'.$self->get("name").'" '.$self->get("extras").' rows="#" cols="#">'.$value.'</textarea>';
my $out = '<textarea id="'.$self->get('id').'" name="'.$self->get("name").'" '.$self->get("extras").' rows="#" cols="#" style="width: '.$width.'px; height: '.$height.'px;">'.$value.'</textarea>';
if ($self->get("resizable")) {
$out = '<div style="border: 0px; width: '.$width.'px; height: '.$height.'px;" class="yresizable-pinned" id="'.$self->get('id').'_wrapper">'.$out.'</div>';
$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|
<script type="text/javascript">
YAHOO.util.Event.addListener(window, 'load', function () {
var resizableTextarea = new Ext.Resizable('|.$self->get('id').qq|_wrapper', {minWidth:300, minHeight:150, wrap:false, resizeChild:true, disableTrackOver:true, multiDirectional:false, pinned:true, width:|.$width.qq|, height:|.$height.qq|, dynamic:false });
});
</script>
|;
$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|
<div id="resize_| . $self->get('id'). qq|" style="width: | . ($width + 10) . qq|px; height: | . ($height + 10) . qq|px; overflow: hidden">
$out
</div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function() {
var Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
textAreaElement = document.getElementById('| . $self->get('id') . qq|');
var resize = new YAHOO.util.Resize('resize_| . $self->get('id'). qq|');
resize.on('resize', function(ev) {
var w = ev.width;
var h = ev.height;
textAreaElement.style.width = (w - 6) + "px";
textAreaElement.style.height = (h - 6) + "px";
});
});
</script>
|;
}
return $out;
}

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)

View file

@ -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,