+=head2 SearchSubscriptions
+
+ @results = SearchSubscriptions($args);
+
+This function returns a list of hashrefs, one for each subscription
+that meets the conditions specified by the $args hashref.
+
+The valid search fields are:
+
+ biblionumber
+ title
+ issn
+ ean
+ callnumber
+ location
+ publisher
+ bookseller
+ branch
+ expiration_date
+ closed
+
+The expiration_date search field is special; it specifies the maximum
+subscription expiration date.
+
+=cut
+
+sub SearchSubscriptions {
+ my ( $args ) = @_;
+
+ my $query = qq{
+ SELECT
+ subscription.notes AS publicnotes,
+ subscription.*,
+ subscriptionhistory.*,
+ biblio.notes AS biblionotes,
+ biblio.title,
+ biblio.author,
+ biblioitems.issn
+ FROM subscription
+ LEFT JOIN subscriptionhistory USING(subscriptionid)
+ LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
+ LEFT JOIN biblioitems ON biblioitems.biblionumber = subscription.biblionumber
+ LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
+ };
+ my @where_strs;
+ my @where_args;
+ if( $args->{biblionumber} ) {
+ push @where_strs, "biblio.biblionumber = ?";
+ push @where_args, $args->{biblionumber};
+ }
+ if( $args->{title} ){
+ my @words = split / /, $args->{title};
+ my (@strs, @args);
+ foreach my $word (@words) {
+ push @strs, "biblio.title LIKE ?";
+ push @args, "%$word%";
+ }
+ if (@strs) {
+ push @where_strs, '(' . join (' AND ', @strs) . ')';
+ push @where_args, @args;
+ }
+ }
+ if( $args->{issn} ){
+ push @where_strs, "biblioitems.issn LIKE ?";
+ push @where_args, "%$args->{issn}%";
+ }
+ if( $args->{ean} ){
+ push @where_strs, "biblioitems.ean LIKE ?";
+ push @where_args, "%$args->{ean}%";
+ }
+ if ( $args->{callnumber} ) {
+ push @where_strs, "subscription.callnumber LIKE ?";
+ push @where_args, "%$args->{callnumber}%";
+ }
+ if( $args->{publisher} ){
+ push @where_strs, "biblioitems.publishercode LIKE ?";
+ push @where_args, "%$args->{publisher}%";
+ }
+ if( $args->{bookseller} ){
+ push @where_strs, "aqbooksellers.name LIKE ?";
+ push @where_args, "%$args->{bookseller}%";
+ }
+ if( $args->{branch} ){
+ push @where_strs, "subscription.branchcode = ?";
+ push @where_args, "$args->{branch}";
+ }
+ if ( $args->{location} ) {
+ push @where_strs, "subscription.location = ?";
+ push @where_args, "$args->{location}";
+ }
+ if ( $args->{expiration_date} ) {
+ push @where_strs, "subscription.enddate <= ?";
+ push @where_args, "$args->{expiration_date}";
+ }
+ if( defined $args->{closed} ){
+ push @where_strs, "subscription.closed = ?";
+ push @where_args, "$args->{closed}";
+ }
+ if(@where_strs){
+ $query .= " WHERE " . join(" AND ", @where_strs);
+ }
+
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@where_args);
+ my $results = $sth->fetchall_arrayref( {} );
+ $sth->finish;
+
+ for my $subscription ( @$results ) {
+ $subscription->{cannotedit} = not can_edit_subscription( $subscription );
+ $subscription->{cannotdisplay} =
+ ( C4::Context->preference("IndependentBranches") &&
+ C4::Context->userenv &&
+ $subscription->{branchcode} ne C4::Context->userenv->{'branch'} ) ? 1 : 0;
+ }
+
+ return @$results;