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{ -
- @@ -731,7 +768,7 @@ sub www_view { # item detail $output .= q{ -
}. $i18n->get("payment method") .q{}. $transaction->get('paymentDriverLabel') .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{ - @@ -775,7 +816,7 @@ sub www_view { }; } if ($item->get('orderStatus') eq 'Cancelled') { - $output .= q{}; + $output .= q{}; } else { $output .= q{}; + }) + .q{} + .q{}; } $output .= q{ - - + - }; } $output .= q{ -
}.$i18n->get('date').q{
}.$item->get('lastUpdated').q{ }.$item->get('configuredTitle').q{ }.$transaction->formatCurrency($item->get('price')).q{}.$i18n->get($item->get('orderStatus')).q{}.$i18n->get($item->get('orderStatus')).q{}.WebGUI::Form::selectBox($session, { @@ -786,58 +827,25 @@ sub www_view { Shipped => $i18n->get('Shipped'), Backordered => $i18n->get('Backordered'), }, - }).q{} + .WebGUI::Form::text($session, {name=>"shippingTrackingNumber", size=>15, value=>$item->get('shippingTrackingNumber')}) + .q{} + .WebGUI::Form::submit($session, {value=>$i18n->get('update'), extras=>' '}) + .WebGUI::Form::submit($session, {value=>$i18n->get('refund'), extras=>q|onclick="this.form.method.value='refundItem'"|}) + .q{}.WebGUI::Form::text($session, {name=>"shippingTrackingNumber", size=>15, value=>$item->get('shippingTrackingNumber')}).q{}.WebGUI::Form::submit($session, {value=>$i18n->get('update'), extras=>' '}) - .WebGUI::Form::submit($session, {value=>$i18n->get('refund'), extras=>q|onclick="this.form.method.value='refundItem'"|}) - .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,