use C4::Debug;
use C4::Serials::Frequency;
use C4::Serials::Numberpattern;
+use Koha::AdditionalField;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
&GetDistributedTo &SetDistributedTo
&getroutinglist &delroutingmember &addroutingmember
&reorder_members
- &check_routing &updateClaim &removeMissingIssue
+ &check_routing &updateClaim
&CountIssues
HasItems
&GetSubscriptionsFromBorrower
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my $subscription = $sth->fetchrow_hashref;
+
$subscription->{cannotedit} = not can_edit_subscription( $subscription );
+
+ # Add additional fields to the subscription into a new key "additional_fields"
+ my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+ tablename => 'subscription',
+ record_id => $subscriptionid,
+ });
+ $subscription->{additional_fields} = $additional_field_values->{$subscriptionid};
+
return $subscription;
}
sub SearchSubscriptions {
my ( $args ) = @_;
- my $query = q{
+ my $additional_fields = $args->{additional_fields} // [];
+ my $matching_record_ids_for_additional_fields = [];
+ if ( @$additional_fields ) {
+ $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids({
+ fields => $additional_fields,
+ tablename => 'subscription',
+ exact_match => 0,
+ });
+ return () unless @$matching_record_ids_for_additional_fields;
+ }
+
+ my $query = q|
SELECT
subscription.notes AS publicnotes,
subscriptionhistory.*,
LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
LEFT JOIN biblioitems ON biblioitems.biblionumber = subscription.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- };
+ |;
+ $query .= q| WHERE 1|;
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);
push @where_strs, "subscription.closed = ?";
push @where_args, "$args->{closed}";
}
+
if(@where_strs){
- $query .= " WHERE " . join(" AND ", @where_strs);
+ $query .= ' AND ' . join(' AND ', @where_strs);
+ }
+ if ( @$additional_fields ) {
+ $query .= ' AND subscriptionid IN ('
+ . join( ', ', @$matching_record_ids_for_additional_fields )
+ . ')';
}
$query .= " ORDER BY " . $args->{orderby} if $args->{orderby};
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
$sth->execute(@where_args);
- my $results = $sth->fetchall_arrayref( {} );
- $sth->finish;
+ my $results = $sth->fetchall_arrayref( {} );
for my $subscription ( @$results ) {
$subscription->{cannotedit} = not can_edit_subscription( $subscription );
$subscription->{cannotdisplay} = not can_show_subscription( $subscription );
+
+ my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+ record_id => $subscription->{subscriptionid},
+ tablename => 'subscription'
+ });
+ $subscription->{additional_fields} = $additional_field_values->{$subscription->{subscriptionid}};
}
return @$results;
# check if an alert must be sent... (= a letter is defined & status became "arrived"
if ( $subscription->{letter} && $status == ARRIVED && $oldstatus != ARRIVED ) {
require C4::Letters;
- C4::Letters::SendAlerts( 'issue', $subscription->{subscriptionid}, $subscription->{letter} );
+ C4::Letters::SendAlerts( 'issue', $serialid, $subscription->{letter} );
}
}
return unless ( $supplierid or $serialid );
my $dbh = C4::Context->dbh;
+
my $sth;
my $byserial = '';
if ($serialid) {
$line->{claimdate} = format_date( $line->{claimdate} );
}
$line->{"status".$line->{status}} = 1;
- push @issuelist, $line;
- }
- return @issuelist;
-}
-
-=head2 removeMissingIssue
-
-removeMissingIssue($subscriptionid)
-
-this function removes an issue from being part of the missing string in
-subscriptionlist.missinglist column
-
-called when a missing issue is found from the serials-recieve.pl file
-
-=cut
-sub removeMissingIssue {
- my ( $sequence, $subscriptionid ) = @_;
+ my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+ record_id => $line->{subscriptionid},
+ tablename => 'subscription'
+ });
+ %$line = ( %$line, additional_fields => $additional_field_values->{$line->{subscriptionid}} );
- return unless ($sequence and $subscriptionid);
-
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("SELECT * FROM subscriptionhistory WHERE subscriptionid = ?");
- $sth->execute($subscriptionid);
- my $data = $sth->fetchrow_hashref;
- my $missinglist = $data->{'missinglist'};
- my $missinglistbefore = $missinglist;
-
- # warn $missinglist." before";
- $missinglist =~ s/($sequence)//;
-
- # warn $missinglist." after";
- if ( $missinglist ne $missinglistbefore ) {
- $missinglist =~ s/\|\s\|/\|/g;
- $missinglist =~ s/^\| //g;
- $missinglist =~ s/\|$//g;
- my $sth2 = $dbh->prepare(
- "UPDATE subscriptionhistory
- SET missinglist = ?
- WHERE subscriptionid = ?"
- );
- $sth2->execute( $missinglist, $subscriptionid );
+ push @issuelist, $line;
}
- return;
+ return @issuelist;
}
=head2 updateClaim
$day = $fa_day <= $days_in_month ? $fa_day : $days_in_month;
} else {
# Try to guess the next day in month
- my $delta_days = int((28 - ($fa_day - 1)) / $freqdata->{issuesperunit});
+ my $days_in_month = Days_in_Month($year, $month);
+ my $delta_days = int(($days_in_month - ($fa_day - 1)) / $freqdata->{issuesperunit});
($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days);
$subscription->{countissuesperunit}++;
}
$day = $fa_day <= $days_in_month ? $fa_day : $days_in_month;
} else {
# Try to guess the next day in year
- my $delta_days = int((365 - ($fa_day - 1)) / $freqdata->{issuesperunit});
+ my $days_in_year = Days_in_Year($year,12); #Sum the days of all the months of this year
+ my $delta_days = int(($days_in_year - ($fa_day - 1)) / $freqdata->{issuesperunit});
($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days);
$subscription->{countissuesperunit}++;
}
=head2 is_barcode_in_use
-Returns number of occurence of the barcode in the items table
+Returns number of occurrences of the barcode in the items table
Can be used as a boolean test of whether the barcode has
been deployed as yet
sub is_barcode_in_use {
my $barcode = shift;
my $dbh = C4::Context->dbh;
- my $occurences = $dbh->selectall_arrayref(
+ my $occurrences = $dbh->selectall_arrayref(
'SELECT itemnumber from items where barcode = ?',
{}, $barcode
);
- return @{$occurences};
+ return @{$occurrences};
}
=head2 CloseSubscription