diff --git a/docs/upgrades/upgrade_7.5.10-7.5.11.pl b/docs/upgrades/upgrade_7.5.10-7.5.11.pl
index a224a984e..e483eeefe 100644
--- a/docs/upgrades/upgrade_7.5.10-7.5.11.pl
+++ b/docs/upgrades/upgrade_7.5.10-7.5.11.pl
@@ -513,7 +513,8 @@ sub convertTransactionLog {
paymentDriverLabel varchar(35),
taxes float,
dateOfPurchase datetime,
- isRecurring boolean
+ isRecurring boolean,
+ notes mediumtext
)");
$db->write("create table transactionItem (
itemId varchar(22) binary not null primary key,
diff --git a/lib/WebGUI/Shop/Transaction.pm b/lib/WebGUI/Shop/Transaction.pm
index 934081d5e..c25910a7f 100644
--- a/lib/WebGUI/Shop/Transaction.pm
+++ b/lib/WebGUI/Shop/Transaction.pm
@@ -381,6 +381,10 @@ A boolean indicating whether this is a recurring transaction or not. Defaults to
Most of the time this will be empty. But if this is a recurring transaction, then this will hold the id of the original transaction that started the recurrence.
+=head4 notes
+
+A text field containing notes about this transaction.
+
=cut
sub update {
@@ -431,7 +435,7 @@ sub update {
}
my @fields = (qw( isSuccessful transactionCode statusCode statusMessage amount shippingAddressId
shippingAddressName shippingAddress1 shippingAddress2 shippingAddress3 shippingCity shippingState
- shippingCountry shippingCode shippingPhoneNumber shippingDriverId shippingDriverLabel
+ shippingCountry shippingCode shippingPhoneNumber shippingDriverId shippingDriverLabel notes
shippingPrice paymentAddressId paymentAddressName originatingTransactionId isRecurring
paymentAddress1 paymentAddress2 paymentAddress3 paymentCity paymentState paymentCountry paymentCode
paymentPhoneNumber paymentDriverId paymentDriverLabel taxes ));
@@ -611,6 +615,28 @@ sub www_print {
#-------------------------------------------------------------------
+=head2 www_refundItem ( )
+
+Refunds a specific item from a transaction and then issues shop credit.
+
+=cut
+
+sub www_refundItem {
+ my ($class, $session) = @_;
+ return $session->privilege->insufficient unless (WebGUI::Shop::Admin->new($session)->canManage);
+ my $self = $class->new($session, $session->form->get("transactionId"));
+ my $form = $session->form;
+ my $item = eval { $self->getItem($form->get("itemId")) };
+ if (WebGUI::Error->caught()) {
+ $session->errorHandler->error("Can't get item ".$form->get("itemId"));
+ return $class->www_view($session);
+ }
+ $item->issueCredit;
+ return $class->www_view($session);
+}
+
+#-------------------------------------------------------------------
+
=head2 www_thankYou ()
Displays the default thank you page.
@@ -638,22 +664,17 @@ sub www_view {
my ($style, $url) = $session->quick(qw(style url));
my $transaction = $class->new($session, $session->form->get('transactionId'));
- # set up all the files that we need
- $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-min.js'), {type=>'text/javascript'});
- $style->setScript($url->extras('/yui/build/datasource/datasource-beta-min.js'), {type=>'text/javascript'});
- $style->setScript($url->extras('/yui/build/datatable/datatable-beta-min.js'), {type=>'text/javascript'});
-
#render page
my $output = q{
};
unless ($print) {
$output .= q{
@@ -683,6 +704,24 @@ sub www_view {
| }. $i18n->get("taxes") .q{ | }. sprintf("%.2f", $transaction->get('taxes')) .q{ |
+ };
+ unless ($print) {
+ $output .= q{
+
+ | }. $i18n->get("notes") .q{ | }
+ .WebGUI::Form::formHeader($session)
+ .WebGUI::Form::hidden($session, {name=>"shop",value=>"transaction"})
+ .WebGUI::Form::hidden($session, {name=>"method",value=>"update"})
+ .WebGUI::Form::hidden($session, {name=>"transactionId",value=>$transaction->getId})
+ .WebGUI::Form::textarea($session, {name=>"notes", value=>$transaction->get('notes')})
+ .' '
+ .WebGUI::Form::submit($session, {value=>$i18n->get('update'), extras=>' '})
+ .WebGUI::Form::formFooter($session)
+ .q{ |
+
+ };
+ }
+ $output .= q{
@@ -704,8 +743,6 @@ sub www_view {
phoneNumber => $transaction->get('shippingPhoneNumber'),
}) .q{
-
-
| }. $i18n->get("payment method") .q{ | }. $transaction->get('paymentDriverLabel') .q{ |
@@ -731,7 +768,7 @@ sub www_view {
# item detail
$output .= q{
-
+
| }.$i18n->get('date').q{ |
@@ -748,9 +785,13 @@ sub www_view {
};
foreach my $item (@{$transaction->getItems}) {
my $sku = $item->getSku;
- $output .= q{
+ $output .= WebGUI::Form::formHeader($session)
+ .WebGUI::Form::hidden($session, {name=>"shop",value=>"transaction"})
+ .WebGUI::Form::hidden($session, {name=>"method",value=>"updateItem"})
+ .WebGUI::Form::hidden($session, {name=>"transactionId",value=>$transaction->getId})
+ .WebGUI::Form::hidden($session, {name=>"itemId",value=>$item->getId})
+ .q{
-
-
};
}
$output .= q{
-
+
};
- # render data table
- $output .= q|
-
- |;
# send output
if ($print) {
@@ -857,12 +865,57 @@ Displays the configured item.
sub www_viewItem {
my ($class, $session) = @_;
- my $self = __PACKAGE__->new($session, $session->form->get("transactionId"));
+ my $self = $class->new($session, $session->form->get("transactionId"));
my $item = eval { $self->getItem($session->form->get("itemId")) };
if (WebGUI::Error->caught()) {
+ $session->errorHandler->error("Can't get item ".$session->form->get("itemId"));
return $class->www_view($session);
}
return $item->getSku->www_view;
}
+#-------------------------------------------------------------------
+
+=head2 www_update ( )
+
+Sets the properties for the transaction, specifically "notes".
+
+=cut
+
+sub www_update {
+ my ($class, $session) = @_;
+ return $session->privilege->insufficient unless (WebGUI::Shop::Admin->new($session)->canManage);
+ my $self = $class->new($session, $session->form->get("transactionId"));
+ my $form = $session->form;
+ $self->update({
+ notes => $form->get('notes'),
+ });
+ return $class->www_view($session);
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_updateItem ( )
+
+Sets the order status and tracking number.
+
+=cut
+
+sub www_updateItem {
+ my ($class, $session) = @_;
+ return $session->privilege->insufficient unless (WebGUI::Shop::Admin->new($session)->canManage);
+ my $self = $class->new($session, $session->form->get("transactionId"));
+ my $form = $session->form;
+ my $item = eval { $self->getItem($form->get("itemId")) };
+ if (WebGUI::Error->caught()) {
+ $session->errorHandler->error("Can't get item ".$form->get("itemId"));
+ return $class->www_view($session);
+ }
+ $item->update({
+ orderStatus => $form->get('orderStatus'),
+ shippingTrackingNumber => $form->get('shippingTrackingNumber'),
+ });
+ return $class->www_view($session);
+}
+
1;
diff --git a/lib/WebGUI/Shop/TransactionItem.pm b/lib/WebGUI/Shop/TransactionItem.pm
index 73e0a4117..45c7eccf4 100644
--- a/lib/WebGUI/Shop/TransactionItem.pm
+++ b/lib/WebGUI/Shop/TransactionItem.pm
@@ -147,7 +147,7 @@ Returns the money from this item to the user in the form of in-store credit.
sub issueCredit {
my $self = shift;
my $credit = WebGUI::Shop::Credit->new($self->transaction->session, $self->transaction->get('userId'));
- $credit->adjust($self->get('price'), "Issued credit on sku ".$self->get('assetId')." for transaction item ".$self->getId." on transaction ".$self->transaction->getId);
+ $credit->adjust(($self->get('price') * $self->get('quantity')), "Issued credit on sku ".$self->get('assetId')." for transaction item ".$self->getId." on transaction ".$self->transaction->getId);
$self->getSku->onRefund($self);
$self->update({orderStatus=>'Cancelled'});
}
diff --git a/lib/WebGUI/i18n/English/Shop.pm b/lib/WebGUI/i18n/English/Shop.pm
index c16999d13..01e6944dd 100644
--- a/lib/WebGUI/i18n/English/Shop.pm
+++ b/lib/WebGUI/i18n/English/Shop.pm
@@ -105,6 +105,12 @@ our $I18N = {
context => q|field label|
},
+ 'notes' => {
+ message => q|Notes|,
+ lastUpdated => 0,
+ context => q|field label|
+ },
+
'manage' => {
message => q|Manage|,
lastUpdated => 0,