cffb47ac5d
- add a class SharedContent.pm to communicate with Mana-KB server - add a link in serials-menu.inc to serials_search.pl to open a mana-subscription research form - modify the research form in serials-search.tt to show the right fields for Mana-KB - create datatable in mana-subscription-search-result.inc to show results from a research on Mana-KB - modify serials-search.pl to manage research on Mana-KB - add a mana_id to subscription table - add a share button on serials-toolbar.inc and a modal to ask the language of the share and to alert if the subscription is already link to a Mana-KB subscription model - add function in C4/Serials to get all the info for a subscription sharing - modify subscription-detail.pl to manage sharing to Mana-KB - modify subscription-add.tt and subscription.pl to manage a import from Mana-KB during a subscription creation - add 2 script in svc for ajax calling from subscription-add.tt to communicate with Mana-KB server during a asubscription creation - add a function in Subscription.pm to have all the info for a Mana-KB research from a biblionumber - modify functions used by subscription-add.pl in C4/Serials to manage a frequency which came from Mana-KB server and not already created on the koha database, and modify the tests of the said functions Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Rebased-by: Alex Arnaud <alex.arnaud@biblibre.com> (2018-07-04) Signed-off-by: Michal Denar <black23@gmail.com> Signed-off-by: Michal Denar <black23@gmail.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
202 lines
6.9 KiB
Perl
Executable file
202 lines
6.9 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2011-2013 Biblibre SARL
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
=head1 NAME
|
|
|
|
showpredictionpattern.pl
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This script calculate numbering of serials based on numbering pattern, and
|
|
publication date, based on frequency and first publication date.
|
|
|
|
=cut
|
|
|
|
use Modern::Perl;
|
|
|
|
use CGI qw ( -utf8 );
|
|
use Date::Calc qw(Today Day_of_Year Week_of_Year Day_of_Week Days_in_Year Delta_Days Add_Delta_Days Add_Delta_YM);
|
|
use C4::Auth;
|
|
use C4::Output;
|
|
use C4::Serials;
|
|
use C4::Serials::Frequency;
|
|
use Koha::DateUtils;
|
|
|
|
my $input = new CGI;
|
|
my ($template, $loggedinuser, $cookie, $flags) = get_template_and_user( {
|
|
template_name => 'serials/showpredictionpattern.tt',
|
|
query => $input,
|
|
type => 'intranet',
|
|
authnotrequired => 0,
|
|
flagsrequired => { 'serials' => '*' },
|
|
} );
|
|
|
|
my $subscriptionid = $input->param('subscriptionid');
|
|
my $frequencyid = $input->param('frequency');
|
|
my $firstacquidate = $input->param('firstacquidate');
|
|
my $nextacquidate = $input->param('nextacquidate');
|
|
my $enddate = $input->param('enddate');
|
|
my $subtype = $input->param('subtype');
|
|
my $sublength = $input->param('sublength');
|
|
my $custompattern = $input->param('custompattern');
|
|
|
|
|
|
my $frequency;
|
|
if ( $frequencyid eq 'mana' ) {
|
|
$frequency = {
|
|
'id' => undef,
|
|
'displayorder' => undef,
|
|
'description' => scalar $input->param('sfdescription') // '',
|
|
'unitsperissue' => scalar $input->param('unitsperissue') // '',
|
|
'issuesperunit' => scalar $input->param('issuesperunit') // '',
|
|
'unit' => scalar $input->param('unit') // ''
|
|
};
|
|
}
|
|
else {
|
|
$frequency = GetSubscriptionFrequency($frequencyid);
|
|
}
|
|
|
|
my %pattern = (
|
|
numberingmethod => scalar $input->param('numberingmethod') // '',
|
|
numbering1 => scalar $input->param('numbering1') // '',
|
|
numbering2 => scalar $input->param('numbering2') // '',
|
|
numbering3 => scalar $input->param('numbering3') // '',
|
|
add1 => scalar $input->param('add1') // '',
|
|
add2 => scalar $input->param('add2') // '',
|
|
add3 => scalar $input->param('add3') // '',
|
|
whenmorethan1 => scalar $input->param('whenmorethan1') // '',
|
|
whenmorethan2 => scalar $input->param('whenmorethan2') // '',
|
|
whenmorethan3 => scalar $input->param('whenmorethan3') // '',
|
|
setto1 => scalar $input->param('setto1') // '',
|
|
setto2 => scalar $input->param('setto2') // '',
|
|
setto3 => scalar $input->param('setto3') // '',
|
|
every1 => scalar $input->param('every1') // '',
|
|
every2 => scalar $input->param('every2') // '',
|
|
every3 => scalar $input->param('every3') // '',
|
|
);
|
|
|
|
$firstacquidate = eval { output_pref( { str => $firstacquidate, dateonly => 1, dateformat => 'iso' } ); }
|
|
or output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
|
|
|
|
$enddate = eval { output_pref( { str => $enddate, dateonly => 1, dateformat => 'iso' } ); };
|
|
|
|
if($nextacquidate) {
|
|
$nextacquidate = eval { output_pref( { str => $nextacquidate, dateonly => 1, dateformat => 'iso' } ); };
|
|
} else {
|
|
$nextacquidate = $firstacquidate;
|
|
}
|
|
my $date = $nextacquidate;
|
|
|
|
my %subscription = (
|
|
locale => scalar $input->param('locale') // '',
|
|
lastvalue1 => scalar $input->param('lastvalue1') // '',
|
|
lastvalue2 => scalar $input->param('lastvalue2') // '',
|
|
lastvalue3 => scalar $input->param('lastvalue3') // '',
|
|
innerloop1 => scalar $input->param('innerloop1') // '',
|
|
innerloop2 => scalar $input->param('innerloop2') // '',
|
|
innerloop3 => scalar $input->param('innerloop3') // '',
|
|
irregularity => '',
|
|
countissuesperunit => 1,
|
|
firstacquidate => $firstacquidate,
|
|
);
|
|
|
|
my $issuenumber;
|
|
if(defined $subscriptionid) {
|
|
($issuenumber) = C4::Serials::GetFictiveIssueNumber(\%subscription, $date, $frequency);
|
|
} else {
|
|
$issuenumber = 1;
|
|
}
|
|
|
|
my @predictions_loop;
|
|
my ($calculated) = GetSeq(\%subscription, \%pattern);
|
|
push @predictions_loop, {
|
|
number => $calculated,
|
|
publicationdate => $date,
|
|
issuenumber => $issuenumber,
|
|
dow => Day_of_Week(split /-/, $date),
|
|
};
|
|
my @irreg = ();
|
|
if(defined $subscriptionid) {
|
|
@irreg = C4::Serials::GetSubscriptionIrregularities($subscriptionid);
|
|
while(@irreg && $issuenumber > $irreg[0]) {
|
|
shift @irreg;
|
|
}
|
|
if(@irreg && $issuenumber == $irreg[0]){
|
|
$predictions_loop[0]->{'not_published'} = 1;
|
|
shift @irreg;
|
|
}
|
|
}
|
|
|
|
my $i = 1;
|
|
while( $i < 1000 ) {
|
|
my %line;
|
|
|
|
if(defined $date){
|
|
$date = GetNextDate(\%subscription, $date, $frequency);
|
|
}
|
|
if(defined $date){
|
|
$line{'publicationdate'} = $date;
|
|
$line{'dow'} = Day_of_Week(split /-/, $date);
|
|
}
|
|
|
|
# Check if we don't have exceed end date
|
|
if($sublength){
|
|
if($subtype eq "issues" && $i >= $sublength){
|
|
last;
|
|
} elsif($subtype eq "weeks" && $date && Delta_Days( split(/-/, $date), Add_Delta_Days( split(/-/, $firstacquidate), 7*$sublength - 1 ) ) < 0) {
|
|
last;
|
|
} elsif($subtype eq "months" && $date && (Delta_Days( split(/-/, $date), Add_Delta_YM( split(/-/, $firstacquidate), 0, $sublength) ) - 1) < 0 ) {
|
|
last;
|
|
}
|
|
}
|
|
if($enddate && $date && Delta_Days( split(/-/, $date), split(/-/, $enddate) ) <= 0 ) {
|
|
last;
|
|
}
|
|
|
|
($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern, $frequency);
|
|
$issuenumber++;
|
|
$line{'number'} = $calculated;
|
|
$line{'issuenumber'} = $issuenumber;
|
|
if(@irreg && $issuenumber == $irreg[0]){
|
|
$line{'not_published'} = 1;
|
|
shift @irreg;
|
|
}
|
|
push @predictions_loop, \%line;
|
|
|
|
$i++;
|
|
}
|
|
|
|
$template->param(
|
|
predictions_loop => \@predictions_loop,
|
|
);
|
|
|
|
if ( $frequency->{unit} and not $custompattern ) {
|
|
$template->param( ask_for_irregularities => 1 );
|
|
if ( $frequency->{unit} eq 'day' and $frequency->{unitsperissue} == 1 ) {
|
|
$template->param( daily_options => 1 );
|
|
}
|
|
}
|
|
|
|
if ( ( $date && $enddate && $date ne $enddate )
|
|
or ( $subtype eq 'issues' && $i < $sublength ) )
|
|
{
|
|
$template->param( not_consistent_end_date => 1 );
|
|
}
|
|
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|