X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FSerials.pm;h=76d3fc7e5ef2970e1f64d76078ecdeafff16bd74;hb=b00ec06968e6377c61523e72e0a49e6c9f8bf8b8;hp=cedbcfff867291906b757aaa4649b9a00a25c830;hpb=ee3eee451d2c36ff58f9443c86a8522ef905eca1;p=koha_fer diff --git a/C4/Serials.pm b/C4/Serials.pm index cedbcfff86..76d3fc7e5e 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -55,6 +55,7 @@ BEGIN { &CountIssues HasItems &GetSubscriptionsFromBorrower + &subscriptionCurrentlyOnOrder ); } @@ -93,7 +94,13 @@ sub GetSuppliersWithLateIssues { FROM subscription LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id - WHERE id > 0 AND ((planneddate < now() AND serial.status=1) OR serial.STATUS = 3 OR serial.STATUS = 4) ORDER BY name|; + WHERE id > 0 + AND ( + (planneddate < now() AND serial.status=1) + OR serial.STATUS = 3 OR serial.STATUS = 4 + ) + AND subscription.closed = 0 + ORDER BY name|; return $dbh->selectall_arrayref($query, { Slice => {} }); } @@ -122,6 +129,7 @@ sub GetLateIssues { LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) AND subscription.aqbooksellerid=? + AND subscription.closed = 0 ORDER BY title |; $sth = $dbh->prepare($query); @@ -134,6 +142,7 @@ sub GetLateIssues { LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) + AND subscription.closed = 0 ORDER BY title |; $sth = $dbh->prepare($query); @@ -207,7 +216,7 @@ sub GetSerialInformation { my $dbh = C4::Context->dbh; my $query = qq| SELECT serial.*, serial.notes as sernotes, serial.status as serstatus,subscription.*,subscription.subscriptionid as subsid |; - if ( C4::Context->preference('IndependantBranches') + if ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'} ) { @@ -299,7 +308,7 @@ $subs = GetSubscription($subscriptionid) this function returns the subscription which has $subscriptionid as id. return : a hashref. This hash containts -subscription, subscriptionhistory, aqbudget.bookfundid, biblio.title +subscription, subscriptionhistory, aqbooksellers.name, biblio.title =cut @@ -312,7 +321,7 @@ sub GetSubscription { aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle, subscription.biblionumber as bibnum); - if ( C4::Context->preference('IndependantBranches') + if ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'} ) { @@ -327,7 +336,7 @@ sub GetSubscription { WHERE subscription.subscriptionid = ? ); - # if (C4::Context->preference('IndependantBranches') && + # if (C4::Context->preference('IndependentBranches') && # C4::Context->userenv && # C4::Context->userenv->{'flags'} != 1){ # # $debug and warn "flags: ".C4::Context->userenv->{'flags'}; @@ -361,7 +370,7 @@ sub GetFullSubscription { biblio.title as bibliotitle, subscription.branchcode AS branchcode, subscription.subscriptionid AS subscriptionid |; - if ( C4::Context->preference('IndependantBranches') + if ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'} ) { @@ -481,7 +490,7 @@ sub GetSubscriptionsFromBiblionumber { $subs->{ "numberpattern" . $subs->{numberpattern} } = 1; $subs->{ "status" . $subs->{'status'} } = 1; $subs->{'cannotedit'} = - ( C4::Context->preference('IndependantBranches') + ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{flags} % 2 != 1 && C4::Context->userenv->{branch} @@ -521,7 +530,7 @@ sub GetFullSubscriptionsFromBiblionumber { biblio.title as bibliotitle, subscription.branchcode AS branchcode, subscription.subscriptionid AS subscriptionid|; - if ( C4::Context->preference('IndependantBranches') + if ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'} ) { @@ -621,7 +630,7 @@ sub GetSubscriptions { while ( my $line = $sth->fetchrow_hashref ) { $line->{'cannotedit'} = - ( C4::Context->preference('IndependantBranches') + ( C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{flags} % 2 != 1 && C4::Context->userenv->{branch} @@ -662,8 +671,16 @@ sub SearchSubscriptions { push @where_args, $args->{biblionumber}; } if( $args->{title} ){ - push @where_strs, "biblio.title LIKE ?"; - push @where_args, "%$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 ?"; @@ -685,7 +702,10 @@ sub SearchSubscriptions { push @where_strs, "subscription.branchcode = ?"; push @where_args, "$args->{branch}"; } - + if( defined $args->{closed} ){ + push @where_strs, "subscription.closed = ?"; + push @where_args, "$args->{closed}"; + } if(@where_strs){ $query .= " WHERE " . join(" AND ", @where_strs); } @@ -1114,18 +1134,18 @@ sub ModSerialStatus { $sth->execute($subscriptionid); my ( $missinglist, $recievedlist ) = $sth->fetchrow; if ( $status == 2 ) { - $recievedlist .= "; $serialseq" - unless ( index( "$recievedlist", "$serialseq" ) >= 0 ); + if $recievedlist!~/(^|;)\s*$serialseq(?=;|$)/; + } + # in case serial has been previously marked as missing + if (grep /$status/, (1,2,3,7)) { + $missinglist=~ s/(^|;)\s*$serialseq(?=;|$)//g; } - - # warn "missinglist : $missinglist serialseq :$serialseq, ".index("$missinglist","$serialseq"); $missinglist .= "; $serialseq" - if ( $status == 4 - and not index( "$missinglist", "$serialseq" ) >= 0 ); + if $status==4 && $missinglist!~/(^|;)\s*$serialseq(?=;|$)/; $missinglist .= "; not issued $serialseq" - if ( $status == 5 - and index( "$missinglist", "$serialseq" ) >= 0 ); + if $status==5 && $missinglist!~/(^|;)\s*$serialseq(?=;|$)/; + $query = "UPDATE subscriptionhistory SET recievedlist=?, missinglist=? WHERE subscriptionid=?"; $sth = $dbh->prepare($query); $recievedlist =~ s/^; //; @@ -1422,7 +1442,7 @@ sub ReNewSubscription { # renew subscription $query = qq| UPDATE subscription - SET startdate=?,numberlength=?,weeklength=?,monthlength=? + SET startdate=?,numberlength=?,weeklength=?,monthlength=?,reneweddate=NOW() WHERE subscriptionid=? |; $sth = $dbh->prepare($query); @@ -2465,6 +2485,76 @@ sub is_barcode_in_use { return @{$occurences}; } +=head2 CloseSubscription +Close a subscription given a subscriptionid +=cut +sub CloseSubscription { + my ( $subscriptionid ) = @_; + return unless $subscriptionid; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare( qq{ + UPDATE subscription + SET closed = 1 + WHERE subscriptionid = ? + } ); + $sth->execute( $subscriptionid ); + + # Set status = missing when status = stopped + $sth = $dbh->prepare( qq{ + UPDATE serial + SET status = 8 + WHERE subscriptionid = ? + AND status = 1 + } ); + $sth->execute( $subscriptionid ); +} + +=head2 ReopenSubscription +Reopen a subscription given a subscriptionid +=cut +sub ReopenSubscription { + my ( $subscriptionid ) = @_; + return unless $subscriptionid; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare( qq{ + UPDATE subscription + SET closed = 0 + WHERE subscriptionid = ? + } ); + $sth->execute( $subscriptionid ); + + # Set status = expected when status = stopped + $sth = $dbh->prepare( qq{ + UPDATE serial + SET status = 1 + WHERE subscriptionid = ? + AND status = 8 + } ); + $sth->execute( $subscriptionid ); +} + +=head2 subscriptionCurrentlyOnOrder + + $bool = subscriptionCurrentlyOnOrder( $subscriptionid ); + +Return 1 if subscription is currently on order else 0. + +=cut + +sub subscriptionCurrentlyOnOrder { + my ( $subscriptionid ) = @_; + my $dbh = C4::Context->dbh; + my $query = qq| + SELECT COUNT(*) FROM aqorders + WHERE subscriptionid = ? + AND datereceived IS NULL + AND datecancellationprinted IS NULL + |; + my $sth = $dbh->prepare( $query ); + $sth->execute($subscriptionid); + return $sth->fetchrow_array; +} + 1; __END__