started on transaction management interface
finished merging new yui
This commit is contained in:
parent
728eccc3cb
commit
fb17e6375e
6 changed files with 231 additions and 17 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ These subroutines are available from this package:
|
|||
readonly transaction => my %transaction;
|
||||
private properties => my %properties;
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 create ( transaction, properties)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue