From 0200639b0077398fe2ce2cbe915c5c73b6dd9a01 Mon Sep 17 00:00:00 2001
From: Jonathan Druart
Date: Wed, 18 Jan 2012 14:16:16 +0100
Subject: [PATCH] Bug 5346: Linking suggestions and orders.
Display suggestion info in acquisition module:
basket.pl
neworderempty.pl
orderreceive.pl
parcel.pl
To Test:
Create a suggestion and accept it.
Create a new order from this suggestion
Receive this order
For each step, check if suggestion info are visible.
Signed-off-by: Katrin Fischer
Test provides more unit tests, all complete successfully.
perl t/db_dependent/Suggestions.t
Note: test case should be cleaned up after running tests.
Display changes are consistent and information about the suggestion
is shown on every important screen now.
I created an order from a suggestion and one from an existing record.
No problems found.
---
C4/Suggestions.pm | 60 ++++++++++++++++++-
acqui/basket.pl | 9 +++
acqui/neworderempty.pl | 7 ++-
acqui/orderreceive.pl | 8 ++-
acqui/parcel.pl | 13 +++-
.../prog/en/modules/acqui/basket.tt | 6 ++
.../prog/en/modules/acqui/neworderempty.tt | 14 ++++-
.../prog/en/modules/acqui/orderreceive.tt | 13 ++++
.../prog/en/modules/acqui/parcel.tt | 12 ++++
t/db_dependent/Suggestions.t | 8 ++-
10 files changed, 141 insertions(+), 9 deletions(-)
diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm
index ccc0c8e6ac..c9461f5dd2 100644
--- a/C4/Suggestions.pm
+++ b/C4/Suggestions.pm
@@ -40,6 +40,8 @@ our @EXPORT = qw<
GetSuggestion
GetSuggestionByStatus
GetSuggestionFromBiblionumber
+ GetSuggestionInfoFromBiblionumber
+ GetSuggestionInfo
ModStatus
ModSuggestion
NewSuggestion
@@ -209,13 +211,65 @@ sub GetSuggestionFromBiblionumber {
my $query = q{
SELECT suggestionid
FROM suggestions
- WHERE biblionumber=?
+ WHERE biblionumber=? LIMIT 1
};
my $dbh=C4::Context->dbh;
my $sth = $dbh->prepare($query);
$sth->execute($biblionumber);
- my ($ordernumber) = $sth->fetchrow;
- return $ordernumber;
+ my ($suggestionid) = $sth->fetchrow;
+ return $suggestionid;
+}
+
+=head2 GetSuggestionInfoFromBiblionumber
+
+Get a suggestion and borrower's informations from it's biblionumber.
+
+return :
+all informations (suggestion and borrower) of the suggestion which is related to the biblionumber given.
+
+=cut
+
+sub GetSuggestionInfoFromBiblionumber {
+ my ($biblionumber) = @_;
+ my $query = qq{
+ SELECT suggestions.*,
+ U1.surname AS surnamesuggestedby,
+ U1.firstname AS firstnamesuggestedby,
+ U1.borrowernumber AS borrnumsuggestedby
+ FROM suggestions
+ LEFT JOIN borrowers AS U1 ON suggestedby=U1.borrowernumber
+ WHERE biblionumber = ? LIMIT 1
+ };
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare($query);
+ $sth->execute($biblionumber);
+ return $sth->fetchrow_hashref;
+}
+
+=head2 GetSuggestionInfo
+
+Get a suggestion and borrower's informations from it's suggestionid
+
+return :
+all informations (suggestion and borrower) of the suggestion which is related to the suggestionid given.
+
+=cut
+
+sub GetSuggestionInfo {
+ my ($suggestionid) = @_;
+ my $query = qq{
+ SELECT suggestions.*,
+ U1.surname AS surnamesuggestedby,
+ U1.firstname AS firstnamesuggestedby,
+ U1.borrowernumber AS borrnumsuggestedby
+ FROM suggestions
+ LEFT JOIN borrowers AS U1 ON suggestedby=U1.borrowernumber
+ WHERE suggestionid = ? LIMIT 1
+ };
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare($query);
+ $sth->execute($suggestionid);
+ return $sth->fetchrow_hashref;
}
=head2 GetSuggestionByStatus
diff --git a/acqui/basket.pl b/acqui/basket.pl
index b55973283e..bd7d45da41 100755
--- a/acqui/basket.pl
+++ b/acqui/basket.pl
@@ -34,6 +34,8 @@ use C4::Debug;
use C4::Biblio;
use C4::Members qw/GetMember/; #needed for permissions checking for changing basketgroup of a basket
use C4::Items;
+use C4::Suggestions;
+
=head1 NAME
basket.pl
@@ -237,6 +239,7 @@ if ( $op eq 'delete_confirm' ) {
my $qty_total;
my @books_loop;
+ my $suggestion;
for my $order ( @results ) {
my $rrp = $order->{'listprice'} || 0;
@@ -303,6 +306,12 @@ if ( $op eq 'delete_confirm' ) {
} else {
$line{'title'} = "Deleted bibliographic notice, can't find title.";
}
+
+ $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber});
+ $line{suggestionid} = $suggestion->{suggestionid};
+ $line{surnamesuggestedby} = $suggestion->{surnamesuggestedby};
+ $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
+
push @books_loop, \%line;
}
diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl
index 459dfe88a6..4c3daafa93 100755
--- a/acqui/neworderempty.pl
+++ b/acqui/neworderempty.pl
@@ -204,6 +204,9 @@ else { #modify order
$booksellerid = $data2->{'booksellerid'};
}
+my $suggestion;
+$suggestion = GetSuggestionInfo($suggestionid) if $suggestionid;
+
# get currencies (for change rates calcs if needed)
my $active_currency = GetCurrency();
my $default_currency;
@@ -359,7 +362,9 @@ $template->param(
authorisedbyname => $basket->{'authorisedbyname'},
closedate => C4::Dates->new($basket->{'closedate'},'iso')->output,
# order details
- suggestionid => $suggestionid,
+ suggestionid => $suggestion->{suggestionid},
+ surnamesuggestedby => $suggestion->{surnamesuggestedby},
+ firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
biblionumber => $biblionumber,
uncertainprice => $data->{'uncertainprice'},
authorisedbyname => $borrower->{'firstname'} . " " . $borrower->{'surname'},
diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl
index 753071dea6..451f858ae2 100755
--- a/acqui/orderreceive.pl
+++ b/acqui/orderreceive.pl
@@ -75,6 +75,7 @@ use C4::Members;
use C4::Branch; # GetBranches
use C4::Items;
use C4::Biblio;
+use C4::Suggestions;
my $input = new CGI;
@@ -135,6 +136,8 @@ if ( $count == 1 ) {
@$results[0]->{'unitprice'} = '';
}
+ my $suggestion = GetSuggestionInfoFromBiblionumber(@$results[0]->{'biblionumber'});
+
my $authorisedby = @$results[0]->{'authorisedby'};
my $member = GetMember( borrowernumber => $authorisedby );
@@ -167,7 +170,10 @@ if ( $count == 1 ) {
invoice => $invoice,
datereceived => $datereceived->output(),
datereceived_iso => $datereceived->output('iso'),
- notes => $order->{notes}
+ notes => $order->{notes},
+ suggestionid => $suggestion->{suggestionid},
+ surnamesuggestedby => $suggestion->{surnamesuggestedby},
+ firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
);
}
else {
diff --git a/acqui/parcel.pl b/acqui/parcel.pl
index c256c6067c..46582d3f1e 100755
--- a/acqui/parcel.pl
+++ b/acqui/parcel.pl
@@ -67,6 +67,7 @@ use C4::Items;
use CGI;
use C4::Output;
use C4::Dates qw/format_date format_date_in_iso/;
+use C4::Suggestions;
use JSON;
my $input=new CGI;
@@ -178,6 +179,11 @@ for (my $i = 0 ; $i < $countlines ; $i++) {
$totalprice += $parcelitems[$i]->{'unitprice'};
$line{unitprice} = sprintf($cfstr, $parcelitems[$i]->{'unitprice'});
+ my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber});
+ $line{suggestionid} = $suggestion->{suggestionid};
+ $line{surnamesuggestedby} = $suggestion->{surnamesuggestedby};
+ $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
+
#double FIXME - totalfreight is redefined later.
# FIXME - each order in a parcel holds the freight for the whole parcel. This means if you receive a parcel with items from multiple budgets, you'll see the freight charge in each budget..
@@ -230,7 +236,12 @@ for (my $i = 0 ; $i < $countpendings ; $i++) {
$itemholds += $nb;
}
}
-
+
+ my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber});
+ $line{suggestionid} = $suggestion->{suggestionid};
+ $line{surnamesuggestedby} = $suggestion->{surnamesuggestedby};
+ $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
+
# if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
$line{can_del_bib} = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !(@subscriptions) && !($holds);
$line{items} = ($itemcount) - (scalar @items);
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
index aaea6c0ff5..1632278f0d 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt
@@ -283,6 +283,12 @@
[% IF ( books_loo.issn ) %] - [% books_loo.issn %][% END %]
[% IF ( books_loo.publishercode ) %], [% books_loo.publishercode %][% END %]
[% IF ( books_loo.publicationyear ) %], [% books_loo.publicationyear %][% END %]
+ [% IF ( books_loo.suggestionid ) %]
+
+ Suggested by [% books_loo.surnamesuggestedby %]
+ [% IF ( books_loo.firstnamesuggestedby ) %], [% books_loo.firstnamesuggestedby %] [% END %]
+ (from suggestion #[% books_loo.suggestionid %])
+ [% END %]
[% books_loo.rrp %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt
index e1dbbde8ce..6a6fc6592b 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt
@@ -166,7 +166,6 @@ $(document).ready(function()
[% ELSE %]
New order
[% END %]
- [% IF ( suggestionid ) %](defined from suggestion #[% suggestionid %])[% END %]
[% IF ( basketno ) %]
@@ -310,6 +309,19 @@ $(document).ready(function()
[% END %]
+
+ [% IF ( suggestionid ) %]
+
+ [% END %]
+
[% IF ( items ) %]
+
+ [% IF ( suggestionid ) %]
+
+ [% END %]
+
[% IF ( items ) %]