1 package C4
::Suggestions
;
3 # Copyright 2000-2002 Katipo Communications
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 use C4
::Dates
qw(format_date);
27 use C4
::SQLHelper
qw(:all);
30 use List
::MoreUtils qw
<any
>;
31 use base
'Exporter'; # parent would be better there
34 &ConnectSuggestionAndBiblio
38 &GetSuggestionByStatus
39 &GetSuggestionFromBiblionumber
45 use C4
::Dates
qw(format_date_in_iso);
46 use vars
qw($VERSION @ISA @EXPORT);
49 # set the version for version checking
57 &GetSuggestionByStatus
61 &ConnectSuggestionAndBiblio
62 &GetSuggestionFromBiblionumber
63 &ConnectSuggestionAndBiblio
66 &GetSuggestionByStatus
67 &GetSuggestionFromBiblionumber
74 C4::Suggestions - Some useful functions for dealings with aqorders.
82 The functions in this module deal with the aqorders in OPAC and in librarian interface
84 A suggestion is done in the OPAC. It has the status "ASKED"
86 When a librarian manages the suggestion, he can set the status to "REJECTED" or "ACCEPTED".
88 When the book is ordered, the suggestion status becomes "ORDERED"
90 When a book is ordered and arrived in the library, the status becomes "AVAILABLE"
92 All aqorders of a borrower can be seen by the borrower itself.
93 Suggestions done by other borrowers can be seen when not "AVAILABLE"
97 =head2 SearchSuggestion
99 (\@array) = &SearchSuggestion($suggestionhashref_to_search)
101 searches for a suggestion
104 C<\@array> : the aqorders found. Array of hash.
105 Note the status is stored twice :
106 * in the status field
107 * as parameter ( for example ASKED => 1, or REJECTED => 1) . This is for template & translation purposes.
111 sub SearchSuggestion
{
113 my $dbh = C4
::Context
->dbh;
116 q{ SELECT suggestions.*,
117 U1.branchcode AS branchcodesuggestedby,
118 B1.branchname AS branchnamesuggestedby,
119 U1.surname AS surnamesuggestedby,
120 U1.firstname AS firstnamesuggestedby,
121 U1.email AS emailsuggestedby,
122 U1.borrowernumber AS borrnumsuggestedby,
123 U1.categorycode AS categorycodesuggestedby,
124 C1.description AS categorydescriptionsuggestedby,
125 U2.surname AS surnamemanagedby,
126 U2.firstname AS firstnamemanagedby,
127 B2.branchname AS branchnamesuggestedby,
128 U2.email AS emailmanagedby,
129 U2.branchcode AS branchcodemanagedby,
130 U2.borrowernumber AS borrnummanagedby
132 LEFT JOIN borrowers AS U1 ON suggestedby=U1.borrowernumber
133 LEFT JOIN branches AS B1 ON B1.branchcode=U1.branchcode
134 LEFT JOIN categories AS C1 ON C1.categorycode = U1.categorycode
135 LEFT JOIN borrowers AS U2 ON managedby=U2.borrowernumber
136 LEFT JOIN branches AS B2 ON B2.branchcode=U2.branchcode
137 LEFT JOIN categories AS C2 ON C2.categorycode = U2.categorycode
138 WHERE STATUS NOT IN ('CLAIMED')
140 if ( my $s = $suggestion->{$_} ) {
141 push @sql_params,'%'.$s.'%';
142 " and suggestions.$_ like ? ";
144 } qw( title author isbn publishercode collectiontitle )
147 my $userenv = C4
::Context
->userenv;
148 if (C4
::Context
->preference('IndependantBranches')) {
150 if (($userenv->{flags
} % 2) != 1 && !$suggestion->{branchcode
}){
151 push @sql_params,$$userenv{branch
};
152 push @query,q{ and (branchcode = ? or branchcode ='')};
157 foreach my $field (grep { my $fieldname=$_;
158 any
{$fieldname eq $_ } qw
<
159 STATUS branchcode itemtype suggestedby managedby acceptedby
160 bookfundid biblionumber
163 if ($$suggestion{$field}){
164 push @sql_params,$suggestion->{$field};
165 push @query, " and suggestions.$field=?";
168 push @query, " and (suggestions.$field='' OR suggestions.$field IS NULL)";
172 $debug && warn "@query";
173 my $sth=$dbh->prepare("@query");
174 $sth->execute(@sql_params);
176 while ( my $data=$sth->fetchrow_hashref ){
177 $$data{$$data{STATUS
}} = 1;
178 push(@results,$data);
185 \%sth = &GetSuggestion($ordernumber)
187 this function get the detail of the suggestion $ordernumber (input arg)
190 the result of the SQL query as a hash : $sth->fetchrow_hashref.
195 my ($ordernumber) = @_;
196 my $dbh = C4
::Context
->dbh;
202 my $sth = $dbh->prepare($query);
203 $sth->execute($ordernumber);
204 return($sth->fetchrow_hashref);
207 =head2 GetSuggestionFromBiblionumber
209 $ordernumber = &GetSuggestionFromBiblionumber($biblionumber)
211 Get a suggestion from it's biblionumber.
214 the id of the suggestion which is related to the biblionumber given on input args.
218 sub GetSuggestionFromBiblionumber
{
219 my ($biblionumber) = @_;
225 my $dbh=C4
::Context
->dbh;
226 my $sth = $dbh->prepare($query);
227 $sth->execute($biblionumber);
228 my ($ordernumber) = $sth->fetchrow;
232 =head2 GetSuggestionByStatus
234 $aqorders = &GetSuggestionByStatus($status,[$branchcode])
236 Get a suggestion from it's status
239 all the suggestion with C<$status>
243 sub GetSuggestionByStatus
{
245 my $branchcode = shift;
246 my $dbh = C4
::Context
->dbh;
247 my @sql_params=($status);
248 my $query = qq(SELECT suggestions
.*,
249 U1
.surname AS surnamesuggestedby
,
250 U1
.firstname AS firstnamesuggestedby
,
251 U1
.branchcode AS branchcodesuggestedby
,
252 B1
.branchname AS branchnamesuggestedby
,
253 U1
.borrowernumber AS borrnumsuggestedby
,
254 U1
.categorycode AS categorycodesuggestedby
,
255 C1
.description AS categorydescriptionsuggestedby
,
256 U2
.surname AS surnamemanagedby
,
257 U2
.firstname AS firstnamemanagedby
,
258 U2
.borrowernumber AS borrnummanagedby
260 LEFT JOIN borrowers AS U1 ON suggestedby
=U1
.borrowernumber
261 LEFT JOIN borrowers AS U2 ON managedby
=U2
.borrowernumber
262 LEFT JOIN categories AS C1 ON C1
.categorycode
=U1
.categorycode
263 LEFT JOIN branches AS B1 on B1
.branchcode
= U1
.branchcode
265 if (C4
::Context
->preference("IndependantBranches") || $branchcode) {
266 my $userenv = C4
::Context
->userenv;
268 unless ($userenv->{flags
} % 2 == 1){
269 push @sql_params,$userenv->{branch
};
270 $query .= " and (U1.branchcode = ? or U1.branchcode ='')";
274 push @sql_params,$branchcode;
275 $query .= " and (U1.branchcode = ? or U1.branchcode ='')";
279 my $sth = $dbh->prepare($query);
280 $sth->execute(@sql_params);
283 $results= $sth->fetchall_arrayref({});
287 =head2 CountSuggestion
289 &CountSuggestion($status)
291 Count the number of aqorders with the status given on input argument.
292 the arg status can be :
296 =item * ASKED : asked by the user, not dealed by the librarian
298 =item * ACCEPTED : accepted by the librarian, but not yet ordered
300 =item * REJECTED : rejected by the librarian (definitive status)
302 =item * ORDERED : ordered by the librarian (acquisition module)
307 the number of suggestion with this status.
311 sub CountSuggestion
{
313 my $dbh = C4
::Context
->dbh;
315 if (C4
::Context
->preference("IndependantBranches")){
316 my $userenv = C4
::Context
->userenv;
317 if ($userenv->{flags
} % 2 == 1){
323 $sth = $dbh->prepare($query);
324 $sth->execute($status);
329 FROM suggestions LEFT JOIN borrowers ON borrowers
.borrowernumber
=suggestions
.suggestedby
331 AND
(borrowers
.branchcode
='' OR borrowers
.branchcode
=?
)
333 $sth = $dbh->prepare($query);
334 $sth->execute($status,$userenv->{branch
});
343 $sth = $dbh->prepare($query);
344 $sth->execute($status);
346 my ($result) = $sth->fetchrow;
353 &NewSuggestion($suggestion);
355 Insert a new suggestion on database with value given on input arg.
360 my ($suggestion) = @_;
361 $suggestion->{STATUS
}="ASKED" unless $suggestion->{STATUS
};
362 return InsertInTable
("suggestions",$suggestion);
367 &ModSuggestion($suggestion)
369 Modify the suggestion according to the hash passed by ref.
370 The hash HAS to contain suggestionid
371 Data not defined is not updated unless it is a note or sort1
372 Send a mail to notify the user that did the suggestion.
374 Note that there is no function to modify a suggestion.
380 my $status_update_table=UpdateInTable
("suggestions", $suggestion);
381 # check mail sending.
382 if ($$suggestion{STATUS
}){
383 my $letter=C4
::Letters
::getletter
('suggestions',$suggestion->{STATUS
});
385 my $enqueued = C4
::Letters
::EnqueueLetter
({
387 borrowernumber
=>$suggestion->{suggestedby
},
388 suggestionid
=>$suggestion->{suggestionid
},
389 msg_transport_type
=>'email'
391 if (!$enqueued){warn "can't enqueue letter $letter";}
394 return $status_update_table;
397 =head2 ConnectSuggestionAndBiblio
399 &ConnectSuggestionAndBiblio($ordernumber,$biblionumber)
401 connect a suggestion to an existing biblio
405 sub ConnectSuggestionAndBiblio
{
406 my ($suggestionid,$biblionumber) = @_;
407 my $dbh=C4
::Context
->dbh;
413 my $sth = $dbh->prepare($query);
414 $sth->execute($biblionumber,$suggestionid);
419 &DelSuggestion($borrowernumber,$ordernumber)
421 Delete a suggestion. A borrower can delete a suggestion only if he is its owner.
426 my ($borrowernumber,$suggestionid,$type) = @_;
427 my $dbh = C4
::Context
->dbh;
428 # check that the suggestion comes from the suggestor
434 my $sth = $dbh->prepare($query);
435 $sth->execute($suggestionid);
436 my ($suggestedby) = $sth->fetchrow;
437 if ($type eq "intranet" || $suggestedby eq $borrowernumber ) {
439 DELETE FROM suggestions
442 $sth = $dbh->prepare($queryDelete);
443 my $suggestiondeleted=$sth->execute($suggestionid);
444 return $suggestiondeleted;
454 Koha Developement team <info@koha.org>